Adds carcinisoprojection jelly, a limb regrowth chem that is made from slime mutation toxin & blood (#15053)

* Limb regrowth chem, new disease of crab cancer

* Limb regrowth adjustments

* oops, sorry linters.

* oh right this would probably fuck with dullahans

* woops missed a newline

* Update code/modules/reagents/chemistry/reagents/medicine_reagents.dm

Co-authored-by: DeltaFire <46569814+DeltaFire15@users.noreply.github.com>

* just realized this check is unnecessary.

* let's add a mood debuff while we're at it

* Update medicine_reagents.dm

* add a bounty

* misspelling

* Update crabcancer.dm

Co-authored-by: DeltaFire <46569814+DeltaFire15@users.noreply.github.com>
This commit is contained in:
BlueWildrose
2022-04-14 15:37:08 -07:00
committed by GitHub
parent 85817a734b
commit f235839351
7 changed files with 137 additions and 4 deletions

View File

@@ -0,0 +1,67 @@
/datum/disease/crabcancer
name = "Crab Cancer"
form = "Skin Cancer"
max_stages = 3
cure_text = "Mutadone"
spread_text = "Noncontagious"
cures = list(/datum/reagent/medicine/mutadone)
agent = "Carcinisoprojection Jelly"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
permeability_mod = 1
desc = "If left untreated, the patient will rapidly and painfully grow flesh that will fall off the subject. This can result in death if unmaintained."
severity = DISEASE_SEVERITY_DANGEROUS
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
visibility_flags = HIDDEN_PANDEMIC
bypasses_immunity = TRUE
/datum/disease/crabcancer/stage_act()
..()
switch(stage)
if(1)
if(prob(10))
to_chat(affected_mob, "<span class='warning'>" + pick("You feel uncomfortable.",
"You can feel your arms and legs throbbing.",
"You feel... crabby.",
"You're starting to smell like seafood.") + "</span>")
if(2)
if(prob(10))
to_chat(affected_mob, "<span class='danger'>" + pick("Your flesh is starting to look deformed.",
"You feel your flesh bubbling and swelling.",
"You think you see pincers coming out of your flesh.",
"It's time for crab...") + "</span>")
if(3)
if(prob(5))
to_chat(affected_mob, "<span class='danger'>" + pick("Your skin forms black, rough patches!",
"The pain is unbearable!",
"Your skin is forming painful cysts!") + "</span>")
affected_mob.take_bodypart_damage(rand(1,5))
if(prob(5))
affected_mob.visible_message("<span class='danger'>[affected_mob]'s own flesh swells and tears away from \him!</span>", \
"<span class='userdanger'>" + pick("You feel your flesh swelling and tearing away from you!",
"Your own flesh grows and falls beneath you!",
"The pain... the crabby meat falls off you!",
"Your flesh... it tears!",
"It is now time for crab!") + "</span>",
"<span class='italics'>You hear a disgusting squelch of flesh being torn.</span>")
playsound(affected_mob, 'sound/items/poster_ripped.ogg', 50, TRUE)
playsound(get_turf(affected_mob), 'sound/effects/splat.ogg', 20, TRUE)
affected_mob.emote("scream")
affected_mob.take_bodypart_damage(rand(15,25))
var/humanmeatamount = rand(0,2)
var/crabmeatamount = rand(1,2)
var/meattype = /obj/item/reagent_containers/food/snacks/meat/slab/human
if(ishuman(affected_mob))
meattype = affected_mob.dna.species.meat
else //grab the carbon's meat instead (usually this means monkey meat... though other disease-compatible carbon mobs might apply.)
meattype = affected_mob.type_of_meat
if(humanmeatamount)
for(var/i=1 to humanmeatamount)
var/obj/item/reagent_containers/food/snacks/meat/slab/newmeat = new meattype
newmeat.name = "[affected_mob.real_name] [newmeat.name]"
newmeat.forceMove(affected_mob.loc)
if(crabmeatamount)
for(var/i=1 to crabmeatamount)
new /obj/item/reagent_containers/food/snacks/meat/rawcrab(affected_mob.loc)
affected_mob.jitteriness += 3

View File

@@ -147,6 +147,11 @@
mood_change = -5
timeout = 1 MINUTES
/datum/mood_event/painful_limb_regrowth
description = "<span class='warning'>It's great to have all my limbs back but that was absolutely painful.</span>\n"
mood_change = -5
timeout = 1 MINUTES
/datum/mood_event/loud_gong
description = "<span class='warning'>That loud gong noise really hurt my ears!</span>\n"
mood_change = -3

View File

@@ -139,6 +139,7 @@
/datum/reagent/medicine/atropine,\
/datum/reagent/medicine/strange_reagent,\
/datum/reagent/medicine/regen_jelly,\
/datum/reagent/medicine/limb_regrowth,\
/datum/reagent/drug/space_drugs,\
/datum/reagent/drug/crank,\
/datum/reagent/drug/krokodil,\

View File

@@ -1359,7 +1359,7 @@
/datum/reagent/medicine/neo_jelly
name = "Neo Jelly"
description = "Gradually regenerates all types of damage, without harming slime anatomy.Can OD"
description = "Gradually regenerates all types of damage, without harming slime anatomy. Can overdose."
reagent_state = LIQUID
metabolization_rate = 1 * REAGENTS_METABOLISM
color = "#91D865"
@@ -1797,3 +1797,50 @@
else
M.adjustToxLoss(0.5*REAGENTS_EFFECT_MULTIPLIER)
. = 1
/datum/reagent/medicine/limb_regrowth
name = "Carcinisoprojection Jelly"
description = "Also known as \"limb regrowth jelly\", this crabby looking xenobiological jelly will rapidly regrow any missing limbs someone has at the cost of some of their blood. Do not overdose."
taste_description = "salty slime"
color = "#EF5428" //like cooked crab!
reagent_state = LIQUID
overdose_threshold = 65 //it takes more than one bluespace syringe to overdose someone with this given how nasty the OD is.
value = REAGENT_VALUE_RARE
/datum/reagent/medicine/limb_regrowth/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
. = ..()
if(!.)
return
if(method == TOUCH) //as funny as it would be to have this hurled at someone, nah.
return
var/vol = reac_volume + C.reagents.get_reagent_amount(/datum/reagent/medicine/limb_regrowth)
if(vol < 5) //need at least 5 units.
return
var/list/limbs_to_heal = C.get_missing_limbs(exclude_head = TRUE)
if(limbs_to_heal.len < 1) //nothing happens if they already got all limbs.
return
if(HAS_TRAIT(C, TRAIT_ROBOTIC_ORGANISM)) //sorry synths, consider a visit to the roboticist. dunno how to justify regrowing robolimbs.
return
else if(ishuman(C) && !(HAS_BONE in C.dna?.species?.species_traits)) //boneless have little trouble with the limb chemical.
C.visible_message("<span class='notice'>[C] suddenly regrows \his limbs!</span>",
"<span class='notice'>You suddenly regrow your limbs, sensation and all!</span>")
else //boneful beings get to scream.
C.visible_message("<span class='warning'>[C]'s body lets off a grotesque squelching, bone crunching sound as \his limbs grow back rapidly!</span>",
"<span class='danger'>Your body emits a grotesque squelching, bone crunching sound as your limbs grow back rapidly! \
With the sensation of your regained limbs, also comes pain!</span>",
"<span class='italics'>You hear a grotsque squelching noise and the sound of crunching bones.</span>")
playsound(C, 'sound/magic/demon_consume.ogg', 50, 1)
SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "painful_limb_regrowth", /datum/mood_event/painful_limb_regrowth)
C.emote("scream")
C.regenerate_limbs(excluded_limbs = list(BODY_ZONE_HEAD)) //would be a little funky for dullahans if they suddenly sprouted a head.
C.blood_volume = max(C.blood_volume - 30*limbs_to_heal.len,0)
//lose blood for each limb that was regained.
//10 units less expensive than slime limb regrowth, but doesn't check for low blood like the ability, so it could be dangerous.
to_chat(C,"<span class='warning'>You feel like this ordeal of your limbs regrowing has made you a little paler... as well as made you feel a little thirsty.</span>")
//hint at the blood loss. (paler is a common symptom depicted in-game of low blood, but dehydration is another symptom of low blood.)
/datum/reagent/medicine/limb_regrowth/overdose_start(mob/living/M)
M.ForceContractDisease(new /datum/disease/crabcancer, FALSE, TRUE) //it is now, time for crab.
..()
. = 1

