From 6e61fe391480c4bb37837d18c2d56b2535c16554 Mon Sep 17 00:00:00 2001 From: Spamcat Date: Fri, 5 Jul 2013 03:11:50 +0400 Subject: [PATCH] Initial pulse code. WIP --- .../mob/living/carbon/carbon_defines.dm | 4 +- .../mob/living/carbon/human/examine.dm | 1 + code/modules/mob/living/carbon/human/human.dm | 40 +++++++++++++++++++ code/modules/mob/living/carbon/human/life.dm | 33 +++++++++++++++ code/setup.dm | 15 +++++++ 5 files changed, 92 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 2ea08f56a48..dd1a80a80c4 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -19,4 +19,6 @@ //Surgery info var/datum/surgery_status/op_stage = new/datum/surgery_status //Active emote/pose - var/pose = null \ No newline at end of file + var/pose = null + + var/pulse = PULSE_NORM //current pulse level \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 20f56dd0228..c929d5e952b 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -440,6 +440,7 @@ if( findtext(pose,".",lentext(pose)) == 0 && findtext(pose,"!",lentext(pose)) == 0 && findtext(pose,"?",lentext(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. msg += "\n[t_He] is [pose]" + msg += "\n\red pulse:[src.pulse]" usr << msg diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 78546ceea22..ea98ee5631e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1218,3 +1218,43 @@ mob/living/carbon/human/yank_out_object() organ.status |= ORGAN_BLEEDING organ.take_damage(rand(1,3), 0, 0) src.adjustToxLoss(rand(1,3)) + +/mob/living/carbon/human/verb/check_pulse() + set category = "Object" + set name = "Check pulse" + set desc = "Approximately count somebody's pulse. Requires you to stand still at least 6 seconds." + set src in view(1) + + if(usr.stat == 1 || usr.restrained() || !isliving(usr)) return + + usr.visible_message("\blue [usr] kneels down, puts \his hand on [src]'s wrist and begins counting their pulse.",\ + "\blue Don't move until counting is finished.") + if(src.pulse) + usr << "\blue [src] has pulse! Counting..." + else + usr << "\red [src] has no pulse!" + return + + sleep(60) + if(usr.move_speed >= 60) + usr << "\blue [src]'s pulse is [src.get_pulse(0)]." + +/mob/living/carbon/human/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate + var/temp = 0 + switch(src.pulse) + if(PULSE_NONE) + return "0" + if(PULSE_SLOW) + temp = rand(40, 60) + return method ? num2text(temp) : temp + rand(-10, 10) + if(PULSE_NORM) + temp = rand(60, 90) + return method ? num2text(temp) : temp + rand(-10, 10) + if(PULSE_FAST) + temp = rand(90, 120) + return method ? num2text(temp) : temp + rand(-10, 10) + if(PULSE_2FAST) + temp = rand(120, 160) + return method ? num2text(temp) : temp + rand(-10, 10) + if(PULSE_THREADY) + return method ? ">250" : "extremely weak and fast, patient's artery feels like a thread" \ 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 366ea5e02b3..566e5a24e27 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -113,6 +113,8 @@ handle_regular_hud_updates() + pulse = handle_pulse() + // Grabbing for(var/obj/item/weapon/grab/G in src) G.process() @@ -211,6 +213,8 @@ // Next, the method to induce stasis has some adverse side-effects, manifesting // as cloneloss adjustCloneLoss(0.1) + //no pulse in stasis + pulse = PULSE_NONE proc/handle_mutations_and_radiation() if(getFireLoss()) @@ -1414,5 +1418,34 @@ if (shock_stage > 80) Paralyse(rand(15,28)) + proc/handle_pulse() + //if(life_tick % 100) return pulse //update pulse every 100 life ticks + + if(stat == DEAD) + return PULSE_NONE //that's it, you're dead, nothing can influence your pulse + + var/temp = PULSE_NORM + + if(round(vessel.get_reagent_amount("blood")) <= BLOOD_VOLUME_BAD) //how much blood do we have + temp = PULSE_THREADY //not enough :( + + if(reagents.get_reagent_amount("zombiepowder")) + temp = PULSE_NONE //pretend that we're dead. unlike actual death, can be inflienced by meds + + for(var/R in bradycardics) + if(reagents.get_reagent_amount(R)) + if(temp <= PULSE_THREADY && temp >= PULSE_NORM) + temp-- + break //one reagent is enough + + for(var/R in tachycardics) //handles different chems' influence on pulse + if(reagents.get_reagent_amount(R)) + if(temp <= PULSE_FAST && temp >= PULSE_NONE) + temp++ + break + + return temp + + #undef HUMAN_MAX_OXYLOSS #undef HUMAN_CRIT_MAX_OXYLOSS diff --git a/code/setup.dm b/code/setup.dm index f4b8d35e2ff..d817150d909 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -678,3 +678,18 @@ var/list/be_special_flags = list( #define IMPLOYAL_HUD 5 // loyality implant #define IMPCHEM_HUD 6 // chemical implant #define IMPTRACK_HUD 7 // tracking implant + +//Pulse levels, very simplified +#define PULSE_NONE 0 //so !M.pulse checks would be possible +#define PULSE_SLOW 1 //<60 bpm +#define PULSE_NORM 2 //60-90 bpm +#define PULSE_FAST 3 //90-120 bpm +#define PULSE_2FAST 4 //>120 bpm +#define PULSE_THREADY 5 //occurs during hypovolemic shock + +var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglycerin", "thirteenloko", "nicotine") //increase heart rate +var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_drugs", "stoxin") //decrease heart rate + +//get_pulse methods +#define GETPULSE_HAND 0 //less accurate (hand) +#define GETPULSE_TOOL 1 //more accurate (med scanner, sleeper, etc) \ No newline at end of file