From 0f791e3a45b2e9fa313e49d5d1db9780ec9e75da Mon Sep 17 00:00:00 2001 From: Alphas00 <154434082+Alphas00@users.noreply.github.com> Date: Fri, 7 Jun 2024 00:06:27 +0200 Subject: [PATCH] Water Sponge quirk & Fatness Hiding Rework Tweaks Added the Water Sponge quirk, it makes the user bloat when water is in their system and adds a few extra water-giving interactions to showers, vapors and water applications. Tweaked fatness hiding, application has been separated from adjust_fatness who now calls it. Breathing also calls for hiders recalculations --- GainStation13/code/mechanics/fatness.dm | 24 ++++++--- GainStation13/code/mechanics/water_sponge.dm | 51 +++++++++++++++++++ .../code/obj/items/bluespace_belt.dm | 4 +- code/__DEFINES/traits.dm | 1 + code/modules/surgery/organs/lungs.dm | 1 + tgstation.dme | 1 + 6 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 GainStation13/code/mechanics/water_sponge.dm diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm index c41a0c5c..7cbb51a3 100644 --- a/GainStation13/code/mechanics/fatness.dm +++ b/GainStation13/code/mechanics/fatness.dm @@ -42,14 +42,9 @@ if(client?.prefs?.max_weight) // GS13 fatness_real = min(fatness_real, (client?.prefs?.max_weight - 1)) - if(fat_hiders) //If a character's real fatness is being hidden - var/fatness_over = hiders_calc() //calculate the sum of all hiders - if(client?.prefs?.max_weight) //Check their prefs - fatness_over = min(fatness_over, (client?.prefs?.max_weight - 1)) //And make sure it's not above their preferred max + fatness = fatness_real //Make their current fatness their real fatness - fatness = fatness_real + fatness_over //Then, make their current fatness the sum of their real plus/minus the calculated amount - else //If it's not being hidden - fatness = fatness_real //Make their current fatness their real fatness + hiders_apply() //Check and apply hiders if(client?.prefs?.weight_gain_extreme) xwg_resize() @@ -122,7 +117,7 @@ /mob/living/carbon/proc/hiders_calc() var/hiders_value = 0 - for(var/hider in fat_hiders) + for(var/hider in fat_hiders) var/hide_values = hider:fat_hide(src) if(!islist(hide_values)) hiders_value += hide_values @@ -131,6 +126,15 @@ hiders_value += hide_value return hiders_value +/mob/living/carbon/proc/hiders_apply() + if(fat_hiders) //do we have any hiders active? + var/fatness_over = hiders_calc() //calculate the sum of all hiders + if(client?.prefs?.max_weight) //Check their prefs + fatness_over = min(fatness_over, (client?.prefs?.max_weight - 1)) //And make sure it's not above their preferred max + fatness = fatness_real + fatness_over //Then, make their current fatness the sum of their real plus/minus the calculated amount + if(client?.prefs?.weight_gain_extreme) + xwg_resize() + /mob/living/carbon/proc/xwg_resize() var/xwg_size = sqrt(fatness/FATNESS_LEVEL_BLOB) xwg_size = min(xwg_size, RESIZE_HUGE) @@ -158,3 +162,7 @@ return "Immobile" return "Blob" + +/mob/living/carbon/human/handle_breathing(times_fired) + . = ..() + hiders_apply() diff --git a/GainStation13/code/mechanics/water_sponge.dm b/GainStation13/code/mechanics/water_sponge.dm new file mode 100644 index 00000000..1373a403 --- /dev/null +++ b/GainStation13/code/mechanics/water_sponge.dm @@ -0,0 +1,51 @@ +/datum/quirk/water_sponge + name = "Water Sponge" + desc = "You can hold lots of water in you! Careful with showers!" + value = 0 //ERP quirk + gain_text = "You feel absorbant." + lose_text = "You don't feel absorbant anymore." + category = CATEGORY_FOOD + mob_trait = TRAIT_WATER_SPONGE + +/datum/reagent/water/on_mob_add(mob/living/L, amount) + if(HAS_TRAIT(L, TRAIT_WATER_SPONGE)) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.hider_add(src) + . = ..() + +/datum/reagent/water/on_mob_delete(mob/living/L) + if(HAS_TRAIT(L, TRAIT_WATER_SPONGE)) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.hider_remove(src) + . = ..() + +/datum/reagent/water/reaction_mob(mob/living/M, method, reac_volume) + . = ..() + if(HAS_TRAIT(M, TRAIT_WATER_SPONGE)) + if(method == TOUCH) + M.reagents.add_reagent(/datum/reagent/water, reac_volume/2) + if(method == VAPOR) + M.reagents.add_reagent(/datum/reagent/water, reac_volume/3) + + +/datum/reagent/water/proc/fat_hide(mob/living/carbon/user) + return volume * 3.5 + +/obj/machinery/shower/process() + ..() + for(var/atom/movable/AM in loc) + if(iscarbon(AM)) + if(HAS_TRAIT(AM, TRAIT_WATER_SPONGE)) + var/mob/living/carbon/L = AM + L.reagents.add_reagent(/datum/reagent/water, 3) + +/mob/living/carbon/proc/water_check(datum/gas_mixture/breath) + var/breath_gases = breath.gases + if(breath_gases[/datum/gas/water_vapor]) + if(HAS_TRAIT(src, TRAIT_WATER_SPONGE)) + var/H2O_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/water_vapor]) + reagents.add_reagent(/datum/reagent/water, H2O_pp/10) + breath_gases[/datum/gas/water_vapor] -= H2O_pp + diff --git a/GainStation13/code/obj/items/bluespace_belt.dm b/GainStation13/code/obj/items/bluespace_belt.dm index 8095bad5..c551b18e 100644 --- a/GainStation13/code/obj/items/bluespace_belt.dm +++ b/GainStation13/code/obj/items/bluespace_belt.dm @@ -15,7 +15,7 @@ return var/mob/living/carbon/U = user if(slot == SLOT_BELT) - to_chat(user, "You put the belt around your waist and your mass begins to shrink...") + to_chat(U, "You put the belt around your waist and your mass begins to shrink...") U.hider_add(src) else to_chat(user, "The belt is opened, letting your mass flow out!") @@ -25,8 +25,8 @@ ..() if(!iscarbon(user)) return - to_chat(user, "The belt is opened, letting your mass flow out!") var/mob/living/carbon/U = user + to_chat(U, "The belt is opened, letting your mass flow out!") U.hider_remove(src) /obj/item/bluespace_belt/proc/fat_hide(var/mob/living/carbon/user) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index f513280b..a5ad770e 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -205,6 +205,7 @@ #define TRAIT_STRONGLEGS "strong_legs" #define TRAIT_WEB_WEAVER "web_weaving" #define TRAIT_METAL_CRUNCHER "metal_cruncher" +#define TRAIT_WATER_SPONGE "water_sponge" //Hyper #define TRAIT_MACROPHILE "macrophile" //likes the big diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index dd9db207..d644ffa8 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -102,6 +102,7 @@ /obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H) //TODO: add lung damage = less oxygen gains + H.water_check(breath) //GS13 Water Sponge quirk var/breathModifier = (5-(5*(damage/maxHealth)/2)) //range 2.5 - 5 if((H.status_flags & GODMODE)) return diff --git a/tgstation.dme b/tgstation.dme index a21ddae9..80b2bf8f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3097,6 +3097,7 @@ #include "GainStation13\code\mechanics\metal_cruncher.dm" #include "GainStation13\code\mechanics\spells.dm" #include "GainStation13\code\mechanics\wand.dm" +#include "GainStation13\code\mechanics\water_sponge.dm" #include "GainStation13\code\mechanics\web_weaving.dm" #include "GainStation13\code\mechanics\den abductors\console.dm" #include "GainStation13\code\mechanics\den abductors\purchaseble_goodies.dm"