From 77019460ccace9250377c7ecfd53e669a8e649e6 Mon Sep 17 00:00:00 2001
From: FabianK3 <21039694+FabianK3@users.noreply.github.com>
Date: Mon, 10 Aug 2026 02:36:44 +0200
Subject: [PATCH] Refactor round start volume of welding packs and fryers
(#23027)
# Summary
This PR adjust welding packs and fryers. Welding packs now spawn empty
[on the Horizon] to encourage the persistent welding tanks and fryers
have their optimal oil level adjusted to balance out oil refills.
**Depends on https://github.com/Aurorastation/Aurora.3/pull/23005**.
## Changes
- Added new sprite for empty welding packs.
(Regular vs new low variant)
- Welding packs now spawn empty (only on the Horizon and during map
load).
- Deep fryer no longer contain 9 full tanks of cooking oil. They contain
100u now and make refills using the [persistent cooking oil
tanks](https://github.com/Aurorastation/Aurora.3/pull/23005) much more
reasonable. Added a wrench to the kitchen for tank handling.
---
code/game/objects/random/food.dm | 10 +++++++
.../machinery/cooking_machines/fryer.dm | 2 +-
.../reagent_containers/welding_backpack.dm | 25 ++++++++++++++++++
.../fabiank3-empty-liquid-container.yml | 9 +++++++
.../obj/item/reagent_containers/weldpack.dmi | Bin 1391 -> 1885 bytes
maps/sccv_horizon/sccv_horizon.dmm | 1 +
6 files changed, 46 insertions(+), 1 deletion(-)
create mode 100644 html/changelogs/fabiank3-empty-liquid-container.yml
diff --git a/code/game/objects/random/food.dm b/code/game/objects/random/food.dm
index 64a95915110..2150e7136ce 100644
--- a/code/game/objects/random/food.dm
+++ b/code/game/objects/random/food.dm
@@ -273,3 +273,13 @@
/obj/item/reagent_containers/food/snacks/chocolate_bar/laughterbar = 1,
/obj/item/storage/box/fancy/readies
)
+
+/obj/random/cookingoil
+ name = "random cooking oil"
+ desc = "Has a 50% chance of spawning a tank of cooking oil, otherwise nothing."
+ icon = 'icons/obj/reagent_dispensers.dmi'
+ icon_state = "oiltank"
+ spawn_nothing_percentage = 50
+ spawnlist = list(
+ /obj/structure/reagent_dispensers/cookingoil
+ )
diff --git a/code/modules/cooking/machinery/cooking_machines/fryer.dm b/code/modules/cooking/machinery/cooking_machines/fryer.dm
index a26b2d82d25..115bf37a676 100644
--- a/code/modules/cooking/machinery/cooking_machines/fryer.dm
+++ b/code/modules/cooking/machinery/cooking_machines/fryer.dm
@@ -29,7 +29,7 @@
/obj/item/stock_parts/matter_bin = 2)
var/datum/reagents/oil
- var/optimal_oil = 9000//90 litres of cooking oil
+ var/optimal_oil = 100 // 1/10 of a cooking oil tank
/obj/structure/machinery/appliance/cooker/fryer/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/welding_backpack.dm b/code/modules/reagents/reagent_containers/welding_backpack.dm
index d5395a81518..0ce6de89ade 100644
--- a/code/modules/reagents/reagent_containers/welding_backpack.dm
+++ b/code/modules/reagents/reagent_containers/welding_backpack.dm
@@ -15,6 +15,16 @@
drop_sound = 'sound/items/drop/backpack.ogg'
pickup_sound = 'sound/items/pickup/backpack.ogg'
+/obj/item/reagent_containers/weldpack/Initialize(mapload)
+ var/turf/T = get_turf(src)
+ if(mapload && T && is_station_level(T.z))
+ // If the weldpack is spawned on a station level during map load, don't give it any fuel.
+ // This is in support of persistent welding fuel tanks and only for the persistent levels.
+ reagents_to_add = null
+ create_reagents(volume) // Ensure reagents datum is created, even if empty
+ update_volume()
+ . = ..() // After reagents_to_add is updated
+
/obj/item/reagent_containers/weldpack/feedback_hints(mob/user, distance, is_adjacent)
. += ..()
if(ishuman(loc) && user != loc) // what if we want to sneak some reagents out of somewhere?
@@ -27,6 +37,20 @@
else
. += SPAN_WARNING("\The [src] is empty!")
+/obj/item/reagent_containers/weldpack/proc/update_volume()
+ var/fill_level = reagents.total_volume / volume
+ if(fill_level <= 0.1)
+ icon_state = "welderpack_low"
+ item_state = "welderpack_low"
+ else
+ icon_state = "welderpack"
+ item_state = "welderpack"
+ update_icon()
+ update_worn_icon()
+
+/obj/item/reagent_containers/weldpack/on_reagent_change()
+ update_volume()
+
/obj/item/reagent_containers/weldpack/attackby(obj/item/attacking_item, mob/user)
if(attacking_item.tool_behaviour == TOOL_WRENCH)
if(atom_flags & ATOM_FLAG_OPEN_CONTAINER)
@@ -60,5 +84,6 @@
reagents.trans_type_to(attacking_item, /singleton/reagent/fuel, min(fuel_volume, T.reagents.maximum_volume - tool_fuel_volume))
to_chat(user, SPAN_NOTICE("Welder refilled!"))
playsound(loc, 'sound/effects/refill.ogg', 50, 1, -6)
+ update_volume()
return
return ..()
diff --git a/html/changelogs/fabiank3-empty-liquid-container.yml b/html/changelogs/fabiank3-empty-liquid-container.yml
new file mode 100644
index 00000000000..7b84a0a3a3f
--- /dev/null
+++ b/html/changelogs/fabiank3-empty-liquid-container.yml
@@ -0,0 +1,9 @@
+author: FabianK3
+
+delete-after: True
+
+changes:
+ - balance: "Welding packs (on the Horizon) now start empty to support persistent welding fuel tanks."
+ - imageadd: "Added a sprite for empty welding packs."
+ - balance: "Reduced the 'optimal' oil amount in the deep fryers from 9000u to 100u. One cooking oil tank can now be used multiple times instead of needing 9 tanks to refill it."
+ - rscadd: "Added a wrench to the kitchen to allow better handling of cooking oil tanks."
diff --git a/icons/obj/item/reagent_containers/weldpack.dmi b/icons/obj/item/reagent_containers/weldpack.dmi
index a6901e0010432cb30e646ce37a2da785560b192f..46edef7bdc0b2c363342768a65df4d38b176934e 100644
GIT binary patch
delta 1624
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