From d26683c4446b9a87a77f2886a311c60e6424343c Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 11 Jul 2018 04:35:36 -0400 Subject: [PATCH 001/105] added other organs, kidney(l/r), liver, stomach, intestines, spleen, pancreas, appendix to organHolder --- code/obj/item/organ.dm | 72 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index a735e6e7..6b84f235 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -14,8 +14,19 @@ var/obj/item/organ/lung/left_lung = null var/obj/item/organ/lung/right_lung = null var/obj/item/clothing/head/butt/butt = null + var/obj/item/organ/kidney/left_kidney = null + var/obj/item/organ/kidney/right_kidney = null + var/obj/item/organ/liver = null + var/obj/item/organ/stomach = null + var/obj/item/organ/intestines = null + var/obj/item/organ/spleen = null + var/obj/item/organ/pancreas = null + var/obj/item/organ/appendix = null - var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt") + +/obj/item/organ/appendix + + var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt", "left_kidney", "right_kidney", "liver", "stomach", "intestines", "spleen", "pancreas", "appendix") New(var/mob/living/carbon/human/H) ..() @@ -46,6 +57,24 @@ right_lung.donor = null if (butt) butt.donor = null + + if (left_kidney) + left_kidney.donor = null + if (right_kidney) + right_kidney.donor = null + if (liver) + liver.donor = null + if (stomach) + stomach.donor = null + if (intestines) + intestines.donor = null + if (spleen) + spleen.donor = null + if (pancreas) + pancreas.donor = null + if (appendix) + appendix.donor = null + donor = null ..() @@ -115,6 +144,47 @@ src.butt.donor = src.donor organ_list["butt"] = butt + if (!src.left_kidney) + src.left_kidney = new /obj/item/organ/kidney/left + src.left_kidney.donor = src.donor + organ_list["left_kidney"] = left_kidney + left_kidney.donor = null + if (!src.right_kidney) + src.right_kidney = new /obj/item/organ/kidney/right + src.right_kidney.donor = src.donor + organ_list["right_kidney"] = right_kidney + right_kidney.donor = null + if (!src.liver) + src.liver = new /obj/item/organ/liver + src.liver.donor = src.donor + organ_list["liver"] = liver + liver.donor = null + if (!src.stomach) + src.stomach = new /obj/item/organ/stomach + src.stomach.donor = src.donor + organ_list["stomach"] = stomach + stomach.donor = null + if (!src.intestines) + src.intestines = new /obj/item/organ/intestines + src.intestines.donor = src.donor + organ_list["intestines"] = intestines + intestines.donor = null + if (!src.spleen) + src.spleen = new /obj/item/organ/spleen + src.spleen.donor = src.donor + organ_list["spleen"] = spleen + spleen.donor = null + if (!src.pancreas) + src.pancreas = new /obj/item/organ/pancreas + src.pancreas.donor = src.donor + organ_list["pancreas"] = pancreas + pancreas.donor = null + if (!src.appendix) + src.appendix = new /obj/item/organ/appendix + src.appendix.donor = src.donor + organ_list["appendix"] = appendix + appendix.donor = null + proc/drop_organ(var/type, var/location) if (!src.donor || !type) return From 62faf003f2da72498df4acdfcb5674311b43b55b Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 11 Jul 2018 04:39:39 -0400 Subject: [PATCH 002/105] more tedious copying drop interaction for new organs --- code/obj/item/organ.dm | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 6b84f235..23c2581c 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -358,6 +358,64 @@ src.butt = null return myButt + if ("left_kidney") + if (!src.butt) + return 0 + var/obj/item/organ/kidney/left/myleft_kidney = src.left_kidney + myleft_kidney.set_loc(location) + src.left_kidney = null + return myleft_kidney + if ("right_kidney") + if (!src.butt) + return 0 + var/obj/item/organ/kidney/right/myright_kidney = src.right_kidney + myright_kidney.set_loc(location) + src.right_kidney = null + return myright_kidney + if ("liver") + if (!src.butt) + return 0 + var/obj/item/organ/liver/myliver = src.liver + myliver.set_loc(location) + src.liver = null + return myliver + if ("stomach") + if (!src.butt) + return 0 + var/obj/item/organ/stomach/mystomach = src.stomach + mystomach.set_loc(location) + src.stomach = null + return mystomach + if ("intestines") + if (!src.butt) + return 0 + var/obj/item/organ/intestines/myintestines = src.intestines + myintestines.set_loc(location) + src.intestines = null + return myintestines + if ("spleen") + if (!src.butt) + return 0 + var/obj/item/organ/spleen/myspleen = src.spleen + myspleen.set_loc(location) + src.spleen = null + return myspleen + if ("pancreas") + if (!src.butt) + return 0 + var/obj/item/organ/pancreas/mypancreas = src.pancreas + mypancreas.set_loc(location) + src.pancreas = null + return mypancreas + if ("appendix") + if (!src.butt) + return 0 + var/obj/item/organ/appendix/myappendix = src.appendix + myappendix.set_loc(location) + src.appendix = null + return myappendix + + proc/receive_organ(var/obj/item/I, var/type, var/op_stage = 0.0, var/force = 0) if (!src.donor || !I || !type) return 0 From 5b956e7477dd0d18a38c7b32b95eba7b329ffa1f Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 11 Jul 2018 04:45:21 -0400 Subject: [PATCH 003/105] more tedious copying for add now, why am I still doing this at this hour? --- code/obj/item/organ.dm | 98 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 23c2581c..a2929571 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -410,6 +410,7 @@ if ("appendix") if (!src.butt) return 0 + var/obj/item/organ/appendix/myappendix = src.appendix myappendix.set_loc(location) src.appendix = null @@ -631,6 +632,103 @@ organ_list["butt"] = newButt success = 1 + if ("left_kidney") + if (src.left_kidney) + if (force) + qdel(src.left_kidney) + else + return 0 + var/obj/item/organ/kidney/left/newleft_kidney = I + newleft_kidney.op_stage = op_stage + src.left_kidney = newleft_kidney + newleft_kidney.set_loc(src.donor) + organ_list["left_kidney"] = newleft_kidney + success = 1 + if ("right_kidney") + if (src.right_kidney) + if (force) + qdel(src.right_kidney) + else + return 0 + var/obj/item/organ/kidney/right/newright_kidney = I + newright_kidney.op_stage = op_stage + src.right_kidney = newright_kidney + newright_kidney.set_loc(src.donor) + organ_list["right_kidney"] = newright_kidney + success = 1 + if ("liver") + if (src.liver) + if (force) + qdel(src.liver) + else + return 0 + var/obj/item/organ/liver/newliver = I + newliver.op_stage = op_stage + src.liver = newliver + newliver.set_loc(src.donor) + organ_list["liver"] = newliver + success = 1 + if ("stomach") + if (src.stomach) + if (force) + qdel(src.stomach) + else + return 0 + var/obj/item/organ/stomach/newstomach = I + newstomach.op_stage = op_stage + src.stomach = newstomach + newstomach.set_loc(src.donor) + organ_list["stomach"] = newstomach + success = 1 + if ("intestines") + if (src.intestines) + if (force) + qdel(src.intestines) + else + return 0 + var/obj/item/organ/intestines/newintestines = I + newintestines.op_stage = op_stage + src.intestines = newintestines + newintestines.set_loc(src.donor) + organ_list["intestines"] = newintestines + success = 1 + if ("spleen") + if (src.spleen) + if (force) + qdel(src.spleen) + else + return 0 + var/obj/item/organ/spleen/newspleen = I + newspleen.op_stage = op_stage + src.spleen = newspleen + newspleen.set_loc(src.donor) + organ_list["spleen"] = newspleen + success = 1 + if ("pancreas") + if (src.pancreas) + if (force) + qdel(src.pancreas) + else + return 0 + var/obj/item/organ/pancreas/newpancreas = I + newpancreas.op_stage = op_stage + src.pancreas = newpancreas + newpancreas.set_loc(src.donor) + organ_list["pancreas"] = newpancreas + success = 1 + if ("appendix") + if (src.appendix) + if (force) + qdel(src.appendix) + else + return 0 + var/obj/item/organ/appendix/newappendix = I + newappendix.op_stage = op_stage + src.appendix = newappendix + newappendix.set_loc(src.donor) + organ_list["appendix"] = newappendix + success = 1 + if (success) if (istype(I, /obj/item/organ)) var/obj/item/organ/O = I From 3293d4db12ab0820bed8db8b276dff3b80cd8904 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 16 Jul 2018 03:07:27 -0400 Subject: [PATCH 004/105] added procs to damage, kidney/liver/lungs and procs to get amount of kidneys and lungs and organ names for new organs for some reason. --- code/mob/living/carbon/human.dm | 44 ++++++++++++++++++++++++++++++++- code/obj/item/organ.dm | 28 +++++++++++++++++++-- 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 1660a588..03428211 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -6463,4 +6463,46 @@ if (src.sims) // saaaaame with sims motives src.sims.updateHudIcons(new_style) - return \ No newline at end of file + return + +/mob/living/carbon/human/proc/take_toxin_damage(var/amount) + if (..()) + return + if (src.bioHolder && src.bioHolder.HasEffect("resist_toxic")) + return + + take_liver_kidney_damage(src.toxloss) + src.toxloss = max(0,src.toxloss + amount) + return + +/mob/living/carbon/human/proc/take_liver_kidney_damage(var/amount) + amount = amount/10 + take_organ_damage(amount, "liver") + if (src.organHolder) + if (prob(40)) + take_organ_damage(amount, "left_kidney") + if (prob(40)) + take_organ_damage(amount, "right_kidney") + +/mob/living/carbon/human/proc/take_lung_damage(var/amount) + amount = amount/20 + if (src.organHolder) + if (prob(40)) + take_organ_damage(amount, "left_lung") + if (prob(40)) + take_organ_damage(amount, "right_lung") + +//damage organs specifically choose name from strings in organ_list var in obj/item/organ in orgam.dm --kyle +//only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. +//return 1 on success, 0 on failure +/mob/living/carbon/human/proc/take_organ_damage(var/amount as num, var/organ as text) + + if (src.organholder) + if (src.organholder.organ_list) + if (src.organholder.organ_list[text]) + var/obj/item/organ/O = src.organholder.organ_list[text] + if (istype(O,/obj/item/organ)) + O.health = max(0, O.health - amount) + return 1 + + return 0 diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index a2929571..da3dd725 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -24,10 +24,24 @@ var/obj/item/organ/appendix = null -/obj/item/organ/appendix - var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt", "left_kidney", "right_kidney", "liver", "stomach", "intestines", "spleen", "pancreas", "appendix") + proc/get_kidney_amt() + var/count = 0 + if (!organ_list && organ_list[["left_kidney"]]) + count++ + if (!organ_list && organ_list[["right_kidney"]]) + count++ + return count + + proc/get_lung_amt() + var/count = 0 + if (!organ_list && organ_list[["left_lung"]]) + count++ + if (!organ_list && organ_list[["right_lung"]]) + count++ + return count + New(var/mob/living/carbon/human/H) ..() if (istype(H)) @@ -783,6 +797,7 @@ var/body_side = null // L_ORGAN/1 for left, R_ORGAN/2 for right var/datum/bone/bones = null rand_pos = 1 + var/health = 100 //organs can take damage now, hurray New() ..() @@ -1887,44 +1902,53 @@ /obj/item/organ/liver name = "liver" + organ_name = "liver" desc = "Ew, this thing is just the wurst." icon_state = "liver" /obj/item/organ/kidney name = "kidneys" + organ_name = "kidney_t" desc = "Bean shaped, but not actually beans. You can still eat them, though!" icon_state = "kidneys" /obj/item/organ/kidney/left name = "left kidney" + organ_name = "kidney_L" icon_state = "kidney_L" body_side = L_ORGAN /obj/item/organ/kidney/right name = "right kidney" + organ_name = "kidney_R" icon_state = "kidney_R" body_side = R_ORGAN /obj/item/organ/stomach name = "stomach" + organ_name = "stomach" desc = "A little meat sack containing acid for the digestion of food. Like most things that come out of living creatures, you can probably eat it." icon_state = "stomach" /obj/item/organ/intestines name = "intestines" + organ_name = "intestines" desc = "Did you know that if you laid your guts out in a straight line, they'd be about 9 meters long? Also, you'd probably be dying, so it's not something you should do. Probably." icon_state = "intestines" /obj/item/organ/spleen name = "spleen" + organ_name = "spleen" icon_state = "spleen" /obj/item/organ/pancreas name = "pancreas" + organ_name = "pancreas" icon_state = "pancreas" /obj/item/organ/appendix name = "appendix" + organ_name = "appendix" icon_state = "appendix" #undef L_ORGAN From 2c4bc0a057dd4545a392ed94f06fb871239ff131 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 16 Jul 2018 03:09:33 -0400 Subject: [PATCH 005/105] remove unnecesary if --- code/mob/living/carbon/human.dm | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 03428211..48cef9c8 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -6478,19 +6478,17 @@ /mob/living/carbon/human/proc/take_liver_kidney_damage(var/amount) amount = amount/10 take_organ_damage(amount, "liver") - if (src.organHolder) - if (prob(40)) - take_organ_damage(amount, "left_kidney") - if (prob(40)) - take_organ_damage(amount, "right_kidney") + if (prob(40)) + take_organ_damage(amount, "left_kidney") + if (prob(40)) + take_organ_damage(amount, "right_kidney") /mob/living/carbon/human/proc/take_lung_damage(var/amount) amount = amount/20 - if (src.organHolder) - if (prob(40)) - take_organ_damage(amount, "left_lung") - if (prob(40)) - take_organ_damage(amount, "right_lung") + if (prob(40)) + take_organ_damage(amount, "left_lung") + if (prob(40)) + take_organ_damage(amount, "right_lung") //damage organs specifically choose name from strings in organ_list var in obj/item/organ in orgam.dm --kyle //only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. From 5b0b79a041b68519af16d467f629760b44199d22 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 16 Jul 2018 21:18:46 -0400 Subject: [PATCH 006/105] add method for damaging organs, and damages some in some places. just liver, kidneys so far --- code/datums/chemistry/Reagents-Base.dm | 6 ++++ code/mob.dm | 26 ++++++++++++----- code/mob/living/carbon.dm | 8 ++++++ code/mob/living/carbon/human.dm | 39 +++++++++++--------------- code/obj/item/organ.dm | 9 ++++++ 5 files changed, 59 insertions(+), 29 deletions(-) diff --git a/code/datums/chemistry/Reagents-Base.dm b/code/datums/chemistry/Reagents-Base.dm index 1e4292c9..d7802347 100644 --- a/code/datums/chemistry/Reagents-Base.dm +++ b/code/datums/chemistry/Reagents-Base.dm @@ -173,8 +173,10 @@ datum do_overdose(var/severity, var/mob/M) var/mob/living/carbon/human/H = M if (!istype(H) || !H.bioHolder.HasEffect("resist_alcohol")) + H.take_organ_damage(rand(1,2), "liver") ..() + hydrogen name = "hydrogen" id = "hydrogen" @@ -489,6 +491,10 @@ datum M.weakened += 4 * severity if (prob(8)) + var/mob/living/carbon/human/H = M + if (!istype(H)) + H.take_organ_damage(rand(1,2), "pancreas") + M.take_toxin_damage(severity) M.updatehealth() diff --git a/code/mob.dm b/code/mob.dm index 93a6f7e8..66dd5087 100644 --- a/code/mob.dm +++ b/code/mob.dm @@ -743,19 +743,31 @@ if (src.organHolder) if (istype(W, /obj/item/organ/chest) && src.organHolder.chest == W) continue - if (istype(W, /obj/item/organ/head) && src.organHolder.head == W) + else if (istype(W, /obj/item/organ/head) && src.organHolder.head == W) continue - if (istype(W, /obj/item/skull) && src.organHolder.skull == W) + else if (istype(W, /obj/item/skull) && src.organHolder.skull == W) continue - if (istype(W, /obj/item/organ/brain) && src.organHolder.brain == W) + else if (istype(W, /obj/item/organ/brain) && src.organHolder.brain == W) continue - if (istype(W, /obj/item/organ/eye) && (src.organHolder.left_eye == W || src.organHolder.right_eye == W)) + else if (istype(W, /obj/item/organ/eye) && (src.organHolder.left_eye == W || src.organHolder.right_eye == W)) continue - if (istype(W, /obj/item/organ/heart) && src.organHolder.heart == W) + else if (istype(W, /obj/item/organ/heart) && src.organHolder.heart == W) continue - if (istype(W, /obj/item/organ/lung) && (src.organHolder.left_lung == W || src.organHolder.right_lung == W)) + else if (istype(W, /obj/item/organ/lung) && (src.organHolder.left_lung == W || src.organHolder.right_lung == W)) continue - if (istype(W, /obj/item/clothing/head/butt) && src.organHolder.butt == W) + else if (istype(W, /obj/item/clothing/head/butt) && src.organHolder.butt == W) + continue + else if (istype(W, /obj/item/organ/kidney) && (src.organHolder.left_kidney == W || src.organHolder.right_kidney == W)) + continue + else if (istype(W, /obj/item/organ/stomach) && src.organHolder.stomach == W) + continue + else if (istype(W, /obj/item/organ/intestines) && src.organHolder.intestines == W) + continue + else if (istype(W, /obj/item/organ/spleen) && src.organHolder.spleen == W) + continue + else if (istype(W, /obj/item/organ/pancreas) && src.organHolder.pancreas == W) + continue + else if (istype(W, /obj/item/organ/appendix) && src.organHolder.appendix == W) continue src.u_equip(W) diff --git a/code/mob/living/carbon.dm b/code/mob/living/carbon.dm index 5535db9f..3974552b 100644 --- a/code/mob/living/carbon.dm +++ b/code/mob/living/carbon.dm @@ -290,6 +290,7 @@ src.reagents.clear_reagents() ..() +//Kind of want to remove this and just move it into the new take_organ_damage proc /mob/living/carbon/take_brain_damage(var/amount) if (..()) return @@ -311,6 +312,13 @@ if (src.bioHolder && src.bioHolder.HasEffect("resist_toxic")) return + + if (istype(src, /mob/living/carbon/human)) + mob/living/carbon/human\H = src + + if (H.organholder && H.organ) + + src.toxloss = max(0,src.toxloss + amount) return diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 48cef9c8..836ffcff 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -6471,36 +6471,31 @@ if (src.bioHolder && src.bioHolder.HasEffect("resist_toxic")) return - take_liver_kidney_damage(src.toxloss) + damage_organs(src.toxloss/10, 40, list("left_kidney", "right_kidney") + take_organ_damage(src.toxloss/20, "liver") + src.toxloss = max(0,src.toxloss + amount) return -/mob/living/carbon/human/proc/take_liver_kidney_damage(var/amount) - amount = amount/10 - take_organ_damage(amount, "liver") - if (prob(40)) - take_organ_damage(amount, "left_kidney") - if (prob(40)) - take_organ_damage(amount, "right_kidney") - -/mob/living/carbon/human/proc/take_lung_damage(var/amount) - amount = amount/20 - if (prob(40)) - take_organ_damage(amount, "left_lung") - if (prob(40)) - take_organ_damage(amount, "right_lung") + +//amount, damge to be done to organs +//probability, num 0-100 for whether or not to damage an organ found +//organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" +/mob/living/carbon/human/proc/damage_organs(var/amount, var/probability, var/list/organs) + for (var/organ in organs) + if(prob(probability)) + take_organ_damage(amount, organ) //damage organs specifically choose name from strings in organ_list var in obj/item/organ in orgam.dm --kyle //only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. //return 1 on success, 0 on failure /mob/living/carbon/human/proc/take_organ_damage(var/amount as num, var/organ as text) + if (src.organholder && src.organholder.organ_list) + if (src.organholder.organ_list[text]) - if (src.organholder) - if (src.organholder.organ_list) - if (src.organholder.organ_list[text]) - var/obj/item/organ/O = src.organholder.organ_list[text] - if (istype(O,/obj/item/organ)) - O.health = max(0, O.health - amount) - return 1 + var/obj/item/organ/O = src.organholder.organ_list[text] + if (istype(O,/obj/item/organ)) + O.health = max(0, O.health - amount) + return 1 return 0 diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index da3dd725..77140acb 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -1905,6 +1905,15 @@ organ_name = "liver" desc = "Ew, this thing is just the wurst." icon_state = "liver" + + // on_mob_life(var/mob/M) + // if(!M) M = holder.my_atom + // if(holder.has_reagent("ethanol")) holder.remove_reagent("ethanol", 8) + // if (M.get_toxin_damage() <= 25) + // M.take_toxin_damage(-2) + // M.updatehealth() + // ..(M) + // return /obj/item/organ/kidney name = "kidneys" From 6af014658d10a0d5c8c536e4f01e587d4bbb0cd7 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 16 Jul 2018 22:47:57 -0400 Subject: [PATCH 007/105] comment out this one dumb thing --- code/mob/living/carbon.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/mob/living/carbon.dm b/code/mob/living/carbon.dm index 3974552b..113869e5 100644 --- a/code/mob/living/carbon.dm +++ b/code/mob/living/carbon.dm @@ -313,10 +313,10 @@ return - if (istype(src, /mob/living/carbon/human)) - mob/living/carbon/human\H = src + // if (istype(src, /mob/living/carbon/human)) + // mob/living/carbon/human\H = src - if (H.organholder && H.organ) + // // if (H.organholder && H.organ) src.toxloss = max(0,src.toxloss + amount) From e3ba774a9b34225497cd60889df1788d4709d6ec Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 16 Jul 2018 22:59:46 -0400 Subject: [PATCH 008/105] remove else from if block --- code/mob.dm | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/code/mob.dm b/code/mob.dm index 66dd5087..aec6fbb1 100644 --- a/code/mob.dm +++ b/code/mob.dm @@ -743,31 +743,31 @@ if (src.organHolder) if (istype(W, /obj/item/organ/chest) && src.organHolder.chest == W) continue - else if (istype(W, /obj/item/organ/head) && src.organHolder.head == W) + if (istype(W, /obj/item/organ/head) && src.organHolder.head == W) continue - else if (istype(W, /obj/item/skull) && src.organHolder.skull == W) + if (istype(W, /obj/item/skull) && src.organHolder.skull == W) continue - else if (istype(W, /obj/item/organ/brain) && src.organHolder.brain == W) + if (istype(W, /obj/item/organ/brain) && src.organHolder.brain == W) continue - else if (istype(W, /obj/item/organ/eye) && (src.organHolder.left_eye == W || src.organHolder.right_eye == W)) + if (istype(W, /obj/item/organ/eye) && (src.organHolder.left_eye == W || src.organHolder.right_eye == W)) continue - else if (istype(W, /obj/item/organ/heart) && src.organHolder.heart == W) + if (istype(W, /obj/item/organ/heart) && src.organHolder.heart == W) continue - else if (istype(W, /obj/item/organ/lung) && (src.organHolder.left_lung == W || src.organHolder.right_lung == W)) + if (istype(W, /obj/item/organ/lung) && (src.organHolder.left_lung == W || src.organHolder.right_lung == W)) continue - else if (istype(W, /obj/item/clothing/head/butt) && src.organHolder.butt == W) + if (istype(W, /obj/item/clothing/head/butt) && src.organHolder.butt == W) continue - else if (istype(W, /obj/item/organ/kidney) && (src.organHolder.left_kidney == W || src.organHolder.right_kidney == W)) + if (istype(W, /obj/item/organ/kidney) && (src.organHolder.left_kidney == W || src.organHolder.right_kidney == W)) continue - else if (istype(W, /obj/item/organ/stomach) && src.organHolder.stomach == W) + if (istype(W, /obj/item/organ/stomach) && src.organHolder.stomach == W) continue - else if (istype(W, /obj/item/organ/intestines) && src.organHolder.intestines == W) + if (istype(W, /obj/item/organ/intestines) && src.organHolder.intestines == W) continue - else if (istype(W, /obj/item/organ/spleen) && src.organHolder.spleen == W) + if (istype(W, /obj/item/organ/spleen) && src.organHolder.spleen == W) continue - else if (istype(W, /obj/item/organ/pancreas) && src.organHolder.pancreas == W) + if (istype(W, /obj/item/organ/pancreas) && src.organHolder.pancreas == W) continue - else if (istype(W, /obj/item/organ/appendix) && src.organHolder.appendix == W) + if (istype(W, /obj/item/organ/appendix) && src.organHolder.appendix == W) continue src.u_equip(W) From b11a5777a25310578b255c9cd63f41f98d5e511f Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Tue, 17 Jul 2018 02:47:40 -0400 Subject: [PATCH 009/105] fix compilation error --- code/mob/living/carbon/human.dm | 14 +++++++------- code/obj/item/organ.dm | 10 +++++----- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 836ffcff..3e839099 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -6465,13 +6465,13 @@ src.sims.updateHudIcons(new_style) return -/mob/living/carbon/human/proc/take_toxin_damage(var/amount) +/mob/living/carbon/human/take_toxin_damage(var/amount) if (..()) return if (src.bioHolder && src.bioHolder.HasEffect("resist_toxic")) return - damage_organs(src.toxloss/10, 40, list("left_kidney", "right_kidney") + damage_organs(src.toxloss/10, 40, list("left_kidney", "right_kidney")) take_organ_damage(src.toxloss/20, "liver") src.toxloss = max(0,src.toxloss + amount) @@ -6486,14 +6486,14 @@ if(prob(probability)) take_organ_damage(amount, organ) -//damage organs specifically choose name from strings in organ_list var in obj/item/organ in orgam.dm --kyle +//damage organs specifically choose value for var/organ from strings in organ_list var in obj/item/organ in orgam.dm --kyle //only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. //return 1 on success, 0 on failure -/mob/living/carbon/human/proc/take_organ_damage(var/amount as num, var/organ as text) - if (src.organholder && src.organholder.organ_list) - if (src.organholder.organ_list[text]) +/mob/living/carbon/human/proc/take_organ_damage(var/amount, var/organ) + if (src.organHolder && src.organHolder.organ_list) + if (src.organHolder.organ_list[organ]) - var/obj/item/organ/O = src.organholder.organ_list[text] + var/obj/item/organ/O = src.organHolder.organ_list[organ] if (istype(O,/obj/item/organ)) O.health = max(0, O.health - amount) return 1 diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 77140acb..a03fedb2 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -28,17 +28,17 @@ proc/get_kidney_amt() var/count = 0 - if (!organ_list && organ_list[["left_kidney"]]) + if (!organ_list && organ_list["left_kidney"]) count++ - if (!organ_list && organ_list[["right_kidney"]]) + if (!organ_list && organ_list["right_kidney"]) count++ return count proc/get_lung_amt() var/count = 0 - if (!organ_list && organ_list[["left_lung"]]) + if (!organ_list && organ_list["left_lung"]) count++ - if (!organ_list && organ_list[["right_lung"]]) + if (!organ_list && organ_list["right_lung"]) count++ return count @@ -797,7 +797,7 @@ var/body_side = null // L_ORGAN/1 for left, R_ORGAN/2 for right var/datum/bone/bones = null rand_pos = 1 - var/health = 100 //organs can take damage now, hurray + health = 100 //organs can take damage now, hurray New() ..() From 9d6f84fdd5b8f526d67d70a60366ada23fef08b9 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 18 Jul 2018 00:47:21 -0400 Subject: [PATCH 010/105] change admin tool drop organs to be able to drop 'new' organs --- code/admin/part_modifier.dm | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/code/admin/part_modifier.dm b/code/admin/part_modifier.dm index 0bd74ac3..e57fb963 100644 --- a/code/admin/part_modifier.dm +++ b/code/admin/part_modifier.dm @@ -331,6 +331,73 @@ var/list/default_limb_paths = list("l_arm" = /obj/item/parts/human_parts/arm/lef \[X\] [(see_vars) ? "[organs.butt ? "\[X\]" : "None"]" : null] + --------------------------------- + + Left Kidney + [organs.left_kidney ? organs.left_kidney : "None"] + [organs.left_kidney ? organs.left_kidney.type : "None"] + \[X\] + \[X\] + [(see_vars) ? "[organs.left_kidney ? "\[X\]" : "None"]" : null] + + + Right Kidney + [organs.right_kidney ? organs.right_kidney : "None"] + [organs.right_kidney ? organs.right_kidney.type : "None"] + \[X\] + \[X\] + [(see_vars) ? "[organs.right_kidney ? "\[X\]" : "None"]" : null] + + + Liver + [organs.liver ? organs.liver : "None"] + [organs.liver ? organs.liver.type : "None"] + \[X\] + \[X\] + [(see_vars) ? "[organs.liver ? "\[X\]" : "None"]" : null] + + + Stomach + [organs.stomach ? organs.stomach : "None"] + [organs.stomach ? organs.stomach.type : "None"] + \[X\] + \[X\] + [(see_vars) ? "[organs.stomach ? "\[X\]" : "None"]" : null] + + + Intestines + [organs.intestines ? organs.intestines : "None"] + [organs.intestines ? organs.intestines.type : "None"] + \[X\] + \[X\] + [(see_vars) ? "[organs.intestines ? "\[X\]" : "None"]" : null] + + + Spleen + [organs.spleen ? organs.spleen : "None"] + [organs.spleen ? organs.spleen.type : "None"] + \[X\] + \[X\] + [(see_vars) ? "[organs.spleen ? "\[X\]" : "None"]" : null] + + + Pancreas + [organs.pancreas ? organs.pancreas : "None"] + [organs.pancreas ? organs.pancreas.type : "None"] + \[X\] + \[X\] + [(see_vars) ? "[organs.pancreas ? "\[X\]" : "None"]" : null] + + + Appendix + [organs.appendix ? organs.appendix : "None"] + [organs.appendix ? organs.appendix.type : "None"] + \[X\] + \[X\] + [(see_vars) ? "[organs.appendix ? "\[X\]" : "None"]" : null] + + + ------------------------------------ All Organs N/A From f5481bfd916dd536cccf90c979365e2f479b7785 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 18 Jul 2018 00:49:04 -0400 Subject: [PATCH 011/105] testing logs for organs, add lung damage to smoking --- code/mob/living/carbon/human.dm | 2 ++ code/obj/item/cigarette.dm | 1 + 2 files changed, 3 insertions(+) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 3e839099..6439769a 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -6496,6 +6496,8 @@ var/obj/item/organ/O = src.organHolder.organ_list[organ] if (istype(O,/obj/item/organ)) O.health = max(0, O.health - amount) + src.visible_message("[src] damaged [organ] by [amount]!") + return 1 return 0 diff --git a/code/obj/item/cigarette.dm b/code/obj/item/cigarette.dm index a56bfe3d..a0643f2e 100644 --- a/code/obj/item/cigarette.dm +++ b/code/obj/item/cigarette.dm @@ -161,6 +161,7 @@ else src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) + H.damage_organs(2, 40, list("left_lung", "right_lung")) else src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) From 587e462b8ef60260acc4ec74d0a9d51c75187679 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 18 Jul 2018 02:32:39 -0400 Subject: [PATCH 012/105] added viewing organ damage to scanprocs --- code/procs/scanprocs.dm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index 6090ac15..fa70f2ac 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -56,6 +56,7 @@ var/reagent_data = null var/pathogen_data = null var/disease_data = null + var/organ_data = null if (ishuman(M)) var/mob/living/carbon/human/H = M @@ -128,8 +129,17 @@ brain_data = "Significant brain damage detected. Subject may have had a concussion." else brain_data = "Subject has no brain." + + organ_data = "Scans indicate organ damage in:
" + for (var/obj/item/organ/organ in H.organHolder.organ_list) + if (!istype(organ, /obj/item/organ/head) && !istype(organ, /obj/item/organ/brain) && !istype(organ, /obj/item/organ/chest)) + if (organ.health < 100) + organ_data += "[organ.organ_name] has [organ.health] / 100" + if (H.organHolder.organ_list["left_lung"]) + + else - brain_data = "Subject has no brain." + brain_data = "Subject has no organs." if (H.organHolder && !H.organHolder.heart) heart_data = "Subject has no heart." @@ -169,6 +179,7 @@ [rad_data ? "
[rad_data]" : null]\ [blood_data ? "
[blood_data]" : null]\ [brain_data ? "
[brain_data]" : null]\ + [organ_data ? "
[organ_data]" : null]\ [heart_data ? "
[heart_data]" : null]\ [reagent_data ? "
[reagent_data]" : null]\ [pathogen_data ? "
[pathogen_data]" : null]\ From 0d8b111095cb184e18ccd4e58b38566499c0def2 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 20 Jul 2018 00:40:08 -0400 Subject: [PATCH 013/105] working proc to view organ health with analyzer upgrade, good enough for now --- code/procs/scanprocs.dm | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index fa70f2ac..f75babc7 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -130,13 +130,25 @@ else brain_data = "Subject has no brain." - organ_data = "Scans indicate organ damage in:
" - for (var/obj/item/organ/organ in H.organHolder.organ_list) - if (!istype(organ, /obj/item/organ/head) && !istype(organ, /obj/item/organ/brain) && !istype(organ, /obj/item/organ/chest)) - if (organ.health < 100) - organ_data += "[organ.organ_name] has [organ.health] / 100" - if (H.organHolder.organ_list["left_lung"]) + if (verbose_reagent_info && !isvampire(H)) // Added a pair of vampire checks here (Convair880). + var/organ_data1 = "" + var/found = 0 + + for (var/O in H.organHolder.organ_list) + var/obj/item/organ/organ = H.organHolder.organ_list[O] + if (organ == null) + continue + + if (istype(organ, /obj/item/organ/head) || istype(organ, /obj/item/organ/brain) || istype(organ, /obj/item/organ/chest) || istype(organ, /obj/item/skull) || istype(organ, /obj/item/clothing/head/butt)) + continue + if (organ.health < 100) + if (!found) + found = 1 + organ_data1 += "[organ.name] has [organ.health] / 100
" + if (found) + organ_data = "Scans indicate organ damage in:
" + organ_data += organ_data1 else brain_data = "Subject has no organs." From 4477bcf4adbba18dbccf80fc7ac3ae09341ac1e1 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 20 Jul 2018 02:52:17 -0400 Subject: [PATCH 014/105] changes to how health decreates, comment for lungs later on, and remove reference to organ from associative list in organ holders when doporgan is called --- code/mob/living/carbon/human.dm | 13 ++++++++++--- code/obj/item/organ.dm | 11 ++++++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 6439769a..4771859b 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -3945,6 +3945,7 @@ canmove = 1 + //Kyle, add lung damage and handling cyber lungs maybe proc/handle_breath(datum/gas_mixture/breath) if (src.nodamage) return @@ -6471,8 +6472,10 @@ if (src.bioHolder && src.bioHolder.HasEffect("resist_toxic")) return - damage_organs(src.toxloss/10, 40, list("left_kidney", "right_kidney")) - take_organ_damage(src.toxloss/20, "liver") + //this proc is called for damage and healing, only damage organs when healing. New organ healing drugs will explicitely heal organs + if (amount > 1) + damage_organs(src.toxloss/20, 40, list("left_kidney", "right_kidney")) + prob_damage_organ(src.toxloss/40, 60, "liver") src.toxloss = max(0,src.toxloss + amount) return @@ -6483,6 +6486,10 @@ //organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" /mob/living/carbon/human/proc/damage_organs(var/amount, var/probability, var/list/organs) for (var/organ in organs) + prob_damage_organs(amount, probability, organ) + +//helper method for damage_organs, but does have some use on its own +/mob/living/carbon/human/proc/prob_damage_organ(var/amount, var/probability, var/organ) if(prob(probability)) take_organ_damage(amount, organ) @@ -6495,7 +6502,7 @@ var/obj/item/organ/O = src.organHolder.organ_list[organ] if (istype(O,/obj/item/organ)) - O.health = max(0, O.health - amount) + O.health = min(100, O.health - amount) //this health damage counts down from 100, crazy right? src.visible_message("[src] damaged [organ] by [amount]!") return 1 diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index a03fedb2..b003e572 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -165,7 +165,7 @@ left_kidney.donor = null if (!src.right_kidney) src.right_kidney = new /obj/item/organ/kidney/right - src.right_kidney.donor = src.donor + src.right_kidney.donor = src.donor organ_list["right_kidney"] = right_kidney right_kidney.donor = null if (!src.liver) @@ -378,6 +378,7 @@ var/obj/item/organ/kidney/left/myleft_kidney = src.left_kidney myleft_kidney.set_loc(location) src.left_kidney = null + organ_list["left_kidney"] = null return myleft_kidney if ("right_kidney") if (!src.butt) @@ -385,6 +386,7 @@ var/obj/item/organ/kidney/right/myright_kidney = src.right_kidney myright_kidney.set_loc(location) src.right_kidney = null + organ_list["right_kidney"] = null return myright_kidney if ("liver") if (!src.butt) @@ -392,6 +394,7 @@ var/obj/item/organ/liver/myliver = src.liver myliver.set_loc(location) src.liver = null + organ_list["liver"] = null return myliver if ("stomach") if (!src.butt) @@ -399,6 +402,7 @@ var/obj/item/organ/stomach/mystomach = src.stomach mystomach.set_loc(location) src.stomach = null + organ_list["stomach"] = null return mystomach if ("intestines") if (!src.butt) @@ -406,6 +410,7 @@ var/obj/item/organ/intestines/myintestines = src.intestines myintestines.set_loc(location) src.intestines = null + organ_list["intestines"] = null return myintestines if ("spleen") if (!src.butt) @@ -413,6 +418,7 @@ var/obj/item/organ/spleen/myspleen = src.spleen myspleen.set_loc(location) src.spleen = null + organ_list["spleen"] = null return myspleen if ("pancreas") if (!src.butt) @@ -420,6 +426,7 @@ var/obj/item/organ/pancreas/mypancreas = src.pancreas mypancreas.set_loc(location) src.pancreas = null + organ_list["pancreas"] = null return mypancreas if ("appendix") if (!src.butt) @@ -428,6 +435,8 @@ var/obj/item/organ/appendix/myappendix = src.appendix myappendix.set_loc(location) src.appendix = null + organ_list["appendix"] = null + return myappendix From fcb1a70278b743a079ff199919b401060eba8f9e Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 23 Jul 2018 01:37:27 -0400 Subject: [PATCH 015/105] ability to perform surgery and remove new organs. I haven't tested or even compiled it yet so it's a crapshoot. Works by changing the op_stage var on chest to get to the correct organ and player grab/disarm intents --- code/procs/surgery.dm | 480 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 479 insertions(+), 1 deletion(-) diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 274217d3..d930c810 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -550,9 +550,452 @@ src.surgeryConfusion(patient, surgeon, damage_high) return 1 +/* ---------- SCALPEL - LIVER ---------- */ + + else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent != INTENT_DISARM) + if (patient.organHolder.liver) + if (patient.organHolder.liver.op_stage == 0.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] chest open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your chest open with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.heart.op_stage = 1.0 + return 1 + +/* ---------- SCALPEL - chest ---------- */ + else if (surgeon.zone_sel.selecting == "chest" && (surgeon.a_intent == INTENT_GRAB || surgeon.a_intent == INTENT_DISARM)) + + + /* chest op_stage description + op_stage actions you can take and where it will send you + 0.0 = (G)cut -> 1.0 || (D)cut -> 5.0 + 1.0 = (G)cut -> 3.0 || (D)cut -> 4.0 || (G)saw -> 2.0 + 2.0 = (G)cut is remove spleen || (D)cut is remove lungs R/L + 3.0 = (G)cut is remove appendix || (D)cut is remove liver + 4.0 = (G)cut is remove stomach || (D)cut is remove intestines + 5.0 = (G)cut -> 6.0 || (D)cut -> 8.0 + 6.0 = + G = INTENT_GRAB + G = INTENT_DISARM + + remove spleen = (G)cut - (G)saw-(G)cut + remove lungs = (G)cut - (G)saw-(D)cut - Right/Left hands for removing R/L lungs + + remove appendix = (G)cut - (G)cut - (G)cut + remove liver = (G)cut - (G)cut - (D)cut + + remove stomach = (G)cut - (D)cut - (G)cut + remove intestines = (G)cut - (D)cut - (D)cut + + remove pancreas = (D)cut - (G)cut - (D)cut + remove kidneys = (D)cut - (D)cut - (G)cut - Right/Left hands for removing R/L kidneys + + + *note, for lungs/kidneys R/L hand use only matters for last cut + */ + if (patient.organHolder.chest) + switch (patient.organHolder.chest.op_stage) + if (0.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] chest open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your chest open with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + + if (surgeon.a_intent == INTENT_GRAB) + patient.organHolder.chest.op_stage = 1.0 + if (surgeon.a_intent == INTENT_DISARM) + patient.organHolder.chest.op_stage = 5.0 + + return 1 + + //second cut, path for spleen/lungs + if (1.0) + + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] chest open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your chest open with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 3.0 + return 1 + + //remove lungs or spleen + if (2.0) + //remove spleen with this cut + if (surgeon.a_intent == INTENT_GRAB) + if (patient.organHolder.spleen) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] aorta and vena cava with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] aorta and vena cava with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your aorta and vena cava with [src]!") + + patient.TakeDamage("chest", damage_high, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("spleen") + + return 1 + //remove lungs + else if (surgeon.a_intent == INTENT_DISARM) + //remove left lung + if (surgeon.find_in_hand(src) == surgeon.l_hand && patient.organHolder.left_lung) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left lung with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left lung with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left lung with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + logTheThing("combat", surgeon, patient, "removed %target%'s left lung with [src].") + patient.organHolder.drop_organ("left_lung") + + return 1 + //remove right lung + else if (surgeon.find_in_hand(src) == surgeon.r_hand && patient.organHolder.right_lung) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right lung with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right lung with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right lung with [src]!") + logTheThing("combat", surgeon, patient, "removed %target%'s right lung with [src].") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("right_lung") + + return 1 + + //remove appendix or liver + if (3.0) + //remove appendix with this cut + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + if (!patient.organHolder.appendix) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] appendix out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] appendix out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your appendix out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("appendix") + + return 1 + + //remove liver with this cut + else if (surgeon.a_intent == INTENT_DISARM) + + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + if (!patient.organHolder.liver) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] liver out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] liver out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your liver out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("liver") + + return 1 + + //path for stomach and intestines + if (4.0) + //remove stomach with this cut + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + if (!patient.organHolder.stomach) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] stomach out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] stomach out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your stomach out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("stomach") + + return 1 + + //remove intestines with this cut + else if (surgeon.a_intent == INTENT_DISARM) + + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + if (!patient.organHolder.intestines) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] intestines out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] intestines out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your intestines out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("intestines") + + return 1 + + //paths for pancreas and kidneys + if (5.0) + //path for pancreas + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + if (!patient.organHolder.pancreas) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] something something pancreas with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] something something pancreas with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your something something pancreas with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 6.0 + + return 1 + + //path for kidneys + else if (surgeon.a_intent == INTENT_DISARM) + + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + if (!patient.organHolder.liver) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] something something kidneys with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] something something kidneys with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your something something kidneys with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 7.0 + + return 1 + + //remove pancreas + if (6.0) + + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + if (!patient.organHolder.pancreas) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] pancreas out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your pancreas out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("pancreas") + + return 1 + + //remove kidneys + if (7.0) + if (surgeon.a_intent == INTENT_GRAB) + //remove left kidney + if (surgeon.find_in_hand(src) == surgeon.l_hand && patient.organHolder.left_kidney) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left kidney with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left kidney with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left kidney with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + logTheThing("combat", surgeon, patient, "removed %target%'s left kidney with [src].") + patient.organHolder.drop_organ("left_kidney") + + return 1 + //remove right kidney + else if (surgeon.find_in_hand(src) == surgeon.r_hand && patient.organHolder.right_kidney) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right kidney with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right kidney with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right kidney with [src]!") + logTheThing("combat", surgeon, patient, "removed %target%'s right kidney with [src].") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("right_kidney") + + return 1 + + else + return 0 + /* ---------- SCALPEL - IMPLANT ---------- */ - else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent != "harm") + else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent == INTENT_HELP) if (patient.implant.len > 0) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) patient.tri_message("[surgeon] cuts into [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest with [src]!",\ @@ -655,6 +1098,10 @@ else src.surgeryConfusion(patient, surgeon, damage_high) return 1 + else + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + else return 0 @@ -901,6 +1348,37 @@ src.surgeryConfusion(patient, surgeon, damage_high) return 1 +/* ---------- SAW - lungs/spleen ---------- */ + + else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent == INTENT_GRAB) + if (patient.organHolder.chest) + switch (patient.organHolder.chest.op_stage) + if (1.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] saws open [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] butt with [src]!",\ + surgeon, "You saw open [surgeon == patient ? "your" : "[patient]'s"] butt with [src]!",\ + patient, "[patient == surgeon ? "You saw" : "[surgeon] saws"] open your butt with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.butt_op_stage = 2.0 + return 1 + + else + src.surgeryConfusion(patient, surgeon, damage_high) + return 1 + /* ---------- SAW - HEART ---------- */ else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent != "harm") From eff0b431d57da882dff0fbf3eaef27a4091fa0cc Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 23 Jul 2018 17:12:59 -0400 Subject: [PATCH 016/105] fix dumb compiler indentation error --- code/mob/living/carbon/human.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 4771859b..f3a96e58 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -6486,12 +6486,12 @@ //organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" /mob/living/carbon/human/proc/damage_organs(var/amount, var/probability, var/list/organs) for (var/organ in organs) - prob_damage_organs(amount, probability, organ) + prob_damage_organ(amount, probability, organ) //helper method for damage_organs, but does have some use on its own /mob/living/carbon/human/proc/prob_damage_organ(var/amount, var/probability, var/organ) - if(prob(probability)) - take_organ_damage(amount, organ) + if (prob(probability)) + take_organ_damage(amount, organ) //damage organs specifically choose value for var/organ from strings in organ_list var in obj/item/organ in orgam.dm --kyle //only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. From de453cd929ce19c11aac172bd729649f2b9a05c0 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 23 Jul 2018 17:13:51 -0400 Subject: [PATCH 017/105] fixes conditinal start end points --- code/procs/surgery.dm | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index d930c810..a431e3ae 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -1098,9 +1098,6 @@ else src.surgeryConfusion(patient, surgeon, damage_high) return 1 - else - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 else return 0 @@ -1372,12 +1369,10 @@ else surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") patient.updatehealth() - patient.butt_op_stage = 2.0 + patient.organHolder.chest.op_stage = 2.0 return 1 - - else - src.surgeryConfusion(patient, surgeon, damage_high) - return 1 + else + return 0 /* ---------- SAW - HEART ---------- */ From 6b51656339d90c682772e36edc9df67c6dbc866a Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 23 Jul 2018 18:37:44 -0400 Subject: [PATCH 018/105] fixed some surgery nonsense, added adding organs to people if they aren't present. I did it in the most low effort way possible: copy-paste with the attack proc. I'm sorry, but also I don't care because I'm sick of this surgery nonsense. With any luck I won't need to make any more changes to that shithole. --- code/mob/living/carbon/human.dm | 1 + code/obj/item/organ.dm | 287 +++++++++++++++++++++++++++++++- code/procs/surgery.dm | 79 ++++----- 3 files changed, 321 insertions(+), 46 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index f3a96e58..5688e6cd 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -6480,6 +6480,7 @@ src.toxloss = max(0,src.toxloss + amount) return +//made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using //amount, damge to be done to organs //probability, num 0-100 for whether or not to damage an organ found diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index b003e572..3b05a649 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -1050,12 +1050,58 @@ desc = "Inflating meat airsacks that pass breathed oxygen into a person's blood and expels carbon dioxide back out. Hopefully whoever used to have these doesn't need them anymore." icon_state = "lungs_t" + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) + if (!ismob(M)) + return + + src.add_fingerprint(user) + + if (user.zone_sel.selecting != "chest") + return ..() + if (!surgeryCheck(M, user)) + return ..() + + var/mob/living/carbon/human/H = M + if (!H.organHolder) + return ..() + + if (!headSurgeryCheck(H)) + user.show_text("You're going to need to remove that mask/helmet/glasses first.", "blue") + return + + if (user.find_in_hand(src) == user.r_hand && !H.organHolder.right_lung) + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right eye socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right eye socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right eye socket!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "right_lung", 2.0) + H.update_body() + + else if (user.find_in_hand(src) == user.l_hand && !H.organHolder.left_lung) + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left eye socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left eye socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left eye socket!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "left_lung", 2.0) + H.update_body() + + else + ..() + return + /obj/item/organ/lung/left name = "left lung" desc = "Inflating meat airsack that passes breathed oxygen into a person's blood and expels carbon dioxide back out. This is a left lung, since it has three lobes. Hopefully whoever used to have this one doesn't need it anymore." icon_state = "lung_L" body_side = L_ORGAN + /obj/item/organ/lung/right name = "right lung" desc = "Inflating meat airsack that passes breathed oxygen into a person's blood and expels carbon dioxide back out. This is a right lung, since it has two lobes and a cardiac notch, where the heart would be. Hopefully whoever used to have this one doesn't need it anymore." @@ -1914,7 +1960,46 @@ organ_name = "liver" desc = "Ew, this thing is just the wurst." icon_state = "liver" - + + on_transplant() + ..() + if (src.donor) + for (var/datum/ailment_data/disease in src.donor.ailments) + if (disease.cure == "Liver Transplant") + src.donor.cure_disease(disease) + return + + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) + if (!ismob(M)) + return + + src.add_fingerprint(user) + + if (user.zone_sel.selecting != "chest") + return ..() + if (!surgeryCheck(M, user)) + return ..() + + var/mob/living/carbon/human/H = M + if (!H.organHolder) + return ..() + + if (!H.organHolder.liver) + + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] chest!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] chest!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your chest!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "liver", 3.0) + H.update_body() + + else + ..() + return + // on_mob_life(var/mob/M) // if(!M) M = holder.my_atom // if(holder.has_reagent("ethanol")) holder.remove_reagent("ethanol", 8) @@ -1930,6 +2015,51 @@ desc = "Bean shaped, but not actually beans. You can still eat them, though!" icon_state = "kidneys" + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) + if (!ismob(M)) + return + + src.add_fingerprint(user) + + if (user.zone_sel.selecting != "chest") + return ..() + if (!surgeryCheck(M, user)) + return ..() + + var/mob/living/carbon/human/H = M + if (!H.organHolder) + return ..() + + if (!headSurgeryCheck(H)) + user.show_text("You're going to need to remove that mask/helmet/glasses first.", "blue") + return + + if (user.find_in_hand(src) == user.r_hand && !H.organHolder.right_kidney) + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right eye socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right eye socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right eye socket!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "right_kidney", 2.0) + H.update_body() + + else if (user.find_in_hand(src) == user.l_hand && !H.organHolder.left_kidney) + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left eye socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left eye socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left eye socket!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "left_kidney", 2.0) + H.update_body() + + else + ..() + return + /obj/item/organ/kidney/left name = "left kidney" organ_name = "kidney_L" @@ -1948,26 +2078,181 @@ desc = "A little meat sack containing acid for the digestion of food. Like most things that come out of living creatures, you can probably eat it." icon_state = "stomach" + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) + if (!ismob(M)) + return + + src.add_fingerprint(user) + + if (user.zone_sel.selecting != "chest") + return ..() + if (!surgeryCheck(M, user)) + return ..() + + var/mob/living/carbon/human/H = M + if (!H.organHolder) + return ..() + + if (!H.organHolder.stomach) + + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] chest!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] chest!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your chest!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "stomach", 3.0) + H.update_body() + + else + ..() + return + /obj/item/organ/intestines name = "intestines" organ_name = "intestines" desc = "Did you know that if you laid your guts out in a straight line, they'd be about 9 meters long? Also, you'd probably be dying, so it's not something you should do. Probably." icon_state = "intestines" + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) + if (!ismob(M)) + return + + src.add_fingerprint(user) + + if (user.zone_sel.selecting != "chest") + return ..() + if (!surgeryCheck(M, user)) + return ..() + + var/mob/living/carbon/human/H = M + if (!H.organHolder) + return ..() + + if (!H.organHolder.intestines) + + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] chest!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] chest!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your chest!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "intestines", 3.0) + H.update_body() + + else + ..() + return + /obj/item/organ/spleen name = "spleen" organ_name = "spleen" icon_state = "spleen" + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) + if (!ismob(M)) + return + + src.add_fingerprint(user) + + if (user.zone_sel.selecting != "chest") + return ..() + if (!surgeryCheck(M, user)) + return ..() + + var/mob/living/carbon/human/H = M + if (!H.organHolder) + return ..() + + if (!H.organHolder.spleen) + + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] chest!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] chest!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your chest!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "spleen", 3.0) + H.update_body() + + else + ..() + return + /obj/item/organ/pancreas name = "pancreas" organ_name = "pancreas" icon_state = "pancreas" + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) + if (!ismob(M)) + return + + src.add_fingerprint(user) + + if (user.zone_sel.selecting != "chest") + return ..() + if (!surgeryCheck(M, user)) + return ..() + + var/mob/living/carbon/human/H = M + if (!H.organHolder) + return ..() + + if (!H.organHolder.pancreas) + + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] chest!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] chest!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your chest!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "pancreas", 3.0) + H.update_body() + + else + ..() + return + /obj/item/organ/appendix name = "appendix" organ_name = "appendix" icon_state = "appendix" + + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) + if (!ismob(M)) + return + + src.add_fingerprint(user) + + if (user.zone_sel.selecting != "chest") + return ..() + if (!surgeryCheck(M, user)) + return ..() + + var/mob/living/carbon/human/H = M + if (!H.organHolder) + return ..() + + if (!H.organHolder.appendix) + + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] chest!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] chest!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your chest!") + + user.u_equip(src) + H.organHolder.receive_organ(src, "appendix", 3.0) + H.update_body() + + else + ..() + return #undef L_ORGAN #undef R_ORGAN \ No newline at end of file diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index a431e3ae..76b0accf 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -190,6 +190,9 @@ return_thing ++ if (!zone || zone == "chest") + //I'd like to see the heart thing use the chest for surgery. I think it makes more sense than having each organ have a surgery stage... + // if (oH.chest) + // return_thing += oH.chest.op_stage if (oH.heart) return_thing += oH.heart.op_stage else if (src.butt_op_stage < 5) @@ -550,38 +553,12 @@ src.surgeryConfusion(patient, surgeon, damage_high) return 1 -/* ---------- SCALPEL - LIVER ---------- */ - - else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent != INTENT_DISARM) - if (patient.organHolder.liver) - if (patient.organHolder.liver.op_stage == 0.0) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] chest open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your chest open with [src]!") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.heart.op_stage = 1.0 - return 1 - /* ---------- SCALPEL - chest ---------- */ else if (surgeon.zone_sel.selecting == "chest" && (surgeon.a_intent == INTENT_GRAB || surgeon.a_intent == INTENT_DISARM)) /* chest op_stage description - op_stage actions you can take and where it will send you + op_stage = (actions you can take) -> where it will send you 0.0 = (G)cut -> 1.0 || (D)cut -> 5.0 1.0 = (G)cut -> 3.0 || (D)cut -> 4.0 || (G)saw -> 2.0 2.0 = (G)cut is remove spleen || (D)cut is remove lungs R/L @@ -592,8 +569,8 @@ G = INTENT_GRAB G = INTENT_DISARM - remove spleen = (G)cut - (G)saw-(G)cut - remove lungs = (G)cut - (G)saw-(D)cut - Right/Left hands for removing R/L lungs + remove spleen = (G)cut - (G)saw - (G)cut + remove lungs = (G)cut - (G)saw - (D)cut - Right/Left hands for removing R/L lungs remove appendix = (G)cut - (G)cut - (G)cut remove liver = (G)cut - (G)cut - (D)cut @@ -636,7 +613,7 @@ return 1 - //second cut, path for spleen/lungs + //second cut, path for appendix/liver if (1.0) if (surgeon.a_intent == INTENT_GRAB) @@ -648,9 +625,9 @@ take_bleeding_damage(patient, surgeon, damage_low) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] chest open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your chest open with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] appendix/liver area open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] appendix/liver area open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your appendix/liver area open with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -674,9 +651,9 @@ take_bleeding_damage(patient, surgeon, damage_high) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] aorta and vena cava with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] aorta and vena cava with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your aorta and vena cava with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] spleen out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] spleen out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] spleen out with [src]!") patient.TakeDamage("chest", damage_high, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -699,9 +676,9 @@ take_bleeding_damage(patient, surgeon, damage_high) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left lung with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left lung with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left lung with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left lung out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left lung out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left lung out with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -723,9 +700,9 @@ take_bleeding_damage(patient, surgeon, damage_high) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right lung with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right lung with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right lung with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right lung out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right lung out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right lung out with [src]!") logTheThing("combat", surgeon, patient, "removed %target%'s right lung with [src].") patient.TakeDamage("chest", damage_low, 0) @@ -1359,9 +1336,9 @@ take_bleeding_damage(patient, surgeon, damage_low) return 1 - patient.tri_message("[surgeon] saws open [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] butt with [src]!",\ - surgeon, "You saw open [surgeon == patient ? "your" : "[patient]'s"] butt with [src]!",\ - patient, "[patient == surgeon ? "You saw" : "[surgeon] saws"] open your butt with [src]!") + patient.tri_message("[surgeon] saws open [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] ribcage with [src]!",\ + surgeon, "You saw open [surgeon == patient ? "your" : "[patient]'s"] ribcage with [src]!",\ + patient, "[patient == surgeon ? "You saw" : "[surgeon] saws"] open your ribcage with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -1549,6 +1526,18 @@ patient.updatehealth() return 1 + if (patient.organHolder.chest && patient.organHolder.chest.op_stage > 0.0) + patient.tri_message("[surgeon] sews the incision on [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest closed with [src].",\ + surgeon, "You sew the incision on [surgeon == patient ? "your" : "[patient]'s"] chest closed with [src].",\ + patient, "[patient == surgeon ? "You sew" : "[surgeon] sews"] the incision on your chest closed with [src].") + + patient.organHolder.chest.op_stage = 0.0 + patient.TakeDamage("chest", 2, 0) + if (patient.bleeding) + repair_bleeding_damage(patient, 50, rand(1,3)) + patient.updatehealth() + return 1 + else if (patient.butt_op_stage > 0.0 && patient.butt_op_stage < 4.0) patient.tri_message("[surgeon] sews the incision on [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] butt closed with [src].",\ surgeon, "You sew the incision on [surgeon == patient ? "your" : "[patient]'s"] butt closed with [src].",\ From 42e2ba8dca8fbe3e088369059dd72a4e541a215a Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 23 Jul 2018 19:02:21 -0400 Subject: [PATCH 019/105] fix some flavourtext --- code/obj/item/organ.dm | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 3b05a649..2f52b3a2 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -1065,16 +1065,12 @@ if (!H.organHolder) return ..() - if (!headSurgeryCheck(H)) - user.show_text("You're going to need to remove that mask/helmet/glasses first.", "blue") - return - if (user.find_in_hand(src) == user.r_hand && !H.organHolder.right_lung) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") - H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right eye socket!",\ - user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right eye socket!",\ - H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right eye socket!") + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right lung socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right lung socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right lung socket!") user.u_equip(src) H.organHolder.receive_organ(src, "right_lung", 2.0) @@ -1083,9 +1079,9 @@ else if (user.find_in_hand(src) == user.l_hand && !H.organHolder.left_lung) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") - H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left eye socket!",\ - user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left eye socket!",\ - H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left eye socket!") + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left lung socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left lung socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left lung socket!") user.u_equip(src) H.organHolder.receive_organ(src, "left_lung", 2.0) @@ -2037,9 +2033,9 @@ if (user.find_in_hand(src) == user.r_hand && !H.organHolder.right_kidney) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") - H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right eye socket!",\ - user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right eye socket!",\ - H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right eye socket!") + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right kidney socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right kidney socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right kidney socket!") user.u_equip(src) H.organHolder.receive_organ(src, "right_kidney", 2.0) @@ -2048,9 +2044,9 @@ else if (user.find_in_hand(src) == user.l_hand && !H.organHolder.left_kidney) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") - H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left eye socket!",\ - user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left eye socket!",\ - H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left eye socket!") + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left kidney socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left kidney socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left kidney socket!") user.u_equip(src) H.organHolder.receive_organ(src, "left_kidney", 2.0) @@ -2222,7 +2218,7 @@ name = "appendix" organ_name = "appendix" icon_state = "appendix" - + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) if (!ismob(M)) return From ab59b1291be8240611a13c77e6be988965776f95 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Tue, 24 Jul 2018 22:52:22 -0400 Subject: [PATCH 020/105] add organ healing chems --- code/datums/chemistry/Reagents-Medical.dm | 88 +++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index 64398e34..5538fcc9 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -399,6 +399,9 @@ datum var/mob/living/carbon/human/H = M if (H.bleeding && prob(33)) H.bleeding-- + //heal all functional organs, ignore heart and brain since they don't use this system yet + H.damage_organs(-2, 100, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + M.updatehealth() //M.UpdateDamageIcon() ..(M) @@ -1176,3 +1179,88 @@ datum M.updatehealth() ..(M) return + + //heals spleen/lungs + medical/organ_drug1 + name = "organ drug Class 1" + id = "organ_drug1" + description = "A drug that targets spleen/lungs for healing." + reagent_state = LIQUID + fluid_r = 10 + fluid_g = 180 + fluid_b = 120 + transparency = 255 + depletion_rate = 0.2 + value = 3 + + on_mob_life(var/mob/M) + if(!M) M = holder.my_atom + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + + if (H.organHolder.spleen && H.organHolder.spleen.health <= 5) + H.damage_organs(-2, "spleen") + + if (H.organHolder.left_lung && H.organHolder.left_lung.health <= 5) + H.damage_organs(-2, "left_lung") + + if (H.organHolder.right_lung && H.organHolder.right_lung.health <= 5) + H.damage_organs(-2, "right_lung") + + //heals liver/kidneys/stomach/intestines + medical/organ_drug2 + name = "organ drug Class 2" + id = "organ_drug3" + description = "A drug that targets liver/kidneys/stomach/intestines for healing." + reagent_state = LIQUID + fluid_r = 10 + fluid_g = 120 + fluid_b = 180 + transparency = 255 + depletion_rate = 0.2 + value = 3 + + on_mob_life(var/mob/M) + if(!M) M = holder.my_atom + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + + if (H.organHolder.liver && H.organHolder.liver.health <= 5) + H.damage_organs(-2, "liver") + + if (H.organHolder.left_kidney && H.organHolder.left_kidney.health <= 5) + H.damage_organs(-2, "left_kidney") + + if (H.organHolder.stomach && H.organHolder.stomach.health <= 5) + H.damage_organs(-2, "stomach") + + if (H.organHolder.stomach && H.organHolder.stomach.health <= 5) + H.damage_organs(-2, "stomach") + + if (H.organHolder.intestines && H.organHolder.intestines.health <= 5) + H.damage_organs(-2, "intestines") + + //heals appendix/pancreas + medical/organ_drug3 + name = "organ drug Class 3" + id = "organ_drug3" + description = "A drug that targets appendix/pancreas for healing." + reagent_state = LIQUID + fluid_r = 80 + fluid_g = 120 + fluid_b = 120 + transparency = 255 + depletion_rate = 0.2 + value = 3 + + on_mob_life(var/mob/M) + if(!M) M = holder.my_atom + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + + if (H.organHolder.appendix && H.organHolder.appendix.health <= 5) + H.damage_organs(-2, "appendix") + + if (H.organHolder.pancreas && H.organHolder.pancreas.health <= 5) + H.damage_organs(-2, "pancreas") + From 703a53cf502af3c57d0a2cf3a478bbe06540c928 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Tue, 24 Jul 2018 22:54:18 -0400 Subject: [PATCH 021/105] add organ healing chems --- code/datums/chemistry/Reagents-Medical.dm | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index 5538fcc9..9dbae51d 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -1197,14 +1197,14 @@ datum if(!M) M = holder.my_atom if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - - if (H.organHolder.spleen && H.organHolder.spleen.health <= 5) + + if (H.organHolder.spleen && H.organHolder.spleen.health <= 10) H.damage_organs(-2, "spleen") - if (H.organHolder.left_lung && H.organHolder.left_lung.health <= 5) + if (H.organHolder.left_lung && H.organHolder.left_lung.health <= 10) H.damage_organs(-2, "left_lung") - if (H.organHolder.right_lung && H.organHolder.right_lung.health <= 5) + if (H.organHolder.right_lung && H.organHolder.right_lung.health <= 10) H.damage_organs(-2, "right_lung") //heals liver/kidneys/stomach/intestines @@ -1225,19 +1225,19 @@ datum if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if (H.organHolder.liver && H.organHolder.liver.health <= 5) + if (H.organHolder.liver && H.organHolder.liver.health <= 10) H.damage_organs(-2, "liver") - if (H.organHolder.left_kidney && H.organHolder.left_kidney.health <= 5) + if (H.organHolder.left_kidney && H.organHolder.left_kidney.health <= 10) H.damage_organs(-2, "left_kidney") - if (H.organHolder.stomach && H.organHolder.stomach.health <= 5) + if (H.organHolder.stomach && H.organHolder.stomach.health <= 10) H.damage_organs(-2, "stomach") - if (H.organHolder.stomach && H.organHolder.stomach.health <= 5) + if (H.organHolder.stomach && H.organHolder.stomach.health <= 10) H.damage_organs(-2, "stomach") - if (H.organHolder.intestines && H.organHolder.intestines.health <= 5) + if (H.organHolder.intestines && H.organHolder.intestines.health <= 10) H.damage_organs(-2, "intestines") //heals appendix/pancreas @@ -1258,9 +1258,9 @@ datum if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if (H.organHolder.appendix && H.organHolder.appendix.health <= 5) + if (H.organHolder.appendix && H.organHolder.appendix.health <= 10) H.damage_organs(-2, "appendix") - if (H.organHolder.pancreas && H.organHolder.pancreas.health <= 5) + if (H.organHolder.pancreas && H.organHolder.pancreas.health <= 10) H.damage_organs(-2, "pancreas") From d7c0563a496ba2f4a55a347dcdf2fd1fdc62033c Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 25 Jul 2018 01:15:44 -0400 Subject: [PATCH 022/105] deleted parenthesis accidentally --- code/procs/scanprocs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index f75babc7..4aa8507c 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -131,7 +131,7 @@ brain_data = "Subject has no brain." - if (verbose_reagent_info && !isvampire(H)) // Added a pair of vampire checks here (Convair880). + if (verbose_reagent_info && !isvampire(H)) var/organ_data1 = "" var/found = 0 From a59c4c97fb72af31016e4cc90d2c144a38a54716 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 25 Jul 2018 01:16:20 -0400 Subject: [PATCH 023/105] add organ drugs to the medical vender --- code/obj/machinery/vending.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/obj/machinery/vending.dm b/code/obj/machinery/vending.dm index 8d4bc300..1ba87795 100644 --- a/code/obj/machinery/vending.dm +++ b/code/obj/machinery/vending.dm @@ -209,6 +209,10 @@ product_list += new/datum/data/vending_product("/obj/item/reagent_containers/pill/salbutamol", 10) product_list += new/datum/data/vending_product("/obj/item/reagent_containers/pill/mannitol", 10) product_list += new/datum/data/vending_product("/obj/item/reagent_containers/pill/mutadone", 5) + product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/organ_drug1", 2) + product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/organ_drug1", 2) + product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/organ_drug1", 2) + product_list += new/datum/data/vending_product("/obj/item/bandage", 4) product_list += new/datum/data/vending_product("/obj/item/device/healthanalyzer", 4) product_list += new/datum/data/vending_product("/obj/item/device/healthanalyzer_upgrade", 4) From 95da329f9381971c1b35b7c108a154c2e608d253 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 25 Jul 2018 01:18:07 -0400 Subject: [PATCH 024/105] add functions in handle_organs and handle_blood procs in human.dm --- code/datums/chemistry/tools/bottles.dm | 31 +++++++++++++++ code/mob/living/carbon/human.dm | 52 +++++++++++++++++++++++++- code/obj/item/organ.dm | 8 ++-- 3 files changed, 85 insertions(+), 6 deletions(-) diff --git a/code/datums/chemistry/tools/bottles.dm b/code/datums/chemistry/tools/bottles.dm index 442d797a..9f501f58 100644 --- a/code/datums/chemistry/tools/bottles.dm +++ b/code/datums/chemistry/tools/bottles.dm @@ -244,6 +244,37 @@ ..() reagents.add_reagent("fluorosurfactant", 30) +//organ healing chems +/obj/item/reagent_containers/glass/bottle/organ_drug1 + name = "organ_drug1 bottle" + desc = "A small bottle." + bottle_style = "1" + amount_per_transfer_from_this = 5 + + New() + ..() + reagents.add_reagent("organ_drug1", 30) + +/obj/item/reagent_containers/glass/bottle/organ_drug2 + name = "organ_drug1 bottle" + desc = "A small bottle." + bottle_style = "1" + amount_per_transfer_from_this = 5 + + New() + ..() + reagents.add_reagent("organ_drug2", 30) + +/obj/item/reagent_containers/glass/bottle/organ_drug3 + name = "organ_drug1 bottle" + desc = "A small bottle." + bottle_style = "1" + amount_per_transfer_from_this = 5 + + New() + ..() + reagents.add_reagent("organ_drug3", 30) + /* ========================================================= */ /* -------------------- Chem Precursors -------------------- */ /* ========================================================= */ diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 5688e6cd..61af29b4 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4287,7 +4287,7 @@ return if (src.blood_volume < 500 && src.blood_volume > 0) // if we're full or empty, don't bother v - if (prob(66)) + if (prob(66) && src.organHolder.spleen && src.organHolder.liver.health < 10) //might just want to make a var for this an set it in handle_organs, but in the interest of making little changes, here this is src.blood_volume ++ // maybe get a little blood back ^ if (src.bleeding) @@ -4463,7 +4463,55 @@ src.take_oxygen_deprivation(20) src.updatehealth() - // lungs are skipped until they can be removed/whatever + + // lungs + if (!src.nodamage) // I don't know why all these if (!src.nodamage) isn't just checked once, but OK + if (src.organHolder.get_lung_amt() == 2) + src.remove_stam_mod_regen("single_lung_removal") + src.remove_stam_mod_max("single_lung_removal") + src.remove_stam_mod_regen("double_lung_removal") + src.remove_stam_mod_max("double_lung_removal") + + else if (src.organHolder.get_lung_amt() == 1) + if (prob(20)) + src.take_oxygen_deprivation(1) + src.losebreath+=1 + src.add_stam_mod_regen("single_lung_removal", 5) + src.add_stam_mod_max("single_lung_removal", 80) + + else if (src.organHolder.get_lung_amt() == 0) + src.take_oxygen_deprivation(5) + src.losebreath+=rand(1,5) + + src.remove_stam_mod_regen("single_lung_removal") + src.remove_stam_mod_max("single_lung_removal") + src.add_stam_mod_regen("double_lung_removal", 10) + src.add_stam_mod_max("double_lung_removal", 160) + + src.weakened = max(src.weakened, 5) + + // kdineys + if (!src.nodamage) + if (src.organHolder.get_kidney_amt() == 0) + src.take_toxin_damage(2) + + // liver + if (!src.nodamage) + if (!src.organHolder.liver || src.organHolder.liver.health < 10) + src.take_toxin_damage(2) + + + // pancreas if there's no pancreas, user does not generate insulin if they have sugar in their body. + if (!src.nodamage) + if (!src.organHolder.pancreas || src.organHolder.pancreas.health < 10) + if (src.reagents) + if (src.reagents && src.reagents.has_reagent("sugar", 30) ) + src.reagents.add_reagent("insulin", 2) + + // spleen if there's no spleen don't let the user regen blood naturally + // if (!src.organHolder.spleen || (src.organHolder.liver.health > 10)) + //handle_blood does the spleen check since all the spleen will do is let you regen blood for now, but I think this should set + if (!src.organHolder.left_eye && src.organHolder.right_eye) // we have no left eye, but we also don't have the blind overlay (presumably) if (!src.hasOverlayComposition(/datum/overlayComposition/blinded)) src.addOverlayComposition(/datum/overlayComposition/blinded_l_eye) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 2f52b3a2..ed252546 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -28,17 +28,17 @@ proc/get_kidney_amt() var/count = 0 - if (!organ_list && organ_list["left_kidney"]) + if (left_kidney) count++ - if (!organ_list && organ_list["right_kidney"]) + if (right_kidney) count++ return count proc/get_lung_amt() var/count = 0 - if (!organ_list && organ_list["left_lung"]) + if (left_lung) count++ - if (!organ_list && organ_list["right_lung"]) + if (right_lung) count++ return count From 82d32171518ca4c8fc18387f4c19f5a3fe6466a6 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 25 Jul 2018 03:02:19 -0400 Subject: [PATCH 025/105] fix organ drugs so that they now work... forgot parent call --- code/datums/chemistry/Reagents-Medical.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index 9dbae51d..90367ba1 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -1206,11 +1206,12 @@ datum if (H.organHolder.right_lung && H.organHolder.right_lung.health <= 10) H.damage_organs(-2, "right_lung") + ..(M) //heals liver/kidneys/stomach/intestines medical/organ_drug2 name = "organ drug Class 2" - id = "organ_drug3" + id = "organ_drug2" description = "A drug that targets liver/kidneys/stomach/intestines for healing." reagent_state = LIQUID fluid_r = 10 @@ -1239,6 +1240,7 @@ datum if (H.organHolder.intestines && H.organHolder.intestines.health <= 10) H.damage_organs(-2, "intestines") + ..(M) //heals appendix/pancreas medical/organ_drug3 @@ -1263,4 +1265,4 @@ datum if (H.organHolder.pancreas && H.organHolder.pancreas.health <= 10) H.damage_organs(-2, "pancreas") - + ..(M) From ad383be5e4bde0c7b02a672076b8851cd065d34c Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 27 Jul 2018 01:46:09 -0400 Subject: [PATCH 026/105] fix organ drug spawning in vendomat --- code/datums/chemistry/Reagents-Medical.dm | 14 +++++++------- code/datums/chemistry/tools/bottles.dm | 4 ++-- code/obj/machinery/vending.dm | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index 90367ba1..9b737a74 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -1226,19 +1226,19 @@ datum if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if (H.organHolder.liver && H.organHolder.liver.health <= 10) + if (H.organHolder.liver && H.organHolder.liver.health >= 10) H.damage_organs(-2, "liver") - if (H.organHolder.left_kidney && H.organHolder.left_kidney.health <= 10) + if (H.organHolder.left_kidney && H.organHolder.left_kidney.health >= 10) H.damage_organs(-2, "left_kidney") - if (H.organHolder.stomach && H.organHolder.stomach.health <= 10) + if (H.organHolder.stomach && H.organHolder.stomach.health >= 10) H.damage_organs(-2, "stomach") - if (H.organHolder.stomach && H.organHolder.stomach.health <= 10) + if (H.organHolder.stomach && H.organHolder.stomach.health >= 10) H.damage_organs(-2, "stomach") - if (H.organHolder.intestines && H.organHolder.intestines.health <= 10) + if (H.organHolder.intestines && H.organHolder.intestines.health >= 10) H.damage_organs(-2, "intestines") ..(M) @@ -1260,9 +1260,9 @@ datum if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if (H.organHolder.appendix && H.organHolder.appendix.health <= 10) + if (H.organHolder.appendix && H.organHolder.appendix.health >= 10) H.damage_organs(-2, "appendix") - if (H.organHolder.pancreas && H.organHolder.pancreas.health <= 10) + if (H.organHolder.pancreas && H.organHolder.pancreas.health >= 10) H.damage_organs(-2, "pancreas") ..(M) diff --git a/code/datums/chemistry/tools/bottles.dm b/code/datums/chemistry/tools/bottles.dm index 9f501f58..ab2acffe 100644 --- a/code/datums/chemistry/tools/bottles.dm +++ b/code/datums/chemistry/tools/bottles.dm @@ -256,7 +256,7 @@ reagents.add_reagent("organ_drug1", 30) /obj/item/reagent_containers/glass/bottle/organ_drug2 - name = "organ_drug1 bottle" + name = "organ_drug2 bottle" desc = "A small bottle." bottle_style = "1" amount_per_transfer_from_this = 5 @@ -266,7 +266,7 @@ reagents.add_reagent("organ_drug2", 30) /obj/item/reagent_containers/glass/bottle/organ_drug3 - name = "organ_drug1 bottle" + name = "organ_drug3 bottle" desc = "A small bottle." bottle_style = "1" amount_per_transfer_from_this = 5 diff --git a/code/obj/machinery/vending.dm b/code/obj/machinery/vending.dm index 1ba87795..8d237517 100644 --- a/code/obj/machinery/vending.dm +++ b/code/obj/machinery/vending.dm @@ -210,8 +210,8 @@ product_list += new/datum/data/vending_product("/obj/item/reagent_containers/pill/mannitol", 10) product_list += new/datum/data/vending_product("/obj/item/reagent_containers/pill/mutadone", 5) product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/organ_drug1", 2) - product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/organ_drug1", 2) - product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/organ_drug1", 2) + product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/organ_drug2", 2) + product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/organ_drug3", 2) product_list += new/datum/data/vending_product("/obj/item/bandage", 4) product_list += new/datum/data/vending_product("/obj/item/device/healthanalyzer", 4) From f931ec1bdd684913c3792847ac409cffdd723f6c Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 27 Jul 2018 01:47:14 -0400 Subject: [PATCH 027/105] change the hp amount needed for complete organ failure from 10 to 0 --- code/mob/living/carbon/human.dm | 68 ++++++++++++++------------------- 1 file changed, 29 insertions(+), 39 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 61af29b4..a99ef4c5 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4287,7 +4287,7 @@ return if (src.blood_volume < 500 && src.blood_volume > 0) // if we're full or empty, don't bother v - if (prob(66) && src.organHolder.spleen && src.organHolder.liver.health < 10) //might just want to make a var for this an set it in handle_organs, but in the interest of making little changes, here this is + if (prob(66) && src.organHolder.spleen && src.organHolder.spleen.health > 0) //might just want to make a var for this an set it in handle_organs, but in the interest of making little changes, here this is src.blood_volume ++ // maybe get a little blood back ^ if (src.bleeding) @@ -4466,51 +4466,47 @@ // lungs if (!src.nodamage) // I don't know why all these if (!src.nodamage) isn't just checked once, but OK - if (src.organHolder.get_lung_amt() == 2) - src.remove_stam_mod_regen("single_lung_removal") - src.remove_stam_mod_max("single_lung_removal") - src.remove_stam_mod_regen("double_lung_removal") - src.remove_stam_mod_max("double_lung_removal") - - else if (src.organHolder.get_lung_amt() == 1) - if (prob(20)) - src.take_oxygen_deprivation(1) - src.losebreath+=1 - src.add_stam_mod_regen("single_lung_removal", 5) - src.add_stam_mod_max("single_lung_removal", 80) - - else if (src.organHolder.get_lung_amt() == 0) - src.take_oxygen_deprivation(5) - src.losebreath+=rand(1,5) - - src.remove_stam_mod_regen("single_lung_removal") - src.remove_stam_mod_max("single_lung_removal") - src.add_stam_mod_regen("double_lung_removal", 10) - src.add_stam_mod_max("double_lung_removal", 160) - - src.weakened = max(src.weakened, 5) + switch (src.organHolder.get_working_lung_amt()) + if (1) + if (prob(20)) + src.take_oxygen_deprivation(1) + src.losebreath+=1 + if (0) + src.take_oxygen_deprivation(5) + src.losebreath+=rand(1,5) // kdineys if (!src.nodamage) - if (src.organHolder.get_kidney_amt() == 0) - src.take_toxin_damage(2) + if (src.organHolder.get_working_kidney_amt() == 0) + src.take_toxin_damage_no_organ(2, 1) // liver if (!src.nodamage) - if (!src.organHolder.liver || src.organHolder.liver.health < 10) - src.take_toxin_damage(2) + if (!src.organHolder.liver || src.organHolder.liver.health <= 0) + src.take_toxin_damage_no_organ(2, 1) + + else if (src.organHolder.liver.health <=35 && prob(organHolder.liver.health * 0.2)) + src.contract_disease(/datum/ailment/disease/liverfailure,null,null,1) // pancreas if there's no pancreas, user does not generate insulin if they have sugar in their body. if (!src.nodamage) - if (!src.organHolder.pancreas || src.organHolder.pancreas.health < 10) + if (!src.organHolder.pancreas || src.organHolder.pancreas.health <= 0) if (src.reagents) if (src.reagents && src.reagents.has_reagent("sugar", 30) ) src.reagents.add_reagent("insulin", 2) // spleen if there's no spleen don't let the user regen blood naturally // if (!src.organHolder.spleen || (src.organHolder.liver.health > 10)) - //handle_blood does the spleen check since all the spleen will do is let you regen blood for now, but I think this should set + //handle_blood does the spleen check since all the spleen will do is let you regen blood for now, but this could be needed if there is another function for a spleen + + //stomach + // if (!src.nodamage) + // if (!src.organHolder.stomach || src.organHolder.stomach.health <= 0) + + //intestines + // if (!src.nodamage) + // if (!src.organHolder.intestines || src.organHolder.intestines.health <= 0) if (!src.organHolder.left_eye && src.organHolder.right_eye) // we have no left eye, but we also don't have the blind overlay (presumably) if (!src.hasOverlayComposition(/datum/overlayComposition/blinded)) @@ -6514,19 +6510,13 @@ src.sims.updateHudIcons(new_style) return -/mob/living/carbon/human/take_toxin_damage(var/amount) - if (..()) - return - if (src.bioHolder && src.bioHolder.HasEffect("resist_toxic")) - return - - //this proc is called for damage and healing, only damage organs when healing. New organ healing drugs will explicitely heal organs +//take toxin damage, but don't damage any organs. Using this for damaging the player when damage is caused due to organs not working. no liver/kidney +/mob/living/carbon/human/take_toxin_damage_no_organ(var/amount) + ..() if (amount > 1) damage_organs(src.toxloss/20, 40, list("left_kidney", "right_kidney")) prob_damage_organ(src.toxloss/40, 60, "liver") - src.toxloss = max(0,src.toxloss + amount) - return //made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using From 94301b37a98629b4406067756150c5f3554c2189 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 27 Jul 2018 01:49:00 -0400 Subject: [PATCH 028/105] lung amount stamina changing moved to drop/recieve organ instead of in handle_organs, way more efficient this way, but I need to still account for when a lung's health gets too low. --- code/obj/item/organ.dm | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index ed252546..ec35e4d4 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -26,19 +26,20 @@ var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt", "left_kidney", "right_kidney", "liver", "stomach", "intestines", "spleen", "pancreas", "appendix") - proc/get_kidney_amt() + //organs should not perform their functions if they have 0 health + proc/get_working_kidney_amt() var/count = 0 - if (left_kidney) + if (left_kidney && left_kidney.health > 0) count++ - if (right_kidney) + if (right_kidney && right_kidney.health > 0) count++ return count - proc/get_lung_amt() + proc/get_working_lung_amt() var/count = 0 - if (left_lung) + if (left_lung && left_lung.health > 0) count++ - if (right_lung) + if (right_lung && right_lung.health > 0) count++ return count @@ -353,6 +354,7 @@ myLeftLung.set_loc(location) myLeftLung.on_removal() src.left_lung = null + handle_lung_stamina_change() return myLeftLung if ("right_lung") @@ -362,6 +364,7 @@ myRightLung.set_loc(location) myRightLung.on_removal() src.right_lung = null + handle_lung_stamina_change() return myRightLung if ("butt") @@ -627,8 +630,8 @@ src.left_lung = newLeftLung newLeftLung.set_loc(src.donor) organ_list["left_lung"] = newLeftLung + handle_lung_stamina_change() success = 1 - if ("right_lung") if (src.right_lung) if (force) @@ -640,6 +643,7 @@ src.right_lung = newRightLung newRightLung.set_loc(src.donor) organ_list["right_lung"] = newRightLung + handle_lung_stamina_change() success = 1 if ("butt") @@ -760,6 +764,25 @@ I.reagents.trans_to(src.donor, 330) return 1 + //change stamina modifies based on lung amount + proc/handle_lung_stamina_change() + switch (src.get_working_lung_amt()) + if (2) + src.remove_stam_mod_regen("single_lung_removal") + src.remove_stam_mod_max("single_lung_removal") + src.remove_stam_mod_regen("double_lung_removal") + src.remove_stam_mod_max("double_lung_removal") + if (1) + src.remove_stam_mod_regen("double_lung_removal") + src.remove_stam_mod_max("double_lung_removal") + src.add_stam_mod_regen("single_lung_removal", -3) + src.add_stam_mod_max("single_lung_removal", -75) + if (0) + src.remove_stam_mod_regen("single_lung_removal") + src.remove_stam_mod_max("single_lung_removal") + src.add_stam_mod_regen("double_lung_removal", -6) + src.add_stam_mod_max("double_lung_removal", -150) + /mob/living/carbon/human/proc/eye_istype(var/obj/item/I) if (!src.organHolder || !I) return 0 From ed6c97f2a21895d80c362bdc9a6bc4d7a548a24a Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 27 Jul 2018 02:27:03 -0400 Subject: [PATCH 029/105] move handling missing/broken lungs to method in organHolder. and have something to only bother with that stuff if it changes. --- code/mob/living/carbon/human.dm | 9 +----- code/obj/item/organ.dm | 53 ++++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index a99ef4c5..770e4ad0 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4466,14 +4466,7 @@ // lungs if (!src.nodamage) // I don't know why all these if (!src.nodamage) isn't just checked once, but OK - switch (src.organHolder.get_working_lung_amt()) - if (1) - if (prob(20)) - src.take_oxygen_deprivation(1) - src.losebreath+=1 - if (0) - src.take_oxygen_deprivation(5) - src.losebreath+=rand(1,5) + src.organHolder.handle_lungs_health() // kdineys if (!src.nodamage) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index ec35e4d4..1c5fcd0d 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -22,6 +22,7 @@ var/obj/item/organ/spleen = null var/obj/item/organ/pancreas = null var/obj/item/organ/appendix = null + var/lungs_changed = 0 //for only changing lung stamina debuffs if it has changed since last cycle var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt", "left_kidney", "right_kidney", "liver", "stomach", "intestines", "spleen", "pancreas", "appendix") @@ -764,24 +765,40 @@ I.reagents.trans_to(src.donor, 330) return 1 - //change stamina modifies based on lung amount - proc/handle_lung_stamina_change() - switch (src.get_working_lung_amt()) - if (2) - src.remove_stam_mod_regen("single_lung_removal") - src.remove_stam_mod_max("single_lung_removal") - src.remove_stam_mod_regen("double_lung_removal") - src.remove_stam_mod_max("double_lung_removal") - if (1) - src.remove_stam_mod_regen("double_lung_removal") - src.remove_stam_mod_max("double_lung_removal") - src.add_stam_mod_regen("single_lung_removal", -3) - src.add_stam_mod_max("single_lung_removal", -75) - if (0) - src.remove_stam_mod_regen("single_lung_removal") - src.remove_stam_mod_max("single_lung_removal") - src.add_stam_mod_regen("double_lung_removal", -6) - src.add_stam_mod_max("double_lung_removal", -150) + //change stamina modifies based on amount of working lungs. lungs w/ health > 0 + proc/handle_lungs_health() + if (src.get_working_lung_amt() != lungs_changed) + switch (src.get_working_lung_amt()) + if (0) + src.remove_stam_mod_regen("single_lung_removal") + src.remove_stam_mod_max("single_lung_removal") + src.add_stam_mod_regen("double_lung_removal", -6) + src.add_stam_mod_max("double_lung_removal", -150) + lungs_changed = 0 + user.visible_message("[user] 0.") + + donor.take_oxygen_deprivation(5) + donor.losebreath+=rand(1,5) + + if (1) + src.remove_stam_mod_regen("double_lung_removal") + src.remove_stam_mod_max("double_lung_removal") + src.add_stam_mod_regen("single_lung_removal", -3) + src.add_stam_mod_max("single_lung_removal", -75) + lungs_changed = 1 + user.visible_message("[user] 1.") + + if (prob(20)) + donor.take_oxygen_deprivation(1) + donor.losebreath+=1 + + if (2) + src.remove_stam_mod_regen("single_lung_removal") + src.remove_stam_mod_max("single_lung_removal") + src.remove_stam_mod_regen("double_lung_removal") + src.remove_stam_mod_max("double_lung_removal") + lungs_changed = 2 + user.visible_message("[user] 2.") /mob/living/carbon/human/proc/eye_istype(var/obj/item/I) if (!src.organHolder || !I) From bcbfcba76ab65af318b2511a8b1532a93a974c28 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 27 Jul 2018 02:32:50 -0400 Subject: [PATCH 030/105] fix lung handling thing so that now it will only change stamina in the corresponding human if the amount of working lungs has been changed. --- code/obj/item/organ.dm | 65 +++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 1c5fcd0d..7734f616 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -767,38 +767,39 @@ //change stamina modifies based on amount of working lungs. lungs w/ health > 0 proc/handle_lungs_health() - if (src.get_working_lung_amt() != lungs_changed) - switch (src.get_working_lung_amt()) - if (0) - src.remove_stam_mod_regen("single_lung_removal") - src.remove_stam_mod_max("single_lung_removal") - src.add_stam_mod_regen("double_lung_removal", -6) - src.add_stam_mod_max("double_lung_removal", -150) - lungs_changed = 0 - user.visible_message("[user] 0.") - - donor.take_oxygen_deprivation(5) - donor.losebreath+=rand(1,5) - - if (1) - src.remove_stam_mod_regen("double_lung_removal") - src.remove_stam_mod_max("double_lung_removal") - src.add_stam_mod_regen("single_lung_removal", -3) - src.add_stam_mod_max("single_lung_removal", -75) - lungs_changed = 1 - user.visible_message("[user] 1.") - - if (prob(20)) - donor.take_oxygen_deprivation(1) - donor.losebreath+=1 - - if (2) - src.remove_stam_mod_regen("single_lung_removal") - src.remove_stam_mod_max("single_lung_removal") - src.remove_stam_mod_regen("double_lung_removal") - src.remove_stam_mod_max("double_lung_removal") - lungs_changed = 2 - user.visible_message("[user] 2.") + + switch (src.get_working_lung_amt()) + if (0) + if (src.get_working_lung_amt() != lungs_changed) + donor.remove_stam_mod_regen("single_lung_removal") + donor.remove_stam_mod_max("single_lung_removal") + donor.add_stam_mod_regen("double_lung_removal", -6) + donor.add_stam_mod_max("double_lung_removal", -150) + + lungs_changed = 0 + user.visible_message("[user] 0.") + donor.take_oxygen_deprivation(5) + donor.losebreath+=rand(1,5) + if (1) + if (src.get_working_lung_amt() != lungs_changed) + donor.remove_stam_mod_regen("double_lung_removal") + donor.remove_stam_mod_max("double_lung_removal") + donor.add_stam_mod_regen("single_lung_removal", -3) + donor.add_stam_mod_max("single_lung_removal", -75) + + lungs_changed = 1 + user.visible_message("[user] 1.") + if (prob(20)) + donor.take_oxygen_deprivation(1) + donor.losebreath+=1 + if (2) + if (src.get_working_lung_amt() != lungs_changed) + donor.remove_stam_mod_regen("single_lung_removal") + donor.remove_stam_mod_max("single_lung_removal") + donor.remove_stam_mod_regen("double_lung_removal") + donor.remove_stam_mod_max("double_lung_removal") + lungs_changed = 2 + user.visible_message("[user] 2.") /mob/living/carbon/human/proc/eye_istype(var/obj/item/I) if (!src.organHolder || !I) From e69552ca2746f1cd874207cbc07f7c4500eaa9a6 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 27 Jul 2018 23:26:25 -0400 Subject: [PATCH 031/105] fix some stuff with the way that the lung stamina changes work --- code/mob/living/carbon/human.dm | 8 ++++---- code/obj/item/organ.dm | 30 ++++++++++++++---------------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 770e4ad0..b795b939 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4471,15 +4471,15 @@ // kdineys if (!src.nodamage) if (src.organHolder.get_working_kidney_amt() == 0) - src.take_toxin_damage_no_organ(2, 1) + src.take_toxin_damage_no_organ(2) // liver if (!src.nodamage) if (!src.organHolder.liver || src.organHolder.liver.health <= 0) - src.take_toxin_damage_no_organ(2, 1) + src.take_toxin_damage_no_organ(2) else if (src.organHolder.liver.health <=35 && prob(organHolder.liver.health * 0.2)) - src.contract_disease(/datum/ailment/disease/liverfailure,null,null,1) + src.contract_disease(/datum/ailment/disease/liver_failure,null,null,1) // pancreas if there's no pancreas, user does not generate insulin if they have sugar in their body. @@ -6504,7 +6504,7 @@ return //take toxin damage, but don't damage any organs. Using this for damaging the player when damage is caused due to organs not working. no liver/kidney -/mob/living/carbon/human/take_toxin_damage_no_organ(var/amount) +/mob/living/carbon/human/proc/take_toxin_damage_no_organ(var/amount) ..() if (amount > 1) damage_organs(src.toxloss/20, 40, list("left_kidney", "right_kidney")) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 7734f616..4807c149 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -22,7 +22,7 @@ var/obj/item/organ/spleen = null var/obj/item/organ/pancreas = null var/obj/item/organ/appendix = null - var/lungs_changed = 0 //for only changing lung stamina debuffs if it has changed since last cycle + var/lungs_changed = 2 //for only changing lung stamina debuffs if it has changed since last cycle. starts at 2 for having 2 working lungs var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt", "left_kidney", "right_kidney", "liver", "stomach", "intestines", "spleen", "pancreas", "appendix") @@ -355,7 +355,7 @@ myLeftLung.set_loc(location) myLeftLung.on_removal() src.left_lung = null - handle_lung_stamina_change() + handle_lungs_health() return myLeftLung if ("right_lung") @@ -365,7 +365,7 @@ myRightLung.set_loc(location) myRightLung.on_removal() src.right_lung = null - handle_lung_stamina_change() + handle_lungs_health() return myRightLung if ("butt") @@ -631,7 +631,7 @@ src.left_lung = newLeftLung newLeftLung.set_loc(src.donor) organ_list["left_lung"] = newLeftLung - handle_lung_stamina_change() + handle_lungs_health() success = 1 if ("right_lung") if (src.right_lung) @@ -644,7 +644,7 @@ src.right_lung = newRightLung newRightLung.set_loc(src.donor) organ_list["right_lung"] = newRightLung - handle_lung_stamina_change() + handle_lungs_health() success = 1 if ("butt") @@ -766,40 +766,38 @@ return 1 //change stamina modifies based on amount of working lungs. lungs w/ health > 0 + //lungs_changed works like this: if lungs_changed is != the num of working lungs, then apply the proc/handle_lungs_health() - - switch (src.get_working_lung_amt()) + var/working_lungs = src.get_working_lung_amt() + switch (working_lungs) if (0) - if (src.get_working_lung_amt() != lungs_changed) + if (working_lungs != lungs_changed) donor.remove_stam_mod_regen("single_lung_removal") donor.remove_stam_mod_max("single_lung_removal") donor.add_stam_mod_regen("double_lung_removal", -6) donor.add_stam_mod_max("double_lung_removal", -150) + lungs_changed = 0 - lungs_changed = 0 - user.visible_message("[user] 0.") donor.take_oxygen_deprivation(5) donor.losebreath+=rand(1,5) if (1) - if (src.get_working_lung_amt() != lungs_changed) + if (working_lungs != lungs_changed) donor.remove_stam_mod_regen("double_lung_removal") donor.remove_stam_mod_max("double_lung_removal") donor.add_stam_mod_regen("single_lung_removal", -3) donor.add_stam_mod_max("single_lung_removal", -75) + lungs_changed = 1 - lungs_changed = 1 - user.visible_message("[user] 1.") if (prob(20)) donor.take_oxygen_deprivation(1) donor.losebreath+=1 if (2) - if (src.get_working_lung_amt() != lungs_changed) + if (working_lungs != lungs_changed) donor.remove_stam_mod_regen("single_lung_removal") donor.remove_stam_mod_max("single_lung_removal") donor.remove_stam_mod_regen("double_lung_removal") donor.remove_stam_mod_max("double_lung_removal") - lungs_changed = 2 - user.visible_message("[user] 2.") + lungs_changed = 2 /mob/living/carbon/human/proc/eye_istype(var/obj/item/I) if (!src.organHolder || !I) From db8d177937a5bb8d1ebd5cf5b7c76b80d6d4eabf Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Sun, 29 Jul 2018 04:07:11 -0400 Subject: [PATCH 032/105] remove unnecessary uses of damage multiple organs, fix scanprocs line break. next change proc to use vars --- code/datums/chemistry/Reagents-Medical.dm | 41 +++++++++++++++-------- code/mob/living/carbon.dm | 7 ---- code/mob/living/carbon/human.dm | 28 +++++++++++----- code/obj/item/cigarette.dm | 5 ++- code/procs/scanprocs.dm | 4 +-- 5 files changed, 53 insertions(+), 32 deletions(-) diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index 9b737a74..22fcae13 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -400,7 +400,7 @@ datum if (H.bleeding && prob(33)) H.bleeding-- //heal all functional organs, ignore heart and brain since they don't use this system yet - H.damage_organs(-2, 100, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + H.damage_organs(-2, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) M.updatehealth() //M.UpdateDamageIcon() @@ -1192,20 +1192,29 @@ datum transparency = 255 depletion_rate = 0.2 value = 3 + // H.damage_organs(-2, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) on_mob_life(var/mob/M) if(!M) M = holder.my_atom + M.visible_message("[M] hit life with drug1!") + if (istype(M, /mob/living/carbon/human)) + M.visible_message("[M] hit istype human, is human drug1!") var/mob/living/carbon/human/H = M - if (H.organHolder.spleen && H.organHolder.spleen.health <= 10) - H.damage_organs(-2, "spleen") + if (H.organHolder.spleen && H.organHolder.spleen.health >= 10) + M.visible_message("[M] hit spleen!") + H.take_organ_damage(-2, "spleen") + + if (H.organHolder.left_lung && H.organHolder.left_lung.health >= 10) + M.visible_message("[M] hit ll!") - if (H.organHolder.left_lung && H.organHolder.left_lung.health <= 10) - H.damage_organs(-2, "left_lung") + H.take_organ_damage(-2, "left_lung") - if (H.organHolder.right_lung && H.organHolder.right_lung.health <= 10) - H.damage_organs(-2, "right_lung") + if (H.organHolder.right_lung && H.organHolder.right_lung.health >= 10) + M.visible_message("[M] hit rl!") + H.take_organ_damage(-2, "right_lung") + M.updatehealth() ..(M) //heals liver/kidneys/stomach/intestines @@ -1227,19 +1236,21 @@ datum var/mob/living/carbon/human/H = M if (H.organHolder.liver && H.organHolder.liver.health >= 10) - H.damage_organs(-2, "liver") + H.take_organ_damage(-2, "liver") if (H.organHolder.left_kidney && H.organHolder.left_kidney.health >= 10) - H.damage_organs(-2, "left_kidney") + H.take_organ_damage(-2, "left_kidney") if (H.organHolder.stomach && H.organHolder.stomach.health >= 10) - H.damage_organs(-2, "stomach") + H.take_organ_damage(-2, "stomach") if (H.organHolder.stomach && H.organHolder.stomach.health >= 10) - H.damage_organs(-2, "stomach") + H.take_organ_damage(-2, "stomach") if (H.organHolder.intestines && H.organHolder.intestines.health >= 10) - H.damage_organs(-2, "intestines") + H.take_organ_damage(-2, "intestines") + + M.updatehealth() ..(M) //heals appendix/pancreas @@ -1255,14 +1266,16 @@ datum depletion_rate = 0.2 value = 3 + on_mob_life(var/mob/M) if(!M) M = holder.my_atom if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M if (H.organHolder.appendix && H.organHolder.appendix.health >= 10) - H.damage_organs(-2, "appendix") + H.take_organ_damage(-2, "appendix") if (H.organHolder.pancreas && H.organHolder.pancreas.health >= 10) - H.damage_organs(-2, "pancreas") + H.take_organ_damage(-2, "pancreas") + M.updatehealth() ..(M) diff --git a/code/mob/living/carbon.dm b/code/mob/living/carbon.dm index 113869e5..5a265e91 100644 --- a/code/mob/living/carbon.dm +++ b/code/mob/living/carbon.dm @@ -312,13 +312,6 @@ if (src.bioHolder && src.bioHolder.HasEffect("resist_toxic")) return - - // if (istype(src, /mob/living/carbon/human)) - // mob/living/carbon/human\H = src - - // // if (H.organholder && H.organ) - - src.toxloss = max(0,src.toxloss + amount) return diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index b795b939..1b8157bf 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4471,12 +4471,12 @@ // kdineys if (!src.nodamage) if (src.organHolder.get_working_kidney_amt() == 0) - src.take_toxin_damage_no_organ(2) + src.take_toxin_damage(2, 1) // liver if (!src.nodamage) if (!src.organHolder.liver || src.organHolder.liver.health <= 0) - src.take_toxin_damage_no_organ(2) + src.take_toxin_damage(2, 1) else if (src.organHolder.liver.health <=35 && prob(organHolder.liver.health * 0.2)) src.contract_disease(/datum/ailment/disease/liver_failure,null,null,1) @@ -6503,13 +6503,25 @@ src.sims.updateHudIcons(new_style) return -//take toxin damage, but don't damage any organs. Using this for damaging the player when damage is caused due to organs not working. no liver/kidney -/mob/living/carbon/human/proc/take_toxin_damage_no_organ(var/amount) - ..() - if (amount > 1) - damage_organs(src.toxloss/20, 40, list("left_kidney", "right_kidney")) - prob_damage_organ(src.toxloss/40, 60, "liver") +//ignore organs if true. Needed for when non-functioning/missing kidney/liver genetates tox damage +/mob/living/carbon/human/take_toxin_damage(var/amount, var/ignore) + if (..()) + return + + if (!ignore) + if (amount > 1) + if (prob(30)) + H.take_organ_damage(amount/20, "left_kidney") + if (prob(30)) + H.take_organ_damage(amount/20, "right_kidney") + if (prob(30)) + H.take_organ_damage(amount/40, "left_lung") + return + +/mob/lving/carbon/human/proc/full_heal() + H.damage_organs(-10000, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + ..() //made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using diff --git a/code/obj/item/cigarette.dm b/code/obj/item/cigarette.dm index a0643f2e..0c703755 100644 --- a/code/obj/item/cigarette.dm +++ b/code/obj/item/cigarette.dm @@ -161,7 +161,10 @@ else src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) - H.damage_organs(2, 40, list("left_lung", "right_lung")) + if (prob(30)) + H.take_organ_damage(1, "left_lung") + if (prob(30)) + H.take_organ_damage(1, "right_lung") else src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index 4aa8507c..cf9cadcb 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -145,9 +145,9 @@ if (organ.health < 100) if (!found) found = 1 - organ_data1 += "[organ.name] has [organ.health] / 100
" + organ_data1 += "
[organ.name] has [organ.health] / 100" if (found) - organ_data = "Scans indicate organ damage in:
" + organ_data = "Scans indicate organ damage in:" organ_data += organ_data1 else From 84dd500427398e24b3b5291f71bd06eab11a37a4 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Sun, 29 Jul 2018 04:18:55 -0400 Subject: [PATCH 033/105] fix real dumb errors --- code/mob/living/carbon/human.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 1b8157bf..1eaf5696 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -5749,6 +5749,8 @@ boutput(src, "This statement is universally true because if you did you probably wouldn't be desperate enough to see this message.") /mob/living/carbon/human/full_heal() + src.damage_organs(-10000, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + blinded = 0 bleeding = 0 blood_volume = 500 @@ -6511,18 +6513,14 @@ if (!ignore) if (amount > 1) if (prob(30)) - H.take_organ_damage(amount/20, "left_kidney") + src.take_organ_damage(amount/20, "left_kidney") if (prob(30)) - H.take_organ_damage(amount/20, "right_kidney") + src.take_organ_damage(amount/20, "right_kidney") if (prob(30)) - H.take_organ_damage(amount/40, "left_lung") + src.take_organ_damage(amount/40, "left_lung") return -/mob/lving/carbon/human/proc/full_heal() - H.damage_organs(-10000, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) - ..() - //made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using //amount, damge to be done to organs From 11ada6a601ff849566aaa739ed221742abae464d Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 30 Jul 2018 01:47:26 -0400 Subject: [PATCH 034/105] organ diseases, some are gonna be removed, I only want diseases for failure, not for missing. also removing logs from organdrugs --- code/datums/chemistry/Reagents-Medical.dm | 25 +++---- .../organ_diseases/kidneys_removal.dm | 22 ++++++ .../diseases/organ_diseases/liver_failure.dm | 58 ++++++++++++++++ .../diseases/organ_diseases/liver_removal.dm | 22 ++++++ .../diseases/organ_diseases/lungs_removal.dm | 67 +++++++++++++++++++ 5 files changed, 179 insertions(+), 15 deletions(-) create mode 100644 code/datums/diseases/organ_diseases/kidneys_removal.dm create mode 100644 code/datums/diseases/organ_diseases/liver_failure.dm create mode 100644 code/datums/diseases/organ_diseases/liver_removal.dm create mode 100644 code/datums/diseases/organ_diseases/lungs_removal.dm diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index 22fcae13..329853e2 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -1196,23 +1196,18 @@ datum on_mob_life(var/mob/M) if(!M) M = holder.my_atom - M.visible_message("[M] hit life with drug1!") if (istype(M, /mob/living/carbon/human)) - M.visible_message("[M] hit istype human, is human drug1!") var/mob/living/carbon/human/H = M - if (H.organHolder.spleen && H.organHolder.spleen.health >= 10) - M.visible_message("[M] hit spleen!") + if (H.organHolder.spleen && H.organHolder.spleen.health >= 10 && H.organHolder.spleen.health < 100) H.take_organ_damage(-2, "spleen") - if (H.organHolder.left_lung && H.organHolder.left_lung.health >= 10) - M.visible_message("[M] hit ll!") + if (H.organHolder.left_lung && H.organHolder.left_lung.health >= 10 && H.organHolder.left_lung.health < 100) H.take_organ_damage(-2, "left_lung") - if (H.organHolder.right_lung && H.organHolder.right_lung.health >= 10) - M.visible_message("[M] hit rl!") + if (H.organHolder.right_lung && H.organHolder.right_lung.health >= 10 && H.organHolder.right_lung.health < 100) H.take_organ_damage(-2, "right_lung") M.updatehealth() ..(M) @@ -1235,19 +1230,19 @@ datum if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if (H.organHolder.liver && H.organHolder.liver.health >= 10) + if (H.organHolder.liver && H.organHolder.liver.health >= 10 && H.organHolder.liver.health < 100) H.take_organ_damage(-2, "liver") - if (H.organHolder.left_kidney && H.organHolder.left_kidney.health >= 10) + if (H.organHolder.left_kidney && H.organHolder.left_kidney.health >= 10 && H.organHolder.left_kidney.health < 100) H.take_organ_damage(-2, "left_kidney") - if (H.organHolder.stomach && H.organHolder.stomach.health >= 10) + if (H.organHolder.stomach && H.organHolder.stomach.health >= 10 && H.organHolder.stomach.health < 100) H.take_organ_damage(-2, "stomach") - if (H.organHolder.stomach && H.organHolder.stomach.health >= 10) + if (H.organHolder.stomach && H.organHolder.stomach.health >= 10 && H.organHolder.stomach.health < 100) H.take_organ_damage(-2, "stomach") - if (H.organHolder.intestines && H.organHolder.intestines.health >= 10) + if (H.organHolder.intestines && H.organHolder.intestines.health >= 10 && H.organHolder.intestines.health < 100) H.take_organ_damage(-2, "intestines") M.updatehealth() @@ -1272,10 +1267,10 @@ datum if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - if (H.organHolder.appendix && H.organHolder.appendix.health >= 10) + if (H.organHolder.appendix && H.organHolder.appendix.health >= 10 && H.organHolder.appendix.health < 100) H.take_organ_damage(-2, "appendix") - if (H.organHolder.pancreas && H.organHolder.pancreas.health >= 10) + if (H.organHolder.pancreas && H.organHolder.pancreas.health >= 10 && H.organHolder.pancreas.health < 100) H.take_organ_damage(-2, "pancreas") M.updatehealth() ..(M) diff --git a/code/datums/diseases/organ_diseases/kidneys_removal.dm b/code/datums/diseases/organ_diseases/kidneys_removal.dm new file mode 100644 index 00000000..7b384be5 --- /dev/null +++ b/code/datums/diseases/organ_diseases/kidneys_removal.dm @@ -0,0 +1,22 @@ +/datum/ailment/disease/nokidneys + name = "Kidney Abscondment" + scantype = "Medical Emergency" + max_stages = 1 + spread = "Both of the patient's kidneys are missing." + cure = "Kidney Transplant" + affected_species = list("Human","Monkey") + +/datum/ailment/disease/nokidneys/stage_act(var/mob/living/carbon/human/H,var/datum/ailment/D) + if (..()) + return + if (!H.organHolder) + H.cure_disease(D) + return + if (!H.organHolder.left_kidney && !H.organHolder.right_kidney) + H.cure_disease(D) + return + else + H.take_toxin_damage(4) + + H.weakened = max(H.weakened, 5) + H.updatehealth() \ No newline at end of file diff --git a/code/datums/diseases/organ_diseases/liver_failure.dm b/code/datums/diseases/organ_diseases/liver_failure.dm new file mode 100644 index 00000000..550ab543 --- /dev/null +++ b/code/datums/diseases/organ_diseases/liver_failure.dm @@ -0,0 +1,58 @@ +/datum/ailment/disease/liver_failure + name = "Liver Failure" + scantype = "Medical Emergency" + max_stages = 3 + spread = "The patient's liver is starting to fail" + cure = "Cardiac Stimulants" + reagentcure = list("atropine") + recureprob = 10 + affected_species = list("Human") + stage_prob = 1 + var/robo_restart = 0 + +/datum/ailment/disease/liver_failure/stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D) + if (..()) + return + + if (ishuman(affected_mob)) + var/mob/living/carbon/human/H = affected_mob + + if (!H.organHolder) + H.cure_disease(D) + return + + var/datum/organHolder/oH = H.organHolder + if (!oH.liver) + H.cure_disease(D) + return + + //handle roboliver failuer. should do some stuff I guess + // else if (oH.liver && oH.liver.robotic && !oH.heart.health > 0) + + switch (D.stage) + if (1) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.cure_disease(D) + return + if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(5)) + boutput(affected_mob, "Your abdomen area hurts!") + if (2) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.resistances += src.type + affected_mob.ailments -= src + return + if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(5)) + boutput(affected_mob, "Your back aches terribly!") + if (prob(3)) + boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") + // oH.takeliver + + if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (3) + affected_mob.take_oxygen_deprivation(1) + affected_mob.updatehealth() + if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) diff --git a/code/datums/diseases/organ_diseases/liver_removal.dm b/code/datums/diseases/organ_diseases/liver_removal.dm new file mode 100644 index 00000000..3d707f2b --- /dev/null +++ b/code/datums/diseases/organ_diseases/liver_removal.dm @@ -0,0 +1,22 @@ +/datum/ailment/disease/noliver + name = "Liver Abscondment" + scantype = "Medical Emergency" + max_stages = 1 + spread = "The patient's Liver is missing." + cure = "Liver Transplant" + affected_species = list("Human","Monkey") + +/datum/ailment/disease/noliver/stage_act(var/mob/living/carbon/human/H,var/datum/ailment/D) + if (..()) + return + if (!H.organHolder) + H.cure_disease(D) + return + if (!H.organHolder.liver) + H.cure_disease(D) + return + else + H.take_toxin_damage(4) + + H.weakened = max(H.weakened, 5) + H.updatehealth() \ No newline at end of file diff --git a/code/datums/diseases/organ_diseases/lungs_removal.dm b/code/datums/diseases/organ_diseases/lungs_removal.dm new file mode 100644 index 00000000..3c44bc06 --- /dev/null +++ b/code/datums/diseases/organ_diseases/lungs_removal.dm @@ -0,0 +1,67 @@ +/datum/ailment/disease/nolungs + name = "Lungs Abscondment" + scantype = "Medical Emergency" + max_stages = 1 + spread = "Both of the patient's lungs are missing." + cure = "Lung Transplant" + affected_species = list("Human","Monkey") + +/datum/ailment/disease/nolungs/stage_act(var/mob/living/carbon/human/H,var/datum/ailment/D) + if (..()) + return + if (!H.organHolder) + H.cure_disease(D) + return + if (!H.organHolder.left_lung && !H.organHolder.right_lung) + H.cure_disease(D) + return + else + H.take_toxin_damage(4) + + H.weakened = max(H.weakened, 5) + H.updatehealth() + H.add_stam_mod_regen("lung_removal", 9) + H.add_stam_mod_max("lung_removal", 150) + + + on_remove(var/mob/living/affected_mob,var/datum/ailment_data/D) + ..() + H.remove_stam_mod_regen("lung_removal") + H.remove_stam_mod_max("lung_removal") + + return + +//missing one lung +/datum/ailment/disease/single_lung + name = "Missing Lung" + scantype = "Medical Emergency" + max_stages = 1 + spread = "One of the patient's lungs are missing." + cure = "Lung Transplant" + affected_species = list("Human","Monkey") + + on_remove(var/mob/living/affected_mob,var/datum/ailment_data/D) + ..() + H.remove_stam_mod_regen("lung_removal") + H.remove_stam_mod_max("lung_removal") + + return +/datum/ailment/disease/single_lung/stage_act(var/mob/living/carbon/human/H,var/datum/ailment/D) + if (..()) + return + if (!H.organHolder) + H.cure_disease(D) + return + if ((H.organHolder.left_lung && !H.organHolder.right_lung) || (!H.organHolder.left_lung && H.organHolder.right_lung) ) + H.cure_disease(D) + return + else + H.take_toxin_damage(4) + + H.add_stam_mod_regen("lung_removal", 5) + H.add_stam_mod_max("lung_removal", 80) + + H.weakened = max(H.weakened, 5) + H.updatehealth() + + From 1431b1424f8ebc737c02541081d1910ead2a7b10 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 30 Jul 2018 03:34:55 -0400 Subject: [PATCH 035/105] add base for various organ failure diseases, lotta copy and pasting, but they should turn out pretty different when someone knows what symptoms they should actually show. Also removed old removal diseases we don't want. and removed prob_damage_organs proc and added damage to lungs from heat --- .../diseases/organ_diseases/appendicitis.dm | 63 +++++++++++++++++ .../diseases/organ_diseases/kidney_failure.dm | 64 ++++++++++++++++++ .../organ_diseases/kidneys_removal.dm | 22 ------ .../diseases/organ_diseases/liver_failure.dm | 11 +-- .../diseases/organ_diseases/liver_removal.dm | 22 ------ .../diseases/organ_diseases/lungs_removal.dm | 67 ------------------- .../diseases/organ_diseases/pancreatitis.dm | 61 +++++++++++++++++ .../organ_diseases/respiratory_failure.dm | 64 ++++++++++++++++++ code/mob/living/carbon/human.dm | 11 ++- 9 files changed, 264 insertions(+), 121 deletions(-) create mode 100644 code/datums/diseases/organ_diseases/appendicitis.dm create mode 100644 code/datums/diseases/organ_diseases/kidney_failure.dm delete mode 100644 code/datums/diseases/organ_diseases/kidneys_removal.dm delete mode 100644 code/datums/diseases/organ_diseases/liver_removal.dm delete mode 100644 code/datums/diseases/organ_diseases/lungs_removal.dm create mode 100644 code/datums/diseases/organ_diseases/pancreatitis.dm create mode 100644 code/datums/diseases/organ_diseases/respiratory_failure.dm diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm new file mode 100644 index 00000000..55637bf4 --- /dev/null +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -0,0 +1,63 @@ +/datum/ailment/disease/appendicitis + name = "Appendicitis" + scantype = "Medical Emergency" + max_stages = 3 + spread = "The patient's appendicitis is dangerously enlarged" + cure = "Organ Drugs Class 3" + reagentcure = list("organ_drug3") + recureprob = 10 + affected_species = list("Human") + stage_prob = 1 + var/robo_restart = 0 + +/datum/ailment/disease/appendicitis/stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D) + if (..()) + return + + if (ishuman(affected_mob)) + var/mob/living/carbon/human/H = affected_mob + + if (!H.organHolder) + H.cure_disease(D) + return + + var/datum/organHolder/oH = H.organHolder + if (!oH.appendix) + H.cure_disease(D) + return + + //handle robopancreas failuer. should do some stuff I guess + // else if (oH.pancreas && oH.pancreas.robotic && !oH.heart.health > 0) + + switch (D.stage) + if (1) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.cure_disease(D) + return + if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(5)) + boutput(affected_mob, "Your abdomen area hurts!") + if (2) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.resistances += src.type + affected_mob.ailments -= src + return + if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(5)) + boutput(affected_mob, "Your back aches terribly!") + if (prob(3)) + boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") + // oH.takepancreas + + if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (3) + if (prob(20)) affected_mob.emote(pick("twitch", "groan")) + if (ishuman(affected_mob)) + var/mob/living/carbon/human/H = affected_mob + H.take_organ_damage(3, "pancreas") + + + affected_mob.take_tox_damage(1) + affected_mob.updatehealth() diff --git a/code/datums/diseases/organ_diseases/kidney_failure.dm b/code/datums/diseases/organ_diseases/kidney_failure.dm new file mode 100644 index 00000000..fbdd807e --- /dev/null +++ b/code/datums/diseases/organ_diseases/kidney_failure.dm @@ -0,0 +1,64 @@ +//unfinished +/datum/ailment/disease/kidney_failure + name = "Kidney Failure" + scantype = "Medical Emergency" + max_stages = 3 + spread = "The patient's kidneys are starting to fail" + cure = "Organ Drug Class 2" + reagentcure = list("organ_drug2") + recureprob = 10 + affected_species = list("Human") + stage_prob = 1 + var/robo_restart = 0 + +/datum/ailment/disease/kidney_failure/stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D) + if (..()) + return + + if (ishuman(affected_mob)) + var/mob/living/carbon/human/H = affected_mob + + if (!H.organHolder) + H.cure_disease(D) + return + + var/datum/organHolder/oH = H.organHolder + if (!oH.kidney) + H.cure_disease(D) + return + + //handle robokidney failuer. should do some stuff I guess + // else if (oH.kidney && oH.kidney.robotic && !oH.heart.health > 0) + + switch (D.stage) + if (1) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.cure_disease(D) + return + if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(5)) + boutput(affected_mob, "Your abdomen area hurts!") + if (2) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.resistances += src.type + affected_mob.ailments -= src + return + if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(5)) + boutput(affected_mob, "Your back aches terribly!") + if (prob(3)) + boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") + // oH.takekidney + + if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (3) + if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) + + if (prob(20)) affected_mob.emote(pick("twitch", "gasp")) + H.damage_organs(3, 20, list("left_kidney", "right_kidney")) + H.losebreath++ + + affected_mob.take_oxygen_deprivation(1) + affected_mob.updatehealth() diff --git a/code/datums/diseases/organ_diseases/kidneys_removal.dm b/code/datums/diseases/organ_diseases/kidneys_removal.dm deleted file mode 100644 index 7b384be5..00000000 --- a/code/datums/diseases/organ_diseases/kidneys_removal.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/ailment/disease/nokidneys - name = "Kidney Abscondment" - scantype = "Medical Emergency" - max_stages = 1 - spread = "Both of the patient's kidneys are missing." - cure = "Kidney Transplant" - affected_species = list("Human","Monkey") - -/datum/ailment/disease/nokidneys/stage_act(var/mob/living/carbon/human/H,var/datum/ailment/D) - if (..()) - return - if (!H.organHolder) - H.cure_disease(D) - return - if (!H.organHolder.left_kidney && !H.organHolder.right_kidney) - H.cure_disease(D) - return - else - H.take_toxin_damage(4) - - H.weakened = max(H.weakened, 5) - H.updatehealth() \ No newline at end of file diff --git a/code/datums/diseases/organ_diseases/liver_failure.dm b/code/datums/diseases/organ_diseases/liver_failure.dm index 550ab543..73afe914 100644 --- a/code/datums/diseases/organ_diseases/liver_failure.dm +++ b/code/datums/diseases/organ_diseases/liver_failure.dm @@ -3,8 +3,8 @@ scantype = "Medical Emergency" max_stages = 3 spread = "The patient's liver is starting to fail" - cure = "Cardiac Stimulants" - reagentcure = list("atropine") + cure = "Organ Drugs Class 2" + reagentcure = list("organ_drug2") recureprob = 10 affected_species = list("Human") stage_prob = 1 @@ -53,6 +53,9 @@ if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) - affected_mob.take_oxygen_deprivation(1) + if (prob(20)) affected_mob.emote(pick("twitch", "groan")) + if (ishuman(affected_mob)) + var/mob/living/carbon/human/H = affected_mob + H.take_organ_damage(3, "liver") + affected_mob.take_tox_damage(1) affected_mob.updatehealth() - if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) diff --git a/code/datums/diseases/organ_diseases/liver_removal.dm b/code/datums/diseases/organ_diseases/liver_removal.dm deleted file mode 100644 index 3d707f2b..00000000 --- a/code/datums/diseases/organ_diseases/liver_removal.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/ailment/disease/noliver - name = "Liver Abscondment" - scantype = "Medical Emergency" - max_stages = 1 - spread = "The patient's Liver is missing." - cure = "Liver Transplant" - affected_species = list("Human","Monkey") - -/datum/ailment/disease/noliver/stage_act(var/mob/living/carbon/human/H,var/datum/ailment/D) - if (..()) - return - if (!H.organHolder) - H.cure_disease(D) - return - if (!H.organHolder.liver) - H.cure_disease(D) - return - else - H.take_toxin_damage(4) - - H.weakened = max(H.weakened, 5) - H.updatehealth() \ No newline at end of file diff --git a/code/datums/diseases/organ_diseases/lungs_removal.dm b/code/datums/diseases/organ_diseases/lungs_removal.dm deleted file mode 100644 index 3c44bc06..00000000 --- a/code/datums/diseases/organ_diseases/lungs_removal.dm +++ /dev/null @@ -1,67 +0,0 @@ -/datum/ailment/disease/nolungs - name = "Lungs Abscondment" - scantype = "Medical Emergency" - max_stages = 1 - spread = "Both of the patient's lungs are missing." - cure = "Lung Transplant" - affected_species = list("Human","Monkey") - -/datum/ailment/disease/nolungs/stage_act(var/mob/living/carbon/human/H,var/datum/ailment/D) - if (..()) - return - if (!H.organHolder) - H.cure_disease(D) - return - if (!H.organHolder.left_lung && !H.organHolder.right_lung) - H.cure_disease(D) - return - else - H.take_toxin_damage(4) - - H.weakened = max(H.weakened, 5) - H.updatehealth() - H.add_stam_mod_regen("lung_removal", 9) - H.add_stam_mod_max("lung_removal", 150) - - - on_remove(var/mob/living/affected_mob,var/datum/ailment_data/D) - ..() - H.remove_stam_mod_regen("lung_removal") - H.remove_stam_mod_max("lung_removal") - - return - -//missing one lung -/datum/ailment/disease/single_lung - name = "Missing Lung" - scantype = "Medical Emergency" - max_stages = 1 - spread = "One of the patient's lungs are missing." - cure = "Lung Transplant" - affected_species = list("Human","Monkey") - - on_remove(var/mob/living/affected_mob,var/datum/ailment_data/D) - ..() - H.remove_stam_mod_regen("lung_removal") - H.remove_stam_mod_max("lung_removal") - - return -/datum/ailment/disease/single_lung/stage_act(var/mob/living/carbon/human/H,var/datum/ailment/D) - if (..()) - return - if (!H.organHolder) - H.cure_disease(D) - return - if ((H.organHolder.left_lung && !H.organHolder.right_lung) || (!H.organHolder.left_lung && H.organHolder.right_lung) ) - H.cure_disease(D) - return - else - H.take_toxin_damage(4) - - H.add_stam_mod_regen("lung_removal", 5) - H.add_stam_mod_max("lung_removal", 80) - - H.weakened = max(H.weakened, 5) - H.updatehealth() - - diff --git a/code/datums/diseases/organ_diseases/pancreatitis.dm b/code/datums/diseases/organ_diseases/pancreatitis.dm new file mode 100644 index 00000000..b99ba1f2 --- /dev/null +++ b/code/datums/diseases/organ_diseases/pancreatitis.dm @@ -0,0 +1,61 @@ +/datum/ailment/disease/pancreatitis + name = "Pancreatitis" + scantype = "Medical Emergency" + max_stages = 3 + spread = "The patient's pancreas is dangerously enlarged" + cure = "Organ Drugs Class 3" + reagentcure = list("organ_drug3") + recureprob = 10 + affected_species = list("Human") + stage_prob = 1 + var/robo_restart = 0 + +/datum/ailment/disease/pancreatitis/stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D) + if (..()) + return + + if (ishuman(affected_mob)) + var/mob/living/carbon/human/H = affected_mob + + if (!H.organHolder) + H.cure_disease(D) + return + + var/datum/organHolder/oH = H.organHolder + if (!oH.pancreas) + H.cure_disease(D) + return + + //handle robopancreas failuer. should do some stuff I guess + // else if (oH.pancreas && oH.pancreas.robotic && !oH.heart.health > 0) + + switch (D.stage) + if (1) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.cure_disease(D) + return + if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(5)) + boutput(affected_mob, "Your abdomen area hurts!") + if (2) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.resistances += src.type + affected_mob.ailments -= src + return + if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(5)) + boutput(affected_mob, "Your back aches terribly!") + if (prob(3)) + boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") + // oH.takepancreas + + if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (3) + if (prob(20)) affected_mob.emote(pick("twitch", "groan")) + if (ishuman(affected_mob)) + var/mob/living/carbon/human/H = affected_mob + H.take_organ_damage(3, "pancreas") + affected_mob.take_tox_damage(1) + affected_mob.updatehealth() diff --git a/code/datums/diseases/organ_diseases/respiratory_failure.dm b/code/datums/diseases/organ_diseases/respiratory_failure.dm new file mode 100644 index 00000000..fedcc5d4 --- /dev/null +++ b/code/datums/diseases/organ_diseases/respiratory_failure.dm @@ -0,0 +1,64 @@ +//unfinished +/datum/ailment/disease/respiratory_failure + name = "Respiratory Failure" + scantype = "Medical Emergency" + max_stages = 3 + spread = "The patient's respiratory is starting to fail" + cure = "Organ Drug Class 1" + reagentcure = list("organ_drug1") + recureprob = 10 + affected_species = list("Human") + stage_prob = 1 + var/robo_restart = 0 + +/datum/ailment/disease/respiratory_failure/stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D) + if (..()) + return + + if (ishuman(affected_mob)) + var/mob/living/carbon/human/H = affected_mob + + if (!H.organHolder) + H.cure_disease(D) + return + + var/datum/organHolder/oH = H.organHolder + if (!oH.respiratory) + H.cure_disease(D) + return + + //handle roborespiratory failuer. should do some stuff I guess + // else if (oH.respiratory && oH.respiratory.robotic && !oH.heart.health > 0) + + switch (D.stage) + if (1) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.cure_disease(D) + return + if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(5)) + boutput(affected_mob, "Your abdomen area hurts!") + if (2) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.resistances += src.type + affected_mob.ailments -= src + return + if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(5)) + boutput(affected_mob, "Your back aches terribly!") + if (prob(3)) + boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") + // oH.takerespiratory + + if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (3) + if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) + + if (prob(20)) affected_mob.emote(pick("twitch", "gasp")) + H.damage_organs(3, 20, list("left_lung", "right_lung")) + H.losebreath++ + + affected_mob.take_oxygen_deprivation(1) + affected_mob.updatehealth() diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 1eaf5696..90b208a1 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4034,9 +4034,11 @@ if (breath.temperature > (T0C+66) && !src.is_heat_resistant()) // Hot air hurts :( if (prob(20)) boutput(src, "You feel a searing heat in your lungs!") - TakeDamage("chest", 0, min((breath.temperature - (T0C+66)) / 3,10) + 6, 0, DAMAGE_BURN) + var/burn_damage = min((breath.temperature - (T0C+66)) / 3,10) + 6 + TakeDamage("chest", 0, burn_damage, 0, DAMAGE_BURN) hud.update_fire_indicator(1) if (prob(4)) + H.damage_organs(max(burn_damage, 3), 10, list("left_lung", "right_lung")) boutput(src, "Your lungs hurt like hell! This can't be good!") //src.contract_disease(new/datum/ailment/disability/cough, 1, 0) // cogwerks ailment project - lung damage from fire else @@ -6528,12 +6530,9 @@ //organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" /mob/living/carbon/human/proc/damage_organs(var/amount, var/probability, var/list/organs) for (var/organ in organs) - prob_damage_organ(amount, probability, organ) + if (prob(probability)) + prob_damage_organ(amount, probability, organ) -//helper method for damage_organs, but does have some use on its own -/mob/living/carbon/human/proc/prob_damage_organ(var/amount, var/probability, var/organ) - if (prob(probability)) - take_organ_damage(amount, organ) //damage organs specifically choose value for var/organ from strings in organ_list var in obj/item/organ in orgam.dm --kyle //only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. From 8820381cf056524c50ccf14310c8625ad1be818f Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Tue, 31 Jul 2018 23:38:42 -0400 Subject: [PATCH 036/105] fix error with disease things. and start moving organ damage to organ.dm, exists in both places now, gotta change calls. --- .../diseases/organ_diseases/appendicitis.dm | 6 +- .../diseases/organ_diseases/kidney_failure.dm | 3 +- .../diseases/organ_diseases/liver_failure.dm | 3 +- .../organ_diseases/respiratory_failure.dm | 3 +- code/obj/item/organ.dm | 26 +++++++++ code/procs/scanprocs.dm | 58 ++++++++++++++----- 6 files changed, 79 insertions(+), 20 deletions(-) diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm index 55637bf4..9f9d08ed 100644 --- a/code/datums/diseases/organ_diseases/appendicitis.dm +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -53,11 +53,13 @@ if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) - if (prob(20)) affected_mob.emote(pick("twitch", "groan")) + if (prob(20)) + affected_mob.emote(pick("twitch", "groan")) if (ishuman(affected_mob)) var/mob/living/carbon/human/H = affected_mob H.take_organ_damage(3, "pancreas") - + //destroy human's appendix, and add a load of toxic chemicals or bacteria to the person. + affected_mob.take_tox_damage(1) affected_mob.updatehealth() diff --git a/code/datums/diseases/organ_diseases/kidney_failure.dm b/code/datums/diseases/organ_diseases/kidney_failure.dm index fbdd807e..98325ecc 100644 --- a/code/datums/diseases/organ_diseases/kidney_failure.dm +++ b/code/datums/diseases/organ_diseases/kidney_failure.dm @@ -56,7 +56,8 @@ if (3) if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) - if (prob(20)) affected_mob.emote(pick("twitch", "gasp")) + if (prob(20)) + affected_mob.emote(pick("twitch", "gasp")) H.damage_organs(3, 20, list("left_kidney", "right_kidney")) H.losebreath++ diff --git a/code/datums/diseases/organ_diseases/liver_failure.dm b/code/datums/diseases/organ_diseases/liver_failure.dm index 73afe914..6dd24e52 100644 --- a/code/datums/diseases/organ_diseases/liver_failure.dm +++ b/code/datums/diseases/organ_diseases/liver_failure.dm @@ -53,7 +53,8 @@ if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) - if (prob(20)) affected_mob.emote(pick("twitch", "groan")) + if (prob(20)) + affected_mob.emote(pick("twitch", "groan")) if (ishuman(affected_mob)) var/mob/living/carbon/human/H = affected_mob H.take_organ_damage(3, "liver") diff --git a/code/datums/diseases/organ_diseases/respiratory_failure.dm b/code/datums/diseases/organ_diseases/respiratory_failure.dm index fedcc5d4..89e8718f 100644 --- a/code/datums/diseases/organ_diseases/respiratory_failure.dm +++ b/code/datums/diseases/organ_diseases/respiratory_failure.dm @@ -56,7 +56,8 @@ if (3) if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) - if (prob(20)) affected_mob.emote(pick("twitch", "gasp")) + if (prob(20)) + affected_mob.emote(pick("twitch", "gasp")) H.damage_organs(3, 20, list("left_lung", "right_lung")) H.losebreath++ diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 4807c149..7a968e8d 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -798,6 +798,32 @@ donor.remove_stam_mod_regen("double_lung_removal") donor.remove_stam_mod_max("double_lung_removal") lungs_changed = 2 +//made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using + +//amount, damge to be done to organs +//probability, num 0-100 for whether or not to damage an organ found +//organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" + proc/damage_organs(var/amount, var/probability, var/list/organs) + for (var/organ in organs) + if (prob(probability)) + prob_damage_organ(amount, probability, organ) + + +//damage organs specifically choose value for var/organ from strings in organ_list var in obj/item/organ in orgam.dm --kyle +//only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. +//return 1 on success, 0 on failure + proc/take_organ_damage(var/amount, var/organ) + if (src && src.organ_list) + if (src.organ_list[organ]) + + var/obj/item/organ/O = src.organ_list[organ] + if (istype(O,/obj/item/organ)) + O.health = min(100, O.health - amount) //this health damage counts down from 100, crazy right? + src.visible_message("[src] damaged [organ] by [amount]!") + + return 1 + + return 0 /mob/living/carbon/human/proc/eye_istype(var/obj/item/I) if (!src.organHolder || !I) diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index cf9cadcb..f6ae2b5b 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -132,22 +132,38 @@ if (verbose_reagent_info && !isvampire(H)) - var/organ_data1 = "" - var/found = 0 + var/organ_data1 = null - for (var/O in H.organHolder.organ_list) - var/obj/item/organ/organ = H.organHolder.organ_list[O] - if (organ == null) - continue - - if (istype(organ, /obj/item/organ/head) || istype(organ, /obj/item/organ/brain) || istype(organ, /obj/item/organ/chest) || istype(organ, /obj/item/skull) || istype(organ, /obj/item/clothing/head/butt)) - continue - if (organ.health < 100) - if (!found) - found = 1 - organ_data1 += "
[organ.name] has [organ.health] / 100" - if (found) - organ_data = "Scans indicate organ damage in:" + //This doesn't detect missing organs. removing for now, might be useful to have though not sure if we even want to detect missing organs... + // for (var/O in H.organHolder.organ_list) + // var/obj/item/organ/organ = H.organHolder.organ_list[O] + // if (organ == null) + // continue + + // if (istype(organ, /obj/item/organ/head) || istype(organ, /obj/item/organ/brain) || istype(organ, /obj/item/organ/chest) || istype(organ, /obj/item/skull) || istype(organ, /obj/item/clothing/head/butt)) + // continue + // if (organ.health < 100) + // if (!found) + // found = 1 + // organ_data1 += "
[organ.name] has [organ.health] / 100" + + organ_data1 += organ_health_scan("left_eye", H) + organ_data1 += organ_health_scan("left_eye", H) + organ_data1 += organ_health_scan("right_eye", H) + organ_data1 += organ_health_scan("left_lung", H) + organ_data1 += organ_health_scan("right_lung", H) + + organ_data1 += organ_health_scan("left_kidney", H) + organ_data1 += organ_health_scan("right_kidney", H) + organ_data1 += organ_health_scan("liver", H) + organ_data1 += organ_health_scan("stomach", H) + organ_data1 += organ_health_scan("intestines", H) + organ_data1 += organ_health_scan("spleen", H) + organ_data1 += organ_health_scan("pancreas", H) + organ_data1 += organ_health_scan("appendix", H) + + if (organ_data1) + organ_data = "Scans Indicate Organ Damage:" organ_data += organ_data1 else @@ -199,6 +215,18 @@ return data +//takes string input, for name in organholder.organ_list and checks if the organholder has anything +/proc/organ_health_scan(var/input, var/mob/living/carbon/human/H) + var/obj/item/organ/O = H.organHolder.organ_list[input] + if (O && istype(O, /obj/item/organ)) + if (O.health >= 100) + return null + else + return "
[input] HEALTH = [O.health]/100" + else + return "
The patient's [input] is missing!" + + /proc/update_medical_record(var/mob/living/carbon/human/M) if (!M || !ishuman(M)) return From a45071268348ad2bebd0922460666cf7ea2fb0cf Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 1 Aug 2018 04:07:44 -0400 Subject: [PATCH 037/105] add declarations for basic cyber organs, no function added yet. also moved the damage procs --- code/obj/item/organ.dm | 126 ++++++++++++++++++++++++++++++++--------- 1 file changed, 100 insertions(+), 26 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 7a968e8d..7fe3e465 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -27,6 +27,34 @@ var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt", "left_kidney", "right_kidney", "liver", "stomach", "intestines", "spleen", "pancreas", "appendix") + +//made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using + +//amount, damge to be done to organs +//probability, num 0-100 for whether or not to damage an organ found +//organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" + proc/damage_organs(var/amount, var/probability, var/list/organs) + for (var/organ in organs) + if (prob(probability)) + prob_damage_organ(amount, probability, organ) + + +//damage organs specifically choose value for var/organ from strings in organ_list var in obj/item/organ in orgam.dm --kyle +//only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. +//return 1 on success, 0 on failure + proc/take_organ_damage(var/amount, var/organ) + if (src && src.organ_list) + if (src.organ_list[organ]) + + var/obj/item/organ/O = src.organ_list[organ] + if (istype(O,/obj/item/organ)) + O.health = min(100, O.health - amount) //this health damage counts down from 100, crazy right? + src.visible_message("[src] damaged [organ] by [amount]!") + + return 1 + + return 0 + //organs should not perform their functions if they have 0 health proc/get_working_kidney_amt() var/count = 0 @@ -798,32 +826,6 @@ donor.remove_stam_mod_regen("double_lung_removal") donor.remove_stam_mod_max("double_lung_removal") lungs_changed = 2 -//made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using - -//amount, damge to be done to organs -//probability, num 0-100 for whether or not to damage an organ found -//organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" - proc/damage_organs(var/amount, var/probability, var/list/organs) - for (var/organ in organs) - if (prob(probability)) - prob_damage_organ(amount, probability, organ) - - -//damage organs specifically choose value for var/organ from strings in organ_list var in obj/item/organ in orgam.dm --kyle -//only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. -//return 1 on success, 0 on failure - proc/take_organ_damage(var/amount, var/organ) - if (src && src.organ_list) - if (src.organ_list[organ]) - - var/obj/item/organ/O = src.organ_list[organ] - if (istype(O,/obj/item/organ)) - O.health = min(100, O.health - amount) //this health damage counts down from 100, crazy right? - src.visible_message("[src] damaged [organ] by [amount]!") - - return 1 - - return 0 /mob/living/carbon/human/proc/eye_istype(var/obj/item/I) if (!src.organHolder || !I) @@ -1169,6 +1171,15 @@ icon_state = "lung_R" body_side = R_ORGAN +/obj/item/organ/lung/cyber + name = "cyberlung" + desc = "A fancy electronic eye to replace one that someone's lost. Kinda fragile, but better than nothing!" + icon_state = "lung-cyber" + item_state = "heart_robo1" + robotic = 1 + edible = 0 + mats = 6 + /*========================*/ /*----------Eyes----------*/ /*========================*/ @@ -2070,6 +2081,15 @@ // ..(M) // return +/obj/item/organ/liver/cyber + name = "cyberliver" + desc = "A fancy robotic liver to replace one that someone's lost!" + icon_state = "liver-cyber" + item_state = "heart_robo1" + robotic = 1 + edible = 0 + mats = 6 + /obj/item/organ/kidney name = "kidneys" organ_name = "kidney_t" @@ -2133,6 +2153,15 @@ icon_state = "kidney_R" body_side = R_ORGAN +/obj/item/organ/kidney/cyber + name = "cyberkidney" + desc = "A fancy robotic kidney to replace one that someone's lost!" + icon_state = "kidney-cyber" + item_state = "heart_robo1" + robotic = 1 + edible = 0 + mats = 6 + /obj/item/organ/stomach name = "stomach" organ_name = "stomach" @@ -2170,6 +2199,15 @@ ..() return +/obj/item/organ/stomach/cyber + name = "cyberstomach" + desc = "A fancy robotic stomach to replace one that someone's lost!" + icon_state = "stomach-cyber" + item_state = "heart_robo1" + robotic = 1 + edible = 0 + mats = 6 + /obj/item/organ/intestines name = "intestines" organ_name = "intestines" @@ -2207,6 +2245,15 @@ ..() return +/obj/item/organ/intestines/cyber + name = "cyberintestines" + desc = "A fancy robotic intestines to replace one that someone's lost!" + icon_state = "intestines-cyber" + item_state = "heart_robo1" + robotic = 1 + edible = 0 + mats = 6 + /obj/item/organ/spleen name = "spleen" organ_name = "spleen" @@ -2243,6 +2290,15 @@ ..() return +/obj/item/organ/spleen/cyber + name = "cyberspleen" + desc = "A fancy robotic spleen to replace one that someone's lost!" + icon_state = "spleen-cyber" + item_state = "heart_robo1" + robotic = 1 + edible = 0 + mats = 6 + /obj/item/organ/pancreas name = "pancreas" organ_name = "pancreas" @@ -2279,6 +2335,15 @@ ..() return +/obj/item/organ/pancreas/cyber + name = "cyberpancreas" + desc = "A fancy robotic pancreas to replace one that someone's lost!" + icon_state = "pancreas-cyber" + item_state = "heart_robo1" + robotic = 1 + edible = 0 + mats = 6 + /obj/item/organ/appendix name = "appendix" organ_name = "appendix" @@ -2315,5 +2380,14 @@ ..() return +/obj/item/organ/appendix/cyber + name = "cyberappendix" + desc = "A fancy robotic appendix to replace one that someone's lost!" + icon_state = "appendix-cyber" + item_state = "heart_robo1" + robotic = 1 + edible = 0 + mats = 6 + #undef L_ORGAN #undef R_ORGAN \ No newline at end of file From 82b56ec4b8bc9dae81cb7122a2c993189b4119b5 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 1 Aug 2018 04:30:39 -0400 Subject: [PATCH 038/105] Finally moved proc/take_organ_damage to organHolder.dm --- code/datums/chemistry/Reagents-Medical.dm | 32 +++++++++---- .../diseases/organ_diseases/appendicitis.dm | 2 +- .../diseases/organ_diseases/liver_failure.dm | 2 +- .../diseases/organ_diseases/pancreatitis.dm | 2 +- code/mob/living/carbon/human.dm | 47 +++++-------------- code/obj/item/cigarette.dm | 4 +- code/obj/item/organ.dm | 3 ++ 7 files changed, 42 insertions(+), 50 deletions(-) diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index 329853e2..e4d7a046 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -1199,15 +1199,19 @@ datum if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M + var/datum/organholder/OH = H.organHolder + if (!istype(OH)) + ..(M) + return - if (H.organHolder.spleen && H.organHolder.spleen.health >= 10 && H.organHolder.spleen.health < 100) + if (OH.spleen && OH.spleen.health >= 10 && OH.spleen.health < 100) H.take_organ_damage(-2, "spleen") - if (H.organHolder.left_lung && H.organHolder.left_lung.health >= 10 && H.organHolder.left_lung.health < 100) + if (OH.left_lung && OH.left_lung.health >= 10 && OH.left_lung.health < 100) H.take_organ_damage(-2, "left_lung") - if (H.organHolder.right_lung && H.organHolder.right_lung.health >= 10 && H.organHolder.right_lung.health < 100) + if (OH.right_lung && OH.right_lung.health >= 10 && OH.right_lung.health < 100) H.take_organ_damage(-2, "right_lung") M.updatehealth() ..(M) @@ -1229,20 +1233,24 @@ datum if(!M) M = holder.my_atom if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M + var/datum/organholder/OH = H.organHolder + if (!istype(OH)) + ..(M) + return - if (H.organHolder.liver && H.organHolder.liver.health >= 10 && H.organHolder.liver.health < 100) + if (OH.liver && OH.liver.health >= 10 && OH.liver.health < 100) H.take_organ_damage(-2, "liver") - if (H.organHolder.left_kidney && H.organHolder.left_kidney.health >= 10 && H.organHolder.left_kidney.health < 100) + if (OH.left_kidney && OH.left_kidney.health >= 10 && OH.left_kidney.health < 100) H.take_organ_damage(-2, "left_kidney") - if (H.organHolder.stomach && H.organHolder.stomach.health >= 10 && H.organHolder.stomach.health < 100) + if (OH.stomach && OH.stomach.health >= 10 && OH.stomach.health < 100) H.take_organ_damage(-2, "stomach") - if (H.organHolder.stomach && H.organHolder.stomach.health >= 10 && H.organHolder.stomach.health < 100) + if (OH.stomach && OH.stomach.health >= 10 && OH.stomach.health < 100) H.take_organ_damage(-2, "stomach") - if (H.organHolder.intestines && H.organHolder.intestines.health >= 10 && H.organHolder.intestines.health < 100) + if (OH.intestines && OH.intestines.health >= 10 && OH.intestines.health < 100) H.take_organ_damage(-2, "intestines") M.updatehealth() @@ -1266,11 +1274,15 @@ datum if(!M) M = holder.my_atom if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M + var/datum/organholder/OH = H.organHolder + if (!istype(OH)) + ..(M) + return - if (H.organHolder.appendix && H.organHolder.appendix.health >= 10 && H.organHolder.appendix.health < 100) + if (OH.appendix && OH.appendix.health >= 10 && OH.appendix.health < 100) H.take_organ_damage(-2, "appendix") - if (H.organHolder.pancreas && H.organHolder.pancreas.health >= 10 && H.organHolder.pancreas.health < 100) + if (OH.pancreas && OH.pancreas.health >= 10 && OH.pancreas.health < 100) H.take_organ_damage(-2, "pancreas") M.updatehealth() ..(M) diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm index 9f9d08ed..f76acd2a 100644 --- a/code/datums/diseases/organ_diseases/appendicitis.dm +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -57,7 +57,7 @@ affected_mob.emote(pick("twitch", "groan")) if (ishuman(affected_mob)) var/mob/living/carbon/human/H = affected_mob - H.take_organ_damage(3, "pancreas") + H.organHolder.take_organ_damage(3, "pancreas") //destroy human's appendix, and add a load of toxic chemicals or bacteria to the person. diff --git a/code/datums/diseases/organ_diseases/liver_failure.dm b/code/datums/diseases/organ_diseases/liver_failure.dm index 6dd24e52..0da0b9bd 100644 --- a/code/datums/diseases/organ_diseases/liver_failure.dm +++ b/code/datums/diseases/organ_diseases/liver_failure.dm @@ -57,6 +57,6 @@ affected_mob.emote(pick("twitch", "groan")) if (ishuman(affected_mob)) var/mob/living/carbon/human/H = affected_mob - H.take_organ_damage(3, "liver") + H.organHolder.take_organ_damage(3, "liver") affected_mob.take_tox_damage(1) affected_mob.updatehealth() diff --git a/code/datums/diseases/organ_diseases/pancreatitis.dm b/code/datums/diseases/organ_diseases/pancreatitis.dm index b99ba1f2..af4a4fbd 100644 --- a/code/datums/diseases/organ_diseases/pancreatitis.dm +++ b/code/datums/diseases/organ_diseases/pancreatitis.dm @@ -56,6 +56,6 @@ if (prob(20)) affected_mob.emote(pick("twitch", "groan")) if (ishuman(affected_mob)) var/mob/living/carbon/human/H = affected_mob - H.take_organ_damage(3, "pancreas") + H.organHolder.take_organ_damage(3, "pancreas") affected_mob.take_tox_damage(1) affected_mob.updatehealth() diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 90b208a1..3a22994d 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4486,10 +4486,14 @@ // pancreas if there's no pancreas, user does not generate insulin if they have sugar in their body. if (!src.nodamage) - if (!src.organHolder.pancreas || src.organHolder.pancreas.health <= 0) - if (src.reagents) - if (src.reagents && src.reagents.has_reagent("sugar", 30) ) - src.reagents.add_reagent("insulin", 2) + if (src.organHolder.pancreas && src.organHolder.pancreas.health <= 0) + if (src.reagents && src.reagents.has_reagent("sugar", 80)) + pick ( + prob(25) + src.organHolder.take_organ_damage(2, "spleen") + prob(50) + src.reagents.add_reagent("insulin", 2) + ) // spleen if there's no spleen don't let the user regen blood naturally // if (!src.organHolder.spleen || (src.organHolder.liver.health > 10)) @@ -6515,37 +6519,10 @@ if (!ignore) if (amount > 1) if (prob(30)) - src.take_organ_damage(amount/20, "left_kidney") + src.organHolder.take_organ_damage(amount/20, "left_kidney") if (prob(30)) - src.take_organ_damage(amount/20, "right_kidney") + src.organHolder.take_organ_damage(amount/20, "right_kidney") if (prob(30)) - src.take_organ_damage(amount/40, "left_lung") + src.organHolder.take_organ_damage(amount/40, "left_lung") - return - -//made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using - -//amount, damge to be done to organs -//probability, num 0-100 for whether or not to damage an organ found -//organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" -/mob/living/carbon/human/proc/damage_organs(var/amount, var/probability, var/list/organs) - for (var/organ in organs) - if (prob(probability)) - prob_damage_organ(amount, probability, organ) - - -//damage organs specifically choose value for var/organ from strings in organ_list var in obj/item/organ in orgam.dm --kyle -//only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. -//return 1 on success, 0 on failure -/mob/living/carbon/human/proc/take_organ_damage(var/amount, var/organ) - if (src.organHolder && src.organHolder.organ_list) - if (src.organHolder.organ_list[organ]) - - var/obj/item/organ/O = src.organHolder.organ_list[organ] - if (istype(O,/obj/item/organ)) - O.health = min(100, O.health - amount) //this health damage counts down from 100, crazy right? - src.visible_message("[src] damaged [organ] by [amount]!") - - return 1 - - return 0 + return \ No newline at end of file diff --git a/code/obj/item/cigarette.dm b/code/obj/item/cigarette.dm index 0c703755..a453977b 100644 --- a/code/obj/item/cigarette.dm +++ b/code/obj/item/cigarette.dm @@ -162,9 +162,9 @@ src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) if (prob(30)) - H.take_organ_damage(1, "left_lung") + H.organHolder.take_organ_damage(1, "left_lung") if (prob(30)) - H.take_organ_damage(1, "right_lung") + H.organHolder.take_organ_damage(1, "right_lung") else src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 7fe3e465..b1d17659 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -52,6 +52,7 @@ src.visible_message("[src] damaged [organ] by [amount]!") return 1 + src.take_toxin_damage(amount) return 0 @@ -2258,6 +2259,7 @@ name = "spleen" organ_name = "spleen" icon_state = "spleen" + body_side = L_ORGAN attack(var/mob/living/carbon/M as mob, var/mob/user as mob) if (!ismob(M)) @@ -2303,6 +2305,7 @@ name = "pancreas" organ_name = "pancreas" icon_state = "pancreas" + body_side = R_ORGAN attack(var/mob/living/carbon/M as mob, var/mob/user as mob) if (!ismob(M)) From 925300308ed785889016aa70bf8beebb22e19f33 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 2 Aug 2018 04:12:16 -0400 Subject: [PATCH 039/105] bit change, fixes a bunch of shit. This uses Haine's(i think) method for damaging things instead of tha tother one I made. --- code/datums/chemistry/Reagents-Base.dm | 17 ++- code/datums/chemistry/Reagents-Medical.dm | 60 +++----- .../diseases/organ_diseases/appendicitis.dm | 27 ++-- .../diseases/organ_diseases/kidney_failure.dm | 24 ++- .../diseases/organ_diseases/liver_failure.dm | 32 ++-- .../diseases/organ_diseases/pancreatitis.dm | 39 +++-- .../organ_diseases/respiratory_failure.dm | 24 ++- .../randomevents/minor/appendicitis_event.dm | 16 ++ code/mob/living/carbon/human.dm | 54 ++++--- code/obj/item/cigarette.dm | 6 +- code/obj/item/organ.dm | 141 ++++++++++++------ code/procs/scanprocs.dm | 11 +- 12 files changed, 251 insertions(+), 200 deletions(-) create mode 100644 code/datums/randomevents/minor/appendicitis_event.dm diff --git a/code/datums/chemistry/Reagents-Base.dm b/code/datums/chemistry/Reagents-Base.dm index d7802347..180fd0ae 100644 --- a/code/datums/chemistry/Reagents-Base.dm +++ b/code/datums/chemistry/Reagents-Base.dm @@ -172,9 +172,12 @@ datum do_overdose(var/severity, var/mob/M) var/mob/living/carbon/human/H = M - if (!istype(H) || !H.bioHolder.HasEffect("resist_alcohol")) - H.take_organ_damage(rand(1,2), "liver") - ..() + if (istype(H) && !H.bioHolder.HasEffect("resist_alcohol")) + if (prob(25)) + if (H.organHolder.liver) + H.organHolder.liver.take_damage(0, 0, rand(1,2)) + + ..() hydrogen @@ -490,11 +493,13 @@ datum M.paralysis += 3 * severity M.weakened += 4 * severity + if (prob(8)) - var/mob/living/carbon/human/H = M - if (!istype(H)) - H.take_organ_damage(rand(1,2), "pancreas") + + var/mob/living/carbon/human/H = M + if (istype(H) && H.organHolder.pancreas) + H.organHolder.pancreas.take_damage(0, 0, rand(1,2)) M.take_toxin_damage(severity) M.updatehealth() diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index e4d7a046..ecc23a90 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -400,7 +400,7 @@ datum if (H.bleeding && prob(33)) H.bleeding-- //heal all functional organs, ignore heart and brain since they don't use this system yet - H.damage_organs(-2, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + H.organHolder.heal_organs(2, 2, 2, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) M.updatehealth() //M.UpdateDamageIcon() @@ -1192,27 +1192,21 @@ datum transparency = 255 depletion_rate = 0.2 value = 3 - // H.damage_organs(-2, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) on_mob_life(var/mob/M) if(!M) M = holder.my_atom if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - var/datum/organholder/OH = H.organHolder - if (!istype(OH)) - ..(M) - return + + if (H.organHolder.spleen && H.organHolder.spleen.get_damage() < 90 && H.organHolder.spleen.get_damage() > 0) + H.organHolder.spleen.heal_damage(2, 2, 2, "spleen") - if (OH.spleen && OH.spleen.health >= 10 && OH.spleen.health < 100) - H.take_organ_damage(-2, "spleen") + if (H.organHolder.left_lung && H.organHolder.left_lung.get_damage() < 90 && H.organHolder.left_lung.get_damage() > 0) + H.organHolder.spleen.heal_damage(2, 2, 2, "left_lung") - if (OH.left_lung && OH.left_lung.health >= 10 && OH.left_lung.health < 100) - - H.take_organ_damage(-2, "left_lung") - - if (OH.right_lung && OH.right_lung.health >= 10 && OH.right_lung.health < 100) - H.take_organ_damage(-2, "right_lung") + if (H.organHolder.right_lung && H.organHolder.right_lung.get_damage() < 90 && H.organHolder.right_lung.get_damage() > 0) + H.organHolder.spleen.heal_damage(2, 2, 2, "right_lung") M.updatehealth() ..(M) @@ -1233,25 +1227,21 @@ datum if(!M) M = holder.my_atom if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - var/datum/organholder/OH = H.organHolder - if (!istype(OH)) - ..(M) - return - if (OH.liver && OH.liver.health >= 10 && OH.liver.health < 100) - H.take_organ_damage(-2, "liver") + if (H.organHolder.liver && H.organHolder.liver.get_damage() < 90 && H.organHolder.liver.get_damage() > 0) + H.organHolder.liver.heal_damage(2, 2, 2) - if (OH.left_kidney && OH.left_kidney.health >= 10 && OH.left_kidney.health < 100) - H.take_organ_damage(-2, "left_kidney") + if (H.organHolder.left_kidney && H.organHolder.left_kidney.get_damage() < 90 && H.organHolder.left_kidney.get_damage() > 0) + H.organHolder.left_kidney.heal_damage(2, 2, 2) - if (OH.stomach && OH.stomach.health >= 10 && OH.stomach.health < 100) - H.take_organ_damage(-2, "stomach") - - if (OH.stomach && OH.stomach.health >= 10 && OH.stomach.health < 100) - H.take_organ_damage(-2, "stomach") + if (H.organHolder.right_kidney && H.organHolder.right_kidney.get_damage() < 90 && H.organHolder.right_kidney.get_damage() > 0) + H.organHolder.right_kidney.heal_damage(2, 2, 2) + + if (H.organHolder.stomach && H.organHolder.stomach.get_damage() < 90 && H.organHolder.stomach.get_damage() > 0) + H.organHolder.stomach.heal_damage(2, 2, 2) - if (OH.intestines && OH.intestines.health >= 10 && OH.intestines.health < 100) - H.take_organ_damage(-2, "intestines") + if (H.organHolder.intestines && H.organHolder.intestines.get_damage() < 90 && H.organHolder.intestines.get_damage() > 0) + H.organHolder.intestines.heal_damage(2, 2, 2) M.updatehealth() ..(M) @@ -1274,15 +1264,11 @@ datum if(!M) M = holder.my_atom if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - var/datum/organholder/OH = H.organHolder - if (!istype(OH)) - ..(M) - return - if (OH.appendix && OH.appendix.health >= 10 && OH.appendix.health < 100) - H.take_organ_damage(-2, "appendix") + if (H.organHolder.appendix && H.organHolder.appendix.get_damage() < 90 && H.organHolder.appendix.get_damage() > 0) + H.organHolder.appendix.heal_damage(2, 2, 2) - if (OH.pancreas && OH.pancreas.health >= 10 && OH.pancreas.health < 100) - H.take_organ_damage(-2, "pancreas") + if (H.organHolder.pancreas && H.organHolder.pancreas.get_damage() < 90 && H.organHolder.pancreas.get_damage() > 0) + H.organHolder.pancreas.heal_damage(2, 2, 2) M.updatehealth() ..(M) diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm index f76acd2a..7d94713c 100644 --- a/code/datums/diseases/organ_diseases/appendicitis.dm +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -14,20 +14,17 @@ if (..()) return - if (ishuman(affected_mob)) - var/mob/living/carbon/human/H = affected_mob - - if (!H.organHolder) - H.cure_disease(D) - return + if (!ishuman(affected_mob)) + return - var/datum/organHolder/oH = H.organHolder - if (!oH.appendix) - H.cure_disease(D) - return + var/mob/living/carbon/human/H = affected_mob + + if (!H.organHolder && !H.organHolder.appendix) + H.cure_disease(D) + return //handle robopancreas failuer. should do some stuff I guess - // else if (oH.pancreas && oH.pancreas.robotic && !oH.heart.health > 0) + // else if (H.organHolder.pancreas && H.organHolder.pancreas.robotic && !H.organHolder.heart.health > 0) switch (D.stage) if (1) @@ -49,17 +46,15 @@ boutput(affected_mob, "Your back aches terribly!") if (prob(3)) boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") - // oH.takepancreas + // H.organHolder.takepancreas if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) if (prob(20)) affected_mob.emote(pick("twitch", "groan")) - if (ishuman(affected_mob)) - var/mob/living/carbon/human/H = affected_mob - H.organHolder.take_organ_damage(3, "pancreas") + H.organHolder.appendix.take_damage(0, 0, 3) //destroy human's appendix, and add a load of toxic chemicals or bacteria to the person. - affected_mob.take_tox_damage(1) + affected_mob.take_toxin_damage(1) affected_mob.updatehealth() diff --git a/code/datums/diseases/organ_diseases/kidney_failure.dm b/code/datums/diseases/organ_diseases/kidney_failure.dm index 98325ecc..6a773390 100644 --- a/code/datums/diseases/organ_diseases/kidney_failure.dm +++ b/code/datums/diseases/organ_diseases/kidney_failure.dm @@ -15,20 +15,18 @@ if (..()) return - if (ishuman(affected_mob)) - var/mob/living/carbon/human/H = affected_mob + if (!ishuman(affected_mob)) + return + + var/mob/living/carbon/human/H = affected_mob - if (!H.organHolder) - H.cure_disease(D) - return + if (!H.organHolder && (!H.organHolder.left_kidney && !H.organHolder.right_kidney)) + H.cure_disease(D) + return - var/datum/organHolder/oH = H.organHolder - if (!oH.kidney) - H.cure_disease(D) - return //handle robokidney failuer. should do some stuff I guess - // else if (oH.kidney && oH.kidney.robotic && !oH.heart.health > 0) + // else if (H.organHolder.kidney && H.organHolder.kidney.robotic && !H.organHolder.heart.health > 0) switch (D.stage) if (1) @@ -50,7 +48,7 @@ boutput(affected_mob, "Your back aches terribly!") if (prob(3)) boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") - // oH.takekidney + // H.organHolder.takekidney if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) @@ -58,8 +56,8 @@ if (prob(20)) affected_mob.emote(pick("twitch", "gasp")) - H.damage_organs(3, 20, list("left_kidney", "right_kidney")) + H.organHolder.damage_organs(0, 0, 3, 20, list("left_kidney", "right_kidney")) H.losebreath++ - affected_mob.take_oxygen_deprivation(1) + affected_mob.take_toxin_damage(1) affected_mob.updatehealth() diff --git a/code/datums/diseases/organ_diseases/liver_failure.dm b/code/datums/diseases/organ_diseases/liver_failure.dm index 0da0b9bd..d77c8e4d 100644 --- a/code/datums/diseases/organ_diseases/liver_failure.dm +++ b/code/datums/diseases/organ_diseases/liver_failure.dm @@ -14,20 +14,17 @@ if (..()) return - if (ishuman(affected_mob)) - var/mob/living/carbon/human/H = affected_mob + if (!ishuman(affected_mob)) + return + + var/mob/living/carbon/human/H = affected_mob - if (!H.organHolder) - H.cure_disease(D) - return - - var/datum/organHolder/oH = H.organHolder - if (!oH.liver) - H.cure_disease(D) - return - + if (!H.organHolder && !H.organHolder.liver) + H.cure_disease(D) + return + //handle roboliver failuer. should do some stuff I guess - // else if (oH.liver && oH.liver.robotic && !oH.heart.health > 0) + // else if (H.organHolder.liver && H.organHolder.liver.robotic && !H.organHolder.heart.health > 0) switch (D.stage) if (1) @@ -49,14 +46,13 @@ boutput(affected_mob, "Your back aches terribly!") if (prob(3)) boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") - // oH.takeliver + // H.organHolder.takeliver if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) if (prob(20)) - affected_mob.emote(pick("twitch", "groan")) - if (ishuman(affected_mob)) - var/mob/living/carbon/human/H = affected_mob - H.organHolder.take_organ_damage(3, "liver") - affected_mob.take_tox_damage(1) + affected_mob.emote(pick("twitch", "groan")) + H.organHolder.liver.take_damage(0, 0, 3) + + affected_mob.take_toxin_damage(1) affected_mob.updatehealth() diff --git a/code/datums/diseases/organ_diseases/pancreatitis.dm b/code/datums/diseases/organ_diseases/pancreatitis.dm index af4a4fbd..84162dce 100644 --- a/code/datums/diseases/organ_diseases/pancreatitis.dm +++ b/code/datums/diseases/organ_diseases/pancreatitis.dm @@ -14,20 +14,17 @@ if (..()) return - if (ishuman(affected_mob)) - var/mob/living/carbon/human/H = affected_mob + if (!ishuman(affected_mob)) + return + + var/mob/living/carbon/human/H = affected_mob - if (!H.organHolder) - H.cure_disease(D) - return - - var/datum/organHolder/oH = H.organHolder - if (!oH.pancreas) - H.cure_disease(D) - return + if (!H.organHolder && !H.organHolder.pancreas) + H.cure_disease(D) + return - //handle robopancreas failuer. should do some stuff I guess - // else if (oH.pancreas && oH.pancreas.robotic && !oH.heart.health > 0) + //handle robopancreas failuer. should do some stuff I guess + // else if (H.organHolder.pancreas && H.organHolder.pancreas.robotic && !H.organHolder.heart.health > 0) switch (D.stage) if (1) @@ -40,22 +37,24 @@ boutput(affected_mob, "Your abdomen area hurts!") if (2) if (prob(1) && prob(10)) + affected_mob.cure_disease(D) boutput(affected_mob, "You feel better.") - affected_mob.resistances += src.type - affected_mob.ailments -= src return if (prob(8)) affected_mob.emote(pick("pale", "groan")) if (prob(5)) boutput(affected_mob, "Your back aches terribly!") if (prob(3)) boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") - // oH.takepancreas + // H.organHolder.takepancreas if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) - if (prob(20)) affected_mob.emote(pick("twitch", "groan")) - if (ishuman(affected_mob)) - var/mob/living/carbon/human/H = affected_mob - H.organHolder.take_organ_damage(3, "pancreas") - affected_mob.take_tox_damage(1) + if (prob(1) && prob(10)) + boutput(affected_mob, "You feel better.") + affected_mob.cure_disease(D) + if (prob(20)) + affected_mob.emote(pick("pale", "groan")) + H.organHolder.pancreas.take_damage(0, 0, 3) + + affected_mob.take_toxin_damage(1) affected_mob.updatehealth() diff --git a/code/datums/diseases/organ_diseases/respiratory_failure.dm b/code/datums/diseases/organ_diseases/respiratory_failure.dm index 89e8718f..bc340dc7 100644 --- a/code/datums/diseases/organ_diseases/respiratory_failure.dm +++ b/code/datums/diseases/organ_diseases/respiratory_failure.dm @@ -15,20 +15,16 @@ if (..()) return - if (ishuman(affected_mob)) - var/mob/living/carbon/human/H = affected_mob + if (!ishuman(affected_mob)) + return + var/mob/living/carbon/human/H = affected_mob - if (!H.organHolder) - H.cure_disease(D) - return - - var/datum/organHolder/oH = H.organHolder - if (!oH.respiratory) - H.cure_disease(D) - return + if (!H.organHolder && (!H.organHolder.left_lung && H.organHolder.right_lung)) + H.cure_disease(D) + return //handle roborespiratory failuer. should do some stuff I guess - // else if (oH.respiratory && oH.respiratory.robotic && !oH.heart.health > 0) + // else if (H.organHolder.respiratory && H.organHolder.respiratory.robotic && !H.organHolder.heart.health > 0) switch (D.stage) if (1) @@ -50,15 +46,15 @@ boutput(affected_mob, "Your back aches terribly!") if (prob(3)) boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") - // oH.takerespiratory + // H.organHolder.takerespiratory if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) if (prob(20)) - affected_mob.emote(pick("twitch", "gasp")) - H.damage_organs(3, 20, list("left_lung", "right_lung")) + affected_mob.emote(pick("twitch", "gasp")) + H.organHolder.damage_organs(0, 0, 3, 20, list("left_lung", "right_lung")) H.losebreath++ affected_mob.take_oxygen_deprivation(1) diff --git a/code/datums/randomevents/minor/appendicitis_event.dm b/code/datums/randomevents/minor/appendicitis_event.dm new file mode 100644 index 00000000..be373578 --- /dev/null +++ b/code/datums/randomevents/minor/appendicitis_event.dm @@ -0,0 +1,16 @@ +/datum/random_event/minor/appendicitis + name = "Appendicitis Contraction" + centcom_headline = "Appendicitis Contraction" + centcom_message = "Some crew members have contracted Appendicitis, they should report to medbay before their condition worsens." + + event_effect(var/source) + ..() + var/list/potential_victims = list() + for (var/mob/living/carbon/human/H in mobs) + if (H.stat == 2) + continue + potential_victims += H + if (potential_victims.len) + var/num = rand(1, 3) + var/mob/living/carbon/human/patient_zero = pick(potential_victims) + patient_zero.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) \ No newline at end of file diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 3a22994d..b8167316 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4038,7 +4038,8 @@ TakeDamage("chest", 0, burn_damage, 0, DAMAGE_BURN) hud.update_fire_indicator(1) if (prob(4)) - H.damage_organs(max(burn_damage, 3), 10, list("left_lung", "right_lung")) + if (src.organHolder) + src.organHolder.damage_organs(0, max(burn_damage, 3), 0, 80, list("left_lung", "right_lung")) boutput(src, "Your lungs hurt like hell! This can't be good!") //src.contract_disease(new/datum/ailment/disability/cough, 1, 0) // cogwerks ailment project - lung damage from fire else @@ -4289,7 +4290,7 @@ return if (src.blood_volume < 500 && src.blood_volume > 0) // if we're full or empty, don't bother v - if (prob(66) && src.organHolder.spleen && src.organHolder.spleen.health > 0) //might just want to make a var for this an set it in handle_organs, but in the interest of making little changes, here this is + if (prob(66) && src.organHolder.spleen && src.organHolder.spleen.get_damage() < 100) //might just want to make a var for this an set it in handle_organs, but in the interest of making little changes, here this is src.blood_volume ++ // maybe get a little blood back ^ if (src.bleeding) @@ -4468,7 +4469,7 @@ // lungs if (!src.nodamage) // I don't know why all these if (!src.nodamage) isn't just checked once, but OK - src.organHolder.handle_lungs_health() + src.organHolder.handle_lungs_stamina() // kdineys if (!src.nodamage) @@ -4477,35 +4478,43 @@ // liver if (!src.nodamage) - if (!src.organHolder.liver || src.organHolder.liver.health <= 0) + if (!src.organHolder.liver || src.organHolder.liver.get_damage() >= 100) src.take_toxin_damage(2, 1) - else if (src.organHolder.liver.health <=35 && prob(organHolder.liver.health * 0.2)) + else if (src.organHolder.liver.get_damage() >= 65 && prob(organHolder.liver.get_damage() * 0.2)) src.contract_disease(/datum/ailment/disease/liver_failure,null,null,1) // pancreas if there's no pancreas, user does not generate insulin if they have sugar in their body. if (!src.nodamage) - if (src.organHolder.pancreas && src.organHolder.pancreas.health <= 0) + if (src.organHolder.pancreas && src.organHolder.pancreas.get_damage() < 100) if (src.reagents && src.reagents.has_reagent("sugar", 80)) - pick ( - prob(25) - src.organHolder.take_organ_damage(2, "spleen") - prob(50) - src.reagents.add_reagent("insulin", 2) - ) + if (prob(50)) + src.reagents.add_reagent("insulin", 2) + if (prob(25)) + src.organHolder.pancreas.take_damage(0, 0, 3) + + if (src.organHolder.pancreas.get_damage() >= 65 && prob(organHolder.pancreas.get_damage() * 0.2)) + src.contract_disease(/datum/ailment/disease/pancreatitis,null,null,1) + + // appendix + if (!src.nodamage) + if (src.organHolder.appendix && src.organHolder.appendix.get_damage() >= 100) + src.organHolder.appendix.broken = 1 + else if (src.organHolder.appendix.get_damage() >= 65 && prob(organHolder.appendix.get_damage() * 0.2)) + src.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) // spleen if there's no spleen don't let the user regen blood naturally - // if (!src.organHolder.spleen || (src.organHolder.liver.health > 10)) + // if (src.organHolder.spleen && (src.organHolder.spleen.get_damage() >= 100)) //handle_blood does the spleen check since all the spleen will do is let you regen blood for now, but this could be needed if there is another function for a spleen //stomach // if (!src.nodamage) - // if (!src.organHolder.stomach || src.organHolder.stomach.health <= 0) + // if (src.organHolder.stomach && src.organHolder.stomach.get_damage() >= 100) //intestines // if (!src.nodamage) - // if (!src.organHolder.intestines || src.organHolder.intestines.health <= 0) + // if (src.organHolder.intestines && src.organHolder.intestines.get_damage() >= 100) if (!src.organHolder.left_eye && src.organHolder.right_eye) // we have no left eye, but we also don't have the blind overlay (presumably) if (!src.hasOverlayComposition(/datum/overlayComposition/blinded)) @@ -5755,7 +5764,8 @@ boutput(src, "This statement is universally true because if you did you probably wouldn't be desperate enough to see this message.") /mob/living/carbon/human/full_heal() - src.damage_organs(-10000, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + if (src.organHolder) + src.organHolder.heal_organs(10000, 10000, 10000, 100, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) blinded = 0 bleeding = 0 @@ -6517,12 +6527,16 @@ return if (!ignore) - if (amount > 1) + + if (amount > 1 && src.organHolder) if (prob(30)) - src.organHolder.take_organ_damage(amount/20, "left_kidney") + if (src.organHolder.left_kidney) + src.organHolder.left_kidney.take_damage(0, 0, amount/20) if (prob(30)) - src.organHolder.take_organ_damage(amount/20, "right_kidney") + if (src.organHolder.right_kidney) + src.organHolder.right_kidney.take_damage(0, 0, amount/20) if (prob(30)) - src.organHolder.take_organ_damage(amount/40, "left_lung") + if (src.organHolder.liver) + src.organHolder.liver.take_damage(0, 0, amount/40) return \ No newline at end of file diff --git a/code/obj/item/cigarette.dm b/code/obj/item/cigarette.dm index a453977b..a5bd4ff5 100644 --- a/code/obj/item/cigarette.dm +++ b/code/obj/item/cigarette.dm @@ -162,9 +162,11 @@ src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) if (prob(30)) - H.organHolder.take_organ_damage(1, "left_lung") + if (H.organHolder && H.organHolder.left_lung) + H.organHolder.left_lung.take_damage(0, 0, 1) if (prob(30)) - H.organHolder.take_organ_damage(1, "right_lung") + if (H.organHolder && H.organHolder.right_lung) + H.organHolder.right_lung.take_damage(0, 0, 1) else src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index b1d17659..13ba5d64 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -28,48 +28,50 @@ var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt", "left_kidney", "right_kidney", "liver", "stomach", "intestines", "spleen", "pancreas", "appendix") -//made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using + //made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using -//amount, damge to be done to organs -//probability, num 0-100 for whether or not to damage an organ found -//organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" - proc/damage_organs(var/amount, var/probability, var/list/organs) + //probability, num 0-100 for whether or not to damage an organ found + //organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" + proc/damage_organs(var/brute, var/burn, var/tox, var/probability, var/list/organs) for (var/organ in organs) if (prob(probability)) - prob_damage_organ(amount, probability, organ) + do_organ_damage(0, brute, burn, tox, probability, organ) + proc/heal_organs(var/brute, var/burn, var/tox, var/probability, var/list/organs) + for (var/organ in organs) + if (prob(probability)) + do_organ_damage(1, brute, burn, tox, probability, organ) -//damage organs specifically choose value for var/organ from strings in organ_list var in obj/item/organ in orgam.dm --kyle -//only give this an actual organ: obj/item/organ, not item/clothing/butt or obj/item/skull which exist in organholder for some reason. -//return 1 on success, 0 on failure - proc/take_organ_damage(var/amount, var/organ) - if (src && src.organ_list) - if (src.organ_list[organ]) - var/obj/item/organ/O = src.organ_list[organ] - if (istype(O,/obj/item/organ)) - O.health = min(100, O.health - amount) //this health damage counts down from 100, crazy right? - src.visible_message("[src] damaged [organ] by [amount]!") - - return 1 - src.take_toxin_damage(amount) + proc/do_organ_damage(var/heal = 0, var/brute, var/burn, var/tox, var/organ) + if (src.organ_list) + var/obj/item/organ/O = donor.organHolder.organ_list[organ] + if (O && istype(O, /obj/item/organ)) + if (heal) + O.heal_damage(brute, burn, tox) + donor.visible_message("[donor] damaged [organ] by [brute], [burn], [tox]!") + else + O.take_damage(brute, burn, tox) + donor.visible_message("[donor] healed [organ] by [brute], [burn], [tox]!") + return 1 return 0 + //organs should not perform their functions if they have 0 health proc/get_working_kidney_amt() var/count = 0 - if (left_kidney && left_kidney.health > 0) + if (left_kidney && left_kidney.get_damage() < 100) count++ - if (right_kidney && right_kidney.health > 0) + if (right_kidney && right_kidney.get_damage() < 100) count++ return count proc/get_working_lung_amt() var/count = 0 - if (left_lung && left_lung.health > 0) + if (left_lung && left_lung.get_damage() < 100) count++ - if (right_lung && right_lung.health > 0) + if (right_lung && right_lung.get_damage() < 100) count++ return count @@ -193,42 +195,34 @@ src.left_kidney = new /obj/item/organ/kidney/left src.left_kidney.donor = src.donor organ_list["left_kidney"] = left_kidney - left_kidney.donor = null if (!src.right_kidney) src.right_kidney = new /obj/item/organ/kidney/right src.right_kidney.donor = src.donor organ_list["right_kidney"] = right_kidney - right_kidney.donor = null if (!src.liver) src.liver = new /obj/item/organ/liver src.liver.donor = src.donor organ_list["liver"] = liver - liver.donor = null if (!src.stomach) src.stomach = new /obj/item/organ/stomach src.stomach.donor = src.donor organ_list["stomach"] = stomach - stomach.donor = null if (!src.intestines) src.intestines = new /obj/item/organ/intestines src.intestines.donor = src.donor organ_list["intestines"] = intestines - intestines.donor = null if (!src.spleen) src.spleen = new /obj/item/organ/spleen src.spleen.donor = src.donor organ_list["spleen"] = spleen - spleen.donor = null if (!src.pancreas) src.pancreas = new /obj/item/organ/pancreas src.pancreas.donor = src.donor organ_list["pancreas"] = pancreas - pancreas.donor = null if (!src.appendix) src.appendix = new /obj/item/organ/appendix src.appendix.donor = src.donor organ_list["appendix"] = appendix - appendix.donor = null proc/drop_organ(var/type, var/location) if (!src.donor || !type) @@ -384,7 +378,7 @@ myLeftLung.set_loc(location) myLeftLung.on_removal() src.left_lung = null - handle_lungs_health() + handle_lungs_stamina() return myLeftLung if ("right_lung") @@ -394,7 +388,7 @@ myRightLung.set_loc(location) myRightLung.on_removal() src.right_lung = null - handle_lungs_health() + handle_lungs_stamina() return myRightLung if ("butt") @@ -660,7 +654,7 @@ src.left_lung = newLeftLung newLeftLung.set_loc(src.donor) organ_list["left_lung"] = newLeftLung - handle_lungs_health() + handle_lungs_stamina() success = 1 if ("right_lung") if (src.right_lung) @@ -673,7 +667,7 @@ src.right_lung = newRightLung newRightLung.set_loc(src.donor) organ_list["right_lung"] = newRightLung - handle_lungs_health() + handle_lungs_stamina() success = 1 if ("butt") @@ -796,7 +790,7 @@ //change stamina modifies based on amount of working lungs. lungs w/ health > 0 //lungs_changed works like this: if lungs_changed is != the num of working lungs, then apply the - proc/handle_lungs_health() + proc/handle_lungs_stamina() var/working_lungs = src.get_working_lung_amt() switch (working_lungs) if (0) @@ -869,6 +863,11 @@ var/burn_dam = 0 var/tox_dam = 0 + var/robotic = 0 + var/emagged = 0 + var/synthetic = 0 + var/broken = 0 + var/created_decal = /obj/decal/cleanable/blood // what kinda mess it makes. mostly so cyberhearts can splat oil on the ground, but idk maybe you wanna make something that creates a broken balloon or something on impact vOv var/decal_done = 0 // fuckers are tossing these around a lot so I guess they're only gunna make one, ever now var/body_side = null // L_ORGAN/1 for left, R_ORGAN/2 for right @@ -901,15 +900,16 @@ return take_damage(brute, burn, tox, damage_type) - if (brute <= 0 && burn <= 0)// && tox <= 0) + if (brute <= 0 && burn <= 0 && tox <= 0) return 0 src.brute_dam += brute src.burn_dam += burn - //src.tox_dam += tox + src.tox_dam += tox + donor.visible_message("[src] damaged for [brute], [burn], [tox]!", 1) if (ishuman(donor)) var/mob/living/carbon/human/H = donor - H.hit_twitch() + // H.hit_twitch() //no H.UpdateDamage() if (bone_system && src.bones && brute && prob(brute * 2)) src.bones.take_damage(damage_type) @@ -921,11 +921,17 @@ src.brute_dam = max(0, src.brute_dam - brute) src.burn_dam = max(0, src.burn_dam - burn) src.tox_dam = max(0, src.tox_dam - tox) + donor.visible_message("[src] healed for [brute], [burn], [tox]!", 1) + return 1 get_damage() return src.brute_dam + src.burn_dam + src.tox_dam + emp_act() + if (robotic) + src.take_damage(20, 20, 20) + /*=========================*/ /*----------Brain----------*/ /*=========================*/ @@ -1023,10 +1029,6 @@ desc = "Offal, just offal." icon_state = "heart" item_state = "heart" - var/robotic = 0 - var/emagged = 0 - var/broken = 0 - var/synthetic = 0 module_research = list("medicine" = 1, "efficiency" = 5) module_research_type = /obj/item/organ/heart @@ -1181,6 +1183,7 @@ edible = 0 mats = 6 + /*========================*/ /*----------Eyes----------*/ /*========================*/ @@ -1190,10 +1193,6 @@ organ_name = "eye" desc = "Here's lookin' at you! Er, maybe not so much, anymore." icon_state = "eye" - var/robotic = 0 - var/emagged = 0 - var/broken = 0 - var/synthetic = 0 New() ..() @@ -2097,6 +2096,14 @@ desc = "Bean shaped, but not actually beans. You can still eat them, though!" icon_state = "kidneys" + on_transplant() + ..() + if (src.donor) + for (var/datum/ailment_data/disease in src.donor.ailments) + if (disease.cure == "Kidney Transplant") + src.donor.cure_disease(disease) + return + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) if (!ismob(M)) return @@ -2169,6 +2176,14 @@ desc = "A little meat sack containing acid for the digestion of food. Like most things that come out of living creatures, you can probably eat it." icon_state = "stomach" + on_transplant() + ..() + if (src.donor) + for (var/datum/ailment_data/disease in src.donor.ailments) + if (disease.cure == "Stomach Transplant") + src.donor.cure_disease(disease) + return + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) if (!ismob(M)) return @@ -2215,6 +2230,14 @@ desc = "Did you know that if you laid your guts out in a straight line, they'd be about 9 meters long? Also, you'd probably be dying, so it's not something you should do. Probably." icon_state = "intestines" + on_transplant() + ..() + if (src.donor) + for (var/datum/ailment_data/disease in src.donor.ailments) + if (disease.cure == "Intestine Transplant") + src.donor.cure_disease(disease) + return + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) if (!ismob(M)) return @@ -2261,6 +2284,14 @@ icon_state = "spleen" body_side = L_ORGAN + on_transplant() + ..() + if (src.donor) + for (var/datum/ailment_data/disease in src.donor.ailments) + if (disease.cure == "Spleen Transplant") + src.donor.cure_disease(disease) + return + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) if (!ismob(M)) return @@ -2307,6 +2338,14 @@ icon_state = "pancreas" body_side = R_ORGAN + on_transplant() + ..() + if (src.donor) + for (var/datum/ailment_data/disease in src.donor.ailments) + if (disease.cure == "Pancreas Transplant") + src.donor.cure_disease(disease) + return + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) if (!ismob(M)) return @@ -2352,6 +2391,14 @@ organ_name = "appendix" icon_state = "appendix" + on_transplant() + ..() + if (src.donor) + for (var/datum/ailment_data/disease in src.donor.ailments) + if (disease.cure == "Appendix Transplant") + src.donor.cure_disease(disease) + return + attack(var/mob/living/carbon/M as mob, var/mob/user as mob) if (!ismob(M)) return diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index f6ae2b5b..b59c4ebf 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -147,9 +147,6 @@ // found = 1 // organ_data1 += "
[organ.name] has [organ.health] / 100" - organ_data1 += organ_health_scan("left_eye", H) - organ_data1 += organ_health_scan("left_eye", H) - organ_data1 += organ_health_scan("right_eye", H) organ_data1 += organ_health_scan("left_lung", H) organ_data1 += organ_health_scan("right_lung", H) @@ -163,7 +160,7 @@ organ_data1 += organ_health_scan("appendix", H) if (organ_data1) - organ_data = "Scans Indicate Organ Damage:" + organ_data = "Scans Indicate Organ Damage:" organ_data += organ_data1 else @@ -219,10 +216,10 @@ /proc/organ_health_scan(var/input, var/mob/living/carbon/human/H) var/obj/item/organ/O = H.organHolder.organ_list[input] if (O && istype(O, /obj/item/organ)) - if (O.health >= 100) - return null + if (O.get_damage() > 0) + return "
[input] - [O.get_damage()]" else - return "
[input] HEALTH = [O.health]/100" + return null else return "
The patient's [input] is missing!" From 165c043217290c13abfc1a4ce55f5105b818f144 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 2 Aug 2018 18:23:12 -0400 Subject: [PATCH 040/105] add lowerin depletion rates of chems if missing liver or both kidneys --- code/datums/chemistry/Chemistry-Reagents.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/datums/chemistry/Chemistry-Reagents.dm b/code/datums/chemistry/Chemistry-Reagents.dm index 8a3b42f1..8d1a362a 100644 --- a/code/datums/chemistry/Chemistry-Reagents.dm +++ b/code/datums/chemistry/Chemistry-Reagents.dm @@ -142,6 +142,11 @@ datum var/mob/living/carbon/human/H = M if(H.traitHolder.hasTrait("slowmetabolism")) deplRate /= 2 + if (H.organHolder && (!H.organHolder.liver || H.organHolder.liver.get_damage() >= 100)) + deplRate /= 2 + if (H.organHolder && (!H.organHolder.get_working_kidneys == 0) + deplRate /= 2 + holder.remove_reagent(src.id, deplRate) //By default it slowly disappears. if(M && overdose > 0) check_overdose(M) From 4fec5dfbf9598196356c3a43a6cbfe9c9f9bcaa1 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 2 Aug 2018 18:28:06 -0400 Subject: [PATCH 041/105] parenthesis --- code/datums/chemistry/Chemistry-Reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/chemistry/Chemistry-Reagents.dm b/code/datums/chemistry/Chemistry-Reagents.dm index 8d1a362a..ef6c024d 100644 --- a/code/datums/chemistry/Chemistry-Reagents.dm +++ b/code/datums/chemistry/Chemistry-Reagents.dm @@ -144,7 +144,7 @@ datum deplRate /= 2 if (H.organHolder && (!H.organHolder.liver || H.organHolder.liver.get_damage() >= 100)) deplRate /= 2 - if (H.organHolder && (!H.organHolder.get_working_kidneys == 0) + if (H.organHolder && (!H.organHolder.get_working_kidneys == 0)) deplRate /= 2 holder.remove_reagent(src.id, deplRate) //By default it slowly disappears. From b0ef42e79c9e3c2f9599876d67255e14ca1c3d3f Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 2 Aug 2018 18:29:15 -0400 Subject: [PATCH 042/105] method call... --- code/datums/chemistry/Chemistry-Reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/chemistry/Chemistry-Reagents.dm b/code/datums/chemistry/Chemistry-Reagents.dm index ef6c024d..293bbd5e 100644 --- a/code/datums/chemistry/Chemistry-Reagents.dm +++ b/code/datums/chemistry/Chemistry-Reagents.dm @@ -144,7 +144,7 @@ datum deplRate /= 2 if (H.organHolder && (!H.organHolder.liver || H.organHolder.liver.get_damage() >= 100)) deplRate /= 2 - if (H.organHolder && (!H.organHolder.get_working_kidneys == 0)) + if (H.organHolder && (!H.organHolder.get_working_kidneys() == 0)) deplRate /= 2 holder.remove_reagent(src.id, deplRate) //By default it slowly disappears. From 63bc9c4adda7cadefaecd5829e09570985fe9a78 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 2 Aug 2018 20:03:05 -0400 Subject: [PATCH 043/105] fix proc thing --- code/datums/chemistry/Chemistry-Reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/chemistry/Chemistry-Reagents.dm b/code/datums/chemistry/Chemistry-Reagents.dm index 293bbd5e..08eb126b 100644 --- a/code/datums/chemistry/Chemistry-Reagents.dm +++ b/code/datums/chemistry/Chemistry-Reagents.dm @@ -144,7 +144,7 @@ datum deplRate /= 2 if (H.organHolder && (!H.organHolder.liver || H.organHolder.liver.get_damage() >= 100)) deplRate /= 2 - if (H.organHolder && (!H.organHolder.get_working_kidneys() == 0)) + if (H.organHolder && (!H.organHolder.get_working_kidney_amt() == 0)) deplRate /= 2 holder.remove_reagent(src.id, deplRate) //By default it slowly disappears. From 5b543b117ca4f226d5f27077ea0381fff2cfc274 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 2 Aug 2018 20:03:28 -0400 Subject: [PATCH 044/105] some function for cyber liver --- code/datums/chemistry/Reagents-Base.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/datums/chemistry/Reagents-Base.dm b/code/datums/chemistry/Reagents-Base.dm index 180fd0ae..fdd03dff 100644 --- a/code/datums/chemistry/Reagents-Base.dm +++ b/code/datums/chemistry/Reagents-Base.dm @@ -147,7 +147,7 @@ datum H.stuttering += rand(1,10) if (H.canmove && isturf(H.loc) && prob(8)) step(H, pick(cardinal)) - if (holder.get_reagent_amount(src.id) >= 275) + if (holder.get_reagent_amount(src.id) >= 275 && (H.organHolder && H.organHolder.liver && !H.organHolder.liver.robotic)) if(prob(10)) H.emote(pick("hiccup", "fart", "mumble", "grumble")) H.stuttering += 1 @@ -163,7 +163,7 @@ datum new /obj/decal/cleanable/vomit(H.loc) if(prob(15)) H.make_dizzy(5) - if (holder.get_reagent_amount(src.id) >= 300) + if (holder.get_reagent_amount(src.id) >= 300 && (H.organHolder && H.organHolder.liver && !H.organHolder.liver.robotic)) H.change_eye_blurry(10, 50) if(prob(6)) H.drowsyness += 5 if(prob(5)) H.take_toxin_damage(rand(1,2)) @@ -174,7 +174,7 @@ datum var/mob/living/carbon/human/H = M if (istype(H) && !H.bioHolder.HasEffect("resist_alcohol")) if (prob(25)) - if (H.organHolder.liver) + if (H.organHolder.liver && !H.organHolder.liver.robotic) H.organHolder.liver.take_damage(0, 0, rand(1,2)) ..() From 1524a6056f84b7166a35cedb5907a39e2b0a56ea Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 2 Aug 2018 20:04:17 -0400 Subject: [PATCH 045/105] add some resp failure flavour text and some curing disease if you remove both lungs and replace them --- .../organ_diseases/respiratory_failure.dm | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/code/datums/diseases/organ_diseases/respiratory_failure.dm b/code/datums/diseases/organ_diseases/respiratory_failure.dm index bc340dc7..8c7f0423 100644 --- a/code/datums/diseases/organ_diseases/respiratory_failure.dm +++ b/code/datums/diseases/organ_diseases/respiratory_failure.dm @@ -11,6 +11,8 @@ stage_prob = 1 var/robo_restart = 0 + on_remove() + /datum/ailment/disease/respiratory_failure/stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D) if (..()) return @@ -18,11 +20,16 @@ if (!ishuman(affected_mob)) return var/mob/living/carbon/human/H = affected_mob - - if (!H.organHolder && (!H.organHolder.left_lung && H.organHolder.right_lung)) + + //to cure, gotta remove BOTH lungs. Don't want to make it too easy for ya + if (!H.organHolder && (!H.organHolder.left_lung && !H.organHolder.right_lung)) H.cure_disease(D) return + //if one lung is dead, you're in stage 3 resp failure, no exceptions. Need to fix with lung surgery to replace the dead one. + if ((H.organHolder.left_lung && H.organHolder.left_lung.get_damage() >= 100) || (H.organHolder.right_lung && H.organHolder.right_lung.get_damage() >= 100)) + D.stage = 3 + //handle roborespiratory failuer. should do some stuff I guess // else if (H.organHolder.respiratory && H.organHolder.respiratory.robotic && !H.organHolder.heart.health > 0) @@ -34,7 +41,7 @@ return if (prob(8)) affected_mob.emote(pick("pale", "shudder")) if (prob(5)) - boutput(affected_mob, "Your abdomen area hurts!") + boutput(affected_mob, "Your ribs hurt!") if (2) if (prob(1) && prob(10)) boutput(affected_mob, "You feel better.") @@ -42,11 +49,9 @@ affected_mob.ailments -= src return if (prob(8)) affected_mob.emote(pick("pale", "groan")) - if (prob(5)) - boutput(affected_mob, "Your back aches terribly!") - if (prob(3)) - boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") - // H.organHolder.takerespiratory + if (prob(10)) + boutput(affected_mob, "It hurts to breathe!") + H.losebreath++ if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) @@ -54,8 +59,10 @@ if (prob(20)) affected_mob.emote(pick("twitch", "gasp")) - H.organHolder.damage_organs(0, 0, 3, 20, list("left_lung", "right_lung")) - H.losebreath++ + boutput(affected_mob, "You can hardly breathe due to the pain!") + + H.organHolder.damage_organs(0, 0, 3, 60, list("left_lung", "right_lung")) + H.losebreath+=2 affected_mob.take_oxygen_deprivation(1) affected_mob.updatehealth() From 1bf7ca116217b732ae68c98ad2176746545d64b0 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 2 Aug 2018 20:04:39 -0400 Subject: [PATCH 046/105] appendicitis event --- code/datums/randomevents/minor/appendicitis_event.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/datums/randomevents/minor/appendicitis_event.dm b/code/datums/randomevents/minor/appendicitis_event.dm index be373578..351a9e9e 100644 --- a/code/datums/randomevents/minor/appendicitis_event.dm +++ b/code/datums/randomevents/minor/appendicitis_event.dm @@ -12,5 +12,6 @@ potential_victims += H if (potential_victims.len) var/num = rand(1, 3) - var/mob/living/carbon/human/patient_zero = pick(potential_victims) - patient_zero.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) \ No newline at end of file + for (var/i = 0, i < num, i++) + var/mob/living/carbon/human/patient_zero = pick(potential_victims) + patient_zero.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) \ No newline at end of file From 51f249e13ab4f963dd869bad407ae3ac44d61b4f Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 3 Aug 2018 01:38:58 -0400 Subject: [PATCH 047/105] fix issue with scanprocs not detecting missing lungs. issue with putting organs back in body, issue with stomach/intestine pathing, function for cyber lungs, more flavour text for appendicitis --- .../diseases/organ_diseases/appendicitis.dm | 35 +++--- code/mob/living/carbon/human.dm | 54 ++++++--- code/obj/item/cigarette.dm | 13 ++- code/obj/item/organ.dm | 109 +++++++++++------- code/procs/scanprocs.dm | 4 +- code/procs/surgery.dm | 31 ++++- 6 files changed, 157 insertions(+), 89 deletions(-) diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm index 7d94713c..bf0669f0 100644 --- a/code/datums/diseases/organ_diseases/appendicitis.dm +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -29,32 +29,37 @@ switch (D.stage) if (1) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.cure_disease(D) + boutput(H, "You feel better.") + H.cure_disease(D) return - if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(8)) H.emote(pick("pale", "shudder")) if (prob(5)) - boutput(affected_mob, "Your abdomen area hurts!") + boutput(H, "Your abdomen hurts!") if (2) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.resistances += src.type - affected_mob.ailments -= src + boutput(H, "You feel better.") + H.resistances += src.type + H.ailments -= src return - if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(8)) H.emote(pick("pale", "groan")) if (prob(5)) - boutput(affected_mob, "Your back aches terribly!") + boutput(H, "Your back aches terribly!") if (prob(3)) - boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") + boutput(H, "You feel excruciating pain in your upper-right adbomen!") // H.organHolder.takepancreas - if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (prob(5)) H.emote(pick("faint", "collapse", "groan")) if (3) if (prob(20)) - affected_mob.emote(pick("twitch", "groan")) + H.emote(pick("twitch", "groan")) H.organHolder.appendix.take_damage(0, 0, 3) - //destroy human's appendix, and add a load of toxic chemicals or bacteria to the person. + //human's appendix burst, and add a load of toxic chemicals or bacteria to the person. + if (prob(5)) + H.reagents.add_reagent("toxin", 40) + H.cure_disease(D) + H.organHolder.appendix.take_damage(200,200,200) + H.organHolder.drop_organ("appendix") - affected_mob.take_toxin_damage(1) - affected_mob.updatehealth() + H.take_toxin_damage(1) + H.updatehealth() diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index b8167316..72d584e8 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -2218,7 +2218,7 @@ . += "
[src.name] no longer has a skull in [t_his] head, [t_his] face is just empty skin mush!" else if (!oH.head) . += "
[src.name] has been decapitated!" - + if (oH.head) if (((src.wear_mask && src.wear_mask.see_face) || !src.wear_mask) && ((src.head && src.head.see_face) || !src.head)) if (!oH.right_eye) @@ -2226,8 +2226,8 @@ if (!oH.left_eye) . += "
[src.name]'s left eye is missing!" - if (src.organHolder.heart) - if (src.organHolder.heart.op_stage > 0.0) + if (src.organHolder.heart && src.organHolder.chest) + if (src.organHolder.heart.op_stage > 0.0 || src.organHolder.chest.op_stage > 0.0) . += "
[src.name] has an open incision on [t_his] chest!" else . += "
[src.name]'s chest is cut wide open; [t_his] heart has been removed!" @@ -3960,7 +3960,7 @@ return 0 - if (src.health < 0) //We aren't breathing. + if (src.health < 0 || (src.organHolder && !src.organHolder.left_lung && !src.organHolder.right_lung)) //We aren't breathing. return 0 var/safe_oxygen_min = 17 // Minimum safe partial pressure of O2, in kPa @@ -4032,16 +4032,19 @@ src.irradiate(RV.moles/10,1) if (breath.temperature > (T0C+66) && !src.is_heat_resistant()) // Hot air hurts :( - if (prob(20)) - boutput(src, "You feel a searing heat in your lungs!") - var/burn_damage = min((breath.temperature - (T0C+66)) / 3,10) + 6 - TakeDamage("chest", 0, burn_damage, 0, DAMAGE_BURN) - hud.update_fire_indicator(1) - if (prob(4)) - if (src.organHolder) - src.organHolder.damage_organs(0, max(burn_damage, 3), 0, 80, list("left_lung", "right_lung")) - boutput(src, "Your lungs hurt like hell! This can't be good!") - //src.contract_disease(new/datum/ailment/disability/cough, 1, 0) // cogwerks ailment project - lung damage from fire + if (!(breath.temperature < (T0C+150) && (src.organHolder && src.organHolder.left_lung.robotic && src.organHolder.right_lung.robotic))) + + var/burn_damage = min((breath.temperature - (T0C+66)) / 3,10) + 6 + TakeDamage("chest", 0, burn_damage, 0, DAMAGE_BURN) + if (prob(20)) + boutput(src, "You feel a searing heat in your lungs!") + if (src.organHolder) + src.organHolder.damage_organs(0, max(burn_damage, 3), 0, 80, list("left_lung", "right_lung")) + + hud.update_fire_indicator(1) + if (prob(4)) + boutput(src, "Your lungs hurt like hell! This can't be good!") + //src.contract_disease(new/datum/ailment/disability/cough, 1, 0) // cogwerks ailment project - lung damage from fire else hud.update_fire_indicator(0) @@ -4468,20 +4471,27 @@ // lungs - if (!src.nodamage) // I don't know why all these if (!src.nodamage) isn't just checked once, but OK + if (!src.nodamage) // I don't know why all these if (!src.nodamage) aren't just checked once, but OK src.organHolder.handle_lungs_stamina() + if (src.organHolder.get_working_lung_amt() == 1) + if ((src.organHolder.left_lung && src.organHolder.left_lung.get_damage() > 65) || (src.organHolder.right_lung && src.organHolder.right_lung.get_damage() > 65)) + src.contract_disease(/datum/ailment/disease/respiratory_failure,null,null,1) + // kdineys if (!src.nodamage) if (src.organHolder.get_working_kidney_amt() == 0) src.take_toxin_damage(2, 1) + else if (src.organHolder.get_working_kidney_amt() == 1) + if ((src.organHolder.left_kidney && src.organHolder.left_kidney.get_damage() > 65) || (src.organHolder.right_kidney && src.organHolder.right_kidney.get_damage() > 65)) + src.contract_disease(/datum/ailment/disease/kidney_failure,null,null,1) // liver if (!src.nodamage) if (!src.organHolder.liver || src.organHolder.liver.get_damage() >= 100) src.take_toxin_damage(2, 1) - else if (src.organHolder.liver.get_damage() >= 65 && prob(organHolder.liver.get_damage() * 0.2)) + else if (src.organHolder.liver.get_damage() >= 65 && (prob(organHolder.liver.get_damage() * 0.2) || src.organHolder.liver.get_damage() > 100)) src.contract_disease(/datum/ailment/disease/liver_failure,null,null,1) @@ -4494,14 +4504,14 @@ if (prob(25)) src.organHolder.pancreas.take_damage(0, 0, 3) - if (src.organHolder.pancreas.get_damage() >= 65 && prob(organHolder.pancreas.get_damage() * 0.2)) + if (src.organHolder.pancreas.get_damage() >= 65 && (prob(src.organHolder.pancreas.get_damage() * 0.2) || src.organHolder.liver.get_damage() > 100)) src.contract_disease(/datum/ailment/disease/pancreatitis,null,null,1) // appendix if (!src.nodamage) if (src.organHolder.appendix && src.organHolder.appendix.get_damage() >= 100) - src.organHolder.appendix.broken = 1 - else if (src.organHolder.appendix.get_damage() >= 65 && prob(organHolder.appendix.get_damage() * 0.2)) + src.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) + else if (src.organHolder.appendix.get_damage() >= 65 && prob(src.organHolder.appendix.get_damage() * 0.2)) src.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) // spleen if there's no spleen don't let the user regen blood naturally @@ -5766,6 +5776,12 @@ /mob/living/carbon/human/full_heal() if (src.organHolder) src.organHolder.heal_organs(10000, 10000, 10000, 100, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + if (src.organHolder.chest) + src.organHolder.chest.op_stage = 0 + if (src.organHolder.heart) + src.organHolder.heart.op_stage = 0 + if (src.organHolder.brain) + src.organHolder.brain.op_stage = 0 blinded = 0 bleeding = 0 diff --git a/code/obj/item/cigarette.dm b/code/obj/item/cigarette.dm index a5bd4ff5..f13eae49 100644 --- a/code/obj/item/cigarette.dm +++ b/code/obj/item/cigarette.dm @@ -161,12 +161,13 @@ else src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) - if (prob(30)) - if (H.organHolder && H.organHolder.left_lung) - H.organHolder.left_lung.take_damage(0, 0, 1) - if (prob(30)) - if (H.organHolder && H.organHolder.right_lung) - H.organHolder.right_lung.take_damage(0, 0, 1) + if (!H.organHolder.left_lung.robotic && H.organHolder.right_lung.robotic) + if (prob(30)) + if (H.organHolder && H.organHolder.left_lung) + H.organHolder.left_lung.take_damage(0, 0, 1) + if (prob(30)) + if (H.organHolder && H.organHolder.right_lung) + H.organHolder.right_lung.take_damage(0, 0, 1) else src.reagents.trans_to(M, 1) src.reagents.reaction(M, INGEST) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 13ba5d64..b80a5507 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -43,7 +43,7 @@ do_organ_damage(1, brute, burn, tox, probability, organ) - proc/do_organ_damage(var/heal = 0, var/brute, var/burn, var/tox, var/organ) + proc/do_organ_damage(var/heal, var/brute, var/burn, var/tox, var/organ) if (src.organ_list) var/obj/item/organ/O = donor.organHolder.organ_list[organ] @@ -374,20 +374,22 @@ if ("left_lung") if (!src.left_lung) return 0 - var/obj/item/organ/lung/myLeftLung = src.left_lung + var/obj/item/organ/lung/left/myLeftLung = src.left_lung myLeftLung.set_loc(location) myLeftLung.on_removal() src.left_lung = null + organ_list["left_lung"] = null handle_lungs_stamina() return myLeftLung if ("right_lung") if (!src.right_lung) return 0 - var/obj/item/organ/lung/myRightLung = src.right_lung + var/obj/item/organ/lung/right/myRightLung = src.right_lung myRightLung.set_loc(location) myRightLung.on_removal() src.right_lung = null + organ_list["right_lung"] = null handle_lungs_stamina() return myRightLung @@ -404,6 +406,7 @@ return 0 var/obj/item/organ/kidney/left/myleft_kidney = src.left_kidney myleft_kidney.set_loc(location) + myleft_kidney.on_removal() src.left_kidney = null organ_list["left_kidney"] = null return myleft_kidney @@ -412,6 +415,7 @@ return 0 var/obj/item/organ/kidney/right/myright_kidney = src.right_kidney myright_kidney.set_loc(location) + myright_kidney.on_removal() src.right_kidney = null organ_list["right_kidney"] = null return myright_kidney @@ -420,6 +424,7 @@ return 0 var/obj/item/organ/liver/myliver = src.liver myliver.set_loc(location) + myliver.on_removal() src.liver = null organ_list["liver"] = null return myliver @@ -428,6 +433,7 @@ return 0 var/obj/item/organ/stomach/mystomach = src.stomach mystomach.set_loc(location) + mystomach.on_removal() src.stomach = null organ_list["stomach"] = null return mystomach @@ -436,6 +442,7 @@ return 0 var/obj/item/organ/intestines/myintestines = src.intestines myintestines.set_loc(location) + myintestines.on_removal() src.intestines = null organ_list["intestines"] = null return myintestines @@ -444,6 +451,7 @@ return 0 var/obj/item/organ/spleen/myspleen = src.spleen myspleen.set_loc(location) + myspleen.on_removal() src.spleen = null organ_list["spleen"] = null return myspleen @@ -452,6 +460,7 @@ return 0 var/obj/item/organ/pancreas/mypancreas = src.pancreas mypancreas.set_loc(location) + mypancreas.on_removal() src.pancreas = null organ_list["pancreas"] = null return mypancreas @@ -461,6 +470,7 @@ var/obj/item/organ/appendix/myappendix = src.appendix myappendix.set_loc(location) + myappendix.on_removal() src.appendix = null organ_list["appendix"] = null @@ -788,8 +798,10 @@ I.reagents.trans_to(src.donor, 330) return 1 + //OK you're probably thinking why this in needed at all. It seemed the simplest way, to add and remove stamina based on the amount of lungs. + //change stamina modifies based on amount of working lungs. lungs w/ health > 0 - //lungs_changed works like this: if lungs_changed is != the num of working lungs, then apply the + //lungs_changed works like this: if lungs_changed is != the num of working lungs, then apply the stamina modifier proc/handle_lungs_stamina() var/working_lungs = src.get_working_lung_amt() switch (working_lungs) @@ -808,7 +820,7 @@ donor.remove_stam_mod_regen("double_lung_removal") donor.remove_stam_mod_max("double_lung_removal") donor.add_stam_mod_regen("single_lung_removal", -3) - donor.add_stam_mod_max("single_lung_removal", -75) + donor.add_stam_mod_max("single_lung_removal", -75) lungs_changed = 1 if (prob(20)) @@ -957,6 +969,14 @@ . += "
This brain has gone cold." else . += "
This brain has gone cold." + + attackby(obj/item/W as obj, mob/user as mob) + if (istype(W, /obj/item/device/healthanalyzer)) + var/obj/item/device/healthanalyzer/HA = W + if(HA.reagent_upgrade) + boutput(user, "
[src] - [src.get_damage()]") + return + ..() attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if (!ismob(M)) @@ -1135,27 +1155,28 @@ if (!H.organHolder) return ..() - if (user.find_in_hand(src) == user.r_hand && !H.organHolder.right_lung) - var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + if (H.organHolder.chest && H.organHolder.chest.op_stage == 2.0) + if (user.find_in_hand(src) == user.r_hand && !H.organHolder.right_lung) + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") - H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right lung socket!",\ - user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right lung socket!",\ - H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right lung socket!") + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right lung socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right lung socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right lung socket!") - user.u_equip(src) - H.organHolder.receive_organ(src, "right_lung", 2.0) - H.update_body() + user.u_equip(src) + H.organHolder.receive_organ(src, "right_lung", 2.0) + H.update_body() - else if (user.find_in_hand(src) == user.l_hand && !H.organHolder.left_lung) - var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + else if (user.find_in_hand(src) == user.l_hand && !H.organHolder.left_lung) + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") - H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left lung socket!",\ - user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left lung socket!",\ - H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left lung socket!") + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left lung socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left lung socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left lung socket!") - user.u_equip(src) - H.organHolder.receive_organ(src, "left_lung", 2.0) - H.update_body() + user.u_equip(src) + H.organHolder.receive_organ(src, "left_lung", 2.0) + H.update_body() else ..() @@ -2056,7 +2077,7 @@ if (!H.organHolder) return ..() - if (!H.organHolder.liver) + if (!H.organHolder.liver && H.organHolder.chest && H.organHolder.chest.op_stage == 3.0) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") @@ -2122,28 +2143,28 @@ if (!headSurgeryCheck(H)) user.show_text("You're going to need to remove that mask/helmet/glasses first.", "blue") return + if (H.organHolder.chest && H.organHolder.chest.op_stage == 7.0) + if (user.find_in_hand(src) == user.r_hand && !H.organHolder.right_kidney) + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") - if (user.find_in_hand(src) == user.r_hand && !H.organHolder.right_kidney) - var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") - - H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right kidney socket!",\ - user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right kidney socket!",\ - H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right kidney socket!") + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] right kidney socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] right kidney socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your right kidney socket!") - user.u_equip(src) - H.organHolder.receive_organ(src, "right_kidney", 2.0) - H.update_body() + user.u_equip(src) + H.organHolder.receive_organ(src, "right_kidney", 2.0) + H.update_body() - else if (user.find_in_hand(src) == user.l_hand && !H.organHolder.left_kidney) - var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") + else if (user.find_in_hand(src) == user.l_hand && !H.organHolder.left_kidney) + var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") - H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left kidney socket!",\ - user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left kidney socket!",\ - H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left kidney socket!") + H.tri_message("[user] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into [H == user ? "[his_or_her(H)]" : "[H]'s"] left kidney socket!",\ + user, "You [fluff] [src] into [user == H ? "your" : "[H]'s"] left kidney socket!",\ + H, "[H == user ? "You" : "[user]"] [fluff][fluff == "smoosh" || fluff == "squish" ? "es" : "s"] [src] into your left kidney socket!") - user.u_equip(src) - H.organHolder.receive_organ(src, "left_kidney", 2.0) - H.update_body() + user.u_equip(src) + H.organHolder.receive_organ(src, "left_kidney", 2.0) + H.update_body() else ..() @@ -2199,7 +2220,7 @@ if (!H.organHolder) return ..() - if (!H.organHolder.stomach) + if (!H.organHolder.stomach && H.organHolder.chest && H.organHolder.chest.op_stage == 4.0) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") @@ -2253,7 +2274,7 @@ if (!H.organHolder) return ..() - if (!H.organHolder.intestines) + if (!H.organHolder.intestines && H.organHolder.chest && H.organHolder.chest.op_stage == 4.0) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") @@ -2307,7 +2328,7 @@ if (!H.organHolder) return ..() - if (!H.organHolder.spleen) + if (!H.organHolder.spleen && H.organHolder.chest && H.organHolder.chest.op_stage == 3.0) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") @@ -2361,7 +2382,7 @@ if (!H.organHolder) return ..() - if (!H.organHolder.pancreas) + if (!H.organHolder.pancreas && H.organHolder.chest && H.organHolder.chest.op_stage == 6.0) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") @@ -2414,7 +2435,7 @@ if (!H.organHolder) return ..() - if (!H.organHolder.appendix) + if (!H.organHolder.appendix && H.organHolder.chest && H.organHolder.chest.op_stage == 3.0) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index b59c4ebf..2dc275fe 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -160,7 +160,7 @@ organ_data1 += organ_health_scan("appendix", H) if (organ_data1) - organ_data = "Scans Indicate Organ Damage:" + organ_data = "Scans Indicate Organ Damage:" organ_data += organ_data1 else @@ -221,7 +221,7 @@ else return null else - return "
The patient's [input] is missing!" + return "
The patient's [input] is missing!" /proc/update_medical_record(var/mob/living/carbon/human/M) diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 76b0accf..5c281129 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -564,8 +564,10 @@ 2.0 = (G)cut is remove spleen || (D)cut is remove lungs R/L 3.0 = (G)cut is remove appendix || (D)cut is remove liver 4.0 = (G)cut is remove stomach || (D)cut is remove intestines - 5.0 = (G)cut -> 6.0 || (D)cut -> 8.0 - 6.0 = + 5.0 = (G)cut -> 6.0 || (D)cut -> 7.0 + 6.0 = (G)cut is remove pancreas + 7.0 = (G)cut is remove kidneys + 8.0 = G = INTENT_GRAB G = INTENT_DISARM @@ -613,9 +615,9 @@ return 1 - //second cut, path for appendix/liver if (1.0) + //second cut, path for appendix/liver if (surgeon.a_intent == INTENT_GRAB) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) @@ -638,6 +640,29 @@ patient.organHolder.chest.op_stage = 3.0 return 1 + //second cut, path for stomach/Intestines + else if (surgeon.a_intent == INTENT_DISARM) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] stomach/intestines area open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] stomach/intestines area open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your stomach/intestines area open with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 4.0 + return 1 + //remove lungs or spleen if (2.0) //remove spleen with this cut From 641924a673e9afb6a7ffc6713a0ad4c554e94b5b Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 3 Aug 2018 04:15:20 -0400 Subject: [PATCH 048/105] fix surgery issue with kidneys and not cutting when going down a bad path. also. remove some debug logging --- code/obj/item/organ.dm | 28 ++++++------- code/procs/surgery.dm | 91 +++++++++++++++++++++++++++--------------- 2 files changed, 71 insertions(+), 48 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index b80a5507..351a759d 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -35,29 +35,27 @@ proc/damage_organs(var/brute, var/burn, var/tox, var/probability, var/list/organs) for (var/organ in organs) if (prob(probability)) - do_organ_damage(0, brute, burn, tox, probability, organ) + do_organ_damage(0, brute, burn, tox, organ) proc/heal_organs(var/brute, var/burn, var/tox, var/probability, var/list/organs) for (var/organ in organs) if (prob(probability)) - do_organ_damage(1, brute, burn, tox, probability, organ) + do_organ_damage(1, brute, burn, tox, organ) - proc/do_organ_damage(var/heal, var/brute, var/burn, var/tox, var/organ) - if (src.organ_list) - var/obj/item/organ/O = donor.organHolder.organ_list[organ] + proc/do_organ_damage(var/heal, var/brute, var/burn, var/tox, var/organ as text) + if (islist(src.organ_list)) + if (src.organ_list[organ]) + var/obj/item/organ/O = src.organ_list[organ] - if (O && istype(O, /obj/item/organ)) - if (heal) - O.heal_damage(brute, burn, tox) - donor.visible_message("[donor] damaged [organ] by [brute], [burn], [tox]!") - else - O.take_damage(brute, burn, tox) - donor.visible_message("[donor] healed [organ] by [brute], [burn], [tox]!") - return 1 + if (O && istype(O, /obj/item/organ)) + if (heal) + O.heal_damage(brute, burn, tox) + else + O.take_damage(brute, burn, tox) + return 1 return 0 - //organs should not perform their functions if they have 0 health proc/get_working_kidney_amt() var/count = 0 @@ -917,7 +915,6 @@ src.brute_dam += brute src.burn_dam += burn src.tox_dam += tox - donor.visible_message("[src] damaged for [brute], [burn], [tox]!", 1) if (ishuman(donor)) var/mob/living/carbon/human/H = donor @@ -933,7 +930,6 @@ src.brute_dam = max(0, src.brute_dam - brute) src.burn_dam = max(0, src.burn_dam - burn) src.tox_dam = max(0, src.tox_dam - tox) - donor.visible_message("[src] healed for [brute], [burn], [tox]!", 1) return 1 diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 5c281129..31499f4c 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -558,6 +558,11 @@ /* chest op_stage description + G = INTENT_GRAB + D = INTENT_DISARM + cut = scalpel + saw = circular saw + op_stage = (actions you can take) -> where it will send you 0.0 = (G)cut -> 1.0 || (D)cut -> 5.0 1.0 = (G)cut -> 3.0 || (D)cut -> 4.0 || (G)saw -> 2.0 @@ -567,9 +572,7 @@ 5.0 = (G)cut -> 6.0 || (D)cut -> 7.0 6.0 = (G)cut is remove pancreas 7.0 = (G)cut is remove kidneys - 8.0 = - G = INTENT_GRAB - G = INTENT_DISARM + remove spleen = (G)cut - (G)saw - (G)cut remove lungs = (G)cut - (G)saw - (D)cut - Right/Left hands for removing R/L lungs @@ -580,7 +583,7 @@ remove stomach = (G)cut - (D)cut - (G)cut remove intestines = (G)cut - (D)cut - (D)cut - remove pancreas = (D)cut - (G)cut - (D)cut + remove pancreas = (D)cut - (G)cut - (G)cut remove kidneys = (D)cut - (D)cut - (G)cut - Right/Left hands for removing R/L kidneys @@ -670,6 +673,10 @@ if (patient.organHolder.spleen) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.spleen) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff2]!") patient.TakeDamage("chest", damage_high, 0) @@ -692,9 +699,13 @@ //remove lungs else if (surgeon.a_intent == INTENT_DISARM) //remove left lung - if (surgeon.find_in_hand(src) == surgeon.l_hand && patient.organHolder.left_lung) + if (surgeon.find_in_hand(src) == surgeon.l_hand) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.left_lung) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff2]!") patient.TakeDamage("chest", damage_high, 0) @@ -716,9 +727,13 @@ return 1 //remove right lung - else if (surgeon.find_in_hand(src) == surgeon.r_hand && patient.organHolder.right_lung) + else if (surgeon.find_in_hand(src) == surgeon.r_hand) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.right_lung) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff2]!") patient.TakeDamage("chest", damage_high, 0) @@ -746,15 +761,16 @@ if (surgeon.a_intent == INTENT_GRAB) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.appendix) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) take_bleeding_damage(patient, surgeon, damage_low) return 1 - if (!patient.organHolder.appendix) - return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] appendix out with [src]!",\ surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] appendix out with [src]!",\ patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your appendix out with [src]!") @@ -774,15 +790,16 @@ playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.liver) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) take_bleeding_damage(patient, surgeon, damage_low) return 1 - if (!patient.organHolder.liver) - return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] liver out with [src]!",\ surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] liver out with [src]!",\ patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your liver out with [src]!") @@ -803,15 +820,16 @@ if (surgeon.a_intent == INTENT_GRAB) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.stomach) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) take_bleeding_damage(patient, surgeon, damage_low) return 1 - if (!patient.organHolder.stomach) - return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] stomach out with [src]!",\ surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] stomach out with [src]!",\ patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your stomach out with [src]!") @@ -831,15 +849,16 @@ playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.intestines) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) take_bleeding_damage(patient, surgeon, damage_low) return 1 - if (!patient.organHolder.intestines) - return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] intestines out with [src]!",\ surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] intestines out with [src]!",\ patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your intestines out with [src]!") @@ -866,9 +885,6 @@ take_bleeding_damage(patient, surgeon, damage_low) return 1 - if (!patient.organHolder.pancreas) - return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] something something pancreas with [src]!",\ surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] something something pancreas with [src]!",\ patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your something something pancreas with [src]!") @@ -894,9 +910,6 @@ take_bleeding_damage(patient, surgeon, damage_low) return 1 - if (!patient.organHolder.liver) - return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] something something kidneys with [src]!",\ surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] something something kidneys with [src]!",\ patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your something something kidneys with [src]!") @@ -917,14 +930,16 @@ if (surgeon.a_intent == INTENT_GRAB) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.pancreas) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) take_bleeding_damage(patient, surgeon, damage_low) return 1 - if (!patient.organHolder.pancreas) - return 1 patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas out with [src]!",\ surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] pancreas out with [src]!",\ @@ -944,15 +959,19 @@ if (7.0) if (surgeon.a_intent == INTENT_GRAB) //remove left kidney - if (surgeon.find_in_hand(src) == surgeon.l_hand && patient.organHolder.left_kidney) + if (surgeon.find_in_hand(src) == surgeon.l_hand) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.left_kidney) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_high, 0) - take_bleeding_damage(patient, surgeon, damage_high) + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) return 1 + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left kidney with [src]!",\ surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left kidney with [src]!",\ patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left kidney with [src]!") @@ -968,15 +987,19 @@ return 1 //remove right kidney - else if (surgeon.find_in_hand(src) == surgeon.r_hand && patient.organHolder.right_kidney) + else if (surgeon.find_in_hand(src) == surgeon.r_hand) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.right_kidney) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_high, 0) - take_bleeding_damage(patient, surgeon, damage_high) + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) return 1 + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right kidney with [src]!",\ surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right kidney with [src]!",\ patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right kidney with [src]!") @@ -991,7 +1014,11 @@ patient.organHolder.drop_organ("right_kidney") return 1 + else + src.surgeryConfusion(patient, surgeon, damage_high) + return 1 + src.surgeryConfusion(patient, surgeon, damage_low) else return 0 From a1b72dfaa43b038e3176a6a78b30aec6e6b7b711 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 3 Aug 2018 16:10:15 -0400 Subject: [PATCH 049/105] fix disease cure with removal. fix kidney depletion rate for chems. fix organ health check --- code/datums/chemistry/Chemistry-Reagents.dm | 2 +- .../diseases/organ_diseases/appendicitis.dm | 2 +- .../diseases/organ_diseases/kidney_failure.dm | 2 +- .../diseases/organ_diseases/liver_failure.dm | 2 +- .../diseases/organ_diseases/pancreatitis.dm | 2 +- .../organ_diseases/respiratory_failure.dm | 2 +- .../randomevents/minor/appendicitis_event.dm | 5 +++-- code/obj/item/organ.dm | 19 +++++++++++-------- code/procs/surgery.dm | 2 +- 9 files changed, 21 insertions(+), 17 deletions(-) diff --git a/code/datums/chemistry/Chemistry-Reagents.dm b/code/datums/chemistry/Chemistry-Reagents.dm index 08eb126b..f05f2f4a 100644 --- a/code/datums/chemistry/Chemistry-Reagents.dm +++ b/code/datums/chemistry/Chemistry-Reagents.dm @@ -144,7 +144,7 @@ datum deplRate /= 2 if (H.organHolder && (!H.organHolder.liver || H.organHolder.liver.get_damage() >= 100)) deplRate /= 2 - if (H.organHolder && (!H.organHolder.get_working_kidney_amt() == 0)) + if (H.organHolder && (H.organHolder.get_working_kidney_amt() == 0)) deplRate /= 2 holder.remove_reagent(src.id, deplRate) //By default it slowly disappears. diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm index bf0669f0..3115e9cb 100644 --- a/code/datums/diseases/organ_diseases/appendicitis.dm +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -19,7 +19,7 @@ var/mob/living/carbon/human/H = affected_mob - if (!H.organHolder && !H.organHolder.appendix) + if (!H.organHolder || !H.organHolder.appendix) H.cure_disease(D) return diff --git a/code/datums/diseases/organ_diseases/kidney_failure.dm b/code/datums/diseases/organ_diseases/kidney_failure.dm index 6a773390..646d8736 100644 --- a/code/datums/diseases/organ_diseases/kidney_failure.dm +++ b/code/datums/diseases/organ_diseases/kidney_failure.dm @@ -20,7 +20,7 @@ var/mob/living/carbon/human/H = affected_mob - if (!H.organHolder && (!H.organHolder.left_kidney && !H.organHolder.right_kidney)) + if (!H.organHolder || (!H.organHolder.left_kidney && !H.organHolder.right_kidney)) H.cure_disease(D) return diff --git a/code/datums/diseases/organ_diseases/liver_failure.dm b/code/datums/diseases/organ_diseases/liver_failure.dm index d77c8e4d..700dc8a5 100644 --- a/code/datums/diseases/organ_diseases/liver_failure.dm +++ b/code/datums/diseases/organ_diseases/liver_failure.dm @@ -19,7 +19,7 @@ var/mob/living/carbon/human/H = affected_mob - if (!H.organHolder && !H.organHolder.liver) + if (!H.organHolder || !H.organHolder.liver) H.cure_disease(D) return diff --git a/code/datums/diseases/organ_diseases/pancreatitis.dm b/code/datums/diseases/organ_diseases/pancreatitis.dm index 84162dce..389bea8a 100644 --- a/code/datums/diseases/organ_diseases/pancreatitis.dm +++ b/code/datums/diseases/organ_diseases/pancreatitis.dm @@ -19,7 +19,7 @@ var/mob/living/carbon/human/H = affected_mob - if (!H.organHolder && !H.organHolder.pancreas) + if (!H.organHolder || !H.organHolder.pancreas) H.cure_disease(D) return diff --git a/code/datums/diseases/organ_diseases/respiratory_failure.dm b/code/datums/diseases/organ_diseases/respiratory_failure.dm index 8c7f0423..d1d0797e 100644 --- a/code/datums/diseases/organ_diseases/respiratory_failure.dm +++ b/code/datums/diseases/organ_diseases/respiratory_failure.dm @@ -22,7 +22,7 @@ var/mob/living/carbon/human/H = affected_mob //to cure, gotta remove BOTH lungs. Don't want to make it too easy for ya - if (!H.organHolder && (!H.organHolder.left_lung && !H.organHolder.right_lung)) + if (!H.organHolder|| (!H.organHolder.left_lung && !H.organHolder.right_lung)) H.cure_disease(D) return diff --git a/code/datums/randomevents/minor/appendicitis_event.dm b/code/datums/randomevents/minor/appendicitis_event.dm index 351a9e9e..3f9b1c35 100644 --- a/code/datums/randomevents/minor/appendicitis_event.dm +++ b/code/datums/randomevents/minor/appendicitis_event.dm @@ -13,5 +13,6 @@ if (potential_victims.len) var/num = rand(1, 3) for (var/i = 0, i < num, i++) - var/mob/living/carbon/human/patient_zero = pick(potential_victims) - patient_zero.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) \ No newline at end of file + var/mob/living/carbon/human/patient = pick(potential_victims) + if (patient.organHolder && patient.organHolder.appendix && !patient.organHolder.appendix.robotic) + patient.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) \ No newline at end of file diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 351a759d..291f7bd5 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -885,6 +885,17 @@ rand_pos = 1 health = 100 //organs can take damage now, hurray + attackby(obj/item/W as obj, mob/user as mob) + if (istype(W, /obj/item/device/healthanalyzer)) + var/obj/item/device/healthanalyzer/HA = W + if(HA.reagent_upgrade) + boutput(user, "
[src] - [src.get_damage()]") + return + else + src.take_damage(W.force, 0, 0, W.hit_type) + + ..() + New() ..() spawn(5) @@ -966,14 +977,6 @@ else . += "
This brain has gone cold." - attackby(obj/item/W as obj, mob/user as mob) - if (istype(W, /obj/item/device/healthanalyzer)) - var/obj/item/device/healthanalyzer/HA = W - if(HA.reagent_upgrade) - boutput(user, "
[src] - [src.get_damage()]") - return - ..() - attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if (!ismob(M)) return diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 31499f4c..0195ca46 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -566,7 +566,7 @@ op_stage = (actions you can take) -> where it will send you 0.0 = (G)cut -> 1.0 || (D)cut -> 5.0 1.0 = (G)cut -> 3.0 || (D)cut -> 4.0 || (G)saw -> 2.0 - 2.0 = (G)cut is remove spleen || (D)cut is remove lungs R/L + 2.0 = (G)cut is remove splee32n || (D)cut is remove lungs R/L 3.0 = (G)cut is remove appendix || (D)cut is remove liver 4.0 = (G)cut is remove stomach || (D)cut is remove intestines 5.0 = (G)cut -> 6.0 || (D)cut -> 7.0 From ad535102924e5bc55e1f358f8e59f13c4408c1eb Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 3 Aug 2018 16:28:55 -0400 Subject: [PATCH 050/105] add cyberorgans to robo manufacturer --- code/datums/manufacturing.dm | 80 ++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/code/datums/manufacturing.dm b/code/datums/manufacturing.dm index 622e4e7d..03de54da 100644 --- a/code/datums/manufacturing.dm +++ b/code/datums/manufacturing.dm @@ -745,6 +745,86 @@ create = 1 category = "Component" +/datum/manufacture/cyberappendix + name = "Cyberappendix" + item_paths = list("MET-1","CON-1","ALL") + item_names = list("Metal","Conductive Material","Any Material") + item_amounts = list(1,1,1) + item_outputs = list(/obj/item/organ/appendix/cyber) + time = 25 + create = 1 + category = "Component" + +/datum/manufacture/cyberpancreas + name = "Cyberpancreas" + item_paths = list("MET-1","CON-1","ALL") + item_names = list("Metal","Conductive Material","Any Material") + item_amounts = list(1,1,1) + item_outputs = list(/obj/item/organ/pancreas/cyber) + time = 25 + create = 1 + category = "Component" + +/datum/manufacture/cyberspleen + name = "Cyberspleen" + item_paths = list("MET-1","CON-1","ALL") + item_names = list("Metal","Conductive Material","Any Material") + item_amounts = list(1,1,1) + item_outputs = list(/obj/item/organ/spleen/cyber) + time = 25 + create = 1 + category = "Component" + +/datum/manufacture/cyberintestines + name = "Cyberintestines" + item_paths = list("MET-1","CON-1","ALL") + item_names = list("Metal","Conductive Material","Any Material") + item_amounts = list(1,1,1) + item_outputs = list(/obj/item/organ/intestines/cyber) + time = 25 + create = 1 + category = "Component" + +/datum/manufacture/cyberstomach + name = "Cyberstomach" + item_paths = list("MET-1","CON-1","ALL") + item_names = list("Metal","Conductive Material","Any Material") + item_amounts = list(1,1,1) + item_outputs = list(/obj/item/organ/stomach/cyber) + time = 25 + create = 1 + category = "Component" + +/datum/manufacture/cyberkidney + name = "Cyberkidney" + item_paths = list("MET-1","CON-1","ALL") + item_names = list("Metal","Conductive Material","Any Material") + item_amounts = list(1,1,1) + item_outputs = list(/obj/item/organ/kidney/cyber) + time = 25 + create = 1 + category = "Component" + +/datum/manufacture/cyberliver + name = "Cyberliver" + item_paths = list("MET-1","CON-1","ALL") + item_names = list("Metal","Conductive Material","Any Material") + item_amounts = list(1,1,1) + item_outputs = list(/obj/item/organ/liver/cyber) + time = 25 + create = 1 + category = "Component" + +/datum/manufacture/cyberlung + name = "Cyberlung" + item_paths = list("MET-1","CON-1","ALL") + item_names = list("Metal","Conductive Material","Any Material") + item_amounts = list(1,1,1) + item_outputs = list(/obj/item/organ/lung/cyber) + time = 25 + create = 1 + category = "Component" + /datum/manufacture/cyberbutt name = "Cyberbutt" item_paths = list("MET-1","CON-1","ALL") From 8755a56109e1d63858f7ba848992e9089adb8e1d Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 3 Aug 2018 16:35:24 -0400 Subject: [PATCH 051/105] ejectibles --- code/mob/living/carbon/human.dm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 72d584e8..dff6d81c 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -6230,6 +6230,38 @@ processed += organHolder.right_lung if (prob(25) && organHolder.right_lung.loc == src) ret += organHolder.right_lung + if (organHolder.right_kidney) + processed += organHolder.right_kidney + if (prob(25) && organHolder.right_kidney.loc == src) + ret += organHolder.right_kidney + if (organHolder.left_kidney) + processed += organHolder.left_kidney + if (prob(25) && organHolder.left_kidney.loc == src) + ret += organHolder.left_kidney + if (organHolder.liver) + processed += organHolder.liver + if (prob(25) && organHolder.liver.loc == src) + ret += organHolder.liver + if (organHolder.pancreas) + processed += organHolder.pancreas + if (prob(25) && organHolder.pancreas.loc == src) + ret += organHolder.pancreas + if (organHolder.spleen) + processed += organHolder.spleen + if (prob(25) && organHolder.spleen.loc == src) + ret += organHolder.spleen + if (organHolder.appendix) + processed += organHolder.appendix + if (prob(25) && organHolder.appendix.loc == src) + ret += organHolder.appendix + if (organHolder.stomach) + processed += organHolder.stomach + if (prob(25) && organHolder.stomach.loc == src) + ret += organHolder.stomach + if (organHolder.intestines) + processed += organHolder.intestines + if (prob(25) && organHolder.intestines.loc == src) + ret += organHolder.intestines if (prob(50)) var/obj/item/clothing/head/wig/W = create_wig() if (W) From 768f25356e01b5d0872999a0330cb3869c8db775 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 3 Aug 2018 21:04:51 -0400 Subject: [PATCH 052/105] remove useless stuff --- code/obj/item/organ.dm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 291f7bd5..895480d0 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -2092,15 +2092,6 @@ ..() return - // on_mob_life(var/mob/M) - // if(!M) M = holder.my_atom - // if(holder.has_reagent("ethanol")) holder.remove_reagent("ethanol", 8) - // if (M.get_toxin_damage() <= 25) - // M.take_toxin_damage(-2) - // M.updatehealth() - // ..(M) - // return - /obj/item/organ/liver/cyber name = "cyberliver" desc = "A fancy robotic liver to replace one that someone's lost!" From f883e163ac7de2a5b7c27b7b9997d5bff08f5949 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 3 Aug 2018 21:07:22 -0400 Subject: [PATCH 053/105] remove zomment in carbon.dm --- code/mob/living/carbon.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/mob/living/carbon.dm b/code/mob/living/carbon.dm index 5a265e91..5535db9f 100644 --- a/code/mob/living/carbon.dm +++ b/code/mob/living/carbon.dm @@ -290,7 +290,6 @@ src.reagents.clear_reagents() ..() -//Kind of want to remove this and just move it into the new take_organ_damage proc /mob/living/carbon/take_brain_damage(var/amount) if (..()) return From c5c0d7753abae9eeac47b92529c8e6774bbe4197 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Tue, 7 Aug 2018 21:38:21 -0400 Subject: [PATCH 054/105] remove extraneous comments, lines. general cleanup --- code/datums/chemistry/Reagents-Base.dm | 5 ---- code/datums/chemistry/Reagents-Medical.dm | 9 ++---- .../diseases/organ_diseases/kidney_failure.dm | 30 +++++++++---------- .../diseases/organ_diseases/liver_failure.dm | 28 ++++++++--------- .../diseases/organ_diseases/pancreatitis.dm | 30 +++++++++---------- .../organ_diseases/respiratory_failure.dm | 30 +++++++++---------- .../randomevents/minor/appendicitis_event.dm | 2 +- code/mob/living/carbon/human.dm | 8 +---- code/obj/item/organ.dm | 8 +++-- code/procs/scanprocs.dm | 18 ++--------- code/procs/surgery.dm | 4 --- 11 files changed, 71 insertions(+), 101 deletions(-) diff --git a/code/datums/chemistry/Reagents-Base.dm b/code/datums/chemistry/Reagents-Base.dm index fdd03dff..e33c9f6e 100644 --- a/code/datums/chemistry/Reagents-Base.dm +++ b/code/datums/chemistry/Reagents-Base.dm @@ -176,10 +176,8 @@ datum if (prob(25)) if (H.organHolder.liver && !H.organHolder.liver.robotic) H.organHolder.liver.take_damage(0, 0, rand(1,2)) - ..() - hydrogen name = "hydrogen" id = "hydrogen" @@ -493,10 +491,7 @@ datum M.paralysis += 3 * severity M.weakened += 4 * severity - if (prob(8)) - - var/mob/living/carbon/human/H = M if (istype(H) && H.organHolder.pancreas) H.organHolder.pancreas.take_damage(0, 0, rand(1,2)) diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index ecc23a90..f559323e 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -1208,7 +1208,7 @@ datum if (H.organHolder.right_lung && H.organHolder.right_lung.get_damage() < 90 && H.organHolder.right_lung.get_damage() > 0) H.organHolder.spleen.heal_damage(2, 2, 2, "right_lung") M.updatehealth() - ..(M) + ..(M) //heals liver/kidneys/stomach/intestines medical/organ_drug2 @@ -1242,9 +1242,8 @@ datum if (H.organHolder.intestines && H.organHolder.intestines.get_damage() < 90 && H.organHolder.intestines.get_damage() > 0) H.organHolder.intestines.heal_damage(2, 2, 2) - M.updatehealth() - ..(M) + ..(M) //heals appendix/pancreas medical/organ_drug3 @@ -1259,7 +1258,6 @@ datum depletion_rate = 0.2 value = 3 - on_mob_life(var/mob/M) if(!M) M = holder.my_atom if (istype(M, /mob/living/carbon/human)) @@ -1267,8 +1265,7 @@ datum if (H.organHolder.appendix && H.organHolder.appendix.get_damage() < 90 && H.organHolder.appendix.get_damage() > 0) H.organHolder.appendix.heal_damage(2, 2, 2) - if (H.organHolder.pancreas && H.organHolder.pancreas.get_damage() < 90 && H.organHolder.pancreas.get_damage() > 0) H.organHolder.pancreas.heal_damage(2, 2, 2) M.updatehealth() - ..(M) + ..(M) diff --git a/code/datums/diseases/organ_diseases/kidney_failure.dm b/code/datums/diseases/organ_diseases/kidney_failure.dm index 646d8736..cb804f84 100644 --- a/code/datums/diseases/organ_diseases/kidney_failure.dm +++ b/code/datums/diseases/organ_diseases/kidney_failure.dm @@ -31,33 +31,33 @@ switch (D.stage) if (1) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.cure_disease(D) + boutput(H, "You feel better.") + H.cure_disease(D) return - if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(8)) H.emote(pick("pale", "shudder")) if (prob(5)) - boutput(affected_mob, "Your abdomen area hurts!") + boutput(H, "Your abdomen area hurts!") if (2) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.resistances += src.type - affected_mob.ailments -= src + boutput(H, "You feel better.") + H.resistances += src.type + H.ailments -= src return - if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(8)) H.emote(pick("pale", "groan")) if (prob(5)) - boutput(affected_mob, "Your back aches terribly!") + boutput(H, "Your back aches terribly!") if (prob(3)) - boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") + boutput(H, "You feel excruciating pain in your upper-right adbomen!") // H.organHolder.takekidney - if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (prob(5)) H.emote(pick("faint", "collapse", "groan")) if (3) - if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) + if (prob(8)) H.emote(pick("twitch", "gasp")) if (prob(20)) - affected_mob.emote(pick("twitch", "gasp")) + H.emote(pick("twitch", "gasp")) H.organHolder.damage_organs(0, 0, 3, 20, list("left_kidney", "right_kidney")) H.losebreath++ - affected_mob.take_toxin_damage(1) - affected_mob.updatehealth() + H.take_toxin_damage(1) + H.updatehealth() diff --git a/code/datums/diseases/organ_diseases/liver_failure.dm b/code/datums/diseases/organ_diseases/liver_failure.dm index 700dc8a5..5c188b76 100644 --- a/code/datums/diseases/organ_diseases/liver_failure.dm +++ b/code/datums/diseases/organ_diseases/liver_failure.dm @@ -29,30 +29,30 @@ switch (D.stage) if (1) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.cure_disease(D) + boutput(H, "You feel better.") + H.cure_disease(D) return - if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(8)) H.emote(pick("pale", "shudder")) if (prob(5)) - boutput(affected_mob, "Your abdomen area hurts!") + boutput(H, "Your abdomen area hurts!") if (2) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.resistances += src.type - affected_mob.ailments -= src + boutput(H, "You feel better.") + H.resistances += src.type + H.ailments -= src return - if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(8)) H.emote(pick("pale", "groan")) if (prob(5)) - boutput(affected_mob, "Your back aches terribly!") + boutput(H, "Your back aches terribly!") if (prob(3)) - boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") + boutput(H, "You feel excruciating pain in your upper-right adbomen!") // H.organHolder.takeliver - if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (prob(5)) H.emote(pick("faint", "collapse", "groan")) if (3) if (prob(20)) - affected_mob.emote(pick("twitch", "groan")) + H.emote(pick("twitch", "groan")) H.organHolder.liver.take_damage(0, 0, 3) - affected_mob.take_toxin_damage(1) - affected_mob.updatehealth() + H.take_toxin_damage(1) + H.updatehealth() diff --git a/code/datums/diseases/organ_diseases/pancreatitis.dm b/code/datums/diseases/organ_diseases/pancreatitis.dm index 389bea8a..6738de50 100644 --- a/code/datums/diseases/organ_diseases/pancreatitis.dm +++ b/code/datums/diseases/organ_diseases/pancreatitis.dm @@ -29,32 +29,32 @@ switch (D.stage) if (1) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.cure_disease(D) + boutput(H, "You feel better.") + H.cure_disease(D) return - if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(8)) H.emote(pick("pale", "shudder")) if (prob(5)) - boutput(affected_mob, "Your abdomen area hurts!") + boutput(H, "Your abdomen area hurts!") if (2) if (prob(1) && prob(10)) - affected_mob.cure_disease(D) - boutput(affected_mob, "You feel better.") + H.cure_disease(D) + boutput(H, "You feel better.") return - if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(8)) H.emote(pick("pale", "groan")) if (prob(5)) - boutput(affected_mob, "Your back aches terribly!") + boutput(H, "Your back aches terribly!") if (prob(3)) - boutput(affected_mob, "You feel excruciating pain in your upper-right adbomen!") + boutput(H, "You feel excruciating pain in your upper-right adbomen!") // H.organHolder.takepancreas - if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (prob(5)) H.emote(pick("faint", "collapse", "groan")) if (3) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.cure_disease(D) + boutput(H, "You feel better.") + H.cure_disease(D) if (prob(20)) - affected_mob.emote(pick("pale", "groan")) + H.emote(pick("pale", "groan")) H.organHolder.pancreas.take_damage(0, 0, 3) - affected_mob.take_toxin_damage(1) - affected_mob.updatehealth() + H.take_toxin_damage(1) + H.updatehealth() diff --git a/code/datums/diseases/organ_diseases/respiratory_failure.dm b/code/datums/diseases/organ_diseases/respiratory_failure.dm index d1d0797e..58029f31 100644 --- a/code/datums/diseases/organ_diseases/respiratory_failure.dm +++ b/code/datums/diseases/organ_diseases/respiratory_failure.dm @@ -36,33 +36,33 @@ switch (D.stage) if (1) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.cure_disease(D) + boutput(H, "You feel better.") + H.cure_disease(D) return - if (prob(8)) affected_mob.emote(pick("pale", "shudder")) + if (prob(8)) H.emote(pick("pale", "shudder")) if (prob(5)) - boutput(affected_mob, "Your ribs hurt!") + boutput(H, "Your ribs hurt!") if (2) if (prob(1) && prob(10)) - boutput(affected_mob, "You feel better.") - affected_mob.resistances += src.type - affected_mob.ailments -= src + boutput(H, "You feel better.") + H.resistances += src.type + H.ailments -= src return - if (prob(8)) affected_mob.emote(pick("pale", "groan")) + if (prob(8)) H.emote(pick("pale", "groan")) if (prob(10)) - boutput(affected_mob, "It hurts to breathe!") + boutput(H, "It hurts to breathe!") H.losebreath++ - if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) + if (prob(5)) H.emote(pick("faint", "collapse", "groan")) if (3) - if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) + if (prob(8)) H.emote(pick("twitch", "gasp")) if (prob(20)) - affected_mob.emote(pick("twitch", "gasp")) - boutput(affected_mob, "You can hardly breathe due to the pain!") + H.emote(pick("twitch", "gasp")) + boutput(H, "You can hardly breathe due to the pain!") H.organHolder.damage_organs(0, 0, 3, 60, list("left_lung", "right_lung")) H.losebreath+=2 - affected_mob.take_oxygen_deprivation(1) - affected_mob.updatehealth() + H.take_oxygen_deprivation(1) + H.updatehealth() diff --git a/code/datums/randomevents/minor/appendicitis_event.dm b/code/datums/randomevents/minor/appendicitis_event.dm index 3f9b1c35..4c03b15d 100644 --- a/code/datums/randomevents/minor/appendicitis_event.dm +++ b/code/datums/randomevents/minor/appendicitis_event.dm @@ -14,5 +14,5 @@ var/num = rand(1, 3) for (var/i = 0, i < num, i++) var/mob/living/carbon/human/patient = pick(potential_victims) - if (patient.organHolder && patient.organHolder.appendix && !patient.organHolder.appendix.robotic) + if (!ismonkey(patient) && patient.organHolder && patient.organHolder.appendix && !patient.organHolder.appendix.robotic) patient.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) \ No newline at end of file diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index dff6d81c..ed62c270 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -2218,7 +2218,7 @@ . += "
[src.name] no longer has a skull in [t_his] head, [t_his] face is just empty skin mush!" else if (!oH.head) . += "
[src.name] has been decapitated!" - + if (oH.head) if (((src.wear_mask && src.wear_mask.see_face) || !src.wear_mask) && ((src.head && src.head.see_face) || !src.head)) if (!oH.right_eye) @@ -3945,7 +3945,6 @@ canmove = 1 - //Kyle, add lung damage and handling cyber lungs maybe proc/handle_breath(datum/gas_mixture/breath) if (src.nodamage) return @@ -4477,7 +4476,6 @@ if ((src.organHolder.left_lung && src.organHolder.left_lung.get_damage() > 65) || (src.organHolder.right_lung && src.organHolder.right_lung.get_damage() > 65)) src.contract_disease(/datum/ailment/disease/respiratory_failure,null,null,1) - // kdineys if (!src.nodamage) if (src.organHolder.get_working_kidney_amt() == 0) @@ -4494,7 +4492,6 @@ else if (src.organHolder.liver.get_damage() >= 65 && (prob(organHolder.liver.get_damage() * 0.2) || src.organHolder.liver.get_damage() > 100)) src.contract_disease(/datum/ailment/disease/liver_failure,null,null,1) - // pancreas if there's no pancreas, user does not generate insulin if they have sugar in their body. if (!src.nodamage) if (src.organHolder.pancreas && src.organHolder.pancreas.get_damage() < 100) @@ -6573,9 +6570,7 @@ /mob/living/carbon/human/take_toxin_damage(var/amount, var/ignore) if (..()) return - if (!ignore) - if (amount > 1 && src.organHolder) if (prob(30)) if (src.organHolder.left_kidney) @@ -6586,5 +6581,4 @@ if (prob(30)) if (src.organHolder.liver) src.organHolder.liver.take_damage(0, 0, amount/40) - return \ No newline at end of file diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 895480d0..b4a33294 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -28,7 +28,7 @@ var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt", "left_kidney", "right_kidney", "liver", "stomach", "intestines", "spleen", "pancreas", "appendix") - //made these because I have no idea what the take_damage/heal_damage procs are doing in obj/item/organ. Something with bones I guess, it doesn't seem to effect the obj health var which I'm using + //(damage|heal)_organs used for effecting a lot of organs at once just by supplying a list and a damage amount. //probability, num 0-100 for whether or not to damage an organ found //organs, list of organs to damage. give it induvidual organs like "left_lung", not "lungs" @@ -43,6 +43,7 @@ do_organ_damage(1, brute, burn, tox, organ) + //calls (heal|take)_damage on induvidual organ specified attached to this organHolder proc/do_organ_damage(var/heal, var/brute, var/burn, var/tox, var/organ as text) if (islist(src.organ_list)) if (src.organ_list[organ]) @@ -664,6 +665,7 @@ organ_list["left_lung"] = newLeftLung handle_lungs_stamina() success = 1 + if ("right_lung") if (src.right_lung) if (force) @@ -797,6 +799,7 @@ return 1 //OK you're probably thinking why this in needed at all. It seemed the simplest way, to add and remove stamina based on the amount of lungs. + //Because I have it so that an organ can stop working when it hits 100+ damage, we need to check if we have to make stamina changes often. //change stamina modifies based on amount of working lungs. lungs w/ health > 0 //lungs_changed works like this: if lungs_changed is != the num of working lungs, then apply the stamina modifier @@ -976,7 +979,7 @@ . += "
This brain has gone cold." else . += "
This brain has gone cold." - + attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if (!ismob(M)) return @@ -1187,7 +1190,6 @@ icon_state = "lung_L" body_side = L_ORGAN - /obj/item/organ/lung/right name = "right lung" desc = "Inflating meat airsack that passes breathed oxygen into a person's blood and expels carbon dioxide back out. This is a right lung, since it has two lobes and a cardiac notch, where the heart would be. Hopefully whoever used to have this one doesn't need it anymore." diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index 2dc275fe..e932fcdb 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -133,20 +133,7 @@ if (verbose_reagent_info && !isvampire(H)) var/organ_data1 = null - - //This doesn't detect missing organs. removing for now, might be useful to have though not sure if we even want to detect missing organs... - // for (var/O in H.organHolder.organ_list) - // var/obj/item/organ/organ = H.organHolder.organ_list[O] - // if (organ == null) - // continue - - // if (istype(organ, /obj/item/organ/head) || istype(organ, /obj/item/organ/brain) || istype(organ, /obj/item/organ/chest) || istype(organ, /obj/item/skull) || istype(organ, /obj/item/clothing/head/butt)) - // continue - // if (organ.health < 100) - // if (!found) - // found = 1 - // organ_data1 += "
[organ.name] has [organ.health] / 100" - + organ_data1 += organ_health_scan("left_lung", H) organ_data1 += organ_health_scan("right_lung", H) @@ -164,7 +151,7 @@ organ_data += organ_data1 else - brain_data = "Subject has no organs." + organ_data = "Subject has no organs." if (H.organHolder && !H.organHolder.heart) heart_data = "Subject has no heart." @@ -223,7 +210,6 @@ else return "
The patient's [input] is missing!" - /proc/update_medical_record(var/mob/living/carbon/human/M) if (!M || !ishuman(M)) return diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 0195ca46..5b37a8bd 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -555,8 +555,6 @@ /* ---------- SCALPEL - chest ---------- */ else if (surgeon.zone_sel.selecting == "chest" && (surgeon.a_intent == INTENT_GRAB || surgeon.a_intent == INTENT_DISARM)) - - /* chest op_stage description G = INTENT_GRAB D = INTENT_DISARM @@ -573,7 +571,6 @@ 6.0 = (G)cut is remove pancreas 7.0 = (G)cut is remove kidneys - remove spleen = (G)cut - (G)saw - (G)cut remove lungs = (G)cut - (G)saw - (D)cut - Right/Left hands for removing R/L lungs @@ -586,7 +583,6 @@ remove pancreas = (D)cut - (G)cut - (G)cut remove kidneys = (D)cut - (D)cut - (G)cut - Right/Left hands for removing R/L kidneys - *note, for lungs/kidneys R/L hand use only matters for last cut */ if (patient.organHolder.chest) From 77a675f02d1e2fba94b2759e10bd9385d4f49220 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 8 Aug 2018 21:19:33 -0400 Subject: [PATCH 055/105] update surgery flavor text --- code/procs/surgery.dm | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 5b37a8bd..80b6e96b 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -596,9 +596,9 @@ take_bleeding_damage(patient, surgeon, damage_low) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] chest open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your chest open with [src]!") + patient.tri_message("[surgeon] makes a cut on [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest with [src]!",\ + surgeon, "You make a cut on [surgeon == patient ? "your" : "[patient]'s"] chest with [src]!",\ + patient, "[patient == surgeon ? "You make a cut" : "[surgeon] makes a cut"] on chest with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -626,9 +626,9 @@ take_bleeding_damage(patient, surgeon, damage_low) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] appendix/liver area open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] appendix/liver area open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your appendix/liver area open with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right abdomen open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right abdomen open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right abdomen open with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -649,9 +649,9 @@ take_bleeding_damage(patient, surgeon, damage_low) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] stomach/intestines area open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] stomach/intestines area open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your stomach/intestines area open with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] lower abdomen open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] lower abdomen open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your lower abdomen open with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -881,9 +881,9 @@ take_bleeding_damage(patient, surgeon, damage_low) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] something something pancreas with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] something something pancreas with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your something something pancreas with [src]!") + patient.tri_message("[surgeon] makes a cut in preparation to access [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas with [src]!",\ + surgeon, "You make a cut in preparation to access [surgeon == patient ? "your" : "[patient]'s"] pancreas with [src]!",\ + patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut in preparation to access your pancreas with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -906,9 +906,9 @@ take_bleeding_damage(patient, surgeon, damage_low) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] something something kidneys with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] something something kidneys with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your something something kidneys with [src]!") + patient.tri_message("[surgeon] makes a cut in preparation to access [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] kidneys with [src]!",\ + surgeon, "You make a cut in preparation to access [surgeon == patient ? "your" : "[patient]'s"] kidneys with [src]!",\ + patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut in preparation to access your kidneys with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -1395,6 +1395,10 @@ surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") patient.updatehealth() patient.organHolder.chest.op_stage = 2.0 + + if (patient.organHolder.heart) + patient.organHolder.heart.op_stage = 2.0 + return 1 else return 0 From 3613604550b36b6f7b164fa07bc0375fdc6a49d2 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 10 Aug 2018 02:54:38 -0400 Subject: [PATCH 056/105] chance to damage internal organs if hit in the chest with >= 5 damage --- code/mob/living/carbon/human/procs/damage.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/mob/living/carbon/human/procs/damage.dm b/code/mob/living/carbon/human/procs/damage.dm index 9074bec8..be147998 100644 --- a/code/mob/living/carbon/human/procs/damage.dm +++ b/code/mob/living/carbon/human/procs/damage.dm @@ -513,6 +513,10 @@ src.UpdateDamageIcon() src.UpdateDamage() else + if (zone == "chest" && brute >= 5 && prob(25)) + src.organHolder.damage_organs(brute/5, 0, 0, 5, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","appendix", "pancreas")) + src.organHolder.damage_organs(brute/10, 0, 0, 5, list("spleen", "left_lung", "right_lung")) + var/obj/item/E = src.organs[zone] if (istype(E, /obj/item)) if (E.take_damage(brute, burn, 0/*tox*/, damage_type)) From 7daf67042653d14a3eaeccca75a92e51738c6572 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Tue, 14 Aug 2018 01:43:11 -0400 Subject: [PATCH 057/105] change conditional form >=5 to <5 --- code/mob/living/carbon/human/procs/damage.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/mob/living/carbon/human/procs/damage.dm b/code/mob/living/carbon/human/procs/damage.dm index be147998..f6a800a4 100644 --- a/code/mob/living/carbon/human/procs/damage.dm +++ b/code/mob/living/carbon/human/procs/damage.dm @@ -513,7 +513,7 @@ src.UpdateDamageIcon() src.UpdateDamage() else - if (zone == "chest" && brute >= 5 && prob(25)) + if (zone == "chest" && brute > 5 && prob(25)) src.organHolder.damage_organs(brute/5, 0, 0, 5, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","appendix", "pancreas")) src.organHolder.damage_organs(brute/10, 0, 0, 5, list("spleen", "left_lung", "right_lung")) From 107200d801cba6f6c172ddc65a2b7093fad60da9 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Tue, 14 Aug 2018 01:46:45 -0400 Subject: [PATCH 058/105] timer so it takes disease a minimum amount of disease tics before it is able to advance to the next stage --- code/datums/disease.dm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/code/datums/disease.dm b/code/datums/disease.dm index d877f4a0..47d95ed4 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -137,6 +137,7 @@ var/develop_resist = 0 // can you develop a resistance to this? var/spread = "Unknown" // how does this disease transmit itself around? var/cycles = 0 // does this disease have a cyclical nature? if so, how many cycles have elapsed? + var/count = 0 stage_act() if (!affected_mob || disposed) @@ -154,6 +155,14 @@ affected_mob.cure_disease(src) return 1 + if (count < 300/stage) + count++ + boutput(H, "count = [count]") + else + count = 0 + boutput(H, "count set to ZERO 0") + + var/advance_prob = stage_prob if (state == "Acute") advance_prob *= 2 @@ -166,7 +175,9 @@ affected_mob.cure_disease(src) return 1 else if (stage < master.max_stages) - stage++ + if (count >= 60/stage) + stage++ + boutput(H, "Stage Advances::: [stage]!") // Common cures if (cure != "Incurable") From aaff19abe43a75052d962b67817c5e5de1a46a96 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 15 Aug 2018 20:42:21 -0400 Subject: [PATCH 059/105] fix disease counter thing I did before. Should be better now, not too long. --- code/datums/disease.dm | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/code/datums/disease.dm b/code/datums/disease.dm index 47d95ed4..009870dc 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -155,13 +155,10 @@ affected_mob.cure_disease(src) return 1 - if (count < 300/stage) - count++ - boutput(H, "count = [count]") - else - count = 0 - boutput(H, "count set to ZERO 0") + var/min_time = 20/stages //minimum amount of stage_act() calls before disease is capable of worsening. + if (count < min_time) + count++ var/advance_prob = stage_prob if (state == "Acute") @@ -175,9 +172,9 @@ affected_mob.cure_disease(src) return 1 else if (stage < master.max_stages) - if (count >= 60/stage) + if (count >= min_time) stage++ - boutput(H, "Stage Advances::: [stage]!") + count = 0 // Common cures if (cure != "Incurable") From 081db6e03fdc6203b81c153ce6d272a65896f6b3 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 15 Aug 2018 20:43:33 -0400 Subject: [PATCH 060/105] override brain damage in humans. now all brain damage done to any human affects the literal brain organ obj --- code/mob/living/carbon/human.dm | 31 +++++++++++++++++++++++++++++-- code/obj/item/organ.dm | 1 - 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index ed62c270..3ced8b8b 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -6571,7 +6571,7 @@ if (..()) return if (!ignore) - if (amount > 1 && src.organHolder) + if (amount > 0 && src.organHolder) if (prob(30)) if (src.organHolder.left_kidney) src.organHolder.left_kidney.take_damage(0, 0, amount/20) @@ -6581,4 +6581,31 @@ if (prob(30)) if (src.organHolder.liver) src.organHolder.liver.take_damage(0, 0, amount/40) - return \ No newline at end of file + return + +/mob/living/carbon/human/take_brain_damage(var/amount) + if (!isnum(amount) || amount == 0) + return 1 + + //old way that has damage attached to var on /mob/living/carbon/human not on /obj/item/organ/brain + // src.brainloss = max(0,min(src.brainloss + amount,120)) + + if (src.organHolder && src.organHolder.brain) + if (amount > 0) + src.organHolder.brain.take_damage(amount, 0, 0) + else + src.organHolder.brain.heal_damage(amount, 0, 0) + + if (src.organHolder.brain.get_damage() >= 120) + src.visible_message("[src.name] goes limp, their facial expression utterly blank.") + src.death() + return + return + + +/mob/living/carbon/human/get_brain_damage() + if (src.organHolder && src.organHolder.brain) + return src.organHolder.brain.get_damage() + //leaving this just in case, should never be called I assume + return src.brainloss + diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index b4a33294..49b266cc 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -886,7 +886,6 @@ var/body_side = null // L_ORGAN/1 for left, R_ORGAN/2 for right var/datum/bone/bones = null rand_pos = 1 - health = 100 //organs can take damage now, hurray attackby(obj/item/W as obj, mob/user as mob) if (istype(W, /obj/item/device/healthanalyzer)) From e26f2403f91d46407170f55903af8886684acb08 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 15 Aug 2018 20:57:20 -0400 Subject: [PATCH 061/105] partially convert heart to new system, All that is left really is removing the var/broken in obj/item/organ/heart, which I don't really think is needed in the new system, but I'll let you be the judge --- code/datums/diseases/heartfailure.dm | 16 +++++++++++++++- code/mob/living/carbon/human.dm | 3 ++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/code/datums/diseases/heartfailure.dm b/code/datums/diseases/heartfailure.dm index 4cf89a52..b11163c4 100644 --- a/code/datums/diseases/heartfailure.dm +++ b/code/datums/diseases/heartfailure.dm @@ -70,6 +70,7 @@ boutput(affected_mob, "Your arm hurts!") else if (prob(5)) boutput(affected_mob, "Your chest hurts!") + damage_heart_if_found(D.stage) if (2) if (prob(1) && prob(10)) boutput(affected_mob, "You feel better.") @@ -79,14 +80,27 @@ if (prob(8)) affected_mob.emote(pick("pale", "groan")) if (prob(5)) boutput(affected_mob, "Your heart lurches in your chest!") + damage_heart_if_found(D.stage) affected_mob.losebreath++ if (prob(3)) boutput(affected_mob, "Your heart stops beating!") + damage_heart_if_found(D.stage) + affected_mob.losebreath+=3 if (prob(5)) affected_mob.emote(pick("faint", "collapse", "groan")) if (3) affected_mob.take_oxygen_deprivation(1) affected_mob.updatehealth() + damage_heart_if_found(D.stage) if (prob(8)) affected_mob.emote(pick("twitch", "gasp")) if (prob(5)) - affected_mob.contract_disease(/datum/ailment/disease/flatline,null,null,1) \ No newline at end of file + affected_mob.contract_disease(/datum/ailment/disease/flatline,null,null,1) + +//Because apparently mobs without an organholder or heart object can have this disease, I'm checking if it's human and if they have a heart. Which they should if they're human. +datum/ailment/disease/heartfailure/proc/damage_heart_if_found(var/stage) + if (ishuman(affected_mob)) + var/mob/living/carbon/human/H = affected_mob + if (H.organHolder && H.organHolder.heart && !H.organHolder.heart.robotic) + H.organHolder.heart.take_damage(0, stage, 0) + + return diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 3ced8b8b..a7bdc01d 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4467,7 +4467,8 @@ src.losebreath += 20 src.take_oxygen_deprivation(20) src.updatehealth() - + else if (src.organHolder.heart.get_damage() > 100) + src.contract_disease(/datum/ailment/disease/flatline,null,null,1) // lungs if (!src.nodamage) // I don't know why all these if (!src.nodamage) aren't just checked once, but OK From 3b9a926f770b996e2715e7b2076f6d4a387191e6 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 15 Aug 2018 21:04:29 -0400 Subject: [PATCH 062/105] defib heals heart when successful --- code/procs/surgery.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 80b6e96b..8cdf69e6 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -246,6 +246,8 @@ if (prob(66)) user.show_text("[patient] inhales deeply!", "blue") patient.take_oxygen_deprivation(-50) + if (patient.organHolder && patient.organHolder.heart) + patient.organHolder.heart.heal_damage(10,10,10) patient.updatehealth() else user.show_text("[patient] doesn't respond!", "red") From 8f9924058a0ec22ef409855593c5ca5340edf319 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 16 Aug 2018 01:47:21 -0400 Subject: [PATCH 063/105] add new organs to QM commodity list and make organs take damage in decaying bodies. Next to come, humans with regeneration or changelings can regenerate all normal organs if lost. And make organs with more damage be worth less. --- code/datums/commodity.dm | 65 +++++++++++++++++++++++++++++++++ code/mob/living/carbon/human.dm | 3 ++ 2 files changed, 68 insertions(+) diff --git a/code/datums/commodity.dm b/code/datums/commodity.dm index fad36872..76a36513 100644 --- a/code/datums/commodity.dm +++ b/code/datums/commodity.dm @@ -1394,6 +1394,71 @@ upperfluc = 1000 lowerfluc = -1000 +/datum/commodity/bodyparts/lung/cyber + comname = "Cyber Lung" + comtype = /obj/item/organ/lung/cyber + price = 1000 + baseprice = 1250 + upperfluc = 1000 + lowerfluc = -1000 + +/datum/commodity/bodyparts/kidney + comname = "Human Kidney" + comtype = /obj/item/organ/kidney + price = 2500 + baseprice = 2500 + upperfluc = 1000 + lowerfluc = -1000 + +/datum/commodity/bodyparts/liver + comname = "Human Liver" + comtype = /obj/item/organ/liver + price = 3500 + baseprice = 3500 + upperfluc = 1500 + lowerfluc = -1500 + +/datum/commodity/bodyparts/stomach + comname = "Human Stomach" + comtype = /obj/item/organ/stomach + price = 2000 + baseprice = 2000 + upperfluc = 1000 + lowerfluc = -1000 + +/datum/commodity/bodyparts/instestines + comname = "Human Instestines" + comtype = /obj/item/organ/instestines + price = 2000 + baseprice = 2000 + upperfluc = 1000 + lowerfluc = -1000 + +/datum/commodity/bodyparts/spleen + comname = "Human Spleen" + comtype = /obj/item/organ/spleen + price = 2000 + baseprice = 2000 + upperfluc = 1000 + lowerfluc = -1000 + +/datum/commodity/bodyparts/pancreas + comname = "Human Pancreas" + comtype = /obj/item/organ/pancreas + price = 3000 + baseprice = 3000 + upperfluc = 2000 + lowerfluc = -1500 + +/datum/commodity/bodyparts/appendix + comname = "Human Appendix" + comtype = /obj/item/organ/appendix + price = 1000 + baseprice = 1000 + upperfluc = 500 + lowerfluc = -500 + +/////////Medical Supplies///////// /datum/commodity/medical onmarket = 0 desc = "Medical Supplies." diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index a7bdc01d..0f300311 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -3631,6 +3631,9 @@ src.update_face() src.next_decomp_time = world.time + rand(240,600)*10 + if (src.organHolder && islist(src.organHolder.organ_list)) + for (var/obj/item/organ/O in src.organHolder.organ_list) + O.take_damage(0, 0, 30) proc/stink() if (prob(15)) for (var/mob/living/carbon/C in view(6,get_turf(src))) From 84ef7e7a2f6251cc286d3f45422d5c5746651d77 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 16 Aug 2018 02:02:26 -0400 Subject: [PATCH 064/105] forgot cyber organ selling, is it really needed though? --- code/datums/commodity.dm | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/code/datums/commodity.dm b/code/datums/commodity.dm index 76a36513..d732f39b 100644 --- a/code/datums/commodity.dm +++ b/code/datums/commodity.dm @@ -1410,6 +1410,14 @@ upperfluc = 1000 lowerfluc = -1000 +/datum/commodity/bodyparts/kidney/cyber + comname = "Cyber Kidney" + comtype = /obj/item/organ/cyber + price = 1000 + baseprice = 1000 + upperfluc = 500 + lowerfluc = -500 + /datum/commodity/bodyparts/liver comname = "Human Liver" comtype = /obj/item/organ/liver @@ -1418,6 +1426,14 @@ upperfluc = 1500 lowerfluc = -1500 +/datum/commodity/bodyparts/liver/cyber + comname = "Cyber Liver" + comtype = /obj/item/organ/liver/cyber + price = 1000 + baseprice = 1000 + upperfluc = 500 + lowerfluc = -500 + /datum/commodity/bodyparts/stomach comname = "Human Stomach" comtype = /obj/item/organ/stomach @@ -1426,6 +1442,14 @@ upperfluc = 1000 lowerfluc = -1000 +/datum/commodity/bodyparts/stomach/cyber + comname = "Cyber Stomach" + comtype = /obj/item/organ/stomach/cyber + price = 1000 + baseprice = 1000 + upperfluc = 500 + lowerfluc = -500 + /datum/commodity/bodyparts/instestines comname = "Human Instestines" comtype = /obj/item/organ/instestines @@ -1434,6 +1458,14 @@ upperfluc = 1000 lowerfluc = -1000 +/datum/commodity/bodyparts/instestines/cyber + comname = "Cyber Instestines" + comtype = /obj/item/organ/instestines/cyber + price = 1000 + baseprice = 1000 + upperfluc = 500 + lowerfluc = -500 + /datum/commodity/bodyparts/spleen comname = "Human Spleen" comtype = /obj/item/organ/spleen @@ -1442,6 +1474,14 @@ upperfluc = 1000 lowerfluc = -1000 +/datum/commodity/bodyparts/spleen/cyber + comname = "Cyber Spleen" + comtype = /obj/item/organ/spleen/cyber + price = 1000 + baseprice = 1000 + upperfluc = 500 + lowerfluc = -500 + /datum/commodity/bodyparts/pancreas comname = "Human Pancreas" comtype = /obj/item/organ/pancreas @@ -1450,6 +1490,14 @@ upperfluc = 2000 lowerfluc = -1500 +/datum/commodity/bodyparts/pancreas/cyber + comname = "Cyber Pancreas" + comtype = /obj/item/organ/pancreas/cyber + price = 1000 + baseprice = 1000 + upperfluc = 500 + lowerfluc = -500 + /datum/commodity/bodyparts/appendix comname = "Human Appendix" comtype = /obj/item/organ/appendix @@ -1458,6 +1506,14 @@ upperfluc = 500 lowerfluc = -500 +/datum/commodity/bodyparts/appendix/cyber + comname = "Cyber Appendix" + comtype = /obj/item/organ/appendix/cyber + price = 500 + baseprice = 500 + upperfluc = 500 + lowerfluc = -500 + /////////Medical Supplies///////// /datum/commodity/medical onmarket = 0 From ba1b546bea7cadb02396a904d796d8daac3b1a61 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 16 Aug 2018 02:40:44 -0400 Subject: [PATCH 065/105] humans with regeneration and changelings are capable of regenerating organs. Also detox biopower heals organs passively --- code/datums/abilities/changeling/regeneration.dm | 11 +++++++++++ code/datums/genetics/bioEffects/beneficial.dm | 11 +++++++++++ code/obj/item/organ.dm | 9 ++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/code/datums/abilities/changeling/regeneration.dm b/code/datums/abilities/changeling/regeneration.dm index 1cce24c4..77af1730 100644 --- a/code/datums/abilities/changeling/regeneration.dm +++ b/code/datums/abilities/changeling/regeneration.dm @@ -51,6 +51,12 @@ C.reagents.clear_reagents() C.lying = 0 C.canmove = 1 + + if (C.organHolder) + C.organHolder.heal_organs(1000, 1000, 1000, 100, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + if (C.organHolder.is_missing_organs()) + C.organHolder.create_organs() + boutput(C, "We have regenerated.") logTheThing("combat", C, null, "[C] finishes regenerative statis as a changeling [log_loc(C)].") C.visible_message(__red("[C] appears to wake from the dead, having healed all wounds.")) @@ -130,6 +136,11 @@ C.visible_message(" [C]'s right leg grows back!") C.set_body_icon_dirty() + if (C.organHolder) + C.organHolder.heal_organs(5, 5, 5, 90, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + if (C.organHolder.is_missing_organs()) + C.organHolder.create_organs() + if (prob(25)) C.visible_message("[C]'s flesh is moving and sliding around oddly!") /datum/targetable/changeling/regeneration diff --git a/code/datums/genetics/bioEffects/beneficial.dm b/code/datums/genetics/bioEffects/beneficial.dm index 10fff5ea..e837fdf3 100644 --- a/code/datums/genetics/bioEffects/beneficial.dm +++ b/code/datums/genetics/bioEffects/beneficial.dm @@ -184,6 +184,13 @@ if (H.limbs) H.limbs.mend(1) + //I'm lazy, sue me. If the mob is human and has an organholder. loop through the list of organs, if it is missing one, call create_organs + else if (H.organHolder) + C.organHolder.heal_organs(3, 3, 3, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + if (prob(5) && is_missing_organs()) + H.organHolder.create_organs() + boutput(H, "You feel less empty inside.") + /datum/bioEffect/detox name = "Natural Anti-Toxins" desc = "Enables the subject's bloodstream to purge foreign substances more rapidly." @@ -208,6 +215,10 @@ return if (L.reagents) L.reagents.remove_any(remove_per_tick) + if (ishuman(L)) + var/mob/living/carbon/human/H = L + if (H.organHolder) + H.organHolder.heal_organs(2, 2, 2, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) ///////////// // Stealth // diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 49b266cc..d6b41c32 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -27,7 +27,14 @@ var/list/organ_list = list("all", "head", "skull", "brain", "left_eye", "right_eye", "chest", "heart", "left_lung", "right_lung", "butt", "left_kidney", "right_kidney", "liver", "stomach", "intestines", "spleen", "pancreas", "appendix") - + //loops through organ_list. if it's missing an organ, return 1. might be useful to make a proc that creates a list of all missing organs instead, but I'm tired + proc/is_missing_organs() + // var/list/organs = null + if (islist(organ_list)) + for (var/i in organ_list) + if (!organ_list[i]) + return 1 + return 0 //(damage|heal)_organs used for effecting a lot of organs at once just by supplying a list and a damage amount. //probability, num 0-100 for whether or not to damage an organ found From 62184619c0f80e7ba370a430d6917df356740215 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Sun, 26 Aug 2018 22:57:36 -0400 Subject: [PATCH 066/105] cryoxadone heals organs now. Like Omnizine they can heal organs even from organ failure. Leaving it this way because people thought that 'requiring' surgery to fix that was too intense --- code/datums/chemistry/Reagents-Medical.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index f559323e..a050eccd 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -1002,6 +1002,7 @@ datum if(M.get_toxin_damage()) M.take_toxin_damage(-3) M.HealDamage("All", 12, 12) + H.organHolder.heal_organs(1, 1, 1, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) M.updatehealth() if(prob(25)) M.UpdateDamageIcon() // gonna leave this one on for now, but only call it a quarter of the time From 5150b7a3406ef1afefc5e55eacd7bfd4614870d4 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Sun, 26 Aug 2018 23:04:56 -0400 Subject: [PATCH 067/105] Change to disease timer, now less prob to cure on first stage that was caused from the timer I added. But not subsequent times you're there. Also, doesn't matter to cycles, don't know what diseases use that, but they're crazy I assume so all bets are off. --- code/datums/disease.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/disease.dm b/code/datums/disease.dm index 009870dc..baecc0a8 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -166,13 +166,13 @@ advance_prob = max(0,min(advance_prob,100)) if (prob(advance_prob)) - if (state == "Remissive") + if (state == "Remissive" && (prob(50) && count)) //added this so that it's less likely to cure immediately due to the now counter stage-- if (stage < 1) affected_mob.cure_disease(src) return 1 else if (stage < master.max_stages) - if (count >= min_time) + if (cycles == 0 && count >= min_time) //only get this on the first cycle stage++ count = 0 From fc3e79bcadbee1647700feed769087219dd9c615 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Sun, 26 Aug 2018 23:17:54 -0400 Subject: [PATCH 068/105] add new surgical tool, scissors. item and manufacturing. Adding sprites next --- code/datums/manufacturing.dm | 10 ++++++++++ code/obj/item/surgery_tools.dm | 28 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/code/datums/manufacturing.dm b/code/datums/manufacturing.dm index 03de54da..d1718b41 100644 --- a/code/datums/manufacturing.dm +++ b/code/datums/manufacturing.dm @@ -685,6 +685,16 @@ create = 1 category = "Tool" +/datum/manufacture/surgical_scissors + name = "Garden Snips" + item_paths = list("MET-1") + item_names = list("Metal") + item_amounts = list(1) + item_outputs = list(/obj/item/surgical_scissors) + time = 5 + create = 1 + category = "Tool" + /datum/manufacture/suture name = "Suture" item_paths = list("MET-1") diff --git a/code/obj/item/surgery_tools.dm b/code/obj/item/surgery_tools.dm index ed4efec8..1525990b 100644 --- a/code/obj/item/surgery_tools.dm +++ b/code/obj/item/surgery_tools.dm @@ -847,3 +847,31 @@ BODY BAG if (H.bleeding) repair_bleeding_damage(H, 50, rand(2,5)) return + +/* ================================================== */ +/* -------------- Surgical Scissors ----------------- */ +/* ================================================== */ + +/obj/item/surgical_scissors + name = "Garden Snips" + desc = "Used for precicely cutting up people in surgery. I guess you could use them on paper too." + icon = 'icons/obj/surgery.dmi' + icon_state = "surgical_scissors" + inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' + item_state = "surgical_scissors" + + flags = FPRINT | TABLEPASS | CONDUCT + force = 8.0 + stamina_damage = 5 + stamina_cost = 5 + stamina_crit_chance = 35 + w_class = 1.0 + hit_type = DAMAGE_STAB + hitsound = 'sound/weapons/slashcut.ogg' + + throwforce = 5.0 + throw_speed = 3 + throw_range = 5 + m_amt = 10000 + g_amt = 5000 + module_research = list("tools" = 3, "medicine" = 3, "weapons" = 0.25) From 961b1965316ba6ec9a0fddb297eaec8babf7f3dd Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 27 Aug 2018 00:52:40 -0400 Subject: [PATCH 069/105] suture attack resets chest op-stage in suture's attack override. I don't think it's necessary to put it here, but since heart does too I figure I'll keep things consistent --- code/obj/item/surgery_tools.dm | 17 ++++++++++++++--- code/procs/surgery.dm | 2 ++ icons/obj/surgery.dmi | Bin 50597 -> 50864 bytes 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/code/obj/item/surgery_tools.dm b/code/obj/item/surgery_tools.dm index 1525990b..d6a51197 100644 --- a/code/obj/item/surgery_tools.dm +++ b/code/obj/item/surgery_tools.dm @@ -414,6 +414,8 @@ BODY BAG if (zone == "chest") if (H.organHolder.heart) H.organHolder.heart.op_stage = 0.0 + if (H.organHolder.chest) + H.organHolder.chest.op_stage = 0.0 if (H.butt_op_stage) H.butt_op_stage = 0.0 H.TakeDamage("chest", 2, 0) @@ -854,7 +856,7 @@ BODY BAG /obj/item/surgical_scissors name = "Garden Snips" - desc = "Used for precicely cutting up people in surgery. I guess you could use them on paper too." + desc = "Used for precisely cutting up people in surgery. I guess you could use them on paper too." icon = 'icons/obj/surgery.dmi' icon_state = "surgical_scissors" inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' @@ -872,6 +874,15 @@ BODY BAG throwforce = 5.0 throw_speed = 3 throw_range = 5 - m_amt = 10000 - g_amt = 5000 + var/mob/Poisoner = null module_research = list("tools" = 3, "medicine" = 3, "weapons" = 0.25) + + attack(mob/living/carbon/M as mob, mob/user as mob) + if (src.reagents && src.reagents.total_volume) + logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting]) [log_reagents(src)]") + src.reagents.trans_to(M,5) + else + logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting])") + if (!snip_surgery(M, user)) + return ..() + else return diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 8cdf69e6..f6ace3c1 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -20,6 +20,8 @@ else // if all else fails? return 0 // surgery is not okay + boutput(M, "[user] begins cutting your hair.") + playsound(src.loc, "sound/items/Scissor.ogg", 100, 1) /proc/headSurgeryCheck(var/mob/living/carbon/human/patient as mob) if (!patient) // did we not get passed a patient? diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index a7caa84725f6522d1dfdf293e993b21b40daff4d..fd2ebe3498670baaa8e1e64a4bd29a3584abb953 100644 GIT binary patch delta 8008 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 udED&#Vc;1fBh`R?8`sx_CD_Xf(ez0?Kw{vy^ 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 z zwY#s%@H&}P@@X5V1V|<<7p>v^`wF&t7vZv9u=v%)y@UYQ8Rsr?0jJ(hBJ$ilx2u+kLd`MUU!7~V zskDS;3(0PO>9%X55okjR0cOYRzoyPYH~?TKhK&H&ov!ND!z!3w(E^Lz@s2*8$bcej zU9`REgZi1PORsm>t50VHfRiW|ybT&^C`+mMT6(e$XZ8a7_K#f|0 z;I0tl)urj@in8C(_)FIT0U^k>3+1H5;B#4C7KjOyKEH^$K=Ru)=0Z-PI50HsB$PRe su)GMDQ-8Sl&-yM>9RHuOgK_2%dr Date: Mon, 27 Aug 2018 02:24:49 -0400 Subject: [PATCH 070/105] adding new tool to surgery, removing intents next --- code/procs/surgery.dm | 798 +++++++++++++++++++++++++++++++++++------- 1 file changed, 662 insertions(+), 136 deletions(-) diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index f6ace3c1..4a8ab2ae 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -557,36 +557,103 @@ src.surgeryConfusion(patient, surgeon, damage_high) return 1 -/* ---------- SCALPEL - chest ---------- */ - else if (surgeon.zone_sel.selecting == "chest" && (surgeon.a_intent == INTENT_GRAB || surgeon.a_intent == INTENT_DISARM)) - /* chest op_stage description - G = INTENT_GRAB - D = INTENT_DISARM - cut = scalpel - saw = circular saw - op_stage = (actions you can take) -> where it will send you - 0.0 = (G)cut -> 1.0 || (D)cut -> 5.0 - 1.0 = (G)cut -> 3.0 || (D)cut -> 4.0 || (G)saw -> 2.0 - 2.0 = (G)cut is remove splee32n || (D)cut is remove lungs R/L - 3.0 = (G)cut is remove appendix || (D)cut is remove liver - 4.0 = (G)cut is remove stomach || (D)cut is remove intestines - 5.0 = (G)cut -> 6.0 || (D)cut -> 7.0 - 6.0 = (G)cut is remove pancreas - 7.0 = (G)cut is remove kidneys +////////////////////////////////////////////chest heart +/* ---------- SCALPEL - IMPLANT ---------- */ + + else if (surgeon.zone_sel.selecting == "chest") + if (patient.implant.len > 0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + patient.tri_message("[surgeon] cuts into [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest with [src]!",\ + surgeon, "You cut into [surgeon == patient ? "your" : "[patient]'s"] chest with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] into your chest with [src]!") + + var/attempted_parasite_removal = 0 + for (var/datum/ailment_data/an_ailment in patient.ailments) + if (an_ailment.cure == "Surgery") + attempted_parasite_removal = 1 + var/success = an_ailment.surgery(surgeon, patient) + if (success) + surgeon.cure_disease(an_ailment) + else + break + if (attempted_parasite_removal == 1) + return 1 + + for (var/obj/item/implant/projectile/I in patient.implant) + patient.tri_message("[surgeon] cuts out \an [I] from [patient == surgeon ? "[him_or_her(patient)]self" : "[patient]"] with [src]!",\ + surgeon, "You cut out \an [I] from [surgeon == patient ? "yourself" : "[patient]"] with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] out \an [I] from you with [src]!") + + I.on_remove(patient) + patient.implant.Remove(I) + I.set_loc(patient.loc) + return 1 + + for (var/obj/item/implant/I in patient.implant) + if (istype(I, /obj/item/implant/health)) + patient.mini_health_hud = 0 + + // This is kinda important (Convair880). + if (istype(I, /obj/item/implant/mindslave)) + if (patient.mind && (patient.mind.special_role == "mindslave")) + remove_mindslave_status(patient, "mslave", "surgery") + else if (patient.mind && patient.mind.master) + remove_mindslave_status(patient, "otherslave", "surgery") + + patient.tri_message("[surgeon] cuts out an implant from [patient == surgeon ? "[him_or_her(patient)]self" : "[patient]"] with [src]!",\ + surgeon, "You cut out an implant from [surgeon == patient ? "yourself" : "[patient]"] with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] out an implant from you with [src]!") + + var/obj/item/implantcase/newcase = new /obj/item/implantcase(patient.loc) + newcase.imp = I + I.on_remove(patient) + patient.implant.Remove(I) + I.set_loc(newcase) + newcase.icon_state = "implantcase-b" - remove spleen = (G)cut - (G)saw - (G)cut - remove lungs = (G)cut - (G)saw - (D)cut - Right/Left hands for removing R/L lungs + return 1 + +/* ---------- SCALPEL - HEART ---------- */ + + else if (patient.organHolder.heart) - remove appendix = (G)cut - (G)cut - (G)cut - remove liver = (G)cut - (G)cut - (D)cut - remove stomach = (G)cut - (D)cut - (G)cut - remove intestines = (G)cut - (D)cut - (D)cut + else + src.surgeryConfusion(patient, surgeon, damage_high) + return 1 - remove pancreas = (D)cut - (G)cut - (G)cut - remove kidneys = (D)cut - (D)cut - (G)cut - Right/Left hands for removing R/L kidneys + /* chest op_stage description + cut = scalpel + saw = circular saw + snip = surgical scissors/garden snips + op_stage = (actions you can take) -> where it will send you + 0.0 = snip -> 1.0 || cut -> 5.0 + 1.0 = snip -> 3.0 || cut -> 4.0 || (G)saw -> 2.0 + 2.0 = cut is remove lungs R/L + 3.0 = snip is remove appendix || cut is remove liver + 4.0 = snip is remove stomach || cut is remove intestines + 5.0 = snip -> 6.0 || cut -> 7.0 || saw -> 8.0 + 6.0 = snip is remove pancreas || cut is remove spleen + 7.0 = snip is remove kidneys + 8.0 = cut -> 9.0 + 9.0 = saw is remove heart + + remove lungs = snip -> saw -> snip -> Right/Left hands for removing R/L lungs + + remove appendix = snip -> snip -> snip + remove liver = snip -> snip -> cut + + remove stomach = snip -> cut -> snip + remove intestines = snip -> cut -> cut + + remove pancreas = cut -> snip -> snip + remove spleen = cut -> snip -> cut + + remove kidneys = cut -> cut -> snip -> Right/Left hands for removing R/L kidneys + + remove heart = 0.0 cut -> 5.0 saw -> 8.0 cut -> 9.0 saw *note, for lungs/kidneys R/L hand use only matters for last cut */ if (patient.organHolder.chest) @@ -611,11 +678,7 @@ surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") patient.updatehealth() - if (surgeon.a_intent == INTENT_GRAB) - patient.organHolder.chest.op_stage = 1.0 - if (surgeon.a_intent == INTENT_DISARM) - patient.organHolder.chest.op_stage = 5.0 - + patient.organHolder.chest.op_stage = 5.0 return 1 if (1.0) @@ -1014,120 +1077,35 @@ patient.organHolder.drop_organ("right_kidney") return 1 - else - src.surgeryConfusion(patient, surgeon, damage_high) - return 1 - - src.surgeryConfusion(patient, surgeon, damage_low) - else - return 0 + + if (8.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) -/* ---------- SCALPEL - IMPLANT ---------- */ + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 - else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent == INTENT_HELP) - if (patient.implant.len > 0) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - patient.tri_message("[surgeon] cuts into [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest with [src]!",\ - surgeon, "You cut into [surgeon == patient ? "your" : "[patient]'s"] chest with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] into your chest with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] aorta and vena cava with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] aorta and vena cava with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your aorta and vena cava with [src]!") - var/attempted_parasite_removal = 0 - for (var/datum/ailment_data/an_ailment in patient.ailments) - if (an_ailment.cure == "Surgery") - attempted_parasite_removal = 1 - var/success = an_ailment.surgery(surgeon, patient) - if (success) - surgeon.cure_disease(an_ailment) + patient.TakeDamage("chest", damage_high, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) else - break - if (attempted_parasite_removal == 1) - return 1 - - for (var/obj/item/implant/projectile/I in patient.implant) - patient.tri_message("[surgeon] cuts out \an [I] from [patient == surgeon ? "[him_or_her(patient)]self" : "[patient]"] with [src]!",\ - surgeon, "You cut out \an [I] from [surgeon == patient ? "yourself" : "[patient]"] with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] out \an [I] from you with [src]!") - - I.on_remove(patient) - patient.implant.Remove(I) - I.set_loc(patient.loc) - return 1 - - for (var/obj/item/implant/I in patient.implant) - if (istype(I, /obj/item/implant/health)) - patient.mini_health_hud = 0 - - // This is kinda important (Convair880). - if (istype(I, /obj/item/implant/mindslave)) - if (patient.mind && (patient.mind.special_role == "mindslave")) - remove_mindslave_status(patient, "mslave", "surgery") - else if (patient.mind && patient.mind.master) - remove_mindslave_status(patient, "otherslave", "surgery") - - patient.tri_message("[surgeon] cuts out an implant from [patient == surgeon ? "[him_or_her(patient)]self" : "[patient]"] with [src]!",\ - surgeon, "You cut out an implant from [surgeon == patient ? "yourself" : "[patient]"] with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] out an implant from you with [src]!") - - var/obj/item/implantcase/newcase = new /obj/item/implantcase(patient.loc) - newcase.imp = I - I.on_remove(patient) - patient.implant.Remove(I) - I.set_loc(newcase) - newcase.icon_state = "implantcase-b" - - return 1 - -/* ---------- SCALPEL - HEART ---------- */ - - else if (patient.organHolder.heart) - if (patient.organHolder.heart.op_stage == 0.0) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 9.0 return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] chest open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your chest open with [src]!") - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.heart.op_stage = 1.0 - return 1 - - else if (patient.organHolder.heart.op_stage == 2.0) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_high, 0) - take_bleeding_damage(patient, surgeon, damage_high) + src.surgeryConfusion(patient, surgeon, damage_high) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] aorta and vena cava with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] aorta and vena cava with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your aorta and vena cava with [src]!") - - patient.TakeDamage("chest", damage_high, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.heart.op_stage = 3.0 - return 1 - - else - src.surgeryConfusion(patient, surgeon, damage_high) - return 1 - + src.surgeryConfusion(patient, surgeon, damage_low) else return 0 @@ -1374,7 +1352,7 @@ src.surgeryConfusion(patient, surgeon, damage_high) return 1 -/* ---------- SAW - lungs/spleen ---------- */ +/* ---------- SAW - lungs/heart ---------- */ else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent == INTENT_GRAB) if (patient.organHolder.chest) @@ -1400,10 +1378,58 @@ patient.updatehealth() patient.organHolder.chest.op_stage = 2.0 - if (patient.organHolder.heart) - patient.organHolder.heart.op_stage = 2.0 + return 1 + + if (5.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] saws open [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] ribcage with [src]!",\ + surgeon, "You saw open [surgeon == patient ? "your" : "[patient]'s"] ribcage with [src]!",\ + patient, "[patient == surgeon ? "You saw" : "[surgeon] saws"] open your ribcage with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 8.0 + return 1 + + if (9.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 + + patient.tri_message("[surgeon] cuts out [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] heart with [src]!",\ + surgeon, "You cut out [surgeon == patient ? "your" : "[patient]'s"] heart with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] out your heart with [src]!") + + patient.TakeDamage("chest", damage_high, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + logTheThing("combat", surgeon, patient, "removed %target%'s heart with [src].") + //patient.contract_disease(/datum/ailment/disease/noheart,null,null,1) + patient.organHolder.drop_organ("heart") + return 1 + else + src.surgeryConfusion(patient, surgeon, damage_high) return 1 + else return 0 @@ -1930,3 +1956,503 @@ else return 0 + +//////////////////////////////////////////////////////////////////// +/obj/item/proc/snip_surgery(var/mob/living/carbon/human/patient as mob, var/mob/living/surgeon as mob) + if (!ishuman(patient)) + return 0 + + if (!patient.organHolder) + return 0 + + if (surgeon.bioHolder.HasEffect("clumsy") && prob(50)) + surgeon.visible_message("[surgeon] fumbles and stabs [him_or_her(surgeon)]self in the eye with [src]!", \ + "You fumble and stab yourself in the eye with [src]!") + surgeon.bioHolder.AddEffect("blind") + surgeon.weakened += 4 + var/damage = rand(5, 15) + random_brute_damage(surgeon, damage) + take_bleeding_damage(surgeon, null, damage) + return 1 + + src.add_fingerprint(surgeon) + + if (!surgeryCheck(patient, surgeon)) + return 0 + + // fluff2 is for things that do more damage: nicking an artery is included in the choices + var/fluff = pick(" messes up", "'s hand slips", " fumbles with [src]", " nearly drops [src]", "'s hand twitches", " makes a really messy cut") + var/fluff2 = pick(" messes up", "'s hand slips", " fumbles with [src]", " nearly drops [src]", "'s hand twitches", " makes a really messy cut", " nicks an artery") + + var/screw_up_prob = calc_screw_up_prob(patient, surgeon) + + var/damage_low = calc_surgery_damage(surgeon, screw_up_prob, rand(5,15)/*, src.adj1, src.adj2*/) + var/damage_high = calc_surgery_damage(surgeon, screw_up_prob, rand(15,25)/*, src.adj1, src.adj2*/) + + DEBUG_MESSAGE("[patient]'s surgery (performed by [surgeon]) damage_low is [damage_low], damage_high is [damage_high]") + +/* ---------- SNIP - chest ---------- */ + if (surgeon.zone_sel.selecting == "chest") + /* chest op_stage description + cut = scalpel + saw = circular saw + snip = surgical scissors/garden snips + + op_stage = (actions you can take) -> where it will send you + 0.0 = snip -> 1.0 || cut -> 5.0 + 1.0 = snip -> 3.0 || cut -> 4.0 || (G)saw -> 2.0 + 2.0 = cut is remove lungs R/L + 3.0 = snip is remove appendix || cut is remove liver + 4.0 = snip is remove stomach || cut is remove intestines + 5.0 = snip -> 6.0 || cut -> 7.0 + 6.0 = snip is remove pancreas || cut is remove spleen + 7.0 = snip is remove kidneys + + + remove appendix = snip -> snip -> snip + remove liver = snip -> snip -> cut + + remove stomach = snip -> cut -> snip + remove intestines = snip -> cut -> cut + + remove pancreas = cut -> snip -> snip + remove spleen = cut -> snip -> cut + + remove kidneys = cut -> cut -> snip -> Right/Left hands for removing R/L kidneys + remove lungs = snip -> saw -> snip -> Right/Left hands for removing R/L lungs + + *note, for lungs/kidneys R/L hand use only matters for last cut + */ + if (patient.organHolder.chest) + switch (patient.organHolder.chest.op_stage) + if (0.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] makes a cut on [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest with [src]!",\ + surgeon, "You make a cut on [surgeon == patient ? "your" : "[patient]'s"] chest with [src]!",\ + patient, "[patient == surgeon ? "You make a cut" : "[surgeon] makes a cut"] on chest with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + + if (surgeon.a_intent == INTENT_GRAB) + patient.organHolder.chest.op_stage = 1.0 + if (surgeon.a_intent == INTENT_DISARM) + patient.organHolder.chest.op_stage = 5.0 + + return 1 + + if (1.0) + + //second cut, path for appendix/liver + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right abdomen open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right abdomen open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right abdomen open with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 3.0 + return 1 + + //second cut, path for stomach/Intestines + else if (surgeon.a_intent == INTENT_DISARM) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] lower abdomen open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] lower abdomen open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your lower abdomen open with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 4.0 + return 1 + + //remove lungs or spleen + if (2.0) + //remove spleen with this cut + if (surgeon.a_intent == INTENT_GRAB) + if (patient.organHolder.spleen) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.spleen) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] spleen out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] spleen out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] spleen out with [src]!") + + patient.TakeDamage("chest", damage_high, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("spleen") + + return 1 + //remove lungs + else if (surgeon.a_intent == INTENT_DISARM) + //remove left lung + if (surgeon.find_in_hand(src) == surgeon.l_hand) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.left_lung) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left lung out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left lung out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left lung out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + logTheThing("combat", surgeon, patient, "removed %target%'s left lung with [src].") + patient.organHolder.drop_organ("left_lung") + + return 1 + //remove right lung + else if (surgeon.find_in_hand(src) == surgeon.r_hand) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.right_lung) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right lung out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right lung out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right lung out with [src]!") + logTheThing("combat", surgeon, patient, "removed %target%'s right lung with [src].") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("right_lung") + + return 1 + + //remove appendix or liver + if (3.0) + //remove appendix with this cut + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.appendix) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] appendix out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] appendix out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your appendix out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("appendix") + + return 1 + + //remove liver with this cut + else if (surgeon.a_intent == INTENT_DISARM) + + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.liver) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] liver out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] liver out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your liver out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("liver") + + return 1 + + //path for stomach and intestines + if (4.0) + //remove stomach with this cut + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.stomach) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] stomach out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] stomach out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your stomach out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("stomach") + + return 1 + + //remove intestines with this cut + else if (surgeon.a_intent == INTENT_DISARM) + + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.intestines) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] intestines out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] intestines out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your intestines out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("intestines") + + return 1 + + //paths for pancreas and kidneys + if (5.0) + //path for pancreas + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] makes a cut in preparation to access [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas with [src]!",\ + surgeon, "You make a cut in preparation to access [surgeon == patient ? "your" : "[patient]'s"] pancreas with [src]!",\ + patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut in preparation to access your pancreas with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 6.0 + + return 1 + + //path for kidneys + else if (surgeon.a_intent == INTENT_DISARM) + + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + patient.tri_message("[surgeon] makes a cut in preparation to access [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] kidneys with [src]!",\ + surgeon, "You make a cut in preparation to access [surgeon == patient ? "your" : "[patient]'s"] kidneys with [src]!",\ + patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut in preparation to access your kidneys with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 7.0 + + return 1 + + //remove pancreas + if (6.0) + + if (surgeon.a_intent == INTENT_GRAB) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.pancreas) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] pancreas out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your pancreas out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("pancreas") + + return 1 + + //remove kidneys + if (7.0) + if (surgeon.a_intent == INTENT_GRAB) + //remove left kidney + if (surgeon.find_in_hand(src) == surgeon.l_hand) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.left_kidney) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left kidney with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left kidney with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left kidney with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + logTheThing("combat", surgeon, patient, "removed %target%'s left kidney with [src].") + patient.organHolder.drop_organ("left_kidney") + + return 1 + //remove right kidney + else if (surgeon.find_in_hand(src) == surgeon.r_hand) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + + if (!patient.organHolder.right_kidney) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right kidney with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right kidney with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right kidney with [src]!") + logTheThing("combat", surgeon, patient, "removed %target%'s right kidney with [src].") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("right_kidney") + + return 1 + else + src.surgeryConfusion(patient, surgeon, damage_high) + return 1 + + src.surgeryConfusion(patient, surgeon, damage_low) + else + return 0 + From 3b6ed012cb1313aaffdde30b4469e3c34ea13cbe Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 27 Aug 2018 17:19:12 -0400 Subject: [PATCH 071/105] sprite for in-hand and snips obj --- icons/mob/inhand/hand_medical.dmi | Bin 17873 -> 18073 bytes icons/obj/surgical_scissors.dmi | Bin 0 -> 476 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/obj/surgical_scissors.dmi diff --git a/icons/mob/inhand/hand_medical.dmi b/icons/mob/inhand/hand_medical.dmi index ca1d8be8a0b784aa210bf86199c54566fc9a82da..570b723b0fdb26402a912c0c87beedc3140543e1 100644 GIT binary patch literal 18073 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 literal 17873 zcmd74XIN8P*Df3@dyA-8U?T_!0@4Kpq^lrEmtI0qX;LFiIzinai1bbC8=FHVI5D0`u z`JsX~1adrp^7-X7C^_5N$__4symbxT6s%k=Tx_4a*}|M45YLpjcp2EptqVam1cM8$ zqiio?zN=2M-s-koi0r?kY_tC~S+_Oj+Ahu`QcgEBaGa4w+E=4qaC6)b?r&6I)kr8E zbZxu%8d1|+e7W8=zL!(;uous6%{le8FAwv0nL%|zCxz)GI{MR=kHapyHQ(buXlIaT3QNDpckkdt&@UnC5-JXD zI!Tfbyl3YEvM-A0&{zj8j-S!SUzb@OzvVUdh!swxK@mHTx&D5^z|=mXmxVEcvt~f2 z`>n9{9Hovkzm@KGus0+EK{IWiIIJ&SS_$1~89<&;-kVTiFK3|oQHi+iuM*&TNH6Oo zsFORYjXKq5K(`Tn(sERj_3`rM#h0ZzS)>rTYMGQi@Iv&J4*lY~NZ3UYm+vM<9n?I> zpjTdd@Au#HIDj;DNO&8LmL+;FYNeXWcuX&3dQ@1ALj4kc^ZY;G_lud z90ZNxLf(6PKXnRS!L@LIL1H3sikqGB(|qL0eHyCHE7#$^4^JE^e8@RH#AkEy`N405 z=&K6eiZpBWGCd@D@6kG6s@Qf9%gqQ5u638H(iYv7r~1MlK99V_X@5&=A1Eh;DC#S>M&IAfpUHE$V~2rpgXPXqIZ<32W+F+A+n zO&;zmK$!Q~*_V!i-^cW)E?8!Te)j+Q4aGAPn{QoEwHYRj zjzw-3?2PnV6{2OKLxZ3E?j;Qn;D@h-g`Hl7Ihb^q&+pT}@iS@IhP?@Qcqe;IZTrUa z?Ws~d*`6ooV;nlMC3lSUE(8bH6XZ;=SH!SXF+-Kf8040qz~SJqJUtTbfrPW4`t&hN zmq6QFm!^ys)MXs1jKu`kc{$EcwW$XX@XSbZ@zg;C9S$RtXMO2%T=?H!Yc;QRc~la$lt+JyTeWJU$Q=C-G1iC`{HOKw0yuz4GjhUGi@=UDDDzVI6 zHnFRzpXiar5i_c;<1lLp6{&%$$=shjvMQ(A|mCxdh z1B6>u5$(+xMP)U_js} zrXtVj@WoXlDbvJ`mO!F<8eD9E${`bSynCu8irwXt66W)_VJe>=)Zt7LPoFN9KM`i9 z-xT*E4H?Rr{TS+dbqhFS3bVOZ0iIQb=Auj4N;Y7Go`m>M1FsDZ25m|&;i?5Dl$9uPQNXDGkR3_R* zLmq>I6iH@BetG2B`c;Iad;X|9&Q#mT$kyRJXe8}tr;K)Zd3k4%HLKBiI=RWi_Yuhk zaK^Jtu4QOGw_+RZzB05GoHzZLL+2$S`t%or*20-?9rz!YjG&snro98gGd(oLC1hu; z;Oi$1L9G$~KiD&8TP+m@=F>aCh_!ak?<~+07nJ0pDYwa$^9dTU8wXAe763xEu*1Vg zuQQ^x+`KT>`E+!JK$F&0p_zv|OXp7fj1OGu)GY$GIW&RqMMRZZbLr?rh9* zE94Jo`-|!fKTm*67eley`HbEw8%v|4-BFR!J`{b}r&1jFeuOrohd>^}KrJA>-+wR} zuSgSIcn@p;l-?7JJ~G<}2NQKCl!}(KohJqblM5C8*GWoc<5Fo4(ARX_gs0v-seLVei|u#s&*%XmLi(3URpSb3B&p%6zbrr zm(NM4hNX(~&N5~p-FxB|eN8&?O`}L_3+?6uNq4U&lgj2bwVyuqix)pnjgpZ}-*a^| zYDNdTuIjVCNB+`Tm+BSx(&Ll-$i+^_YbAw(#ONF^OHxvqX2W zx`Pd(@c9HY#kRJ%D>ncv;r3V%VHkVnZ*L!9$sea7J=%79uKvZVNb*TB_Z`hZ_&}e7fJmxl z^$dPsOVG)uGULSv`jU9wmMoe0O}!LcJRB%#-6^C14xDz&RVhwY=WwYfv)FrpOq2!$godC#j2TY_np+yNACFJq+fiM=&bVW27R%Kjd3T#bkzYbNo$f z(WEH*{WogZYkC4q8}aM{q5x;@jrIHnrRh{1jJK^*{;tK9{^>$3H!F8?}b0k?SvI`NOiS zJ$3dkVsrdq34J$%NDbifdXI*8B(*+?7PP(t(*9#qYjz4sLZ-plOvqY)SZq)nX5jc> zNxepAO6g2iG5F5vf4ykjjD|MX<|^(i6xNGu1Z)_oThG{$a^}N%5-2Jtb?JOd3v+6J zk;QoEiqL|gdG1xD=X6%FsL6&R0tvrH7#twI;;^%f=xS>!3=`?8DlXVZq)C~;K?&DD znOC6_c=53LryJ*eCfPnHOaluVx;u#o4&?Wk+?7;Mw{EEO7mhX zjKHk4W3+3-krS$?V8U58T~CZ^?88h3U1OJrdo|L0^6oL?_ZmL$NTTDg)#}?_-j8Hu zV!1W-_1oKu=ot_|hLLkHZy>@99s`7>YUTZ&s%fDiuOBbC`JoruEuMcI^X)$(9_y)t zaV2>!`x_;DB`lBmKia7;dmzc2Ha?Zq;6BWv(z1PmIfe^8%9`%c;kYe{KI)B2;DMGU zceMO8#X5^%QVC6mBryYS5d8xfeQHa|$Xtd23nCYPka=?ZR5G7;M^h}A%e>54Vx>iUI8b+ z9a;x{a?9cK*C@Zf-ZyosUr03Ur2$0aCr2(;WwvD7Cy31S$|rH9S~#OT4)0YR#g&xq zw{p$y7&NtwuTVkjnm*Lsiy<%#GuC+2X?&8QsA`8?)-+Kn4#2G)zS7(5YL<@%%MfuU zrbi|>LRyd}3TdHwxooNBA;AWM$MdoEutL#R%0cg<@)hEPZ~Jbz9})(CEVJNgqt@QG zY%uOLMeHz+VgCW*68-{?q$!J2_@k+U4Ij1|*se{F-iwyzkq0DGC+S7PwUJL zNVC0csqG;_^B6dvv6A)#UjqC7FLWr=F!~c3C6Pb3iTc^KrG2i8V-g=+%?-BZ4;*%tqCo4RK!NAYKTyqkv*lAv z{mx9(lcFvqoFtn6(4I@QRLRE5f+Et%7$6;O9HSlp677b}r5bmBTORaRb6*_>I10Wq zf7&54Yi0jGM#vKZbcFlnMmI-6p5UB}9yi-dz5>sO{HCRbK!EwM@QrO6j$U`{`>@5T zhV8XO96ScV5HGaq_OQW>ocS%Z0nh5;P1UUT#eD57MFZguk<|E(3lclYqXsCW)def~ zwUL2wchu;vbx@1O)*l$BPT5!|>vzG?&z?&xn7AY4ipYL1KaUjN%(qui=o>SbYxN@= z@v^ZI;sxoVG@*4}$7qc_t zc=`q7npUm=zXvnW=<7ba%aLWpH5wGm!AGB6EU-6_|8rY6y)(aRNJ0!s*rf7n-!k4Y z^FX^@mC^^lMBIFe`->Zd!Sd%_V{LQ)Y*|eEO?w~NSX+k%x6}w0UZjnxDejP3B%pC6 z+|rzAiroN2J271<-{k6A!PbG?tPLbVz=&_e#dWq8E0+LZvpHQ_;xlCr?eWA{8cUT< zW=Y_}9fJQ2fP~AARY1r6p2SISeC~8PO2u4>niemzXbx8>4OhqE_eWx^kKFK1nTJUo zEsewn9h6B`Unywkrk((sM7BBG^))n1@aW>NNuKT{17Yeye*-1~UyE;n(|%3|FNfTxQdogr9p~5s%ieZD)m<*} zP~AGZ70GxvxJ%g)#X2w~as64FQGODtH>oZ}JgX1IAJ=gIS1pq0ua`XefFs*{e+ul5 z`FU8BBYhMQQOB`$p6ce!iLc{brL3BhPr#md-jOVsGgm#Z?#BaF@2 zhZ|1(T@lYv9Kd_`9EX5wWhzAslnyL>&$I$pli%#J&jCwr*uFTo^1gDIk zTv0)P9nrv&%dRh7@vIIT+o}D14JImtNY2QH6EARYWqJGA2?pe}y|U-Hp~9JFTosMU zlkmFeX-646Y+SkuzHDfuCw(s@xC0@sIU>FS+NdtiS83L6qB)#6!Cm>ovFfOizVX}0 z>rB_0f)R6Htuq3C(ENeI?{!4wuhTqirTLz(s=-@|n)_o_3-Sv)4N=x%sA-wy*XP{? ziy!FV;D)E&i`Lq*5kgLN&224C2HX_=gxwM zuOpfwz?{h^m~w&_vkq`P-+v_>XQ0n{iA&?Q>~#58RoyQiwX{LkHl}6V8qd(~Z!(33 z>X?$NOP?yo;Mxr2N&;LH!l&AFT2^CyKMbej7MtQsP(Zx$bI zmCGKx$;TI4cetxM+pB30?fsobKImaXQ*w?x@-(EWsF-QzKpNt0U*nH`6kp)%H$429wiF?j#3JZa$l>C?A7-<$?qT z22#c;UAh!E$ozWU^^snGf0JAx%%_+lF{cvh{ig09c%<{rq_-6rqg3JrOzqs7++@a! zzV992{LCudj+F9>nqMCOg_UDcJiVIe>$MIe>mSkp4asy$mef=Do$;;$==jnOy?HFD zzrTbZ&gL@3zoA6W|90iwB4<^~+h1_-lV3fK86OJ%3LJpk)Ue~l96P5u{n>Ks z>eoHPyH=1>J16snx?&c93pP$={0~pzy3S_+3x6Gda+3a)&lI&24d!iuKS! z=;ERK^@EO2s;alJ5#D5(LF>8JsYJN0QSdjBh=FHli1okd<7HMI5m2HF1R^+?X#4Hf z?0q_Ps^3tfqOcGONpP5*QXz@WyK!9V<&hock0@v4&w>5!LE6{aepvHed*i!P%*dTD z`k;wq_+`+9_|GPS0&Vm*PP&r^ON3$LwSx(tf$o)K6H`BGZOwJY95#o?=`~)`xct<2 zak*VUU!=I+_%Q5yUp2BUE|hnFB&9b_&0%jwD*H>dKjH?gdq{D&mC+4dNT^Vj-Pf>v z?8Z(t*d}dcvK7Hb9kn<2{c0!O=lmtRq1*no!NE+`%fbvhU#Ln1UbfT6=GB%8Cjp&B zGc;_91Ertown_*IZpqo0&d#qkZr-%LUVFXEv{XT?m=rod{d8*ybJ8_|kJhQuTsXR~;{N42Z7H#By{NoXZDErXFFGz0PuDs z3dxI|WnjBzP)tV~^?_Ia+s>i^P{j7}qr>b^pB{}Q0}K?Vs5tFnr8mmqH(><|J}9|R zNsbWRsbRr6PW3rBkFXW#sWkZItwxzkh_4l2z9K#$v6k*oLu51zEr1!zLF9GB0I&?> zQy6W{%m!|X9=fBZb?(9LE4-GydmAPEcYDtWYMshdY|Ymzuw3lPHnw(~MV+{-Tg}gB z!13BUIJo5mzE*i;w|TwH^a{($i-Q%hOKMhW9dSfQ%j;7b%>3W;kKc45+8P4raiH!7 z2o)RLk{L>8n<_*+7P;<-udMe60hYP)j}&o=p2=e`6AEsgm1)dj9xgO*jt z{tC8J;a&KR~~h zZkAOqcLRlZr;caQcDfxAXUH z;>$}7QieLDjhMC~c&MX1=Z-=6?;TV7Qu;FjJbDNtF{YXGHLx56Cf3vX4;~@x_T({< zG+05gs<2BAR%v|5eWj?thrU|@ERq8_ZeXDJRZhChTQn6() z)0Jo)pEkK&T>T#Qd~dPBa{c`=#a#yJX8}z92mDn_uj*fZ4`X`FyJhLzDfgC7VG5xX z>y{AhR`osk`9}lt#G`bV?J!j-M&6gmSy<*}E*t-k2JqbCqh317{$>0r=WEr)L33Fh z>H*z{FEW}IM!`|w-nvW_t)JTJX7-(gyR=b7^lq0JB>FqvvFGN4zeP&R+uvEIb-W}N zSzVt}VAkq3Qt4S#v{z}qmi+}PxRs~;5Tq>tNc;Zd zje0JVJuySiO9R_Ug*Ny>3M$u*?QrNMak+B98I6J~W5DoZqupx0C-*rk***tanNgNi zm4f-MJz4;#Ty|Nx@Bn4DjUh)=8yMt&dHsfBq<7VKgXuU}Z#bVtPIT5clQ-;}s?XuZ z)|Z&l9O{<@2cI23v~d)9lfE*%PJBAd7r5p|Xu-7e&sm z9T3HC8$qZnne?GohqKk6FYb5)3Dw?+s|ZlqZC9=-Ezka7daK%8qfkzc3a}K~4bDv1 zkL+aW?NetH2q0qqjGx4O_dhGt|A({)wfNOjEW>c!Kr->QfYH6t0aY##Dd&enx2of* zA&HR^s}g!B&(|~aYT_inPu^Hxy+_h&;YGDy32Rl=!Z>3H<>5S-$#piiFHo#4RNQ3i zLq(d-s6&KEoVyN~NNY|okxv_lT2jo<@OkZy&Ed@BSvRI*)ZEJ_dh50|S%xudhjK-A z>(A|RhqzkQisXyM14P%D&(To{YXMJWkW-S;N|3+*bMmW2`-4&2DbdQAQonZdwC6)` z7NG*33i~}2aYa?%V7Kl-_!^-m9<#c&rhC=KL_cz{!eP65yP$?HtRMBpKA#R2IfVI5 z09&`6B5c$l+$@u84Y#Q5*dH2+PInE=b4+>9>&gy0MyTH(u1u^FxYE)gTF3H~$!3_nO;>7A-pH(}>GF_o&DI5<%=M(|qsMoGWq z&U0?~rFnCm(~iCl+Yw~j&Fofl#$>p20u)(8M7$n1-+P7hGl@wTk?~wDY7qAP{5bRQ zEb}eHG#|pJIIb|~Twd3eQ@3ilm%Q07A{#n)3fyeQF5@;UqLeoekTXxUHCB@Yjz?_f!ez8l zdV_1X1L}@Boj{z(ai$L%lGaMe^oOh4Y`e;+>-gvxc)malOXEh+ES?ld7lKj%1A z*JJ7iE+djEqcJNIrmclQFsw1qhR8qnU-YD=2I^ZK&N&oe zom9ues{ZIM)zS-Vm|lLX-wW7B?1jYwD;9b^{&7|VUyI7KD`-8-O4z&C z>^-N8idbrIulg9L-~ZXsHC>YRY=gbvUXzi$Ze&u_$FVv>$g8{!+XmV*@VoK~<)lc( zxyt$2hlV82Lvf@0B%Pn^s0RFrzXVt3E`pmyuE4}lYohYnEat@P9>QbRjZB zM0;NrnV7Vts~Num@%QejWTk<+G$O{?^zYT(Db*cGli|B4{AKmRq;udjrA@NzaVZiA z==Yf`=y1k1E|u7T8PEmm6xDILSsLK2My}qeTdt$7b~}PWs{K3w zZihh`T*yR0LCnu3p3i^Xh~2e1nhK&YxnWM8LUDT#9o$B7YE)*9*$M{Wq)S(~XUJiM#020kkzL4tN+jEt3rU zzIEaPH)#XynT>XkG}Iy@5am+CY3x!0Ksl8ac7x>eXCtmE9Nw&Yq7XDdAP3Ph2-ikL!#t*Y#aipf__u4h10d!5le}yX`pe44eM9qYPRaQ` zn18$2pzsr{!lV^O+rGtPecq;|Be>xm2&5=kZchDt7q&AN>$7Ci?NCfj*vDxtSu<*m=#m5^o@Li1!3%DfyhpYhD zEcKy7Cm`<;Q55b>z}^)9W1xEfLHqsx(A4=CYN(~?F5?cd*`&XFeYV&~Es-IS>E@Nz zGHc7=8Q+l(%EHHl5L*xWUI-!zzQV=a>uX}=0Ie=wlUJt|Bj9bR-&U1qC}IlKJsYU| zk~U|j?ar@{yDDr>i@$4$ob-$JtwGqWRwymy3#bI`YPmE7pS8df0fFRO4r28ntfSb3 zy?8+MS-TuXRtyMNE&XS&?yq9~Gc8)nH^$Nzu@rd`cP5E8W~(_Y?U5vn3|LDi76`*m zZy!W-oS|d#Gab0XWX@tP90i;zvoQAav=zd(8lmIINfzTjCWxbI`?a}?&e~gEno(P> zBC`=*yiv-p z`EOxr4m`fIyI%}x^`1RmDG41=p5(=F5pHm9IdudQ9p|o3DROrH`c_3HGmXLnrrW@M z20wqHnCBm)kbgsuEp-#z3nL%BJwx6vf(rgRg*KBci3+pdA4$fcOdJ*;nR~D$V7<3B zCFsWp*_QzEHy%^uW!l~te~loX+LDb8{=hw-;Zx_9!OmEu3Bhb&%(X1MU&IN?)GV3k ze-({^RoDNE#jX10KvL9g;SqzR+s6U-hW}cjJ$xI{7ihuR0zS`7#Z5%2*7r0F27r&k z-yK(PSe&5YU^#6}LeIJL(?i7^hc6TUd2f8$K5UTC=w0U)Z6`KN{n%5dZyRk`c}{$! zxF;3Z{q1-~z>}(p4&|Rz*TRiFos=APz^Hf(s8d8P=|=IIiU9ieKn2_gYEm-xb8%0U z`y*ZLd`DKWnBQ3B{$doLf3uoDt&n)lgOIo0K_9cG?KPWmGi;ZduNPF|KUo~*Tte(H z2;J_M32^#j`ec{ucN7F(@0umL2msal#}O-(zdj)_qs{zuJJ*rI6+M!0QCEnYueyLx z92`uD_b}ycobHo}zp}BF?(~BIiIkX)J2yQPyilKpN1C*DnWacFzX-Bq_NRs9*tMiB zpmm1&iM^9qD@SzCcS*-)~8)B&c1r{|^0ZZ*FSseXhuXVx*vb%a@)N{&SC1 zFR!u;se(^Iqvq)ZFv2tBjw5!TBxb>taqF&U zH`+i(6b+mfqcI^^$dVzi#viIWx%L-wp#t&$`+n(W@*+d=fz0dT7G}r0#bCZzMQaY{XdGe1J_RTGGX3wrRGq%R_-*jF2&6YO+ zg#Pp*(*@bsMtIG%t6}=cQQ}-Df(sN|Ri{`17htIJ@STD(ym2UqLa- z$bC688xka*>%NPOEyNc}Y0B`!NCHf!-j&f7&s_e78WWKqRk5S+VXePo?# z?6IaY9jNpMR5C`C*mYjzO`=38bIvE)xlr>D6q^@sD`xx1^pXy6n4B>)gg7jIn}CB3 zsZt@fa;7&l8cR=EEos&rw9T=0>;Il3=+8H>i?9soP|GVSLX{?j`)LaVJYh(ZeVqS8 zpXz}^Rw-H=L>YCM1x(;m-$HuoROuzQLbFpR06v-Iw>l zif-wMJ?}G@Q#&B<(WT4AwiOEd#UU8!5(CqadaWT0Z)Zyq zvItu6JuCxpk)2h%pn=TxB~#U_Lf}rG4i$=SB1c!xpgm+t$S!uHg4G6uNwzBZqEqj2 z(F&PA*KzLGk&F7Tp~^T^oObTHHX?uMyOm6N9MY7+thPz>vcBOn>{-*BJzrDAWbminXXN!p!jG|WxD=Ec? zW;V5C&8q&aRCQ(6@qjtf<(Px7YmX^OK|#OB*oqj0Y z!?9*lFp-lF21%*pb{^5pI?5|uF|}-OerQ~X6Pcw*r}uX0A&kt%RtNsj?lO@$cfEJ( z#mcZ=hUB<2NzK7fh0+&Em5~`1*_&|>4D1s-3PB(8OBd{thz(Rls|Y(;Zu+~u;<@Zq zCthc(CK&J6Lh~t_XQsML<3O}TcGlfTpK;0uq46lnZSJN;-`bH3&w=H~&O=O&;x~b^ zlzMGhGu(Ope%p`g9MdzRNOWlX+{Y=SG7GhtU z+u4oAPURaO?}Hb}1Z7Hl%%TYJ2MaYrv3=oo@ z?+n?r52Ngh)@oj?7)u;3mxZlP-Y2y>bRfE#rSw1pr#7Rqh=Puq8ubE+^?O31o(A`= z<71l+4);5vdmcMIs5*d+T(a}upwYMPkJ6-U#y$doXM24t+i^7Apdb!k%QtZ9(T!>e zouLHsMPT1|KLwS)Y)&5dKV0t)!`VaIvp&wLS(&F%4wQ}pt%M@8yfKEu+!yuJzk+SO zJ7{zM^#5!I(R+D-h#)`(+^|>inNQw^xE2f@uXMPVG!T zs|?7|*LL>y_!2M8PbF`7heES&#Em(@$bg{ICOe`qlGM;>GK`HTw4{`txLVx{@- zcno~~^XR0&C>&Jw8QDq6X%Fw3wv`9{Cr-SqYIx9rCp(fumBBS17^pk8a88U^Twf)* zE3(=WaBQ(kkcsh$j>o zUnK;;$j-)A?ez9s?71jG;9s=Uk2#c#CK~|8)mMva^SJ@$qZhEnMMW~^O120JOpICT zlu%lu^!MFV+GC#d+S=MSL6wz#0jAfHVbd38OU%&kml;g$#SZD7Uw)wUrv9k(9sCWt zL@D+VW#s9qw#}Jme~mFCxqqf!U^czu$LOMGp=ghuN>do)eAjNR;E$DrEAJS^yV}ge zHbXKN79LOE$!aKZ`fh$=y63^2vaH)Ty=#oYUZ*A_u`kIErYN(7i_4r|&77FX1MX0? z{Lu4vm_hadIt~OsgDFF*js@92uDR1C0}AtDb|8m`QxN)Sr=!w&I%vt?N2lV~iq2$d zr_ss}?R2p+7T{dJKgcJUSL)2vvuKzOOezsomDga+moSc+AJ?gPO+NX0))x}ztQ6-_ zB}x{QZEA`r&&u`PJ?8C3=PK|2XK=s3blHU6K&wFnLs-+y#_;&2uz-akyJN)G$wI^tVy{A4s%OQCG@K`ITN*1Zk@}e z0zQ`nHCyCt%r|ku4SuNgpsL68G(i5l>baR2lYu&)UFy>` zSNpOl54-GFy|yMKj_6U1`)mbHO-;eVe-p|8Arn~DY`p4uC&S|GlhuDZ@Wl(w{Xn{o zNiq>d%dY6gEg(Red$~LAdk-h;tR*>Hlke8``W}gg9cTMuf$}lPh{I*OsyqSF`(iNE|{Oay2D_Ta-EWd2W~$EoAgZg z2l?o@I1b9wdd;KAWMQkez$aoNoDl|ciJn!-fTCw*Wz~wpnMvt3GXn?D6w$toa&;Rt zWqn2S(a%~!UbSa-lPHf??}WsxpT4xsRAjYj&GcZOH{Gv>2TsJl-fSkz>@?rEkrjyh zyuLRmV4-D}`DA}2N&N1anZ0&qb0{yMiwzHe47iNomJpW^K|Nq0?hPB$(sEzmklH$3 zo`2GM@i(@phvoPRSi0NVxaq-g&yx2!s(`VUN|(qz|#tW_8}m8XDo{ z_Bf3f%Y%Sfyc+kK>O2}JR8as-uehkVxPD79pPl8_fs!|>`-nT_-`;)Wjwlv9k(B`3seU&%vJmIN%ON8rt ziRXyq`8CU9g^ptT0>aQoN95P9_l;0?aVR%cAM5Xz`0s-C3Fo zv{B$m?e(qncKeXJPSQSbz3aBK0%il=ZGGYkH&_&Ael~`~-8KApclRy0eRoMlk$qbB zxj0KpOSQG0Y*lkw+rcW=dHYmJcW+-+`5GnE*_F!GLxTA3>R3&#c0Q1D8Wzj5zvXOm z$Nn6sM)s5TAQUKNym<0nQ&*~#$I40%!C}ltp|$a=vt*9BX7y|~)PCzacCL{lbN$ze zx3$s?=FoyVVxT63nwpw&3h}b+=Z(V5-LWG$ck6?wPJsDW7D!$`a=@4rjXN)Q;^8rA z6q<>OVr2yvt&2Evp2@+M`<|v`%Ab6j&S1O!#T^_lZ%6!*+W2pbvGn7oA)5TfHzT}H zLTD!`X50TJ-}^=KgAp#4y z+_J&Zj2lqVb4P{G_9}vx#Q}*?Hg6xVtLYaPGzCdn+edc)J_8}2aM)iWdm1wO-Qk!t zAoeB#q5XjzW7E3`2xM<-YX@bI@_p<|md7yWXQ-)BMMmJ@&bzq@(nC~^FPhdo_>Pg!@`OZ_kI>`R4xsj6~W{q$rLyF1FB z+7uoKub*d@@EE+skb+=rl@#Moajhto_?bfUM^Y4^>Vpi9Q$3Y#%xcsziMr34Uetv$px3`6bg_M+(+vDZ`|Np!Eltlml00DGTPE!Ct=GbNc004=4R9JLG zWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TB zGg33tGfE(w;*!LYR3KBSxU?ueGdVFQzBoCvxH!M4Sc!`>C9|j)C}+sUnO2mTn+jp0 z=twQ9glo_ZLTE7|PD_cd4=z2*3a)-GV4na0#cn^n3T`ST0002jNkl~k$ zFl8_?7ee<;zTWj!WDf&hYJ0AabZ|m=tP}BfsF-IU#hvy^~(51 zj!GEjdbDOC2ZXS*@@fQKqzx)G4=hjp1r+XJ-f Date: Mon, 27 Aug 2018 19:13:22 -0400 Subject: [PATCH 072/105] Basically all done now for real. Just need those cyber sprites. This includes the new surgery tool 'garden snips/scissors' It's a joke sorta. The surgery steps for new organs mostly use the new garden snips. Fixed an issue with the admin part modifier so now it automatically gives you the right organ name when choosing new ones. Can now manufactur cyber organs/new tool. All cyber organs have a base stamina regen/max buff, and can be emagged to further increase it. heals and stuff affect brain organ damage. Fixed that thing with the diseases so there is a minimum timer before it advances to stop you from the chance of contracting the disease to being in stage 3 in 10 seconds. Now it takes about 20 seconds before stage 1 can move to stage 2, and 10 from 2 to 3. and so on when it's on the first cycle; the disease can be cured on it's own within that time. --- code/admin/part_modifier.dm | 2 +- .../abilities/changeling/regeneration.dm | 4 +- code/datums/chemistry/Reagents-Medical.dm | 7 +- code/datums/commodity.dm | 14 +- code/datums/disease.dm | 2 +- code/datums/diseases/heartfailure.dm | 2 +- code/datums/genetics/bioEffects/beneficial.dm | 6 +- code/mob/living/carbon/human.dm | 9 +- code/mob/living/carbon/human/procs/damage.dm | 2 +- code/obj/item/organ.dm | 95 +- code/obj/item/surgery_tools.dm | 5 + code/obj/machinery/manufacturer.dm | 9 + code/procs/surgery.dm | 937 +++++------------- 13 files changed, 352 insertions(+), 742 deletions(-) diff --git a/code/admin/part_modifier.dm b/code/admin/part_modifier.dm index e57fb963..4b458da2 100644 --- a/code/admin/part_modifier.dm +++ b/code/admin/part_modifier.dm @@ -1,7 +1,7 @@ /datum/admins/var/datum/partmod_holder/part_modifier = null -var/list/default_organ_paths = list("head" = /obj/item/organ/head, "skull" = /obj/item/skull, "brain" = /obj/item/organ/brain, "left_eye" = /obj/item/organ/eye, "right_eye" = /obj/item/organ/eye, "chest" = /obj/item/organ/chest, "heart" = /obj/item/organ/heart, "left_lung" = /obj/item/organ/lung, "right_lung" = /obj/item/organ/lung, "butt" = /obj/item/clothing/head/butt) +var/list/default_organ_paths = list("head" = /obj/item/organ/head, "skull" = /obj/item/skull, "brain" = /obj/item/organ/brain, "left_eye" = /obj/item/organ/eye, "right_eye" = /obj/item/organ/eye, "chest" = /obj/item/organ/chest, "heart" = /obj/item/organ/heart, "left_lung" = /obj/item/organ/lung, "right_lung" = /obj/item/organ/lung, "butt" = /obj/item/clothing/head/butt, "liver" = /obj/item/organ/liver, "stomach" = /obj/item/organ/stomach, "intestines" = /obj/item/organ/intestines, "pancreas" = /obj/item/organ/pancreas, "spleen" = /obj/item/organ/spleen, "appendix" = /obj/item/organ/appendix, "left_kidney" = /obj/item/organ/kidney, "right_kidney" = /obj/item/organ/kidney) var/list/default_limb_paths = list("l_arm" = /obj/item/parts/human_parts/arm/left, "r_arm" = /obj/item/parts/human_parts/arm/right, "l_leg" = /obj/item/parts/human_parts/leg/left, "r_leg" = /obj/item/parts/human_parts/leg/right) /client/proc/modify_parts(var/mob/living/carbon/human/target as mob) diff --git a/code/datums/abilities/changeling/regeneration.dm b/code/datums/abilities/changeling/regeneration.dm index 77af1730..63a437f2 100644 --- a/code/datums/abilities/changeling/regeneration.dm +++ b/code/datums/abilities/changeling/regeneration.dm @@ -53,7 +53,7 @@ C.canmove = 1 if (C.organHolder) - C.organHolder.heal_organs(1000, 1000, 1000, 100, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + C.organHolder.heal_organs(1000, 1000, 1000, 100, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas", "heart", "brain", "left_eye", "right_eye")) if (C.organHolder.is_missing_organs()) C.organHolder.create_organs() @@ -137,7 +137,7 @@ C.set_body_icon_dirty() if (C.organHolder) - C.organHolder.heal_organs(5, 5, 5, 90, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + C.organHolder.heal_organs(5, 5, 5, 90, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas", "heart", "brain", "left_eye", "right_eye")) if (C.organHolder.is_missing_organs()) C.organHolder.create_organs() diff --git a/code/datums/chemistry/Reagents-Medical.dm b/code/datums/chemistry/Reagents-Medical.dm index a050eccd..64705616 100644 --- a/code/datums/chemistry/Reagents-Medical.dm +++ b/code/datums/chemistry/Reagents-Medical.dm @@ -399,8 +399,7 @@ datum var/mob/living/carbon/human/H = M if (H.bleeding && prob(33)) H.bleeding-- - //heal all functional organs, ignore heart and brain since they don't use this system yet - H.organHolder.heal_organs(2, 2, 2, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + H.organHolder.heal_organs(2, 2, 2, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas", "heart", "brain")) M.updatehealth() //M.UpdateDamageIcon() @@ -1002,7 +1001,9 @@ datum if(M.get_toxin_damage()) M.take_toxin_damage(-3) M.HealDamage("All", 12, 12) - H.organHolder.heal_organs(1, 1, 1, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + if (istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + H.organHolder.heal_organs(1, 1, 1, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas", "heart", "brain")) M.updatehealth() if(prob(25)) M.UpdateDamageIcon() // gonna leave this one on for now, but only call it a quarter of the time diff --git a/code/datums/commodity.dm b/code/datums/commodity.dm index d732f39b..c54a30a1 100644 --- a/code/datums/commodity.dm +++ b/code/datums/commodity.dm @@ -1412,7 +1412,7 @@ /datum/commodity/bodyparts/kidney/cyber comname = "Cyber Kidney" - comtype = /obj/item/organ/cyber + comtype = /obj/item/organ/kidney/cyber price = 1000 baseprice = 1000 upperfluc = 500 @@ -1450,17 +1450,17 @@ upperfluc = 500 lowerfluc = -500 -/datum/commodity/bodyparts/instestines - comname = "Human Instestines" - comtype = /obj/item/organ/instestines +/datum/commodity/bodyparts/intestines + comname = "Human Intestines" + comtype = /obj/item/organ/intestines price = 2000 baseprice = 2000 upperfluc = 1000 lowerfluc = -1000 -/datum/commodity/bodyparts/instestines/cyber - comname = "Cyber Instestines" - comtype = /obj/item/organ/instestines/cyber +/datum/commodity/bodyparts/intestines/cyber + comname = "Cyber Intestines" + comtype = /obj/item/organ/intestines/cyber price = 1000 baseprice = 1000 upperfluc = 500 diff --git a/code/datums/disease.dm b/code/datums/disease.dm index baecc0a8..5c36ce7d 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -155,7 +155,7 @@ affected_mob.cure_disease(src) return 1 - var/min_time = 20/stages //minimum amount of stage_act() calls before disease is capable of worsening. + var/min_time = 20/stage //minimum amount of stage_act() calls before disease is capable of worsening. if (count < min_time) count++ diff --git a/code/datums/diseases/heartfailure.dm b/code/datums/diseases/heartfailure.dm index b11163c4..abecef49 100644 --- a/code/datums/diseases/heartfailure.dm +++ b/code/datums/diseases/heartfailure.dm @@ -97,7 +97,7 @@ affected_mob.contract_disease(/datum/ailment/disease/flatline,null,null,1) //Because apparently mobs without an organholder or heart object can have this disease, I'm checking if it's human and if they have a heart. Which they should if they're human. -datum/ailment/disease/heartfailure/proc/damage_heart_if_found(var/stage) +datum/ailment/disease/heartfailure/proc/damage_heart_if_found(var/stage, var/mob/living/affected_mob) if (ishuman(affected_mob)) var/mob/living/carbon/human/H = affected_mob if (H.organHolder && H.organHolder.heart && !H.organHolder.heart.robotic) diff --git a/code/datums/genetics/bioEffects/beneficial.dm b/code/datums/genetics/bioEffects/beneficial.dm index e837fdf3..49aa0968 100644 --- a/code/datums/genetics/bioEffects/beneficial.dm +++ b/code/datums/genetics/bioEffects/beneficial.dm @@ -186,8 +186,8 @@ //I'm lazy, sue me. If the mob is human and has an organholder. loop through the list of organs, if it is missing one, call create_organs else if (H.organHolder) - C.organHolder.heal_organs(3, 3, 3, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) - if (prob(5) && is_missing_organs()) + H.organHolder.heal_organs(3, 3, 3, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas", "heart", "brain", "left_eye", "right_eye")) + if (prob(5) && H.organHolder.is_missing_organs()) H.organHolder.create_organs() boutput(H, "You feel less empty inside.") @@ -218,7 +218,7 @@ if (ishuman(L)) var/mob/living/carbon/human/H = L if (H.organHolder) - H.organHolder.heal_organs(2, 2, 2, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + H.organHolder.heal_organs(1, 1, 3, 60, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas", "heart")) ///////////// // Stealth // diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 0f300311..71beca6f 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -5718,8 +5718,9 @@ /mob/living/carbon/human/emp_act() boutput(src, "Your equipment malfunctions.") - if (src.organHolder && src.organHolder.heart && src.organHolder.heart.robotic) - src.organHolder.heart.broken = 1 + //emp breaks heart? no thanks. All robotic organs now take damage from EMP's. this will be enough... + if (src.organHolder && src.organHolder.heart && src.organHolder.heart.robotic && prob(50)) + // src.organHolder.heart.broken = 1 boutput(src, "Your cyberheart malfunctions and shuts down!") src.contract_disease(/datum/ailment/disease/flatline,null,null,1) @@ -5776,7 +5777,7 @@ /mob/living/carbon/human/full_heal() if (src.organHolder) - src.organHolder.heal_organs(10000, 10000, 10000, 100, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas")) + src.organHolder.heal_organs(10000, 10000, 10000, 100, list("liver", "left_kidney", "right_kidney", "stomach", "intestines","spleen", "left_lung", "right_lung","appendix", "pancreas", "heart", "brain", "left_eye", "right_eye")) if (src.organHolder.chest) src.organHolder.chest.op_stage = 0 if (src.organHolder.heart) @@ -6611,5 +6612,5 @@ if (src.organHolder && src.organHolder.brain) return src.organHolder.brain.get_damage() //leaving this just in case, should never be called I assume - return src.brainloss + ..() diff --git a/code/mob/living/carbon/human/procs/damage.dm b/code/mob/living/carbon/human/procs/damage.dm index f6a800a4..fd47ba17 100644 --- a/code/mob/living/carbon/human/procs/damage.dm +++ b/code/mob/living/carbon/human/procs/damage.dm @@ -604,7 +604,7 @@ var/update = 0 - for (var/organName in src.organs) + for (var/organName in src.organs) //This is that "organs" list which is used for things like head/chest/limbs. var/obj/item/extOrgan = src.organs["[organName]"] if (istype(extOrgan, /obj/item/organ)) var/obj/item/organ/O = extOrgan diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index d6b41c32..13078daf 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -368,9 +368,9 @@ var/obj/item/organ/heart/myHeart = src.heart if (src.donor.reagents) src.donor.reagents.trans_to(myHeart, 330) - if (src.heart.robotic) - src.donor.remove_stam_mod_regen("heart") - src.donor.remove_stam_mod_max("heart") + // if (src.heart.robotic) + // src.donor.remove_stam_mod_regen("heart") + // src.donor.remove_stam_mod_max("heart") myHeart.set_loc(location) myHeart.on_removal() src.heart = null @@ -647,12 +647,12 @@ if (newHeart.broken || src.donor.bioHolder.HasEffect("elecres")) src.donor.show_text("Something is wrong with [newHeart], it fails to start beating!", "red") src.donor.contract_disease(/datum/ailment/disease/flatline,null,null,1) - if (newHeart.emagged) - src.donor.add_stam_mod_regen("heart", 20) - src.donor.add_stam_mod_max("heart", 100) - else - src.donor.add_stam_mod_regen("heart", 10) - src.donor.add_stam_mod_max("heart", 50) + // if (newHeart.emagged) + // src.donor.add_stam_mod_regen("heart", 20) + // src.donor.add_stam_mod_max("heart", 100) + // else + // src.donor.add_stam_mod_regen("heart", 10) + // src.donor.add_stam_mod_max("heart", 50) newHeart.op_stage = op_stage src.heart = newHeart newHeart.set_loc(src.donor) @@ -924,11 +924,55 @@ return proc/on_transplant(var/mob/M as mob) + if (ishuman(M)) + var/mob/living/carbon/human/H = M + src.donor = H + else + return + + //all robotic organs have a base stamina buff, some have others, see heart. maybe lungs in future + if (src.robotic) + if (src.emagged) + src.donor.add_stam_mod_regen("cyber-[src.organ_name]", 5) + src.donor.add_stam_mod_max("cyber-[src.organ_name]", 20) + else + src.donor.add_stam_mod_regen("cyber-[src.organ_name]", 2) + src.donor.add_stam_mod_max("cyber-[src.organ_name]", 10) + return proc/on_removal() + //all robotic organs have a stamina buff we must remove + if (src.robotic) + if (src.emagged) + src.donor.remove_stam_mod_regen("cyber-[src.organ_name]") + src.donor.remove_stam_mod_max("cyber-[src.organ_name]") + else + src.donor.remove_stam_mod_regen("cyber-[src.organ_name]") + src.donor.remove_stam_mod_max("cyber-[src.organ_name]") + return + emag_act(var/mob/user, var/obj/item/card/emag/E) + if (!src.robotic) + return + if (user) + user.show_text("You disable the safety limiters on [src].", "red") + src.visible_message("[src] sparks and shudders oddly!", 1) + src.emagged = 1 + return 1 + + demag(var/mob/user) + if (!src.robotic) + return + + if (!src.emagged) + return 0 + if (user) + user.show_text("You reactivate the safety limiters on [src].", "red") + src.emagged = 0 + return 1 + take_damage(brute, burn, tox, damage_type) if (brute <= 0 && burn <= 0 && tox <= 0) return 0 @@ -1062,6 +1106,16 @@ on_transplant() ..() + + if (src.robotic) + if (src.emagged) + src.donor.add_stam_mod_regen("heart", 15) + src.donor.add_stam_mod_max("heart", 90) + else + src.donor.add_stam_mod_regen("heart", 5) + src.donor.add_stam_mod_max("heart", 40) + + if (src.donor) for (var/datum/ailment_data/disease in src.donor.ailments) if (disease.cure == "Heart Transplant") @@ -1083,7 +1137,7 @@ if (!H.organHolder) return ..() - if (!H.organHolder.heart) + if (!H.organHolder.heart && H.organHolder.chest.op_stage == 9.0) var/fluff = pick("insert", "shove", "place", "drop", "smoosh", "squish") @@ -1119,25 +1173,6 @@ robotic = 1 mats = 8 - emag_act(var/mob/user, var/obj/item/card/emag/E) - if (user) - user.show_text("You disable the safety limiters on [src].", "red") - src.visible_message("[src] sparks and shudders oddly!", 1) - src.emagged = 1 - return 1 - - demag(var/mob/user) - if (!src.emagged) - return 0 - if (user) - user.show_text("You reactivate the safety limiters on [src].", "red") - src.emagged = 0 - return 1 - - emp_act() - if (!src.broken) - src.broken = 1 - /*=========================*/ /*----------Lungs----------*/ /*=========================*/ @@ -1381,6 +1416,7 @@ assigned.images.Add(I) on_transplant(var/mob/M as mob) + ..() if (M.client) src.assigned = M.client spawn(-1) @@ -1423,6 +1459,7 @@ return on_transplant(var/mob/M as mob) + ..() src.camera.c_tag = "[M]'s Eye" return ..() diff --git a/code/obj/item/surgery_tools.dm b/code/obj/item/surgery_tools.dm index d6a51197..6add3cd5 100644 --- a/code/obj/item/surgery_tools.dm +++ b/code/obj/item/surgery_tools.dm @@ -877,6 +877,10 @@ BODY BAG var/mob/Poisoner = null module_research = list("tools" = 3, "medicine" = 3, "weapons" = 0.25) + New() + ..() + src.create_reagents(5) + attack(mob/living/carbon/M as mob, mob/user as mob) if (src.reagents && src.reagents.total_volume) logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting]) [log_reagents(src)]") @@ -886,3 +890,4 @@ BODY BAG if (!snip_surgery(M, user)) return ..() else return + diff --git a/code/obj/machinery/manufacturer.dm b/code/obj/machinery/manufacturer.dm index 181f35ce..9a0ed813 100644 --- a/code/obj/machinery/manufacturer.dm +++ b/code/obj/machinery/manufacturer.dm @@ -1614,6 +1614,14 @@ /datum/manufacture/cybereye_spectro, /datum/manufacture/cybereye_prodoc, /datum/manufacture/cybereye_camera, + /datum/manufacture/cyberappendix, + /datum/manufacture/cyberpancreas, + /datum/manufacture/cyberspleen, + /datum/manufacture/cyberintestines, + /datum/manufacture/cyberstomach, + /datum/manufacture/cyberkidney, + /datum/manufacture/cyberliver, + /datum/manufacture/cyberlung, /datum/manufacture/shell_frame, /datum/manufacture/ai_interface, /datum/manufacture/shell_cell, @@ -1676,6 +1684,7 @@ /datum/manufacture/suture, /datum/manufacture/stapler, /datum/manufacture/surgical_spoon, + /datum/manufacture/surgical_scissors, /datum/manufacture/prodocs, /datum/manufacture/visor, /datum/manufacture/deafhs, diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 4a8ab2ae..1de839fe 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -20,8 +20,6 @@ else // if all else fails? return 0 // surgery is not okay - boutput(M, "[user] begins cutting your hair.") - playsound(src.loc, "sound/items/Scissor.ogg", 100, 1) /proc/headSurgeryCheck(var/mob/living/carbon/human/patient as mob) if (!patient) // did we not get passed a patient? @@ -508,7 +506,7 @@ /* ---------- SCALPEL - BUTT ---------- */ - else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent == "harm") + else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent == INTENT_HARM) if (patient.butt_op_stage == 0.0) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) @@ -614,14 +612,6 @@ return 1 -/* ---------- SCALPEL - HEART ---------- */ - - else if (patient.organHolder.heart) - - - else - src.surgeryConfusion(patient, surgeon, damage_high) - return 1 /* chest op_stage description cut = scalpel @@ -681,403 +671,139 @@ patient.organHolder.chest.op_stage = 5.0 return 1 + //second cut, path for stomach/Intestines if (1.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - //second cut, path for appendix/liver - if (surgeon.a_intent == INTENT_GRAB) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right abdomen open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right abdomen open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right abdomen open with [src]!") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.chest.op_stage = 3.0 - return 1 - - //second cut, path for stomach/Intestines - else if (surgeon.a_intent == INTENT_DISARM) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] lower abdomen open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] lower abdomen open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your lower abdomen open with [src]!") - + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.chest.op_stage = 4.0 + take_bleeding_damage(patient, surgeon, damage_low) return 1 - //remove lungs or spleen - if (2.0) - //remove spleen with this cut - if (surgeon.a_intent == INTENT_GRAB) - if (patient.organHolder.spleen) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.spleen) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] lower abdomen open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] lower abdomen open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your lower abdomen open with [src]!") - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_high, 0) - take_bleeding_damage(patient, surgeon, damage_high) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] spleen out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] spleen out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] spleen out with [src]!") - - patient.TakeDamage("chest", damage_high, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("spleen") - - return 1 - //remove lungs - else if (surgeon.a_intent == INTENT_DISARM) - //remove left lung - if (surgeon.find_in_hand(src) == surgeon.l_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.left_lung) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_high, 0) - take_bleeding_damage(patient, surgeon, damage_high) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left lung out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left lung out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left lung out with [src]!") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - logTheThing("combat", surgeon, patient, "removed %target%'s left lung with [src].") - patient.organHolder.drop_organ("left_lung") - - return 1 - //remove right lung - else if (surgeon.find_in_hand(src) == surgeon.r_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.right_lung) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_high, 0) - take_bleeding_damage(patient, surgeon, damage_high) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right lung out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right lung out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right lung out with [src]!") - logTheThing("combat", surgeon, patient, "removed %target%'s right lung with [src].") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("right_lung") - - return 1 + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 4.0 + return 1 - //remove appendix or liver + //remove liver with this cut if (3.0) - //remove appendix with this cut - if (surgeon.a_intent == INTENT_GRAB) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.appendix) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] appendix out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] appendix out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your appendix out with [src]!") + if (!patient.organHolder.liver) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("appendix") - + take_bleeding_damage(patient, surgeon, damage_low) return 1 - //remove liver with this cut - else if (surgeon.a_intent == INTENT_DISARM) - - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.liver) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] liver out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] liver out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your liver out with [src]!") - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] liver out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] liver out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your liver out with [src]!") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("liver") + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("liver") - return 1 + return 1 - //path for stomach and intestines + //remove intestines with this cut if (4.0) - //remove stomach with this cut - if (surgeon.a_intent == INTENT_GRAB) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.stomach) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] stomach out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] stomach out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your stomach out with [src]!") + if (!patient.organHolder.intestines) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("stomach") - + take_bleeding_damage(patient, surgeon, damage_low) return 1 - //remove intestines with this cut - else if (surgeon.a_intent == INTENT_DISARM) - - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.intestines) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] intestines out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] intestines out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your intestines out with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] intestines out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] intestines out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your intestines out with [src]!") - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("intestines") + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("intestines") - return 1 + return 1 - //paths for pancreas and kidneys + //path for kidneys/spleen/pancreas if (5.0) - //path for pancreas - if (surgeon.a_intent == INTENT_GRAB) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - patient.tri_message("[surgeon] makes a cut in preparation to access [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas with [src]!",\ - surgeon, "You make a cut in preparation to access [surgeon == patient ? "your" : "[patient]'s"] pancreas with [src]!",\ - patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut in preparation to access your pancreas with [src]!") + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.chest.op_stage = 6.0 - + take_bleeding_damage(patient, surgeon, damage_low) return 1 - //path for kidneys - else if (surgeon.a_intent == INTENT_DISARM) - - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + patient.tri_message("[surgeon] makes a cut in preparation to access [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] kidneys with [src]!",\ + surgeon, "You make a cut in preparation to access [surgeon == patient ? "your" : "[patient]'s"] kidneys with [src]!",\ + patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut in preparation to access your kidneys with [src]!") - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - patient.tri_message("[surgeon] makes a cut in preparation to access [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] kidneys with [src]!",\ - surgeon, "You make a cut in preparation to access [surgeon == patient ? "your" : "[patient]'s"] kidneys with [src]!",\ - patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut in preparation to access your kidneys with [src]!") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.chest.op_stage = 7.0 + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 7.0 - return 1 + return 1 - //remove pancreas + //remove spleen with this cut if (6.0) - - if (surgeon.a_intent == INTENT_GRAB) + if (patient.organHolder.spleen) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - if (!patient.organHolder.pancreas) + if (!patient.organHolder.spleen) src.surgeryConfusion(patient, surgeon, damage_low) return 1 if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) return 1 + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] spleen out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] spleen out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] spleen out with [src]!") - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] pancreas out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your pancreas out with [src]!") - - patient.TakeDamage("chest", damage_low, 0) + patient.TakeDamage("chest", damage_high, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) take_bleeding_damage(patient, surgeon, damage_low) else surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") patient.updatehealth() - patient.organHolder.drop_organ("pancreas") + patient.organHolder.drop_organ("spleen") return 1 - //remove kidneys - if (7.0) - if (surgeon.a_intent == INTENT_GRAB) - //remove left kidney - if (surgeon.find_in_hand(src) == surgeon.l_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.left_kidney) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left kidney with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left kidney with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left kidney with [src]!") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - logTheThing("combat", surgeon, patient, "removed %target%'s left kidney with [src].") - patient.organHolder.drop_organ("left_kidney") - - return 1 - //remove right kidney - else if (surgeon.find_in_hand(src) == surgeon.r_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.right_kidney) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right kidney with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right kidney with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right kidney with [src]!") - logTheThing("combat", surgeon, patient, "removed %target%'s right kidney with [src].") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("right_kidney") - - return 1 - + //heart path if (8.0) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) @@ -1301,7 +1027,7 @@ /* ---------- SAW - BUTT ---------- */ - else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent == "harm") + else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent == INTENT_HARM) switch (patient.butt_op_stage) if (1.0) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) @@ -1354,7 +1080,7 @@ /* ---------- SAW - lungs/heart ---------- */ - else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent == INTENT_GRAB) + else if (surgeon.zone_sel.selecting == "chest") if (patient.organHolder.chest) switch (patient.organHolder.chest.op_stage) if (1.0) @@ -1435,7 +1161,7 @@ /* ---------- SAW - HEART ---------- */ - else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent != "harm") + else if (surgeon.zone_sel.selecting == "chest" && surgeon.a_intent != INTENT_HARM) if (patient.organHolder.heart) switch (patient.organHolder.heart.op_stage) if (1.0) @@ -1957,7 +1683,14 @@ else return 0 + + //////////////////////////////////////////////////////////////////// + +/* ============================= */ +/* ------------ SNIP ----------- */ +/* ============================= */ + /obj/item/proc/snip_surgery(var/mob/living/carbon/human/patient as mob, var/mob/living/surgeon as mob) if (!ishuman(patient)) return 0 @@ -1993,36 +1726,6 @@ /* ---------- SNIP - chest ---------- */ if (surgeon.zone_sel.selecting == "chest") - /* chest op_stage description - cut = scalpel - saw = circular saw - snip = surgical scissors/garden snips - - op_stage = (actions you can take) -> where it will send you - 0.0 = snip -> 1.0 || cut -> 5.0 - 1.0 = snip -> 3.0 || cut -> 4.0 || (G)saw -> 2.0 - 2.0 = cut is remove lungs R/L - 3.0 = snip is remove appendix || cut is remove liver - 4.0 = snip is remove stomach || cut is remove intestines - 5.0 = snip -> 6.0 || cut -> 7.0 - 6.0 = snip is remove pancreas || cut is remove spleen - 7.0 = snip is remove kidneys - - - remove appendix = snip -> snip -> snip - remove liver = snip -> snip -> cut - - remove stomach = snip -> cut -> snip - remove intestines = snip -> cut -> cut - - remove pancreas = cut -> snip -> snip - remove spleen = cut -> snip -> cut - - remove kidneys = cut -> cut -> snip -> Right/Left hands for removing R/L kidneys - remove lungs = snip -> saw -> snip -> Right/Left hands for removing R/L lungs - - *note, for lungs/kidneys R/L hand use only matters for last cut - */ if (patient.organHolder.chest) switch (patient.organHolder.chest.op_stage) if (0.0) @@ -2045,169 +1748,51 @@ surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") patient.updatehealth() - if (surgeon.a_intent == INTENT_GRAB) - patient.organHolder.chest.op_stage = 1.0 - if (surgeon.a_intent == INTENT_DISARM) - patient.organHolder.chest.op_stage = 5.0 - + patient.organHolder.chest.op_stage = 1.0 return 1 + //second cut, path for appendix/liver if (1.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - //second cut, path for appendix/liver - if (surgeon.a_intent == INTENT_GRAB) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right abdomen open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right abdomen open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right abdomen open with [src]!") - + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.chest.op_stage = 3.0 + take_bleeding_damage(patient, surgeon, damage_low) return 1 - //second cut, path for stomach/Intestines - else if (surgeon.a_intent == INTENT_DISARM) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] lower abdomen open with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] lower abdomen open with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your lower abdomen open with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right abdomen open with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right abdomen open with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right abdomen open with [src]!") - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.chest.op_stage = 4.0 - return 1 + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 3.0 + return 1 - //remove lungs or spleen + //remove lungs if (2.0) - //remove spleen with this cut - if (surgeon.a_intent == INTENT_GRAB) - if (patient.organHolder.spleen) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.spleen) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_high, 0) - take_bleeding_damage(patient, surgeon, damage_high) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] spleen out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] spleen out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] spleen out with [src]!") - - patient.TakeDamage("chest", damage_high, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("spleen") - - return 1 - //remove lungs - else if (surgeon.a_intent == INTENT_DISARM) - //remove left lung - if (surgeon.find_in_hand(src) == surgeon.l_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.left_lung) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_high, 0) - take_bleeding_damage(patient, surgeon, damage_high) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left lung out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left lung out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left lung out with [src]!") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - logTheThing("combat", surgeon, patient, "removed %target%'s left lung with [src].") - patient.organHolder.drop_organ("left_lung") - - return 1 - //remove right lung - else if (surgeon.find_in_hand(src) == surgeon.r_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.right_lung) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_high, 0) - take_bleeding_damage(patient, surgeon, damage_high) - return 1 - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right lung out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right lung out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right lung out with [src]!") - logTheThing("combat", surgeon, patient, "removed %target%'s right lung with [src].") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("right_lung") - - return 1 - - //remove appendix or liver - if (3.0) - //remove appendix with this cut - if (surgeon.a_intent == INTENT_GRAB) + //remove left lung + if (surgeon.find_in_hand(src) == surgeon.l_hand) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - if (!patient.organHolder.appendix) + if (!patient.organHolder.left_lung) src.surgeryConfusion(patient, surgeon, damage_low) return 1 if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] appendix out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] appendix out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your appendix out with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left lung out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left lung out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left lung out with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -2215,28 +1800,28 @@ else surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") patient.updatehealth() - patient.organHolder.drop_organ("appendix") + logTheThing("combat", surgeon, patient, "removed %target%'s left lung with [src].") + patient.organHolder.drop_organ("left_lung") return 1 - - //remove liver with this cut - else if (surgeon.a_intent == INTENT_DISARM) - + //remove right lung + else if (surgeon.find_in_hand(src) == surgeon.r_hand) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - if (!patient.organHolder.liver) + if (!patient.organHolder.right_lung) src.surgeryConfusion(patient, surgeon, damage_low) return 1 if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) + surgeon.visible_message("[surgeon][fluff2]!") + patient.TakeDamage("chest", damage_high, 0) + take_bleeding_damage(patient, surgeon, damage_high) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] liver out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] liver out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your liver out with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right lung out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right lung out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right lung out with [src]!") + logTheThing("combat", surgeon, patient, "removed %target%'s right lung with [src].") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -2244,109 +1829,141 @@ else surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") patient.updatehealth() - patient.organHolder.drop_organ("liver") + patient.organHolder.drop_organ("right_lung") return 1 - //path for stomach and intestines - if (4.0) - //remove stomach with this cut - if (surgeon.a_intent == INTENT_GRAB) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.stomach) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 + //remove appendix or liver + if (3.0) + //remove appendix with this cut + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] stomach out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] stomach out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your stomach out with [src]!") + if (!patient.organHolder.appendix) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("stomach") - + take_bleeding_damage(patient, surgeon, damage_low) return 1 - //remove intestines with this cut - else if (surgeon.a_intent == INTENT_DISARM) + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] appendix out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] appendix out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your appendix out with [src]!") - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() - if (!patient.organHolder.intestines) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 + patient.organHolder.drop_organ("appendix") + return 1 - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 + //path for stomach and intestines + if (4.0) + //remove stomach with this cut + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] intestines out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] intestines out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your intestines out with [src]!") + if (!patient.organHolder.stomach) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("intestines") - + take_bleeding_damage(patient, surgeon, damage_low) return 1 + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] stomach out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] stomach out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your stomach out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("stomach") + + return 1 + //paths for pancreas and kidneys if (5.0) //path for pancreas - if (surgeon.a_intent == INTENT_GRAB) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 - patient.tri_message("[surgeon] makes a cut in preparation to access [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas with [src]!",\ - surgeon, "You make a cut in preparation to access [surgeon == patient ? "your" : "[patient]'s"] pancreas with [src]!",\ - patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut in preparation to access your pancreas with [src]!") + patient.tri_message("[surgeon] makes a cut just below [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] ribcage with [src]!",\ + surgeon, "You make a cut just below [surgeon == patient ? "your" : "[patient]'s"] ribcage with [src]!",\ + patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut just below your ribcage with [src]!") - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.chest.op_stage = 6.0 + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.chest.op_stage = 6.0 + + return 1 + + //remove pancreas + if (6.0) + playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.pancreas) + src.surgeryConfusion(patient, surgeon, damage_low) return 1 - //path for kidneys - else if (surgeon.a_intent == INTENT_DISARM) + if (prob(screw_up_prob)) + surgeon.visible_message("[surgeon][fluff]!") + patient.TakeDamage("chest", damage_low, 0) + take_bleeding_damage(patient, surgeon, damage_low) + return 1 + + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas out with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] pancreas out with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your pancreas out with [src]!") + + patient.TakeDamage("chest", damage_low, 0) + if (!surgeon.find_type_in_hand(/obj/item/hemostat)) + take_bleeding_damage(patient, surgeon, damage_low) + else + surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") + patient.updatehealth() + patient.organHolder.drop_organ("pancreas") + + return 1 + //remove kidneys + if (7.0) + //remove left kidney + if (surgeon.find_in_hand(src) == surgeon.l_hand) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + if (!patient.organHolder.left_kidney) + src.surgeryConfusion(patient, surgeon, damage_low) + return 1 if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") + surgeon.visible_message("[surgeon][fluff2]!") patient.TakeDamage("chest", damage_low, 0) take_bleeding_damage(patient, surgeon, damage_low) return 1 - patient.tri_message("[surgeon] makes a cut in preparation to access [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] kidneys with [src]!",\ - surgeon, "You make a cut in preparation to access [surgeon == patient ? "your" : "[patient]'s"] kidneys with [src]!",\ - patient, "[patient == surgeon ? "You make" : "[surgeon] makes"] a cut in preparation to access your kidneys with [src]!") + + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left kidney with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left kidney with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left kidney with [src]!") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -2354,30 +1971,28 @@ else surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") patient.updatehealth() - patient.organHolder.chest.op_stage = 7.0 + logTheThing("combat", surgeon, patient, "removed %target%'s left kidney with [src].") + patient.organHolder.drop_organ("left_kidney") return 1 - - //remove pancreas - if (6.0) - - if (surgeon.a_intent == INTENT_GRAB) + //remove right kidney + else if (surgeon.find_in_hand(src) == surgeon.r_hand) playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - if (!patient.organHolder.pancreas) + if (!patient.organHolder.right_kidney) src.surgeryConfusion(patient, surgeon, damage_low) return 1 - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff]!") + surgeon.visible_message("[surgeon][fluff2]!") patient.TakeDamage("chest", damage_low, 0) take_bleeding_damage(patient, surgeon, damage_low) return 1 - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] pancreas out with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] pancreas out with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your pancreas out with [src]!") + patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right kidney with [src]!",\ + surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right kidney with [src]!",\ + patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right kidney with [src]!") + logTheThing("combat", surgeon, patient, "removed %target%'s right kidney with [src].") patient.TakeDamage("chest", damage_low, 0) if (!surgeon.find_type_in_hand(/obj/item/hemostat)) @@ -2385,69 +2000,9 @@ else surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") patient.updatehealth() - patient.organHolder.drop_organ("pancreas") + patient.organHolder.drop_organ("right_kidney") return 1 - - //remove kidneys - if (7.0) - if (surgeon.a_intent == INTENT_GRAB) - //remove left kidney - if (surgeon.find_in_hand(src) == surgeon.l_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.left_kidney) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] left kidney with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] left kidney with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your left kidney with [src]!") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - logTheThing("combat", surgeon, patient, "removed %target%'s left kidney with [src].") - patient.organHolder.drop_organ("left_kidney") - - return 1 - //remove right kidney - else if (surgeon.find_in_hand(src) == surgeon.r_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) - - if (!patient.organHolder.right_kidney) - src.surgeryConfusion(patient, surgeon, damage_low) - return 1 - if (prob(screw_up_prob)) - surgeon.visible_message("[surgeon][fluff2]!") - patient.TakeDamage("chest", damage_low, 0) - take_bleeding_damage(patient, surgeon, damage_low) - return 1 - - - patient.tri_message("[surgeon] cuts [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] right kidney with [src]!",\ - surgeon, "You cut [surgeon == patient ? "your" : "[patient]'s"] right kidney with [src]!",\ - patient, "[patient == surgeon ? "You cut" : "[surgeon] cuts"] your right kidney with [src]!") - logTheThing("combat", surgeon, patient, "removed %target%'s right kidney with [src].") - - patient.TakeDamage("chest", damage_low, 0) - if (!surgeon.find_type_in_hand(/obj/item/hemostat)) - take_bleeding_damage(patient, surgeon, damage_low) - else - surgeon.show_text("You clamp the bleeders with the hemostat.", "blue") - patient.updatehealth() - patient.organHolder.drop_organ("right_kidney") - - return 1 else src.surgeryConfusion(patient, surgeon, damage_high) return 1 @@ -2456,3 +2011,5 @@ else return 0 +//sound for snip surgery + // playsound(src.loc, "sound/items/Scissor.ogg", 100, 1) From ec48537e03bc41960fadbeb19cc7f239ad3d76a6 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 3 Sep 2018 19:27:33 -0400 Subject: [PATCH 073/105] add pathogens to burst appendix, start thing for checking if an organ is exposed to open air will lose health. Somethinga bou severity of emp_act. no clue what that is --- .../diseases/organ_diseases/appendicitis.dm | 25 +++++++++++++++++-- code/mob/living/carbon/human.dm | 7 ++++-- code/obj/item/organ.dm | 16 +++++++++++- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm index 3115e9cb..e73e5fd4 100644 --- a/code/datums/diseases/organ_diseases/appendicitis.dm +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -56,10 +56,31 @@ //human's appendix burst, and add a load of toxic chemicals or bacteria to the person. if (prob(5)) - H.reagents.add_reagent("toxin", 40) H.cure_disease(D) H.organHolder.appendix.take_damage(200,200,200) - H.organHolder.drop_organ("appendix") + // H.organHolder.drop_organ("appendix") + H.emote("collapse") + H.weakened = max(H.weakened, 30) + + if (prob(20)) + H.reagents.add_reagent("toxin", 20) + add_pathogens(H, 30) + + boutput(H, "Your appendix has burst! Seek medical help!") H.take_toxin_damage(1) H.updatehealth() + +//stolen from the admin button because I know fuck all about pathogens - Kyle +/datum/ailment/disease/appendicitis/proc/add_pathogens(var/mob/living/A, var/amount) + if (!A || !A.reagents) + return 0 + + A.reagents.add_reagent("pathogen", amount) + var/datum/reagent/blood/pathogen/R = A.reagents.get_reagent("pathogen") + var/datum/pathogen/P = unpool(/datum/pathogen) + P.setup(1) + R.pathogens += P.pathogen_uid + R.pathogens[P.pathogen_uid] = P + + return 1 diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 71beca6f..99439a8d 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4295,8 +4295,11 @@ return if (src.blood_volume < 500 && src.blood_volume > 0) // if we're full or empty, don't bother v - if (prob(66) && src.organHolder.spleen && src.organHolder.spleen.get_damage() < 100) //might just want to make a var for this an set it in handle_organs, but in the interest of making little changes, here this is - src.blood_volume ++ // maybe get a little blood back ^ + if (src.organHolder.spleen && src.organHolder.spleen.get_damage() < 100) //might just want to make a var for this an set it in handle_organs, but in the interest of making little changes, here this is + if (prob(66)) + src.blood_volume++ //chance for blood from organic spleen + else if (src.organHolder.spleen.robotic) + src.blood_volume+=2 // garuanteed extra blood with robotic spleen if (src.bleeding) var/fluff = pick("better", "like they're healing a bit", "a little better", "itchy", "less tender", "less painful", "like they're closing", "like they're closing up a bit", "like they're closing up a little") diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 13078daf..7c730b34 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -921,6 +921,10 @@ ..() // call your goddamn parents proc/on_life() + //if exposed to warm open air, have a chance to lose health + // if (prob(20)) + // if (!istype(src.loc,/obj/)) + return proc/on_transplant(var/mob/M as mob) @@ -1000,9 +1004,19 @@ get_damage() return src.brute_dam + src.burn_dam + src.tox_dam - emp_act() + emp_act(severity) if (robotic) src.take_damage(20, 20, 20) + // switch (severity) + // if (1.0) + + // checkhealth() + // if(2.0) + + // checkhealth() + // if(3.0) + // src.health -= 25 + // checkhealth() /*=========================*/ /*----------Brain----------*/ From 10e6b1fbf5cc0c0b46dd48882951ae17162ac39e Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Tue, 4 Sep 2018 19:46:02 -0400 Subject: [PATCH 074/105] organs can take damage when exposed to open air, snip surgery does less damage and has a better sound effect --- code/obj/item/organ.dm | 19 +++++-------------- code/procs/surgery.dm | 28 +++++++++++++--------------- 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 7c730b34..7db05eaf 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -921,9 +921,10 @@ ..() // call your goddamn parents proc/on_life() - //if exposed to warm open air, have a chance to lose health - // if (prob(20)) - // if (!istype(src.loc,/obj/)) + //if exposed to open air, have a chance to lose health. Wanted to force it to be refridgerated, but I can't find that code for food --Kyle + if (prob(10) && ((synthetic == 0) && (robotic == 0))) //Only meat organs spoil + if (!istype(src.loc,/obj/)) + src.take_damage(brute, burn, tox, damage_type) return @@ -1004,19 +1005,9 @@ get_damage() return src.brute_dam + src.burn_dam + src.tox_dam - emp_act(severity) + emp_act() if (robotic) src.take_damage(20, 20, 20) - // switch (severity) - // if (1.0) - - // checkhealth() - // if(2.0) - - // checkhealth() - // if(3.0) - // src.health -= 25 - // checkhealth() /*=========================*/ /*----------Brain----------*/ diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 1de839fe..419ba1be 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -1719,8 +1719,9 @@ var/screw_up_prob = calc_screw_up_prob(patient, surgeon) - var/damage_low = calc_surgery_damage(surgeon, screw_up_prob, rand(5,15)/*, src.adj1, src.adj2*/) - var/damage_high = calc_surgery_damage(surgeon, screw_up_prob, rand(15,25)/*, src.adj1, src.adj2*/) + //Snipping is a lot safer than other types of surgery. Is it because snips are the One True Surgery Tool? Maybe, maybe not. Who can say. + var/damage_low = calc_surgery_damage(surgeon, screw_up_prob, rand(1,5)/*, src.adj1, src.adj2*/) + var/damage_high = calc_surgery_damage(surgeon, screw_up_prob, rand(5,15)/*, src.adj1, src.adj2*/) DEBUG_MESSAGE("[patient]'s surgery (performed by [surgeon]) damage_low is [damage_low], damage_high is [damage_high]") @@ -1729,7 +1730,7 @@ if (patient.organHolder.chest) switch (patient.organHolder.chest.op_stage) if (0.0) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") @@ -1753,7 +1754,7 @@ //second cut, path for appendix/liver if (1.0) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") @@ -1778,7 +1779,7 @@ if (2.0) //remove left lung if (surgeon.find_in_hand(src) == surgeon.l_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (!patient.organHolder.left_lung) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1806,7 +1807,7 @@ return 1 //remove right lung else if (surgeon.find_in_hand(src) == surgeon.r_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (!patient.organHolder.right_lung) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1836,7 +1837,7 @@ //remove appendix or liver if (3.0) //remove appendix with this cut - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (!patient.organHolder.appendix) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1865,7 +1866,7 @@ //path for stomach and intestines if (4.0) //remove stomach with this cut - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (!patient.organHolder.stomach) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1894,7 +1895,7 @@ //paths for pancreas and kidneys if (5.0) //path for pancreas - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") @@ -1918,7 +1919,7 @@ //remove pancreas if (6.0) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (!patient.organHolder.pancreas) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1949,7 +1950,7 @@ if (7.0) //remove left kidney if (surgeon.find_in_hand(src) == surgeon.l_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (!patient.organHolder.left_kidney) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1977,7 +1978,7 @@ return 1 //remove right kidney else if (surgeon.find_in_hand(src) == surgeon.r_hand) - playsound(get_turf(patient), "sound/weapons/squishcut.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) if (!patient.organHolder.right_kidney) src.surgeryConfusion(patient, surgeon, damage_low) @@ -2010,6 +2011,3 @@ src.surgeryConfusion(patient, surgeon, damage_low) else return 0 - -//sound for snip surgery - // playsound(src.loc, "sound/items/Scissor.ogg", 100, 1) From af136c1dd0912c026d80b060dda61a14b1b07961 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 6 Sep 2018 19:36:55 -0400 Subject: [PATCH 075/105] no, that air damaging stuff is dumb --- code/mob/living/carbon/human.dm | 14 ++++++++++---- code/obj/item/organ.dm | 6 +----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 99439a8d..01ece675 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4513,10 +4513,16 @@ // appendix if (!src.nodamage) - if (src.organHolder.appendix && src.organHolder.appendix.get_damage() >= 100) - src.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) - else if (src.organHolder.appendix.get_damage() >= 65 && prob(src.organHolder.appendix.get_damage() * 0.2)) - src.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) + + if (src.organHolder.appendix) + if (src.organHolder.appendix.get_damage() >= 100) + src.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) + else if (src.organHolder.appendix.get_damage() >= 65 && prob(src.organHolder.appendix.get_damage() * 0.2)) + src.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) + + if (src.organHolder.appendix.robotic && src.health < 10 && prob(10)) + src.reagents.add_reagent(pick("saline", "salbutamol", "salicylic_acid", "synthflesh"), 4) + // spleen if there's no spleen don't let the user regen blood naturally // if (src.organHolder.spleen && (src.organHolder.spleen.get_damage() >= 100)) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 7db05eaf..5d195a23 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -921,11 +921,6 @@ ..() // call your goddamn parents proc/on_life() - //if exposed to open air, have a chance to lose health. Wanted to force it to be refridgerated, but I can't find that code for food --Kyle - if (prob(10) && ((synthetic == 0) && (robotic == 0))) //Only meat organs spoil - if (!istype(src.loc,/obj/)) - src.take_damage(brute, burn, tox, damage_type) - return proc/on_transplant(var/mob/M as mob) @@ -985,6 +980,7 @@ src.burn_dam += burn src.tox_dam += tox + //I don't think this is used at all, but I'm afraid to get rid of it - Kyle if (ishuman(donor)) var/mob/living/carbon/human/H = donor // H.hit_twitch() //no From 5d97d7cb1f293d80793f9609628a73df5b87132d Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 7 Sep 2018 03:20:02 -0400 Subject: [PATCH 076/105] scanprocs change so that now a var is needed to view organ data --- code/admin/randomverbs.dm | 2 +- code/datums/chemistry/Reagents-Base.dm | 7 +++++-- code/obj/health_scanner.dm | 2 +- code/procs/scanprocs.dm | 8 +++++--- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/code/admin/randomverbs.dm b/code/admin/randomverbs.dm index 0a7e6f6f..9c191f47 100644 --- a/code/admin/randomverbs.dm +++ b/code/admin/randomverbs.dm @@ -1400,7 +1400,7 @@ return //target = input(usr, "Target", "Target") as mob in world - boutput(usr, scan_health(target, 1, 255)) + boutput(usr, scan_health(target, 1, 255, 1)) return /client/proc/cmd_admin_check_reagents(var/atom/target as null|mob|obj|turf in world) diff --git a/code/datums/chemistry/Reagents-Base.dm b/code/datums/chemistry/Reagents-Base.dm index e33c9f6e..4c6c0551 100644 --- a/code/datums/chemistry/Reagents-Base.dm +++ b/code/datums/chemistry/Reagents-Base.dm @@ -174,8 +174,11 @@ datum var/mob/living/carbon/human/H = M if (istype(H) && !H.bioHolder.HasEffect("resist_alcohol")) if (prob(25)) - if (H.organHolder.liver && !H.organHolder.liver.robotic) - H.organHolder.liver.take_damage(0, 0, rand(1,2)) + if (H.organHolder.liver) + if (!H.organHolder.liver.robotic) + H.organHolder.liver.take_damage(0, 0, rand(1,2)) + else + H.organHolder.liver.heal_damage(0, 0, rand(1,2)) ..() hydrogen diff --git a/code/obj/health_scanner.dm b/code/obj/health_scanner.dm index e2aef0b9..e3d0a7f6 100644 --- a/code/obj/health_scanner.dm +++ b/code/obj/health_scanner.dm @@ -87,7 +87,7 @@ var/data = null for (var/obj/health_scanner/floor/myPartner in src.partners) for (var/mob/M in get_turf(myPartner)) - data += "
[scan_health(M, src.reagent_scan)]" + data += "
[scan_health(M, src.reagent_scan, 1, 1)]" return data get_desc(dist) diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index e932fcdb..11e65511 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -1,5 +1,5 @@ -/proc/scan_health(var/mob/M as mob, var/verbose_reagent_info = 0, var/disease_detection = 1) +/proc/scan_health(var/mob/M as mob, var/verbose_reagent_info = 0, var/disease_detection = 1, var/organ_scan = 0) if (!M) return "ERROR: NO SUBJECT DETECTED" @@ -131,7 +131,7 @@ brain_data = "Subject has no brain." - if (verbose_reagent_info && !isvampire(H)) + if (organ_scan && !isvampire(H)) var/organ_data1 = null organ_data1 += organ_health_scan("left_lung", H) @@ -149,6 +149,8 @@ if (organ_data1) organ_data = "Scans Indicate Organ Damage:" organ_data += organ_data1 + else + organ_data = "Scans Indicate organs are in perfect health." else organ_data = "Subject has no organs." @@ -204,7 +206,7 @@ var/obj/item/organ/O = H.organHolder.organ_list[input] if (O && istype(O, /obj/item/organ)) if (O.get_damage() > 0) - return "
[input] - [O.get_damage()]" + return "
[input] - [O.get_damage()]" else return null else From 7607fce828d08394b870e17259a503e4ed21b895 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 7 Sep 2018 03:21:31 -0400 Subject: [PATCH 077/105] new health scanner and health scanner upgrade for viewing organ data. --- code/obj/item/device/scanners.dm | 75 +++++++++++++++++++++++++++++--- code/obj/machinery/vending.dm | 1 + 2 files changed, 69 insertions(+), 7 deletions(-) diff --git a/code/obj/item/device/scanners.dm b/code/obj/item/device/scanners.dm index f548055a..0cb15623 100644 --- a/code/obj/item/device/scanners.dm +++ b/code/obj/item/device/scanners.dm @@ -127,17 +127,43 @@ Contains: var/disease_detection = 1 var/reagent_upgrade = 0 var/reagent_scan = 0 + var/organ_upgrade = 0 + var/organ_scan = 0 module_research = list("analysis" = 2, "medicine" = 2, "devices" = 1) module_research_type = /obj/item/device/healthanalyzer attack_self(mob/user as mob) - if (!src.reagent_upgrade) - boutput(user, "No reagent scan upgrade detected!") - return - else + if (!src.reagent_upgrade && !src.organ_upgrade) + boutput(user, "No upgrades detected!") + + else if (src.reagent_upgrade && src.organ_upgrade) + if (src.reagent_scan && src.organ_scan) //if both active, make both off + src.reagent_scan = 0 + src.organ_scan = 0 + boutput(user, "All upgrades disabled.") + + else if (!src.reagent_scan && !src.organ_scan) //if both inactive, turn reagent on + src.reagent_scan = 1 + src.organ_scan = 0 + boutput(user, "Reagent scanner enabled.") + + else if (src.reagent_scan) //if reagent active, turn reagent off, turn organ on + src.reagent_scan = 0 + src.organ_scan = 1 + boutput(user, "Reagent scanner disabled. Organ scanner enabled.") + + else if (src.organ_scan) //if organ active, turn BOTH on + src.reagent_scan = 1 + src.organ_scan = 1 + boutput(user, "All upgrades enabled.") + + else if (src.reagent_upgrade) src.reagent_scan = !(src.reagent_scan) boutput(user, "Reagent scanner [src.reagent_scan ? "enabled" : "disabled"].") - return + + else if (src.organ_upgrade) + src.organ_scan = !(src.organ_scan) + boutput(user, "Organ scanner [src.organ_scan ? "enabled" : "disabled"].") attackby(obj/item/W as obj, mob/user as mob) if (istype(W, /obj/item/device/healthanalyzer_upgrade)) @@ -147,13 +173,35 @@ Contains: else src.reagent_upgrade = 1 src.reagent_scan = 1 - src.icon_state = "health" + if (src.organ_upgrade) + src.icon_state = "health" + else + src.icon_state = "health-r-up" src.item_state = "healthanalyzer" boutput(user, "Reagent scan upgrade installed.") playsound(src.loc ,"sound/items/Deconstruct.ogg", 80, 0) user.u_equip(W) qdel(W) return + + else if (istype(W, /obj/item/device/healthanalyzer_organ_upgrade)) + if (src.organ_upgrade) + boutput(user, "This analyzer already has an internal organ scan upgrade!") + return + else + src.organ_upgrade = 1 + src.organ_scan = 1 + if (src.reagent_upgrade) + src.icon_state = "health" + else + src.icon_state = "health-o-up" + + src.item_state = "healthanalyzer" + boutput(user, "Internal organ scan upgrade installed.") + playsound(src.loc ,"sound/items/Deconstruct.ogg", 80, 0) + user.u_equip(W) + qdel(W) + return else return ..() @@ -168,7 +216,7 @@ Contains: user.visible_message("[user] has analyzed [M]'s vitals.",\ "You have analyzed [M]'s vitals.") - boutput(user, scan_health(M, src.reagent_scan, src.disease_detection)) + boutput(user, scan_health(M, src.reagent_scan, src.disease_detection, src.organ_scan)) update_medical_record(M) if (M.stat > 1) @@ -179,6 +227,8 @@ Contains: icon_state = "health" reagent_upgrade = 1 reagent_scan = 1 + organ_upgrade = 1 + organ_scan = 1 /obj/item/device/healthanalyzer/vr icon = 'icons/effects/VR.dmi' @@ -194,6 +244,17 @@ Contains: throw_range = 10 mats = 2 +/obj/item/device/healthanalyzer_organ_upgrade + name = "health analyzer organ scan upgrade" + desc = "A small upgrade card that allows standard health analyzers to detect the health of induvidual organs in the patient." + icon_state = "organ_health_upgr" + flags = FPRINT | TABLEPASS | CONDUCT + throwforce = 0 + w_class = 1.0 + throw_speed = 5 + throw_range = 10 + mats = 2 + ///////////////////////////////////// Reagent scanner ////////////////////////////// /obj/item/device/reagentscanner diff --git a/code/obj/machinery/vending.dm b/code/obj/machinery/vending.dm index 8d237517..2bbaa22c 100644 --- a/code/obj/machinery/vending.dm +++ b/code/obj/machinery/vending.dm @@ -216,6 +216,7 @@ product_list += new/datum/data/vending_product("/obj/item/bandage", 4) product_list += new/datum/data/vending_product("/obj/item/device/healthanalyzer", 4) product_list += new/datum/data/vending_product("/obj/item/device/healthanalyzer_upgrade", 4) + product_list += new/datum/data/vending_product("/obj/item/device/healthanalyzer_organ_upgrade", 3) product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/sulfonal", rand(1, 2), hidden=1) product_list += new/datum/data/vending_product("/obj/item/reagent_containers/glass/bottle/pancuronium", 1, hidden=1) From b3fae261346b0138ff93ae19b826e23b4ee172fb Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 7 Sep 2018 03:24:29 -0400 Subject: [PATCH 078/105] fixes to organ failure diseases so that for resp and kidney failure, removing the organ that originally caused the disease removes the disease. . Surgery uses correct Scissor.ogg file. different colours for garden snips --- .../diseases/organ_diseases/appendicitis.dm | 1 - .../diseases/organ_diseases/kidney_failure.dm | 12 +++++ .../diseases/organ_diseases/pancreatitis.dm | 7 --- .../organ_diseases/respiratory_failure.dm | 13 ++++- code/mob/living/carbon/human.dm | 26 ++++++--- code/obj/item/organ.dm | 51 ++++++++++++------ code/obj/item/surgery_tools.dm | 3 ++ code/procs/surgery.dm | 20 +++---- icons/obj/device.dmi | Bin 44496 -> 44559 bytes icons/obj/surgery.dmi | Bin 50864 -> 51571 bytes icons/obj/surgical_scissors.dmi | Bin 476 -> 5503 bytes 11 files changed, 88 insertions(+), 45 deletions(-) diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm index e73e5fd4..6c37d283 100644 --- a/code/datums/diseases/organ_diseases/appendicitis.dm +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -65,7 +65,6 @@ if (prob(20)) H.reagents.add_reagent("toxin", 20) add_pathogens(H, 30) - boutput(H, "Your appendix has burst! Seek medical help!") H.take_toxin_damage(1) diff --git a/code/datums/diseases/organ_diseases/kidney_failure.dm b/code/datums/diseases/organ_diseases/kidney_failure.dm index cb804f84..7aee1ac7 100644 --- a/code/datums/diseases/organ_diseases/kidney_failure.dm +++ b/code/datums/diseases/organ_diseases/kidney_failure.dm @@ -10,6 +10,13 @@ affected_species = list("Human") stage_prob = 1 var/robo_restart = 0 + var/failing_organ = null //which kidney got damaged enough that it trigged the kidney failure disease. Acceptable values "l", "r" + +//these seemed like the cleanest way to allow you to cure an organfailure by removing only a single organ +/datum/ailment/disease/kidney_failure/left + failing_organ = "l" +/datum/ailment/disease/kidney_failure/right + failing_organ = "r" /datum/ailment/disease/kidney_failure/stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D) if (..()) @@ -24,6 +31,11 @@ H.cure_disease(D) return + //so you only need to remove the one kidney to cure the disease. + if ((failing_organ == "l" && !H.organHolder.left_kidney) || (failing_organ == "r" && !H.organHolder.right_kidney)) + H.cure_disease(D) + return + //handle robokidney failuer. should do some stuff I guess // else if (H.organHolder.kidney && H.organHolder.kidney.robotic && !H.organHolder.heart.health > 0) diff --git a/code/datums/diseases/organ_diseases/pancreatitis.dm b/code/datums/diseases/organ_diseases/pancreatitis.dm index 6738de50..4afd3d99 100644 --- a/code/datums/diseases/organ_diseases/pancreatitis.dm +++ b/code/datums/diseases/organ_diseases/pancreatitis.dm @@ -36,10 +36,6 @@ if (prob(5)) boutput(H, "Your abdomen area hurts!") if (2) - if (prob(1) && prob(10)) - H.cure_disease(D) - boutput(H, "You feel better.") - return if (prob(8)) H.emote(pick("pale", "groan")) if (prob(5)) boutput(H, "Your back aches terribly!") @@ -49,9 +45,6 @@ if (prob(5)) H.emote(pick("faint", "collapse", "groan")) if (3) - if (prob(1) && prob(10)) - boutput(H, "You feel better.") - H.cure_disease(D) if (prob(20)) H.emote(pick("pale", "groan")) H.organHolder.pancreas.take_damage(0, 0, 3) diff --git a/code/datums/diseases/organ_diseases/respiratory_failure.dm b/code/datums/diseases/organ_diseases/respiratory_failure.dm index 58029f31..bf1c3968 100644 --- a/code/datums/diseases/organ_diseases/respiratory_failure.dm +++ b/code/datums/diseases/organ_diseases/respiratory_failure.dm @@ -10,8 +10,13 @@ affected_species = list("Human") stage_prob = 1 var/robo_restart = 0 + var/failing_organ = null //which lung got damaged enough that it trigged the lung failure disease. Acceptable values "l", "r" - on_remove() +//these seemed like the cleanest way to allow you to cure an organfailure by removing only a single organ +/datum/ailment/disease/respiratory_failure/left + failing_organ = "l" +/datum/ailment/disease/respiratory_failure/right + failing_organ = "r" /datum/ailment/disease/respiratory_failure/stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D) if (..()) @@ -21,11 +26,15 @@ return var/mob/living/carbon/human/H = affected_mob - //to cure, gotta remove BOTH lungs. Don't want to make it too easy for ya if (!H.organHolder|| (!H.organHolder.left_lung && !H.organHolder.right_lung)) H.cure_disease(D) return + //so you only need to remove the one lung to cure the disease. + if ((failing_organ == "l" && !H.organHolder.left_lung) || (failing_organ == "r" && !H.organHolder.right_lung)) + H.cure_disease(D) + return + //if one lung is dead, you're in stage 3 resp failure, no exceptions. Need to fix with lung surgery to replace the dead one. if ((H.organHolder.left_lung && H.organHolder.left_lung.get_damage() >= 100) || (H.organHolder.right_lung && H.organHolder.right_lung.get_damage() >= 100)) D.stage = 3 diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 01ece675..8d46b0e0 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4479,17 +4479,27 @@ // lungs if (!src.nodamage) // I don't know why all these if (!src.nodamage) aren't just checked once, but OK src.organHolder.handle_lungs_stamina() - if (src.organHolder.get_working_lung_amt() == 1) - if ((src.organHolder.left_lung && src.organHolder.left_lung.get_damage() > 65) || (src.organHolder.right_lung && src.organHolder.right_lung.get_damage() > 65)) - src.contract_disease(/datum/ailment/disease/respiratory_failure,null,null,1) + // if (src.organHolder.get_working_lung_amt() == 1) + // if ((src.organHolder.left_lung && src.organHolder.left_lung.get_damage() > 65) || (src.organHolder.right_lung && src.organHolder.right_lung.get_damage() > 65)) + // src.contract_disease(/datum/ailment/disease/respiratory_failure,null,null,1) + + if (src.organHolder.left_lung && src.organHolder.left_lung.get_damage() > 65) + src.contract_disease(/datum/ailment/disease/respiratory_failure/left,null,null,1) - // kdineys + else if (src.organHolder.right_lung && src.organHolder.right_lung.get_damage() > 65) + src.contract_disease(/datum/ailment/disease/respiratory_failure/right,null,null,1) + + + // kidneys if (!src.nodamage) if (src.organHolder.get_working_kidney_amt() == 0) src.take_toxin_damage(2, 1) - else if (src.organHolder.get_working_kidney_amt() == 1) - if ((src.organHolder.left_kidney && src.organHolder.left_kidney.get_damage() > 65) || (src.organHolder.right_kidney && src.organHolder.right_kidney.get_damage() > 65)) - src.contract_disease(/datum/ailment/disease/kidney_failure,null,null,1) + // else if (src.organHolder.get_working_kidney_amt() == 1) + if (src.organHolder.left_kidney && src.organHolder.left_kidney.get_damage() > 65) + src.contract_disease(/datum/ailment/disease/kidney_failure/left,null,null,1) + + else if (src.organHolder.right_kidney && src.organHolder.right_kidney.get_damage() > 65) + src.contract_disease(/datum/ailment/disease/kidney_failure/right,null,null,1) // liver if (!src.nodamage) @@ -4521,7 +4531,7 @@ src.contract_disease(/datum/ailment/disease/appendicitis,null,null,1) if (src.organHolder.appendix.robotic && src.health < 10 && prob(10)) - src.reagents.add_reagent(pick("saline", "salbutamol", "salicylic_acid", "synthflesh"), 4) + src.reagents.add_reagent(pick("saline", "salbutamol", "salicylic_acid", "charcoal"), 4) // spleen if there's no spleen don't let the user regen blood naturally diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 5d195a23..93e942e1 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -64,7 +64,7 @@ return 1 return 0 - //organs should not perform their functions if they have 0 health + //organs should not perform their functions if they have 100 damage proc/get_working_kidney_amt() var/count = 0 if (left_kidney && left_kidney.get_damage() < 100) @@ -1241,12 +1241,20 @@ /obj/item/organ/lung/cyber name = "cyberlung" desc = "A fancy electronic eye to replace one that someone's lost. Kinda fragile, but better than nothing!" - icon_state = "lung-cyber" - item_state = "heart_robo1" + icon_state = "cyber-lung-L" + // item_state = "heart_robo1" robotic = 1 edible = 0 mats = 6 + New() + if (prob(50)) + body_side = L_ORGAN + icon_state = "cyber-lung-L" + + else + body_side = R_ORGAN + icon_state = "cyber-lung-R" /*========================*/ /*----------Eyes----------*/ @@ -2141,8 +2149,8 @@ /obj/item/organ/liver/cyber name = "cyberliver" desc = "A fancy robotic liver to replace one that someone's lost!" - icon_state = "liver-cyber" - item_state = "heart_robo1" + icon_state = "cyber-liver" + // item_state = "heart_robo1" robotic = 1 edible = 0 mats = 6 @@ -2221,12 +2229,21 @@ /obj/item/organ/kidney/cyber name = "cyberkidney" desc = "A fancy robotic kidney to replace one that someone's lost!" - icon_state = "kidney-cyber" - item_state = "heart_robo1" + icon_state = "cyber-kidney-L" + // item_state = "heart_robo1" robotic = 1 edible = 0 mats = 6 + New() + if (prob(50)) + body_side = L_ORGAN + icon_state = "cyber-kidney-L" + + else + body_side = R_ORGAN + icon_state = "cyber-kidney-R" + /obj/item/organ/stomach name = "stomach" organ_name = "stomach" @@ -2275,8 +2292,8 @@ /obj/item/organ/stomach/cyber name = "cyberstomach" desc = "A fancy robotic stomach to replace one that someone's lost!" - icon_state = "stomach-cyber" - item_state = "heart_robo1" + icon_state = "cyber-stomach" + // item_state = "heart_robo1" robotic = 1 edible = 0 mats = 6 @@ -2329,8 +2346,8 @@ /obj/item/organ/intestines/cyber name = "cyberintestines" desc = "A fancy robotic intestines to replace one that someone's lost!" - icon_state = "intestines-cyber" - item_state = "heart_robo1" + icon_state = "cyber-intestines" + // item_state = "heart_robo1" robotic = 1 edible = 0 mats = 6 @@ -2383,8 +2400,8 @@ /obj/item/organ/spleen/cyber name = "cyberspleen" desc = "A fancy robotic spleen to replace one that someone's lost!" - icon_state = "spleen-cyber" - item_state = "heart_robo1" + icon_state = "cyber-spleen" + // item_state = "heart_robo1" robotic = 1 edible = 0 mats = 6 @@ -2437,8 +2454,8 @@ /obj/item/organ/pancreas/cyber name = "cyberpancreas" desc = "A fancy robotic pancreas to replace one that someone's lost!" - icon_state = "pancreas-cyber" - item_state = "heart_robo1" + icon_state = "cyber-pancreas" + // item_state = "heart_robo1" robotic = 1 edible = 0 mats = 6 @@ -2490,8 +2507,8 @@ /obj/item/organ/appendix/cyber name = "cyberappendix" desc = "A fancy robotic appendix to replace one that someone's lost!" - icon_state = "appendix-cyber" - item_state = "heart_robo1" + icon_state = "cyber-appendix" + // item_state = "cyber-" robotic = 1 edible = 0 mats = 6 diff --git a/code/obj/item/surgery_tools.dm b/code/obj/item/surgery_tools.dm index 6add3cd5..dd662542 100644 --- a/code/obj/item/surgery_tools.dm +++ b/code/obj/item/surgery_tools.dm @@ -8,6 +8,7 @@ SUTURE BANDAGE BLOOD BAG (unused) BODY BAG +SURGICAL SCISSORS */ /* ================================================= */ @@ -880,6 +881,8 @@ BODY BAG New() ..() src.create_reagents(5) + icon_state = pick("surgical_scissors-r", "surgical_scissors-g", "surgical_scissors-b", "surgical_scissors-v", "surgical_scissors-d", "surgical_scissors-g") + attack(mob/living/carbon/M as mob, mob/user as mob) if (src.reagents && src.reagents.total_volume) diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index 419ba1be..f85007fc 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -1730,7 +1730,7 @@ if (patient.organHolder.chest) switch (patient.organHolder.chest.op_stage) if (0.0) - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") @@ -1754,7 +1754,7 @@ //second cut, path for appendix/liver if (1.0) - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") @@ -1779,7 +1779,7 @@ if (2.0) //remove left lung if (surgeon.find_in_hand(src) == surgeon.l_hand) - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (!patient.organHolder.left_lung) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1807,7 +1807,7 @@ return 1 //remove right lung else if (surgeon.find_in_hand(src) == surgeon.r_hand) - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (!patient.organHolder.right_lung) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1837,7 +1837,7 @@ //remove appendix or liver if (3.0) //remove appendix with this cut - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (!patient.organHolder.appendix) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1866,7 +1866,7 @@ //path for stomach and intestines if (4.0) //remove stomach with this cut - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (!patient.organHolder.stomach) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1895,7 +1895,7 @@ //paths for pancreas and kidneys if (5.0) //path for pancreas - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (prob(screw_up_prob)) surgeon.visible_message("[surgeon][fluff]!") @@ -1919,7 +1919,7 @@ //remove pancreas if (6.0) - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (!patient.organHolder.pancreas) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1950,7 +1950,7 @@ if (7.0) //remove left kidney if (surgeon.find_in_hand(src) == surgeon.l_hand) - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (!patient.organHolder.left_kidney) src.surgeryConfusion(patient, surgeon, damage_low) @@ -1978,7 +1978,7 @@ return 1 //remove right kidney else if (surgeon.find_in_hand(src) == surgeon.r_hand) - playsound(get_turf(patient), "sound/items/scissor.ogg", 50, 1) + playsound(get_turf(patient), "sound/items/Scissor.ogg", 50, 1) if (!patient.organHolder.right_kidney) src.surgeryConfusion(patient, surgeon, damage_low) diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 9e31b7258e13f9c4bca56a76760faa7661f4b3e5..6104267a29b0ab51e656d37f02b806cd89311a3b 100644 GIT binary patch literal 44559 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
P8IkNuRv_6>Y%p-Fp@Rwvlbk7xO`C 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 Oh>n(?W|sPm2mb}W2Us=$ literal 44496 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 diff --git a/icons/obj/surgical_scissors.dmi b/icons/obj/surgical_scissors.dmi index 993e9d6168a0a4d93625f88df353ad66a8783c5b..4a901499b28164b5f8a25d48b2c91c8680e4c792 100644 GIT binary patch literal 5503 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 W=kd6BQHS)R3TUY7Aga`?BL53cigxe- literal 476 zcmV<20VDp2P)Mr34Uetv$px3`6bg_M+(+vDZ`|Np!Eltlml00DGTPE!Ct=GbNc004=4R9JLG zWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TB zGg33tGfE(w;*!LYR3KBSxU?ueGdVFQzBoCvxH!M4Sc!`>C9|j)C}+sUnO2mTn+jp0 z=twQ9glo_ZLTE7|PD_cd4=z2*3a)-GV4na0#cn^n3T`ST0002jNkl~k$ zFl8_?7ee<;zTWj!WDf&hYJ0AabZ|m=tP}BfsF-IU#hvy^~(51 zj!GEjdbDOC2ZXS*@@fQKqzx)G4=hjp1r+XJ-f Date: Thu, 13 Sep 2018 02:48:47 -0400 Subject: [PATCH 079/105] sprites for cyber Organs courtesy of NaviOS, Sundance, and 2 shitty ones from myself. kmc made those garden snips and I did a few recolors on em --- icons/obj/surgery.dmi | Bin 51571 -> 58820 bytes icons/obj/surgical_scissors.dmi | Bin 5503 -> 7842 bytes icons/obj/writing.dmi | Bin 24219 -> 24406 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index eaac2907c707d3b525657ee86df8dd86712134e6..b51da858b3d872f72d5bc7f46711a5185e93d10b 100644 GIT binary patch literal 58820 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 literal 51571 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 Y84UM?UA0S<0r1aD8D;5`7kWPb2S#>TY5)KL diff --git a/icons/obj/surgical_scissors.dmi b/icons/obj/surgical_scissors.dmi index 4a901499b28164b5f8a25d48b2c91c8680e4c792..186cda860b6de3dff35f4baf7b9ba9f015ca03b8 100644 GIT binary patch literal 7842 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 a_r`MRTw_A+G4S6rATO;fmHW)#(|-V%Z|y+< literal 5503 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 W=kd6BQHS)R3TUY7Aga`?BL53cigxe- diff --git a/icons/obj/writing.dmi b/icons/obj/writing.dmi index 6a6edd22e816535bec3b1350af31b6a82edf679f..8176772f56f5be7270d876f806426b265e777d15 100644 GIT binary patch literal 24406 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

Hke*WXa@9Y-7#)6Bw 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 literal 24219 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 Date: Thu, 13 Sep 2018 02:50:04 -0400 Subject: [PATCH 080/105] fix some disease nonense, appendix rupturing gives pathogens to the player. I don't rightly know what that does, but it sounds OK --- .../diseases/organ_diseases/appendicitis.dm | 21 ++++++++++--------- .../diseases/organ_diseases/pancreatitis.dm | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm index 6c37d283..dfef6de3 100644 --- a/code/datums/diseases/organ_diseases/appendicitis.dm +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -55,17 +55,18 @@ H.organHolder.appendix.take_damage(0, 0, 3) //human's appendix burst, and add a load of toxic chemicals or bacteria to the person. - if (prob(5)) - H.cure_disease(D) - H.organHolder.appendix.take_damage(200,200,200) - // H.organHolder.drop_organ("appendix") - H.emote("collapse") - H.weakened = max(H.weakened, 30) + if (prob(10)) + if (H.organHolder.appendix.get_damage() >= 90) + H.cure_disease(D) + H.organHolder.appendix.take_damage(200,200,200) + // H.organHolder.drop_organ("appendix") + H.emote("collapse") + H.weakened = max(H.weakened, 30) - if (prob(20)) - H.reagents.add_reagent("toxin", 20) - add_pathogens(H, 30) - boutput(H, "Your appendix has burst! Seek medical help!") + if (prob(20)) + H.reagents.add_reagent("toxin", 20) + add_pathogens(H, 30) + boutput(H, "Your appendix has burst! Seek medical help!") H.take_toxin_damage(1) H.updatehealth() diff --git a/code/datums/diseases/organ_diseases/pancreatitis.dm b/code/datums/diseases/organ_diseases/pancreatitis.dm index 4afd3d99..d3c217c5 100644 --- a/code/datums/diseases/organ_diseases/pancreatitis.dm +++ b/code/datums/diseases/organ_diseases/pancreatitis.dm @@ -34,7 +34,7 @@ return if (prob(8)) H.emote(pick("pale", "shudder")) if (prob(5)) - boutput(H, "Your abdomen area hurts!") + boutput(H, "Your abdomen hurts!") if (2) if (prob(8)) H.emote(pick("pale", "groan")) if (prob(5)) From cee31963e8a6c6ecec5c7b4e90b1f19e19dc0559 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 13 Sep 2018 02:52:10 -0400 Subject: [PATCH 081/105] adds scanprocs organ damage. obfuscated amount for analyzers, numerical amount for admin check_health, You can perform surgery on a table provided the patient is reasonably drunk. Wanted to make it a bit more accessible. --- code/mob/living/carbon/human.dm | 2 +- code/obj/item/organ.dm | 12 ++++++- code/obj/item/surgery_tools.dm | 10 ++++-- code/procs/scanprocs.dm | 58 ++++++++++++++++++++++++--------- code/procs/surgery.dm | 4 +-- 5 files changed, 63 insertions(+), 23 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 8d46b0e0..b11d9965 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -4518,7 +4518,7 @@ if (prob(25)) src.organHolder.pancreas.take_damage(0, 0, 3) - if (src.organHolder.pancreas.get_damage() >= 65 && (prob(src.organHolder.pancreas.get_damage() * 0.2) || src.organHolder.liver.get_damage() > 100)) + if (src.organHolder.pancreas.get_damage() >= 65 && (prob(src.organHolder.pancreas.get_damage() * 0.2) || src.organHolder.pancreas.get_damage() > 100)) src.contract_disease(/datum/ailment/disease/pancreatitis,null,null,1) // appendix diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 93e942e1..4567beac 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -897,9 +897,17 @@ attackby(obj/item/W as obj, mob/user as mob) if (istype(W, /obj/item/device/healthanalyzer)) var/obj/item/device/healthanalyzer/HA = W - if(HA.reagent_upgrade) + + if(HA.organ_scan) boutput(user, "
[src] - [src.get_damage()]") return + if (HA.organ_upgrade && !HA.organ_scan) + boutput(user, "
You need to turn on the organ scan function to get a reading.") + return + else + boutput(user, "
This device is not equipped to scan organs.") + return + else src.take_damage(W.force, 0, 0, W.hit_type) @@ -1229,11 +1237,13 @@ /obj/item/organ/lung/left name = "left lung" desc = "Inflating meat airsack that passes breathed oxygen into a person's blood and expels carbon dioxide back out. This is a left lung, since it has three lobes. Hopefully whoever used to have this one doesn't need it anymore." + organ_name = "lung_L" icon_state = "lung_L" body_side = L_ORGAN /obj/item/organ/lung/right name = "right lung" + organ_name = "lung_R" desc = "Inflating meat airsack that passes breathed oxygen into a person's blood and expels carbon dioxide back out. This is a right lung, since it has two lobes and a cardiac notch, where the heart would be. Hopefully whoever used to have this one doesn't need it anymore." icon_state = "lung_R" body_side = R_ORGAN diff --git a/code/obj/item/surgery_tools.dm b/code/obj/item/surgery_tools.dm index dd662542..984373a0 100644 --- a/code/obj/item/surgery_tools.dm +++ b/code/obj/item/surgery_tools.dm @@ -881,7 +881,12 @@ SURGICAL SCISSORS New() ..() src.create_reagents(5) - icon_state = pick("surgical_scissors-r", "surgical_scissors-g", "surgical_scissors-b", "surgical_scissors-v", "surgical_scissors-d", "surgical_scissors-g") + if (prob(1) && prob(10)) // 1:1000 chance + icon_state = "surgical_scissors-" + desc = "Used for precisely cutting up people in surgery. I guess you could use them on paper too... There's something off about this pair." + + else + icon_state = pick("surgical_scissors-r", "surgical_scissors-g", "surgical_scissors-b", "surgical_scissors-v", "surgical_scissors-dr", "surgical_scissors-g", "surgical_scissors-gr", "surgical_scissors-gf", "surgical_scissors-c", "surgical_scissors-pi", "surgical_scissors-y") attack(mob/living/carbon/M as mob, mob/user as mob) @@ -892,5 +897,4 @@ SURGICAL SCISSORS logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting])") if (!snip_surgery(M, user)) return ..() - else return - + else return \ No newline at end of file diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index 11e65511..98fd13bd 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -133,18 +133,22 @@ if (organ_scan && !isvampire(H)) var/organ_data1 = null - - organ_data1 += organ_health_scan("left_lung", H) - organ_data1 += organ_health_scan("right_lung", H) - - organ_data1 += organ_health_scan("left_kidney", H) - organ_data1 += organ_health_scan("right_kidney", H) - organ_data1 += organ_health_scan("liver", H) - organ_data1 += organ_health_scan("stomach", H) - organ_data1 += organ_health_scan("intestines", H) - organ_data1 += organ_health_scan("spleen", H) - organ_data1 += organ_health_scan("pancreas", H) - organ_data1 += organ_health_scan("appendix", H) + var/obfuscate = (disease_detection != 255 ? 1 : 0) //this is so admin check_health verb see exact numbs, scanners don't. Can remove, not exactly necessary, but thought they might want it. + + organ_data1 += organ_health_scan("heart", H, obfuscate) + // organ_data1 += organ_health_scan("brain", H, obfuscate) //Might want, might not. will be slightly more accurate than current brain damage scan + + organ_data1 += organ_health_scan("left_lung", H, obfuscate) + organ_data1 += organ_health_scan("right_lung", H, obfuscate) + + organ_data1 += organ_health_scan("left_kidney", H, obfuscate) + organ_data1 += organ_health_scan("right_kidney", H, obfuscate) + organ_data1 += organ_health_scan("liver", H, obfuscate) + organ_data1 += organ_health_scan("stomach", H, obfuscate) + organ_data1 += organ_health_scan("intestines", H, obfuscate) + organ_data1 += organ_health_scan("spleen", H, obfuscate) + organ_data1 += organ_health_scan("pancreas", H, obfuscate) + organ_data1 += organ_health_scan("appendix", H, obfuscate) if (organ_data1) organ_data = "Scans Indicate Organ Damage:" @@ -202,16 +206,38 @@ return data //takes string input, for name in organholder.organ_list and checks if the organholder has anything -/proc/organ_health_scan(var/input, var/mob/living/carbon/human/H) +//obfuscate, if true then don't show the exact organ health amount. Minor damage, moderate damage, severe damage, critical damage +/proc/organ_health_scan(var/input, var/mob/living/carbon/human/H, var/obfuscate = 0) var/obj/item/organ/O = H.organHolder.organ_list[input] if (O && istype(O, /obj/item/organ)) - if (O.get_damage() > 0) - return "
[input] - [O.get_damage()]" + obfuscate_organ_health(O) + var/damage = O.get_damage() + if (obfuscate) + return obfuscate_organ_health(var/input, O) else - return null + if (damage > 0) + return "
[input] - [O.get_damage()]" + else + return null + else return "
The patient's [input] is missing!" +//Using input here because it get's the organs name in an easy and clear way. using name or organ_name in obj/item/organ is not any better really +/proc/obfuscate_organ_health(var/input, var/obj/item/organ/O) + var/damage = O.get_damage() + + if (damage < 10) + return "
[input] - Minor damage" + else if (damage < 30) + return "
[input] - Moderate damage" + else if (damage < 65) + return "
[input] - Significant damage" + else if (damage < 90) + return "
[input] - Critical damage" + else + return null + /proc/update_medical_record(var/mob/living/carbon/human/M) if (!M || !ishuman(M)) return diff --git a/code/procs/surgery.dm b/code/procs/surgery.dm index f85007fc..b9567f60 100644 --- a/code/procs/surgery.dm +++ b/code/procs/surgery.dm @@ -13,7 +13,7 @@ return 1 // surgery is okay else if (locate(/obj/stool/bed, patient.loc) && patient.lying) // is the patient on a bed and lying? return 1 // surgery is okay - else if (locate(/obj/table, patient.loc) && (patient.paralysis || patient.stat)) // is the patient on a table and paralyzed or dead? + else if (locate(/obj/table, patient.loc) && (patient.paralysis || patient.stat || (patient.lying && patient.reagents.get_reagent_amount("ethanol") > 40))) // is the patient on a table and paralyzed or dead? Or is it lyind on the talbe and has a good bit of ethanol in it? return 1 // surgery is okay else if (patient.reagents && patient.reagents.get_reagent_amount("ethanol") > 100 && patient == surgeon) // is the patient really drunk and also the surgeon? return 1 // surgery is okay @@ -1321,7 +1321,7 @@ /* ---------- SUTURE - CHEST ---------- */ else if (surgeon.zone_sel.selecting == "chest") - + //Leaving this in just in case. I'm like 99% sure that it won't get triggered since the heart surgery op_stage has been moved to chest. if (patient.organHolder && patient.organHolder.heart && patient.organHolder.heart.op_stage > 0.0) patient.tri_message("[surgeon] sews the incision on [patient == surgeon ? "[his_or_her(patient)]" : "[patient]'s"] chest closed with [src].",\ surgeon, "You sew the incision on [surgeon == patient ? "your" : "[patient]'s"] chest closed with [src].",\ From b1ef308aeb77679ea0a867625a173a589c8cc815 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 13 Sep 2018 03:01:21 -0400 Subject: [PATCH 082/105] Trent's Anatomy surgical textbook --- code/obj/item/book.dm | 210 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) diff --git a/code/obj/item/book.dm b/code/obj/item/book.dm index dfae4044..19abfed1 100644 --- a/code/obj/item/book.dm +++ b/code/obj/item/book.dm @@ -1489,6 +1489,216 @@ globules of this sludge can be harvested from the plant however - with proper pr This is not a complete list of all available medications. Further research and development efforts by NT Medical and Science divisions are strongly encouraged. "} +/obj/item/paper/book/medical_surgery_guide + name = "Trent's Anatomy" + desc = "The inane ramblings of the first madman who bothered writing a textbook on the spaceman anatomy and surgical practices." + icon_state = "book8" + info = {"

Trent's Anatomy

+

Disclaimer: At the time of writing, all information in this book is correct. However, over time, the information may become out of date. But that doesn't make this information any less correct.

+

FOREWARD

+

by Dorothy "Dotty" Spud +
+ While snails share many organs in common with the human body, they have no sense of hearing.

+
---------------------------------------------------------------------------------------------
+ +

Index

+
  • Introduction +
  • Tools +
  • Surgery +
  • Organ Functions +
  • Organ Diseases +
  • Treatments + +

    Introduction

    + +

    Every spaceman and spacewoman has several internal organs that allow they to live, this textbook will seek to inform you about some of them and how to do surgery. The most important organ of the body is a hotly disputed topic among Nanotrasen employees and regular people. Most Nanotrasen experts agree that it is the butt, as the humiliation of losing a butt is considered worse than death. Others say that it's the brain, who can say for sure? Not I.

    + +

    The spaceman body and you

    +
    +

    Here are all the important organs and their main functions:

    +
  • Brain - Needed for thinking. +
  • Butt - Needed for thinking. +
  • Heart - Pumps life giving blood around your body. If you remove this, you should replace it very quickly. +
  • Eyes - You see out of these. +
  • Lungs - These steal Oxygen from the air on space stations and give it to you to use for respiration. Atmos engineers hate em! +
  • Kidneys - These filter out "toxins" or "thetans" as I like to call them from your blood and turn them into pee. +
  • Liver - This is basically the same as kidneys, but looks different, has a different name, and does some different things. +
  • Stomach - This digests all the food you eat orally. If this is empty, you will not be able to puke, be very careful. +
  • Intestines - This is the glorious organ that turns food into poo. Rather it did, until something catastrophic happened a few years ago and now nobody's makes poo anymore. +
  • Spleen - This has some function. Mainly it is involved in making blood in spacemen, maybe it does something else too. +
  • Pancreas - This makes insulin in response to sugar in your bloodstream +
  • Appendix - What does this do? Nobody knows, and if they ever did, they were lying. It does have a "fun" ability to attempt to kill you at random so there's that. +
    +

    Those are all the organs that will be discussed in this book. Some say there are more organs, but I don't care about those so I won't write a book about them.

    + + + + +

    The Tools

    +
    + +

    There are several tools involved in surgery, some of them are even listed here:

    +
  • Scalpel - Used for cutting. +
  • Circular Saw - Used for sawing. +
  • Enucleation Spoon - Used melon-balling eye's out of a patients head. +
  • Hemostat - Used for clamping down bleeders. Hold this in your off hand to make most surgery cause less bleeding. +
  • Garden Snips - Used for snipping. +
    + +
  • Health Analyzer Organ Upgrade - Until now, it was only possible for health analyzers to crudely detect brain damage in a subject. With this upgrade, health analyzers will be able to crudely detect the health of ANY organ! + +
  • The last tool, if it can be called such, is the operating table or bed. For some reason that still has medical scientists baffled, the type of surface that the patient is placed on in surgery is important for being able to perform surgery. Operating tables are the gold standard for surgery, next comes regular beds, these work just as well. Finally you can perform surgery on any old table, provided the patient is knocked out, stunned, or otherwise sufficiently anesthetized/drunk. + + + +

    Doing Surgery

    +
    + +

    Everybody knows how to perform brain surgery, the basest form of surgery that even a staff assistant manage, so I won't bore you with how to perform it here. Instead here are some revolutionary new surgery practices invented by me to get at all those tantalizing organs inside of your fellow spaceman:

    +
    +
  • Scalpel = cut +
  • Circular Saw = saw +
  • Garden Snips = snips +
    + +
  • lungs = snip -> saw -> snip - w/ Right/Left hands for removing R/L lungs - +
  • appendix = snip -> snip -> snip - +
  • liver = snip -> snip -> cut - +
  • stomach = snip -> cut -> snip - +
  • intestines = snip -> cut -> cut - +
  • pancreas = cut -> snip -> snip - +
  • spleen = cut -> snip -> cut - +
  • kidneys = cut -> cut -> snip w/ Right/Left hands for removing R/L kidneys - +
  • heart = cut -> saw -> cut -> sawing *on "help" intent +
    +

    After each successful organ removal or replacement, the surgeon must close up so they can take the correct pathway to the next organ they want to locate. The simplest way to do so would be to suture the chest close with regular a old medical suture.

    +
    + +

    As an afterthought, for the sake of completeness I will bother bore you with how to do some of the "lesser" surgeries, here are the steps for most other common surgical procedures:

    + +
  • brain = cut -> saw -> cut -> saw - Target HEAD on "HELP" intent (*note - Performing this surgery on "HARM" intent can decapitate the head) +
  • eyes = L/R spoon -> L/R cut -> L/R spoon - in order to remove a specific eye, you must only hold a tool in the corresponding hand R/L +
  • limbs = cut -> saw -> cut -> saw - while targeting the appropriate limb. Replacing a limb only requires you to target the correct limb, and then staple it firmly to the stump +
  • butt = I do not know how to remove butts, and if I did I wouldn't spread that knowledge for it is a cruel and inhumane practice to remove a butt from anyone + + +

    Organ Functions

    +
    + +
    Brain
    +

    This organ takes damage in a number of ways, through concussions, oxygen loss, or neurotoxins. That's pretty much it actually.

    +
    + +
    Butt
    +

    This is needed for farting, I think, I've never removed mine so I wouldn't know. Presumably it has some medical function. It can be worn as a hat.

    +
    + +
    Heart
    +

    This terrible organ is really awful, it breaks down more than any other organ and when it does, you're as good as dead. So many things can cause it to fail, such as not breathing for a minute or two. Silly things like that.

    +
    + +
    Eyes
    +

    Without these, you'll be blind. I've heard it said that sometimes blind people sometimes see more than all of us normal spacemen. Anyway, these take damage from numerous sources, like getting stabbed in the eye. They can be repaired with oculine. Strangely, you eyes can be in perfect health and you can go blind.

    +
    + +
    Lungs
    +

    Basically the most important organs for swimmers, runners, and players of sportsball. You can get by without em, but you probably won't want to. Smoking is the number one enemy of the noble Lung, they don't mind your drinking or gambling, but smoking is where they draw the line.

    +
    + +
    Kidneys
    +

    These filter out all the toxins your inject/ingest on a daily basis. Any time you get injured by toxins, these babies are gonna take the hit for you and be right there with you.

    +
    + +
    Liver
    +

    Ethanol is the worst enemy/best friend of the Liver. The liver is a powerful and resilient organ, but ethanol is super effective against it. If you want to drink yourself to death, but not to a death from liver failure, you'd better swap out your good ole liver for a brand new cyber liver. Those like ethanol so much, it makes them run even better!

    +
    + +
    Stomach
    +

    Nothing to see here it digests food, what else is there to know?

    +
    + +
    Intestines
    +

    Intestines suck all the nutrients out of your food and put them into your body. And before I get a letter in the space-mail about this, there is no such thing as a "small" or "large" intestines, there is just one.

    +
    + +
    Spleen
    +

    The spleen has several functions, I assume. The only one I have discovered is it's ability to help the spaceman body produce blood. If there are more, then I take credit for their discovery by virtue of discovering the Spleen.

    +
    + +
    Pancreas
    +

    When you eat the sugar, the mighty pancreas attempts to produce insulin in order to help you metabolize it. So that you can keep eating sugar forever until you die..

    +
    + +
    + +

    Organ Diseases

    +
    + +

    Some diseases affect specific organs when that organ has taken enough damage to start to fail, for that reason I have decided to call this class of diseases "Organ Diseases". Most of these are fairly manageable, and you won't suffer any debilitating effects until you the disease does enough damage to your organ and it shuts down.

    + +
    Appendicitis
    +

    This disease is very, very deadly. If left untreated, your appendix will explode violently, spraying gross toxins and pathogens all throughout the inside of your body. It can happen anywhere or anytime, the only thing that will stop it is a simple surgery to remove the appendix. While there, you might as well ask around to see if you can have it replaced with the much more stylish cyber-kidney.

    +
    + +
    Pancreatitis
    +

    This is a nasty disease, as insidious as Darth Sidious and as fun sounding as fudge. But that is where the fun ends. Think you can eat all the sugar you want forever with no consequences other than hypoglycemic shock? Think again. That insulin your poor poor pancreas is producing to keep you chugging along doesn't come free, take care of your pancreas or risk losing the ability to enjoy your favorite brand of space cola and bars of chocolate.

    +
    + +
    Liver Failure
    +

    This is probably the worst disease I made up, I mean discovered. Your liver is a fantastic organ, without it, you would be hard pressed to enjoy all that alcohol you always drink since you'd probably die pretty quick.

    +
    + +
    Kidney Failure
    +

    This is basically the same as liver failure, but your kidneys are the ones failing, good thing you got two of em. Just remove or replace the failing one and you'll be good to go. That is, unless it gets too severe.

    +
    + +
    Respiratory Failure
    +

    Basically, your lungs are failing, or one of them is at least, and it's bringing the other one along for the ride. It can be caused by a number of things, like smoking. Or breathing scalding hot air. Or smoking. Did I mention smoking can cause this?

    +
    + +

    Treating Organ Diseases

    +

    In most cases, removal/replacement of the organ in failure will cure the disease. Certain reagents can be effective at healing organ damage, and curing their respective diseases.

    +
    + + +
    + +

    Organ Damage Treatment

    +
    + +

    Presently there are only a few known ways to treat organ damage, this "chapter" will discuss the most common ways.

    +
    +

    There are 3 different classifications of organ drugs that are effective at facilitating the curing diseased/healing organs, provided they are not damaged too extensively.

    + +
    Organ Drugs Class I
    +

    This class specifically targets the spleen and lungs to promote healing.

    +
    + +
    Organ Drugs Class II
    +

    This class specifically targets the liver, kidneys, stomach, and intestines to promote healing.

    +
    + +
    Organ Drugs Class III
    +

    This class specifically targets the appendix and pancreas to promote healing.

    +
    + +

    Two other reagents that can be used for more general treatment.

    + +
    Cryoxadone
    +

    Capable of healing all organs in the body, just rather slowly and coldly.

    +
    + +
    Omnizine
    +

    Is there anything this stuff can't do? There is, but in the context of healing organs omnizine is pretty good at it.

    +
    + +

    It's been theorized that gene therapies are also capable to healing internal organs over time. Though I have not collected any solid data on this to date.

    + +
    +
    by Trent Durinste
    +
    2143 C.E.
    +"} + /obj/item/paper/book/minerals name = "Mineralogy 101" icon_state = "book5" From 4ba3b6f242d49622c6ab123f6a18d5d19d2dfed5 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 13 Sep 2018 03:08:52 -0400 Subject: [PATCH 083/105] liver/kidney's effect on depletion rate. efficiency, has one less organholder check --- code/datums/chemistry/Chemistry-Reagents.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/datums/chemistry/Chemistry-Reagents.dm b/code/datums/chemistry/Chemistry-Reagents.dm index f05f2f4a..06600a78 100644 --- a/code/datums/chemistry/Chemistry-Reagents.dm +++ b/code/datums/chemistry/Chemistry-Reagents.dm @@ -142,10 +142,11 @@ datum var/mob/living/carbon/human/H = M if(H.traitHolder.hasTrait("slowmetabolism")) deplRate /= 2 - if (H.organHolder && (!H.organHolder.liver || H.organHolder.liver.get_damage() >= 100)) - deplRate /= 2 - if (H.organHolder && (H.organHolder.get_working_kidney_amt() == 0)) - deplRate /= 2 + if (H.organHolder) + if (!H.organHolder.liver || H.organHolder.liver.get_damage() >= 100) //if no liver or liver is dead, deplete slower + deplRate /= 2 + if (H.organHolder.get_working_kidney_amt() == 0) //same with kidneys + deplRate /= 2 holder.remove_reagent(src.id, deplRate) //By default it slowly disappears. From c6ee631a3257e8e0900da3a931f3e3ecd856f8ed Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 13 Sep 2018 03:14:28 -0400 Subject: [PATCH 084/105] compiler error fix. copy-paste strikes again --- code/procs/scanprocs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index 98fd13bd..8881cde8 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -213,7 +213,7 @@ obfuscate_organ_health(O) var/damage = O.get_damage() if (obfuscate) - return obfuscate_organ_health(var/input, O) + return obfuscate_organ_health(input, O) else if (damage > 0) return "
    [input] - [O.get_damage()]" From e265d2c244d274e7159a02f84ff35a17235cebf5 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 13 Sep 2018 03:17:07 -0400 Subject: [PATCH 085/105] finishing touches to the 'forewArd' --- code/obj/item/book.dm | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/code/obj/item/book.dm b/code/obj/item/book.dm index 19abfed1..361bf8a2 100644 --- a/code/obj/item/book.dm +++ b/code/obj/item/book.dm @@ -1496,10 +1496,9 @@ globules of this sludge can be harvested from the plant however - with proper pr info = {"

    Trent's Anatomy

    Disclaimer: At the time of writing, all information in this book is correct. However, over time, the information may become out of date. But that doesn't make this information any less correct.

    FOREWARD

    -

    by Dorothy "Dotty" Spud -
    - While snails share many organs in common with the human body, they have no sense of hearing.

    -
    ---------------------------------------------------------------------------------------------
    +

    While snails share many organs in common with the human body, they have no sense of hearing.
    + by Dorothy "Dotty" Spud

    + ---------------------------------------------------------------------------------------------

    Index

  • Introduction @@ -1696,8 +1695,7 @@ globules of this sludge can be harvested from the plant however - with proper pr
    by Trent Durinste
    -
    2143 C.E.
    -"} +
    2143 C.E.
    "} /obj/item/paper/book/minerals name = "Mineralogy 101" From d5283318d1b88baa02c024e9c5b61c9f76f6af8a Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 13 Sep 2018 04:11:32 -0400 Subject: [PATCH 086/105] add to medical manufacturer's cause why not, doctors will be performing this surgery just as well as roboticists. --- code/obj/machinery/manufacturer.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/obj/machinery/manufacturer.dm b/code/obj/machinery/manufacturer.dm index 9a0ed813..261923f6 100644 --- a/code/obj/machinery/manufacturer.dm +++ b/code/obj/machinery/manufacturer.dm @@ -1698,6 +1698,14 @@ /datum/manufacture/surgical_shield, /datum/manufacture/implanter, /datum/manufacture/implant_health, + /datum/manufacture/cyberappendix, + /datum/manufacture/cyberpancreas, + /datum/manufacture/cyberspleen, + /datum/manufacture/cyberintestines, + /datum/manufacture/cyberstomach, + /datum/manufacture/cyberkidney, + /datum/manufacture/cyberliver, + /datum/manufacture/cyberlung, /datum/manufacture/crowbar, /datum/manufacture/extinguisher, /datum/manufacture/rods2, From bab7e98b15c38adc7f6c786066514104178876a2 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 13 Sep 2018 04:29:51 -0400 Subject: [PATCH 087/105] lower manufacture time for cyber organs --- code/datums/manufacturing.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/datums/manufacturing.dm b/code/datums/manufacturing.dm index d1718b41..31b2dffa 100644 --- a/code/datums/manufacturing.dm +++ b/code/datums/manufacturing.dm @@ -761,7 +761,7 @@ item_names = list("Metal","Conductive Material","Any Material") item_amounts = list(1,1,1) item_outputs = list(/obj/item/organ/appendix/cyber) - time = 25 + time = 15 create = 1 category = "Component" @@ -771,7 +771,7 @@ item_names = list("Metal","Conductive Material","Any Material") item_amounts = list(1,1,1) item_outputs = list(/obj/item/organ/pancreas/cyber) - time = 25 + time = 15 create = 1 category = "Component" @@ -781,7 +781,7 @@ item_names = list("Metal","Conductive Material","Any Material") item_amounts = list(1,1,1) item_outputs = list(/obj/item/organ/spleen/cyber) - time = 25 + time = 15 create = 1 category = "Component" @@ -791,7 +791,7 @@ item_names = list("Metal","Conductive Material","Any Material") item_amounts = list(1,1,1) item_outputs = list(/obj/item/organ/intestines/cyber) - time = 25 + time = 15 create = 1 category = "Component" @@ -801,7 +801,7 @@ item_names = list("Metal","Conductive Material","Any Material") item_amounts = list(1,1,1) item_outputs = list(/obj/item/organ/stomach/cyber) - time = 25 + time = 15 create = 1 category = "Component" @@ -811,7 +811,7 @@ item_names = list("Metal","Conductive Material","Any Material") item_amounts = list(1,1,1) item_outputs = list(/obj/item/organ/kidney/cyber) - time = 25 + time = 15 create = 1 category = "Component" @@ -821,7 +821,7 @@ item_names = list("Metal","Conductive Material","Any Material") item_amounts = list(1,1,1) item_outputs = list(/obj/item/organ/liver/cyber) - time = 25 + time = 15 create = 1 category = "Component" @@ -831,7 +831,7 @@ item_names = list("Metal","Conductive Material","Any Material") item_amounts = list(1,1,1) item_outputs = list(/obj/item/organ/lung/cyber) - time = 25 + time = 15 create = 1 category = "Component" From ab19a840e719779ecf72c9c12e1f79e39b919671 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 13 Sep 2018 19:05:12 -0400 Subject: [PATCH 088/105] having a cyberappendix cures the appendicitis disease. I didn't think it necessary since they can't contract it, but I guess if a surgeon does a really quick switch in one life tic then it could ignore the fact that the organ was removed. --- code/datums/diseases/organ_diseases/appendicitis.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/diseases/organ_diseases/appendicitis.dm b/code/datums/diseases/organ_diseases/appendicitis.dm index dfef6de3..9ecc415c 100644 --- a/code/datums/diseases/organ_diseases/appendicitis.dm +++ b/code/datums/diseases/organ_diseases/appendicitis.dm @@ -19,7 +19,7 @@ var/mob/living/carbon/human/H = affected_mob - if (!H.organHolder || !H.organHolder.appendix) + if (!H.organHolder || !H.organHolder.appendix || H.organHolder.appendix.robotic) H.cure_disease(D) return From 73a8deef1dbe311071d141ad352fee5e3fcf1405 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Sun, 2 Dec 2018 02:36:13 -0500 Subject: [PATCH 089/105] if I fix the bug before anyone sees it, was there ever really a bug? cyber lungs can breath hotter things correctly. --- code/mob/living/carbon/human.dm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index b11d9965..d09838ef 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -3962,9 +3962,10 @@ return 0 - if (src.health < 0 || (src.organHolder && !src.organHolder.left_lung && !src.organHolder.right_lung)) //We aren't breathing. + if (src.health < 0 || (src.organHolder && src.organHolder.get_working_lung_amt() == 0)) //We aren't breathing. return 0 + var/has_cyberlungs = (src.organHolder && (organHolder.left_lung && organHolder.right_lung) && (src.organHolder.left_lung.robotic && src.organHolder.right_lung.robotic)) //gotta prevent null pointers... var/safe_oxygen_min = 17 // Minimum safe partial pressure of O2, in kPa //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) var/safe_co2_max = 9 // Yes it's an arbitrary value who cares? @@ -4030,11 +4031,14 @@ else if (SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if (prob(20)) spawn(0) emote(pick("giggle", "laugh")) - for (var/datum/gas/rad_particles/RV in breath.trace_gases) - src.irradiate(RV.moles/10,1) + + //cyber lungs beat radiation. Is there anything they can't do? + if (!has_cyberlungs) + for (var/datum/gas/rad_particles/RV in breath.trace_gases) + src.irradiate(RV.moles/10,1) if (breath.temperature > (T0C+66) && !src.is_heat_resistant()) // Hot air hurts :( - if (!(breath.temperature < (T0C+150) && (src.organHolder && src.organHolder.left_lung.robotic && src.organHolder.right_lung.robotic))) + if (! has_cyberlungs || (has_cyberlungs && (breath.temperature > (T0C+500)))) var/burn_damage = min((breath.temperature - (T0C+66)) / 3,10) + 6 TakeDamage("chest", 0, burn_damage, 0, DAMAGE_BURN) From 7870f1224104382905c1ed21d8cae39e6b9ee9dc Mon Sep 17 00:00:00 2001 From: ZeWaka Date: Sat, 20 Oct 2018 15:44:26 -0700 Subject: [PATCH 090/105] Compatibility patch for BYOND 512.1453+ UP is a built-in thingaroo now. --- code/mob/living/silicon/robot.dm | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/code/mob/living/silicon/robot.dm b/code/mob/living/silicon/robot.dm index eb70e28f..06a598f7 100644 --- a/code/mob/living/silicon/robot.dm +++ b/code/mob/living/silicon/robot.dm @@ -1355,7 +1355,7 @@ logTheThing("combat", user, src, "removes %target%'s brain at [log_loc(src)].") // Should be logged, really (Convair880). src.uneq_active() - for (var/obj/item/roboupgrade/UP in src.contents) UP.upgrade_deactivate(src) + for (var/obj/item/roboupgrade/UPGR in src.contents) UPGR.upgrade_deactivate(src) // Stick the player (if one exists) in a ghost mob if (src.mind) @@ -1377,8 +1377,8 @@ logTheThing("combat", user, src, "removes %target%'s ai_interface at [log_loc(src)].") src.uneq_active() - for (var/obj/item/roboupgrade/UP in src.contents) - UP.upgrade_deactivate(src) + for (var/obj/item/roboupgrade/UPGR in src.contents) + UPGR.upgrade_deactivate(src) user.put_in_hand_or_drop(src.ai_interface) src.ai_interface = null @@ -1391,17 +1391,17 @@ available_ai_shells -= src if ("Remove an Upgrade") - var/obj/item/roboupgrade/UP = input("Which upgrade do you want to remove?", "Cyborg Maintenance") in src.upgrades + var/obj/item/roboupgrade/UPGR = input("Which upgrade do you want to remove?", "Cyborg Maintenance") in src.upgrades - if (!UP) return + if (!UPGR) return if (get_dist(src.loc,user.loc) > 2 && (!src.bioHolder || !user.bioHolder.HasEffect("telekinesis"))) boutput(user, "You need to move closer!") return - UP.upgrade_deactivate(src) - user.show_text("[UP] was removed!", "red") - src.upgrades.Remove(UP) - user.put_in_hand_or_drop(UP) + UPGR.upgrade_deactivate(src) + user.show_text("[UPGR] was removed!", "red") + src.upgrades.Remove(UPGR) + user.put_in_hand_or_drop(UPGR) hud.update_upgrades() @@ -1422,7 +1422,7 @@ if (!src.cell) return - for (var/obj/item/roboupgrade/UP in src.contents) UP.upgrade_deactivate(src) + for (var/obj/item/roboupgrade/UPGR in src.contents) UPGR.upgrade_deactivate(src) user.put_in_hand_or_drop(src.cell) user.show_text("You remove [src.cell] from [src].", "red") src.show_text("Your power cell was removed!", "red") @@ -2919,8 +2919,8 @@ new /obj/item/roboupgrade/fireshield(src) new /obj/item/roboupgrade/teleport(src) - for(var/obj/item/roboupgrade/UP in src.contents) - src.upgrades.Add(UP) + for(var/obj/item/roboupgrade/UPGR in src.contents) + src.upgrades.Add(UPGR) ..() From 415ffbab3d8e567e9653a71170e7ce47713933ad Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 5 Dec 2018 01:36:28 -0500 Subject: [PATCH 091/105] moving breath composition outside handle_breath proc --- code/mob/living/carbon/human.dm | 35 ++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index d09838ef..ee48f04c 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -59,6 +59,7 @@ var/datum/organHolder/organHolder var/ignore_organs = 0 // set to 1 to basically skip the handle_organs() proc + var/safe_breath_composition[5] = list("safe_oxygen_min"=17, "safe_co2_max" = 9, "safe_toxins_max" = 0.4, "SA_para_min" = 1, "SA_sleep_min" = 5) var/on_chair = 0 var/simple_examine = 0 @@ -3948,6 +3949,20 @@ canmove = 1 + //change the variables for safe oxygen, co2, tox, pressures/amounts in the air src can breathe. + proc/set_safe_breath_values(safe_oxygen_min=17, safe_co2_max = 9, safe_toxins_max = 0.4, SA_para_min = 1, SA_sleep_min = 5) + safe_breath_composition["safe_oxygen_min"] = safe_oxygen_min + safe_breath_composition["safe_co2_max"] = safe_co2_max + safe_breath_composition["safe_toxins_max"] = safe_toxins_max + safe_breath_composition["SA_para_min"] = SA_para_min + safe_breath_composition["SA_sleep_min"] = SA_sleep_min + + //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) + + + return + + proc/handle_breath(datum/gas_mixture/breath) if (src.nodamage) return @@ -3966,13 +3981,9 @@ return 0 var/has_cyberlungs = (src.organHolder && (organHolder.left_lung && organHolder.right_lung) && (src.organHolder.left_lung.robotic && src.organHolder.right_lung.robotic)) //gotta prevent null pointers... - var/safe_oxygen_min = 17 // Minimum safe partial pressure of O2, in kPa //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) - var/safe_co2_max = 9 // Yes it's an arbitrary value who cares? - var/safe_toxins_max = 0.4 - var/SA_para_min = 1 - var/SA_sleep_min = 5 var/oxygen_used = 0 + var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME //Partial pressure of the O2 in our breath @@ -3982,11 +3993,11 @@ // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure - if (O2_pp < safe_oxygen_min) // Too little oxygen + if (O2_pp < safe_breath_composition["safe_oxygen_min"]) // Too little oxygen if (prob(20)) spawn(0) emote("gasp") if (O2_pp > 0) - var/ratio = round(safe_oxygen_min/(O2_pp + 0.1)) + var/ratio = round(safe_breath_composition["safe_oxygen_min"]/(O2_pp + 0.1)) take_oxygen_deprivation(min(5*ratio, 5)) // Don't fuck them up too fast (space only does 7 after all!) oxygen_used = breath.oxygen*ratio/6 else @@ -4000,7 +4011,7 @@ breath.oxygen -= oxygen_used breath.carbon_dioxide += oxygen_used - if (CO2_pp > safe_co2_max) + if (CO2_pp > safe_breath_composition["safe_co2_max"]) if (!co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. co2overloadtime = world.time else if (world.time - co2overloadtime > 120) @@ -4014,8 +4025,8 @@ else co2overloadtime = 0 - if (Toxins_pp > safe_toxins_max) // Too much toxins - var/ratio = breath.toxins/safe_toxins_max + if (Toxins_pp > safe_breath_composition["safe_toxins_max"]) // Too much toxins + var/ratio = breath.toxins/safe_breath_composition["safe_toxins_max"] take_toxin_damage(ratio * 325,15) hud.update_tox_indicator(1) else @@ -4024,9 +4035,9 @@ if (breath.trace_gases && breath.trace_gases.len) // If there's some other shit in the air lets deal with it here. for (var/datum/gas/sleeping_agent/SA in breath.trace_gases) var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure - if (SA_pp > SA_para_min) // Enough to make us paralysed for a bit + if (SA_pp > safe_breath_composition["SA_para_min"]) // Enough to make us paralysed for a bit src.paralysis = max(src.paralysis, 3) // 3 gives them one second to wake up and run away a bit! - if (SA_pp > SA_sleep_min) // Enough to make us sleep as well + if (SA_pp > safe_breath_composition["SA_sleep_min"]) // Enough to make us sleep as well src.sleeping = max(src.sleeping, 2) else if (SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if (prob(20)) From b459a60e27fb98a8fbcdc215c9eb44f124d8d406 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Sun, 9 Dec 2018 01:04:11 -0500 Subject: [PATCH 092/105] fix lungs naming scheme, and making cyberlungs be able to breath in lower amounts of O2, higher CO2, and Plasma. --- code/mob/living/carbon/human.dm | 37 +++++++++-------- code/obj/item/organ.dm | 74 +++++++++++++++++++++++++++++---- 2 files changed, 86 insertions(+), 25 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index ee48f04c..a9b5d94c 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -59,7 +59,7 @@ var/datum/organHolder/organHolder var/ignore_organs = 0 // set to 1 to basically skip the handle_organs() proc - var/safe_breath_composition[5] = list("safe_oxygen_min"=17, "safe_co2_max" = 9, "safe_toxins_max" = 0.4, "SA_para_min" = 1, "SA_sleep_min" = 5) + var/datum/respiration_type/resp_type = new /datum/respiration_type var/on_chair = 0 var/simple_examine = 0 @@ -3949,18 +3949,20 @@ canmove = 1 - //change the variables for safe oxygen, co2, tox, pressures/amounts in the air src can breathe. - proc/set_safe_breath_values(safe_oxygen_min=17, safe_co2_max = 9, safe_toxins_max = 0.4, SA_para_min = 1, SA_sleep_min = 5) - safe_breath_composition["safe_oxygen_min"] = safe_oxygen_min - safe_breath_composition["safe_co2_max"] = safe_co2_max - safe_breath_composition["safe_toxins_max"] = safe_toxins_max - safe_breath_composition["SA_para_min"] = SA_para_min - safe_breath_composition["SA_sleep_min"] = SA_sleep_min + // //change the variables for safe oxygen, co2, tox, pressures/amounts in the air src can breathe. + // proc/set_safe_breath_values(/datum/respiration_type/comp) + // src.resp_type. + // respiration_type["safe_oxygen_min"] = safe_oxygen_min + // respiration_type["safe_co2_max"] = safe_co2_max + // respiration_type["safe_toxins_max"] = safe_toxins_max + // respiration_type["SA_para_min"] = SA_para_min + // respiration_type["SA_sleep_min"] = SA_sleep_min - //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) + // //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) - return + + // return proc/handle_breath(datum/gas_mixture/breath) @@ -3993,11 +3995,11 @@ // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure - if (O2_pp < safe_breath_composition["safe_oxygen_min"]) // Too little oxygen + if (O2_pp < src.resp_type.safe_oxygen_min) // Too little oxygen if (prob(20)) spawn(0) emote("gasp") if (O2_pp > 0) - var/ratio = round(safe_breath_composition["safe_oxygen_min"]/(O2_pp + 0.1)) + var/ratio = round(src.resp_type.safe_oxygen_min/(O2_pp + 0.1)) take_oxygen_deprivation(min(5*ratio, 5)) // Don't fuck them up too fast (space only does 7 after all!) oxygen_used = breath.oxygen*ratio/6 else @@ -4011,7 +4013,7 @@ breath.oxygen -= oxygen_used breath.carbon_dioxide += oxygen_used - if (CO2_pp > safe_breath_composition["safe_co2_max"]) + if (CO2_pp > src.resp_type.safe_co2_max) if (!co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. co2overloadtime = world.time else if (world.time - co2overloadtime > 120) @@ -4025,8 +4027,8 @@ else co2overloadtime = 0 - if (Toxins_pp > safe_breath_composition["safe_toxins_max"]) // Too much toxins - var/ratio = breath.toxins/safe_breath_composition["safe_toxins_max"] + if (Toxins_pp > src.resp_type.safe_toxins_max) // Too much toxins + var/ratio = breath.toxins/src.resp_type.safe_toxins_max take_toxin_damage(ratio * 325,15) hud.update_tox_indicator(1) else @@ -4035,9 +4037,9 @@ if (breath.trace_gases && breath.trace_gases.len) // If there's some other shit in the air lets deal with it here. for (var/datum/gas/sleeping_agent/SA in breath.trace_gases) var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure - if (SA_pp > safe_breath_composition["SA_para_min"]) // Enough to make us paralysed for a bit + if (SA_pp > src.resp_type.SA_para_min) // Enough to make us paralysed for a bit src.paralysis = max(src.paralysis, 3) // 3 gives them one second to wake up and run away a bit! - if (SA_pp > safe_breath_composition["SA_sleep_min"]) // Enough to make us sleep as well + if (SA_pp > src.resp_type.SA_sleep_min) // Enough to make us sleep as well src.sleeping = max(src.sleeping, 2) else if (SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if (prob(20)) @@ -4493,6 +4495,7 @@ // lungs if (!src.nodamage) // I don't know why all these if (!src.nodamage) aren't just checked once, but OK + //this is called to keep things in line with how other organs do not function when they have over 100 damage. adding/removing stamina debuffs src.organHolder.handle_lungs_stamina() // if (src.organHolder.get_working_lung_amt() == 1) // if ((src.organHolder.left_lung && src.organHolder.left_lung.get_damage() > 65) || (src.organHolder.right_lung && src.organHolder.right_lung.get_damage() > 65)) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 4567beac..a5f3cccc 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -385,7 +385,7 @@ myLeftLung.on_removal() src.left_lung = null organ_list["left_lung"] = null - handle_lungs_stamina() + handle_lungs() return myLeftLung if ("right_lung") @@ -396,7 +396,7 @@ myRightLung.on_removal() src.right_lung = null organ_list["right_lung"] = null - handle_lungs_stamina() + handle_lungs() return myRightLung if ("butt") @@ -670,7 +670,7 @@ src.left_lung = newLeftLung newLeftLung.set_loc(src.donor) organ_list["left_lung"] = newLeftLung - handle_lungs_stamina() + handle_lungs() success = 1 if ("right_lung") @@ -684,7 +684,7 @@ src.right_lung = newRightLung newRightLung.set_loc(src.donor) organ_list["right_lung"] = newRightLung - handle_lungs_stamina() + handle_lungs() success = 1 if ("butt") @@ -805,13 +805,16 @@ I.reagents.trans_to(src.donor, 330) return 1 - //OK you're probably thinking why this in needed at all. It seemed the simplest way, to add and remove stamina based on the amount of lungs. - //Because I have it so that an organ can stop working when it hits 100+ damage, we need to check if we have to make stamina changes often. + //OK you're probably thinking why this in needed at all. It seemed the simplest way to add and remove stamina based on the amount of lungs. + //Because I have it so that an organ can stop working when it hits 100+ damage, we get the amount of working lungs, + // then we see if that value is different from the last poll, (var/lungs_changed) + //i have the "if (working_lungs != lungs_changed)" in each switch case because I think it's a bit cleaner. I think it adds an extra 2 lines than if I moved it out and kept the damage done, but w/e //change stamina modifies based on amount of working lungs. lungs w/ health > 0 - //lungs_changed works like this: if lungs_changed is != the num of working lungs, then apply the stamina modifier + //lungs_changed works like this: if lungs_changed is != the num of working lungs, then apply the modifier proc/handle_lungs_stamina() var/working_lungs = src.get_working_lung_amt() + switch (working_lungs) if (0) if (working_lungs != lungs_changed) @@ -842,6 +845,23 @@ donor.remove_stam_mod_max("double_lung_removal") lungs_changed = 2 + proc/handle_lungs_type() + if (src.get_working_lung_amt() == 2) + if (donor.organHolder.left_lung.robotic && donor.organHolder.right_lung.robotic) + donor.resp_type = new /datum/respiration_type/cyberlungs + + else if (donor.organHolder.left_lung.synthetic && donor.organHolder.right_lung.synthetic) + donor.resp_type = new /datum/respiration_type/synthlungs + else //2 regular human lungs + + donor.resp_type = new /datum/respiration_type + else //any other amount of lungs... 0 or 1... you'll have regular old human resparation type + donor.resp_type = new /datum/respiration_type + + proc/handle_lungs() + handle_lungs_type() + handle_lungs_stamina() + /mob/living/carbon/human/proc/eye_istype(var/obj/item/I) if (!src.organHolder || !I) return 0 @@ -1258,6 +1278,7 @@ mats = 6 New() + ..() if (prob(50)) body_side = L_ORGAN icon_state = "cyber-lung-L" @@ -1266,6 +1287,16 @@ body_side = R_ORGAN icon_state = "cyber-lung-R" + // emp_act() + // if (donor) + // donor.manualbreathing = 1 + + // donor.show_text("Your chest lurches. It feels like your lungs aren't working properly. You are gonna need to make an effort to breathe.", "red") + + // spawn(600) + // if (donor) + // donor.manualbreathing = 0 + // ..() /*========================*/ /*----------Eyes----------*/ /*========================*/ @@ -2524,4 +2555,31 @@ mats = 6 #undef L_ORGAN -#undef R_ORGAN \ No newline at end of file +#undef R_ORGAN + +//default is regular human lungs +/datum/respiration_type + var/resp_system_name = "human_lungs" + var/fluid = 0 //might need for underwater breathing, no clue really how it's handled, if it's just an aquatic genetics check or something + + var/safe_oxygen_min = 17 + var/safe_co2_max = 9 + var/safe_toxins_max = 0.04 + var/SA_para_min = 1 + var/SA_sleep_min = 5 + //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) + + // humanlungs +/datum/respiration_type/cyberlungs + resp_system_name = "cyber_lungs" + safe_oxygen_min = 7 + safe_co2_max = 18 + safe_toxins_max = 0.08 + +/datum/respiration_type/synthlungs + resp_system_name = "synth_lungs" + safe_oxygen_min = 1 + safe_co2_max = 100 + safe_toxins_max = 0.5 + SA_para_min = 1 + SA_sleep_min = 1 From 92cd748dbf74e4112d1923cc754f81d32baa5682 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 10 Dec 2018 16:16:34 -0500 Subject: [PATCH 093/105] finally got around to making the handles of the scissors different colours programatically. added the sprites both in surgery.dmi and surgical_scissors.dmi --- code/obj/item/surgery_tools.dm | 14 +++++++++++--- icons/obj/surgery.dmi | Bin 58820 -> 60080 bytes icons/obj/surgical_scissors.dmi | Bin 7842 -> 9322 bytes 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/code/obj/item/surgery_tools.dm b/code/obj/item/surgery_tools.dm index 984373a0..f8e99487 100644 --- a/code/obj/item/surgery_tools.dm +++ b/code/obj/item/surgery_tools.dm @@ -877,16 +877,24 @@ SURGICAL SCISSORS throw_range = 5 var/mob/Poisoner = null module_research = list("tools" = 3, "medicine" = 3, "weapons" = 0.25) + var/image/handle = null New() ..() src.create_reagents(5) + icon_state = "surgical-scissors-metal" + handle = image('icons/obj/surgery.dmi', "") if (prob(1) && prob(10)) // 1:1000 chance - icon_state = "surgical_scissors-" + handle.icon_state = "surgical-scissors-handle-c" desc = "Used for precisely cutting up people in surgery. I guess you could use them on paper too... There's something off about this pair." - else - icon_state = pick("surgical_scissors-r", "surgical_scissors-g", "surgical_scissors-b", "surgical_scissors-v", "surgical_scissors-dr", "surgical_scissors-g", "surgical_scissors-gr", "surgical_scissors-gf", "surgical_scissors-c", "surgical_scissors-pi", "surgical_scissors-y") + handle.icon_state = "surgical-scissors-handle" + handle.color = "#[random_hex(6)]" + + src.overlays += handle + + disposing() + handle = null attack(mob/living/carbon/M as mob, mob/user as mob) diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index b51da858b3d872f72d5bc7f46711a5185e93d10b..5ff7e0ab925a9f0e1d71e6fc25bd21e404d010e6 100644 GIT binary patch delta 17312 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 delta 16038 zcmb8WbzD`?_bZ?+4?&L6hS7y-AbXL6l9aG4gV8Ok9SCNi5pS9DU%x2hr_&u{0 zd!-l6VK_pd0Ag9TYqf2{#JF!cHddDxSISYhe5xc zkvd}>7Je;>?WIrGC&G(IOMW_X%~eirVxTB0=GG_JE! zWAsVhBz&SUzi;ax`O8zWcdu!EGM-|2d>+cbWz&COTDYjHxbsNV;$EF`7?ttEEn*DI zQdfP$7Y?JjR#?|C!u5zM7WQLUk-=o?z6LV$zQ$tG?S%s4Ql$ioX{%hYckj_?^?RQm z!R*w>htz(7a~{Q>31uVQIigO@eG;#X>YGI-h&(CZWz;ALW+ zj4A@oEoCF$f%u19>V}f+T&wgHI)ij$n-9B2eCMU_;@c#+l_iEUaGu1ECjJc7UN=E5 z&oCI&OEhd!eSb6vdSwv^br4_o!}>-z`q+NYnQ-ag(Yn!5gru;T`Lryad?GxY z_jqn@fj--R_n(M`<ir6cMDP?JYIPBm;beQY^#Uoz8CWSUAum8IA^A&=uJBPR$@xC}OyPE)QD^tLapBMQ0(z}NEmQL^F zyXon?OTrEeE(Zmhfwj{cC7LNN;n2N5k_$$aqmRnA;U&w~6HFS3@FHHO<-`!e!K%rF zgQeg~zNsnM+}oTBVEA%yWkuz?>>vUPqZ7uTCfCS6doctlk}`>GHW#OdXy|J0D861$ z)$GowAU!H!`?aEhs4P7uH&Be%$xv2%Wm8ZVEcV9K$oByqn)J+Xq#7v`>$Dscx&`zq zrqsNb8%spC$$2t9@GXq^&F6}Y$fsh((j1G2qu*J4^)h~Qt&m)z%LG0A_- zQ2nL#_0(HjJU1>9)EAL)H-$g4?+`y!S$z=O6;gO9rzTAoxJUXVl)*rR+18F; zgx)nt@Q=IJzU27@TIB#~B#9-@qO>3Af9X?P*?@1C5B_$--VUn>D_I6uqZX}6DcB-7 zZbcI0)>JXww2!yf+z)#jEJ=P1VThUtiKB5iey}d1EEA$nuFv)5E_L85C$9T!cVCbx z1N`!=tig8|9nrxlN2BUeXx$4l5bedQu09L9@UKB2RuMJpPs)$Kn3;ht zz-za0P8-!|-3Ym6XVXz9Z*fCLvN^BS^sA3a)$J?Tkj5DJ`o5I&52?Q`ivIgO=m%6k zP)QyHF2ay9qpfn87vv3GpnN1o@q@3`Z5ub-julbK?PGE&;9oe z=(SyC*n@lU)=9B9F+w;+`9r;Zaz^d0ne^qf|B*=wJ>R(t9va3kE^KP6vVsmB*P0*y z4~4(WjR38<2+Ez~Ag0&NRz~VS-9sdx!}0lKiCDuZ{xHv{vJgWL zvP!OeL6lc{$)tFtTic~hwEu1qr=+St!};<+1(5#O z5nOI$81Fl-llN})-zMRLFxg0u)G0(8JTDFUt0I`Jl3rL~>y-qus$CTT2L{yu4zvBZ z!T1(M%X1UyqIJRY3mV#^QI~g_6eIlMdaY#4l3T}+$d&|xeC?zZ26KP*%#L3lM5N;Z{nJl6E4HaHdWSv$ zAW5({OD7tMsrdO1s2+hb17`>--ae)S-n3BVUCI(k2W zy`vB8GT`}tl&~A;wN%rqnc~yPi2_qM^U2fWXhtMnzB z>i;p=c~v{uBeQF842Ba>Y-0$6{uBb3*W!RHHliN;_46ezQl>NS#sLaM8AS-7Z91;a zr6xrrVJ_{OPLkkfXi6X`(kcR3E96LY(H-%xf)3G`J+ZTE!Ih4sWiqXq2+dmBlOJ3+ zPOoF``KARRYh9$}tr>(aC;NI(OUC9K#jT06iv_db^+NCbMe5|M{<@FIS3S{xTj#^n z*<11^8M}T67-zrURot~)fA45A8H_@_p+uPxn`f4RI+#DvybGRU-|QyKf&^^TQ$q4H z18zz^xZgVd@gCtN&V3$EQu}_of0t0{KI%?OfyP5!#)Ug*9*pj zQopR4FYVpu@Mhk&E^!-O_u}K*Xf0QuR~Xx@c;vteWNCMA>%y_wzo<^&iLNJby?X)s zNSE2y*RQc7Ei_&*wY*<>a7xII%ywGhnX2*PVnQQ%_l+%Be`9A68sA=pZmIKe@s`gk z^<%Q&&G4Ov4roN6>WavMS}Zdp8}u#R2pFW8V)aDyD|o_alrjWXmqbF2VzF|L|I@ zetJD-e`(Ns&ejFXF7?<4g{^F4_8zJjlydf<>WUM$ih`>2xs0Dg55dP_$EQQjuxD;| zs%Xsd7(%KXxlF6n2}uWjxnzvD_qh_Am?;F3`zx`nCWh>v(`Lh3&KPxg9tkZaon5lo zz^{;(BEN6N72eTGh+Sw$_(-$m&ZPTs&9aW~$Rlu~On2Lg&&Bz?tT`E6V!ENqCV?BL z*sVgbPcAUJpnIOtaAcZU*R+<`6ML)!A`TkJ5n?mXBYe=1daeb36Ep zyx^F7;Vr+F2GnK9YIYd?*$uxz0fwRviqT8m>1}J5{G?-_YF~mcy?1KAnnVhE`BGaad$q5^D=t9_oz?RK3Z}C&dQV zdWZ%q+Yzq!_ChZNdRK>ww!3#YV&pzPK)^FjP_#sPtACUMW4r8gG2rcnyc{g})2uV` z#W{*h>F7MQ1@Gptu0xC&3nzn>sV|Y$gF#lexP{A zof8zh8rs7@Kc!UzWT^ggQ zlw{DV`RgO~z!@HSv<)pddox_64R&6Q@u4-|I9|eg4I>@c>z?0g1-(xz$6Syn;9=}B z?08i@kguv8d$7>QeLPeuWxsK%zDbxBz+AFdjHTn-L`{B#VU=7xJ%a>`i62pb3VMss zhw=Q zmsTx|nzAwupqeSk*xA`x_iKg(5P57v(t^Wh{Y!dEs5#=|!tZDoA$33aBBbIuSwtN} z_+*NxNhj#~g{zGuZZAJC-@lX=ePkAs310Z;Nf}?>z%#%5$9$6u#J@F%2`uO<`Muo>R7ojMGTpbFYbRWET_wGWh_)aUM&s;Ew-ZX=ne`_j4Pxd?|gf;Y< zWlvV{*~S?$(7MnTic=>R{1$VqWw1&UJVy`fTsDr3G)c5)re^F^n;wmV{4mV=ZVG15 z{G?4U`h;5|hZr1dvRm<|?6K*J0@_L<=!{8G@Y?&JI@HthrUMdS;a9dC5Olq?)YR;9 zEM0sU4uT@-Y7%<-k@qrTw=)@>KFt9Ay?q}MBv$d0$f`-Z{m>ZTl;*YdHJmzSdm5AxC1UVZyKRz5Tm-4RBk* zaqhca?Bb{&{0kgb^JOI3QF;WuF_e3=&^B))AFvNgt|qg@@;>>%QyP6N^*AgW6K#$C zU!Wvji@tFvY0v?ZcIXwauO?)4R$ zdOa}r87~Oa&^7yKCK87a?|iZaofq&kVQGJF<%PsY5quxSmQQA6X8@VkUCe%+1V>r%yhnakkW@!!DF3?|%2hr*A7q*uyI;=}gvtvRXQS#T!mPVC2r*hFmDmK{Nir$H=(Xh=*9sRVA1 zZWyr0%lkm)x${Gqp7#Aw7Z?#ex>R|15{4>@8O>K0F3tyq1;tOgyQUNcq5sjZzVV-E z0!6|)0T9y9js9pKY7B`1WF3d$0p|2C34yzcom`90!pi;ZJQ{7F1RhY7UvHXru}DWp z^pNQ542zyRPl<$CLZ6EdojjOBl*d!dyvJ_(-TDbUcjvCV zubzhwE4bL+BWs%%9!PY5OLDcCp4GJ*W1Eq)%S|R_TN1ll-92E+V>;hPzX!X~!)LQt zk8-8)acqCXjgdPZ2iCwd_B@)_JFbDr@0?R}5r*(o3>wv4hgFjdyzo5CP38xHV>3-k znHxnAZ}H@nXXi?uEbO3LAhEH8?SFn*^UvrDDTzCTMbDz1=|;eGY*hEf)i@8MSLG|e zCMPx^rM53w^}yDNce9-05VCVQ!4P(4N|FOtz(3N|`w4_?_oaT$s-noJOIov$S0)0` zu-D8?7NnaV2`8qF_usu+ShqW_|M5Lf%DL(CZ*k=d+g&(jii*@kcd~};8Kg`8mzFH;l@c1^ri@SEy z3+n4@yUfVbm1;+y|73rEVp#aL(2Po#D)-6$vn$#K=$+kc5(y;szWnpim1aHZj4w^1 zJ-xj6d^|Ewy_LE>sEk^6d^7*v28Ao;()Va*p8n_0pJyAz<$QL%@>+64=oJ(JI1{?J zKAN8v$QX8|MCP&QQ8wKtT(y37m3o=w(u=B$E%M_kPn=w}Ngq)KfRF!{$KJ2K7*#8m zGz)G|5etYaO7fdoz-acUDmkx`i3a^trfOz_*kQXt4GmW%jU^0G%DWab*AHZ(ZelZmWn;4|lss1&Nx?peb*KSl9z;HI3Ed$;t5EqfoHu`L4} z<2zvxi2i^$4Xc3UAn;@ZT|BzHYT(n#b!`0Vg{?w=MtLdK9kkpBaE+MJMh zS#35j)RJ}w2@Pqg*rRHdHx-}1$og*dX#XALX&(>L;+{e|08qsa`cMeFvH;0U?a*id zL20p4&VEE2uV7xIAE*f}szHl^_OKOpb&kipzK^oEh5JTnCb(7kX0a5Q4|`XCU^M1y z;+fu-#K#KD)s(O#PXCl0!aWs09q)Amh{bT>T#ocp)SPFGe;1)Fff%&!;gjO$XrA8z zL-zHaov)C#Z@`|~T}@}dGb448fZtV-0<6^_&MseG>E~DZ)rZ1DsHW<}#-Xq=3_(*z za*calItNiP@e8$7BD-nBm>4v84MODn*wIz~m4t{-t4AECzm;Fe#RuoH!lh3!8oH?J z%dJMy4?5_f0L@f0^Ot)s?#KebSJD2r6dY%rdDX8MC-&={kNmXc;%9iVk~ov(2$vLW z8tsbtlA-|VaWU#N^4C|`?==dJOPzP6w0~lcI^KUQeOXW{C+EZnr9ipqq<8OZFVbD$ z(H?@#e~bqr63=`Bjwm@DOoRo{I}vD{&$?1By6jv1t^F=vcNt=nKKf;EZ3%r!pASDu z?{KpSQWkVD`r`LM*(Ws_~=@47I zyQj7gg<9=ZF?~J#sS*!kI`n>yeVOx-bhmIXwiW;ATUFy?_+v=qaE#}9N9PxFrPkCq>jPV3~j zw_FQLlTt80`kugyoxd@!=bg`^z?Qh){A`rjUfjLispEOGmJj-I{=JRDs zAZOklJJyHu>2+S(Hk?C7@SC$?{^dsYJz&TncBYc;Y2-)-PGN@nyK(_`#j}HM-&JqW zEivb$M2YfCm7R3a>fyn;h}Mfua?v2=YVlzq7D~$ZZrOv+BAxL`EIjg5KTSH#zcM6} zImZ5>O`G_$E#re1w2rAQhcUpXs%ZMkYP-x1K$CWTtu1XG;ztU<7kmqCIkW&rXjT7${|c>BFId!ilY7fEa;)2CNWx)&zGuf9o4=!mxs z>qt#96a0UdIamoey75D0EF~O0kk8^$(oUZ0E^Etc2%Eg>iD#W^u!$aF@Lg!dF?RpS zo_AxI&$@@=ap32yuuQF4-W&t~7umCqpwnP}{mvQ0&4I68M15m$6S~^vGnplqYo(Hj z%t{B;s)YPgk02pT+e(kaI*xDa=pWL~{R3aRYe=8Af4*oBN4LqJiFxz~3v^5LRd#m1 zCa9h0vi&T&vPa^82{D@L&^YTD$5)ONjijj9UW)sM>>wX5HvI@>4g_?T-AK6`k@AMt?jCI+5u!vxD)% z#RFbZ%BY0#4D*(lg)pLTZuLI?Mw%7)>tHg)jKZC2`SZM1u9rTSVlMJK-3L!%c@O=7 z0ErJDKPI>pjiq<4@3vryhH5hLKMfDu0YGVi8QU{=6o6apjm{@RP2EGIFrq_c|^{gmaslAHq-W>L{D z#YV=+UAc-LLw>afNo;KL(HGxE+3_4+Mt_Xs?hb9Is-ofaFP2mz)LAr-NP2%z_O&V z+S>;P>b1U3;6qSH;J9f+da`M^Z_uZmP(r5yqV70#*Q}h1x!3m>9kyp(dM(3VTS~Iw zNA{}dJS9+wqr+?cZ0mOMZXYb>WTEW+ar<=X_H!Hja9#7Y-C&p{H=8-m9*G%xyKM1| zVOsjj%LBeY;beMD{yH_5Uw)k-7rhssH!>Kh{-TuLCO^Y>(*+ z$h48uu|Z(#{fFYy3ayfXjLfw#0AK->n7Yfvk1U zZr*-QF;pT5yB0U-+y7vGk|8`6cguXZEEO2HiDdFs6_lH@FCbDJ)@E_>?P(C&|*p2)t#l=AVO zkwH{8!cdAe*Wm+%#YI<|^eWjFUKwf+1|7MXi9Z+5EQi0MZl2X?L$m#4mPFsFNFb%ayG zWPW_HJ0IM5{newH=V8|>I+n>HQ>A#%^I-CVu2m^c=5eS2HLzAYp-!|uQ_vA_dPZVm z(m4buT)F%$AFZ7J=73!PMC*(H;Y|PMpu_)E1H6h$9POO3he1&RH=gIcEaC6of6F7U zFdu|s*#B*W2P5e1h?$-AI&HI}*79Gg_8U*?A$ zKw#OqB(*Q=uji%gW-d%)=1gb;Fwxq(V9Pni6$Xk>a1loZ6zV_xuzG&!O5hg@3j|+V zb?q)22}v!FQm%>SL^-_ru(`3(l=n0@SLKf=|3HDcF2tOYUgaU{K>PtBTjk7$N!bR$ zhNm*EG3L4rUna96BVbHZ7t30U=yt;onRWAn|9Hy;bMPCtHS0PMXeE%g32Sa^82V|%o6pB{qh-~2V%@Z6?D1jL#@Q- znNT06z?K}9CKj{)+!+>pS2juH)?0H9=Q#R$EG>7U{F)&$gCiuRuCOEd_wvJn5Atg_ z9Ttdf%dTG7;Wg!kKIt8Fvwu$5>(*%6=aSA3L?-R!_yVVpP@bm|`>0WRqMZxHaXPK{ z0fmgA+nT1Mn~Z7<=QE(!f-(<+4KLfozwnM2)z*=IT*l7ih>I?M{4T1V3+9ePCuLkx z`vFEBm^&GKNg$a?51TgZKw}Dui{<2>l?<)Q-**tN8meH1KLSKy8B|hlzg}Ys(7eXd zcdGS_y}y+ibUIdf_kuXhZtld+7IzAX5~b|j;JCF$zW15Ph8?`NgCzvUE_~I(zTd^` zNOHJQ6d<`&81_zRkl7r|l~Cb(%^3_L4|+i?u$P(X3W9!+QPHzgB><{~1aSe!Z*D-) zvdZ?ex|@r|zZV_vDYcA|wNj4&=n#Eq+>ptK6*sCP9-BeiIb=uAbWN(}QoLNxBidXU^eMBQ~q_~jnvQj^Xr!n%Z1#iA02%dMj$VP zBbAhsmLV_xANYXkYZwI{nr}nd31g{T=p9AfBim}8cTcpF;KPgU zn=lr0zR{0AOb9*{cqb(I;u>T@W%cJ*$*5WoAY$l0%JpuuRMu|PZKLYJB@lS>(?o;a zx5&iuMiIsRE{D$Yvdi9~J!F{p)eF2YRXE#n;LxUwV4TcBYx8S1K(8xZ-l$+O=g+(wWtjtYjIN$H1;9Z59@Yh3tTu+x@TPWJLMizM?!=Il?oaG5R%zGlWI zdVDYPEN>ciDV6$XhHU#I6&2NRzB=<~aUZgvV%fyxz=xwKjjn1@qk6GNE3|* z3W%-VE7gA(O>{Svt@A3?$Z66t*%~u=&VHC!i&bn5L_p79XTUIR7*rZ@fLijR$rX}6 z@6aO>Kd6>VF_XBL%F|gjcEH1`V?DO0684a?;2XBIH%afp?Y_Y8#V-2Xx1XO( zLYtNi#3{x=g}DWw#$feAj8dx(wZD0%dp$G{3TalfEywGMEXjMyIC?mN(f(sv-o$4sJV_qW zv?{jRZB@(GJc-Y~8S7rWNx5VsT{+F4FTXJN|Aa_Og;v70bBpPnmFF#Eu^Taktf#MT zE^bCvW_RonRFS{TWY5^rmg1yri4{@vzSRR1g2<3Uee9puUs_zt#d_56NKgKKD zP+3HiUqjzX)XsmxT;TBw8f0w_^^B4^+VuSa>z^Okdjl&|v&Qan8*KQRw~=s9uT8_a zE`^zn&-zsDadj%StFb)4?pPGsVarMO#B%f-jtVy3pF31|=4>3gw2|q%=X7EyV4xq4 z1{t`c*y5eF^)lVP*hi!}wGsD?fY;eg9p2-rwv+qTrZm6f-1yr1m}`;?V$H_hOGPdq z<6y+u$7YA?F>TO&S!$rC)f|{ z6BnUqH1SkfHkl1uOq6sUx;UNp@cR$%!!WrljHxX}0X*peMy<&wO#dmOCGg+qHF?m@ zR>QR0fe;tw;NLcD73Y4*WjFIm;XMPjOWmC;1d~&#R1Yj5o5B%$CnpPpqfGc6TZ3?b zAcwO0t{2$vHc;G%-00-fSB%ZBQ6suiO@9;Y-9TeMRim(l`By2#pCK%FG@3C0CHdamp4X3Q3eSQO@7Bps$T=w!!RbU8U~*aXkzVWwB`Q~4 z`Oj}`miAtIW(cHz-LwK1I36^)sbqvaz$)$xnqwW*hBaZw24m8oEDEfCm)zzH+i^iMpblcJh_&BMR$V3TPC zebA%^CY>i_2|Pk&quE)<@~^?eS|M>9&lb^&YW^n4mv*u1RNFU-9n=2w%Yx{xxH(5;o0(8n!2{Z{!i#+Dxr@_bam z-2Z6bnTdGJ3~0wj;fkfmT%{J7Ny7LulMn)50@pB$R$|+yPqQe@6^`G)9MEm<8)FYZ z{d2^|>rDmiR{Y5fc#tgfsL7H#9mpg5uQJyqnyaZGxBSzy7pa_q+)9j9 zKOPMRnB?O}Kzqy^V;u2q5gd@^HpF&vb*hZU$y^DAJz)$L5WC6M37|U&Kz`$2n|#%{ ziB=akwn#A>C|^OaGwUC*z{dUZOu$@NG}(gcrpY5fqUL~I4ui@<7=nu2pU(s9o0{fG z1pjub_5cdktaSK?`hBaB(o@tC*j|EC{A_DFco4_IRnr3ni``Y%WO~Ez&vRNNScQj6 zm`Sba5f?K^a!9~q6Dt06Gi#Dv4A+gVI(%_^;9QUFu814Pe*Xn|63Gd;`mldTdAj`n8$4Kez?)HA?1GMQn;>-NzH9 zx+70GuW7*kQ=s+9>0GEC?2sOiKDW!n0ZgGoOIqk!%vm=Ol(4h&Z}q7ZtE@87_qf2-TDd%rQs45dh)5%wnGZ21qb0FZFN^bp}YhQ_EMYPTz?L z#3gq_jmUxIC#a={qfcrkdr){_Js+Nb-t1QsZTr+Lf!8d%$fQmdvh8xOzT7oo_99Tw zZYen^-&&|vKs`nFal#7%ya-;rc;N~~@%q%TetLyvRnbWOZyNg5 zLzrS*^-$r^!sgon`@14#&tk|pk-G)ruX-f&Am_7`{Q47ic7h?7OE3?F|Ft!ZIcB{- zdG}JYAY9q@>uFDCpV#_>1Ai2m!3pEv2-9vX#v3OF;svZ>w^Vqqf+)~qZhqT;XalJ^ zc*Po6IXeD(&i^h$NqA{FgE7$*7U7xkn-PBZ^#@6lvH%wQN}4oDKEw65vYnZgS*@Pf zrKe2TrSlb(O0>i-sMd163;x89lk!QTMwwNkuX9gfsG0q0z_!PSwOIP`RqV|}DG(Ci z@C>7;_BnM-30Z2c@v2wqeGe zpXVy&Fw=`I`YGbEh;`?;WzXZQ&!gEX8-BFu6Wi|m#pP;lSGatStF1p!D}ulI=Kya! z1j7w9@CDrdrhghbE*d}IU~<_k`XYfP8b z7HUy}zg_lcnWofsQlEQoNEB=CTs2KCV$JjfEAngL0HoL?bw}X~- z{+;Ig=BAd~FF%LZJ=uhWgbF5aFYdne%=aSjBsITM$JdzzVs)156#Ykc^XsHv6q&S> zkb&22*h=>317_o2QoLr@tM zERemz!%>YScQv;;xeoEaOSi>P+?4#UjpRPznRuQ}HHvUGfm~`^8@NS1t@k4h&i?-wOS`7e;=(`OViO|00s$Afizl~ks!FYzf0LK z|5*<3`g+s#+6{(CTNF$Akh%APbbZnH5eKGihoigVzFFYsgp?=*{IJEdyNX-%AxGZ4 z!|k-R4l;|Gy*sa64sEww>RD`>QR?R(2w`E*(}Y<4wsc-7mQT(yZydzrHJ0*b9U8*Ggzn9bu5z-hD&ok;QZvlBXZ}at6pctU*On8eluY5dDmRFr#yz8YfWd1F#W*VnB7zQ z7GRfTtf0sA+1c&%#PDO6mItN}@uWwV!S#mSatJUe8KlJ1qW1_N0mk;VTtiQ19D4(u zzH;9RcoSuHe7tQsIW`tnP*C7qu6#>EKgD}KhK^M)B;?pf@Ms2B$!E<_5yr0aguLHA zRO_4d(oGe#O492~j_M%4Z_5hfC>IE$&c7^`vMB6^bGB~ASgw!c6e+Hhx4lyYbuy(G ze`5{w-X-8nw%r2A7{$WmBFI?T**iDQ1HV1OhC3iXeflSIw!)%=4@&U%ZcjKEts-1Y zB_P0AkVL)XpGRf}P&^S~91b0IE7N1+AYkasQe}MyapRL*wP9_c%^`1ie>jXCrmWZA zZmvZzhZ?H)o}z7R@};!G@hc#_dN-27ybVW0T%2Ad@!_{I_%LHTcMn*$P0KnJLftbs z*fo+fagkIfm+bwLr1DZF>GvAU8gtv)&dy3X1a+9-fig2Nh~hD-0fD`+iVWGdEe6p? zk6sX`v%OYOP~dDkvXm)zO7|MqhjMQ|c<{iq?=2M47OluEFZ;xdMe@336_FIKPqGN2 zZv(AK5u6%_=cbvp4lUx>ufqOWz5W&Cdtqc<-EY~ywwmZg0W@ZX)isjw+tN^=nly z9ugAQ{L;rmQ%ftQ1L@*urJ-=GGg@weZlWjRaKQT)yD`Z|CM|p+jStG)tb?hg+ zca7@&)`Fjuf1J|h-XTQ{y!cD^31LU0KiMVi1lpg`-`m%aL*f;gfYJYiWs3RkDGURR;er~-pSjO=2?7Qcd zJQW}<_5x?&k4vmX*+zHH4GzSdS21<*a?+p>YQ4F1!&m<70C^Cx_LBGP z25isPl9xI;^)6`{N&2cvfJ{&P9+PS7SU~(uzwVSlvUyRw_kbMAI9eM9f+lK&KF=Kd zwE81@d~meq^Axf+0{oAI-gul4Liid{eaRois{&N`U?quxYh(;-alSyzv98gEf!Y#Hk#4=aZWLf*0YqA*@SvY1c#W4@1= zYat!9!TqjvVTRm^?NxYLBx3X}0oi5CmwwZaE-?WlG&@i7jYD4A?1;RA6ufx4s$8)Xb7L9?HZ`th9rYL5@q2GgRU}!g@%v_OJW$bFwAwx1cI{FQSBSY@CCp8THY6(OwA02s~*TT^}JNmVQ z4!^rrY=K{b0q>Ze+%72c+sb4P2r7~+L#O&24(M0Go>Z}VKx!z2ZVHI*uB71rIyyQc z)yR+CEgsv|&vcY{u`|b;{CNWOwiFIuKmPJSg=W8OCy4?0aN`m49(>Dz&ia737r61s z8H;meXC_dqtAmfd{N)#LCFINi4bCSW;Ws+CrG+@ds%vW6Z7UySTZ|QGPC>fKK+8#8 zzC5vD$Uu{X4`l>*fUgNa?8|7RPOHmK1NE5$anP?cv{++lG4>+wsM$q5Ap(2KC~^sr z=sOHumEf(|S@yErh0F9o%V2#iUXhk5&0ijRc7AM)l|n`F5roRZMfPxIx=y4ly4FC zF;kdWqI;f&76dUABkX&$b--)E@~BvBLPA1;XNEBMnYNzZ9UhS9xvw!~P&YR0fsapE zmnY6!6^&vH-(>AQJ}<@p)iO=)s#A-b-Ccu0=kR#Rvk*gi#Qry_rgACk8HKcWy?s6e|yOgg+E{->m z&_DxaD}!fe;A=oyPEIb%;QeFY2JI@#HvxxR(|~aTOY68b{T5wN`o7USrdbz`2EvLr z0&w1>q@>Me{VNJaf7bEU+&gxQ%e63~2{3=QM-s-BTO#*$l%!EuK^W!bZB(vivP!)X zg0%J!fD9Rn*tlZ%j|FL+1U=+c)`xbZ(je&kqji!GlaJC2>vef-Ihuzy7drd@SWxf* zmiw0Gx^qE!_gJA8PMty{Z3%cdki`jFG7amMK|NQ#6M~>kKQ?-9SBu~#-3)WFIlK;8 z1jtjy0Fk{zlB-qj)g3ZIt*5lHxF|^?&LMECEsEXO9?Ircr|o1i*T2DVb*I4_7S|A zeNXj46H%G_bMz|&r3&${cJll8TJQySrKHXPAU-35O!McXJ{LhhN4P-+@dpY^(KjxM z&j>0#me(xevRAgeZcUs%$;~b40124`%ndq=M|@3Xy{aWFe-KSM3RTtAd}(Ny`M#0H zdt`qiU}+@Ys7l#XwWvZWK)K^bARES=lgLc6!@`Q!>QmNCBmMGu1!i#UG1OlAJWSx1 zU=R=Fg)s2HU6t~8VV#S2oVGmCDJv|L@s%fqHTc}kXm%HWG-Et#X#*}$vbJx!(Q?e$ zO0_0C-SA0)u7-T%6mp7x%C3qswwo+&jK7*0sGo3a&0*r2^C6SA594tIM@H{VXI&mQ z5L9fAXmK-=UtPl3ZD9}}4r4~|mhWSz;H^>$U3gC9Trj&RaA?#~Z(lmgwXou5Ld~oQp^M$LpP!GWzEl>}X+2w;T~B>tq9Y zVHC6tp6#^HnISxsczO13-D7FGW$IQV@e?ImpBi{Fw6c3;fKi-vty-uZq7QDvz<&zUGgKnVqD&Z1(R<%>-RxoG5y;gr}9cComJuY>Cq;DI4Gn zm0wM2_V?S8YkM!`>5@9Fly>jViJ(BSlEC8|pP&z%3k*HTRt+@k)3XxbvsSNXfCy8_k3l5zI?)avdD#_6|d91uJoQOep8!jSp`wGSoRiupO6n)9_)@fdU`nw0Ov`EZ6(g0cK1ao zNFSGB-~Lfp-Tjy#&G(Jwtn^>OONokz-GB4i{`vZjKKP0MOtbB5jnmXMV5exR`Sf=* zY!lISm=C4`b>Uf8nvrCHKg2|-v zTJ5|yy>n=>=!o8Gz||ncXQ*mCj|YAopb$&DcN73%MM(6U#YhKu>Gg zA!tNObzvh2e5!$0ck`;TBYa%4A4N>(Ee#EZ#CmG^RJC*N*FUS}k1(V_zVlh<#v4mD zun=fJ3E11J6gi(!Q799?x|XI?o7=(B^WzeCec6HcCsL8#bz2=Q0>dhVf4|1l)YN=N z)HgV&0QK8aE&az&5Kh=S9#IlI{_iZ~6(cnd$``==oHUi)AHH^!_J{zWpr(G4A7L7+ z2*1P?{#@GbuvxnVc1~F&b>5kBP=sWCLLP<%0HFTrECD3EMjgkT7X9wbC>Axel| zqqi^!gVDw?XG?zPzUO)Gx%WKxuj^s<+ROL5_iCTA_MS*xZB-g-7HR+hXw=n|^#A|@ z7J*qxDEPUqSfvYA$obwg_E3KK)W-dho5v$p7Xa{1OHV9wY2ly`v)?(FYg=5H^P}&Z z=2G6LA={2K#;s-mIVs8di0e%AE5>|x&It0HO_@L`sL^K}hzN|}pX-Dltqh&-z$iuQ-925T~y`X>$N?umv9=m}$F@0Id=`_|9Ce5ha@ z`@8@aYcJLPP|ZfWDlO)K=hpY}ye_v7u=ejTOxoPFE3A6L_dJ5Azvv)U2;xE(L)@YL zT9q}q_nW7-=QdvH2CAgH+{_lJH;B0D>nG}*zrm)5j}pa$?>Wc5TN~OGSL(OH~@8J#e3dqztfTT%$8Ex8zl*pjKUDc z1WpxY!$h?w+*j-ztxZjf#bM@&V`(v-o?4DKtKP2P8P#{P>B#4OHhN*CJoH-_o7{by zDc)fcr?u60kJovBhPnq`&eYp(>As9WQR_50OrJ=mDV&5~jTY1PP1S0%Q-YI{?bBt*wRCpYR3LZ8HK=-jwzUTSOhJqk*2?>06q3jsP*5*N7iX)7_}UtcwOkhLkR8Kr7TVKZi6 z-bq+|u(Q6V+m^Y?k63DkMoQx6=dA$?o7qGMsAx><5Z`3!ECMTFb;}67RjdfbE zB2d`vPk`gXCmEjU6(7hs8|b_!by+o|z|)3K8gUhMU ze~$gh-UtOx%e!2Og?7M6ePe_JO!Pc)+EQ5zT8!O1zO8H{{0@+BvqCk*ia3NIH-)%Z zg6;5}4QFGT;lpjfRXPc^x=JBIK|>g4l1TSu#-}@%rzh@TyHGXda{1Q>ff7@FYp>IY zkV$rp5ToKJwesBb|bA!N}p zF_1WJvZ!zGx@N6{>GvXkXVT+gv~~tY!esm?_TXTew*t)6&#%u+1_dZgEN7Rr&u04F z=5cZ)`C>L56!6(Lzy;X4K;md(J`9k-wVxP@ zGA(tmuig)akdK)x7dJBCoqBzD-+J66XW+lMN3`8eouX{L6~NsF6d4v~@mf`w#;2## zaNuS$lkrY+6we{;@FGKj3&p!{P!RG`)8a9chC$=w+n)mSnia3_uE`!DZyYlF@y)J} ze^y81)RBy0l0dc~@khGMMZl`wv4Jxl7`6Ot7sIgq;$&m0mS(tjy1rfac&dc;KGCzj zZFMunme@N+iQt*x(L z4jAA&7ETd?x*1t~%t8WO0RyqOkC|gwv1^>wlJ?K5EFwbfoq(%CE>7nhHmtYCi> z40pwm91-ju&z{X!K2B%+87)mb%`^zmVy9A}S9TWW)&?2l4a>jCA`U_y63GeP{p>9$ zf}S@FhT^yrT_8y!PMLz#gsG8QSnm39(j5NAua(dbWLB<#G~xK*$SECcy>AXDT`2pb zj$2u(EZe#v8l>#7VHYyTyaFq_qaROw?jY!F;#eD9shl7FPS}@`*I~8Evz+S;=UW~9 z?m67T#8SYw`r4ZXyE6%Jj z>!*>W80qkCsMsRGYO$?}uhKHmSA0wT)&@Vy8kV6hMp|)t(r*;qEP8rbYZkYS+qEIe zWuaJcQp9c2ztqt8a+U`x4vnFV5AJMdg7xi-faO=uHN~LZ)U!4)=*kgOuu6yqgqI~) zp&$lQ^*xPo^EWzplFj^U;mFwcpFFOvy_$W3b&f@rYe^s#EZey-Scref>EP$D54cP< zKRi$=bGg#ebd_<=z{%`cZVqm*4!Hfbuq|om=H>U5`#Mn{NkJ^lgTb|yi3+3-4Ge^* z$qw@YB#3OQfZ-dz#33_`Dm`ft8KtnXy*q$CI38plSl3yfYf-Arbl}94dcmL-`N*c>$Lg#H3_fAE+tGK zu>)pLwD}A3gR0lH)i-NMo2oJh5|PKA2Ncv+c4t}c?4y7Y6;eIz%oEA+R*_{L}}ut-?n z)}|Df$~$jZcz$WgNe;|@KJ0k=(4<$wthPE+BKW z@SYieF0roNWZW66jn8ql3-|#;bka4pj}fqbdpMRtVollZOnr~lvHJF)Q!%=JViw=% z;(WY+=hHE!@lT%{w6 zTq3OG=-}-}Mi=9)$P`UUFD3%-;aKz$7fx`cDbXF4%8YisdPxpVsJ!5@FdAXJufjToO&W25VQnMie_uYMKf z0?|3$nrGpyVk;M&HK)fTfSWi;zEI7u^5DNQ2TfF8-bno3nm5oqtJI7d9{^HI9t@>l2m2Q#~Puq?r{r%+735Z=lfaCU~s{#W%A-@N79 zQgJOa2E1dQ>wvl+^9Gvk$N3K*$Uo|nBiH?dVj%Ak0A0?dd%tM|V_~=oNpXOwBsGmP zl{Yu;Uu1|;6d?E^8Ty&Zx$Z%Q`W10{k8Cmu_+sf?zgG3VSV!f!>OlcWqd6eYYYH2kkcik^_9gznu2zeH8VgnRdkYn3d2)Hk%x%V2YgT@^}v96C(0K0{A zGa!HZN}A^)4nw89m^b@?H=Otza2Yiqnkg0Bt0L(hn2+ltNovJhjeSa$Kd^$4;6;<< zECe-d1F{ULDNaoN<~Ne6b!~p*iNQsA09;zHN0|#7^Ck<4W)Vx}@9GFeSal*}k(|I{ zuB6pbiCMLtPcH@OuCnZmB!`TQf6qQ2KZ+MBd}({|HCo&dncGgLL__PCZ)wpmvI8c9 zKwURm?9_4X+w1M=fztcB>1ulCxuS>=dZlA^>df(U)PJH31l%Bx!g0oE3@F$(ZpZsL zmV(BQk{*G+#k-?LCN>fBsykiCMEdn@c=*W~Q07$hNh3o4VknI3)IFy%BZ?OP08I4X z5!-)_MEE8Flu=1N1;b4J)93;g#I;|4qYJ>q|EBoA@G4p$OMf|eCmWRfx6J>jFyb|Y z>TB!2kohm={VxzMu!B10F%BSJV~Aoy=1RYY&7ra}2C-r*S$*6zzE^N+!R*v>1DWAU zr&Vt>SUmn}Z(1C>E@vbWZUI{CrOtL<>zy|!_O{H+D(7eU`*Ffh9+3i|H=-z91lyX& zCCmMZy=_)2dNtHud8CEO+xi|u27}3|=H9*St+M#nng8|G@aPvJ-n{*=p*A}&HHpUP zYo|V1vxTt!Um%w$ae9LPCs5^1aL?Ia4Nu$DPNIjfrkC>0eO#=^h&;`nue>;houpI>D0ew zIto~M%~JYDTkAn92_4ytdO5JB;OLN`6{DdIDN^SI2E8 zrKo)ar~l2{H}@^}BK}zFrJVqt#eKGRP%!Cg}tR#wk-%am;LNznyJB3ZbH+ zVq#@Y>{=9o5=8)m5)!hUP8p^M(;vhBrQ?_M0z7#JWeIdj>hb!H2y*?eL=Nen6<-b4 zl2#>+gzp#Y4`g55Za4Uq#Qw3s3WWJ0iSE144Q%ISyBD#ImzsXptfDp5UQrvNOh5)R zMI}g?FFg_DG+>dNYFpGtd6-d_M)U4N4$?MRD`Bx(1~sZ(8jZM~TLGj53Kab+>pg&HNKy?Qj?aQp zRJ5|Lvg(ttuZFX*4Ke;XkgaGVf`r9!${Zl1{-EyPeCU5c!~fl|{{IQI(<5a9XUzB9 zM@-OV}hl`=2=j4+?wfeT&GvsIwZrjR0kx<`E2Y)V|<;@(~ ziwv!K0cMr0uRBkPXFtm3q(Q;mBCCA{hF;jSnQp)W-PWo<3&4r?Ba@<6%+<8fdq+ye zzt0MUwO7Zb35xH-G+xCLKf649`6UJlT9BKwBw4#XeNXL2jSPg_GvIAQff3J+TDP~B z$98VzHxwxCEGWf1z6{#3vvwn3$o&-2UlRVpyWoQ(qa0U^?v zU8w(jp71{q)&JYn%yS<%*WBMWdG<^K+)ej!zondt@Iu4z(e+Qd#1n|0PIhpu4##Sg z6M%OM1!{8AjIby(VPbEe`zX4pEK6A$&`G};YI$7d**0>&xaLJW48;!@*xE>R-ki3- zYijzUrly9fWa7)?*c9l+>)dd58-9MHccrtu=tHd^$gh2Ud}=itZ4qB?8AD4qlKr6_ z6t}>Z+?0`lbg0aZ>3+4Vp>nRTeY5oI7ry6yDQdWGL~3ER*wDOk+PpgPc9|;MEZK4@9|vngRW#(E#XYNOQ0@-H9b>osMf+lN;oMRIGmY z3p}}xCPWe|LqWh;p{Iud3Yt#Q)g=_5oq{wX=Nu=^ett!y!OtXXkfW3)hn=53bZwa2y4V zOF66-VmA{F*F0xoDKUu%}zFS606iaOr4^jR_r zTX_m)uVx3_dfysZdmre(UtS(t*n?;_Wy!!*HNL-MinW@0pm3pXCP1Oqt3`eCXe|3+ zdIou>a@qC@*pxLY>HC|4c5-rZz+$keGgC`T%Nv(m;Q7~$k&%(o@A=QneN0+CBi7K) z0VnkvXL=Q4`7*q%^`_vGl~%Kjt6NRMbk<;70n}TU8Y&}`My9R&@OV5|_>QB=2nE_| zYfI?CNRd=gV=3RPd-x6ZSSb?9wHsEAM}f(9hjbV-S2%#cA4mb!bG^0)kgl01xv}>Y z5-fLfGK*??EFTd-n0`-6OJfr*-&g%z^P-V~wXxCgiiW1<){wq?RhQrN;&Vv%$Nc8? zRF=zhu!C+*cBUqU3q`ug0jr&S+=5j5a_r1*Ci@t2c+Hp1YYDNHSrj^CGN4m}5 z^ir!pVz%?Q#r0M9=V@5y%dE(C|@6S|dRFY9vuV8O$O9sRxC52>Uu%oBT zz;Pt4n`l=XqO2Xx6R@PsyNmM)zBme}_4M>S`-`UcErs(`fxkA`j`y!Ep}?WRfuL#7 z>KTXp-s%TOL(nr2gk?9jVXkS?^uDus;;j7U9r{!qvzq_F`H6vG&@bh_r$%W_sNei88`RM-mPD7 zT2^*)GhZuiY?m((A3oJT;yEKkr(xOfSiIJ5Lh>}|iIDbuO8w|;gUnK!kc2-w)t#_0 z(*522uHEe@fUtaARejs!nJUxry8ggLPw}DUF~_dUz{>A{sQ0<=Ic=Ir%*J+VdT%hp zJ3ov~_(6=!FP_xo8n_^cP@#GFbjD3jYCi3>rpT-(KUk)>lf1w9AG)J`POFH42bF_d z>&w{EqyCu^rB$J|;IOHzXuYVKz1mHCbmImOnW?MPQB3UDo#rYx)j7B~RuR}7-4Z8qj4Rp z|1Gp4GtMBq{&EOFt*jP|+|2bALfzemyG+Qk!oCyR#;@#XYPMRZlPcK#W<+!`8JQ8T|pKyG(I>ax=_hGJozocCh?RSwp z+g;3R5%Sd9!A!~M;?ALL4Asy<%k8L|wx4^Vtb=Vp&+gvbG+aJrw2>%B=-o|eTB&@s z6ObKQ5i9|c-`}{iVBCS0N+aH;u$u-GGdtIB)r+K7mM%0@Z2*!zXy zV+K!&B4*Jp0{{#A-GNf)8i z*>VNqvESWGD9uFsvf7QRTZe=R$?2v6+rv5q9v*T@L&^DEv?fBfj-s(jcG{b}KqN>P zuWz1f=x`Uw{YZX-hRyfl5Bs&drBaF2nww_|*^_H7j=zrjgyPX$Y%3vo%DB)^#MrCd zi3qMG>OTxr(O?vWb@uv|=KP5Cu4hOmiS|mj^4DNpPw5*gGWucvC|FKjzm?}j+;7Vx zYSP6vbbK{-KTXvhf}$i2<;!vpA-c_u^*VrSgt+_fHM z@Zc}$8Evv^VM{1)BG%W|BupVUu0sLWhGo6tEmADzP*ksu&aYZnY<@>t@9RsTtycSr z%#&uqA>i*f`@ZwDaqTijt}9unJu8^va2^JHG7MDQwV3T_uh+ZF$t3w)KwtmWWbzO`vJj#O2%O$;FAA6A(aQ1AKE~zcW>fy?W2d3Sbid{9ex5KZsP{k&ig*RPC0ZS-Evoc1V4GW!$~(? z6~0N1$CCu|owyXp?c3r9nZ;M(FYdcklOx|Kz!!>(ugTk2^YS+N?FKDe^2UU{zfxZT z0HsJ`;KLNvUmt9|H)NfEmQ$f5-|B)|6gDGG4UCna7!n-r9B*&6!JUPL*_2oSS3+=b zaMk1CtNvqqGTqwSdj;^oz6)5dkD{0I4)>90z2{t<_ZBEn9|v>$50@2G>ns9$e!8zS zrM8EmYrGFuXxkNz6MJu*qNSlhzPzG>Q%HyogTWM)l=LoJl@KbCEtA6n=&NdK(~yn{ z(X?Q3wqwi-mR-8=QB#Gajh@Dr6<@y0*XG--W17jd?qpg$;kBp|dqMHiE0Y@h=Btq*dCb<%Q6;p z3~qMlkq;l}Hms+YUE%s zhLhghrY|p%0^R2I+x&pcf&KK##Lu7D!?Vk7gGV;rehbuK2M-C;J2Fe34+6^ZThjV| zxXNS@SZVr{KcR!sSO>lt2AjA7e2?i*`$hGCCLYy4a4o* zWH!Pj{dd{b(>|Csfe2(m6PE4CItMR2UT}4CYUxy(oooen zvaZ)c?H{z>#w8>KB_*9B%&t0>flCWlQm>f;cW@JC8FIjJL1>zgeROf$!1Mux%wwnM zm1RUta}-F$-+uo5*~HgRMsRJKQ=T{=<=nH?*_@8CZ-2Vgab%NM))~p<0M3U z`*L|6GgV7^qOEmIFilT}GWgZd+K=P`g4q0lxmy12cw1M;iBNjOXNOLM))<_NNV$mAEtR|5yN;x%mI z)1FEgjL$-BuZiGRsuI{*S~e+EyEf5;89wW5iWK-- z|NP3ix;Z}H)_g}2P6`Op)V#QE6Z1PATmN%;cT2kK{mZ#7<5bzG_dO}WuWsK)Ez6St zO+j4i_>=vusMi*HcIMbc>x&deL#u}ngsk`Bk&mLboXf$g+`#>qm~IQhu)V!!{$*86 z{p^JJ71o#wyXa^TfkW#zGHWjg-Vp}?lF8HW0^sDShF`(r{BT-tCFYu*lQOZed_7&c z$4C1M9r4`Y3rO&{qqDO)W|Qq($weXM1<~FPIU@eP0sk4-gZ}6P3N9-PV6?xI8L;&g zT=MUmez_(mqqlxs!7^6sqj;5-fYV3&5O@>71w0lTh~r+Lu4kSCFOy&>ZqxG+3;h;bqqi>+@;ioZhRHA6vL}zs~qQ^1!dIaRMHgi zSKQs*0dJxGty)B};o(OVNQw^5(gn)27izgzZ+g|$ptov|s~93mPP)~j+f|o^tT8jP zVik>~bRe=UOj!;xr|Zha!1ito?toz9cKU8W-Sgv&-Z*g=rg8E*`XFDi9s4l9bpv5( ziDqQZ8^=mdE%(~&t_}lr6e6fnRgECmIch&>Mu2fNILMxW3vXs;F`Bo?Ro zo*g(*eSKQ>sO&_|?NY$o0B{CTGtb#nNY5e90IuQ^DwA&6{gN!=s|x9}cL5H`4XriT zZ;k%K7qEtw6|8}qZz;w)GZb?y;_3HXp~M?uZ;8*gYcJn=3BiVy7%foLWi|B2z~gkD zOglQ;0!?(k)S!r9^ZY(g1>Y4DJ-(XzqFYOrY9VY=IIjEi`}KxD`TU?;pNpLU;IsZO z>kaF}5APPsL)Gr=$?w^C9GnH3+=xDAvPTSiHN2Ky9h0bbyD{4l0ZYBwY{5{QrS zyR++MTCD17T`@WLX-&=tRr)IpKi8nvUU)RF)77v#h&^WB*nbAQ*c%wq8z%VfSK`CO zvj+XT+{WEglL5ZsjhO8d{Xac}?k18h7u|m) UPF_KF`c)$J+uF(>m8^pP1KpDA=Kufz literal 7842 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 a_r`MRTw_A+G4S6rATO;fmHW)#(|-V%Z|y+< From 63c4d8cb46575d8f4f9181125c2c420f082cdd27 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 10 Dec 2018 16:17:57 -0500 Subject: [PATCH 094/105] remove old scissor sprites --- icons/obj/surgery.dmi | Bin 60080 -> 57340 bytes icons/obj/surgical_scissors.dmi | Bin 9322 -> 7064 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 5ff7e0ab925a9f0e1d71e6fc25bd21e404d010e6..3ee3103cdd5d20d41e2eb756201d4da78a40c9e3 100644 GIT binary patch delta 14549 zcmZ{L1z1$wxAzPs9U@X9r6Q7wgwjY#8+0Qe4I&M52Bf4zr8}g%V?a{r5b5q5YKS4` zJNUl;d%y2K_j{f_u+Ofu_S$Q&^;>)GQ#y)$(Tp8QO)7zp2Z2Bybxp29AUL{F_a6e| zY2<@AGGz6HtX7<5icwe!MVY|dr{tjz@CFpQhESV4H+YjxQGW7?;=(Y z*^VWJ6St%L0z1512AyqU^vezUEV#CE!n(wnUoF3jZ6pd-8ZbYz6Dz19`^Bx@Z{exR zzz8(sXtKP&VcJdU&0sKK!B0;YqYsq7)ZF+@{~VGsD0$2>Xw3DZ$w?#2YIf_9)4Ax& zj0Z2aelIz@IFk-NN%jzF|55S2d8OZ9ULA*{oS#2w zbC2#mt`feJ_Sr!aMNGxX*MhEKIGx+_6EnSeI&vLq5eM@mw=rz(l-BYMpbIn~oA)XrU+e;)Nyo#Gf2UdrG)iQkJ4~*WhGYXoQDxZ-B zT;g&vNtgeeC5+g-0RD_z_n6_AK3+tU^BuS%@!e-zO$EumY8vXha&F5?>RlPX1T>aBK`)t?i{q2IO86_t5(#HcYZ?sw{g0&m8O0&TlE|) zGuMZIX&ilFPa|~Dw&WiPgrFJPt~yJH>qXh0Im-!2t5(-Z0)Pld&5m?Pp9o`RQAxa0 za=}qL6gg#}oGp-qufN)tEm#^R(CVwvHbYRgK+v(sa>0$-Thch^*hDmN`~#N4e`NUssS5MAj_vBeYo<{yGO zQNMhLnS~h3zi}Q|t)g1O?X9qlTDLXC%j24zKM4S-UT4RVB3^xK80h}wHgsI4YrUc# z$ND=!)4Ez3P038(ra&C&FbrQXYJFj8Ir`u?la=~DJfcG)mHLx?k+-$CS0$qAIB!Ez zLGqKwa`fP5`1XUZ@n4mj)|MDIO*@VJLV0%@98a`dbYit z1Uu>7-n}@kFRr@*G4R@#5ji^=Ic+Q^b)I?zNVin9Jzl-KaHo5=5hJz{gNR3$G+)&x zs$}hmZ^%_6Y6hCkrq1nlSiEgfnUMKx)Ygg^SCWhHoIuUS?E)&51_swTXKJyMg0>R` z#=DLzv_nQ_{S(`jNLbR5Lh65#c=VA!M^`vi4dxQ*W_jr`?LDS%Ku=Jc0{Gxa+_pH( zzqL@4U;e7hqvW?wUdeZ#G1~$r?_sw8q=<*!>1nmnq?yoN)r-|stYR+~x7|M1T3h*| zF-?uQ<0I3Eg($X^J&%G1eZEk}{ms8ciM}{O^$g zwo64BLzH&pk2DvK2b4fTh7$JK~iIX0_i&vOm_-0!Kb_X(OR+ z4(H$53d*H21^En#V!0fxtJi2|GXKl`e+QO1m7AK{Z$+cV4YWV|`}+rA&RPC#VS6N~ zI&~jQ;^NZ_DC8vh93QvBJo7zmcd)nRjW@S_a~VF6+9uI=Eg?Fd?3y zXU9csV`;>f?r!v{q?OcAuFPShVcw$TiJ@-QcLahx^l;)~hW2dV#wQ~$`dKA*AKepi z#zuPxQ;;w{7tj{;MlehX8U$oqzB&jJWCr|uENDOMmrR$+ZO6y@1y*Y^*8r2YL`39O zwfchC86p^nS_;{GgewG+jA0sRR#VesY0jI{V7@}}0JIL-f{z|K=&Dl~TpgzFPtx1F zT~a{c>(!Zyx>Qs!%;~?9f!IgSIy9W3eKI{Vb7Wf*5ltxa!fN*VExs#&!?Z?drJkOG zAu%)-{O9kR>Xc(dqv)0)IuLtMSx%foF zH^b(`d<>{zce801rb@Y8sUT@D+b&ll04C|yGtHa5XRaKr7KT>{SNo2jBbHEko>swD z?}Jk?f7Im3;ewp>mxJvSiD>EsH(#yr3R?IiZ@JE>RRs z81t>f%QM!?pF^6g)WaRU>P-}DDm5>63TM}6cdt&sd@EQ4(i#2QG(96{Zft6!n%J`> zP)zm8PpObbfO-o(MVb8e;ntKcnWR!`-lu$F6SUH}F4?d1JIQbHhkB-WwnOFT;ZifDgacV&XB3`*X{X_&Z+a70lO)7Zi?=}zK+esCUTwQ zAG03v0(V2#3#FdnR@A%kfHk9>gqiszL9H@f54Lg!`0DRLj|IQ80#Z48`29zLBsG%n zC%#u@-H_@LBc``=62>dJjg$fTGCr3SK6IZTVROF=Grghl+hz`@#SEyQuwdoy1>^C;VLH4`^#Z-M_=zLZ``o`@C#@gqaEl}6Xr@GX`)%2M>VQ!oBWf-pCk zQAKgo;LZ|D{`hsTOB~$(DxZI;*J4j@mM!sAZr^0P2Pl}oP)a2zuqE7%oK=;_8Z75o z?8o?h^FG+e?}U>;vla)i14$QpQ4wi3iB8v(4FbS==yD8WnWHG`n|sd0!oN84~vm&OJRKe2t2&0?gJ=RP)Fr zuEgSi^Z^Vl@8&tRLNnk85P$UHe}ub1)RgG}%B!>mRd)wcW9k-|p({t4XS&!dSxkRA zr9Ek}O1$~|aS&G4R3ZcE4aj_VuaZ~Ux^fMmz1E-H_UoH5sDxx*QRKEQz(?%5`a-B1 zE=OLS4|B9Fb(?`ktW6s@^>9MXd9U38OjzA8eSZYc55L!3W#bn#)2??yGS|0uwwoo^ zHu703w_l{P;9B16K4O~>{)wu}ElMZ*v~nQ_E#5mh-Cu%24%Y_c+})pXKTn3ha~egw zu#J8P-O{RVia0)YY47MbyWb*CUfpA75z*$*z{jR{6w&+T4(Et5IzEQ2p(^AEPyl#g zR|?`!P@g(<1tA`-+|^bOB#^h#O7OetMv8d5M^l7nHb+0MNBJJ%B?HtyQZUS%7s=ng z1qdS>DP3pX*{;q8fW?fF&&;=p5)KY{t)vNM!{mR&vZ+ELvf+0KBpzXzq42C+C-)3t z_I@E(SB0E{3^}RK+{<+vKvn=ZmexRH{#yK2DB|>y`mFzVLBz19>|G*59ocF8c~#+1 zBi!!xHksolEjI2M=tGTh$N)eC=8gIqAcAMH z;Ui+qClEZO?Vpo1n_(KWLTX4`==3VnP6}U8>KWz*WFC}4w@cL6(C^>(4Bss-E*dGT z1c2b|=X8zg)d6-(2oEBNEfq$WIyU;td+;H$*7$##`%FCMJ4Z3%;~P0`M?F0~Gm|m^ zI!l~J9FxUZhyIba9nd1bT@<)%cVoPkf>Sh-4KzSmMBIXLmVS_vC1XDV5!ZSu%4h@> zq9l)&MPUDVh&OT;fd!BKQxbdr#c^`Sj%aU$OM?T1hr5U^ZZ8APK%_V3`~&0DkdWXv z40}VFax(^_|BYC%{bzuKf!^4fV(5{{xC1?UlLIPm$^3_BqK<76o_I9+jYaLN9mPXd zkCqdgHrYBkFBg$eD{Ns5#@!^m^w}@ZG4lFNvgkt|y=N|kwU+^!Cf1pb~1_5G@e+(cHgCIcrwA}4DAb`(tbGDQhJn>gf zWu!O@l-e4C=I~sG+1pd_BtBsvvn^@mt5&aF%eh~l7}+=C@{4*t7!&z?aXK<{=aBk_ ziF=Ywzu@w!(@Pf>n~PVJbp+dXI~-`Gn2fuzT-@P13sOIbfA2*lt?qoKKMtbOG?X4qiBK1_;fAcw;yuUQ)JXx(jHlBxE^c(H z8tT3A1NBw?U8etneB!{(JP`UkopkdzrDvhy3UAu1VEQDvqw)TD<^RFLWPF$M_wIzM z3RN<{8d@B;Hg7q-dY>^B9()ly7nBnF-{ku;VafdijBEc37)z2bg#Ld}G4Q{`;{Sn) z1Bhv^u`{{fk4Px%U!=@S^W;CcmeR}x8^4vFjEC!H>V%%LPQ>hWc4Vy&8zS;vYG5&{ zSd|iRgw5sDPA~(@JR1ID?F!NQjgl zTdQL}@783~=i~S>w?Z#AGg48s8zKy9jL&;rj7}pWJb1MGc{H@C>jF(PLt&KRq>z?c zvVJW5Y5cS7RB;B{KRBVGA+BTMODzPR5n0WL6>tY}*t%{}iWJqB3kyAc1Cclsv7G27>kozlvJb)L z&w%=@IdUN_=VWcg;%-$+*iCSJ-OJ)qQPjjXL89E$|noqw$El zWP(e>Zk#Xe(`d9W=%S?+zEJ}4qM$dd-QiMxKE97iN=`1&1}i{AV{v?M;Z$EckGU)1 zsBcuWl^X%l-C1nsxs-D0+y`kfh`4k91pTv&C-W@iF$m`=uHFId-&t72sJ`7Qut7k6 zu7-qZ*6?>Pb^FZqpV4=vfzx}!MSk|90KpFhIjR*+X?BP!Az*0JSij>ZQheuhC#iXV zZZJuFhUYSk#prqqh#p4o4IV#QK2~k8HHK!~t}zAm>I{aNnmhHr{0>|zj!$tsGP5Q_ zSkWfaVL%yB^aCe#y|1u}pJ)K!CN6v5yqt^_KA|8q?~@(6Vm@#jqPJfIz!nLc;uUpL zZf=%Q_!8mml@K?Y;XrNV?|U1G1p}1S)Uo53=jWh`o~gK50fk&}gapmgB!C;^vm(*$ zUk4V?W|N@N?50~4?wq#2a?D^38b?%LO@OFED5~yfT%kQOYRuwLYcg87XZkEY5Y|Fb z3M!e;AhKIZe36=d5wiw`aEQ6zB~YD#gJAGNv(v8aikaR_=*zUz$W16DUn&3dL?oYF zZY`RHFm~YPHG&LCdgdF|mEmy4xo|y3CV(jjR>UdlqkcjA`Bz_`3@C@dtJkl8^!lVk zBI?k@Vwdgup)-V1Up5|s8e(zSm`|Wg!>Ob#ZMB`OSN=NYMN4H#E*Y zN<6<h{I*ICUoS+(s>a z4+{Jf(nY6)-TOE;n%G``JO#3xiFBF!E!RtnS#I* zb`l+c-H#jwT(j4-lr}$O$W**Q=#KN`2P^s=7&~1GNamSko1B%_C1l^|`?GeoQA6a{ zx>Df>wl+3vCG39L0p=d+i7B3fH6KHM?mvJ)R)H;Dc@+gHq)nNIDV_{cyRp0!keDVv zvi4fhT+h$_@@x~w|y&ncR5 z71&upGY4#8pW?#5Lq!;A0ff}doo8rO9fyj< zrHgOYd#*?ld9SfIY^M3m5afB`PWQz<`H+*enm#vC^xSRzWbU6r;BRRs{v%xWoB_W~ z57r0wys<$!((pPEDK~UiOZmAin64@T^%@y$n5^VHw!Wfbf$ z8b5%*lSuj6{2s#)wyXxVw$F=GD@WBR+qXiRRoh5R>6J$?tNz(;CvE=qn};aT-jDl- zC;?-o=JXMF;PII>vC5Iq(9m#j_&1GvsX>yc{eBfz6oY+p;9-|o%b6)-Tt@Rr8=3kX z3yJLJNpl#sLqMwin|s?f-J#YGkn|zS8!yzn?F91&b~=~6O&tZyI{7`U579%eSJ-XG zcAce7iONI3g5kig7rAIF*^p+|XjOKP5IB1u6-T=Tutoe1A#zkF%yRZ6qXs{2Sg%aV zt2(^qp;n8lWbg)`ag{RE=JlI3BCd1DGH$)L?;gF2>uhnda8zt6Phx5R>+gH*mp$!W z2IKF3&iEL@a73KjL}|(nfK0j;Wj3B zp#%iBa!S?@Em;`POqO20&IuF)Esi)1itiq#(Eh{L*}BfuAmSGpga%e;78Hf9=Fmsi z4!`qO5>RT!T$HGN_S*Egq6L71{>!2bROkN^T=Zbo|2=fFbh2L&VDUW%%n6RhN^UZEm?0{it4Pb|idx z%xUCx-RoC*jHOUYo#S--T9To%Up~bz$rBcO{J8oO+3jYl26!obS23LfHMZ?jth=Dl zqvlf1g|6iwrT)jA%We#-Olu0=er++joB+;2lK0eD$2xz54GQ5zwfQi^vjM~$P9#DS z4S%-A2q6qsl%{#-!XlH3eB_HXk?MP&C({Fo{cO4=q&i`&Q0BpJZHLy=r0}Aqw31ci z(!r}$x})1QF+rmEAw#p`T8Q0uKNgI+dt@;YNQGGlXyRwehP8r=weoR!p)JsH!Yr2d zk4#&xdgdTXJ;4U1f~*64kDLcBs13{nu`m2Jk+*0z9cC&UZ2gEk z``{uxzwMHJ#L2E9xU?!_7W-|XH$iae!Pb=L{PuR|np|SjpHGhuovZu8D{PB*w4*6! zLK7=0=q;wU?accU9f|7c3GL;T1MWxbF8|KAO#Iy z#toU6hm87nWNA~xn1B6VW(!G??a_TK&N_cP{}gB36CB!RpYsrv-Ob4)O=$Ijh4eY+WXDlWi+JeEtG%Ip0l4(!EG|Wp!8-l%xy#iF0Sw)ZZ0vS`ks1K`mLqrL2G(uhut3B z_Ue2v{n2xRKNc;fu_ZP`t4a`07W>9JYifcD1KnEP;s}hQVgu@*D|Pn+ zct%P(Nk^!mH5R6!gLczPWCS}4>mWbY3p7Qp>N*jh7G%0tGwJQ7!Ow{uiM9Pq`MaVT zFy!rtm!Wdt)7@3&ItFl6(q19%#+ajcRUpfn-vX91wYwcx&^G!o&&QS;X+1NQ1mHQi zBtzv2|1ck82+e*J_w>jMlg|f zO-G|fYd)e0?@PDPJ;ROhi`U{iJnVaP^zjAb9cA?D79|b{lM#suQ!qax$+qYfj7UxrrD>)vf<#QVmrahwBS8x+WY3pP4Bt_fc&!QgaR|KMv}0m z8y<84fzaPlkd}Otc)wab_YpV62WV-aI8Vc)*FXK=HGUhHr7a#H)&!4yjJ}+ii1Jp< zo=w#8-pq*yaq0=atsARXsr#7N!ZjxK@OZAHqeJZN@N^@wM3uZf8_Eb>>Ke`2AL0}! z_Ci&QR@q`lW@-c7`x4(tDn+ZDeZ%389|>+#^m#CS%%UXi61y|WOMdN1^o6!xqaz$i zKQ?eGs0r%n;b1sN)x$Yx-jm{_96i+?{sQi9RxFKF(Mhf%e7Bt2qn%$zzHH?+nU6BK zj*v~jDcZB)6A$1=zx*h078G)DKYVO-Hwe|!vsWks^25oF44&~6^uOKgPh@<1d9m@q zvFZLZb!V@%lWuoy=VBHhTa1>M#l*;xw}Kb~VomT=->of?xk!yqe<4Hl-(W+lQE18R zgTJm(ki-8c*6_bMRoC%{|9DkFilHf=JU8|YVuk*RM=ai4YA}4x``86PzElx(xTGa+ z5v>?B?;%#B5CV;Ld#(ojUVW_iCJy@;*$&ey`tv?JJPIrreW?;ryAPfy{Y$?abLeo< zT=%RJ5_K6@T>c2ApdT_`ULsfSQ=?ky?(pI!Aoig;92gL{>i;FzxuOwT+1a3MUnA_W zXuZ)Iqh0YD2g~z#Si;X_yYjtU))vQS?K>p53I-ZByQrfMKk@4*MvHZ+EjXvSWp6f? zY1;hOPi4Y4RnMWN_v9gj%sU80e)+OIR_?JL$Qt`f7s~YL+6Q7|gv@Vm;y|>bqoELh zHdfcnsiRl3VP>H$Dzv8vaxVt&y+u3dc5GGfv_zYbycb<#7fzZX1*MrOU>HvUc*^|ejXj%>?K<8udHA3`7FIg-n@IH7(B3aP`sV({1wB+kKo>Eu9RK0@z~_=3 z8qJCkTb(r3`xdJlpku|lr2ilnM9t1k*Dh)_K~H`N;Uvz%Do0xaJj${7Ct!F^t4jF@ zG$i*f`|aM1GLR`Z&v~)4Mp!-2`hye~>@QY%$51rFNvNS+{b#KsRUP%~UKvx3I!UAY z#CJjrrw->q?UPrlWLD-GMNKoN zb;ZTp?Ok1-0B4NAhb)mDv_BDcIL=uCquu)|j4VZVQd;5u;sPs=mAP_!#v56?1g8UR z0pngTl6Q?X-78{MD8Dbk?^dmumhNwHd@E3RNz6|5GdxdxNTFpU%|D;)l+oKbtL6$H z?ouV6WnX-?X#G7H{_*i$K6B!PganAZY~ecvAE9yOaUhtUI%ugY!ZlUE#IJU@iQ$u7 zbJgS+l^{2{sj2A?d+UxcBH!ocjb~VJzo-}}WGyhXy?02!J%wK;!2q#K(0IIAaBxsF z=XhgpUtC61i6#UVMlVWdIHlj*WH_}WPyd)@dFL=EP>^cYs0XJ$MFVY~iMsMM^{bG( z_#tdR4|Ggv_#MRuV@>l+UI_7N_e!5Vu@K=TY~v9hri+OBrlyD_o{$k&&)FCVQM{Z~E%0V| zY~mMqwpfGY>Ghh}anXy74P>ptwDN{<V@P{MP2}>L(w-FKkAyR$Oey(j`~kd>L{g%&?+b>m}qLoCQdxO zoI&!60LMH|0i9xm@?9g074s3W+Ki5?^ES^L5%_{CeYeQ&iUg%<4}>(AlaW|8d@%l8 zQSjPXEyElUr!e2=n{f7|Rq0*(_s!yk*K-L*#fVgAFQ0k)%P50L#MvcqANcr=JqKtY zuMs(*^ctN0Y}yqLjpQD*@hUA_?8IIC6~pFuu&h9K=&(00>8DHh0Tjsg$EKY|7pMCN zrC?ZHoSN@)l2x5MckGen~Giw(2! z%W7V`Ui|hh0$|rrv>e6&r|_TDwleuG1^ z;Xul+-O)!^*7E=sA4aTM9~h|7C??X9ie1K7$?MPZi;Da!N>pKh$68lJ`AN(J<<^A& zyx)KRn2e?$o-TLV|C$n?9)v5zJb*%yyuF2*4wvL6L|~pepvBeMX^tX>>Y0a-XofKm zNz|tuQUg~iB2|*VKr?06$)V*$ZUY4n8aTS}l6Y7o?y1gV3Bh0iJp_a zvduyFLXM;dke2#Z%T{nzmrkfVmo!yHv+Gm7p-+NV&D|RvBjVC}t~{5TKFRr6s9^A3 ze^(*#pjU@X*9XsMKD46#SoNNEezWl_GO#=P%bjv|hZI6PZ;KjiiFL+X78VZt?=7Y( zAHSFlKY^nS1Krkq2zzn9%whmIJGI`hpeCTd(y$oZDuZ>08ls3bJL%~#|MlrIXoy@m zZVI+uXmj2^%lXvVDVrqXepA7eZBg*hWr2-x8LC^2t;K@X5`wAdc*

    hD%UiRG;t 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 AqW}N^ delta 17321 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 diff --git a/icons/obj/surgical_scissors.dmi b/icons/obj/surgical_scissors.dmi index 3aaeef512d0f6acae8fdab5b33a1f84fa621bb71..16e92165059b88c821c54a683f7ab3cb40775bf6 100644 GIT binary patch literal 7064 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 UPF_KF`c)$J+uF(>m8^pP1KpDA=Kufz From 69c6ee1bb15b554f5c3f9058f2b22c4537dce87f Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 10 Dec 2018 16:16:34 -0500 Subject: [PATCH 095/105] finally got around to making the handles of the scissors different colours programatically. added the sprites both in surgery.dmi and surgical_scissors.dmi --- code/obj/item/surgery_tools.dm | 14 +++++++++++--- icons/obj/surgery.dmi | Bin 58820 -> 60080 bytes icons/obj/surgical_scissors.dmi | Bin 7842 -> 9322 bytes 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/code/obj/item/surgery_tools.dm b/code/obj/item/surgery_tools.dm index 984373a0..f8e99487 100644 --- a/code/obj/item/surgery_tools.dm +++ b/code/obj/item/surgery_tools.dm @@ -877,16 +877,24 @@ SURGICAL SCISSORS throw_range = 5 var/mob/Poisoner = null module_research = list("tools" = 3, "medicine" = 3, "weapons" = 0.25) + var/image/handle = null New() ..() src.create_reagents(5) + icon_state = "surgical-scissors-metal" + handle = image('icons/obj/surgery.dmi', "") if (prob(1) && prob(10)) // 1:1000 chance - icon_state = "surgical_scissors-" + handle.icon_state = "surgical-scissors-handle-c" desc = "Used for precisely cutting up people in surgery. I guess you could use them on paper too... There's something off about this pair." - else - icon_state = pick("surgical_scissors-r", "surgical_scissors-g", "surgical_scissors-b", "surgical_scissors-v", "surgical_scissors-dr", "surgical_scissors-g", "surgical_scissors-gr", "surgical_scissors-gf", "surgical_scissors-c", "surgical_scissors-pi", "surgical_scissors-y") + handle.icon_state = "surgical-scissors-handle" + handle.color = "#[random_hex(6)]" + + src.overlays += handle + + disposing() + handle = null attack(mob/living/carbon/M as mob, mob/user as mob) diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index b51da858b3d872f72d5bc7f46711a5185e93d10b..5ff7e0ab925a9f0e1d71e6fc25bd21e404d010e6 100644 GIT binary patch delta 17312 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 delta 16038 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 UPF_KF`c)$J+uF(>m8^pP1KpDA=Kufz literal 7842 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 a_r`MRTw_A+G4S6rATO;fmHW)#(|-V%Z|y+< From 7e5013905b1302fdd5102f07f6965af82fd01c07 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Mon, 10 Dec 2018 16:17:57 -0500 Subject: [PATCH 096/105] remove old scissor sprites --- icons/obj/surgery.dmi | Bin 60080 -> 57340 bytes icons/obj/surgical_scissors.dmi | Bin 9322 -> 7064 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 5ff7e0ab925a9f0e1d71e6fc25bd21e404d010e6..3ee3103cdd5d20d41e2eb756201d4da78a40c9e3 100644 GIT binary patch delta 14549 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

    hD%UiRG;t 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 AqW}N^ delta 17321 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 diff --git a/icons/obj/surgical_scissors.dmi b/icons/obj/surgical_scissors.dmi index 3aaeef512d0f6acae8fdab5b33a1f84fa621bb71..16e92165059b88c821c54a683f7ab3cb40775bf6 100644 GIT binary patch literal 7064 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 UPF_KF`c)$J+uF(>m8^pP1KpDA=Kufz From ebc319029af60b4a6d054d68fafd06f2dd965cda Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 28 Dec 2018 21:25:59 -0500 Subject: [PATCH 097/105] cyberlungs need less oxygen to breathe and can breathe a higher amount of CO2 and plasma --- code/mob/living/carbon/human.dm | 6 ++++++ code/obj/item/organ.dm | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index d09838ef..851475fa 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -3982,6 +3982,12 @@ // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure + //change safe gas levels for cyberlungs + if (has_cyberlungs) + safe_oxygen_min = 9 + safe_co2_max = 18 + safe_toxins_max = 5 //making it a lot higher than regular, because even doubling the regular value is pitifully low. This is still reasonably low, but it might be noticable + if (O2_pp < safe_oxygen_min) // Too little oxygen if (prob(20)) spawn(0) emote("gasp") diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 4567beac..40df947e 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -1258,6 +1258,7 @@ mats = 6 New() + ..() if (prob(50)) body_side = L_ORGAN icon_state = "cyber-lung-L" @@ -1266,6 +1267,16 @@ body_side = R_ORGAN icon_state = "cyber-lung-R" + //this might be funny, but you'd have to change manual breathing to be a var on a human instead of a global var. + // emp_act() + // if (donor) + // donor.manualbreathing = 1 + // donor.show_text("Your chest lurches. It feels like your lungs aren't working properly. You are gonna need to make an effort to breathe.", "red") + // spawn(600) + // if (donor) + // donor.manualbreathing = 0 + // ..() + /*========================*/ /*----------Eyes----------*/ /*========================*/ From 0227a9a9dc8f2762e37f50ddf22e9bef966e187c Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 28 Dec 2018 21:49:51 -0500 Subject: [PATCH 098/105] revert lung changes in files: oran and human.dm to before I started fucking with respiration types --- code/mob/living/carbon/human.dm | 42 +++++-------------- code/obj/item/organ.dm | 73 ++++----------------------------- 2 files changed, 19 insertions(+), 96 deletions(-) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index 474e0cbf..d09838ef 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -59,7 +59,6 @@ var/datum/organHolder/organHolder var/ignore_organs = 0 // set to 1 to basically skip the handle_organs() proc - var/datum/respiration_type/resp_type = new /datum/respiration_type var/on_chair = 0 var/simple_examine = 0 @@ -3949,22 +3948,6 @@ canmove = 1 - // //change the variables for safe oxygen, co2, tox, pressures/amounts in the air src can breathe. - // proc/set_safe_breath_values(/datum/respiration_type/comp) - // src.resp_type. - // respiration_type["safe_oxygen_min"] = safe_oxygen_min - // respiration_type["safe_co2_max"] = safe_co2_max - // respiration_type["safe_toxins_max"] = safe_toxins_max - // respiration_type["SA_para_min"] = SA_para_min - // respiration_type["SA_sleep_min"] = SA_sleep_min - - - // //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) - - - // return - - proc/handle_breath(datum/gas_mixture/breath) if (src.nodamage) return @@ -3983,9 +3966,13 @@ return 0 var/has_cyberlungs = (src.organHolder && (organHolder.left_lung && organHolder.right_lung) && (src.organHolder.left_lung.robotic && src.organHolder.right_lung.robotic)) //gotta prevent null pointers... + var/safe_oxygen_min = 17 // Minimum safe partial pressure of O2, in kPa //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) + var/safe_co2_max = 9 // Yes it's an arbitrary value who cares? + var/safe_toxins_max = 0.4 + var/SA_para_min = 1 + var/SA_sleep_min = 5 var/oxygen_used = 0 - var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME //Partial pressure of the O2 in our breath @@ -3995,17 +3982,11 @@ // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure - //change safe gas levels for cyberlungs - if (has_cyberlungs) - safe_oxygen_min = 9 - safe_co2_max = 18 - safe_toxins_max = 5 //making it a lot higher than regular, because even doubling the regular value is pitifully low. This is still reasonably low, but it might be noticable - if (O2_pp < safe_oxygen_min) // Too little oxygen if (prob(20)) spawn(0) emote("gasp") if (O2_pp > 0) - var/ratio = round(src.resp_type.safe_oxygen_min/(O2_pp + 0.1)) + var/ratio = round(safe_oxygen_min/(O2_pp + 0.1)) take_oxygen_deprivation(min(5*ratio, 5)) // Don't fuck them up too fast (space only does 7 after all!) oxygen_used = breath.oxygen*ratio/6 else @@ -4019,7 +4000,7 @@ breath.oxygen -= oxygen_used breath.carbon_dioxide += oxygen_used - if (CO2_pp > src.resp_type.safe_co2_max) + if (CO2_pp > safe_co2_max) if (!co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so. co2overloadtime = world.time else if (world.time - co2overloadtime > 120) @@ -4033,8 +4014,8 @@ else co2overloadtime = 0 - if (Toxins_pp > src.resp_type.safe_toxins_max) // Too much toxins - var/ratio = breath.toxins/src.resp_type.safe_toxins_max + if (Toxins_pp > safe_toxins_max) // Too much toxins + var/ratio = breath.toxins/safe_toxins_max take_toxin_damage(ratio * 325,15) hud.update_tox_indicator(1) else @@ -4043,9 +4024,9 @@ if (breath.trace_gases && breath.trace_gases.len) // If there's some other shit in the air lets deal with it here. for (var/datum/gas/sleeping_agent/SA in breath.trace_gases) var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure - if (SA_pp > src.resp_type.SA_para_min) // Enough to make us paralysed for a bit + if (SA_pp > SA_para_min) // Enough to make us paralysed for a bit src.paralysis = max(src.paralysis, 3) // 3 gives them one second to wake up and run away a bit! - if (SA_pp > src.resp_type.SA_sleep_min) // Enough to make us sleep as well + if (SA_pp > SA_sleep_min) // Enough to make us sleep as well src.sleeping = max(src.sleeping, 2) else if (SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if (prob(20)) @@ -4501,7 +4482,6 @@ // lungs if (!src.nodamage) // I don't know why all these if (!src.nodamage) aren't just checked once, but OK - //this is called to keep things in line with how other organs do not function when they have over 100 damage. adding/removing stamina debuffs src.organHolder.handle_lungs_stamina() // if (src.organHolder.get_working_lung_amt() == 1) // if ((src.organHolder.left_lung && src.organHolder.left_lung.get_damage() > 65) || (src.organHolder.right_lung && src.organHolder.right_lung.get_damage() > 65)) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index e52eca79..4567beac 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -385,7 +385,7 @@ myLeftLung.on_removal() src.left_lung = null organ_list["left_lung"] = null - handle_lungs() + handle_lungs_stamina() return myLeftLung if ("right_lung") @@ -396,7 +396,7 @@ myRightLung.on_removal() src.right_lung = null organ_list["right_lung"] = null - handle_lungs() + handle_lungs_stamina() return myRightLung if ("butt") @@ -670,7 +670,7 @@ src.left_lung = newLeftLung newLeftLung.set_loc(src.donor) organ_list["left_lung"] = newLeftLung - handle_lungs() + handle_lungs_stamina() success = 1 if ("right_lung") @@ -684,7 +684,7 @@ src.right_lung = newRightLung newRightLung.set_loc(src.donor) organ_list["right_lung"] = newRightLung - handle_lungs() + handle_lungs_stamina() success = 1 if ("butt") @@ -805,16 +805,13 @@ I.reagents.trans_to(src.donor, 330) return 1 - //OK you're probably thinking why this in needed at all. It seemed the simplest way to add and remove stamina based on the amount of lungs. - //Because I have it so that an organ can stop working when it hits 100+ damage, we get the amount of working lungs, - // then we see if that value is different from the last poll, (var/lungs_changed) - //i have the "if (working_lungs != lungs_changed)" in each switch case because I think it's a bit cleaner. I think it adds an extra 2 lines than if I moved it out and kept the damage done, but w/e + //OK you're probably thinking why this in needed at all. It seemed the simplest way, to add and remove stamina based on the amount of lungs. + //Because I have it so that an organ can stop working when it hits 100+ damage, we need to check if we have to make stamina changes often. //change stamina modifies based on amount of working lungs. lungs w/ health > 0 - //lungs_changed works like this: if lungs_changed is != the num of working lungs, then apply the modifier + //lungs_changed works like this: if lungs_changed is != the num of working lungs, then apply the stamina modifier proc/handle_lungs_stamina() var/working_lungs = src.get_working_lung_amt() - switch (working_lungs) if (0) if (working_lungs != lungs_changed) @@ -845,23 +842,6 @@ donor.remove_stam_mod_max("double_lung_removal") lungs_changed = 2 - proc/handle_lungs_type() - if (src.get_working_lung_amt() == 2) - if (donor.organHolder.left_lung.robotic && donor.organHolder.right_lung.robotic) - donor.resp_type = new /datum/respiration_type/cyberlungs - - else if (donor.organHolder.left_lung.synthetic && donor.organHolder.right_lung.synthetic) - donor.resp_type = new /datum/respiration_type/synthlungs - else //2 regular human lungs - - donor.resp_type = new /datum/respiration_type - else //any other amount of lungs... 0 or 1... you'll have regular old human resparation type - donor.resp_type = new /datum/respiration_type - - proc/handle_lungs() - handle_lungs_type() - handle_lungs_stamina() - /mob/living/carbon/human/proc/eye_istype(var/obj/item/I) if (!src.organHolder || !I) return 0 @@ -1278,7 +1258,6 @@ mats = 6 New() - ..() if (prob(50)) body_side = L_ORGAN icon_state = "cyber-lung-L" @@ -1287,15 +1266,6 @@ body_side = R_ORGAN icon_state = "cyber-lung-R" - //this might be funny, but you'd have to change manual breathing to be a var on a human instead of a global var. - // emp_act() - // if (donor) - // donor.manualbreathing = 1 - // donor.show_text("Your chest lurches. It feels like your lungs aren't working properly. You are gonna need to make an effort to breathe.", "red") - // spawn(600) - // if (donor) - // donor.manualbreathing = 0 - // ..() /*========================*/ /*----------Eyes----------*/ /*========================*/ @@ -2554,31 +2524,4 @@ mats = 6 #undef L_ORGAN -#undef R_ORGAN - -//default is regular human lungs -/datum/respiration_type - var/resp_system_name = "human_lungs" - var/fluid = 0 //might need for underwater breathing, no clue really how it's handled, if it's just an aquatic genetics check or something - - var/safe_oxygen_min = 17 - var/safe_co2_max = 9 - var/safe_toxins_max = 0.04 - var/SA_para_min = 1 - var/SA_sleep_min = 5 - //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) - - // humanlungs -/datum/respiration_type/cyberlungs - resp_system_name = "cyber_lungs" - safe_oxygen_min = 7 - safe_co2_max = 18 - safe_toxins_max = 0.08 - -/datum/respiration_type/synthlungs - resp_system_name = "synth_lungs" - safe_oxygen_min = 1 - safe_co2_max = 100 - safe_toxins_max = 0.5 - SA_para_min = 1 - SA_sleep_min = 1 +#undef R_ORGAN \ No newline at end of file From b8717a02ab264d5f0ee6b944014905f36d26bc08 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 28 Dec 2018 21:52:25 -0500 Subject: [PATCH 099/105] let cyberlungs need lower amounts of O2 when a guy has 2 cyberlungs. Just a simple check on the change now. I've realized that changing a good deal of how breathing works is not really in the scope of this patch. --- code/mob/living/carbon/human.dm | 6 ++++++ code/obj/item/organ.dm | 1 + 2 files changed, 7 insertions(+) diff --git a/code/mob/living/carbon/human.dm b/code/mob/living/carbon/human.dm index d09838ef..851475fa 100644 --- a/code/mob/living/carbon/human.dm +++ b/code/mob/living/carbon/human.dm @@ -3982,6 +3982,12 @@ // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure + //change safe gas levels for cyberlungs + if (has_cyberlungs) + safe_oxygen_min = 9 + safe_co2_max = 18 + safe_toxins_max = 5 //making it a lot higher than regular, because even doubling the regular value is pitifully low. This is still reasonably low, but it might be noticable + if (O2_pp < safe_oxygen_min) // Too little oxygen if (prob(20)) spawn(0) emote("gasp") diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 4567beac..194889c3 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -1258,6 +1258,7 @@ mats = 6 New() + ..() if (prob(50)) body_side = L_ORGAN icon_state = "cyber-lung-L" From 2bea74da4b9be13e1b682bc72bbb1e0782378ef4 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Fri, 28 Dec 2018 22:34:54 -0500 Subject: [PATCH 100/105] make objects for cyber lungs right and left to fix naming schemes... --- code/obj/item/organ.dm | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 194889c3..10f74c2b 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -1249,23 +1249,27 @@ body_side = R_ORGAN /obj/item/organ/lung/cyber - name = "cyberlung" - desc = "A fancy electronic eye to replace one that someone's lost. Kinda fragile, but better than nothing!" - icon_state = "cyber-lung-L" - // item_state = "heart_robo1" + name = "cyberlungs" + desc = "Fancy robotic lungs!" + icon_state = "cyber-lungs" robotic = 1 edible = 0 mats = 6 - New() - ..() - if (prob(50)) - body_side = L_ORGAN - icon_state = "cyber-lung-L" +/obj/item/organ/lung/cyber/left + name = "left lung" + desc = "Inflating robotic airsack that passes breathed oxygen into a person's blood and expels carbon dioxide back out. This is a left lung, since it has three lobes. Hopefully whoever used to have this one doesn't need it anymore." + organ_name = "cyber_lung_L" + icon_state = "cyber-lung-L" + body_side = L_ORGAN + +/obj/item/organ/lung/cyber/right + name = "right lung" + organ_name = "cyber_lung_R" + desc = "Inflating robotic airsack that passes breathed oxygen into a person's blood and expels carbon dioxide back out. This is a right lung, since it has two lobes and a cardiac notch, where the heart would be. Hopefully whoever used to have this one doesn't need it anymore." + icon_state = "cyber-lung-R" + body_side = R_ORGAN - else - body_side = R_ORGAN - icon_state = "cyber-lung-R" /*========================*/ /*----------Eyes----------*/ From 5ef46454b207d4fe664f01c51bb1cfb5e0fe097b Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 16 Jan 2019 04:09:58 -0500 Subject: [PATCH 101/105] medal check for all robotic organs. --- code/obj/item/organ.dm | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 10f74c2b..765072f2 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -803,7 +803,31 @@ O.on_transplant(src.donor) if (I.reagents) I.reagents.trans_to(src.donor, 330) + + if (is_full_robotic()) + donor.unlock_medal("Spaceship of Theseus", 1) + return 1 + + //checks if this organholder has all cyberorgans instead of meat ones. + proc/is_full_robotic() + if (islist(organ_list)) + for (var/i in organ_list) + //ignore these things which can't be robotic for a regular human atm. And butts cause they aren't real organs, plus removing butts is a crime. + if (i =="all" || i == "head" || i == "skull" || i == "brain" || i == "chest" || i == "butt") + continue + var/obj/item/organ/O = organ_list[i] + //if it's not robotic we're done, return 0 + if (istype(O) && !O.robotic) + return 0 + + //moved out of for loop and just continue past "butt". I think this is slightly more efficient. + if (i == "butt") + var/obj/item/clothing/head/butt/B = organ_list["butt"] + //if it's not robotic we're done, return 0 + if (istype(B) && !B.robotic) + return 0 return 1 + return 0 //OK you're probably thinking why this in needed at all. It seemed the simplest way, to add and remove stamina based on the amount of lungs. //Because I have it so that an organ can stop working when it hits 100+ damage, we need to check if we have to make stamina changes often. @@ -1512,6 +1536,7 @@ rand_pos = 1 var/mob/living/carbon/human/donor = null var/donor_name = null + var/robotic = 0 New() ..() @@ -1640,6 +1665,7 @@ icon_state = "cyberbutt" allow_staple = 0 toned = 0 + robotic = 1 // no this is not done and I dunno when it will be done // I am a bad person who accepts bribes of freaky macho butt drawings and then doesn't prioritize the request the bribe was for From 7d2af3f5231767b83c4dd56ede78f5eee405d6be Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 16 Jan 2019 04:11:42 -0500 Subject: [PATCH 102/105] fix ethanol OD cyberliver interaction conditional. Now You will experience the OD effects if you have the correct amount and don't have a liver --- code/datums/chemistry/Reagents-Base.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/datums/chemistry/Reagents-Base.dm b/code/datums/chemistry/Reagents-Base.dm index 4c6c0551..ee1b7bbc 100644 --- a/code/datums/chemistry/Reagents-Base.dm +++ b/code/datums/chemistry/Reagents-Base.dm @@ -147,7 +147,9 @@ datum H.stuttering += rand(1,10) if (H.canmove && isturf(H.loc) && prob(8)) step(H, pick(cardinal)) - if (holder.get_reagent_amount(src.id) >= 275 && (H.organHolder && H.organHolder.liver && !H.organHolder.liver.robotic)) + + var/has_cyberliver = H.organHolder && H.organHolder.liver && H.organHolder.liver.robotic + if (holder.get_reagent_amount(src.id) >= 275 && !has_cyberliver) if(prob(10)) H.emote(pick("hiccup", "fart", "mumble", "grumble")) H.stuttering += 1 @@ -163,7 +165,7 @@ datum new /obj/decal/cleanable/vomit(H.loc) if(prob(15)) H.make_dizzy(5) - if (holder.get_reagent_amount(src.id) >= 300 && (H.organHolder && H.organHolder.liver && !H.organHolder.liver.robotic)) + if (holder.get_reagent_amount(src.id) >= 300 && !has_cyberliver) H.change_eye_blurry(10, 50) if(prob(6)) H.drowsyness += 5 if(prob(5)) H.take_toxin_damage(rand(1,2)) From fbb23dfb701c0bd6606db6d56fc8bf2a0790ece4 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Wed, 16 Jan 2019 16:50:17 -0500 Subject: [PATCH 103/105] fix compiler error --- code/obj/item/organ.dm | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index 765072f2..eb83be06 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -821,11 +821,10 @@ return 0 //moved out of for loop and just continue past "butt". I think this is slightly more efficient. - if (i == "butt") - var/obj/item/clothing/head/butt/B = organ_list["butt"] - //if it's not robotic we're done, return 0 - if (istype(B) && !B.robotic) - return 0 + var/obj/item/clothing/head/butt/B = organ_list["butt"] + //if it's not robotic we're done, return 0 + if (istype(B) && !B.robotic) + return 0 return 1 return 0 @@ -2555,4 +2554,4 @@ mats = 6 #undef L_ORGAN -#undef R_ORGAN \ No newline at end of file +#undef R_ORGAN From 9799c7bbf4d7882d495e0d380c01fa497e11d81c Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Thu, 17 Jan 2019 21:37:57 -0500 Subject: [PATCH 104/105] This proc call leftover from testing causes runtimes. Must have missed it somehow, sorry. --- code/procs/scanprocs.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/procs/scanprocs.dm b/code/procs/scanprocs.dm index 8881cde8..893cf8bc 100644 --- a/code/procs/scanprocs.dm +++ b/code/procs/scanprocs.dm @@ -210,7 +210,6 @@ /proc/organ_health_scan(var/input, var/mob/living/carbon/human/H, var/obfuscate = 0) var/obj/item/organ/O = H.organHolder.organ_list[input] if (O && istype(O, /obj/item/organ)) - obfuscate_organ_health(O) var/damage = O.get_damage() if (obfuscate) return obfuscate_organ_health(input, O) From 78da32ff7504e64f3cfae6e0c1af3bf517690a51 Mon Sep 17 00:00:00 2001 From: Kyle2143 Date: Tue, 5 Feb 2019 17:08:31 -0500 Subject: [PATCH 105/105] fix cyberkidney naming. Also right/left cyberkidneys have their own objects similar to other organs(lungs/eyes) --- code/obj/item/organ.dm | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/code/obj/item/organ.dm b/code/obj/item/organ.dm index eb83be06..7340d34a 100644 --- a/code/obj/item/organ.dm +++ b/code/obj/item/organ.dm @@ -2275,14 +2275,19 @@ edible = 0 mats = 6 - New() - if (prob(50)) - body_side = L_ORGAN - icon_state = "cyber-kidney-L" +/obj/item/organ/kidney/cyber/left + name = "left kidney" + desc = "A fancy robotic kidney to replace one that someone's lost! It's the left kidney!" + organ_name = "cyber_kidney_L" + icon_state = "cyber-kidney-L" + body_side = L_ORGAN - else - body_side = R_ORGAN - icon_state = "cyber-kidney-R" +/obj/item/organ/kidney/cyber/right + name = "right kidney" + desc = "A fancy robotic kidney to replace one that someone's lost! It's the right kidney!" + organ_name = "cyber_kidney_R" + icon_state = "cyber-kidney-R" + body_side = R_ORGAN /obj/item/organ/stomach name = "stomach"