Adds Sanguine and Osseous Reagent (#21148)

* SR (not strange reagent)

* Osseous Reagent

* i forgor the recipe

* typecasting tweak

* SR tweaks

* bone tumor tweaks

* SR overdose buff

* Update code/modules/surgery/organs/bone_tumor.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

* Update code/modules/surgery/organs/bone_tumor.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

* makes SR actually work
oops 🤪

* guard clause

---------

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
This commit is contained in:
JimKil3
2023-07-11 08:46:48 -05:00
committed by GitHub
parent 7e6075a934
commit 083b74ec85
4 changed files with 126 additions and 0 deletions
@@ -818,6 +818,86 @@
SSblackbox.record_feedback("tally", "players_revived", 1, "lazarus_reagent")
..()
/datum/reagent/medicine/sanguine_reagent
name = "Sanguine Reagent"
id = "sanguine_reagent"
description = "A deeply crimson almost-gel that can mimic blood, regardless of type."
color = "#770101"
taste_description = "coppery fuel"
harmless = FALSE
overdose_threshold = 15
/datum/reagent/medicine/sanguine_reagent/on_mob_life(mob/living/M)
if(!ishuman(M))
return
var/mob/living/carbon/human/H = M
if(NO_BLOOD in H.dna.species.species_traits)
return ..()
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
switch(current_cycle)
if(1)
H.blood_volume += 1
if(2 to 25)
H.blood_volume += 3
else
H.blood_volume += 5
return ..()
/datum/reagent/medicine/sanguine_reagent/overdose_process(mob/living/M, severity)
var/update_flags = STATUS_UPDATE_NONE
if(!ishuman(M))
return
var/mob/living/carbon/human/H = M
if(volume < 20)
if(prob(10))
to_chat(H, "<span class='warning>You cough up some congealed blood.</span>")
H.vomit(blood = TRUE, stun = FALSE) //mostly visual
else if(prob(10))
var/overdose_message = pick("Your vision is tinted red for a moment.", "You can hear your heart beating.")
to_chat(H, "<span class='warning'>[overdose_message]</span>")
else
if(prob(10))
to_chat(H, "<span class='danger'>You choke on congealed blood!</span>")
H.AdjustLoseBreath(2 SECONDS)
H.vomit(blood = TRUE, stun = FALSE)
else if(prob(10))
var/overdose_message = pick("You're seeing red!", "Your heartbeat thunders in your ears!", "Your veins writhe under your skin!")
to_chat(H, "<span class='danger'>[overdose_message]</span>")
H.adjustBruteLoss(6)
if(H.client?.prefs.colourblind_mode == COLOURBLIND_MODE_NONE)
H.client.color = "red"
addtimer(VARSET_CALLBACK(H.client, color, ""), 6 SECONDS)
return list(0, update_flags)
/datum/reagent/medicine/osseous_reagent
name = "Osseous Reagent"
id = "osseous_reagent"
description = "A solution of pinkish gel with white shards floating in it, which is supposedly able to be processed into bone gel."
color = "#c9abab"
taste_description = "chunky marrow"
harmless = FALSE
overdose_threshold = 30 //so a single shotgun dart can't cause the tumor effect
/datum/reagent/medicine/osseous_reagent/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
return ..() | update_flags
/datum/reagent/medicine/osseous_reagent/overdose_process(mob/living/M, severity)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(1, FALSE)
if(ishuman(M) && prob(5))
var/mob/living/carbon/human/H = M
if(!H.get_int_organ(/obj/item/organ/internal/bone_tumor))
new/obj/item/organ/internal/bone_tumor(H)
return ..()
/datum/reagent/medicine/mannitol
name = "Mannitol"
id = "mannitol"
@@ -215,6 +215,22 @@
/datum/chemical_reaction/life/friendly/on_reaction(datum/reagents/holder, created_volume)
chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (friendly)", FRIENDLY_SPAWN)
/datum/chemical_reaction/sanguine_reagent
name = "Sanguine Reagent"
id = "sanguine_reagent"
result = "sanguine_reagent"
required_reagents = list("omnizine" = 1, "synthflesh" = 2, "iron" = 2)
result_amount = 5
mix_message = "The mixture bubbles furiously for a moment, then condenses into a sanguine gel."
/datum/chemical_reaction/osseous_reagent
name = "Osseous Reagent"
id = "osseous_reagent"
result = "osseous_reagent"
required_reagents = list("milk" = 1, "potassium" = 1, "oxygen" = 4, "phenol" = 3, "formaldehyde" = 3)
result_amount = 12
mix_message = "Shards of a bone-like substance start to form in the liquid."
/datum/chemical_reaction/mannitol
name = "Mannitol"
id = "mannitol"
+29
View File
@@ -0,0 +1,29 @@
/obj/item/organ/internal/bone_tumor
name = "bone tumor"
parent_organ = "groin"
slot = "groin_tumor"
destroy_on_removal = TRUE
var/tumor_size = 0 //Changed in New to be dependent on amount of osseous reagent in the system when formed, determines damage done
/obj/item/organ/internal/bone_tumor/New(mob/living/carbon/holder)
..()
tumor_size = owner.reagents.get_reagent_amount("osseous_reagent")
owner.reagents.remove_all_type(/datum/reagent/medicine/osseous_reagent, tumor_size)
/obj/item/organ/internal/bone_tumor/on_life()
var/obj/item/organ/external/groin/G = owner.get_limb_by_name("groin")
var/tumor_damage_modifier = sqrt(tumor_size - 30) //diminishing returns, tumor size can't be lower than 30
if(prob(5))
G.receive_damage(10 + tumor_damage_modifier, 0, FALSE)
to_chat(owner, "<span class='danger'>Something sharp is moving around in your lower body!</span>")
if(prob(1))
to_chat(owner, "<span class='userdanger'>Something just tore in your lower body!</span>")
var/list/other_groin_organs = G.internal_organs
other_groin_organs -= src
for(var/obj/item/organ/internal/I in other_groin_organs)
I.receive_damage(rand(5, 15) + tumor_damage_modifier)
+1
View File
@@ -2571,6 +2571,7 @@
#include "code\modules\surgery\organs\autosurgeon.dm"
#include "code\modules\surgery\organs\blood.dm"
#include "code\modules\surgery\organs\body_egg.dm"
#include "code\modules\surgery\organs\bone_tumor.dm"
#include "code\modules\surgery\organs\brain.dm"
#include "code\modules\surgery\organs\ears.dm"
#include "code\modules\surgery\organs\eyes.dm"