diff --git a/code/modules/mob/living/carbon/brain/update_status.dm b/code/modules/mob/living/carbon/brain/update_status.dm new file mode 100644 index 00000000000..2532edfe37d --- /dev/null +++ b/code/modules/mob/living/carbon/brain/update_status.dm @@ -0,0 +1,8 @@ +/mob/living/carbon/brain/update_stat() + if(status_flags & GODMODE) + return + // if(health <= min_health) + if(health <= config.health_threshold_dead) + if(stat != DEAD) + death() + // Put brain(organ) damaging code here diff --git a/code/modules/mob/living/carbon/update_status.dm b/code/modules/mob/living/carbon/update_status.dm new file mode 100644 index 00000000000..6b333c19d07 --- /dev/null +++ b/code/modules/mob/living/carbon/update_status.dm @@ -0,0 +1,17 @@ +/mob/living/carbon/update_stat() + if(status_flags & GODMODE) + return + if(stat != DEAD) +// if(health <= min_health) + if(health <= config.health_threshold_dead) + death() + return +// if(paralysis || sleeping || getOxyLoss() > low_oxy_ko || (status_flags & FAKEDEATH) || health <= crit_health) + if(paralysis || sleeping || getOxyLoss() > 40 || (status_flags & FAKEDEATH) || health <= config.health_threshold_crit) + if(stat == CONSCIOUS) + KnockOut() + else + if(stat == UNCONSCIOUS) + // updating=FALSE because `WakeUp` will handle canmove up for us + StopResting(updating=FALSE) + WakeUp() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 52215b3e08b..dd9e9f7cbd6 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -310,14 +310,6 @@ C.reagents.clear_reagents() C.reagents.addiction_list.Cut() -/mob/living/proc/update_revive() // handles revival through other means than cloning or adminbus (defib, IPC repair) - stat = CONSCIOUS - dead_mob_list -= src - living_mob_list |= src - mob_list |= src - SetEarDeaf(0) - timeofdeath = null - /mob/living/proc/rejuvenate() var/mob/living/carbon/human/human_mob = null //Get this declared for use later. diff --git a/code/modules/mob/living/silicon/ai/update_status.dm b/code/modules/mob/living/silicon/ai/update_status.dm new file mode 100644 index 00000000000..4fa060abf39 --- /dev/null +++ b/code/modules/mob/living/silicon/ai/update_status.dm @@ -0,0 +1,10 @@ +/mob/living/silicon/ai/update_stat() + if(status_flags & GODMODE) + return + if(stat != DEAD) + if(health <= config.health_threshold_dead) + death() + return + else if(stat == UNCONSCIOUS) + WakeUp() + //diag_hud_set_status() diff --git a/code/modules/mob/living/silicon/pai/update_status.dm b/code/modules/mob/living/silicon/pai/update_status.dm new file mode 100644 index 00000000000..155ecc84a28 --- /dev/null +++ b/code/modules/mob/living/silicon/pai/update_status.dm @@ -0,0 +1,3 @@ +/mob/living/silicon/pai/update_stat() + if(health <= 0) + death(gibbed = 0) diff --git a/code/modules/mob/living/silicon/robot/drone/update_status.dm b/code/modules/mob/living/silicon/robot/drone/update_status.dm new file mode 100644 index 00000000000..97d2214c2e2 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/drone/update_status.dm @@ -0,0 +1,10 @@ +//Easiest to check this here, then check again in the robot proc. +//Standard robots use config for crit, which is somewhat excessive for these guys. +//Drones killed by damage will gib. +/mob/living/silicon/robot/drone/update_stat() + if(status_flags & GODMODE) + return + if(health <= -35 && stat != DEAD) + gib() + return + return ..() diff --git a/code/modules/mob/living/silicon/robot/update_status.dm b/code/modules/mob/living/silicon/robot/update_status.dm index ecdee3c023b..a28aae28278 100644 --- a/code/modules/mob/living/silicon/robot/update_status.dm +++ b/code/modules/mob/living/silicon/robot/update_status.dm @@ -2,3 +2,20 @@ /mob/living/silicon/robot/incapacitated() if(stat || lockcharge || weakened || stunned || paralysis || !is_component_functioning("actuator")) return 1 + +/mob/living/silicon/robot/update_stat() + if(status_flags & GODMODE) + return + if(stat != DEAD) + if(health <= -maxHealth) //die only once + death() + return + if(!is_component_functioning("actuator") || paralysis || sleeping || stunned || weakened || getOxyLoss() > maxHealth * 0.5) + if(stat == CONSCIOUS) + KnockOut() + else + if(stat == UNCONSCIOUS) + WakeUp() + // diag_hud_set_status() + // diag_hud_set_health() + // update_health_hud() diff --git a/code/modules/mob/living/stat_states.dm b/code/modules/mob/living/stat_states.dm new file mode 100644 index 00000000000..49c91a10d99 --- /dev/null +++ b/code/modules/mob/living/stat_states.dm @@ -0,0 +1,50 @@ +// There, now `stat` is a proper state-machine + +/mob/living/proc/KnockOut(updating = 1) + if(stat == DEAD) + log_runtime(EXCEPTION("KnockOut called on a dead mob."), src) + return 0 + else if(stat == UNCONSCIOUS) + return 0 + add_logs(src, null, "fallen unconscious at [atom_loc_line(get_turf(src))]", admin=0) + stat = UNCONSCIOUS + if(updating) + // update_blind_effects() + update_canmove() + return 1 + +/mob/living/proc/WakeUp(updating = 1) + if(stat == DEAD) + log_runtime(EXCEPTION("WakeUp called on a dead mob."), src) + return 0 + else if(stat == CONSCIOUS) + return 0 + add_logs(src, null, "woken up at [atom_loc_line(get_turf(src))]", admin=0) + stat = CONSCIOUS + if(updating) + // update_blind_effects() + update_canmove() + return 1 + +/mob/living/proc/can_be_revived() + . = TRUE + // if(health <= min_health) + if(health <= config.health_threshold_dead) + return FALSE + +// death() is used to make a mob die + +// handles revival through other means than cloning or adminbus (defib, IPC repair) +/mob/living/proc/update_revive() + if(stat != DEAD) + return + if(!can_be_revived()) + return + add_logs(src, null, "came back to life at [atom_loc_line(get_turf(src))]", admin=0) + stat = CONSCIOUS + dead_mob_list -= src + living_mob_list += src + timeofdeath = null + update_canmove() + // update_blind_effects() + updatehealth() diff --git a/paradise.dme b/paradise.dme index bd6e246e18c..76be0a60f57 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1457,6 +1457,7 @@ #include "code\modules\mob\living\login.dm" #include "code\modules\mob\living\logout.dm" #include "code\modules\mob\living\say.dm" +#include "code\modules\mob\living\stat_states.dm" #include "code\modules\mob\living\status_procs.dm" #include "code\modules\mob\living\update_status.dm" #include "code\modules\mob\living\carbon\_defines.dm" @@ -1469,6 +1470,7 @@ #include "code\modules\mob\living\carbon\shock.dm" #include "code\modules\mob\living\carbon\superheroes.dm" #include "code\modules\mob\living\carbon\update_icons.dm" +#include "code\modules\mob\living\carbon\update_status.dm" #include "code\modules\mob\living\carbon\alien\alien.dm" #include "code\modules\mob\living\carbon\alien\alien_defenses.dm" #include "code\modules\mob\living\carbon\alien\death.dm" @@ -1505,6 +1507,7 @@ #include "code\modules\mob\living\carbon\brain\MMI.dm" #include "code\modules\mob\living\carbon\brain\posibrain.dm" #include "code\modules\mob\living\carbon\brain\say.dm" +#include "code\modules\mob\living\carbon\brain\update_status.dm" #include "code\modules\mob\living\carbon\human\appearance.dm" #include "code\modules\mob\living\carbon\human\body_accessories.dm" #include "code\modules\mob\living\carbon\human\death.dm" @@ -1562,6 +1565,7 @@ #include "code\modules\mob\living\silicon\ai\login.dm" #include "code\modules\mob\living\silicon\ai\logout.dm" #include "code\modules\mob\living\silicon\ai\say.dm" +#include "code\modules\mob\living\silicon\ai\update_status.dm" #include "code\modules\mob\living\silicon\ai\freelook\cameranet.dm" #include "code\modules\mob\living\silicon\ai\freelook\chunk.dm" #include "code\modules\mob\living\silicon\ai\freelook\eye.dm" @@ -1578,6 +1582,7 @@ #include "code\modules\mob\living\silicon\pai\say.dm" #include "code\modules\mob\living\silicon\pai\software.dm" #include "code\modules\mob\living\silicon\pai\software_modules.dm" +#include "code\modules\mob\living\silicon\pai\update_status.dm" #include "code\modules\mob\living\silicon\robot\component.dm" #include "code\modules\mob\living\silicon\robot\death.dm" #include "code\modules\mob\living\silicon\robot\emote.dm" @@ -1600,6 +1605,7 @@ #include "code\modules\mob\living\silicon\robot\drone\drone_items.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_say.dm" +#include "code\modules\mob\living\silicon\robot\drone\update_status.dm" #include "code\modules\mob\living\simple_animal\constructs.dm" #include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\parrot.dm"