From 4e2dda164fa13b058e93ec4b2b7de7a94e9a6e4d Mon Sep 17 00:00:00 2001 From: NightRed Date: Thu, 3 Sep 2020 15:02:23 -0500 Subject: [PATCH] Makes the stomach important part of eating (#53228) This puts food you eat in to the stomach. If you do not have a stomach you can not eat, if you try to swallow anything you will spew it out. Changes to surgeries: Stomach pump can now be done on the living, and pushes out the reagents in the stomach. Blood filter is a new tool and cleans the reagents out of the body. This also makes it so that reagents that do not metabolize can accumulate in the stomach reducing how much food you can eat. --- .../map_files/Deltastation/DeltaStation2.dmm | 1 + .../map_files/IceBoxStation/IceBoxStation.dmm | 1 + _maps/map_files/MetaStation/MetaStation.dmm | 1 + _maps/map_files/PubbyStation/PubbyStation.dmm | 1 + code/__DEFINES/tools.dm | 1 + code/datums/components/food/edible.dm | 4 +- code/datums/materials/basemats.dm | 5 +- code/game/objects/items/storage/backpack.dm | 3 + code/game/turfs/turf.dm | 20 ++--- code/modules/food_and_drinks/drinks/drinks.dm | 4 +- code/modules/food_and_drinks/food/snacks.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 31 ++++++-- .../carbon/human/species_types/flypeople.dm | 27 ++++--- .../carbon/human/species_types/golems.dm | 10 +-- .../carbon/human/species_types/plasmamen.dm | 10 --- .../carbon/human/species_types/skeletons.dm | 11 +-- code/modules/mob/living/carbon/life.dm | 21 +++++ code/modules/mob/living/life.dm | 17 ++++ code/modules/reagents/chemistry/holder.dm | 18 ++++- .../research/designs/autolathe_designs.dm | 9 +++ code/modules/research/techweb/all_nodes.dm | 6 +- code/modules/surgery/blood_filter.dm | 44 +++++++++++ code/modules/surgery/organs/stomach.dm | 73 ++++++++++++++---- code/modules/surgery/stomachpump.dm | 2 - code/modules/surgery/tools.dm | 15 ++++ .../inhands/equipment/medical_lefthand.dmi | Bin 4879 -> 5092 bytes .../inhands/equipment/medical_righthand.dmi | Bin 4781 -> 4998 bytes icons/obj/surgery.dmi | Bin 40794 -> 41270 bytes tgstation.dme | 1 + 29 files changed, 253 insertions(+), 87 deletions(-) create mode 100644 code/modules/surgery/blood_filter.dm diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index d095491529e..be5f36f1e15 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -89861,6 +89861,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/item/blood_filter, /turf/open/floor/plasteel/white, /area/medical/surgery) "dsO" = ( diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index f4820d5e5c3..d199a3d52fa 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -49981,6 +49981,7 @@ /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, +/obj/item/blood_filter, /turf/open/floor/plasteel/dark, /area/medical/storage) "ddy" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index ca515cf737d..5954c6b398b 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -49992,6 +49992,7 @@ /obj/item/storage/backpack/duffelbag/med/surgery, /obj/item/reagent_containers/glass/bottle/ethanol, /obj/item/reagent_containers/glass/bottle/ethanol, +/obj/item/blood_filter, /turf/open/floor/plasteel/dark, /area/medical/storage) "cpV" = ( diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 87854b146fc..30fb3ad9e91 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -36167,6 +36167,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/item/blood_filter, /turf/open/floor/plasteel/white, /area/medical/surgery) "bMP" = ( diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm index 6fe9b44eee0..58c503fc5c5 100644 --- a/code/__DEFINES/tools.dm +++ b/code/__DEFINES/tools.dm @@ -16,6 +16,7 @@ #define TOOL_SAW "saw" #define TOOL_BONESET "bonesetter" #define TOOL_KNIFE "knife" +#define TOOL_BLOODFILTER "bloodfilter" // If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY, // tool sound is only played when op is started. If not, it's played twice. diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index a38dcc04d59..460591b1192 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -165,9 +165,7 @@ Behavior that's still missing from this component that original food items had t return if(!CanConsume(eater, feeder)) return - var/fullness = eater.nutrition + 10 //The theoretical fullness of the person eating if they were to eat this - for(var/datum/reagent/consumable/C in eater.reagents.reagent_list) //we add the nutrition value of what we're currently digesting - fullness += C.nutriment_factor * C.volume / C.metabolization_rate + var/fullness = eater.get_fullness() + 10 //The theoretical fullness of the person eating if they were to eat this . = COMPONENT_ITEM_NO_ATTACK //Point of no return I suppose diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 77b154f2017..50a8e9101ee 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -217,8 +217,9 @@ Unless you know what you're doing, only use the first three numbers. They're in beauty_modifier = -0.01 armor_modifiers = list(MELEE = 1.5, BULLET = 1.1, LASER = 0.3, ENERGY = 0.5, BOMB = 1, BIO = 1, RAD = 1, FIRE = 1.1, ACID = 1) -/datum/material/plastic/on_accidental_mat_consumption(mob/living/carbon/M, obj/item/S) - M.adjust_disgust(17) +/datum/material/plastic/on_accidental_mat_consumption(mob/living/carbon/eater, obj/item/food) + eater.reagents.add_reagent(/datum/reagent/plastic_polymers, rand(6, 8)) + food?.reagents?.add_reagent(/datum/reagent/plastic_polymers, food.reagents.total_volume*(2/5)) return TRUE ///Force decrease and mushy sound effect. (Not yet implemented) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 13875334132..3479f5c4697 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -377,6 +377,7 @@ new /obj/item/surgical_drapes(src) new /obj/item/clothing/mask/surgical(src) new /obj/item/razor(src) + new /obj/item/blood_filter(src) /obj/item/storage/backpack/duffelbag/sec name = "security duffel bag" @@ -398,6 +399,7 @@ new /obj/item/cautery(src) new /obj/item/surgical_drapes(src) new /obj/item/clothing/mask/surgical(src) + new /obj/item/blood_filter(src) /obj/item/storage/backpack/duffelbag/engineering name = "industrial duffel bag" @@ -486,6 +488,7 @@ new /obj/item/clothing/suit/straight_jacket(src) new /obj/item/clothing/mask/muzzle(src) new /obj/item/mmi/syndie(src) + new /obj/item/blood_filter(src) /obj/item/storage/backpack/duffelbag/syndie/ammo name = "ammunition duffel bag" diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index fba202d2544..fdcd2759309 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -560,18 +560,20 @@ GLOBAL_LIST_EMPTY(station_turfs) if (iscarbon(M)) var/mob/living/carbon/C = M if(C.reagents) - clear_reagents_to_vomit_pool(C,V, purge) + clear_reagents_to_vomit_pool(C, V, purge) /proc/clear_reagents_to_vomit_pool(mob/living/carbon/M, obj/effect/decal/cleanable/vomit/V, purge = FALSE) - var/chemicals_lost = M.reagents.total_volume / 10 + var/obj/item/organ/stomach/belly = M.getorganslot(ORGAN_SLOT_STOMACH) + if(!belly) + return + var/chemicals_lost = belly.reagents.total_volume * 0.1 if(purge) - chemicals_lost = (2 * M.reagents.total_volume)/3 //For detoxification surgery, we're manually pumping the stomach out of chemcials, so it's far more efficient. - M.reagents.trans_to(V, chemicals_lost, transfered_by = M) - for(var/datum/reagent/R in M.reagents.reagent_list) //clears the stomach of anything that might be digested as food - if(istype(R, /datum/reagent/consumable) || purge) - var/datum/reagent/consumable/nutri_check = R - if(nutri_check.nutriment_factor >0) - M.reagents.remove_reagent(R.type, min(R.volume, 10)) + chemicals_lost = belly.reagents.total_volume * 0.67 //For detoxification surgery, we're manually pumping the stomach out of chemcials, so it's far more efficient. + belly.reagents.trans_to(V, chemicals_lost, transfered_by = M) + //clear the stomach of anything even not food + for(var/bile in belly.reagents.reagent_list) + var/datum/reagent/reagent = bile + belly.reagents.remove_reagent(reagent.type, min(reagent.volume, 10)) //Whatever happens after high temperature fire dies out or thermite reaction works. //Should return new turf diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index f41282af2bc..c64d6212c94 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -44,10 +44,12 @@ M.visible_message("[user] fed [M] the contents of [src].", \ "[user] fed you the contents of [src].") log_combat(user, M, "fed", reagents.log_list()) + SEND_SIGNAL(src, COMSIG_DRINK_DRANK, M, user) var/fraction = min(gulp_size/reagents.total_volume, 1) - checkLiked(fraction, M) reagents.trans_to(M, gulp_size, transfered_by = user, methods = INGEST) + checkLiked(fraction, M) + playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE) if(iscarbon(M)) var/mob/living/carbon/carbon_drinker = M diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 72e37f6079f..370b911b91d 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -109,9 +109,7 @@ All foods are distributed among various categories. Use common sense. if(!canconsume(M, user)) return FALSE - var/fullness = M.nutrition + 10 - for(var/datum/reagent/consumable/C in M.reagents.reagent_list) //we add the nutrition value of what we're currently digesting - fullness += C.nutriment_factor * C.volume / C.metabolization_rate + var/fullness = M.get_fullness() + 10 if(M == user) //If you're eating it yourself. if(junkiness && M.satiety < -150 && M.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(user, TRAIT_VORACIOUS)) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b35d690ef3f..cdfb56181f8 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -490,23 +490,44 @@ if(!blood) adjust_nutrition(-lost_nutrition) adjustToxLoss(-3) + + var/obj/item/organ/stomach/belly = getorganslot(ORGAN_SLOT_STOMACH) for(var/i=0 to distance) if(blood) if(T) add_splatter_floor(T) if(harm) adjustBruteLoss(3) - else if(src.reagents.has_reagent(/datum/reagent/consumable/ethanol/blazaam, needs_metabolizing = TRUE)) - if(T) - T.add_vomit_floor(src, VOMIT_PURPLE) else - if(T) - T.add_vomit_floor(src, VOMIT_TOXIC, purge)//toxic barf looks different || call purge when doing detoxicfication to pump more chems out of the stomach. + if(belly?.reagents.has_reagent(/datum/reagent/consumable/ethanol/blazaam, needs_metabolizing = TRUE)) + if(T) + T.add_vomit_floor(src, VOMIT_PURPLE) + else + if(T) + T.add_vomit_floor(src, VOMIT_TOXIC, purge) //toxic barf looks different || call purge when doing detoxicfication to pump more chems out of the stomach. T = get_step(T, dir) if (T?.is_blocked_turf()) break return TRUE +/** + * Expel the reagents you just tried to ingest + * + * When you try to ingest reagents but you do not have a stomach + * you will spew the reagents on the floor. + * + * Vars: + * * bite: /atom the reagents to expel + * * amount: int The amount of reagent + */ +/mob/living/carbon/proc/expel_ingested(var/atom/bite, amount) + visible_message("[src] throws up all over [p_them()]self!", \ + "You are unable to keep the [bite] down without a stomach!") + + var/turf/floor = get_turf(src) + var/obj/effect/decal/cleanable/vomit/spew = new(floor, get_static_viruses()) + bite.reagents.trans_to(spew, amount, transfered_by = src) + /mob/living/carbon/proc/spew_organ(power = 5, amt = 1) for(var/i in 1 to amt) if(!internal_organs.len) diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index 7b2a3831aef..f9ac4269965 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -25,17 +25,7 @@ if(chem.type == /datum/reagent/toxin/pestkiller) H.adjustToxLoss(3) H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) - return 1 - -/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(istype(chem, /datum/reagent/consumable)) - var/datum/reagent/consumable/nutri_check = chem - if(nutri_check.nutriment_factor > 0) - var/turf/pos = get_turf(H) - H.vomit(0, FALSE, FALSE, 2, TRUE) - playsound(pos, 'sound/effects/splat.ogg', 50, TRUE) - H.visible_message("[H] vomits on the floor!", \ - "You throw up on the floor!") + return TRUE ..() /datum/species/fly/check_species_weakness(obj/item/weapon, mob/living/attacker) @@ -79,6 +69,21 @@ name = odd_organ_name() icon_state = pick("brain-x-d", "liver-x", "kidneys-x", "stomach-x", "lungs-x", "random_fly_1", "random_fly_2", "random_fly_3", "random_fly_4", "random_fly_5") +/obj/item/organ/stomach/fly/on_life() + for(var/bile in reagents.reagent_list) + if(!istype(bile, /datum/reagent/consumable)) + continue + var/datum/reagent/consumable/chunk = bile + if(chunk.nutriment_factor <= 0) + continue + var/mob/living/carbon/body = owner + var/turf/pos = get_turf(owner) + body.vomit(reagents.total_volume, FALSE, FALSE, 2, TRUE) + playsound(pos, 'sound/effects/splat.ogg', 50, TRUE) + body.visible_message("[body] vomits on the floor!", \ + "You throw up on the floor!") + return ..() + /obj/item/organ/appendix/fly desc = "You have no idea what the hell this is, or how it manages to keep something alive in any capacity." diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index b1d3c9a5951..72dca526e30 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -919,6 +919,7 @@ species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES,HAS_BONE) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID mutanttongue = /obj/item/organ/tongue/bone + mutantstomach = /obj/item/organ/stomach/bone sexes = FALSE fixed_mut_color = null inherent_traits = list(TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_FAKEDEATH) @@ -939,15 +940,6 @@ /datum/species/golem/bone/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) . = ..() - if(chem.type == /datum/reagent/consumable/milk) - if(chem.volume > 10) - H.reagents.remove_reagent(chem.type, chem.volume - 10) - to_chat(H, "The excess milk is dripping off your bones!") - H.heal_bodypart_damage(1.5,0, 0) - for(var/i in H.all_wounds) - var/datum/wound/iter_wound = i - iter_wound.on_xadone(2) - H.reagents.remove_reagent(chem.type, chem.metabolization_rate) if(chem.type == /datum/reagent/toxin/bonehurtingjuice) H.adjustStaminaLoss(7.5, 0) H.adjustBruteLoss(0.5, 0) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index b70c3b6c90c..64dd32f3a43 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -172,16 +172,6 @@ /datum/species/plasmaman/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) . = ..() - if(istype(chem, /datum/reagent/consumable/milk)) - if(chem.volume > 10) - H.reagents.remove_reagent(chem.type, chem.volume - 10) - to_chat(H, "The excess milk is dripping off your bones!") - H.heal_bodypart_damage(1.5,0, 0) - H.reagents.remove_reagent(chem.type, chem.metabolization_rate) - for(var/i in H.all_wounds) - var/datum/wound/iter_wound = i - iter_wound.on_xadone(2) - return TRUE if(istype(chem, /datum/reagent/toxin/plasma)) H.reagents.remove_reagent(chem.type, chem.metabolization_rate) for(var/i in H.all_wounds) diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index 8f23b246213..d7663e777eb 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -10,6 +10,7 @@ TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH,TRAIT_XENO_IMMUNE,TRAIT_NOCLONELOSS) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID mutanttongue = /obj/item/organ/tongue/bone + mutantstomach = /obj/item/organ/stomach/bone damage_overlay_type = ""//let's not show bloody wounds or burns over bones. disliked_food = NONE liked_food = GROSS | MEAT | RAW @@ -25,16 +26,6 @@ //Can still metabolize milk through meme magic /datum/species/skeleton/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) . = ..() - if(chem.type == /datum/reagent/consumable/milk) - if(chem.volume > 10) - H.reagents.remove_reagent(chem.type, chem.volume - 10) - to_chat(H, "The excess milk is dripping off your bones!") - for(var/i in H.all_wounds) - var/datum/wound/iter_wound = i - iter_wound.on_xadone(2) - H.heal_bodypart_damage(1,1, 0) - H.reagents.remove_reagent(chem.type, chem.metabolization_rate) - return TRUE if(chem.type == /datum/reagent/toxin/bonehurtingjuice) H.adjustStaminaLoss(7.5, 0) H.adjustBruteLoss(0.5, 0) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 82fee6cbabb..66b17f7fe6d 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -702,6 +702,27 @@ All effects don't start immediately, but rather get worse over time; the rate is bodytemperature = clamp(bodytemperature + amount,min_temp,max_temp) +/////////// +//Stomach// +/////////// + +/mob/living/carbon/get_fullness() + var/fullness = nutrition + + var/obj/item/organ/stomach/belly = getorganslot(ORGAN_SLOT_STOMACH) + if(!belly) //nothing to see here if we do not have a stomach + return fullness + + for(var/bile in belly.reagents.reagent_list) + var/datum/reagent/bits = bile + if(istype(bits, /datum/reagent/consumable)) + var/datum/reagent/consumable/goodbit = bile + fullness += goodbit.nutriment_factor * goodbit.volume / goodbit.metabolization_rate + continue + fullness += 0.6 * bits.volume / bits.metabolization_rate //not food takes up space + + return fullness + ///////// //LIVER// ///////// diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index ac7d6f3bd59..e01ed2440ee 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -115,6 +115,23 @@ var/turf/location = get_turf(src) location.hotspot_expose(700, 50, 1) +/** + * Get the fullness of the mob + * + * This returns a value form 0 upwards to represent how full the mob is. + * The value is a total amount of consumable reagents in the body combined + * with the total amount of nutrition they have. + * This does not have an upper limit. + */ +/mob/living/proc/get_fullness() + var/fullness = nutrition + // we add the nutrition value of what we're currently digesting + for(var/bile in reagents.reagent_list) + var/datum/reagent/consumable/bits = bile + if(bits) + fullness += bits.nutriment_factor * bits.volume / bits.metabolization_rate + return fullness + //this updates all special effects: knockdown, druggy, stuttering, etc.. /mob/living/proc/handle_status_effects() diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index ef4a424ee20..2c25e1e9dc2 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -209,8 +209,9 @@ * * methods - passed through to [/datum/reagents/proc/react_single] and [/datum/reagent/proc/on_transfer] * * show_message - passed through to [/datum/reagents/proc/react_single] * * round_robin - if round_robin=TRUE, so transfer 5 from 15 water, 15 sugar and 15 plasma becomes 10, 15, 15 instead of 13.3333, 13.3333 13.3333. Good if you hate floating point errors + * * ignore_stomach - when using methods INGEST will not use the stomach as the target */ -/datum/reagents/proc/trans_to(obj/target, amount = 1, multiplier = 1, preserve_data = TRUE, no_react = FALSE, mob/transfered_by, remove_blacklisted = FALSE, methods = NONE, show_message = TRUE, round_robin = FALSE) +/datum/reagents/proc/trans_to(obj/target, amount = 1, multiplier = 1, preserve_data = TRUE, no_react = FALSE, mob/transfered_by, remove_blacklisted = FALSE, methods = NONE, show_message = TRUE, round_robin = FALSE, ignore_stomach = FALSE) var/list/cached_reagents = reagent_list if(!target || !total_volume) return @@ -223,10 +224,19 @@ R = target target_atom = R.my_atom else - if(!target.reagents) + if(!ignore_stomach && (methods & INGEST) && istype(target, /mob/living/carbon)) + var/mob/living/carbon/eater = target + var/obj/item/organ/stomach/belly = eater.getorganslot(ORGAN_SLOT_STOMACH) + if(!belly) + eater.expel_ingested(my_atom, amount) + return + R = belly.reagents + target_atom = belly + else if(!target.reagents) return - R = target.reagents - target_atom = target + else + R = target.reagents + target_atom = target amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) var/trans_data = null diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index c8fa1a1dc24..483e0b020cf 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -495,6 +495,15 @@ build_path = /obj/item/clothing/head/foilhat category = list("hacked", "Misc") +/datum/design/blood_filter + name = "Blood Filter" + id = "blood_filter" + build_type = AUTOLATHE | PROTOLATHE + materials = list(/datum/material/iron = 4000, /datum/material/glass = 1500, /datum/material/silver = 500) + build_path = /obj/item/blood_filter + category = list("initial", "Medical", "Tool Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + /datum/design/scalpel name = "Scalpel" id = "scalpel" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 9423cabdef2..2709183d363 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -56,8 +56,10 @@ starting_node = TRUE display_name = "Basic Medical Equipment" description = "Basic medical tools and equipment." - design_ids = list("cybernetic_liver", "cybernetic_heart", "cybernetic_lungs","cybernetic_stomach", "scalpel", "circular_saw", "bonesetter", "surgicaldrill", "retractor", "cautery", "hemostat", "stethoscope", - "surgical_drapes", "syringe", "plumbing_rcd", "beaker", "large_beaker", "xlarge_beaker", "dropper", "defibmountdefault", "surgical_tape", "portable_chem_mixer") + design_ids = list("cybernetic_liver", "cybernetic_heart", "cybernetic_lungs","cybernetic_stomach", "scalpel", + "blood_filter", "circular_saw", "bonesetter", "surgicaldrill", "retractor", "cautery", "hemostat", + "stethoscope", "surgical_drapes", "syringe", "plumbing_rcd", "beaker", "large_beaker", "xlarge_beaker", + "dropper", "defibmountdefault", "surgical_tape", "portable_chem_mixer") /////////////////////////Biotech///////////////////////// /datum/techweb_node/biotech diff --git a/code/modules/surgery/blood_filter.dm b/code/modules/surgery/blood_filter.dm new file mode 100644 index 00000000000..46b0c1f9194 --- /dev/null +++ b/code/modules/surgery/blood_filter.dm @@ -0,0 +1,44 @@ +/datum/surgery/blood_filter + name = "Filter blood" + steps = list(/datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/incise, + /datum/surgery_step/filter_blood, + /datum/surgery_step/close) + + target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = TRUE + ignore_clothes = FALSE + +/datum/surgery_step/filter_blood + name = "Filter blood" + implements = list(/obj/item/blood_filter = 95) + repeatable = TRUE + time = 2.5 SECONDS + +/datum/surgery/filter_blood/can_start(mob/user, mob/living/carbon/target) + if(HAS_TRAIT(target, TRAIT_HUSK)) //You can filter the blood of a dead person just not husked + return FALSE + return ..() + +/datum/surgery_step/filter_blood/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You begin filtering [target]'s blood...", + "[user] uses the [tool] to filtering your blood.", + "[user] uses the [tool] on [target]'s chest.") + +/datum/surgery_step/filter_blood/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + if(target.reagents?.total_volume) + for(var/blood_chem in target.reagents.reagent_list) + var/datum/reagent/chem = blood_chem + target.reagents.remove_reagent(chem.type, min(chem.volume * 0.22, 10)) + display_results(user, target, "The [tool] pings as it finishes filtering [target]'s blood.", + "The [tool] pings as it stops pumping your blood.", + "The [tool] pings as it stops pumping.") + return ..() + +/datum/surgery_step/filter_blood/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You screw up, brusing [target]'s chest!", + "[user] screws up, brusing [target]'s chest!", + "[user] screws up!") + target.adjustBruteLoss(5) diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index c4fadb46c4c..d517e435111 100755 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -18,30 +18,40 @@ var/disgust_metabolism = 1 -/obj/item/organ/stomach/on_life() - var/mob/living/carbon/human/H = owner - var/datum/reagent/Nutri +/obj/item/organ/stomach/Initialize() + . = ..() + create_reagents(1000) - ..() - if(istype(H)) +/obj/item/organ/stomach/on_life() + . = ..() + + //Manage species digestion + if(istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/humi = owner if(!(organ_flags & ORGAN_FAILING)) - H.dna.species.handle_digestion(H) - handle_disgust(H) + humi.dna.species.handle_digestion(humi) + + //digest food + var/mob/living/carbon/body = owner + reagents.metabolize(body, can_overdose=TRUE) + if(body) + handle_disgust(body) if(damage < low_threshold) return - Nutri = locate(/datum/reagent/consumable/nutriment) in H.reagents.reagent_list + var/datum/reagent/nutri = locate(/datum/reagent/consumable/nutriment) in reagents.reagent_list + if(!nutri) + return - if(Nutri) - if(prob((damage/40) * Nutri.volume * Nutri.volume)) - H.vomit(damage) - to_chat(H, "Your stomach reels in pain as you're incapable of holding down all that food!") + if(prob(damage * 0.025 * nutri.volume * nutri.volume)) + body.vomit(damage) + to_chat(body, "Your stomach reels in pain as you're incapable of holding down all that food!") + return - else if(Nutri && damage > high_threshold) - if(prob((damage/10) * Nutri.volume * Nutri.volume)) - H.vomit(damage) - to_chat(H, "Your stomach reels in pain as you're incapable of holding down all that food!") + if(damage > high_threshold && prob(damage * 0.1 * nutri.volume * nutri.volume)) + body.vomit(damage) + to_chat(body, "Your stomach reels in pain as you're incapable of holding down all that food!") /obj/item/organ/stomach/get_availability(datum/species/S) return !(NOSTOMACH in S.inherent_traits) @@ -88,11 +98,42 @@ SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust") ..() +/obj/item/organ/stomach/bone + desc = "You have no idea what this strange ball of bones does." + +/obj/item/organ/stomach/bone/on_life() + var/datum/reagent/consumable/milk/milk = locate(/datum/reagent/consumable/milk) in reagents.reagent_list + if(milk) + var/mob/living/carbon/body = owner + if(milk.volume > 10) + reagents.remove_reagent(milk.type, milk.volume - 10) + to_chat(owner, "The excess milk is dripping off your bones!") + body.heal_bodypart_damage(1.5,0, 0) + for(var/i in body.all_wounds) + var/datum/wound/iter_wound = i + iter_wound.on_xadone(2) + reagents.remove_reagent(milk.type, milk.metabolization_rate) + return ..() + /obj/item/organ/stomach/plasmaman name = "digestive crystal" icon_state = "stomach-p" desc = "A strange crystal that is responsible for metabolizing the unseen energy force that feeds plasmamen." +/obj/item/organ/stomach/plasmaman/on_life() + var/datum/reagent/consumable/milk/milk = locate(/datum/reagent/consumable/milk) in reagents.reagent_list + if(milk) + var/mob/living/carbon/body = owner + if(milk.volume > 10) + reagents.remove_reagent(milk.type, milk.volume - 10) + to_chat(owner, "The excess milk is dripping off your bones!") + body.heal_bodypart_damage(1.5,0, 0) + for(var/i in body.all_wounds) + var/datum/wound/iter_wound = i + iter_wound.on_xadone(2) + reagents.remove_reagent(milk.type, milk.metabolization_rate) + return ..() + /obj/item/organ/stomach/ethereal name = "biological battery" icon_state = "stomach-p" //Welp. At least it's more unique in functionaliy. diff --git a/code/modules/surgery/stomachpump.dm b/code/modules/surgery/stomachpump.dm index 89c3233720b..a07f45a9f4c 100644 --- a/code/modules/surgery/stomachpump.dm +++ b/code/modules/surgery/stomachpump.dm @@ -15,8 +15,6 @@ /datum/surgery/stomach_pump/can_start(mob/user, mob/living/carbon/target) var/obj/item/organ/stomach/S = target.getorganslot(ORGAN_SLOT_STOMACH) - if(target.stat != DEAD) //shamelessly lifted off the revival surgery but we're looking for the same critera here, a dead, non-husked, revivable patient. - return FALSE if(HAS_TRAIT(target, TRAIT_HUSK)) return FALSE if(!S) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 6ed7f36020f..bd58c70c3f9 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -423,3 +423,18 @@ attack_verb_simple = list("correct", "properly set") tool_behaviour = TOOL_BONESET toolspeed = 1 + +/obj/item/blood_filter + name = "blood filter" + desc = "For filtering the blood." + icon = 'icons/obj/surgery.dmi' + icon_state = "bloodfilter" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' + custom_materials = list(/datum/material/iron=2000, /datum/material/glass=1500, /datum/material/silver=500) + item_flags = SURGICAL_TOOL + w_class = WEIGHT_CLASS_NORMAL + attack_verb_continuous = list("pumps", "siphons") + attack_verb_simple = list("pumps", "siphons") + tool_behaviour = TOOL_BLOODFILTER + toolspeed = 1 diff --git a/icons/mob/inhands/equipment/medical_lefthand.dmi b/icons/mob/inhands/equipment/medical_lefthand.dmi index 2e05ca17cd97c5938084298659561daf8f91ad33..a47b319c5fff2ddea60c809aa10360db22dab8b8 100644 GIT binary patch delta 4676 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 delta 4461 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 delta 4384 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 delta 21223 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