View File

@@ -371,3 +371,9 @@
id = /datum/reagent/medicine/system_cleaner
results = list(/datum/reagent/medicine/system_cleaner = 4)
required_reagents = list(/datum/reagent/iron = 2, /datum/reagent/oil = 2, /datum/reagent/medicine/calomel = 2, /datum/reagent/acetone = 2)
/datum/chemical_reaction/limb_regrowth
name = "Carcinisoprojection Jelly"
id = /datum/reagent/medicine/limb_regrowth
results = list(/datum/reagent/medicine/limb_regrowth = 2)
required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/slime_toxin = 1)

View File

@@ -124,19 +124,25 @@
/mob/living/carbon/alien/larva/get_leg_ignore()
return TRUE
/mob/living/proc/get_missing_limbs()
/mob/living/proc/get_missing_limbs(exclude_head = FALSE)
return list()
/mob/living/carbon/get_missing_limbs()
/mob/living/carbon/get_missing_limbs(exclude_head = FALSE)
var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
for(var/zone in full)
if(exclude_head && zone == BODY_ZONE_HEAD) //this is needed in case we don't care for the lack of a dullahan's head or something.
full -= zone
continue
if(get_bodypart(zone))
full -= zone
return full
/mob/living/carbon/alien/larva/get_missing_limbs()
/mob/living/carbon/alien/larva/get_missing_limbs(exclude_head = FALSE)
var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST)
for(var/zone in full)
if(exclude_head && zone == BODY_ZONE_HEAD) //I guess????
full -= zone
continue
if(get_bodypart(zone))
full -= zone
return full

View File

@@ -608,6 +608,7 @@
#include "code\datums\diseases\brainrot.dm"
#include "code\datums\diseases\cold.dm"
#include "code\datums\diseases\cold9.dm"
#include "code\datums\diseases\crabcancer.dm"
#include "code\datums\diseases\dna_spread.dm"
#include "code\datums\diseases\fake_gbs.dm"
#include "code\datums\diseases\flu.dm"