From 65b6dc762cf79f27abaade067b98067e7b008582 Mon Sep 17 00:00:00 2001 From: Atermonera Date: Wed, 21 Aug 2019 13:40:09 -0800 Subject: [PATCH] Merge pull request #6410 from Mechoid/PrometheanOrgans1 Promethean Organ Tweakening --- code/__defines/mobs.dm | 6 +- .../mob/living/carbon/human/human_powers.dm | 12 +++ .../human/species/station/prometheans.dm | 56 ++++++++++-- code/modules/mob/living/living.dm | 2 +- code/modules/organs/organ.dm | 1 + code/modules/organs/subtypes/slime.dm | 86 ++++++++++++++++++ .../Mechoid - Promethean Organs.yml | 40 ++++++++ icons/obj/surgery.dmi | Bin 33389 -> 33788 bytes 8 files changed, 194 insertions(+), 9 deletions(-) create mode 100644 html/changelogs/Mechoid - Promethean Organs.yml diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 8426edcfcfe..efb94d49631 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -210,13 +210,17 @@ #define O_GBLADDER "gas bladder" #define O_POLYP "polyp segment" #define O_ANCHOR "anchoring ligament" +#define O_REGBRUTE "pneumoregenitor" +#define O_REGBURN "thermoregenitor" +#define O_REGOXY "respiroregenitor" +#define O_REGTOX "toxoregenitor" #define O_ACID "acid gland" #define O_EGG "egg sac" #define O_RESIN "resin spinner" #define O_AREJECT "immune hub" #define O_VENTC "morphoplastic node" #define O_VRLINK "virtual node" -#define O_ALL list(O_STANDARD, O_MOUTH, O_CELL, O_PLASMA, O_HIVE, O_NUTRIENT, O_STRATA, O_RESPONSE, O_GBLADDER, O_POLYP, O_ANCHOR, O_ACID, O_EGG, O_RESIN, O_AREJECT, O_VENTC, O_VRLINK) +#define O_ALL list(O_STANDARD, O_MOUTH, O_CELL, O_PLASMA, O_HIVE, O_NUTRIENT, O_STRATA, O_RESPONSE, O_GBLADDER, O_POLYP, O_ANCHOR, O_REGBRUTE, O_REGBURN, O_REGOXY, O_REGTOX, O_ACID, O_EGG, O_RESIN, O_AREJECT, O_VENTC, O_VRLINK) // External organs, aka limbs #define BP_L_FOOT "l_foot" diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 809a5ef8ade..a3c5e654701 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -286,8 +286,11 @@ nutrition -= 200 for(var/obj/item/organ/I in internal_organs) + if(I.robotic >= ORGAN_ROBOT) // No free robofix. + continue if(I.damage > 0) I.damage = max(I.damage - 30, 0) //Repair functionally half of a dead internal organ. + I.status = 0 // Wipe status, as it's being regenerated from possibly dead. to_chat(src, "You feel a soothing sensation within your [I.name]...") // Replace completely missing limbs. @@ -310,6 +313,15 @@ var/agony_to_apply = round(0.66 * O.max_damage) // 66% of the limb's health is converted into pain. src.apply_damage(agony_to_apply, HALLOSS) + for(var/organtype in species.has_organ) // Replace completely missing internal organs. -After- external ones, so they all should exist. + if(!src.internal_organs_by_name[organtype]) + var/organpath = species.has_organ[organtype] + var/obj/item/organ/Int = new organpath(src, TRUE) + + Int.rejuvenate(TRUE) + + handle_organs() // Update everything + update_icons_body() active_regen = FALSE else diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm index a14db9d9f50..8c745c056e5 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -74,7 +74,13 @@ var/datum/species/shapeshifter/promethean/prometheans genders = list(MALE, FEMALE, NEUTER, PLURAL) unarmed_types = list(/datum/unarmed_attack/slime_glomp) - has_organ = list(O_BRAIN = /obj/item/organ/internal/brain/slime) // Slime core. + + has_organ = list(O_BRAIN = /obj/item/organ/internal/brain/slime, + O_HEART = /obj/item/organ/internal/heart/grey/colormatch/slime, + O_REGBRUTE = /obj/item/organ/internal/regennetwork, + O_REGBURN = /obj/item/organ/internal/regennetwork/burn, + O_REGOXY = /obj/item/organ/internal/regennetwork/oxy, + O_REGTOX = /obj/item/organ/internal/regennetwork/tox) dispersed_eyes = TRUE @@ -197,35 +203,71 @@ var/datum/species/shapeshifter/promethean/prometheans var/nutrition_cost = 0 // The total amount of nutrition drained every tick, when healing var/nutrition_debt = 0 // Holder variable used to store previous damage values prior to healing for use in the nutrition_cost equation. var/starve_mod = 1 // Lowering this lowers healing and increases agony multiplicatively. - if(H.nutrition <= 150) // This is when the icon goes red + + var/strain_negation = 0 // How much agony is being prevented by the + + if(H.nutrition <= 150) // This is when the icon goes red starve_mod = 0.75 if(H.nutrition <= 50) // Severe starvation. Damage repaired beyond this point will cause a stunlock if untreated. starve_mod = 0.5 + var/to_pay = 0 if(regen_brute) nutrition_debt = H.getBruteLoss() H.adjustBruteLoss(-heal_rate * starve_mod) - nutrition_cost += nutrition_debt - H.getBruteLoss() + + to_pay = nutrition_debt - H.getBruteLoss() + + nutrition_cost += to_pay + + var/obj/item/organ/internal/regennetwork/BrReg = H.internal_organs_by_name[O_REGBRUTE] + + if(BrReg) + strain_negation += to_pay * max(0, (1 - BrReg.get_strain_percent())) if(regen_burn) nutrition_debt = H.getFireLoss() H.adjustFireLoss(-heal_rate * starve_mod) - nutrition_cost += nutrition_debt - H.getFireLoss() + + to_pay = nutrition_debt - H.getFireLoss() + + nutrition_cost += to_pay + + var/obj/item/organ/internal/regennetwork/BuReg = H.internal_organs_by_name[O_REGBURN] + + if(BuReg) + strain_negation += to_pay * max(0, (1 - BuReg.get_strain_percent())) if(regen_oxy) nutrition_debt = H.getOxyLoss() H.adjustOxyLoss(-heal_rate * starve_mod) - nutrition_cost += nutrition_debt - H.getOxyLoss() + + to_pay = nutrition_debt - H.getOxyLoss() + + nutrition_cost += to_pay + + var/obj/item/organ/internal/regennetwork/OxReg = H.internal_organs_by_name[O_REGOXY] + + if(OxReg) + strain_negation += to_pay * max(0, (1 - OxReg.get_strain_percent())) if(regen_tox) nutrition_debt = H.getToxLoss() H.adjustToxLoss(-heal_rate * starve_mod) - nutrition_cost += nutrition_debt - H.getToxLoss() + + to_pay = nutrition_debt - H.getToxLoss() + + nutrition_cost += to_pay + + var/obj/item/organ/internal/regennetwork/ToxReg = H.internal_organs_by_name[O_REGTOX] + + if(ToxReg) + strain_negation += to_pay * max(0, (1 - ToxReg.get_strain_percent())) H.nutrition -= (3 * nutrition_cost) //Costs Nutrition when damage is being repaired, corresponding to the amount of damage being repaired. H.nutrition = max(0, H.nutrition) //Ensure it's not below 0. - var/agony_to_apply = ((1 / starve_mod) * nutrition_cost) //Regenerating damage causes minor pain over time. Small injures will be no issue, large ones will cause problems. + var/agony_to_apply = ((1 / starve_mod) * (nutrition_cost - strain_negation)) //Regenerating damage causes minor pain over time, if the organs responsible are nonexistant or too high on strain. Small injures will be no issue, large ones will cause problems. if((starve_mod <= 0.5 && (H.getHalLoss() + agony_to_apply) <= 90) || ((H.getHalLoss() + agony_to_apply) <= 70)) // Will max out at applying halloss at 70, unless they are starving; starvation regeneration will bring them up to a maximum of 120, the same amount of agony a human receives from three taser hits. H.apply_damage(agony_to_apply, HALLOSS) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e5dd8bf63ec..e6fde9860fa 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1060,7 +1060,7 @@ default behaviour is: var/mob/living/carbon/human/H = src if(!H.isSynthetic()) var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"] - if(L.is_broken()) + if(!L || L.is_broken()) blood_vomit = 1 Stun(5) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 579e7776b79..215ef65ced8 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -78,6 +78,7 @@ var/list/organ_cache = list() if(E.internal_organs == null) E.internal_organs = list() E.internal_organs |= src + H.internal_organs_by_name[organ_tag] = src if(dna) if(!blood_DNA) blood_DNA = list() diff --git a/code/modules/organs/subtypes/slime.dm b/code/modules/organs/subtypes/slime.dm index f22b90caea2..5fb54a21b45 100644 --- a/code/modules/organs/subtypes/slime.dm +++ b/code/modules/organs/subtypes/slime.dm @@ -56,3 +56,89 @@ max_damage = 30 encased = 0 spread_dam = 1 + +/* + * Internal Slime organs. + */ + +/obj/item/organ/internal/heart/grey/colormatch/slime + name = "pneumatic network" + desc = "A disgusting sac of goo." + icon_state = "sac_slime" + dead_icon = null + standard_pulse_level = PULSE_NONE + +/obj/item/organ/internal/heart/grey/colormatch/slime/process() + ..() + if(!(QDELETED(src)) && src.loc != owner) + visible_message("\The [src] splatters!") + var/turf/T = get_turf(src) + var/obj/effect/decal/cleanable/blood/B = new (T) + + B.basecolor = src.color + B.update_icon() + qdel(src) + +/obj/item/organ/internal/regennetwork + name = "pneumoregenesis network" + parent_organ = BP_TORSO + organ_tag = O_REGBRUTE + + icon_state = "sac_slime" + + var/strain = 0 // The amount of stress this organ is under. Capped at min_broken_damage, usually half its max damage. + + var/last_strain_increase = 0 // World time of the last increase in strain. + var/strain_regen_cooldown = 5 MINUTES + +/obj/item/organ/internal/regennetwork/Initialize() + ..() + var/mob/living/carbon/human/H = null + spawn(15) + if(ishuman(owner)) + H = owner + color = H.species.get_blood_colour(H) + +/obj/item/organ/internal/regennetwork/proc/get_strain_percent(var/cost) + adjust_strain(cost) + + if((status & ORGAN_CUT_AWAY) || (status & ORGAN_BROKEN) || (status & ORGAN_DEAD)) + return 1 + + return round((strain / min_broken_damage) * 10) / 10 + +/obj/item/organ/internal/regennetwork/proc/adjust_strain(var/amount) + if(amount < 0 && world.time < (last_strain_increase + strain_regen_cooldown)) + return + + else if(amount > 0) + last_strain_increase = world.time + + strain = CLAMP(strain + amount, 0, min_broken_damage) + +/obj/item/organ/internal/regennetwork/process() + ..() + + if(!(QDELETED(src)) && src.loc != owner) + visible_message("\The [src] splatters!") + var/turf/T = get_turf(src) + var/obj/effect/decal/cleanable/blood/B = new (T) + + B.basecolor = src.color + B.update_icon() + qdel(src) + + if(src && !is_bruised()) + adjust_strain(-0.25 * max(0, (min_broken_damage - damage) / min_broken_damage)) // Decrease the current strain with respect to the current strain level. + +/obj/item/organ/internal/regennetwork/burn + name = "thermoregenesis network" + organ_tag = O_REGBURN + +/obj/item/organ/internal/regennetwork/oxy + name = "respiroregenesis network" + organ_tag = O_REGOXY + +/obj/item/organ/internal/regennetwork/tox + name = "toxoregenesis network" + organ_tag = O_REGTOX diff --git a/html/changelogs/Mechoid - Promethean Organs.yml b/html/changelogs/Mechoid - Promethean Organs.yml new file mode 100644 index 00000000000..c579478d5a9 --- /dev/null +++ b/html/changelogs/Mechoid - Promethean Organs.yml @@ -0,0 +1,40 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Mechoid + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added multiple new organs for Prometheans. Removing them will cause them to take large amounts of Toxloss untill they are Regenerated using the active regeneration verb." + - rscadd: "Organ: pneumatic network, a series of skeletal tubes with high pressure used to move nutrients and waste." + - rscadd: "Organs: -regenesis systems, different 'networks' of clumped cellular matter that allow Prometheans to recover rapidly from small injuries. Large or numerous injuries cause un-needed stress, and pain." + - bugfix: "Internal organs now properly add themselves to the internal organ-by-name list, the one referenced 99.9% of the time." + - tweak: "Active regeneration will now replace internal organs if they are nonexistant, as it does for limbs." diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 12bededf90328f7738e70f466b5a75d9f56f49c8..5d28658eed7ed17823433f9aafcf392e58b59e46 100644 GIT binary patch delta 13465 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