From 3ba5b36cb38fcb0494f564d14f57d7136e071675 Mon Sep 17 00:00:00 2001 From: cib Date: Wed, 28 Dec 2011 23:43:27 -0800 Subject: [PATCH] Added a "traumatic shock" mechanism. Once you have suffered a certain degree of damage, your vision will start to blurr, followed by immobilization and finally unconsciousness. Right now, the range between this state and crit is too short, but it's rather hard to widen it without rewriting the crit system. --- baystation12.dme | 291 ++++++++++++++++++ code/modules/mob/living/carbon/human/human.dm | 4 +- code/modules/mob/living/carbon/human/life.dm | 95 ++---- code/modules/mob/living/carbon/shock.dm | 18 ++ 4 files changed, 346 insertions(+), 62 deletions(-) create mode 100644 code/modules/mob/living/carbon/shock.dm diff --git a/baystation12.dme b/baystation12.dme index dd713dda42c..a76ace3dad6 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -5,6 +5,284 @@ // END_INTERNALS // BEGIN_FILE_DIR #define FILE_DIR . +#define FILE_DIR ".git" +#define FILE_DIR ".git/hooks" +#define FILE_DIR ".git/info" +#define FILE_DIR ".git/logs" +#define FILE_DIR ".git/logs/refs" +#define FILE_DIR ".git/logs/refs/heads" +#define FILE_DIR ".git/logs/refs/remotes" +#define FILE_DIR ".git/logs/refs/remotes/github" +#define FILE_DIR ".git/logs/refs/remotes/origin" +#define FILE_DIR ".git/objects" +#define FILE_DIR ".git/objects/00" +#define FILE_DIR ".git/objects/01" +#define FILE_DIR ".git/objects/02" +#define FILE_DIR ".git/objects/03" +#define FILE_DIR ".git/objects/04" +#define FILE_DIR ".git/objects/05" +#define FILE_DIR ".git/objects/06" +#define FILE_DIR ".git/objects/07" +#define FILE_DIR ".git/objects/08" +#define FILE_DIR ".git/objects/09" +#define FILE_DIR ".git/objects/0a" +#define FILE_DIR ".git/objects/0b" +#define FILE_DIR ".git/objects/0c" +#define FILE_DIR ".git/objects/0d" +#define FILE_DIR ".git/objects/0e" +#define FILE_DIR ".git/objects/0f" +#define FILE_DIR ".git/objects/10" +#define FILE_DIR ".git/objects/11" +#define FILE_DIR ".git/objects/12" +#define FILE_DIR ".git/objects/13" +#define FILE_DIR ".git/objects/14" +#define FILE_DIR ".git/objects/15" +#define FILE_DIR ".git/objects/16" +#define FILE_DIR ".git/objects/17" +#define FILE_DIR ".git/objects/18" +#define FILE_DIR ".git/objects/19" +#define FILE_DIR ".git/objects/1a" +#define FILE_DIR ".git/objects/1b" +#define FILE_DIR ".git/objects/1c" +#define FILE_DIR ".git/objects/1d" +#define FILE_DIR ".git/objects/1e" +#define FILE_DIR ".git/objects/1f" +#define FILE_DIR ".git/objects/20" +#define FILE_DIR ".git/objects/21" +#define FILE_DIR ".git/objects/22" +#define FILE_DIR ".git/objects/23" +#define FILE_DIR ".git/objects/24" +#define FILE_DIR ".git/objects/25" +#define FILE_DIR ".git/objects/26" +#define FILE_DIR ".git/objects/27" +#define FILE_DIR ".git/objects/28" +#define FILE_DIR ".git/objects/29" +#define FILE_DIR ".git/objects/2a" +#define FILE_DIR ".git/objects/2b" +#define FILE_DIR ".git/objects/2c" +#define FILE_DIR ".git/objects/2d" +#define FILE_DIR ".git/objects/2e" +#define FILE_DIR ".git/objects/2f" +#define FILE_DIR ".git/objects/30" +#define FILE_DIR ".git/objects/31" +#define FILE_DIR ".git/objects/32" +#define FILE_DIR ".git/objects/33" +#define FILE_DIR ".git/objects/34" +#define FILE_DIR ".git/objects/35" +#define FILE_DIR ".git/objects/36" +#define FILE_DIR ".git/objects/37" +#define FILE_DIR ".git/objects/38" +#define FILE_DIR ".git/objects/39" +#define FILE_DIR ".git/objects/3a" +#define FILE_DIR ".git/objects/3b" +#define FILE_DIR ".git/objects/3c" +#define FILE_DIR ".git/objects/3d" +#define FILE_DIR ".git/objects/3e" +#define FILE_DIR ".git/objects/3f" +#define FILE_DIR ".git/objects/40" +#define FILE_DIR ".git/objects/41" +#define FILE_DIR ".git/objects/42" +#define FILE_DIR ".git/objects/43" +#define FILE_DIR ".git/objects/44" +#define FILE_DIR ".git/objects/45" +#define FILE_DIR ".git/objects/46" +#define FILE_DIR ".git/objects/47" +#define FILE_DIR ".git/objects/48" +#define FILE_DIR ".git/objects/49" +#define FILE_DIR ".git/objects/4a" +#define FILE_DIR ".git/objects/4b" +#define FILE_DIR ".git/objects/4c" +#define FILE_DIR ".git/objects/4d" +#define FILE_DIR ".git/objects/4e" +#define FILE_DIR ".git/objects/4f" +#define FILE_DIR ".git/objects/50" +#define FILE_DIR ".git/objects/51" +#define FILE_DIR ".git/objects/52" +#define FILE_DIR ".git/objects/53" +#define FILE_DIR ".git/objects/54" +#define FILE_DIR ".git/objects/55" +#define FILE_DIR ".git/objects/56" +#define FILE_DIR ".git/objects/57" +#define FILE_DIR ".git/objects/58" +#define FILE_DIR ".git/objects/59" +#define FILE_DIR ".git/objects/5a" +#define FILE_DIR ".git/objects/5b" +#define FILE_DIR ".git/objects/5c" +#define FILE_DIR ".git/objects/5d" +#define FILE_DIR ".git/objects/5e" +#define FILE_DIR ".git/objects/5f" +#define FILE_DIR ".git/objects/60" +#define FILE_DIR ".git/objects/61" +#define FILE_DIR ".git/objects/62" +#define FILE_DIR ".git/objects/63" +#define FILE_DIR ".git/objects/64" +#define FILE_DIR ".git/objects/65" +#define FILE_DIR ".git/objects/66" +#define FILE_DIR ".git/objects/67" +#define FILE_DIR ".git/objects/68" +#define FILE_DIR ".git/objects/69" +#define FILE_DIR ".git/objects/6a" +#define FILE_DIR ".git/objects/6b" +#define FILE_DIR ".git/objects/6c" +#define FILE_DIR ".git/objects/6d" +#define FILE_DIR ".git/objects/6e" +#define FILE_DIR ".git/objects/6f" +#define FILE_DIR ".git/objects/70" +#define FILE_DIR ".git/objects/71" +#define FILE_DIR ".git/objects/72" +#define FILE_DIR ".git/objects/73" +#define FILE_DIR ".git/objects/74" +#define FILE_DIR ".git/objects/75" +#define FILE_DIR ".git/objects/76" +#define FILE_DIR ".git/objects/77" +#define FILE_DIR ".git/objects/78" +#define FILE_DIR ".git/objects/79" +#define FILE_DIR ".git/objects/7a" +#define FILE_DIR ".git/objects/7b" +#define FILE_DIR ".git/objects/7c" +#define FILE_DIR ".git/objects/7d" +#define FILE_DIR ".git/objects/7e" +#define FILE_DIR ".git/objects/7f" +#define FILE_DIR ".git/objects/80" +#define FILE_DIR ".git/objects/81" +#define FILE_DIR ".git/objects/82" +#define FILE_DIR ".git/objects/83" +#define FILE_DIR ".git/objects/84" +#define FILE_DIR ".git/objects/85" +#define FILE_DIR ".git/objects/86" +#define FILE_DIR ".git/objects/87" +#define FILE_DIR ".git/objects/88" +#define FILE_DIR ".git/objects/89" +#define FILE_DIR ".git/objects/8a" +#define FILE_DIR ".git/objects/8b" +#define FILE_DIR ".git/objects/8c" +#define FILE_DIR ".git/objects/8d" +#define FILE_DIR ".git/objects/8e" +#define FILE_DIR ".git/objects/8f" +#define FILE_DIR ".git/objects/90" +#define FILE_DIR ".git/objects/91" +#define FILE_DIR ".git/objects/92" +#define FILE_DIR ".git/objects/93" +#define FILE_DIR ".git/objects/94" +#define FILE_DIR ".git/objects/95" +#define FILE_DIR ".git/objects/96" +#define FILE_DIR ".git/objects/97" +#define FILE_DIR ".git/objects/98" +#define FILE_DIR ".git/objects/99" +#define FILE_DIR ".git/objects/9a" +#define FILE_DIR ".git/objects/9b" +#define FILE_DIR ".git/objects/9c" +#define FILE_DIR ".git/objects/9d" +#define FILE_DIR ".git/objects/9e" +#define FILE_DIR ".git/objects/9f" +#define FILE_DIR ".git/objects/a0" +#define FILE_DIR ".git/objects/a1" +#define FILE_DIR ".git/objects/a2" +#define FILE_DIR ".git/objects/a3" +#define FILE_DIR ".git/objects/a4" +#define FILE_DIR ".git/objects/a5" +#define FILE_DIR ".git/objects/a6" +#define FILE_DIR ".git/objects/a7" +#define FILE_DIR ".git/objects/a8" +#define FILE_DIR ".git/objects/a9" +#define FILE_DIR ".git/objects/aa" +#define FILE_DIR ".git/objects/ab" +#define FILE_DIR ".git/objects/ac" +#define FILE_DIR ".git/objects/ad" +#define FILE_DIR ".git/objects/ae" +#define FILE_DIR ".git/objects/af" +#define FILE_DIR ".git/objects/b0" +#define FILE_DIR ".git/objects/b1" +#define FILE_DIR ".git/objects/b2" +#define FILE_DIR ".git/objects/b3" +#define FILE_DIR ".git/objects/b4" +#define FILE_DIR ".git/objects/b5" +#define FILE_DIR ".git/objects/b6" +#define FILE_DIR ".git/objects/b7" +#define FILE_DIR ".git/objects/b8" +#define FILE_DIR ".git/objects/b9" +#define FILE_DIR ".git/objects/ba" +#define FILE_DIR ".git/objects/bb" +#define FILE_DIR ".git/objects/bc" +#define FILE_DIR ".git/objects/bd" +#define FILE_DIR ".git/objects/be" +#define FILE_DIR ".git/objects/bf" +#define FILE_DIR ".git/objects/c0" +#define FILE_DIR ".git/objects/c1" +#define FILE_DIR ".git/objects/c2" +#define FILE_DIR ".git/objects/c3" +#define FILE_DIR ".git/objects/c4" +#define FILE_DIR ".git/objects/c5" +#define FILE_DIR ".git/objects/c6" +#define FILE_DIR ".git/objects/c7" +#define FILE_DIR ".git/objects/c8" +#define FILE_DIR ".git/objects/c9" +#define FILE_DIR ".git/objects/ca" +#define FILE_DIR ".git/objects/cb" +#define FILE_DIR ".git/objects/cc" +#define FILE_DIR ".git/objects/cd" +#define FILE_DIR ".git/objects/ce" +#define FILE_DIR ".git/objects/cf" +#define FILE_DIR ".git/objects/d0" +#define FILE_DIR ".git/objects/d1" +#define FILE_DIR ".git/objects/d2" +#define FILE_DIR ".git/objects/d3" +#define FILE_DIR ".git/objects/d4" +#define FILE_DIR ".git/objects/d5" +#define FILE_DIR ".git/objects/d6" +#define FILE_DIR ".git/objects/d7" +#define FILE_DIR ".git/objects/d8" +#define FILE_DIR ".git/objects/d9" +#define FILE_DIR ".git/objects/da" +#define FILE_DIR ".git/objects/db" +#define FILE_DIR ".git/objects/dc" +#define FILE_DIR ".git/objects/dd" +#define FILE_DIR ".git/objects/de" +#define FILE_DIR ".git/objects/df" +#define FILE_DIR ".git/objects/e0" +#define FILE_DIR ".git/objects/e1" +#define FILE_DIR ".git/objects/e2" +#define FILE_DIR ".git/objects/e3" +#define FILE_DIR ".git/objects/e4" +#define FILE_DIR ".git/objects/e5" +#define FILE_DIR ".git/objects/e6" +#define FILE_DIR ".git/objects/e7" +#define FILE_DIR ".git/objects/e8" +#define FILE_DIR ".git/objects/e9" +#define FILE_DIR ".git/objects/ea" +#define FILE_DIR ".git/objects/eb" +#define FILE_DIR ".git/objects/ec" +#define FILE_DIR ".git/objects/ed" +#define FILE_DIR ".git/objects/ee" +#define FILE_DIR ".git/objects/ef" +#define FILE_DIR ".git/objects/f0" +#define FILE_DIR ".git/objects/f1" +#define FILE_DIR ".git/objects/f2" +#define FILE_DIR ".git/objects/f3" +#define FILE_DIR ".git/objects/f4" +#define FILE_DIR ".git/objects/f5" +#define FILE_DIR ".git/objects/f6" +#define FILE_DIR ".git/objects/f7" +#define FILE_DIR ".git/objects/f8" +#define FILE_DIR ".git/objects/f9" +#define FILE_DIR ".git/objects/fa" +#define FILE_DIR ".git/objects/fb" +#define FILE_DIR ".git/objects/fc" +#define FILE_DIR ".git/objects/fd" +#define FILE_DIR ".git/objects/fe" +#define FILE_DIR ".git/objects/ff" +#define FILE_DIR ".git/objects/info" +#define FILE_DIR ".git/objects/pack" +#define FILE_DIR ".git/rebase-apply" +#define FILE_DIR ".git/refs" +#define FILE_DIR ".git/refs/heads" +#define FILE_DIR ".git/refs/remotes" +#define FILE_DIR ".git/refs/remotes/github" +#define FILE_DIR ".git/refs/remotes/origin" +#define FILE_DIR ".git/svn" +#define FILE_DIR ".git/svn/refs" +#define FILE_DIR ".git/svn/refs/remotes" +#define FILE_DIR ".git/svn/refs/remotes/git-svn" #define FILE_DIR "code" #define FILE_DIR "code/ATMOSPHERICS" #define FILE_DIR "code/ATMOSPHERICS/components" @@ -143,6 +421,15 @@ #define FILE_DIR "code/WorkInProgress/organs" #define FILE_DIR "code/WorkInProgress/SkyMarshal" #define FILE_DIR "code/WorkInProgress/virus2" +#define FILE_DIR "config" +#define FILE_DIR "config/names" +#define FILE_DIR "data" +#define FILE_DIR "data/logs" +#define FILE_DIR "data/logs/2011" +#define FILE_DIR "data/logs/2011/12-December" +#define FILE_DIR "data/player_saves" +#define FILE_DIR "data/player_saves/c" +#define FILE_DIR "data/player_saves/c/cib" #define FILE_DIR "html" #define FILE_DIR "icons" #define FILE_DIR "icons/effects" @@ -156,12 +443,14 @@ #define FILE_DIR "icons/obj/machines" #define FILE_DIR "icons/obj/pipes" #define FILE_DIR "icons/pda_icons" +#define FILE_DIR "icons/PSD files" #define FILE_DIR "icons/spideros_icons" #define FILE_DIR "icons/Testing" #define FILE_DIR "icons/turf" #define FILE_DIR "icons/vending_icons" #define FILE_DIR "interface" #define FILE_DIR "maps" +#define FILE_DIR "music" #define FILE_DIR "sound" #define FILE_DIR "sound/ambience" #define FILE_DIR "sound/announcer" @@ -174,6 +463,7 @@ #define FILE_DIR "sound/piano" #define FILE_DIR "sound/voice" #define FILE_DIR "sound/weapons" +#define FILE_DIR "SQL" // END_FILE_DIR // BEGIN_PREFERENCES #define DEBUG @@ -795,6 +1085,7 @@ #include "code\modules\mob\living\say.dm" #include "code\modules\mob\living\blob\blob.dm" #include "code\modules\mob\living\carbon\carbon.dm" +#include "code\modules\mob\living\carbon\shock.dm" #include "code\modules\mob\living\carbon\alien\alien.dm" #include "code\modules\mob\living\carbon\alien\say.dm" #include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e67bc80f549..093e3b113cd 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -181,6 +181,8 @@ if (bodytemperature < 283.222) tally += (283.222 - bodytemperature) / 10 * 1.75 + if (shock_stage >= 10) tally += 3 + return tally /mob/living/carbon/human/Stat() @@ -2328,4 +2330,4 @@ It can still be worn/put on as normal. /mob/living/carbon/human/Paralyse(amount) if(mutations & HULK) return - ..() + ..() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 15adc1d1cae..affa676e2c2 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -21,6 +21,9 @@ var/datum/gas_mixture/environment = loc.return_air() + // clean all symptoms, they must be set again in this cycle + src.disease_symptoms = 0 + if (stat != 2) //still breathing //First, resolve location and get a breath @@ -34,6 +37,8 @@ var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) + src.handle_shock() + //Apparently, the person who wrote this code designed it so that //blinded get reset each cycle and then get activated later in the //code. Very ugly. I dont care. Moving this stuff here so its easy @@ -992,9 +997,6 @@ for(var/datum/disease/D in viruses) D.cure() - // clean all the symptoms incurred by the virus - src.disease_symptoms = 0 - if(!virus2) // the following is silly since it lets you infect people through glass /*for(var/mob/living/carbon/M in oviewers(4,src)) @@ -1058,65 +1060,36 @@ if ((changeling.geneticdamage > 0)) changeling.geneticdamage = changeling.geneticdamage-1 -/* - // Commented out so hunger system won't be such shock - // Damage and effect from not eating - if(nutrition <= 50) - if (prob (0.1)) - src << "\red Your stomach rumbles." - if (prob (10)) - bruteloss++ - if (prob (5)) - src << "You feel very weak." - weakened += rand(2, 3) -*/ -/* -snippets + handle_shock() + ..() - if (mach) - if (machine) - mach.icon_state = "mach1" + if(traumatic_shock >= 80) + shock_stage += 1 else - mach.icon_state = null + shock_stage-- + shock_stage = max(shock_stage, 0) + return - if (!m_flag) - moved_recently = 0 - m_flag = null + if (shock_stage > 60) + if(shock_stage == 61) + for(var/mob/O in viewers(src, null)) + O.show_message("[src.name]'s body becomes limp.", 1) + Stun(20) + lying = 1 + disease_symptoms |= DISEASE_WHISPER - - - if ((istype(loc, /turf/space) && !( locate(/obj/movable, loc) ))) - var/layers = 20 - // ******* Check - if (((istype(head, /obj/item/clothing/head) && head.flags & 4) || (istype(wear_mask, /obj/item/clothing/mask) && (!( wear_mask.flags & 4 ) && wear_mask.flags & 8)))) - layers -= 5 - if (istype(w_uniform, /obj/item/clothing/under)) - layers -= 5 - if ((istype(wear_suit, /obj/item/clothing/suit) && wear_suit.flags & 8)) - layers -= 10 - if (layers > oxcheck) - oxcheck = layers - - - if(bodytemperature < 282.591 && (!firemut)) - if(bodytemperature < 250) - adjustFireLoss(4) - updatehealth() - if(paralysis <= 2) paralysis += 2 - else if(prob(1) && !paralysis) - if(paralysis <= 5) paralysis += 5 - emote("collapse") - src << "\red You collapse from the cold!" - if(bodytemperature > 327.444 && (!firemut)) - if(bodytemperature > 345.444) - if(!eye_blurry) src << "\red The heat blurs your vision!" - eye_blurry = max(4, eye_blurry) - if(prob(3)) adjustFireLoss(rand(1,2)) - else if(prob(3) && !paralysis) - paralysis += 2 - emote("collapse") - src << "\red You collapse from heat exaustion!" - plcheck = t_plasma - oxcheck = t_oxygen - G.turf_add(T, G.total_moles()) -*/ \ No newline at end of file + if (shock_stage > 100) + if(prob(5)) + Paralyse(50) + if(shock_stage >= 30) + if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.") + eye_blurry = max(2, eye_blurry) + stuttering = max(stuttering, 5) + bodytemperature = 313.15 // high fever + // pain messages + if(shock_stage == 10) + src << ""+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!") + else if(shock_stage == 40) + src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") + else if(shock_stage == 80) + src << ""+pick("You see a light at the end of the tunnel!", "You feel like you could die any moment now.", "You're about to lose consciousness.") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm new file mode 100644 index 00000000000..1a846fc1c49 --- /dev/null +++ b/code/modules/mob/living/carbon/shock.dm @@ -0,0 +1,18 @@ +/mob/living/carbon/var/traumatic_shock = 0 +/mob/living/carbon/var/shock_stage = 0 + +// proc to find out in how much pain the mob is at the moment +/mob/living/carbon/proc/updateshock() + src.traumatic_shock = src.getOxyLoss() + src.getToxLoss() + src.getFireLoss() + 1.5*src.getBruteLoss() + 2*src.getCloneLoss() + if(reagents.has_reagent("alkysine")) + src.traumatic_shock -= 10 + if(reagents.has_reagent("inaprovaline")) + src.traumatic_shock -= 15 + if(reagents.has_reagent("synaptizine")) + src.traumatic_shock -= 50 + + return src.traumatic_shock + + +/mob/living/carbon/proc/handle_shock() + updateshock() \ No newline at end of file