mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 09:54:52 +00:00
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:
67
code/datums/diseases/crabcancer.dm
Normal file
67
code/datums/diseases/crabcancer.dm
Normal 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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,\
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user