mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Adds a fairly simple system that allows adjusting various numbers like max health, incoming damage, outgoing melee damage, etc. The nice part is that changing certain variables this way (like max health) is a lot safer than manually setting the max health var directly. Changes a lot of short lines of code to point towards a variable's getter or setter helper instead of reading the var directly so the modifiers can work. Endoarmor, delayed toxin sting, Enfeebling sting, and recursive adrenaline overdose now use the modifier system. Enfeebling sting now only lasts two minutes, from five minutes, however it now also reduces the victim's melee damage by 25%/50%, and increases the damage they suffer by 10%/35%, for normal and recursive respectively. Delayed Toxin Sting's effects are now felt all at once instead of over the course of a few minutes.
67 lines
2.7 KiB
Plaintext
67 lines
2.7 KiB
Plaintext
/datum/technomancer/spell/resurrect
|
|
name = "Resurrect"
|
|
desc = "This function injects various regenetive medical compounds and nanomachines, in an effort to restart the body, \
|
|
however this must be done soon after they die, as this will have no effect on people who have died long ago. It also doesn't \
|
|
resolve whatever caused them to die originally."
|
|
cost = 100
|
|
obj_path = /obj/item/weapon/spell/resurrect
|
|
ability_icon_state = "tech_resurrect"
|
|
category = SUPPORT_SPELLS
|
|
|
|
/obj/item/weapon/spell/resurrect
|
|
name = "resurrect"
|
|
icon_state = "radiance"
|
|
desc = "Perhaps this can save a trip to cloning?"
|
|
cast_methods = CAST_MELEE
|
|
aspect = ASPECT_BIOMED
|
|
|
|
/obj/item/weapon/spell/resurrect/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
|
if(isliving(hit_atom))
|
|
var/mob/living/L = hit_atom
|
|
if(L == user)
|
|
user << "<span class='warning'>Clever as you may seem, this won't work on yourself while alive.</span>"
|
|
return 0
|
|
if(L.stat != DEAD)
|
|
user << "<span class='warning'>\The [L] isn't dead!</span>"
|
|
return 0
|
|
if(pay_energy(5000))
|
|
if(L.tod > world.time + 30 MINUTES)
|
|
user << "<span class='danger'>\The [L]'s been dead for too long, even this function cannot replace cloning at \
|
|
this point.</span>"
|
|
return 0
|
|
user << "<span class='notice'>You stab \the [L] with a hidden integrated hypo, attempting to bring them back...</span>"
|
|
if(istype(L, /mob/living/simple_animal))
|
|
var/mob/living/simple_animal/SM = L
|
|
SM.health = SM.getMaxHealth() / 3
|
|
SM.stat = CONSCIOUS
|
|
dead_mob_list -= SM
|
|
living_mob_list += SM
|
|
SM.icon_state = SM.icon_living
|
|
adjust_instability(15)
|
|
else if(ishuman(L))
|
|
var/mob/living/carbon/human/H = L
|
|
|
|
if(!H.client && H.mind) //Don't force the dead person to come back if they don't want to.
|
|
for(var/mob/observer/dead/ghost in player_list)
|
|
if(ghost.mind == H.mind)
|
|
ghost << "<b><font color = #330033><font size = 3>The Technomancer [user.real_name] is trying to \
|
|
revive you. Return to your body if you want to be resurrected!</b> \
|
|
(Verbs -> Ghost -> Re-enter corpse)</font></font>"
|
|
break
|
|
|
|
H.adjustBruteLoss(-40)
|
|
H.adjustFireLoss(-40)
|
|
|
|
sleep(10 SECONDS)
|
|
if(H.client)
|
|
L.stat = CONSCIOUS //Note that if whatever killed them in the first place wasn't fixed, they're likely to die again.
|
|
dead_mob_list -= H
|
|
living_mob_list += H
|
|
H.timeofdeath = null
|
|
visible_message("<span class='danger'>\The [H]'s eyes open!</span>")
|
|
user << "<span class='notice'>It's alive!</span>"
|
|
adjust_instability(50)
|
|
log_and_message_admins("has resurrected [H].")
|
|
else
|
|
user << "<span class='warning'>The body of \the [H] doesn't seem to respond, perhaps you could try again?</span>"
|
|
adjust_instability(10) |