Files
Paradise/code/datums/spell_handler/vampire.dm
Contrabang 65ab4a5d89 Refactors station areas to be /area/station subtypes (#21681)
* areas

* progress...

* death hatred and murder

* get current master maps

* hoooly shit i can load up the maps

* it compiles now

* map changes

* fixes some unintended stuff

* make the .dme right

* fix mixed space+tab indents

* more space-tab fixes

* CI, please show me more than 1 CI fail at a time

* UPDATE PATHS!!!

* none of the stations had it anyways, but fixed

* mint wasnt actually deleted, my bad

* epic random CI fail for no reason

* i beg you, CI

* dont delete anything

* okay THAT should work now

* okay get master maps and rerun

* okay THEN run update paths

* actually done now

* oops
2023-09-06 17:37:50 +01:00

56 lines
2.3 KiB
Plaintext

/datum/spell_handler/vampire
var/required_blood
/// If the blood cost should be handled by this handler. Or if the spell will handle it itself
var/deduct_blood_on_cast = TRUE
/datum/spell_handler/vampire/can_cast(mob/user, charge_check, show_message, obj/effect/proc_holder/spell/spell)
var/datum/antagonist/vampire/vampire = user.mind.has_antag_datum(/datum/antagonist/vampire)
if(!vampire)
return FALSE
var/fullpower = vampire.get_ability(/datum/vampire_passive/full)
if(user.stat >= DEAD) // TODO check if needed
if(show_message)
to_chat(user, "<span class='warning'>Not while you're dead!</span>")
return FALSE
if(vampire.nullified >= VAMPIRE_COMPLETE_NULLIFICATION && !fullpower) // above 100 nullification vampire powers are useless
if(show_message)
to_chat(user, "<span class='warning'>Something is blocking your powers!</span>")
return FALSE
if(vampire.bloodusable < required_blood)
if(show_message)
to_chat(user, "<span class='warning'>You require at least [required_blood] units of usable blood to do that!</span>")
return FALSE
//chapel check
if(istype(get_area(user), /area/station/service/chapel) && !fullpower)
if(show_message)
to_chat(user, "<span class='warning'>Your powers are useless on this holy ground.</span>")
return FALSE
return TRUE
/datum/spell_handler/vampire/spend_spell_cost(mob/user, obj/effect/proc_holder/spell/spell)
if(!required_blood || !deduct_blood_on_cast) //don't take the blood yet if this is false!
return
var/datum/antagonist/vampire/vampire = user.mind.has_antag_datum(/datum/antagonist/vampire)
vampire.bloodusable -= calculate_blood_cost(vampire)
/datum/spell_handler/vampire/proc/calculate_blood_cost(datum/antagonist/vampire/vampire)
var/blood_cost_modifier = 1 + vampire.nullified / 100
var/blood_cost = round(required_blood * blood_cost_modifier)
return blood_cost
/datum/spell_handler/vampire/after_cast(list/targets, mob/user, obj/effect/proc_holder/spell/spell)
if(!spell.should_recharge_after_cast)
return
if(!required_blood)
return
var/datum/antagonist/vampire/vampire = user.mind.has_antag_datum(/datum/antagonist/vampire)
to_chat(user, "<span class='boldnotice'>You have [vampire.bloodusable] left to use.</span>")
SSblackbox.record_feedback("tally", "vampire_powers_used", 1, "[spell]") // Only log abilities which require blood