diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm index 1e549c23c0..525bbeac7e 100644 --- a/code/game/objects/items/devices/defib.dm +++ b/code/game/objects/items/devices/defib.dm @@ -509,8 +509,8 @@ return // Still no brain. // If the brain'd `defib_timer` var gets below this number, brain damage will happen at a linear rate. - // This is measures in `Life()` ticks. E.g. 10 minute defib timer = 6000 world.time units = 3000 `Life()` ticks. - var/brain_damage_timer = ((config.defib_timer MINUTES) / 2) - ((config.defib_braindamage_timer MINUTES) / 2) + // This is measures in `Life()` ticks. E.g. 10 minute defib timer = 300 `Life()` ticks. // Original math was VERY off. Life() tick occurs every ~2 seconds, not every 2 world.time ticks. + var/brain_damage_timer = ((config.defib_timer MINUTES) / 20) - ((config.defib_braindamage_timer MINUTES) / 20) if(brain.defib_timer > brain_damage_timer) return // They got revived before brain damage got a chance to set in. diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index 30c539bbde..386cfdaef5 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -33,7 +33,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) if(!owner || owner.stat == DEAD) defib_timer = max(--defib_timer, 0) else - defib_timer = min(++defib_timer, (config.defib_timer MINUTES) / 2) + defib_timer = min(++defib_timer, (config.defib_timer MINUTES) / 20) // Time vars measure things in ticks. Life tick happens every ~2 seconds, therefore dividing by 20 /obj/item/organ/internal/brain/proc/can_assist() return can_assist @@ -81,7 +81,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain) /obj/item/organ/internal/brain/New() ..() health = config.default_brain_health - defib_timer = (config.defib_timer MINUTES) / 2 + defib_timer = (config.defib_timer MINUTES) / 20 // Time vars measure things in ticks. Life tick happens every ~2 seconds, therefore dividing by 20 spawn(5) if(brainmob) butcherable = FALSE diff --git a/code/modules/surgery/additions_ch.dm b/code/modules/surgery/additions_ch.dm index b2c603a341..ecddfed994 100644 --- a/code/modules/surgery/additions_ch.dm +++ b/code/modules/surgery/additions_ch.dm @@ -146,4 +146,38 @@ "Your hand slips, failing to finish the surgery, and damaging [target] with \the [tool].") affected.createwound(CUT, 15) affected.createwound(BRUISE, 10) + ..() + +/datum/surgery_step/internal/brain_revive + blood_level = 0 + allowed_tools = list(/obj/item/weapon/surgical/bioregen=100) + min_duration = 120 + max_duration = 150 + +/datum/surgery_step/internal/brain_revive/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/internal/brain/brain = target.internal_organs_by_name[O_BRAIN] + return ..() && target_zone == BP_HEAD && istype(brain) && (brain.status & ORGAN_DEAD || brain.defib_timer == 0) + +/datum/surgery_step/internal/brain_revive/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] begins to use \the [tool] to reverse the decay on and revatilize [target]'s brain.", \ + "You begin to use \the [tool] to reverse the decay on and revatilize [target]'s brain.") + ..() + +/datum/surgery_step/internal/brain_revive/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] finishes reversing the decay on and revatalizing [target]'s brain.", \ + "You finish reversing the decay on and revatalizing [target]'s brain.") + var/obj/item/organ/internal/brain/brain = target.internal_organs_by_name[O_BRAIN] + brain.damage = max(0,brain.damage - 10) + brain.status &= ~ORGAN_DEAD + brain.handle_organ_mod_special() + brain.defib_timer = (config.defib_timer MINUTES) / 20 + START_PROCESSING(SSobj, brain) + ..() + +/datum/surgery_step/internal/brain_revive/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user]'s hand slips, failing to finish the surgery, and damaging [target] with \the [tool].", \ + "Your hand slips, failing to finish the surgery, and damaging [target] with \the [tool].") + var/obj/item/organ/external/affected = target.get_organ(target_zone) + affected.createwound(CUT, 15) + affected.createwound(BRUISE, 10) ..() \ No newline at end of file