mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 11:34:19 +01:00
Datumizes spells (#24242)
* datumized spells * finished * last changes * conflict * Update code/datums/spells/alien_spells/transfer_plasma.dm * conflicts * shitty runtime fix until i get to this tomorrow * Update code/datums/spell.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spell_handler/alien_spell_handler.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/alien_spells/regurgitate.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/alien_spells/regurgitate.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/bloodcrawl.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/bloodcrawl.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/modules/awaymissions/mission_code/ruins/wizardcrash.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/modules/research/xenobiology/xenobiology.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/modules/mob/living/carbon/superheroes.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/conjure.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/ethereal_jaunt.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/emplosion.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/turf_teleport.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/wizard_spells.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/wizard_spells.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/game/dna/mutations/mutation_powers.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/wizard_spells.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/datums/spells/wizard_spells.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/game/dna/mutations/mutation_powers.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * Update code/game/gamemodes/miniantags/revenant/revenant_abilities.dm Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> * guess who just rework the entire malf ai actionsf ai * gc better --------- Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
@@ -17,10 +17,10 @@
|
||||
/// Nullrods and holywater make their abilities cost more
|
||||
var/nullified = 0
|
||||
/// a list of powers that all vampires unlock and at what blood level they unlock them, the rest of their powers are found in the vampire_subclass datum
|
||||
var/list/upgrade_tiers = list(/obj/effect/proc_holder/spell/vampire/self/rejuvenate = 0,
|
||||
/obj/effect/proc_holder/spell/vampire/glare = 0,
|
||||
var/list/upgrade_tiers = list(/datum/spell/vampire/self/rejuvenate = 0,
|
||||
/datum/spell/vampire/glare = 0,
|
||||
/datum/vampire_passive/vision = 100,
|
||||
/obj/effect/proc_holder/spell/vampire/self/specialize = 150,
|
||||
/datum/spell/vampire/self/specialize = 150,
|
||||
/datum/vampire_passive/regen = 200,
|
||||
/datum/vampire_passive/vision/advanced = 500)
|
||||
|
||||
@@ -47,12 +47,12 @@
|
||||
/datum/antagonist/mindslave/thrall/apply_innate_effects(mob/living/mob_override)
|
||||
mob_override = ..()
|
||||
var/datum/mind/M = mob_override.mind
|
||||
M.AddSpell(new /obj/effect/proc_holder/spell/vampire/thrall_commune)
|
||||
M.AddSpell(new /datum/spell/vampire/thrall_commune)
|
||||
|
||||
/datum/antagonist/mindslave/thrall/remove_innate_effects(mob/living/mob_override)
|
||||
mob_override = ..()
|
||||
var/datum/mind/M = mob_override.mind
|
||||
M.RemoveSpell(/obj/effect/proc_holder/spell/vampire/thrall_commune)
|
||||
M.RemoveSpell(/datum/spell/vampire/thrall_commune)
|
||||
|
||||
/datum/antagonist/vampire/Destroy(force, ...)
|
||||
owner.current.create_log(CONVERSION_LOG, "De-vampired")
|
||||
@@ -73,7 +73,7 @@
|
||||
/datum/antagonist/vampire/proc/force_add_ability(path)
|
||||
var/spell = new path(owner)
|
||||
powers += spell
|
||||
if(istype(spell, /obj/effect/proc_holder/spell))
|
||||
if(istype(spell, /datum/spell))
|
||||
owner.AddSpell(spell)
|
||||
if(istype(spell, /datum/vampire_passive))
|
||||
var/datum/vampire_passive/passive = spell
|
||||
@@ -177,12 +177,12 @@
|
||||
* Remove and delete the vampire's current subclass and all associated abilities.
|
||||
*
|
||||
* Arguments:
|
||||
* * give_specialize_power - if the [specialize][/obj/effect/proc_holder/spell/vampire/self/specialize] power should be given back or not
|
||||
* * give_specialize_power - if the [specialize][/datum/spell/vampire/self/specialize] power should be given back or not
|
||||
*/
|
||||
/datum/antagonist/vampire/proc/clear_subclass(give_specialize_power = TRUE)
|
||||
if(give_specialize_power)
|
||||
// Choosing a subclass in the first place removes this from `upgrade_tiers`, so add it back if needed.
|
||||
upgrade_tiers[/obj/effect/proc_holder/spell/vampire/self/specialize] = 150
|
||||
upgrade_tiers[/datum/spell/vampire/self/specialize] = 150
|
||||
remove_all_powers()
|
||||
QDEL_NULL(subclass)
|
||||
check_vampire_upgrade()
|
||||
@@ -220,8 +220,8 @@
|
||||
/datum/antagonist/vampire/proc/announce_new_power(list/old_powers)
|
||||
for(var/p in powers)
|
||||
if(!(p in old_powers))
|
||||
if(istype(p, /obj/effect/proc_holder/spell))
|
||||
var/obj/effect/proc_holder/spell/power = p
|
||||
if(istype(p, /datum/spell))
|
||||
var/datum/spell/power = p
|
||||
to_chat(owner.current, "<span class='boldnotice'>[power.gain_desc]</span>")
|
||||
else if(istype(p, /datum/vampire_passive))
|
||||
var/datum/vampire_passive/power = p
|
||||
@@ -308,7 +308,7 @@
|
||||
bloodtotal += blood_amount
|
||||
bloodusable += blood_amount
|
||||
check_vampire_upgrade(TRUE)
|
||||
for(var/obj/effect/proc_holder/spell/S in powers)
|
||||
for(var/datum/spell/S in powers)
|
||||
if(S.action)
|
||||
S.action.UpdateButtons()
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/datum/vampire_passive/increment_thrall_cap/three
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/enthrall
|
||||
/datum/spell/vampire/enthrall
|
||||
name = "Enthrall (150)"
|
||||
desc = "You use a large portion of your power to sway those loyal to none to be loyal to you only."
|
||||
gain_desc = "You have gained the ability to thrall people to your will."
|
||||
@@ -17,13 +17,13 @@
|
||||
required_blood = 150
|
||||
deduct_blood_on_cast = FALSE
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/enthrall/create_new_targeting()
|
||||
/datum/spell/vampire/enthrall/create_new_targeting()
|
||||
var/datum/spell_targeting/click/T = new
|
||||
T.range = 1
|
||||
T.click_radius = 0
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/enthrall/cast(list/targets, mob/user = usr)
|
||||
/datum/spell/vampire/enthrall/cast(list/targets, mob/user = usr)
|
||||
var/datum/antagonist/vampire/vampire = user.mind.has_antag_datum(/datum/antagonist/vampire)
|
||||
var/mob/living/target = targets[1]
|
||||
user.visible_message("<span class='warning'>[user] bites [target]'s neck!</span>", "<span class='warning'>You bite [target]'s neck and begin the flow of power.</span>")
|
||||
@@ -38,7 +38,7 @@
|
||||
revert_cast(user)
|
||||
to_chat(user, "<span class='warning'>You or your target moved.</span>")
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/enthrall/proc/can_enthrall(mob/living/user, mob/living/carbon/C)
|
||||
/datum/spell/vampire/enthrall/proc/can_enthrall(mob/living/user, mob/living/carbon/C)
|
||||
. = FALSE
|
||||
if(!C)
|
||||
CRASH("target was null while trying to vampire enthrall, attacker is [user] [user.key] \ref[user]")
|
||||
@@ -63,7 +63,7 @@
|
||||
return
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/enthrall/proc/handle_enthrall(mob/living/user, mob/living/carbon/human/H)
|
||||
/datum/spell/vampire/enthrall/proc/handle_enthrall(mob/living/user, mob/living/carbon/human/H)
|
||||
if(!istype(H))
|
||||
return FALSE
|
||||
|
||||
@@ -75,17 +75,17 @@
|
||||
user.create_log(CONVERSION_LOG, "vampire enthralled", H)
|
||||
H.create_log(CONVERSION_LOG, "was vampire enthralled", user)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/thrall_commune
|
||||
/datum/spell/vampire/thrall_commune
|
||||
name = "Commune"
|
||||
desc = "Talk to your thralls telepathically."
|
||||
gain_desc = "You have gained the ability to commune with your thralls."
|
||||
action_icon_state = "vamp_communication"
|
||||
base_cooldown = 2 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/thrall_commune/create_new_handler() //so thralls can use it
|
||||
/datum/spell/vampire/thrall_commune/create_new_handler() //so thralls can use it
|
||||
return
|
||||
|
||||
/datum/spell_targeting/select_vampire_network/choose_targets(mob/user, obj/effect/proc_holder/spell/spell, params, atom/clicked_atom) // Returns the vampire and their thralls. If user is a thrall then it will look up their master's network
|
||||
/datum/spell_targeting/select_vampire_network/choose_targets(mob/user, datum/spell/spell, params, atom/clicked_atom) // Returns the vampire and their thralls. If user is a thrall then it will look up their master's network
|
||||
var/list/mob/living/targets = list()
|
||||
var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire) // if the user is a vampire
|
||||
|
||||
@@ -106,11 +106,11 @@
|
||||
targets += V.owner.current
|
||||
return targets
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/thrall_commune/create_new_targeting()
|
||||
/datum/spell/vampire/thrall_commune/create_new_targeting()
|
||||
var/datum/spell_targeting/select_vampire_network/T = new
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/thrall_commune/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/thrall_commune/cast(list/targets, mob/user)
|
||||
var/input = tgui_input_text(user, "Enter a message to relay to the other thralls", "Thrall Commune")
|
||||
if(!input)
|
||||
revert_cast(user)
|
||||
@@ -124,7 +124,7 @@
|
||||
log_say("(DANTALION) [input]", user)
|
||||
user.create_log(SAY_LOG, "(DANTALION) [input]")
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/pacify
|
||||
/datum/spell/vampire/pacify
|
||||
name = "Pacify (10)"
|
||||
desc = "Pacify a target temporarily, making them unable to cause harm."
|
||||
gain_desc = "You have gained the ability to pacify someone's harmful tendencies, preventing them from doing any physical harm to anyone."
|
||||
@@ -132,18 +132,18 @@
|
||||
base_cooldown = 30 SECONDS
|
||||
required_blood = 10
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/pacify/create_new_targeting()
|
||||
/datum/spell/vampire/pacify/create_new_targeting()
|
||||
var/datum/spell_targeting/click/T = new
|
||||
T.range = 7
|
||||
T.click_radius = 1
|
||||
T.allowed_type = /mob/living/carbon/human
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/pacify/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/pacify/cast(list/targets, mob/user)
|
||||
for(var/mob/living/carbon/human/H as anything in targets)
|
||||
H.apply_status_effect(STATUS_EFFECT_PACIFIED)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/switch_places
|
||||
/datum/spell/vampire/switch_places
|
||||
name = "Subspace Swap (30)"
|
||||
desc = "Switch positions with a target."
|
||||
gain_desc = "You have gained the ability to switch positions with a targeted mob."
|
||||
@@ -152,7 +152,7 @@
|
||||
base_cooldown = 30 SECONDS
|
||||
required_blood = 30
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/switch_places/create_new_targeting()
|
||||
/datum/spell/vampire/switch_places/create_new_targeting()
|
||||
var/datum/spell_targeting/click/T = new
|
||||
T.range = 7
|
||||
T.click_radius = 1
|
||||
@@ -160,14 +160,14 @@
|
||||
T.allowed_type = /mob/living
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/switch_places/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/switch_places/cast(list/targets, mob/user)
|
||||
var/mob/living/target = targets[1]
|
||||
var/turf/user_turf = get_turf(user)
|
||||
var/turf/target_turf = get_turf(target)
|
||||
target.forceMove(user_turf)
|
||||
user.forceMove(target_turf)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/decoy
|
||||
/datum/spell/vampire/self/decoy
|
||||
name = "Deploy Decoy (30)"
|
||||
desc = "Briefly turn invisible and deploy a decoy illusion to fool your prey."
|
||||
gain_desc = "You have gained the ability to turn invisible and create decoy illusions."
|
||||
@@ -175,7 +175,7 @@
|
||||
required_blood = 30
|
||||
base_cooldown = 40 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/decoy/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/self/decoy/cast(list/targets, mob/user)
|
||||
var/mob/living/simple_animal/hostile/illusion/escape/E = new(get_turf(user))
|
||||
E.Copy_Parent(user, 20, 20)
|
||||
E.GiveTarget(user) //so it starts running right away
|
||||
@@ -183,7 +183,7 @@
|
||||
user.make_invisible()
|
||||
addtimer(CALLBACK(user, TYPE_PROC_REF(/mob/living, reset_visibility)), 6 SECONDS)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/rally_thralls
|
||||
/datum/spell/vampire/rally_thralls
|
||||
name = "Rally Thralls (100)"
|
||||
desc = "Removes all incapacitating effects from your nearby thralls."
|
||||
gain_desc = "You have gained the ability to remove all incapacitating effects from nearby thralls."
|
||||
@@ -191,18 +191,18 @@
|
||||
required_blood = 100
|
||||
base_cooldown = 100 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/rally_thralls/create_new_targeting()
|
||||
/datum/spell/vampire/rally_thralls/create_new_targeting()
|
||||
var/datum/spell_targeting/aoe/thralls/A = new
|
||||
A.allowed_type = /mob/living/carbon/human
|
||||
A.range = 7
|
||||
return A
|
||||
|
||||
/datum/spell_targeting/aoe/thralls/valid_target(target, user, obj/effect/proc_holder/spell/spell, check_if_in_range)
|
||||
/datum/spell_targeting/aoe/thralls/valid_target(target, user, datum/spell/spell, check_if_in_range)
|
||||
if(!isvampirethrall(target))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/rally_thralls/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/rally_thralls/cast(list/targets, mob/user)
|
||||
for(var/mob/living/carbon/human/H as anything in targets)
|
||||
var/image/I = image('icons/effects/vampire_effects.dmi', "rallyoverlay", layer = EFFECTS_LAYER)
|
||||
playsound(H, 'sound/magic/staff_healing.ogg', 30)
|
||||
@@ -210,21 +210,21 @@
|
||||
H.add_overlay(I)
|
||||
addtimer(CALLBACK(H, TYPE_PROC_REF(/atom, cut_overlay), I), 6 SECONDS) // this makes it obvious who your thralls are for a while.
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/share_damage
|
||||
/datum/spell/vampire/self/share_damage
|
||||
name = "Blood Bond"
|
||||
desc = "Creates a net between you and your nearby thralls that evenly shares all damage received."
|
||||
gain_desc = "You have gained the ability to share damage between you and your thralls."
|
||||
action_icon_state = "blood_bond"
|
||||
required_blood = 5
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/share_damage/cast(list/targets, mob/living/user)
|
||||
/datum/spell/vampire/self/share_damage/cast(list/targets, mob/living/user)
|
||||
var/datum/status_effect/thrall_net/T = user.has_status_effect(STATUS_EFFECT_THRALL_NET)
|
||||
if(!T)
|
||||
user.apply_status_effect(STATUS_EFFECT_THRALL_NET, user.mind.has_antag_datum(/datum/antagonist/vampire))
|
||||
return
|
||||
qdel(T)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/hysteria
|
||||
/datum/spell/vampire/hysteria
|
||||
name = "Mass Hysteria (70)"
|
||||
desc = "Casts a powerful illusion to make everyone nearby perceive others to looks like random animals after briefly blinding them."
|
||||
gain_desc = "You have gained the ability to make everyone nearby perceive others to looks like random animals after briefly blinding them."
|
||||
@@ -232,13 +232,13 @@
|
||||
required_blood = 70
|
||||
base_cooldown = 180 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/hysteria/create_new_targeting()
|
||||
/datum/spell/vampire/hysteria/create_new_targeting()
|
||||
var/datum/spell_targeting/aoe/A = new
|
||||
A.range = 8
|
||||
A.allowed_type = /mob/living/carbon/human
|
||||
return A
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/hysteria/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/hysteria/cast(list/targets, mob/user)
|
||||
for(var/mob/living/carbon/human/H as anything in targets)
|
||||
if(!H.affects_vampire(user))
|
||||
continue
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_swell
|
||||
/datum/spell/vampire/self/blood_swell
|
||||
name = "Blood Swell (30)"
|
||||
desc = "You infuse your body with blood, making you highly resistant to stuns and physical damage. However, this makes you unable to fire ranged weapons while it is active."
|
||||
gain_desc = "You have gained the ability to temporarly resist large amounts of stuns and physical damage."
|
||||
@@ -6,13 +6,13 @@
|
||||
required_blood = 30
|
||||
action_icon_state = "blood_swell"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_swell/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/self/blood_swell/cast(list/targets, mob/user)
|
||||
var/mob/living/target = targets[1]
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.apply_status_effect(STATUS_EFFECT_BLOOD_SWELL)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/stomp
|
||||
/datum/spell/vampire/self/stomp
|
||||
name = "Seismic Stomp (30)"
|
||||
desc = "You slam your foot into the ground sending a powerful shockwave through the station's hull, sending people flying away. Cannot be cast if you legs are impared by a bola or similar."
|
||||
gain_desc = "You have gained the ability to knock people back using a powerful stomp."
|
||||
@@ -21,18 +21,18 @@
|
||||
required_blood = 30
|
||||
var/max_range = 4
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/stomp/can_cast(mob/living/carbon/user, charge_check, show_message)
|
||||
/datum/spell/vampire/self/stomp/can_cast(mob/living/carbon/user, charge_check, show_message)
|
||||
if(user.legcuffed)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/stomp/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/self/stomp/cast(list/targets, mob/user)
|
||||
var/turf/T = get_turf(user)
|
||||
playsound(T, 'sound/effects/meteorimpact.ogg', 100, TRUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(hit_check), 1, T, user), 0.2 SECONDS)
|
||||
new /obj/effect/temp_visual/stomp(T)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/stomp/proc/hit_check(range, turf/start_turf, mob/user, safe_targets = list())
|
||||
/datum/spell/vampire/self/stomp/proc/hit_check(range, turf/start_turf, mob/user, safe_targets = list())
|
||||
// gets the two outermost turfs in a ring, we get two so people cannot "walk over" the shockwave
|
||||
var/list/targets = view(range, start_turf) - view(range - 2, start_turf)
|
||||
for(var/turf/simulated/floor/flooring in targets)
|
||||
@@ -72,14 +72,14 @@
|
||||
/datum/vampire_passive/blood_swell_upgrade
|
||||
gain_desc = "While blood swell is active all of your melee attacks deal increased damage."
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/overwhelming_force
|
||||
/datum/spell/vampire/self/overwhelming_force
|
||||
name = "Overwhelming Force"
|
||||
desc = "When toggled you will automatically pry open doors that you bump into if you do not have access."
|
||||
gain_desc = "You have gained the ability to force open doors at a small blood cost."
|
||||
base_cooldown = 2 SECONDS
|
||||
action_icon_state = "OH_YEAAAAH"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/overwhelming_force/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/self/overwhelming_force/cast(list/targets, mob/user)
|
||||
if(!HAS_TRAIT_FROM(user, TRAIT_FORCE_DOORS, VAMPIRE_TRAIT))
|
||||
to_chat(user, "<span class='warning'>You feel MIGHTY!</span>")
|
||||
ADD_TRAIT(user, TRAIT_FORCE_DOORS, VAMPIRE_TRAIT)
|
||||
@@ -90,7 +90,7 @@
|
||||
user.move_resist = MOVE_FORCE_DEFAULT
|
||||
user.status_flags |= CANPUSH
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_rush
|
||||
/datum/spell/vampire/self/blood_rush
|
||||
name = "Blood Rush (30)"
|
||||
desc = "Infuse yourself with blood magic to boost your movement speed."
|
||||
gain_desc = "You have gained the ability to temporarily move at high speeds."
|
||||
@@ -98,14 +98,14 @@
|
||||
required_blood = 30
|
||||
action_icon_state = "blood_rush"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_rush/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/self/blood_rush/cast(list/targets, mob/user)
|
||||
var/mob/living/target = targets[1]
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
to_chat(H, "<span class='notice'>You feel a rush of energy!</span>")
|
||||
H.apply_status_effect(STATUS_EFFECT_BLOOD_RUSH)
|
||||
|
||||
/obj/effect/proc_holder/spell/fireball/demonic_grasp
|
||||
/datum/spell/fireball/demonic_grasp
|
||||
name = "Demonic Grasp (20)"
|
||||
desc = "Fire a hand of demonic energy, snaring and throwing its target around, based on your intent. Disarm pushes, grab pulls."
|
||||
gain_desc = "You have gained the ability to snare and disrupt people with demonic apendages."
|
||||
@@ -124,10 +124,10 @@
|
||||
invocation_type = "none"
|
||||
invocation = null
|
||||
|
||||
/obj/effect/proc_holder/spell/fireball/demonic_grasp/update_icon_state()
|
||||
/datum/spell/fireball/demonic_grasp/update_spell_icon()
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/fireball/demonic_grasp/create_new_handler()
|
||||
/datum/spell/fireball/demonic_grasp/create_new_handler()
|
||||
var/datum/spell_handler/vampire/V = new()
|
||||
V.required_blood = 20
|
||||
return V
|
||||
@@ -178,7 +178,7 @@
|
||||
icon_state = "immobilized"
|
||||
duration = 1 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/charge
|
||||
/datum/spell/vampire/charge
|
||||
name = "Charge (30)"
|
||||
desc = "You charge at wherever you click on screen, dealing large amounts of damage, stunning and destroying walls and other objects."
|
||||
gain_desc = "You can now charge at a target on screen, dealing massive damage and destroying structures."
|
||||
@@ -186,16 +186,16 @@
|
||||
base_cooldown = 30 SECONDS
|
||||
action_icon_state = "vampire_charge"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/charge/create_new_targeting()
|
||||
/datum/spell/vampire/charge/create_new_targeting()
|
||||
return new /datum/spell_targeting/clicked_atom
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/charge/can_cast(mob/user, charge_check, show_message)
|
||||
/datum/spell/vampire/charge/can_cast(mob/user, charge_check, show_message)
|
||||
var/mob/living/L = user
|
||||
if(IS_HORIZONTAL(L))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/charge/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/charge/cast(list/targets, mob/user)
|
||||
var/target = targets[1]
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
@@ -204,7 +204,7 @@
|
||||
|
||||
#define ARENA_SIZE 3
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/arena
|
||||
/datum/spell/vampire/arena
|
||||
name = "Desecrated Duel (150)"
|
||||
desc = "You leap towards someone. Upon landing, you conjure an arena, and within it you will heal brute and burn damage, recover from fatigue faster, and be strengthened against lasting damages. Can be recasted to end the spell early."
|
||||
gain_desc = "You can now leap to a target and trap them in a conjured arena."
|
||||
@@ -218,13 +218,13 @@
|
||||
/// Holds a reference to all arena walls so we can qdel them easily with dispel()
|
||||
var/list/all_temp_walls = list()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/arena/create_new_targeting()
|
||||
/datum/spell/vampire/arena/create_new_targeting()
|
||||
var/datum/spell_targeting/click/T = new
|
||||
T.click_radius = 0
|
||||
T.allowed_type = /mob/living/carbon/human
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/arena/cast(list/targets, mob/living/user)
|
||||
/datum/spell/vampire/arena/cast(list/targets, mob/living/user)
|
||||
var/target = targets[1] // We only want to dash towards the first mob in our targeting list, if somehow multiple ended up in there
|
||||
if(!targets)
|
||||
return
|
||||
@@ -262,24 +262,24 @@
|
||||
RegisterSignal(user, COMSIG_PARENT_QDELETING, PROC_REF(dispel))
|
||||
arena_checks(get_turf(target), user)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/arena/proc/arena_checks(turf/target_turf, mob/living/user)
|
||||
/datum/spell/vampire/arena/proc/arena_checks(turf/target_turf, mob/living/user)
|
||||
if(!spell_active || QDELETED(src))
|
||||
return
|
||||
INVOKE_ASYNC(src, PROC_REF(fighters_check), user) //Checks to see if our fighters died.
|
||||
INVOKE_ASYNC(src, PROC_REF(arena_trap), target_turf) //Gets another arena trap queued up for when this one runs out.
|
||||
addtimer(CALLBACK(src, PROC_REF(arena_checks), target_turf, user), 5 SECONDS)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/arena/proc/arena_trap(turf/target_turf)
|
||||
/datum/spell/vampire/arena/proc/arena_trap(turf/target_turf)
|
||||
for(var/tumor_range_turfs in circle_edge_turfs(target_turf, ARENA_SIZE))
|
||||
tumor_range_turfs = new /obj/effect/temp_visual/elite_tumor_wall/gargantua(tumor_range_turfs, src)
|
||||
all_temp_walls += tumor_range_turfs
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/arena/proc/fighters_check(mob/living/user)
|
||||
/datum/spell/vampire/arena/proc/fighters_check(mob/living/user)
|
||||
if(QDELETED(user) || user.stat == DEAD)
|
||||
dispel(user)
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/arena/proc/dispel(mob/living/user)
|
||||
/datum/spell/vampire/arena/proc/dispel(mob/living/user)
|
||||
spell_active = FALSE
|
||||
if(timer)
|
||||
deltimer(timer)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/effect/proc_holder/spell/vampire/self/vamp_claws
|
||||
/datum/spell/vampire/self/vamp_claws
|
||||
name = "Vampiric Claws (30)"
|
||||
desc = "You channel blood magics to forge deadly vampiric claws that leech blood and strike rapidly. Cannot be used if you are holding something that cannot be dropped."
|
||||
gain_desc = "You have gained the ability to forge your hands into vampiric claws."
|
||||
@@ -6,7 +6,7 @@
|
||||
required_blood = 30
|
||||
action_icon_state = "vampire_claws"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/vamp_claws/cast(mob/user)
|
||||
/datum/spell/vampire/self/vamp_claws/cast(mob/user)
|
||||
if(user.l_hand || user.r_hand)
|
||||
to_chat(user, "<span class='notice'>You drop what was in your hands as large blades spring from your fingers!</span>")
|
||||
user.drop_l_hand()
|
||||
@@ -17,7 +17,7 @@
|
||||
RegisterSignal(user, COMSIG_MOB_WILLINGLY_DROP, PROC_REF(dispel))
|
||||
user.put_in_hands(claws)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/vamp_claws/proc/dispel()
|
||||
/datum/spell/vampire/self/vamp_claws/proc/dispel()
|
||||
SIGNAL_HANDLER
|
||||
var/mob/living/carbon/human/user = action.owner
|
||||
if(user.mind.has_antag_datum(/datum/antagonist/vampire))
|
||||
@@ -31,7 +31,7 @@
|
||||
qdel(current)
|
||||
to_chat(user, "<span class='notice'>You dispel your claws!</span>")
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/vamp_claws/can_cast(mob/user, charge_check, show_message)
|
||||
/datum/spell/vampire/self/vamp_claws/can_cast(mob/user, charge_check, show_message)
|
||||
var/mob/living/L = user
|
||||
if(L.canUnEquip(L.l_hand) && L.canUnEquip(L.r_hand))
|
||||
return ..()
|
||||
@@ -55,7 +55,7 @@
|
||||
var/durability = 15
|
||||
var/blood_drain_amount = 15
|
||||
var/blood_absorbed_amount = 5
|
||||
var/obj/effect/proc_holder/spell/vampire/self/vamp_claws/parent_spell
|
||||
var/datum/spell/vampire/self/vamp_claws/parent_spell
|
||||
|
||||
/obj/item/vamp_claws/Initialize(mapload, new_parent_spell)
|
||||
. = ..()
|
||||
@@ -104,7 +104,7 @@
|
||||
qdel(src)
|
||||
to_chat(user, "<span class='notice'>You dispel your claws!</span>")
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_tendrils
|
||||
/datum/spell/vampire/blood_tendrils
|
||||
name = "Blood Tendrils (10)"
|
||||
desc = "You summon blood tendrils from bluespace after a delay to ensnare people in an area, slowing them down."
|
||||
gain_desc = "You have gained the ability to summon blood tendrils to slow people down in an area that you target."
|
||||
@@ -115,16 +115,16 @@
|
||||
sound = 'sound/misc/enter_blood.ogg'
|
||||
var/area_of_affect = 1
|
||||
|
||||
selection_activated_message = "<span class='notice'>You channel blood magics to weaken the bluespace veil. <B>Left-click to cast at a target area!</B></span>"
|
||||
selection_activated_message = "<span class='notice'>You channel blood magics to weaken the bluespace veil. <b>Left-click to cast at a target area!</b></span>"
|
||||
selection_deactivated_message = "<span class='notice'>Your magics subside.</span>"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_tendrils/create_new_targeting()
|
||||
/datum/spell/vampire/blood_tendrils/create_new_targeting()
|
||||
var/datum/spell_targeting/click/T = new
|
||||
T.allowed_type = /atom
|
||||
T.try_auto_target = FALSE
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_tendrils/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/blood_tendrils/cast(list/targets, mob/user)
|
||||
var/turf/T = get_turf(targets[1]) // there should only ever be one entry in targets for this spell
|
||||
|
||||
for(var/turf/simulated/blood_turf in view(area_of_affect, T))
|
||||
@@ -134,7 +134,7 @@
|
||||
|
||||
addtimer(CALLBACK(src, PROC_REF(apply_slowdown), T, area_of_affect, 6 SECONDS, user), 0.5 SECONDS)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_tendrils/proc/apply_slowdown(turf/T, distance, slowed_amount, mob/user)
|
||||
/datum/spell/vampire/blood_tendrils/proc/apply_slowdown(turf/T, distance, slowed_amount, mob/user)
|
||||
for(var/mob/living/L in range(distance, T))
|
||||
if(L.affects_vampire(user))
|
||||
L.Slowed(slowed_amount)
|
||||
@@ -149,7 +149,7 @@
|
||||
/obj/effect/temp_visual/blood_tendril/long
|
||||
duration = 2 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_barrier
|
||||
/datum/spell/vampire/blood_barrier
|
||||
name = "Blood Barrier (40)"
|
||||
desc = "Select two points within 3 tiles of each other and make a barrier between them."
|
||||
gain_desc = "You have gained the ability to summon a crystaline wall of blood between two points, the barrier is easily destructable, however you can walk freely through it."
|
||||
@@ -162,24 +162,24 @@
|
||||
var/max_walls = 3
|
||||
var/turf/start_turf = null
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_barrier/create_new_targeting()
|
||||
/datum/spell/vampire/blood_barrier/create_new_targeting()
|
||||
var/datum/spell_targeting/click/T = new
|
||||
T.allowed_type = /atom
|
||||
T.try_auto_target = FALSE
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_barrier/remove_ranged_ability(mob/user, msg)
|
||||
/datum/spell/vampire/blood_barrier/remove_ranged_ability(mob/user, msg)
|
||||
. = ..()
|
||||
if(msg) // this is only true if the user intentionally turned off the spell
|
||||
start_turf = null
|
||||
should_recharge_after_cast = FALSE
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_barrier/should_remove_click_intercept()
|
||||
/datum/spell/vampire/blood_barrier/should_remove_click_intercept()
|
||||
if(start_turf)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_barrier/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/blood_barrier/cast(list/targets, mob/user)
|
||||
var/turf/target_turf = get_turf(targets[1])
|
||||
if(target_turf == start_turf)
|
||||
to_chat(user, "<span class='notice'>You deselect the targeted turf.</span>")
|
||||
@@ -244,7 +244,7 @@
|
||||
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/ethereal_jaunt/blood_pool
|
||||
/datum/spell/ethereal_jaunt/blood_pool
|
||||
name = "Sanguine Pool (50)"
|
||||
desc = "You shift your form into a pool of blood, making you invulnerable and able to move through anything that's not a wall or space. You leave a trail of blood behind you when you do this."
|
||||
gain_desc = "You have gained the ability to shift into a pool of blood, allowing you to evade pursuers with great mobility."
|
||||
@@ -261,12 +261,12 @@
|
||||
jaunt_in_time = 0
|
||||
sound1 = 'sound/misc/enter_blood.ogg'
|
||||
|
||||
/obj/effect/proc_holder/spell/ethereal_jaunt/blood_pool/create_new_handler()
|
||||
/datum/spell/ethereal_jaunt/blood_pool/create_new_handler()
|
||||
var/datum/spell_handler/vampire/H = new
|
||||
H.required_blood = 50
|
||||
return H
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/predator_senses
|
||||
/datum/spell/vampire/predator_senses
|
||||
name = "Predator Senses"
|
||||
desc = "Hunt down your prey, there's nowhere to hide..."
|
||||
gain_desc = "Your senses are heightened, nobody can hide from you now."
|
||||
@@ -274,16 +274,16 @@
|
||||
base_cooldown = 20 SECONDS
|
||||
create_attack_logs = FALSE
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/predator_senses/create_new_targeting()
|
||||
/datum/spell/vampire/predator_senses/create_new_targeting()
|
||||
var/datum/spell_targeting/alive_mob_list/A = new()
|
||||
A.allowed_type = /mob/living/carbon/human
|
||||
A.max_targets = 300 // hopefully we never hit this number
|
||||
return A
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/predator_senses/valid_target(mob/target, mob/user)
|
||||
/datum/spell/vampire/predator_senses/valid_target(mob/target, mob/user)
|
||||
return target.z == user.z && target.mind
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/predator_senses/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/predator_senses/cast(list/targets, mob/user)
|
||||
var/targets_by_name = list()
|
||||
for(var/mob/living/carbon/human/H as anything in targets)
|
||||
targets_by_name[H.real_name] = H
|
||||
@@ -297,7 +297,7 @@
|
||||
message += "<i> They are wounded...</i>"
|
||||
to_chat(user, "<span class='cultlarge'>[message]</span>")
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_eruption
|
||||
/datum/spell/vampire/blood_eruption
|
||||
name = "Blood Eruption (100)"
|
||||
desc = "Every pool of blood in 4 tiles erupts with a spike of living blood, damaging anyone stood on it."
|
||||
gain_desc = "You have gained the ability to weaponise pools of blood to damage those stood on them."
|
||||
@@ -305,13 +305,13 @@
|
||||
base_cooldown = 200 SECONDS
|
||||
action_icon_state = "blood_spikes"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_eruption/create_new_targeting()
|
||||
/datum/spell/vampire/blood_eruption/create_new_targeting()
|
||||
var/datum/spell_targeting/aoe/T = new
|
||||
T.range = 4
|
||||
T.allowed_type = /mob/living
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_eruption/valid_target(mob/living/target, user)
|
||||
/datum/spell/vampire/blood_eruption/valid_target(mob/living/target, user)
|
||||
var/turf/T = get_turf(target)
|
||||
if(locate(/obj/effect/decal/cleanable/blood) in T)
|
||||
if(target.affects_vampire(user) && !isLivingSSD(target))
|
||||
@@ -319,7 +319,7 @@
|
||||
return FALSE
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/blood_eruption/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/blood_eruption/cast(list/targets, mob/user)
|
||||
for(var/mob/living/L in targets)
|
||||
var/turf/T = get_turf(L)
|
||||
var/obj/effect/decal/cleanable/blood/B = locate(/obj/effect/decal/cleanable/blood) in T
|
||||
@@ -334,7 +334,7 @@
|
||||
icon_state = "bloodspike_white"
|
||||
duration = 0.3 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_spill
|
||||
/datum/spell/vampire/self/blood_spill
|
||||
name = "The Blood Bringers Rite"
|
||||
desc = "When toggled, everyone around you begins to bleed profusely. You will drain their blood and rejuvenate yourself with it."
|
||||
gain_desc = "You have gained the ability to rip the very life force out of people and absorb it, healing you."
|
||||
@@ -342,7 +342,7 @@
|
||||
action_icon_state = "blood_bringers_rite"
|
||||
required_blood = 10
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_spill/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/self/blood_spill/cast(list/targets, mob/user)
|
||||
var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire)
|
||||
if(!V.get_ability(/datum/vampire_passive/blood_spill))
|
||||
V.force_add_ability(/datum/vampire_passive/blood_spill)
|
||||
|
||||
@@ -1,17 +1,11 @@
|
||||
/obj/effect/proc_holder/spell/vampire/self/cloak
|
||||
/datum/spell/vampire/self/cloak
|
||||
name = "Cloak of Darkness"
|
||||
desc = "Toggles whether you are currently cloaking yourself in darkness. When in darkness and toggled on, you move at increased speeds."
|
||||
gain_desc = "You have gained the Cloak of Darkness ability, which when toggled makes you nearly invisible and highly agile in the shroud of darkness."
|
||||
action_icon_state = "vampire_cloak"
|
||||
base_cooldown = 2 SECONDS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/cloak/New()
|
||||
..()
|
||||
update_name()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/cloak/update_name()
|
||||
. = ..()
|
||||
var/mob/living/user = loc
|
||||
/datum/spell/vampire/self/cloak/proc/update_spell_name(mob/living/user)
|
||||
if(!ishuman(user) || !user.mind)
|
||||
return
|
||||
var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire)
|
||||
@@ -19,9 +13,10 @@
|
||||
return
|
||||
|
||||
action.name = "[initial(name)] ([V.iscloaking ? "Deactivate" : "Activate"])"
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_NAME)
|
||||
UpdateButtons()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/cloak/cast(list/targets, mob/user = usr)
|
||||
/datum/spell/vampire/self/cloak/cast(list/targets, mob/user = usr)
|
||||
var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire)
|
||||
V.iscloaking = !V.iscloaking
|
||||
if(ishuman(user))
|
||||
@@ -32,7 +27,7 @@
|
||||
else
|
||||
user.UnregisterSignal(user, COMSIG_LIVING_IGNITED)
|
||||
H.physiology.burn_mod /= 1.1
|
||||
update_name()
|
||||
update_spell_name(user)
|
||||
to_chat(user, "<span class='notice'>You will now be [V.iscloaking ? "hidden" : "seen"] in darkness.</span>")
|
||||
|
||||
/mob/living/proc/update_vampire_cloak()
|
||||
@@ -40,7 +35,7 @@
|
||||
var/datum/antagonist/vampire/V = mind.has_antag_datum(/datum/antagonist/vampire)
|
||||
V.handle_vampire_cloak()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_snare
|
||||
/datum/spell/vampire/shadow_snare
|
||||
name = "Shadow Snare (20)"
|
||||
desc = "You summon a trap on the ground. When crossed it will blind the target, extinguish any lights they may have, and ensnare them."
|
||||
gain_desc = "You have gained the ability to summon a trap that will blind, ensnare, and turn off the lights of anyone who crosses it."
|
||||
@@ -48,13 +43,13 @@
|
||||
required_blood = 20
|
||||
action_icon_state = "shadow_snare"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_snare/create_new_targeting()
|
||||
/datum/spell/vampire/shadow_snare/create_new_targeting()
|
||||
var/datum/spell_targeting/click/T = new
|
||||
T.allowed_type = /turf/simulated
|
||||
T.click_radius = -1
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_snare/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/shadow_snare/cast(list/targets, mob/user)
|
||||
var/turf/target = targets[1]
|
||||
new /obj/item/restraints/legcuffs/beartrap/shadow_snare(target)
|
||||
|
||||
@@ -116,7 +111,7 @@
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/soul_anchor
|
||||
/datum/spell/vampire/soul_anchor
|
||||
name = "Soul Anchor (30)"
|
||||
desc = "You summon a dimenional anchor after a delay, casting again will teleport you back to the anchor. You will fake a recall after 2 minutes."
|
||||
gain_desc = "You have gained the ability to save a point in space and teleport back to it at will. Unless you willingly teleport back to that point within 2 minutes, you will fake a recall."
|
||||
@@ -132,10 +127,10 @@
|
||||
/// Holds a reference to the timer until the caster fake recalls
|
||||
var/timer
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/soul_anchor/create_new_targeting()
|
||||
/datum/spell/vampire/soul_anchor/create_new_targeting()
|
||||
return new /datum/spell_targeting/self
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/soul_anchor/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/soul_anchor/cast(list/targets, mob/user)
|
||||
if(making_anchor) // second cast, but we are impatient
|
||||
to_chat(user, "<span class='notice'>Your anchor isn't ready yet!</span>")
|
||||
return
|
||||
@@ -152,11 +147,11 @@
|
||||
recall(user)
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/soul_anchor/proc/make_anchor(mob/user, turf/anchor_turf)
|
||||
/datum/spell/vampire/soul_anchor/proc/make_anchor(mob/user, turf/anchor_turf)
|
||||
anchor = new(anchor_turf)
|
||||
timer = addtimer(CALLBACK(src, PROC_REF(recall), user, TRUE), 2 MINUTES, TIMER_STOPPABLE)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/soul_anchor/proc/recall(mob/user, fake = FALSE)
|
||||
/datum/spell/vampire/soul_anchor/proc/recall(mob/user, fake = FALSE)
|
||||
cooldown_handler.start_recharge()
|
||||
if(timer)
|
||||
deltimer(timer)
|
||||
@@ -214,7 +209,7 @@
|
||||
anchored = TRUE
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/dark_passage
|
||||
/datum/spell/vampire/dark_passage
|
||||
name = "Dark Passage (30)"
|
||||
desc = "You teleport to a targeted turf."
|
||||
gain_desc = "You have gained the ability to blink a short distance towards a targeted turf."
|
||||
@@ -223,13 +218,13 @@
|
||||
centcom_cancast = FALSE
|
||||
action_icon_state = "dark_passage"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/dark_passage/create_new_targeting()
|
||||
/datum/spell/vampire/dark_passage/create_new_targeting()
|
||||
var/datum/spell_targeting/click/T = new
|
||||
T.click_radius = 0
|
||||
T.allowed_type = /turf/simulated
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/dark_passage/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/dark_passage/cast(list/targets, mob/user)
|
||||
var/turf/target = get_turf(targets[1])
|
||||
|
||||
new /obj/effect/temp_visual/vamp_mist_out(get_turf(user))
|
||||
@@ -241,7 +236,7 @@
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "mist"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/vamp_extinguish
|
||||
/datum/spell/vampire/vamp_extinguish
|
||||
name = "Extinguish"
|
||||
desc = "You extinguish any light source in an area around you."
|
||||
gain_desc = "You have gained the ability to extinguish nearby light sources."
|
||||
@@ -250,17 +245,17 @@
|
||||
create_attack_logs = FALSE
|
||||
create_custom_logs = TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/vamp_extinguish/create_new_targeting()
|
||||
/datum/spell/vampire/vamp_extinguish/create_new_targeting()
|
||||
var/datum/spell_targeting/aoe/turf/T = new
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/vamp_extinguish/cast(list/targets, mob/user = usr)
|
||||
/datum/spell/vampire/vamp_extinguish/cast(list/targets, mob/user = usr)
|
||||
for(var/turf/T in targets)
|
||||
T.extinguish_light()
|
||||
for(var/atom/A in T.contents)
|
||||
A.extinguish_light()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_boxing
|
||||
/datum/spell/vampire/shadow_boxing
|
||||
name = "Shadow Boxing (50)"
|
||||
desc = "Target someone to have your shadow beat them up. You must stay within 2 tiles for this to work."
|
||||
gain_desc = "You have gained the ability to make your shadow fight for you."
|
||||
@@ -269,18 +264,18 @@
|
||||
required_blood = 50
|
||||
var/target_UID
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_boxing/create_new_targeting()
|
||||
/datum/spell/vampire/shadow_boxing/create_new_targeting()
|
||||
var/datum/spell_targeting/click/C = new
|
||||
C.allowed_type = /mob/living
|
||||
C.range = 2
|
||||
C.try_auto_target = FALSE
|
||||
return C
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_boxing/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/shadow_boxing/cast(list/targets, mob/user)
|
||||
var/mob/living/target = targets[1]
|
||||
target.apply_status_effect(STATUS_EFFECT_SHADOW_BOXING, user)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/eternal_darkness
|
||||
/datum/spell/vampire/self/eternal_darkness
|
||||
name = "Eternal Darkness"
|
||||
desc = "When toggled, you shroud the area around you in darkness and slowly lower the body temperature of people nearby. Energy projectiles will dim in its radius."
|
||||
gain_desc = "You have gained the ability to shroud the area around you in darkness, only the strongest of lights can pierce your unholy powers."
|
||||
@@ -289,7 +284,7 @@
|
||||
required_blood = 5
|
||||
var/shroud_power = -6
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/eternal_darkness/cast(list/targets, mob/user)
|
||||
/datum/spell/vampire/self/eternal_darkness/cast(list/targets, mob/user)
|
||||
var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire)
|
||||
var/mob/target = targets[1]
|
||||
if(!V.get_ability(/datum/vampire_passive/eternal_darkness))
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire
|
||||
/datum/spell/vampire
|
||||
panel = "Vampire"
|
||||
school = "vampire"
|
||||
action_background_icon_state = "bg_vampire"
|
||||
@@ -22,13 +22,13 @@
|
||||
var/required_blood
|
||||
var/deduct_blood_on_cast = TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/create_new_handler()
|
||||
/datum/spell/vampire/create_new_handler()
|
||||
var/datum/spell_handler/vampire/H = new
|
||||
H.required_blood = required_blood
|
||||
H.deduct_blood_on_cast = deduct_blood_on_cast
|
||||
return H
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/create_new_targeting()
|
||||
/datum/spell/vampire/self/create_new_targeting()
|
||||
return new /datum/spell_targeting/self
|
||||
|
||||
/datum/vampire_passive
|
||||
@@ -48,14 +48,14 @@
|
||||
owner.update_sight() // Life updates conditionally, so we need to update sight here in case the vamp gets new vision based on his powers. Maybe one day refactor to be more OOP and on the vampire's ability datum.
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/rejuvenate
|
||||
/datum/spell/vampire/self/rejuvenate
|
||||
name = "Rejuvenate"
|
||||
desc = "Use reserve blood to enliven your body, removing any incapacitating effects."
|
||||
action_icon_state = "vampire_rejuvinate"
|
||||
base_cooldown = 20 SECONDS
|
||||
stat_allowed = UNCONSCIOUS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/rejuvenate/cast(list/targets, mob/user = usr)
|
||||
/datum/spell/vampire/self/rejuvenate/cast(list/targets, mob/user = usr)
|
||||
var/mob/living/U = user
|
||||
|
||||
U.SetWeakened(0)
|
||||
@@ -73,7 +73,7 @@
|
||||
if(rejuv_bonus)
|
||||
INVOKE_ASYNC(src, PROC_REF(heal), U, rejuv_bonus)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/rejuvenate/proc/heal(mob/living/user, rejuv_bonus)
|
||||
/datum/spell/vampire/self/rejuvenate/proc/heal(mob/living/user, rejuv_bonus)
|
||||
for(var/i in 1 to 5)
|
||||
user.adjustBruteLoss(-2 * rejuv_bonus)
|
||||
user.adjustOxyLoss(-5 * rejuv_bonus)
|
||||
@@ -93,35 +93,35 @@
|
||||
rejuv_multiplier = clamp((100 - owner.current.health) / 20, 1, 5) // brute and burn healing between 5 and 50
|
||||
return rejuv_multiplier
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/specialize
|
||||
/datum/spell/vampire/self/specialize
|
||||
name = "Choose Specialization"
|
||||
desc = "Choose what sub-class of vampire you want to evolve into."
|
||||
gain_desc = "You can now choose what specialization of vampire you want to evolve into."
|
||||
base_cooldown = 2 SECONDS
|
||||
action_icon_state = "select_class"
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/specialize/cast(mob/user)
|
||||
/datum/spell/vampire/self/specialize/cast(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/specialize/ui_state(mob/user)
|
||||
/datum/spell/vampire/self/specialize/ui_state(mob/user)
|
||||
return GLOB.always_state
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/specialize/ui_interact(mob/user, datum/tgui/ui = null)
|
||||
/datum/spell/vampire/self/specialize/ui_interact(mob/user, datum/tgui/ui = null)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "SpecMenu", "Specialisation Menu")
|
||||
ui.set_autoupdate(FALSE)
|
||||
ui.open()
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/specialize/ui_data(mob/user)
|
||||
/datum/spell/vampire/self/specialize/ui_data(mob/user)
|
||||
var/datum/antagonist/vampire/vamp = user.mind.has_antag_datum(/datum/antagonist/vampire)
|
||||
var/list/data = list("subclasses" = vamp.subclass)
|
||||
return data
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/specialize/ui_act(action, list/params)
|
||||
/datum/spell/vampire/self/specialize/ui_act(action, list/params)
|
||||
if(..())
|
||||
return
|
||||
var/datum/antagonist/vampire/vamp = usr.mind.has_antag_datum(/datum/antagonist/vampire)
|
||||
@@ -157,20 +157,20 @@
|
||||
if(log_choice)
|
||||
SSblackbox.record_feedback("nested tally", "vampire_subclasses", 1, list("[new_subclass.name]"))
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/glare
|
||||
/datum/spell/vampire/glare
|
||||
name = "Glare"
|
||||
desc = "Your eyes flash, stunning and silencing anyone in front of you. It has lesser effects for those around you."
|
||||
action_icon_state = "vampire_glare"
|
||||
base_cooldown = 30 SECONDS
|
||||
stat_allowed = UNCONSCIOUS
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/glare/create_new_targeting()
|
||||
/datum/spell/vampire/glare/create_new_targeting()
|
||||
var/datum/spell_targeting/aoe/T = new
|
||||
T.allowed_type = /mob/living
|
||||
T.range = 1
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/glare/create_new_cooldown()
|
||||
/datum/spell/vampire/glare/create_new_cooldown()
|
||||
var/datum/spell_cooldown/charges/C = new
|
||||
C.max_charges = 2
|
||||
C.recharge_duration = base_cooldown
|
||||
@@ -184,7 +184,7 @@
|
||||
/// Full deviation. Flashed from directly behind or behind-left/behind-rack. Not flashed at all.
|
||||
#define DEVIATION_FULL 1
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/glare/cast(list/targets, mob/living/user = usr)
|
||||
/datum/spell/vampire/glare/cast(list/targets, mob/living/user = usr)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/sunglasses/blindfold))
|
||||
@@ -221,7 +221,7 @@
|
||||
to_chat(target, "<span class='warning'>You are blinded by [user]'s glare.</span>")
|
||||
add_attack_logs(user, target, "(Vampire) Glared at")
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/glare/proc/calculate_deviation(mob/victim, mob/attacker)
|
||||
/datum/spell/vampire/glare/proc/calculate_deviation(mob/victim, mob/attacker)
|
||||
// Are they on the same tile? We'll return partial deviation. This may be someone flashing while lying down
|
||||
if(victim.loc == attacker.loc)
|
||||
return DEVIATION_PARTIAL
|
||||
@@ -279,7 +279,7 @@
|
||||
/datum/vampire_passive/full
|
||||
gain_desc = "You have reached your full potential. You are no longer weak to the effects of anything holy."
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/raise_vampires
|
||||
/datum/spell/vampire/raise_vampires
|
||||
name = "Raise Vampires"
|
||||
desc = "Summons deadly vampires from bluespace."
|
||||
school = "transmutation"
|
||||
@@ -293,12 +293,12 @@
|
||||
sound = 'sound/magic/wandodeath.ogg'
|
||||
gain_desc = "You have gained the ability to Raise Vampires. This extremely powerful AOE ability affects all humans near you. Vampires/thralls are healed. Corpses are raised as vampires. Others are stunned, then brain damaged, then killed."
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/raise_vampires/create_new_targeting()
|
||||
/datum/spell/vampire/raise_vampires/create_new_targeting()
|
||||
var/datum/spell_targeting/aoe/T = new
|
||||
T.range = 3
|
||||
return T
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/raise_vampires/cast(list/targets, mob/user = usr)
|
||||
/datum/spell/vampire/raise_vampires/cast(list/targets, mob/user = usr)
|
||||
new /obj/effect/temp_visual/cult/sparks(user.loc)
|
||||
var/turf/T = get_turf(user)
|
||||
to_chat(user, "<span class='warning'>You call out within bluespace, summoning more vampiric spirits to aid you!</span>")
|
||||
@@ -308,17 +308,17 @@
|
||||
raise_vampire(user, H)
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/raise_vampires/proc/raise_vampire(mob/M, mob/living/carbon/human/H)
|
||||
/datum/spell/vampire/raise_vampires/proc/raise_vampire(mob/M, mob/living/carbon/human/H)
|
||||
if(!istype(M) || !istype(H))
|
||||
return
|
||||
if(!H.mind)
|
||||
visible_message("[H] looks to be too stupid to understand what is going on.")
|
||||
H.visible_message("[H] looks to be too stupid to understand what is going on.")
|
||||
return
|
||||
if(H.dna && (NO_BLOOD in H.dna.species.species_traits) || H.dna.species.exotic_blood || !H.blood_volume)
|
||||
visible_message("[H] looks unfazed!")
|
||||
H.visible_message("[H] looks unfazed!")
|
||||
return
|
||||
if(H.mind.has_antag_datum(/datum/antagonist/vampire) || H.mind.special_role == SPECIAL_ROLE_VAMPIRE || H.mind.special_role == SPECIAL_ROLE_VAMPIRE_THRALL)
|
||||
visible_message("<span class='notice'>[H] looks refreshed!</span>")
|
||||
H.visible_message("<span class='notice'>[H] looks refreshed!</span>")
|
||||
H.adjustBruteLoss(-60)
|
||||
H.adjustFireLoss(-60)
|
||||
for(var/obj/item/organ/external/E in H.bodyparts)
|
||||
@@ -330,10 +330,10 @@
|
||||
return
|
||||
if(H.stat != DEAD)
|
||||
if(H.IsWeakened())
|
||||
visible_message("<span class='warning'>[H] looks to be in pain!</span>")
|
||||
H.visible_message("<span class='warning'>[H] looks to be in pain!</span>")
|
||||
H.adjustBrainLoss(60)
|
||||
else
|
||||
visible_message("<span class='warning'>[H] looks to be stunned by the energy!</span>")
|
||||
H.visible_message("<span class='warning'>[H] looks to be stunned by the energy!</span>")
|
||||
H.Weaken(40 SECONDS)
|
||||
return
|
||||
for(var/obj/item/bio_chip/mindshield/L in H)
|
||||
@@ -342,7 +342,7 @@
|
||||
for(var/obj/item/bio_chip/traitor/T in H)
|
||||
if(T && T.implanted)
|
||||
qdel(T)
|
||||
visible_message("<span class='warning'>[H] gets an eerie red glow in their eyes!</span>")
|
||||
H.visible_message("<span class='warning'>[H] gets an eerie red glow in their eyes!</span>")
|
||||
|
||||
var/datum/objective/protect/protect_objective = new
|
||||
protect_objective.target = M.mind
|
||||
|
||||
@@ -23,95 +23,95 @@
|
||||
|
||||
/datum/vampire_subclass/umbrae
|
||||
name = "umbrae"
|
||||
standard_powers = list(/obj/effect/proc_holder/spell/vampire/self/cloak = 150,
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_snare = 250,
|
||||
/obj/effect/proc_holder/spell/vampire/soul_anchor = 250,
|
||||
/obj/effect/proc_holder/spell/vampire/dark_passage = 400,
|
||||
/obj/effect/proc_holder/spell/vampire/vamp_extinguish = 600,
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_boxing = 800)
|
||||
standard_powers = list(/datum/spell/vampire/self/cloak = 150,
|
||||
/datum/spell/vampire/shadow_snare = 250,
|
||||
/datum/spell/vampire/soul_anchor = 250,
|
||||
/datum/spell/vampire/dark_passage = 400,
|
||||
/datum/spell/vampire/vamp_extinguish = 600,
|
||||
/datum/spell/vampire/shadow_boxing = 800)
|
||||
fully_powered_abilities = list(/datum/vampire_passive/full,
|
||||
/datum/vampire_passive/vision/full,
|
||||
/obj/effect/proc_holder/spell/vampire/self/eternal_darkness,
|
||||
/datum/spell/vampire/self/eternal_darkness,
|
||||
/datum/vampire_passive/vision/xray)
|
||||
|
||||
/datum/vampire_subclass/hemomancer
|
||||
name = "hemomancer"
|
||||
standard_powers = list(/obj/effect/proc_holder/spell/vampire/self/vamp_claws = 150,
|
||||
/obj/effect/proc_holder/spell/vampire/blood_tendrils = 250,
|
||||
/obj/effect/proc_holder/spell/vampire/blood_barrier = 250,
|
||||
/obj/effect/proc_holder/spell/ethereal_jaunt/blood_pool = 400,
|
||||
/obj/effect/proc_holder/spell/vampire/predator_senses = 600,
|
||||
/obj/effect/proc_holder/spell/vampire/blood_eruption = 800)
|
||||
standard_powers = list(/datum/spell/vampire/self/vamp_claws = 150,
|
||||
/datum/spell/vampire/blood_tendrils = 250,
|
||||
/datum/spell/vampire/blood_barrier = 250,
|
||||
/datum/spell/ethereal_jaunt/blood_pool = 400,
|
||||
/datum/spell/vampire/predator_senses = 600,
|
||||
/datum/spell/vampire/blood_eruption = 800)
|
||||
fully_powered_abilities = list(/datum/vampire_passive/full,
|
||||
/datum/vampire_passive/vision/full,
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_spill)
|
||||
/datum/spell/vampire/self/blood_spill)
|
||||
|
||||
/datum/vampire_subclass/gargantua
|
||||
name = "gargantua"
|
||||
standard_powers = list(/obj/effect/proc_holder/spell/vampire/self/blood_swell = 150,
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_rush = 250,
|
||||
/obj/effect/proc_holder/spell/vampire/self/stomp = 250,
|
||||
standard_powers = list(/datum/spell/vampire/self/blood_swell = 150,
|
||||
/datum/spell/vampire/self/blood_rush = 250,
|
||||
/datum/spell/vampire/self/stomp = 250,
|
||||
/datum/vampire_passive/blood_swell_upgrade = 400,
|
||||
/obj/effect/proc_holder/spell/vampire/self/overwhelming_force = 600,
|
||||
/obj/effect/proc_holder/spell/vampire/charge = 800,
|
||||
/obj/effect/proc_holder/spell/fireball/demonic_grasp = 800)
|
||||
/datum/spell/vampire/self/overwhelming_force = 600,
|
||||
/datum/spell/vampire/charge = 800,
|
||||
/datum/spell/fireball/demonic_grasp = 800)
|
||||
fully_powered_abilities = list(/datum/vampire_passive/full,
|
||||
/datum/vampire_passive/vision/full,
|
||||
/obj/effect/proc_holder/spell/vampire/arena)
|
||||
/datum/spell/vampire/arena)
|
||||
improved_rejuv_healing = TRUE
|
||||
|
||||
/datum/vampire_subclass/dantalion
|
||||
name = "dantalion"
|
||||
standard_powers = list(/obj/effect/proc_holder/spell/vampire/enthrall = 150,
|
||||
/obj/effect/proc_holder/spell/vampire/thrall_commune = 150,
|
||||
/obj/effect/proc_holder/spell/vampire/pacify = 250,
|
||||
/obj/effect/proc_holder/spell/vampire/switch_places = 250,
|
||||
/obj/effect/proc_holder/spell/vampire/self/decoy = 400,
|
||||
standard_powers = list(/datum/spell/vampire/enthrall = 150,
|
||||
/datum/spell/vampire/thrall_commune = 150,
|
||||
/datum/spell/vampire/pacify = 250,
|
||||
/datum/spell/vampire/switch_places = 250,
|
||||
/datum/spell/vampire/self/decoy = 400,
|
||||
/datum/vampire_passive/increment_thrall_cap = 400,
|
||||
/obj/effect/proc_holder/spell/vampire/rally_thralls = 600,
|
||||
/datum/spell/vampire/rally_thralls = 600,
|
||||
/datum/vampire_passive/increment_thrall_cap/two = 600,
|
||||
/obj/effect/proc_holder/spell/vampire/self/share_damage = 800)
|
||||
/datum/spell/vampire/self/share_damage = 800)
|
||||
fully_powered_abilities = list(/datum/vampire_passive/full,
|
||||
/obj/effect/proc_holder/spell/vampire/hysteria,
|
||||
/datum/spell/vampire/hysteria,
|
||||
/datum/vampire_passive/vision/full,
|
||||
/datum/vampire_passive/increment_thrall_cap/three)
|
||||
|
||||
|
||||
/datum/vampire_subclass/ancient
|
||||
name = "ancient"
|
||||
standard_powers = list(/obj/effect/proc_holder/spell/vampire/self/vamp_claws,
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_swell,
|
||||
/obj/effect/proc_holder/spell/vampire/self/cloak,
|
||||
/obj/effect/proc_holder/spell/vampire/enthrall,
|
||||
/obj/effect/proc_holder/spell/vampire/thrall_commune,
|
||||
/obj/effect/proc_holder/spell/vampire/blood_tendrils,
|
||||
/obj/effect/proc_holder/spell/vampire/blood_barrier,
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_rush,
|
||||
/obj/effect/proc_holder/spell/vampire/self/stomp,
|
||||
/obj/effect/proc_holder/spell/vampire/charge,
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_snare,
|
||||
/obj/effect/proc_holder/spell/vampire/soul_anchor,
|
||||
/obj/effect/proc_holder/spell/vampire/pacify,
|
||||
/obj/effect/proc_holder/spell/vampire/switch_places,
|
||||
/obj/effect/proc_holder/spell/ethereal_jaunt/blood_pool,
|
||||
standard_powers = list(/datum/spell/vampire/self/vamp_claws,
|
||||
/datum/spell/vampire/self/blood_swell,
|
||||
/datum/spell/vampire/self/cloak,
|
||||
/datum/spell/vampire/enthrall,
|
||||
/datum/spell/vampire/thrall_commune,
|
||||
/datum/spell/vampire/blood_tendrils,
|
||||
/datum/spell/vampire/blood_barrier,
|
||||
/datum/spell/vampire/self/blood_rush,
|
||||
/datum/spell/vampire/self/stomp,
|
||||
/datum/spell/vampire/charge,
|
||||
/datum/spell/vampire/shadow_snare,
|
||||
/datum/spell/vampire/soul_anchor,
|
||||
/datum/spell/vampire/pacify,
|
||||
/datum/spell/vampire/switch_places,
|
||||
/datum/spell/ethereal_jaunt/blood_pool,
|
||||
/datum/vampire_passive/blood_swell_upgrade,
|
||||
/obj/effect/proc_holder/spell/vampire/dark_passage,
|
||||
/obj/effect/proc_holder/spell/vampire/self/decoy,
|
||||
/obj/effect/proc_holder/spell/vampire/blood_eruption,
|
||||
/obj/effect/proc_holder/spell/vampire/predator_senses,
|
||||
/obj/effect/proc_holder/spell/vampire/self/overwhelming_force,
|
||||
/obj/effect/proc_holder/spell/vampire/vamp_extinguish,
|
||||
/obj/effect/proc_holder/spell/vampire/rally_thralls,
|
||||
/obj/effect/proc_holder/spell/vampire/self/share_damage,
|
||||
/obj/effect/proc_holder/spell/fireball/demonic_grasp,
|
||||
/obj/effect/proc_holder/spell/vampire/shadow_boxing,
|
||||
/datum/spell/vampire/dark_passage,
|
||||
/datum/spell/vampire/self/decoy,
|
||||
/datum/spell/vampire/blood_eruption,
|
||||
/datum/spell/vampire/predator_senses,
|
||||
/datum/spell/vampire/self/overwhelming_force,
|
||||
/datum/spell/vampire/vamp_extinguish,
|
||||
/datum/spell/vampire/rally_thralls,
|
||||
/datum/spell/vampire/self/share_damage,
|
||||
/datum/spell/fireball/demonic_grasp,
|
||||
/datum/spell/vampire/shadow_boxing,
|
||||
/datum/vampire_passive/full,
|
||||
/datum/vampire_passive/vision/full,
|
||||
/obj/effect/proc_holder/spell/vampire/self/blood_spill,
|
||||
/obj/effect/proc_holder/spell/vampire/arena,
|
||||
/obj/effect/proc_holder/spell/vampire/self/eternal_darkness,
|
||||
/obj/effect/proc_holder/spell/vampire/hysteria,
|
||||
/obj/effect/proc_holder/spell/vampire/raise_vampires,
|
||||
/datum/spell/vampire/self/blood_spill,
|
||||
/datum/spell/vampire/arena,
|
||||
/datum/spell/vampire/self/eternal_darkness,
|
||||
/datum/spell/vampire/hysteria,
|
||||
/datum/spell/vampire/raise_vampires,
|
||||
/datum/vampire_passive/vision/xray)
|
||||
improved_rejuv_healing = TRUE
|
||||
thrall_cap = 150 // can thrall high pop
|
||||
|
||||
@@ -45,28 +45,28 @@
|
||||
var/list/messages = list()
|
||||
switch(class_type)
|
||||
if("fire")
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/fireball/apprentice(null))
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/sacred_flame(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/fireball/apprentice(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/sacred_flame(null))
|
||||
ADD_TRAIT(new_wiz, TRAIT_RESISTHEAT, MAGIC_TRAIT)
|
||||
ADD_TRAIT(new_wiz, TRAIT_RESISTHIGHPRESSURE, MAGIC_TRAIT)
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/ethereal_jaunt(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/ethereal_jaunt(null))
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(new_wiz), SLOT_HUD_SHOES)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(new_wiz), SLOT_HUD_OUTER_SUIT)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(new_wiz), SLOT_HUD_HEAD)
|
||||
messages += "<b>Your service has not gone unrewarded. Under the tutelage of [my_teacher.real_name], you've acquired proficiency in the fundamentals of Firebending, enabling you to cast spells like Fireball, Sacred Flame, and Ethereal Jaunt.</b>"
|
||||
messages += "<b>You are immune to fire, but you are NOT immune to the explosions caused by your fireballs. Neither is your teacher, for that matter. Be careful!</b>"
|
||||
if("translocation")
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/area_teleport/teleport(null))
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/turf_teleport/blink(null))
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/ethereal_jaunt(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/area_teleport/teleport(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/turf_teleport/blink(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/ethereal_jaunt(null))
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(new_wiz), SLOT_HUD_SHOES)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(new_wiz), SLOT_HUD_OUTER_SUIT)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(new_wiz), SLOT_HUD_HEAD)
|
||||
messages += "<b>Your service has not gone unrewarded. While studying under [my_teacher.real_name], you mastered reality-bending mobility spells, allowing you to cast Teleport, Blink, and Ethereal Jaunt.</b>"
|
||||
if("restoration")
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/charge(null))
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe/knock(null))
|
||||
var/obj/effect/proc_holder/spell/return_to_teacher/S = new /obj/effect/proc_holder/spell/return_to_teacher(null)
|
||||
new_wiz.mind.AddSpell(new /datum/spell/charge(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/aoe/knock(null))
|
||||
var/datum/spell/return_to_teacher/S = new /datum/spell/return_to_teacher(null)
|
||||
S.teacher = my_teacher.mind
|
||||
new_wiz.mind.AddSpell(S)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/gun/magic/staff/healing(new_wiz), SLOT_HUD_RIGHT_HAND)
|
||||
@@ -76,19 +76,19 @@
|
||||
messages += "<b>Your service has not gone unrewarded. Under the guidance of [my_teacher.real_name], you've acquired life-saving survival spells. You can now cast Charge and Knock, and possess the ability to teleport back to your mentor.</b>"
|
||||
messages += "<b>Your Charge spell can be used to recharge your Staff of Healing or reduce the cooldowns of your teacher, if you are grabbing them with empty hands.</b>"
|
||||
if("stealth")
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/mind_transfer(null))
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe/knock(null))
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/fireball/toolbox(null))
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/disguise_self(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/mind_transfer(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/aoe/knock(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/fireball/toolbox(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/disguise_self(null))
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(new_wiz), SLOT_HUD_SHOES)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(new_wiz), SLOT_HUD_WEAR_MASK)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(new_wiz), SLOT_HUD_GLOVES)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_wiz), SLOT_HUD_BELT)
|
||||
messages += "<b>Your service has not gone unrewarded. Under the mentorship of [my_teacher.real_name], you've mastered stealthy, robeless spells. You can now cast Mindswap, Knock, Homing Toolbox, and Disguise Self without the need for wizard robes.</b>"
|
||||
if("honk")
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/touch/banana/apprentice(null))
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/ethereal_jaunt(null))
|
||||
new_wiz.mind.AddSpell(new /obj/effect/proc_holder/spell/summonitem(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/touch/banana/apprentice(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/ethereal_jaunt(null))
|
||||
new_wiz.mind.AddSpell(new /datum/spell/summonitem(null))
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/gun/magic/staff/slipping(new_wiz), SLOT_HUD_RIGHT_HAND)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes/magical/nodrop(new_wiz), SLOT_HUD_SHOES)
|
||||
new_wiz.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/clown(new_wiz), SLOT_HUD_OUTER_SUIT)
|
||||
|
||||
Reference in New Issue
Block a user