From f5b0b52b6c6f3951104f93a47dc3bdbb615f76d6 Mon Sep 17 00:00:00 2001 From: cib Date: Sun, 19 May 2013 07:48:43 +0200 Subject: [PATCH] Added stasis bag. This stops all life functions of a patient for a while. It can only be used once, and inflicts low amounts of brain and clone damage over time. --- code/game/objects/items/bodybag.dm | 42 +++++++++++++++++ code/modules/mob/living/carbon/human/life.dm | 46 +++++++++++++------ icons/obj/cryobag.dmi | Bin 373 -> 3399 bytes 3 files changed, 74 insertions(+), 14 deletions(-) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 1c6fe70e8c0..ba63563d7c5 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -84,3 +84,45 @@ icon_state = icon_closed else icon_state = icon_opened + + +/obj/item/bodybag/cryobag + name = "stasis bag" + desc = "A folded, non-reusable bag designed for the preservation of an occupant's brain by stasis." + icon = 'icons/obj/cryobag.dmi' + icon_state = "bodybag_folded" + + + attack_self(mob/user) + var/obj/structure/closet/body_bag/cryobag/R = new /obj/structure/closet/body_bag/cryobag(user.loc) + R.add_fingerprint(user) + del(src) + + + +/obj/structure/closet/body_bag/cryobag + name = "stasis bag" + desc = "A non-reusable plastic bag designed for the preservation of an occupant's brain by stasis." + icon = 'icons/obj/cryobag.dmi' + icon_state = "bodybag_closed" + icon_closed = "bodybag_closed" + icon_opened = "bodybag_open" + density = 0 + + var/used = 0 + + open() + . = ..() + if(used) + var/obj/item/O = new/obj/item(src.loc) + O.name = "used stasis bag" + O.icon = src.icon + O.icon_state = "bodybag_used" + O.desc = "Pretty useless now.." + del(src) + + MouseDrop(over_object, src_location, over_location) + if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src)))) + if(!ishuman(usr)) return + usr << "\red You can't fold that up anymore.." + ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 5221d779791..36b039dc89b 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -28,6 +28,7 @@ var/pressure_alert = 0 var/prev_gender = null // Debug for plural genders var/temperature_alert = 0 + var/in_stasis = 0 /mob/living/carbon/human/Life() @@ -59,8 +60,11 @@ life_tick++ var/datum/gas_mixture/environment = loc.return_air() + in_stasis = istype(loc, /obj/structure/closet/body_bag/cryobag) && loc:opened == 0 + if(in_stasis) loc:used++ + //No need to update all of these procs if the guy is dead. - if(stat != DEAD) + if(stat != DEAD && !in_stasis) if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath breathe() //Only try to take a breath every 4 ticks, unless suffocating @@ -86,18 +90,20 @@ handle_virus_updates() + //stuff in the stomach + handle_stomach() + + handle_shock() + + handle_pain() + + handle_medical_side_effects() + + handle_stasis_bag() + //Handle temperature/pressure differences between body and environment handle_environment(environment) - //stuff in the stomach - handle_stomach() - - handle_shock() - - handle_pain() - - handle_medical_side_effects() - //Status updates, death etc. handle_regular_status_updates() //TODO: optimise ~Carn update_canmove() @@ -196,6 +202,16 @@ src << "\red Your legs won't respond properly, you fall down." lying = 1 + proc/handle_stasis_bag() + // Handle side effects from stasis bag + if(in_stasis) + // First off, there's no oxygen supply, so the mob will slowly take brain damage + adjustBrainLoss(0.1) + + // Next, the method to induce stasis has some adverse side-effects, manifesting + // as cloneloss + adjustCloneLoss(0.1) + proc/handle_mutations_and_radiation() if(getFireLoss()) if((COLD_RESISTANCE in mutations) || (prob(1))) @@ -787,8 +803,8 @@ var/total_plasmaloss = 0 for(var/obj/item/I in src) if(I.contaminated) - total_plasmaloss += vsc.plc.CONTAMINATION_LOSS - if(status_flags & GODMODE) return 0 //godmode + total_plasmaloss += vsc.plc.CONTAMINATION_LOSS + if(status_flags & GODMODE) return 0 //godmode adjustToxLoss(total_plasmaloss) // if(dna && dna.mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist @@ -886,8 +902,10 @@ silent = 0 else //ALIVE. LIGHTS ARE ON updatehealth() //TODO - handle_organs() - handle_blood() + if(!in_stasis) + handle_organs() + handle_blood() + if(health <= config.health_threshold_dead || brain_op_stage == 4.0) death() blinded = 1 diff --git a/icons/obj/cryobag.dmi b/icons/obj/cryobag.dmi index 116a2c44d1699e5fb04180ee3d79ccc94d6e99f1..fe543fad642e06a19fd2ec546c87169f60a413a0 100644 GIT binary patch literal 3399 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 literal 373 zcmV-*0gC>KP)V=-0C=1w$Gr-GAQT4B+4~e9x<`MjODN%>?;vRDP=QLleuLXN0-N5AgR+L+ zSZaQ5NUXz1?8~7gNGvn46!V!{Pi?+MNN`Rp%Vz+>H3d$P#0h+fM3zl+5 zLI3~&$4Nv%R9J=WmfH=(APhxK)s5l-JW@u4n#*GluanaIniE;ayi`WDYS|Q5j$F?1D zl?-dz5myPKxdXK=J!5Qk80I6JSgLsRW;uRs%!; z0RIx4RShF%4mo@5 TSn_%=00000NkvXXu0mjfa;=r7