From 0ffc7507328e6660c7f2f332d3072e94d813db62 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Sat, 20 Nov 2021 21:08:24 -0600 Subject: [PATCH 01/21] tumors --- code/datums/diseases/advance/presets.dm | 9 ++++ .../diseases/advance/symptoms/tumors.dm | 43 +++++++++++++++++++ .../mob/living/carbon/carbon_defines.dm | 3 +- code/modules/mob/living/carbon/examine.dm | 3 ++ .../mob/living/carbon/human/examine.dm | 2 + .../reagents/reagent_containers/bottle.dm | 5 +++ code/modules/surgery/organs/tumors.dm | 4 ++ yogstation.dme | 2 + 8 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 code/datums/diseases/advance/symptoms/tumors.dm create mode 100644 code/modules/surgery/organs/tumors.dm diff --git a/code/datums/diseases/advance/presets.dm b/code/datums/diseases/advance/presets.dm index a9648489591f..eb31a8f2684f 100644 --- a/code/datums/diseases/advance/presets.dm +++ b/code/datums/diseases/advance/presets.dm @@ -24,6 +24,15 @@ symptoms = list(new/datum/symptom/necroseed) ..() +/datum/disease/advance/tumor + copy_type = /datum/disease/advance + +/datum/disease/advance/tumor/New() + name = "Tumors" + symptoms = list(new/datum/symptom/tumor,new/datum/symptom/sneeze,new/datum/symptom/fever,new/datum/symptom/shivering,new/datum/symptom/itching,new/datum/symptom/cough) + ..() + + //Randomly generated Disease, for virus crates and events /datum/disease/advance/random name = "Experimental Disease" diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm new file mode 100644 index 000000000000..218898c56b67 --- /dev/null +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -0,0 +1,43 @@ +//benign, premalignant, malignant tumors + +/datum/symptom/tumor + name = "Benign tumors" + desc = "The virus causes benign growths all over your body." + stealth = 0 + resistance = 4 + stage_speed = -4 + transmittable = -4 + level = 1 + severity = 1 + symptom_delay_min = 5 + symptom_delay_max = 35 + threshold_descs = list( + "Transmission 7" = "Gives visible growths on the host's body.", + "Stealth 4" = "Regenerates limbs that are incredibly fragile.", + ) + var/regeneration = FALSE + +/datum/symptom/tumor/Start(datum/disease/advance/A) + . = ..() + if(!.) + return + if(A.totalTransmittable() >= 7) //visible growths + if(ishuman(A.affected_mob)) + A.affected_mob.visible_tumors = TRUE + if(A.totalStealth() >= 4) //regeneration of limbs + regeneration = TRUE + +/datum/symptom/tumor/Activate(datum/disease/advance/A) + . = ..() + if(!.) + return + var/mob/living/M = A.affected_mob + if(prob(100)) //2% chance to make a new tumor somewhere + var/obj/item/organ/tumor/T = new() + T.Insert(M) + +/datum/symptom/tumor/End(datum/disease/advance/A) + ..() + if(ishuman(A.affected_mob)) + //unfuck their tumors + A.affected_mob.visible_tumors = FALSE diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index c49455f71b16..c989ec52a3fe 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -71,5 +71,6 @@ var/list/all_wounds /// All of the scars a carbon has afflicted throughout their limbs var/list/all_scars + var/visible_tumors = FALSE //if you are seem with some tumors, for examine - COOLDOWN_DECLARE(bleeding_message_cd) \ No newline at end of file + COOLDOWN_DECLARE(bleeding_message_cd) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index aaf01080f3f0..f563234e99ac 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -82,6 +82,9 @@ if(fire_stacks < 0) msg += "[t_He] look[p_s()] a little soaked.\n" + if(visible_tumors) + msg += "[t_He] [t_has] has growths all over [t_his] body...\n" + if(pulledby && pulledby.grab_state) msg += "[t_He] [t_is] restrained by [pulledby]'s grip.\n" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index f3b6e9375982..5f3813dc2a8d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -206,6 +206,8 @@ if(fire_stacks < 0) msg += "[t_He] look[p_s()] a little soaked.\n" + if(visible_tumors) + msg += "[t_He] [t_has] has growths all over [t_his] body...\n" if(pulledby && pulledby.grab_state) msg += "[t_He] [t_is] restrained by [pulledby]'s grip.\n" diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 891f2d247526..8a3c9f7c40b6 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -251,6 +251,11 @@ desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium." spawned_disease = /datum/disease/advance/flu +/obj/item/reagent_containers/glass/bottle/tumor + name = "tumor culture bottle" + desc = "A small bottle. Contains tumor culture in synthblood medium." + spawned_disease = /datum/disease/advance/tumor + /obj/item/reagent_containers/glass/bottle/retrovirus name = "Retrovirus culture bottle" desc = "A small bottle. Contains a retrovirus culture in a synthblood medium." diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm new file mode 100644 index 000000000000..b37b8a533a4a --- /dev/null +++ b/code/modules/surgery/organs/tumors.dm @@ -0,0 +1,4 @@ +/obj/item/organ/tumor + name = "benign tumor" + desc = "Hope there aren't more of these." + icon_state = "heart-on" diff --git a/yogstation.dme b/yogstation.dme index de643c643f73..71baab6a204a 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -532,6 +532,7 @@ #include "code\datums\diseases\advance\symptoms\sneeze.dm" #include "code\datums\diseases\advance\symptoms\species.dm" #include "code\datums\diseases\advance\symptoms\symptoms.dm" +#include "code\datums\diseases\advance\symptoms\tumors.dm" #include "code\datums\diseases\advance\symptoms\viral.dm" #include "code\datums\diseases\advance\symptoms\vision.dm" #include "code\datums\diseases\advance\symptoms\voice_change.dm" @@ -3050,6 +3051,7 @@ #include "code\modules\surgery\organs\stomach.dm" #include "code\modules\surgery\organs\tails.dm" #include "code\modules\surgery\organs\tongue.dm" +#include "code\modules\surgery\organs\tumors.dm" #include "code\modules\surgery\organs\vocal_cords.dm" #include "code\modules\swarmers\swarmer.dm" #include "code\modules\swarmers\swarmer_act.dm" From d99b0b105fcaad84130ba0900a2148d7fafa9271 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Sun, 21 Nov 2021 18:15:02 -0600 Subject: [PATCH 02/21] put organs anywhere --- code/datums/diseases/advance/symptoms/tumors.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index 218898c56b67..065f6036f77c 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -34,7 +34,7 @@ var/mob/living/M = A.affected_mob if(prob(100)) //2% chance to make a new tumor somewhere var/obj/item/organ/tumor/T = new() - T.Insert(M) + T.Insert(M,FALSE,FALSE,BODY_ZONE_R_ARM) /datum/symptom/tumor/End(datum/disease/advance/A) ..() diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 31f7e5ef0c06..e501d6737d65 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -26,10 +26,13 @@ var/high_threshold_cleared var/low_threshold_cleared -/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) +/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE,special_zone = null) if(!iscarbon(M) || owner == M) return + if(special_zone) + zone = special_zone + var/obj/item/organ/replaced = M.getorganslot(slot) if(replaced) replaced.Remove(M, special = 1) From 298a31298993c73ac4bfb65cc61c3fe798f5fff0 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Tue, 23 Nov 2021 20:48:07 -0600 Subject: [PATCH 03/21] tumors --- .../diseases/advance/symptoms/tumors.dm | 46 ++++++++++++-- code/modules/surgery/organs/organ_internal.dm | 2 +- code/modules/surgery/organs/tumors.dm | 60 +++++++++++++++++++ 3 files changed, 101 insertions(+), 7 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index 065f6036f77c..cd4753ae5aa0 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -7,37 +7,71 @@ resistance = 4 stage_speed = -4 transmittable = -4 - level = 1 - severity = 1 + level = 3 + severity = 2 symptom_delay_min = 5 symptom_delay_max = 35 threshold_descs = list( "Transmission 7" = "Gives visible growths on the host's body.", "Stealth 4" = "Regenerates limbs that are incredibly fragile.", + "Resistance 8" = "Heals brute and burn damage in exchange for toxin damage." ) var/regeneration = FALSE + var/helpful = FALSE + var/tumor_chance = 2; + var/obj/item/organ/tumor/tumortype = /obj/item/organ/tumor + var/datum/disease/advance/ownerdisease //what disease it comes from /datum/symptom/tumor/Start(datum/disease/advance/A) . = ..() if(!.) return + ownerdisease = A; if(A.totalTransmittable() >= 7) //visible growths if(ishuman(A.affected_mob)) A.affected_mob.visible_tumors = TRUE if(A.totalStealth() >= 4) //regeneration of limbs regeneration = TRUE + if(A.totalResistance() >= 8) //helpful healing instead of just toxin + helpful = TRUE /datum/symptom/tumor/Activate(datum/disease/advance/A) . = ..() if(!.) return - var/mob/living/M = A.affected_mob - if(prob(100)) //2% chance to make a new tumor somewhere - var/obj/item/organ/tumor/T = new() - T.Insert(M,FALSE,FALSE,BODY_ZONE_R_ARM) + var/mob/living/carbon/M = A.affected_mob + if(!M) return + if(prob(tumor_chance)) //2% chance to make a new tumor somewhere + var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) + //check if we can put an organ in there + var/insertionZone = pick(possibleZones) + var/insertionAvailable = TRUE + for(var/obj/item/organ/tumor/IT in M.internal_organs) + if(IT.zone == insertionZone) + insertionAvailable = FALSE + if(insertionAvailable) + var/obj/item/organ/tumor/T = new tumortype() + T.name = T.name + " (" + insertionZone + ")" + T.helpful = helpful + T.ownerdisease = ownerdisease + T.Insert(M,FALSE,FALSE,insertionZone) /datum/symptom/tumor/End(datum/disease/advance/A) ..() if(ishuman(A.affected_mob)) //unfuck their tumors A.affected_mob.visible_tumors = FALSE + +/datum/symptom/tumor/premalignant + name = "Premalignant tumors" + desc = "The virus causes premalignant growths all over your body." + level = 5 + severity = 4 + tumortype = /obj/item/organ/tumor/premalignant + +/datum/symptom/tumor/malignant + name = "Malignant tumors" + desc = "The virus causes malignant growths all over your body." + level = 7 + severity = 6 + tumortype = /obj/item/organ/tumor/malignant diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index e501d6737d65..05af2a9a30f2 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -34,7 +34,7 @@ zone = special_zone var/obj/item/organ/replaced = M.getorganslot(slot) - if(replaced) + if(replaced && !special_zone) replaced.Remove(M, special = 1) if(drop_if_replaced) replaced.forceMove(get_turf(M)) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index b37b8a533a4a..d6e229d374df 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -2,3 +2,63 @@ name = "benign tumor" desc = "Hope there aren't more of these." icon_state = "heart-on" + + var/strength = 0.125 + var/spread_chance = 2 + + var/helpful = FALSE //keeping track if they're helpful or not + var/datum/disease/advance/ownerdisease //what disease it comes from + +/obj/item/organ/tumor/Insert(var/mob/living/carbon/M, special = 0) + . = ..() + START_PROCESSING(SSobj, src) + +/obj/item/organ/tumor/Remove(mob/living/carbon/M, special = 0) + . = ..() + var/tumors_left = FALSE + for(var/obj/item/organ/tumor/IT in owner.internal_organs) + if(IT.ownerdisease == ownerdisease) + tumors_left = TRUE + if(!tumors_left) + //cure the disease, removing all tumors + ownerdisease.cure() + STOP_PROCESSING(SSobj, src) + +/obj/item/organ/tumor/process() + if(!owner) + return + if(!(src in owner.internal_organs)) + Remove(owner) + owner.adjustToxLoss(strength) //still damages you no matter what, but at least helpful if it's a good virus. + if(helpful) + owner.adjustBruteLoss(-(strength/2)) + owner.adjustFireLoss(-(strength/2)) + if(prob(spread_chance)) + spread() + +/obj/item/organ/tumor/proc/spread() + var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) + //check if we can put an organ in there + var/insertionZone = pick(possibleZones) + var/insertionAvailable = TRUE + for(var/obj/item/organ/tumor/IT in owner.internal_organs) + if(IT.zone == insertionZone) + insertionAvailable = FALSE + if(insertionAvailable) + var/obj/item/organ/tumor/T = new type() + T.name = T.name + " (" + insertionZone + ")" + T.helpful = helpful + T.ownerdisease = ownerdisease + T.Insert(owner,FALSE,FALSE,insertionZone) + +/obj/item/organ/tumor/premalignant + name = "premalignant tumor" + desc = "It doesn't look too bad... at least you're not dead, right?" + strength = 0.25 + spread_chance = 4 + +/obj/item/organ/tumor/malignant + name = "malignant tumor" + desc = "Yikes. There's probably more of these in you." + strength = 0.5 + spread_chance = 6 From 171ee82e2f13fa0bc5f51e8848defef3dede9078 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Sun, 12 Dec 2021 20:21:21 -0600 Subject: [PATCH 04/21] nerf spread chance but make it so you lose clothing slots --- .../diseases/advance/symptoms/tumors.dm | 28 +++++++++++++++++-- code/modules/surgery/organs/tumors.dm | 6 ++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index cd4753ae5aa0..b3868e2f4282 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -18,7 +18,7 @@ ) var/regeneration = FALSE var/helpful = FALSE - var/tumor_chance = 2; + var/tumor_chance = 0.25 var/obj/item/organ/tumor/tumortype = /obj/item/organ/tumor var/datum/disease/advance/ownerdisease //what disease it comes from @@ -39,8 +39,28 @@ . = ..() if(!.) return - var/mob/living/carbon/M = A.affected_mob + var/mob/living/carbon/human/M = A.affected_mob if(!M) return + + if(A.stage > 2) + if(istype(M.wear_mask, /obj/item/clothing/mask)) + var/obj/item/clothing/mask/wearing_mask = M.wear_mask + if(M.canUnEquip(wearing_mask)) + M.dropItemToGround(wearing_mask) + if(istype(M.wear_mask, /obj/item/clothing/head)) + var/obj/item/clothing/head/wearing_hat = M.head + if(M.canUnEquip(wearing_hat)) + M.dropItemToGround(wearing_hat) + M.dna.species.no_equip.Add(SLOT_WEAR_MASK,SLOT_HEAD) + + if(A.stage == 5) + if(istype(M.wear_mask, /obj/item/clothing/suit)) + var/obj/item/clothing/suit/wearing_suit = M.wear_suit + if(M.canUnEquip(wearing_suit)) + M.dropItemToGround(wearing_suit) + M.dna.species.no_equip.Add(SLOT_WEAR_SUIT) + + if(prob(tumor_chance)) //2% chance to make a new tumor somewhere var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) //check if we can put an organ in there @@ -61,12 +81,15 @@ if(ishuman(A.affected_mob)) //unfuck their tumors A.affected_mob.visible_tumors = FALSE + A.affected_mob.dna.species.no_equip.Remove(SLOT_WEAR_MASK,SLOT_HEAD) + A.affected_mob.dna.species.no_equip.Remove(SLOT_WEAR_SUIT) /datum/symptom/tumor/premalignant name = "Premalignant tumors" desc = "The virus causes premalignant growths all over your body." level = 5 severity = 4 + tumor_chance = 0.5 tumortype = /obj/item/organ/tumor/premalignant /datum/symptom/tumor/malignant @@ -74,4 +97,5 @@ desc = "The virus causes malignant growths all over your body." level = 7 severity = 6 + tumor_chance = 1 tumortype = /obj/item/organ/tumor/malignant diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index d6e229d374df..e5f5ea5493fa 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -4,7 +4,7 @@ icon_state = "heart-on" var/strength = 0.125 - var/spread_chance = 2 + var/spread_chance = 0.25 var/helpful = FALSE //keeping track if they're helpful or not var/datum/disease/advance/ownerdisease //what disease it comes from @@ -55,10 +55,10 @@ name = "premalignant tumor" desc = "It doesn't look too bad... at least you're not dead, right?" strength = 0.25 - spread_chance = 4 + spread_chance = 0.5 /obj/item/organ/tumor/malignant name = "malignant tumor" desc = "Yikes. There's probably more of these in you." strength = 0.5 - spread_chance = 6 + spread_chance = 1 From d62b4bfc4858a7607261f4c33eda5140f664b272 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Sun, 12 Dec 2021 20:34:49 -0600 Subject: [PATCH 05/21] adds sprites --- code/modules/surgery/organs/tumors.dm | 2 +- icons/obj/surgery.dmi | Bin 37691 -> 38013 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index e5f5ea5493fa..05df108de9a6 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -1,7 +1,7 @@ /obj/item/organ/tumor name = "benign tumor" desc = "Hope there aren't more of these." - icon_state = "heart-on" + icon_state = "tumor" var/strength = 0.125 var/spread_chance = 0.25 diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 2e2d5c327d101031b73b653635c6d5a232bfa078..b216e8aa99c7b99d73fc24400d16077e4993916f 100755 GIT binary patch delta 18497 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 p0g^~05{XZc0wj@0Bod$S{{hG0F+dLC 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 Date: Mon, 20 Dec 2021 18:46:43 -0600 Subject: [PATCH 06/21] regeneration --- code/datums/diseases/advance/symptoms/tumors.dm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index b3868e2f4282..7867ad999d4c 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -42,6 +42,7 @@ var/mob/living/carbon/human/M = A.affected_mob if(!M) return + //clothes wearing if(A.stage > 2) if(istype(M.wear_mask, /obj/item/clothing/mask)) var/obj/item/clothing/mask/wearing_mask = M.wear_mask @@ -60,7 +61,7 @@ M.dropItemToGround(wearing_suit) M.dna.species.no_equip.Add(SLOT_WEAR_SUIT) - + //spreading if(prob(tumor_chance)) //2% chance to make a new tumor somewhere var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) //check if we can put an organ in there @@ -75,6 +76,16 @@ T.helpful = helpful T.ownerdisease = ownerdisease T.Insert(M,FALSE,FALSE,insertionZone) + //regerenation + if(regeneration && prob(tumor_chance)) //use tumorchance to regenerate limbies + var/list/missing_limbs = M.get_missing_limbs() - list(BODY_ZONE_HEAD, BODY_ZONE_CHEST) //don't regenerate the head or chest + if(missing_limbs.len > 0) + var/limb_to_regenerate = pick(missing_limbs) + M.regenerate_limb(limb_to_regenerate,TRUE); + M.emote("scream") + M.visible_message(span_warning("Gnarly tumors burst out of [M]'s stump and form into a [limb_to_regenerate]!"), span_notice("You scream as your [limb_to_regenerate] reforms.")) + + /datum/symptom/tumor/End(datum/disease/advance/A) ..() From 8f1fd3d1a75b752f19f4b89e238be19eafa6095c Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Mon, 20 Dec 2021 18:49:39 -0600 Subject: [PATCH 07/21] nicer zone names --- code/datums/diseases/advance/symptoms/tumors.dm | 4 ++-- code/modules/surgery/organs/tumors.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index 7867ad999d4c..125b806b4cc1 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -72,7 +72,7 @@ insertionAvailable = FALSE if(insertionAvailable) var/obj/item/organ/tumor/T = new tumortype() - T.name = T.name + " (" + insertionZone + ")" + T.name = T.name + " (" + parse_zone(insertionZone) + ")" T.helpful = helpful T.ownerdisease = ownerdisease T.Insert(M,FALSE,FALSE,insertionZone) @@ -83,7 +83,7 @@ var/limb_to_regenerate = pick(missing_limbs) M.regenerate_limb(limb_to_regenerate,TRUE); M.emote("scream") - M.visible_message(span_warning("Gnarly tumors burst out of [M]'s stump and form into a [limb_to_regenerate]!"), span_notice("You scream as your [limb_to_regenerate] reforms.")) + M.visible_message(span_warning("Gnarly tumors burst out of [M]'s stump and form into a [parse_zone(limb_to_regenerate)]!"), span_notice("You scream as your [parse_zone(limb_to_regenerate)] reforms.")) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 05df108de9a6..53bc33ce297e 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -46,7 +46,7 @@ insertionAvailable = FALSE if(insertionAvailable) var/obj/item/organ/tumor/T = new type() - T.name = T.name + " (" + insertionZone + ")" + T.name = T.name + " (" + parse_zone(insertionZone) + ")" T.helpful = helpful T.ownerdisease = ownerdisease T.Insert(owner,FALSE,FALSE,insertionZone) From eb9f19dd2f900f24595bfc62d89347cff51c1c51 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Wed, 22 Dec 2021 17:41:14 -0600 Subject: [PATCH 08/21] only deal half --- code/modules/surgery/organs/tumors.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 53bc33ce297e..8a841755e3d4 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -29,10 +29,12 @@ return if(!(src in owner.internal_organs)) Remove(owner) - owner.adjustToxLoss(strength) //still damages you no matter what, but at least helpful if it's a good virus. if(helpful) + owner.adjustToxLoss(strength/2) owner.adjustBruteLoss(-(strength/2)) owner.adjustFireLoss(-(strength/2)) + else + owner.adjustToxLoss(strength) //just take toxin damage if(prob(spread_chance)) spread() From 4763cfe3e9ae64d7e08e1e3e2beb7f60c278f662 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Fri, 24 Dec 2021 03:52:40 -0600 Subject: [PATCH 09/21] new shit --- .../diseases/advance/symptoms/tumors.dm | 40 +++++++++---------- code/modules/surgery/organs/tumors.dm | 13 +++--- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index 125b806b4cc1..cfea58ce77fd 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -18,7 +18,7 @@ ) var/regeneration = FALSE var/helpful = FALSE - var/tumor_chance = 0.25 + var/tumor_chance = 0.5 var/obj/item/organ/tumor/tumortype = /obj/item/organ/tumor var/datum/disease/advance/ownerdisease //what disease it comes from @@ -44,22 +44,15 @@ //clothes wearing if(A.stage > 2) - if(istype(M.wear_mask, /obj/item/clothing/mask)) - var/obj/item/clothing/mask/wearing_mask = M.wear_mask - if(M.canUnEquip(wearing_mask)) - M.dropItemToGround(wearing_mask) - if(istype(M.wear_mask, /obj/item/clothing/head)) - var/obj/item/clothing/head/wearing_hat = M.head - if(M.canUnEquip(wearing_hat)) - M.dropItemToGround(wearing_hat) - M.dna.species.no_equip.Add(SLOT_WEAR_MASK,SLOT_HEAD) + var/datum/species/S = M.dna?.species + if(S) + S.add_no_equip_slot(M, SLOT_WEAR_MASK) + S.add_no_equip_slot(M, SLOT_HEAD) if(A.stage == 5) - if(istype(M.wear_mask, /obj/item/clothing/suit)) - var/obj/item/clothing/suit/wearing_suit = M.wear_suit - if(M.canUnEquip(wearing_suit)) - M.dropItemToGround(wearing_suit) - M.dna.species.no_equip.Add(SLOT_WEAR_SUIT) + var/datum/species/S = M.dna?.species + if(S) + S.add_no_equip_slot(M, SLOT_WEAR_SUIT) //spreading if(prob(tumor_chance)) //2% chance to make a new tumor somewhere @@ -82,6 +75,9 @@ if(missing_limbs.len > 0) var/limb_to_regenerate = pick(missing_limbs) M.regenerate_limb(limb_to_regenerate,TRUE); + var/obj/item/bodypart/new_limb = M.get_bodypart(limb_to_regenerate); + new_limb.set_brute_dam(45); + new_limb.set_burn_dam(45); M.emote("scream") M.visible_message(span_warning("Gnarly tumors burst out of [M]'s stump and form into a [parse_zone(limb_to_regenerate)]!"), span_notice("You scream as your [parse_zone(limb_to_regenerate)] reforms.")) @@ -91,16 +87,20 @@ ..() if(ishuman(A.affected_mob)) //unfuck their tumors - A.affected_mob.visible_tumors = FALSE - A.affected_mob.dna.species.no_equip.Remove(SLOT_WEAR_MASK,SLOT_HEAD) - A.affected_mob.dna.species.no_equip.Remove(SLOT_WEAR_SUIT) + var/mob/living/carbon/human/M = A.affected_mob + M.visible_tumors = FALSE + var/datum/species/S = M.dna?.species + if(S) + S.remove_no_equip_slot(M, SLOT_WEAR_MASK) + S.remove_no_equip_slot(M, SLOT_HEAD) + S.remove_no_equip_slot(M, SLOT_WEAR_SUIT) /datum/symptom/tumor/premalignant name = "Premalignant tumors" desc = "The virus causes premalignant growths all over your body." level = 5 severity = 4 - tumor_chance = 0.5 + tumor_chance = 1 tumortype = /obj/item/organ/tumor/premalignant /datum/symptom/tumor/malignant @@ -108,5 +108,5 @@ desc = "The virus causes malignant growths all over your body." level = 7 severity = 6 - tumor_chance = 1 + tumor_chance = 2 tumortype = /obj/item/organ/tumor/malignant diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 8a841755e3d4..2d326fb3a302 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -4,7 +4,7 @@ icon_state = "tumor" var/strength = 0.125 - var/spread_chance = 0.25 + var/spread_chance = 0.5 var/helpful = FALSE //keeping track if they're helpful or not var/datum/disease/advance/ownerdisease //what disease it comes from @@ -30,9 +30,10 @@ if(!(src in owner.internal_organs)) Remove(owner) if(helpful) - owner.adjustToxLoss(strength/2) - owner.adjustBruteLoss(-(strength/2)) - owner.adjustFireLoss(-(strength/2)) + if(owner.bruteloss + owner.fireloss > (strength/2)) + owner.adjustToxLoss(strength/2) + owner.adjustBruteLoss(-(strength/2)) + owner.adjustFireLoss(-(strength/2)) else owner.adjustToxLoss(strength) //just take toxin damage if(prob(spread_chance)) @@ -57,10 +58,10 @@ name = "premalignant tumor" desc = "It doesn't look too bad... at least you're not dead, right?" strength = 0.25 - spread_chance = 0.5 + spread_chance = 1 /obj/item/organ/tumor/malignant name = "malignant tumor" desc = "Yikes. There's probably more of these in you." strength = 0.5 - spread_chance = 1 + spread_chance = 2 From 65c71c001854009a10e8b2f79e1e4cc3674d565b Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Sat, 25 Dec 2021 23:07:04 -0600 Subject: [PATCH 10/21] no mask/hat/suit only when you have visible tumors --- .../diseases/advance/symptoms/tumors.dm | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index cfea58ce77fd..5d34a111ee39 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -42,17 +42,20 @@ var/mob/living/carbon/human/M = A.affected_mob if(!M) return - //clothes wearing - if(A.stage > 2) - var/datum/species/S = M.dna?.species - if(S) - S.add_no_equip_slot(M, SLOT_WEAR_MASK) - S.add_no_equip_slot(M, SLOT_HEAD) + if(M.visible_tumors) { + //clothes wearing + if(A.stage > 2) + var/datum/species/S = M.dna?.species + if(S) + S.add_no_equip_slot(M, SLOT_WEAR_MASK) + S.add_no_equip_slot(M, SLOT_HEAD) - if(A.stage == 5) - var/datum/species/S = M.dna?.species - if(S) - S.add_no_equip_slot(M, SLOT_WEAR_SUIT) + if(A.stage == 5) + var/datum/species/S = M.dna?.species + if(S) + S.add_no_equip_slot(M, SLOT_WEAR_SUIT) + } + //spreading if(prob(tumor_chance)) //2% chance to make a new tumor somewhere From bee9fb2f0f2aa4559e545171dfb4b4515b740b00 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Sat, 25 Dec 2021 23:13:58 -0600 Subject: [PATCH 11/21] adds some nice to_chats and clarifies transmission --- code/datums/diseases/advance/symptoms/tumors.dm | 3 ++- code/modules/surgery/organs/tumors.dm | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index 5d34a111ee39..829c508c82b7 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -12,7 +12,7 @@ symptom_delay_min = 5 symptom_delay_max = 35 threshold_descs = list( - "Transmission 7" = "Gives visible growths on the host's body.", + "Transmission 7" = "Gives visible growths on the host's body, eventually preventing some clothes from being worn.", "Stealth 4" = "Regenerates limbs that are incredibly fragile.", "Resistance 8" = "Heals brute and burn damage in exchange for toxin damage." ) @@ -72,6 +72,7 @@ T.helpful = helpful T.ownerdisease = ownerdisease T.Insert(M,FALSE,FALSE,insertionZone) + to_chat(M, span_warning("[pick("Your insides writhe.", "You feel your insides squirm.")]")) //regerenation if(regeneration && prob(tumor_chance)) //use tumorchance to regenerate limbies var/list/missing_limbs = M.get_missing_limbs() - list(BODY_ZONE_HEAD, BODY_ZONE_CHEST) //don't regenerate the head or chest diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 2d326fb3a302..9c358997902f 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -53,6 +53,7 @@ T.helpful = helpful T.ownerdisease = ownerdisease T.Insert(owner,FALSE,FALSE,insertionZone) + to_chat(owner, span_warning("Your [parse_zone(insertionZone)] hurts.")) /obj/item/organ/tumor/premalignant name = "premalignant tumor" From c92143336c974a887c9494860b4b88f502ca1c85 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Sun, 26 Dec 2021 20:13:47 -0600 Subject: [PATCH 12/21] no more putting tumors in limbs you dont have --- code/datums/diseases/advance/symptoms/tumors.dm | 2 +- code/modules/surgery/organs/tumors.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index 829c508c82b7..09e9ede99269 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -59,7 +59,7 @@ //spreading if(prob(tumor_chance)) //2% chance to make a new tumor somewhere - var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) + var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) - M.get_missing_limbs() //no inserting into magic limbs you dont have //check if we can put an organ in there var/insertionZone = pick(possibleZones) var/insertionAvailable = TRUE diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 9c358997902f..82f2dac05839 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -40,7 +40,7 @@ spread() /obj/item/organ/tumor/proc/spread() - var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) + var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) - owner.get_missing_limbs() //check if we can put an organ in there var/insertionZone = pick(possibleZones) var/insertionAvailable = TRUE From dc02f09ff38528a5046b0cc9a9e6fc6f8c8302ed Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Tue, 28 Dec 2021 17:34:23 -0600 Subject: [PATCH 13/21] yeah cool --- code/modules/surgery/organs/tumors.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 82f2dac05839..f44d99de46d9 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -30,7 +30,7 @@ if(!(src in owner.internal_organs)) Remove(owner) if(helpful) - if(owner.bruteloss + owner.fireloss > (strength/2)) + if(owner.getBruteLoss() + owner.getFireLoss() > (strength/2)) owner.adjustToxLoss(strength/2) owner.adjustBruteLoss(-(strength/2)) owner.adjustFireLoss(-(strength/2)) From 16b38e20d2d96f81d9f22412f2766588062d9417 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Tue, 4 Jan 2022 21:39:35 -0600 Subject: [PATCH 14/21] free healing + maybe fixing the damn limb regeneration --- code/datums/diseases/advance/symptoms/tumors.dm | 3 +-- code/modules/surgery/organs/tumors.dm | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index 09e9ede99269..22e5af9307cf 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -80,8 +80,7 @@ var/limb_to_regenerate = pick(missing_limbs) M.regenerate_limb(limb_to_regenerate,TRUE); var/obj/item/bodypart/new_limb = M.get_bodypart(limb_to_regenerate); - new_limb.set_brute_dam(45); - new_limb.set_burn_dam(45); + new_limb.receive_damage(45); //45 brute damage should be fine I think?????? M.emote("scream") M.visible_message(span_warning("Gnarly tumors burst out of [M]'s stump and form into a [parse_zone(limb_to_regenerate)]!"), span_notice("You scream as your [parse_zone(limb_to_regenerate)] reforms.")) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index f44d99de46d9..26f17008a7eb 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -30,7 +30,7 @@ if(!(src in owner.internal_organs)) Remove(owner) if(helpful) - if(owner.getBruteLoss() + owner.getFireLoss() > (strength/2)) + if(owner.getBruteLoss() + owner.getFireLoss() > 0) owner.adjustToxLoss(strength/2) owner.adjustBruteLoss(-(strength/2)) owner.adjustFireLoss(-(strength/2)) From 609ad7adf0ad3260217ff66ba1513cca146c8104 Mon Sep 17 00:00:00 2001 From: Byemoh Date: Mon, 10 Jan 2022 19:02:25 -0600 Subject: [PATCH 15/21] regeneration is now per tumor --- code/datums/diseases/advance/symptoms/tumors.dm | 17 ++--------------- code/modules/surgery/organs/tumors.dm | 12 ++++++++++++ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index 22e5af9307cf..a99eb8c0ab49 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -42,7 +42,7 @@ var/mob/living/carbon/human/M = A.affected_mob if(!M) return - if(M.visible_tumors) { + if(M.visible_tumors) //clothes wearing if(A.stage > 2) var/datum/species/S = M.dna?.species @@ -54,8 +54,6 @@ var/datum/species/S = M.dna?.species if(S) S.add_no_equip_slot(M, SLOT_WEAR_SUIT) - } - //spreading if(prob(tumor_chance)) //2% chance to make a new tumor somewhere @@ -70,22 +68,11 @@ var/obj/item/organ/tumor/T = new tumortype() T.name = T.name + " (" + parse_zone(insertionZone) + ")" T.helpful = helpful + T.regeneration = regeneration T.ownerdisease = ownerdisease T.Insert(M,FALSE,FALSE,insertionZone) to_chat(M, span_warning("[pick("Your insides writhe.", "You feel your insides squirm.")]")) - //regerenation - if(regeneration && prob(tumor_chance)) //use tumorchance to regenerate limbies - var/list/missing_limbs = M.get_missing_limbs() - list(BODY_ZONE_HEAD, BODY_ZONE_CHEST) //don't regenerate the head or chest - if(missing_limbs.len > 0) - var/limb_to_regenerate = pick(missing_limbs) - M.regenerate_limb(limb_to_regenerate,TRUE); - var/obj/item/bodypart/new_limb = M.get_bodypart(limb_to_regenerate); - new_limb.receive_damage(45); //45 brute damage should be fine I think?????? - M.emote("scream") - M.visible_message(span_warning("Gnarly tumors burst out of [M]'s stump and form into a [parse_zone(limb_to_regenerate)]!"), span_notice("You scream as your [parse_zone(limb_to_regenerate)] reforms.")) - - /datum/symptom/tumor/End(datum/disease/advance/A) ..() if(ishuman(A.affected_mob)) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 26f17008a7eb..b1347794196c 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -7,6 +7,7 @@ var/spread_chance = 0.5 var/helpful = FALSE //keeping track if they're helpful or not + var/regeneration = FALSE //if limbs are regenerating var/datum/disease/advance/ownerdisease //what disease it comes from /obj/item/organ/tumor/Insert(var/mob/living/carbon/M, special = 0) @@ -36,6 +37,16 @@ owner.adjustFireLoss(-(strength/2)) else owner.adjustToxLoss(strength) //just take toxin damage + //regerenation + if(regeneration && prob(spread_chance)) + var/list/missing_limbs = owner.get_missing_limbs() - list(BODY_ZONE_HEAD, BODY_ZONE_CHEST) //don't regenerate the head or chest + if(missing_limbs.len > 0) + var/limb_to_regenerate = pick(missing_limbs) + owner.regenerate_limb(limb_to_regenerate,TRUE); + var/obj/item/bodypart/new_limb = owner.get_bodypart(limb_to_regenerate); + new_limb.receive_damage(45); //45 brute damage should be fine I think?????? + owner.emote("scream") + owner.visible_message(span_warning("Gnarly tumors burst out of [owner]'s stump and form into a [parse_zone(limb_to_regenerate)]!"), span_notice("You scream as your [parse_zone(limb_to_regenerate)] reforms.")) if(prob(spread_chance)) spread() @@ -51,6 +62,7 @@ var/obj/item/organ/tumor/T = new type() T.name = T.name + " (" + parse_zone(insertionZone) + ")" T.helpful = helpful + T.regeneration = regeneration T.ownerdisease = ownerdisease T.Insert(owner,FALSE,FALSE,insertionZone) to_chat(owner, span_warning("Your [parse_zone(insertionZone)] hurts.")) From 80fe87c1988f8d5abddb6397fd280940c5e80012 Mon Sep 17 00:00:00 2001 From: Byemoh Date: Tue, 15 Feb 2022 18:31:30 -0600 Subject: [PATCH 16/21] Update code/modules/surgery/organs/tumors.dm Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> --- code/modules/surgery/organs/tumors.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index b1347794196c..9aa6bfc21fb8 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -40,7 +40,7 @@ //regerenation if(regeneration && prob(spread_chance)) var/list/missing_limbs = owner.get_missing_limbs() - list(BODY_ZONE_HEAD, BODY_ZONE_CHEST) //don't regenerate the head or chest - if(missing_limbs.len > 0) + if(missing_limbs.len) var/limb_to_regenerate = pick(missing_limbs) owner.regenerate_limb(limb_to_regenerate,TRUE); var/obj/item/bodypart/new_limb = owner.get_bodypart(limb_to_regenerate); From 6a765410c92f9e85637ba1e67591629839212156 Mon Sep 17 00:00:00 2001 From: Byemoh Date: Tue, 15 Feb 2022 18:31:37 -0600 Subject: [PATCH 17/21] Update code/modules/surgery/organs/tumors.dm Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> --- code/modules/surgery/organs/tumors.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 9aa6bfc21fb8..43c05af5efd2 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -43,7 +43,7 @@ if(missing_limbs.len) var/limb_to_regenerate = pick(missing_limbs) owner.regenerate_limb(limb_to_regenerate,TRUE); - var/obj/item/bodypart/new_limb = owner.get_bodypart(limb_to_regenerate); + var/obj/item/bodypart/new_limb = owner.get_bodypart(limb_to_regenerate) new_limb.receive_damage(45); //45 brute damage should be fine I think?????? owner.emote("scream") owner.visible_message(span_warning("Gnarly tumors burst out of [owner]'s stump and form into a [parse_zone(limb_to_regenerate)]!"), span_notice("You scream as your [parse_zone(limb_to_regenerate)] reforms.")) From cd069a0e1e46c08843afd54bda6763bc1f8c52e8 Mon Sep 17 00:00:00 2001 From: Byemoh Date: Tue, 15 Feb 2022 18:31:58 -0600 Subject: [PATCH 18/21] Update code/modules/surgery/organs/tumors.dm Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com> --- code/modules/surgery/organs/tumors.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 43c05af5efd2..8f1ef22fcc1b 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -42,7 +42,7 @@ var/list/missing_limbs = owner.get_missing_limbs() - list(BODY_ZONE_HEAD, BODY_ZONE_CHEST) //don't regenerate the head or chest if(missing_limbs.len) var/limb_to_regenerate = pick(missing_limbs) - owner.regenerate_limb(limb_to_regenerate,TRUE); + owner.regenerate_limb(limb_to_regenerate,TRUE) var/obj/item/bodypart/new_limb = owner.get_bodypart(limb_to_regenerate) new_limb.receive_damage(45); //45 brute damage should be fine I think?????? owner.emote("scream") From a03a007c902d8a951929a7e6840b2a5779426174 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Tue, 15 Feb 2022 18:38:14 -0600 Subject: [PATCH 19/21] Update surgery.dmi --- icons/obj/surgery.dmi | Bin 40616 -> 40995 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 1519b52c16d62ded747661f5121dc9b6d428d31a..24fba73d1dc220e511cb9e136649317c8806fef8 100755 GIT binary patch delta 21260 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Ⓢ?&p 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%0D$9+&^EI^owhxjq@V2F{r z-l<6C170Lz5Kg)e^RwCEm=(Jqm9LQ+;wT8@pXX2qBL1&>MhmVkh+da7QX9f4q663DiI76xP&0;RWO?WYs!20X7fTscqj^>`_jW z;|S62`CfY%+FU&ReVru=wX!{$VsKAfJutiVx39}dlx#8>b3cRH?wPqu#0^KbOfaYu zf95Ih1$vwl)nQagP(wpwloV7VEtQFq`nP}AQ#`4HonK&ANLQzGOFpO4N2tG;?Uy<1 zqvH!Dj);HWJ&Wxq{gzfL^pUdZ0%Yz#7Ed)g)KD#GFvSOSWq*|`_A<|h+2w%(7cg#@ zCk{%?j{Addb^TSOgZJLliFQz0_QZ*EP_&JVjN}^RSa7?P7_IkI3>WZZ{qzkZRl4Z| zl?u4!ZZk>bb9%4&_k|0vDq*lf`ZIQz#G;a3A9>Cp3^+H8f9c;)C@WziIsa{6#B#7! z`(4aAnzPhuXWc`~-PzPG%xBBTrr%L(HuI&2Sl{_>LT@=ohm*YWRlr5*a z=#aDqn%z_yFtRLwKf$rS7)yaG+VD3VkDYNTJfO@eqKqFWO}SXrxG+higNkL&Uja7j z10(=Iaf!EumLR0_H&X}|Of=}p=e<9hXeO(wDg;UD(&&fOcx@dC!m7apdmO`Ntt9K* zk=?nFp&eeuR8$$J`$Y%_Q)Fb!=3o3pbMMzSF8sE$Yn*9YH-$2E58z^L6LZw;;rsba zqiSprGs1=KIMZ|89rdMmS#v244g@9MFfmvSXwIf_`Y;>I`=GKmkUSUCp(S6nAN%%n zOXPLm8Pnfox0ncQ;6rsMnTOj4P*!t?rqAa^A88V~SZQxz6-BDsN0~ENV(P#K+f4>_d9U1VX-+dd?-f^@4&z2Wqcn zfhksC!SW%zSc{k_g1Sxr_vvW~jE2f^XcV8`IE))Bv z$*vi#KR(+*!Aq5mojvQ*r!MENSSc-$N5FFY)QxK+f+nzc9{}L?l#R^YsK3hy+9|er z|MaU_H@>H#&Rw!BP1zZ~1*%&d{+g&)E2w_p8Nt?o_&W(xR=|p@KP!AKiQ^*rnykSo zFLOJKCfqnn`C2t?TiGE-02z7&VlwopX7%cgbK0#3-zo6$g2E$lb4qyVqvZqY-o#?J zSFeVKULGlrP!4pCg~w?K+w$7`iEQ=WUsFBRtN0jVRH9ARAli2M;)cu4?mAPv;ASi& z1APYRVD}QVy48dwwvPQIQ4T2^x(ep3&1&YXeU(4qQyFlu&H1>#3gtt4%$12UZoIj0+Xm%rv0fF2-WC^M(BcETW(482o6mzk>>(V-rW+8e zYX3U)CNin{O(&H&uhu07X_|%|_xQYhKF=fnCzxmP{@&ap6zx nJ1di@{Py-9-My=Wvu%z2;*-_u+Q*Yn0Q4AMHN8@da>V}+T?MS# From b0e1bedf4847405cfc82005e64ee1b4759ae5842 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Thu, 17 Mar 2022 21:13:41 -0500 Subject: [PATCH 20/21] fixes bibby shit --- .../diseases/advance/symptoms/tumors.dm | 40 ++++++++------ code/modules/surgery/organs/tumors.dm | 52 +++++++++---------- 2 files changed, 51 insertions(+), 41 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index a99eb8c0ab49..423e58dc81ce 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -37,10 +37,12 @@ /datum/symptom/tumor/Activate(datum/disease/advance/A) . = ..() + if(!.) return var/mob/living/carbon/human/M = A.affected_mob - if(!M) return + if(!M) + return if(M.visible_tumors) //clothes wearing @@ -57,21 +59,29 @@ //spreading if(prob(tumor_chance)) //2% chance to make a new tumor somewhere - var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) - M.get_missing_limbs() //no inserting into magic limbs you dont have - //check if we can put an organ in there - var/insertionZone = pick(possibleZones) - var/insertionAvailable = TRUE - for(var/obj/item/organ/tumor/IT in M.internal_organs) - if(IT.zone == insertionZone) - insertionAvailable = FALSE - if(insertionAvailable) - var/obj/item/organ/tumor/T = new tumortype() - T.name = T.name + " (" + parse_zone(insertionZone) + ")" - T.helpful = helpful - T.regeneration = regeneration - T.ownerdisease = ownerdisease - T.Insert(M,FALSE,FALSE,insertionZone) + spread() + +/datum/symptom/tumor/proc/spread(mob/living/carbon/human/M, from_tumor = FALSE) + if(!M) + return + var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) - M.get_missing_limbs() //no inserting into magic limbs you dont have + //check if we can put an organ in there + var/insertionZone = pick(possibleZones) + var/insertionAvailable = TRUE + for(var/obj/item/organ/tumor/IT in M.internal_organs) + if(IT.zone == insertionZone) + insertionAvailable = FALSE + if(insertionAvailable) + var/obj/item/organ/tumor/T = new tumortype() + T.name = T.name + " (" + parse_zone(insertionZone) + ")" + T.helpful = helpful + T.regeneration = regeneration + T.ownerdisease = ownerdisease + T.Insert(M,FALSE,FALSE,insertionZone) + if(from_tumor) to_chat(M, span_warning("[pick("Your insides writhe.", "You feel your insides squirm.")]")) + else + to_chat(M, span_warning("Your [parse_zone(insertionZone)] hurts.")) /datum/symptom/tumor/End(datum/disease/advance/A) ..() diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 8f1ef22fcc1b..3202bfb9cb50 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -1,16 +1,24 @@ +#define TUMOR_STRENGTH_WEAK 0.125 +#define TUMOR_STRENGTH_AVERAGE 0.25 +#define TUMOR_STRENGTH_STRONG 0.5 + +#define TUMOR_SPREAD_WEAK 0.5 +#define TUMOR_SPREAD_AVERAGE 1 +#define TUMOR_SPREAD_STRONG 2 + /obj/item/organ/tumor name = "benign tumor" desc = "Hope there aren't more of these." icon_state = "tumor" - var/strength = 0.125 - var/spread_chance = 0.5 + var/strength = TUMOR_STRENGTH_WEAK + var/spread_chance = TUMOR_SPREAD_WEAK var/helpful = FALSE //keeping track if they're helpful or not var/regeneration = FALSE //if limbs are regenerating - var/datum/disease/advance/ownerdisease //what disease it comes from + var/datum/disease/advance/tumor/ownerdisease //what disease it comes from -/obj/item/organ/tumor/Insert(var/mob/living/carbon/M, special = 0) +/obj/item/organ/tumor/Insert(mob/living/carbon/M, special = 0) . = ..() START_PROCESSING(SSobj, src) @@ -37,7 +45,7 @@ owner.adjustFireLoss(-(strength/2)) else owner.adjustToxLoss(strength) //just take toxin damage - //regerenation + //regeneration if(regeneration && prob(spread_chance)) var/list/missing_limbs = owner.get_missing_limbs() - list(BODY_ZONE_HEAD, BODY_ZONE_CHEST) //don't regenerate the head or chest if(missing_limbs.len) @@ -48,33 +56,25 @@ owner.emote("scream") owner.visible_message(span_warning("Gnarly tumors burst out of [owner]'s stump and form into a [parse_zone(limb_to_regenerate)]!"), span_notice("You scream as your [parse_zone(limb_to_regenerate)] reforms.")) if(prob(spread_chance)) - spread() + if(ownerdisease) + ownerdisease.spread(TRUE) -/obj/item/organ/tumor/proc/spread() - var/list/possibleZones = list(BODY_ZONE_HEAD,BODY_ZONE_CHEST,BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG,BODY_ZONE_PRECISE_EYES,BODY_ZONE_PRECISE_GROIN) - owner.get_missing_limbs() - //check if we can put an organ in there - var/insertionZone = pick(possibleZones) - var/insertionAvailable = TRUE - for(var/obj/item/organ/tumor/IT in owner.internal_organs) - if(IT.zone == insertionZone) - insertionAvailable = FALSE - if(insertionAvailable) - var/obj/item/organ/tumor/T = new type() - T.name = T.name + " (" + parse_zone(insertionZone) + ")" - T.helpful = helpful - T.regeneration = regeneration - T.ownerdisease = ownerdisease - T.Insert(owner,FALSE,FALSE,insertionZone) - to_chat(owner, span_warning("Your [parse_zone(insertionZone)] hurts.")) /obj/item/organ/tumor/premalignant name = "premalignant tumor" desc = "It doesn't look too bad... at least you're not dead, right?" - strength = 0.25 - spread_chance = 1 + strength = TUMOR_STRENGTH_AVERAGE + spread_chance = TUMOR_SPREAD_AVERAGE /obj/item/organ/tumor/malignant name = "malignant tumor" desc = "Yikes. There's probably more of these in you." - strength = 0.5 - spread_chance = 2 + strength = TUMOR_STRENGTH_STRONG + spread_chance = TUMOR_SPREAD_STRONG + +#undef TUMOR_STRENGTH_WEAK +#undef TUMOR_STRENGTH_AVERAGE +#undef TUMOR_STRENGTH_STRONG +#undef TUMOR_SPREAD_WEAK +#undef TUMOR_SPREAD_AVERAGE +#undef TUMOR_SPREAD_STRONG From 20e006295c0222b192606dc4bf603cbf4e4e0416 Mon Sep 17 00:00:00 2001 From: ToasterBiome Date: Thu, 17 Mar 2022 21:14:19 -0500 Subject: [PATCH 21/21] whoops --- code/datums/diseases/advance/symptoms/tumors.dm | 2 +- code/modules/surgery/organs/tumors.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/tumors.dm b/code/datums/diseases/advance/symptoms/tumors.dm index 423e58dc81ce..08b8056bcc55 100644 --- a/code/datums/diseases/advance/symptoms/tumors.dm +++ b/code/datums/diseases/advance/symptoms/tumors.dm @@ -59,7 +59,7 @@ //spreading if(prob(tumor_chance)) //2% chance to make a new tumor somewhere - spread() + spread(M) /datum/symptom/tumor/proc/spread(mob/living/carbon/human/M, from_tumor = FALSE) if(!M) diff --git a/code/modules/surgery/organs/tumors.dm b/code/modules/surgery/organs/tumors.dm index 3202bfb9cb50..b04a7d4c2145 100644 --- a/code/modules/surgery/organs/tumors.dm +++ b/code/modules/surgery/organs/tumors.dm @@ -57,7 +57,7 @@ owner.visible_message(span_warning("Gnarly tumors burst out of [owner]'s stump and form into a [parse_zone(limb_to_regenerate)]!"), span_notice("You scream as your [parse_zone(limb_to_regenerate)] reforms.")) if(prob(spread_chance)) if(ownerdisease) - ownerdisease.spread(TRUE) + ownerdisease.spread(owner, TRUE) /obj/item/organ/tumor/premalignant