From 75244c75561b526d8c9c3f69745d10c5307111aa Mon Sep 17 00:00:00 2001
From: Alphas00 <154434082+Alphas00@users.noreply.github.com>
Date: Wed, 5 Jun 2024 12:29:39 +0200
Subject: [PATCH 1/9] Metal Cruncher quirk
Adds the Metal Cruncher quirk, allowing those who have it to eat certain items and gain some nutrition from them
---
.../code/mechanics/metal_cruncher.dm | 87 +++++++++++++++++++
code/__DEFINES/traits.dm | 1 +
tgstation.dme | 3 +-
3 files changed, 90 insertions(+), 1 deletion(-)
create mode 100644 GainStation13/code/mechanics/metal_cruncher.dm
diff --git a/GainStation13/code/mechanics/metal_cruncher.dm b/GainStation13/code/mechanics/metal_cruncher.dm
new file mode 100644
index 00000000..2dcd57f9
--- /dev/null
+++ b/GainStation13/code/mechanics/metal_cruncher.dm
@@ -0,0 +1,87 @@
+/datum/quirk/metal_cruncher
+ name = "Metal Cruncher"
+ desc = "You can eat most minerals. Brush your teeth."
+ value = 0 //ERP quirk
+ gain_text = "You feel like you could eat steel."
+ lose_text = "Your teeth hurt too much..."
+ category = CATEGORY_FOOD
+ mob_trait = TRAIT_METAL_CRUNCHER
+
+/obj/item/stack
+ var/crunch_value = 0
+
+/obj/item/stack/attack(mob/living/M, mob/living/user)
+ if(HAS_TRAIT(M, TRAIT_METAL_CRUNCHER))
+ if(crunch_value > 0)
+ if(M == user)
+ user.visible_message("[user] crunches on some of [src].", "You crunch on some of [src].")
+ else
+ M.visible_message("[user] attempts to feed some of [src] to [M].", "[user] attempts to feed some of [src] to [M].")
+ playsound(M,'sound/items/eatfood.ogg', rand(10,50), 1)
+ use(1)
+ M.nutrition += crunch_value
+ if(HAS_TRAIT(M, TRAIT_VORACIOUS))
+ M.changeNext_move(CLICK_CD_MELEE * 0.5)
+ return
+ . = ..()
+
+/obj/item/stack/cable_coil
+ crunch_value = 2
+/obj/item/stack/sheet/metal
+ crunch_value = 4
+/obj/item/stack/rods
+ crunch_value = 2
+/obj/item/stack/sheet/glass
+ crunch_value = 2
+/obj/item/stack/sheet/rglass
+ crunch_value = 4
+/obj/item/stack/sheet/plasmaglass
+ crunch_value = 12
+/obj/item/stack/sheet/plasmarglass
+ crunch_value = 14
+/obj/item/stack/sheet/titaniumglass
+ crunch_value = 27
+/obj/item/stack/sheet/plastitaniumglass
+ crunch_value = 37
+/obj/item/stack/sheet/plasteel
+ crunch_value = 14
+/obj/item/stack/sheet/durathread
+ crunch_value = 10
+/obj/item/stack/sheet/plastic
+ crunch_value = 2
+/obj/item/stack/sheet/micro_bricks
+ crunch_value = 1
+/obj/item/stack/sheet/cardboard
+ crunch_value = 1
+/obj/item/stack/sheet/mineral/calorite
+ crunch_value = 100
+/obj/item/stack/sheet/mineral/sandstone
+ crunch_value = 1
+/obj/item/stack/sheet/mineral/uranium
+ crunch_value = 50
+/obj/item/stack/sheet/mineral/plasma
+ crunch_value = 10
+/obj/item/stack/sheet/mineral/gold
+ crunch_value = 20
+/obj/item/stack/sheet/mineral/silver
+ crunch_value = 15
+/obj/item/stack/sheet/mineral/titanium
+ crunch_value = 25
+/obj/item/stack/sheet/mineral/plastitanium
+ crunch_value = 35
+/obj/item/stack/sheet/mineral/adamantine
+ crunch_value = 75
+/obj/item/stack/sheet/mineral/mythril
+ crunch_value = 75
+/obj/item/stack/sheet/mineral/coal
+ crunch_value = 50
+/obj/item/stack/sheet/mineral/wood
+ crunch_value = 4
+/obj/item/stack/sheet/mineral/bamboo
+ crunch_value = 10
+/obj/item/stack/sheet/mineral/shadoww
+ crunch_value = 15
+/obj/item/stack/sheet/mineral/gmushroom
+ crunch_value = 15
+/obj/item/stack/sheet/mineral/plaswood
+ crunch_value = 15
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 1778d470..f513280b 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -204,6 +204,7 @@
#define TRAIT_WEAKLEGS "weak_legs"
#define TRAIT_STRONGLEGS "strong_legs"
#define TRAIT_WEB_WEAVER "web_weaving"
+#define TRAIT_METAL_CRUNCHER "metal_cruncher"
//Hyper
#define TRAIT_MACROPHILE "macrophile" //likes the big
diff --git a/tgstation.dme b/tgstation.dme
index 65903ef3..a21ddae9 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2784,7 +2784,6 @@
#include "code\modules\research\nanites\nanite_program_hub.dm"
#include "code\modules\research\nanites\nanite_programmer.dm"
#include "code\modules\research\nanites\nanite_programs.dm"
-#include "code\modules\research\nanites\nanite_programs\protocols.dm"
#include "code\modules\research\nanites\nanite_remote.dm"
#include "code\modules\research\nanites\program_disks.dm"
#include "code\modules\research\nanites\public_chamber.dm"
@@ -2796,6 +2795,7 @@
#include "code\modules\research\nanites\extra_settings\type.dm"
#include "code\modules\research\nanites\nanite_programs\buffing.dm"
#include "code\modules\research\nanites\nanite_programs\healing.dm"
+#include "code\modules\research\nanites\nanite_programs\protocols.dm"
#include "code\modules\research\nanites\nanite_programs\rogue.dm"
#include "code\modules\research\nanites\nanite_programs\sensor.dm"
#include "code\modules\research\nanites\nanite_programs\suppression.dm"
@@ -3094,6 +3094,7 @@
#include "GainStation13\code\mechanics\fatness.dm"
#include "GainStation13\code\mechanics\fattening_trap.dm"
#include "GainStation13\code\mechanics\infestation.dm"
+#include "GainStation13\code\mechanics\metal_cruncher.dm"
#include "GainStation13\code\mechanics\spells.dm"
#include "GainStation13\code\mechanics\wand.dm"
#include "GainStation13\code\mechanics\web_weaving.dm"
From 5fd2d27c90a23a66a7debeb4231d0b239d8bec10 Mon Sep 17 00:00:00 2001
From: Metis <100518708+sheepishgoat@users.noreply.github.com>
Date: Wed, 5 Jun 2024 19:01:50 -0400
Subject: [PATCH 2/9] prefs
---
GainStation13/code/mechanics/fatness.dm | 4 ++++
GainStation13/code/modules/client/preferences/preferences.dm | 2 ++
code/__DEFINES/misc.dm | 3 ++-
code/modules/client/preferences.dm | 3 +++
code/modules/client/preferences_savefile.dm | 2 ++
5 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm
index 5d6cc33f..fa6d0040 100644
--- a/GainStation13/code/mechanics/fatness.dm
+++ b/GainStation13/code/mechanics/fatness.dm
@@ -96,6 +96,10 @@
if(!client?.prefs?.weight_gain_viruses)
return FALSE
+ if(FATTENING_TYPE_NANITES)
+ if(!client?.prefs?.weight_gain_nanites)
+ return FALSE
+
if(FATTENING_TYPE_WEIGHT_LOSS)
if(HAS_TRAIT(src, TRAIT_WEIGHT_LOSS_IMMUNE))
return FALSE
diff --git a/GainStation13/code/modules/client/preferences/preferences.dm b/GainStation13/code/modules/client/preferences/preferences.dm
index 3a3e920c..1175fde5 100644
--- a/GainStation13/code/modules/client/preferences/preferences.dm
+++ b/GainStation13/code/modules/client/preferences/preferences.dm
@@ -13,6 +13,8 @@
var/weight_gain_magic = FALSE
///Weight gain from viruses
var/weight_gain_viruses = FALSE
+ ///Weight gain from nanites
+ var/weight_gain_nanites = FALSE
///Blueberry Inflation
var/blueberry_inflation = FALSE
///Extreme weight gain
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index d51813ec..5ea0dada 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -527,6 +527,7 @@ GLOBAL_LIST_INIT(lighter_reskins, list(ZIPPO_SKIN_PLAIN = "plain", ZIPPO_SKIN_DA
#define FATTENING_TYPE_WEAPON "weapon"
#define FATTENING_TYPE_MAGIC "magic"
#define FATTENING_TYPE_VIRUS "virus"
-#define FATTENING_TYPE_WEIGHT_LOSS "weight_loss"
+#define FATTENING_TYPE_NANITES "nanites"
+#define FATTENING_TYPE_WEIGHT_LOSS "weight_loss"
#define FATNESS_TO_WEIGHT_RATIO 0.25
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index a33d2a3c..b2e83199 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1063,6 +1063,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Weight Gain - Weapons:[weight_gain_weapons == TRUE ? "Enabled" : "Disabled"]
"
dat += "Weight Gain - Magic:[weight_gain_magic == TRUE ? "Enabled" : "Disabled"]
"
dat += "Weight Gain - Viruses:[weight_gain_viruses == TRUE ? "Enabled" : "Disabled"]
"
+ dat += "Weight Gain - Nanites:[weight_gain_nanites == TRUE ? "Enabled" : "Disabled"]
"
dat += "Blueberry Inflation:[blueberry_inflation == TRUE ? "Enabled" : "Disabled"]
"
dat += "
GS13 Gameplay Preferences
"
@@ -2636,6 +2637,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
weight_gain_magic = !weight_gain_magic
if("weight_gain_viruses")
weight_gain_viruses = !weight_gain_viruses
+ if("weight_gain_nanites")
+ weight_gain_nanites = !weight_gain_nanites
if("weight_gain_extreme")
weight_gain_extreme = !weight_gain_extreme
if("noncon_weight_gain")
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 4e272785..959b10a9 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -152,6 +152,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["weight_gain_items"] >> weight_gain_items
S["weight_gain_magic"] >> weight_gain_magic
S["weight_gain_viruses"] >> weight_gain_viruses
+ S["weight_gain_nanites"] >> weight_gain_nanites
S["weight_gain_weapons"] >> weight_gain_weapons
S["weight_gain_extreme"] >> weight_gain_extreme
S["wg_rate"] >> wg_rate
@@ -293,6 +294,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["weight_gain_items"], weight_gain_items)
WRITE_FILE(S["weight_gain_magic"], weight_gain_magic)
WRITE_FILE(S["weight_gain_viruses"], weight_gain_viruses)
+ WRITE_FILE(S["weight_gain_nanites"], weight_gain_nanites)
WRITE_FILE(S["weight_gain_chems"], weight_gain_chems)
WRITE_FILE(S["weight_gain_weapons"], weight_gain_weapons)
WRITE_FILE(S["weight_gain_extreme"], weight_gain_extreme)
From 33060e1b876a0ba144a6a92a288add8e4899bda7 Mon Sep 17 00:00:00 2001
From: Metis <100518708+sheepishgoat@users.noreply.github.com>
Date: Wed, 5 Jun 2024 19:37:50 -0400
Subject: [PATCH 3/9] Update fattening.dm
---
.../modules/research/nanites/nanite_programs/fattening.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/GainStation13/code/modules/research/nanites/nanite_programs/fattening.dm b/GainStation13/code/modules/research/nanites/nanite_programs/fattening.dm
index 8bada8b6..e020989e 100644
--- a/GainStation13/code/modules/research/nanites/nanite_programs/fattening.dm
+++ b/GainStation13/code/modules/research/nanites/nanite_programs/fattening.dm
@@ -98,7 +98,7 @@
var/mob/living/carbon/C = host_mob
if(BFI.get_value() > 0)
if(consume_nanites(BFI.get_value()))
- C.adjust_fatness(BFI.get_value(), FATTENING_TYPE_ITEM)
+ C.adjust_fatness(BFI.get_value(), FATTENING_TYPE_NANITES)
else
if(consume_nanites(-(BFI.get_value())))
C.adjust_fatness(BFI.get_value(), FATTENING_TYPE_WEIGHT_LOSS)
@@ -150,7 +150,7 @@
/datum/nanite_program/bwomf/on_trigger(comm_message)
if(iscarbon(host_mob))
var/mob/living/carbon/C = host_mob
- C.adjust_fatness(100, FATTENING_TYPE_ITEM)
+ C.adjust_fatness(100, FATTENING_TYPE_NANITES)
to_chat(C, "[pick("Your belly expands quickly!", "Fat envelops you further!", "Lard grows all over you!")]")
/datum/design/nanites/bwomf
From 213b1d8104bab00a7a6c9ce8f65b414c7fba4faa Mon Sep 17 00:00:00 2001
From: Metis <100518708+sheepishgoat@users.noreply.github.com>
Date: Wed, 5 Jun 2024 23:22:40 -0400
Subject: [PATCH 4/9] wew
---
.../code/machinery/fattening_turret.dm | 4 +--
GainStation13/code/mobs/chocoslime.dm | 6 ++---
GainStation13/code/obj/weapons/fatoray.dm | 26 +++++++++----------
_maps/map_files/Mining/Lavaland_Lower.dmm | 4 +--
_maps/map_files/generic/CentCom.dmm | 4 +--
5 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/GainStation13/code/machinery/fattening_turret.dm b/GainStation13/code/machinery/fattening_turret.dm
index 899bcf59..c9281503 100644
--- a/GainStation13/code/machinery/fattening_turret.dm
+++ b/GainStation13/code/machinery/fattening_turret.dm
@@ -8,7 +8,7 @@
scan_range = 9
req_access = list(ACCESS_SYNDICATE)
mode = TURRET_LETHAL
- lethal_projectile = /obj/item/projectile/energy/fattening
+ lethal_projectile = /obj/item/projectile/beam/fattening
lethal_projectile_sound = 'sound/weapons/laser.ogg'
icon_state = "turretCover"
base_icon_state = "standard"
@@ -17,7 +17,7 @@
/obj/machinery/porta_turret/fattening/heavy
name = "Heavy Fatoray Turret"
- lethal_projectile = /obj/item/projectile/energy/fattening/cannon
+ lethal_projectile = /obj/item/projectile/beam/fattening/cannon
shot_delay = 30
/obj/machinery/porta_turret/fattening/ComponentInitialize()
diff --git a/GainStation13/code/mobs/chocoslime.dm b/GainStation13/code/mobs/chocoslime.dm
index 0fac4752..a800ea1b 100644
--- a/GainStation13/code/mobs/chocoslime.dm
+++ b/GainStation13/code/mobs/chocoslime.dm
@@ -57,7 +57,7 @@
icon_dead = "icecream_monster_dead"
icon_gib = "icecream_monster_dead"
move_to_delay = 10
- projectiletype = /obj/item/projectile/energy/fattening/icecream
+ projectiletype = /obj/item/projectile/beam/fattening/icecream
projectilesound = 'sound/weapons/pierce.ogg'
ranged = 1
ranged_message = "schlorps"
@@ -74,7 +74,7 @@
gold_core_spawnable = HOSTILE_SPAWN
butcher_results = list(/obj/item/reagent_containers/food/snacks/icecream = 4)
-/obj/item/projectile/energy/fattening/icecream //might as well make use of this thing to not make ton of different variants of the same thing
+/obj/item/projectile/beam/fattening/icecream //might as well make use of this thing to not make ton of different variants of the same thing
name = "ice cream blob"
icon = 'GainStation13/icons/mob/candymonster.dmi'
icon_state = "icecream_projectile"
@@ -88,7 +88,7 @@
var/food_fed = /datum/reagent/consumable/nutriment
var/fullness_add = 30
-/obj/item/projectile/energy/fattening/icecream/on_hit(atom/target, blocked)
+/obj/item/projectile/beam/fattening/icecream/on_hit(atom/target, blocked)
. = ..()
var/mob/living/carbon/L = target
if(L.client?.prefs?.weight_gain_weapons)
diff --git a/GainStation13/code/obj/weapons/fatoray.dm b/GainStation13/code/obj/weapons/fatoray.dm
index 8de22d38..77aaf313 100644
--- a/GainStation13/code/obj/weapons/fatoray.dm
+++ b/GainStation13/code/obj/weapons/fatoray.dm
@@ -16,10 +16,10 @@
/obj/item/ammo_casing/energy/fattening
name = "fattening weapon lens"
select_name = "fatten"
- projectile_type = /obj/item/projectile/energy/fattening
+ projectile_type = /obj/item/projectile/beam/fattening
///The base projectile used by the fatoray
-/obj/item/projectile/energy/fattening
+/obj/item/projectile/beam/fattening
name = "fat energy"
icon = 'GainStation13/icons/obj/fatoray.dmi'
icon_state = "ray"
@@ -27,12 +27,12 @@
ricochet_chance = 80
hitsound = 'sound/weapons/sear.ogg'
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
- is_reflectable = TRUE
+ damage = 0
+ eyeblur = 0
+ damage_type = BURN
+ flag = "energy"
light_range = 2
light_color = LIGHT_COLOR_ORANGE
- ricochets_max = 50
- ricochet_chance = 80
- is_reflectable = TRUE
///How much fat is added to the target mob?
var/fat_added = 100
@@ -58,9 +58,9 @@
name = "one-shot fattening weapon lens"
select_name = "fatten"
e_cost = 100
- projectile_type = /obj/item/projectile/energy/fattening/cannon
+ projectile_type = /obj/item/projectile/beam/fattening/cannon
-/obj/item/projectile/energy/fattening/cannon
+/obj/item/projectile/beam/fattening/cannon
name = "fat energy"
icon = 'GainStation13/icons/obj/fatoray.dmi'
icon_state = "cannon_ray"
@@ -85,10 +85,10 @@
/obj/item/ammo_casing/energy/fattening/weak
name = "budget fattening weapon lens"
select_name = "fatten"
- projectile_type = /obj/item/projectile/energy/fattening/weak
+ projectile_type = /obj/item/projectile/beam/fattening/weak
///The base projectile used by the fatoray
-/obj/item/projectile/energy/fattening/weak
+/obj/item/projectile/beam/fattening/weak
name = "fat energy"
icon = 'GainStation13/icons/obj/fatoray.dmi'
icon_state = "ray"
@@ -115,9 +115,9 @@
name = "one-shot fattening weapon lens"
select_name = "fatten"
e_cost = 300
- projectile_type = /obj/item/projectile/energy/fattening/cannon_weak
+ projectile_type = /obj/item/projectile/beam/fattening/cannon_weak
-/obj/item/projectile/energy/fattening/cannon_weak
+/obj/item/projectile/beam/fattening/cannon_weak
name = "fat energy"
icon = 'GainStation13/icons/obj/fatoray.dmi'
icon_state = "cannon_ray"
@@ -129,7 +129,7 @@
///////////////////////////////////////
-/obj/item/projectile/energy/fattening/on_hit(atom/target, blocked)
+/obj/item/projectile/beam/fattening/on_hit(atom/target, blocked)
. = ..()
var/mob/living/carbon/gainer = target
diff --git a/_maps/map_files/Mining/Lavaland_Lower.dmm b/_maps/map_files/Mining/Lavaland_Lower.dmm
index 4f419ae9..7a841e8f 100644
--- a/_maps/map_files/Mining/Lavaland_Lower.dmm
+++ b/_maps/map_files/Mining/Lavaland_Lower.dmm
@@ -7489,7 +7489,7 @@
dir = 2;
id = "fatchamber"
},
-/obj/item/projectile/energy/fattening/cannon,
+/obj/item/projectile/beam/fattening/cannon,
/turf/open/floor/plating,
/area/xenoarch/caloriteresearch_powered)
"tf" = (
@@ -7785,7 +7785,7 @@
/turf/open/floor/plasteel/dark,
/area/xenoarch/gen)
"uG" = (
-/obj/item/projectile/energy/fattening/cannon,
+/obj/item/projectile/beam/fattening/cannon,
/turf/open/floor/mineral/calorite,
/area/xenoarch/caloriteresearch_powered)
"uH" = (
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 0c463ca6..ac5f5c81 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -2504,7 +2504,7 @@
"rRn" = (/obj/machinery/door/airlock/public{dir = 4},/turf/open/floor/plasteel/freezer,/area/fatlab)
"rRu" = (/obj/effect/turf_decal/stripes/white,/turf/open/floor/plasteel/dark,/area/fatlab)
"rRy" = (/obj/effect/turf_decal/stripes/asteroid/line,/obj/effect/turf_decal/tile/brown{dir = 8},/obj/effect/turf_decal/tile/brown,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/fatlab)
-"rSj" = (/obj/item/projectile/energy/fattening/cannon_weak,/turf/open/floor/plasteel,/area/awaymission/jungleresort)
+"rSj" = (/obj/item/projectile/beam/fattening/cannon_weak,/turf/open/floor/plasteel,/area/awaymission/jungleresort)
"rSF" = (/obj/machinery/vending/magivend,/turf/open/floor/engine/cult,/area/wizard_station)
"rSQ" = (/obj/structure/table/reinforced,/obj/item/kitchen/knife,/obj/item/reagent_containers/food/condiment/saltshaker{pixel_x = -8; pixel_y = 5},/obj/item/reagent_containers/food/condiment/peppermill{pixel_x = -8},/turf/open/floor/plasteel/cafeteria,/area/centcom/ferry)
"rSZ" = (/obj/machinery/light/small{dir = 8},/obj/structure/toilet,/turf/open/floor/plasteel/white,/area/centcom/ferry)
@@ -2607,7 +2607,7 @@
"sBN" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/item/reagent_containers/food/condiment/saltshaker{pixel_x = -8; pixel_y = 5},/obj/item/reagent_containers/food/condiment/peppermill{pixel_x = -8},/obj/item/reagent_containers/food/drinks/britcup,/obj/effect/turf_decal/bot,/turf/open/floor/plasteel,/area/tdome/tdomeobserve)
"sCW" = (/obj/structure/table/wood,/obj/structure/window/reinforced/spawner/north,/obj/structure/window/reinforced/spawner/west,/obj/item/rupee{desc = "A gift, right?"},/obj/item/clothing/accessory/medal/gato_badge/employee,/turf/open/floor/plasteel/grimy,/area/centcom/ferry)
"sCX" = (/obj/effect/turf_decal/stripes/corner{dir = 8},/turf/open/floor/plating,/area/syndicate_mothership)
-"sDg" = (/obj/item/projectile/energy/fattening/cannon_weak,/turf/open/floor/mineral/calorite/hide,/area/awaymission/jungleresort)
+"sDg" = (/obj/item/projectile/beam/fattening/cannon_weak,/turf/open/floor/mineral/calorite/hide,/area/awaymission/jungleresort)
"sDi" = (/obj/effect/turf_decal/stripes/line,/obj/effect/turf_decal/tile/blue{dir = 4},/turf/open/floor/plasteel/dark,/area/ctf)
"sDj" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/fatlab)
"sDG" = (/obj/structure/rack/shelf,/obj/item/vending_refill/clothing,/obj/item/vending_refill/kink,/turf/open/floor/plasteel/dark,/area/fatlab)
From adc59230340b40ba95fde355b6b1b1d3b6828b7f Mon Sep 17 00:00:00 2001
From: Alphas00 <154434082+Alphas00@users.noreply.github.com>
Date: Thu, 6 Jun 2024 12:49:33 +0200
Subject: [PATCH 5/9] Fatness Hiding Rework
Fatness hiding has been reworked to allow multiple items that add or reduce a character's fatness value. A thing that wishes to use this system needs to add and remove itself to a character's hiding list (hider_add(), hider_remove()) based on that thing's conditions. Then it needs to have a /proc/fat_hide() that will return the value by which to shift fatness
---
.../datums/diseases/advance/symptoms/berry.dm | 8 ++--
GainStation13/code/mechanics/fatness.dm | 40 ++++++++++---------
.../code/obj/items/bluespace_belt.dm | 15 +++++--
GainStation13/code/obj/items/holy.dm | 18 ++++-----
.../code/modules/vore/eating/belly_obj_vr.dm | 36 ++++++++++-------
.../code/modules/vore/eating/bellymodes_vr.dm | 22 ++++++----
6 files changed, 83 insertions(+), 56 deletions(-)
diff --git a/GainStation13/code/datums/diseases/advance/symptoms/berry.dm b/GainStation13/code/datums/diseases/advance/symptoms/berry.dm
index cf387b79..444ccd0b 100644
--- a/GainStation13/code/datums/diseases/advance/symptoms/berry.dm
+++ b/GainStation13/code/datums/diseases/advance/symptoms/berry.dm
@@ -57,7 +57,7 @@
affected_mob.reagents.remove_reagent(/datum/reagent/berry_juice_infection, volume)
return
picked_color = pick(random_color_list)
- affected_mob.fat_hide(affected_mob.fatness_real + ((3 * (volume * volume))/50), src)
+ affected_mob.hider_add(src)
else
L.reagents.remove_reagent(/datum/reagent/berry_juice_infection, volume)
..()
@@ -68,7 +68,6 @@
return
if(!no_mob_color)
M.add_atom_colour(picked_color, WASHABLE_COLOUR_PRIORITY)
- M.fat_hide(M.fatness_real + ((3 * (volume * volume))/50), src)
M.adjust_fatness(1, FATTENING_TYPE_CHEM)
..()
@@ -76,7 +75,7 @@
if(!iscarbon(L))
return
var/mob/living/carbon/C = L
- C.fat_show()
+ C.hider_remove(src)
/obj/item/reagent_containers/glass/attack(mob/M, mob/user, obj/target)
if(M.reagents.get_reagent_amount(/datum/reagent/berry_juice_infection) > 0 && (reagents.total_volume + min(amount_per_transfer_from_this, 10)) <= volume)
@@ -89,3 +88,6 @@
to_chat(user, "You get some juice out of you...")
return
..()
+
+/datum/reagent/berry_juice_infection/proc/fat_hide()
+ return (3 * (volume * volume))/50
diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm
index 5d6cc33f..608f8ee4 100644
--- a/GainStation13/code/mechanics/fatness.dm
+++ b/GainStation13/code/mechanics/fatness.dm
@@ -5,12 +5,10 @@
// -fatness_real is the value a mob is actually at, even if it's being hidden. For permanent changes, use this one
//What level of fatness is the parent mob currently at?
var/fatness = 0
- //Is something hiding the actual fatness value of a character?
- var/fat_hider = FALSE
+ //The list of items/effects that are being added/subtracted from our real fatness
+ var/fat_hiders = list()
//The actual value a mob is at. Is equal to fatness if fat_hider is FALSE.
var/fatness_real = 0
- //The value a mob's fatness is being overwritten with if fat_hider has something in it.
- var/fatness_over = 0
///At what rate does the parent mob gain weight? 1 = 100%
var/weight_gain_rate = 1
//At what rate does the parent mob lose weight? 1 = 100%
@@ -44,11 +42,12 @@
if(client?.prefs?.max_weight) // GS13
fatness_real = min(fatness_real, (client?.prefs?.max_weight - 1))
- if(fat_hider) //If a character's real fatness is being hidden
+ 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_over //Then, make that value their current 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
@@ -102,23 +101,28 @@
return TRUE
-/mob/living/carbon/proc/fat_hide(hide_amount, hide_source) //If something wants to hide fatness_real, it'll call this method and give it an amount to cover it with
- fat_hider = hide_source
- fatness_over = hide_amount
- fatness = fatness_over //To update a mob's fatness with the new amount to be shown immediately
- if(client?.prefs?.weight_gain_extreme)
- xwg_resize()
+/mob/living/carbon/proc/hider_add(hide_source)
+ if(!(hide_source in fat_hiders))
+ fat_hiders += hide_source
return TRUE
-/mob/living/carbon/proc/fat_show() //If something that hides fatness is removed or expires, it'll call this method
- fat_hider = FALSE
- fatness = fatness_real //To update a mob's fatness with their real one immediately
- if(client?.prefs?.weight_gain_extreme)
- xwg_resize()
-
+/mob/living/carbon/proc/hider_remove(hide_source)
+ if(hide_source in fat_hiders)
+ fat_hiders -= hide_source
return TRUE
+/mob/living/carbon/proc/hiders_calc()
+ var/hiders_value = 0
+ for(var/hider in fat_hiders)
+ var/hide_values = hider:fat_hide(src)
+ if(!islist(hide_values))
+ hiders_value += hide_values
+ else
+ for(var/hide_value in hide_values)
+ hiders_value += hide_value
+ return hiders_value
+
/mob/living/carbon/proc/xwg_resize()
var/xwg_size = sqrt(fatness/FATNESS_LEVEL_BLOB)
xwg_size = min(xwg_size, RESIZE_HUGE)
diff --git a/GainStation13/code/obj/items/bluespace_belt.dm b/GainStation13/code/obj/items/bluespace_belt.dm
index db676eb1..8095bad5 100644
--- a/GainStation13/code/obj/items/bluespace_belt.dm
+++ b/GainStation13/code/obj/items/bluespace_belt.dm
@@ -8,20 +8,27 @@
equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
- var/hide_value = 0
/obj/item/bluespace_belt/equipped(mob/user, slot)
..()
+ if(!iscarbon(user))
+ 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...")
- U.fat_hide(hide_value, src)
+ U.hider_add(src)
else
to_chat(user, "The belt is opened, letting your mass flow out!")
- U.fat_show()
+ U.hider_remove(src)
/obj/item/bluespace_belt/dropped(mob/user)
..()
+ if(!iscarbon(user))
+ return
to_chat(user, "The belt is opened, letting your mass flow out!")
var/mob/living/carbon/U = user
- U.fat_show()
+ U.hider_remove(src)
+
+/obj/item/bluespace_belt/proc/fat_hide(var/mob/living/carbon/user)
+ return -(user.fatness_real - 1)
+
diff --git a/GainStation13/code/obj/items/holy.dm b/GainStation13/code/obj/items/holy.dm
index f1ae3358..b2207b6d 100644
--- a/GainStation13/code/obj/items/holy.dm
+++ b/GainStation13/code/obj/items/holy.dm
@@ -2,9 +2,9 @@
. = ..()
if(iscarbon(target))
var/mob/living/carbon/T = target
- if(T.fat_hider)
- if(isitem(T.fat_hider))
- var/obj/item/O = T.fat_hider
+ for(var/hider in T.fat_hiders)
+ if(isitem(hider))
+ var/obj/item/O = hider
T.dropItemToGround(O)
if(T.cursed_fat == 1)
T.cursed_fat = 0
@@ -14,9 +14,9 @@
. = ..()
if(iscarbon(M))
var/mob/living/carbon/T = M
- if(T.fat_hider)
- if(isitem(T.fat_hider))
- var/obj/item/O = T.fat_hider
+ for(var/hider in T.fat_hiders)
+ if(isitem(hider))
+ var/obj/item/O = hider
T.dropItemToGround(O)
if(T.cursed_fat == 1)
T.cursed_fat = 0
@@ -24,9 +24,9 @@
/datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M)
. = ..()
- if(M.fat_hider)
- if(isitem(M.fat_hider))
- var/obj/item/O = M.fat_hider
+ for(var/hider in M.fat_hiders)
+ if(isitem(hider))
+ var/obj/item/O = hider
M.dropItemToGround(O)
if(M.cursed_fat == 1)
M.cursed_fat = 0
diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
index 2b46c376..7efa693e 100644
--- a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
@@ -227,10 +227,9 @@
items_preserved.Cut()
owner.update_icons()
- var/mob/living/carbon/predator = owner
- if(iscarbon(predator))
- if(digest_mode == DM_FATTEN && predator.fat_hider == src)
- predator.fat_show()
+ if(iscarbon(owner))
+ var/mob/living/carbon/predator = owner
+ predator.hider_remove(src)
return count
@@ -279,16 +278,17 @@
owner.visible_message("[owner] expels [M] from their [lowertext(name)]!")
owner.update_icons()
- var/mob/living/carbon/predator = owner
- if(iscarbon(predator))
- if(digest_mode == DM_FATTEN && predator.fat_hider == src)
- var/preys_fatness = 0
- for(var/mob/living/carbon/prey in contents)
- preys_fatness += prey.fatness
- if(preys_fatness > predator.fatness)
- predator.fat_hide(preys_fatness, src)
- else
- predator.fat_show()
+ if(iscarbon(owner))
+ var/mob/living/carbon/predator = owner
+ var/found = FALSE
+ for(var/prey in contents)
+ if(istype(prey, /mob/living/carbon))
+ found = TRUE
+ if(found)
+ predator.hider_add(src)
+ else
+ predator.hider_remove(src)
+
return TRUE
// Actually perform the mechanics of devouring the tasty prey.
@@ -695,3 +695,11 @@
for(var/I in emote_lists[K])
dupe.emote_lists[K] += I
return dupe
+
+/obj/belly/proc/fat_hide(var/mob/living/carbon/user)
+ var/preys_fatness = 0
+ for(var/prey in contents)
+ if(iscarbon(prey))
+ var/mob/living/carbon/cprey = prey
+ preys_fatness += cprey.fatness
+ return preys_fatness
diff --git a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
index c85a27ee..8e7a6972 100644
--- a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
@@ -58,6 +58,18 @@
var/sound/pred_death = sound(get_sfx("death_pred"))
var/turf/source = get_turf(owner)
+////////////////////////// Vore Fatness /////////////////////////////
+ if(iscarbon(owner))
+ var/mob/living/carbon/predator = owner
+ var/found = FALSE
+ for(var/prey in contents)
+ if(istype(prey, /mob/living/carbon))
+ found = TRUE
+ if(found)
+ predator.hider_add(src)
+ else
+ predator.hider_remove(src)
+
///////////////////////////// DM_HOLD /////////////////////////////
if(digest_mode == DM_HOLD)
return SSBELLIES_PROCESSED
@@ -65,8 +77,8 @@
///////////////////////////// DM_FATTEN /////////////////////////////
if(digest_mode == DM_FATTEN)
var/preys_fatness = 0
- var/mob/living/carbon/predator = owner
- if(iscarbon(predator))
+ if(iscarbon(owner))
+ var/mob/living/carbon/predator = owner
for(var/mob/living/M in contents)
var/mob/living/carbon/prey = M
if(iscarbon(prey) && predator.fatness_real)
@@ -77,12 +89,6 @@
predator.nutrition -= 3
preys_fatness += prey.fatness
- if(!predator.fat_hider || predator.fat_hider == src)
- if(preys_fatness > predator.fatness)
- predator.fat_hide(preys_fatness, src)
- if(predator.fat_hider != src)
- predator.fat_show()
-
//////////////////////////// DM_DIGEST ////////////////////////////
else if(digest_mode == DM_DIGEST)
if(HAS_TRAIT(owner, TRAIT_PACIFISM)) //obvious.
From 42611cda49b4efbf9cd9ea71a0e446719dd904dc Mon Sep 17 00:00:00 2001
From: Alphas00 <154434082+Alphas00@users.noreply.github.com>
Date: Thu, 6 Jun 2024 13:04:13 +0200
Subject: [PATCH 6/9] Fatness Hiding guide comment
---
GainStation13/code/mechanics/fatness.dm | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm
index 608f8ee4..c41a0c5c 100644
--- a/GainStation13/code/mechanics/fatness.dm
+++ b/GainStation13/code/mechanics/fatness.dm
@@ -101,6 +101,14 @@
return TRUE
+ // THE FATNESS HIDING GUIDE!!!
+ // HOW 2 FATNESS HIDE
+ //Step 1) Grab a thing that will add or reduce fatness!
+ //Step 2) Give it a character.hider_add(src) and a character.hider_remove(src) depending on the conditions you want it to meet for which it will add or remove itself from messing with a character's fatness!
+ //Step 3) Give it a proc/fat_hide([character argument]), with a return that will give the amount to shift that character's fatness by!
+ //Step 4) There is no step 4, you did it bucko!
+ //Wanna see an example? Search for /obj/item/bluespace_belt !!!
+
/mob/living/carbon/proc/hider_add(hide_source)
if(!(hide_source in fat_hiders))
fat_hiders += hide_source
From 9d99cf2c13e050cc5ceae0938687a010cace1f85 Mon Sep 17 00:00:00 2001
From: Alphas00 <154434082+Alphas00@users.noreply.github.com>
Date: Thu, 6 Jun 2024 19:55:08 +0200
Subject: [PATCH 7/9] Bee Pacification
Injecting bees with 5u of pax now makes them unable to ever sting
---
code/modules/hydroponics/beekeeping/beebox.dm | 2 ++
.../mob/living/simple_animal/hostile/bees.dm | 21 ++++++++++++-------
2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm
index a058601c..52cb8dad 100644
--- a/code/modules/hydroponics/beekeeping/beebox.dm
+++ b/code/modules/hydroponics/beekeeping/beebox.dm
@@ -108,6 +108,8 @@
var/mob/living/simple_animal/hostile/poison/bees/B = new(get_turf(src))
B.beehome = src
B.assign_reagent(queen_bee.beegent)
+ if(queen_bee.paxed)
+ B.paxed = TRUE
bees += B
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index 7da4cbc2..89264441 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -55,6 +55,8 @@
var/static/beehometypecache = typecacheof(/obj/structure/beebox)
var/static/hydroponicstypecache = typecacheof(/obj/machinery/hydroponics)
+ var/paxed = FALSE
+
/mob/living/simple_animal/hostile/poison/bees/Initialize()
. = ..()
generate_bee_visuals()
@@ -135,13 +137,13 @@
wanted_objects -= beehometypecache //so we don't attack beeboxes when not going home
return //no don't attack the goddamm box
else
- . = ..()
- if(. && beegent && isliving(target))
- var/mob/living/L = target
- if(L.reagents)
- beegent.reaction_mob(L, INJECT)
- L.reagents.add_reagent(beegent.type, rand(1,5))
-
+ if(!paxed)
+ . = ..()
+ if(. && beegent && isliving(target))
+ var/mob/living/L = target
+ if(L.reagents)
+ beegent.reaction_mob(L, INJECT)
+ L.reagents.add_reagent(beegent.type, rand(1,5))
/mob/living/simple_animal/hostile/poison/bees/proc/assign_reagent(datum/reagent/R)
if(istype(R))
@@ -249,7 +251,6 @@
icon = 'icons/mob/bees.dmi'
var/mob/living/simple_animal/hostile/poison/bees/queen/queen
-
/obj/item/queen_bee/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/reagent_containers/syringe))
var/obj/item/reagent_containers/syringe/S = I
@@ -265,6 +266,10 @@
user.visible_message("[user] injects [src] with royal bee jelly, causing it to split into two bees, MORE BEES!","You inject [src] with royal bee jelly, causing it to split into two bees, MORE BEES!")
else
to_chat(user, "You don't have enough royal bee jelly to split a bee in two!")
+ if(S.reagents.get_reagent_amount(/datum/reagent/pax) >= 5 && !queen.paxed)
+ user.visible_message("[user] injects [src] with something, it looks relaxed!","You inject [src] with pax, it look relaxed!")
+ S.reagents.remove_reagent(/datum/reagent/pax, 5)
+ queen.paxed = TRUE
else
var/datum/reagent/R = GLOB.chemical_reagents_list[S.reagents.get_master_reagent_id()]
if(R && S.reagents.has_reagent(R.type, 5))
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 8/9] 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"
From d099ff386397937f9ed4a848f46db69bb2bad852 Mon Sep 17 00:00:00 2001
From: Alphas00 <154434082+Alphas00@users.noreply.github.com>
Date: Fri, 7 Jun 2024 00:48:34 +0200
Subject: [PATCH 9/9] Sink drinking
You can now attach people to sinks to have them start gulping down water
---
GainStation13/code/mechanics/water_sponge.dm | 33 ++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/GainStation13/code/mechanics/water_sponge.dm b/GainStation13/code/mechanics/water_sponge.dm
index 1373a403..0b966ad2 100644
--- a/GainStation13/code/mechanics/water_sponge.dm
+++ b/GainStation13/code/mechanics/water_sponge.dm
@@ -49,3 +49,36 @@
reagents.add_reagent(/datum/reagent/water, H2O_pp/10)
breath_gases[/datum/gas/water_vapor] -= H2O_pp
+/obj/structure/sink
+ var/mob/living/attached
+
+/obj/structure/sink/MouseDrop(mob/living/target)
+ . = ..()
+ if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE) || !isliving(target))
+ return
+ if(attached)
+ visible_message("[attached] is detached from [src].")
+ attached = null
+ return
+ if(Adjacent(target) && usr.Adjacent(target))
+ usr.visible_message("[usr] attaches [target] to [src].", "You attach [target] to [src].")
+ add_fingerprint(usr)
+ attached = target
+ START_PROCESSING(SSobj, src)
+
+/obj/structure/sink/process()
+ if(!(get_dist(src, attached) <= 1 && isturf(attached.loc)))
+ to_chat(attached, "[attached] is ripped from the sink!") // GS13
+ attached = null
+ return PROCESS_KILL
+ if(attached)
+ playsound(attached, 'sound/vore/pred/swallow_02.ogg', rand(10,50), 1)
+ attached.reagents.add_reagent(/datum/reagent/water, 5)
+ else
+ return PROCESS_KILL
+
+/obj/structure/sink/attack_hand(mob/living/user)
+ if(attached)
+ visible_message("[attached] is detached from [src]")
+ attached = null
+ return