Commit Graph

310 Commits

Author SHA1 Message Date
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
SyncIt21 eaba74a2eb Fixes for boulder processing machines (#96033)
## About The Pull Request
- Opening the panel of a boulder refiner machine or un-wrenching it now
turns off its environment light
- The boulder refiner machine has reagent holder of type
`/datum/reagents/plumbing` which fixes rounding errors & has other
plumbing optimized features
- The boulder refiner machine now only takes in booster reagents & only
outputs waste reagent. This means even if you have a tank with random
reagents attached to it, it will only take in booster reagents if
present & exclude the rest thus saving you time & space from taking in
other reagents
- booster reagents is now a static list shared by all machines thus
saving memory
- Removed `supply_offset` & `demand_offset` vars from core plumbing
component. These vars were making the pipes extend outside the tile
causing it to overlap with adjacent tile machine pipes making everything
ugly. Now the pipes are perpendicular to the conveyer belt sprite and
will only take in boulders from the conveyer belt direction


https://github.com/user-attachments/assets/5583a790-32b6-40df-a414-1602dd84fefd




- Map edited smelters so the conveyer belt is in the direction of the
refiner


## Changelog
🆑
fix: opening panel of boulder refinery with screwdriver or un-wrenching
it turns of its light
fix: boulder refinery only takes in booster reagents and excludes others
and only outputs waste chemicals as intended
fix: boulder refinery machines outputs waste reagents without rounding
errors in them
qol: removed conveyer sprite from boulder smelter & pixel shifts the
refiner so you can see it's plumbing pipes properly
sprite: smelters will now only take in boulders in the direction of its
conveyer belt. It's plumbing pipes are perpendicular to its conveyer
belt
/🆑
2026-05-22 14:58:52 -04:00
SyncIt21 003102864d Plumbing nit picks & Qol (#96123)
## About The Pull Request
- 1 variable removal & comment correction which i found when looking
over the files
- Increases plumbing assimilator heating to that of tier 3 heating chem
heater

## Changelog
🆑
qol: plumbing assimilator has higher heating coefficient to that of tier
3 chem heater
/🆑
2026-05-18 08:45:54 +02:00
Alexis 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00
ArcaneMusic 0c91535120 Arcmining: Chemical Boosting (#95530) 2026-04-23 17:46:06 +02:00
MrMelbert 4eadf5caf7 The big tooltype_act de-cargo-cult-ing (#95408)
## About The Pull Request

Removes a lot of cargo cult copypasta with
`default_deconstruction_screwdriver`, `default_deconstruction_crowbar`,
and to a lesser extent `default_pry_open` and
`default_change_direction_wrench`

ALL you gotta do now if you want your machine to have an openable panel
or be deconstructible with a crowbar is this
```dm
/obj/machinery/dish_drive/screwdriver_act(mob/living/user, obj/item/tool)
	return default_deconstruction_screwdriver(user, tool)

/obj/machinery/dish_drive/crowbar_act(mob/living/user, obj/item/tool)
	return default_deconstruction_crowbar(user, tool)
```

`default_deconstruction_screwdriver` no longer directly sets
`icon_state`, requiring the user pass in the open and closed icon
states. Now, it just calls `update_appearance`, and everything that once
passed the icon state now uses `base_icon_state` and
`update_icon_state`.

## Why It's Good For The Game

Many of these procs were terribly overcomplicated and difficult to work
with for what should be a relatively simple action

Streamlining it makes it easier for coders to understand and work with

## Changelog

🆑 Melbert
refactor: A majority of machines had their screwdriver/crowbar/wrench
interactions rewritten, report any oddities like being unable to open a
machine's panel or deconstruct a machine
/🆑
2026-04-14 19:46:24 -04:00
Aliceee2ch 80e32e9910 Minor cleanups for wrenching screentips (#95649)
## About The Pull Request

title

## Why It's Good For The Game

consistency 

## Changelog

🆑
spellcheck: Most of wrenching screentips should be properly capitalized
now.
/🆑
2026-04-07 15:25:55 -04:00
SyncIt21 414d1b1045 Refactors handle_reactions() to be lean & mean (#95483)
## About The Pull Request
- Removes `previous_reaction_list` & `failed_but_capable_reactions` from
reaction holder. Gives considerable memory savings because reagent
holder is used in a lot of places
- Removes proc `has_state_changed()`. This proc didn't do much in saving
reaction code from executing and was inaccurate in most cases anyway.
Removing it actually speeds up stuff
- Refactored `handle_reactions()` to be as fast & efficient as possible.
Removed the use of proc `has_reagent()` and re-arranged other code where
possible

## Changelog
🆑
refactor: reagent reaction code has been refactored for better cpu &
memory performance. Report broken reactions on github
/🆑
2026-04-05 19:13:38 +02:00
SyncIt21 c22d03aa8f Fixes plumbing pill press production quality (#95349)
## About The Pull Request
- Fixes #95297

## Changelog
🆑
fix: plumbing pill press won't store reagents & products if the total
capacity for both is reached thus stopping faulty product creation
(imbalanced reagent ratios) and power consumption
/🆑
2026-03-14 07:32:04 +01:00
SyncIt21 36d79a65af Fixes plumbing reagent interception volumes (#95215)
## About The Pull Request
Should use `transfer_amount` which is calculated per reagent

## Changelog
🆑
fix: moving reagents like acid/basic buffer and others across plumbing
machinery produces correct effects again
/🆑
2026-02-23 17:47:32 -05:00
SmArtKar a3498fdcd7 Material Science 1: A bunch of math (#95090) 2026-02-22 16:53:51 +11:00
SyncIt21 e90018a3eb Stops unessassary reactions from occurring in plumbing machines (#95125)
## About The Pull Request
This PR stops reactions from occurring in plumbing machines except for 2
- Reaction chamber
- Acclimator

This means you can now have a tank containing welding fuel, carbon &
hydrogen and not worry about them reacting to create oil

## Why its good for the game
- Makes the game run faster. Calling `handle_reactions()` is an
expensive operation and should not be done needlessly
- Makes life for players easier. We don't want chemicals reacting before
they reach the reaction chamber & acclimator and making them obsolete.
It now allows them to do their job properly

**Dependencies**
- #95077
- #95084

After they are merged. Part of their code needs to be rewritten here.

This also deletes the redundant splitter sprite

## Changelog
🆑
qol: except for plumbing reaction chamber & acclimator, no reactions
will occur inside plumbing machines
/🆑
2026-02-20 07:53:31 +01:00
SyncIt21 6854e08ba0 General maintenance for plumbing acclimator (#95077)
## About The Pull Request
- Made the UI more compact by removing options like turning on the
accmilator & setting acceptable temperature range. They are neither
intuitive nor useful for player and can be set in code directly as
constants

  <details><summary>Here are the before & after pictures</summary>
  <p>
  
  **Before**
<img width="317" height="270" alt="Screenshot (4)"
src="https://github.com/user-attachments/assets/db5bf02d-8953-407d-8dc9-80d70c92b2be"
/>
  
  **After**
<img width="318" height="130" alt="Screenshot (5)"
src="https://github.com/user-attachments/assets/3f562481-426d-40e1-8449-231dd6fe81c3"
/>
  </p>
  </details> 

- Setting maximum volume now won't change the reagent holder maximum
volume which broke chemical reactions and created ghost chemicals. It
now accurately measures the input levels before starting heating/cooling
- Fixed power usage so it matches that of chem heater
- Added new icon state for filling & emptying reagents

## Changelog
🆑
refactor: plumbing accmilator code has been improved. Report bugs on
github
/🆑
2026-02-13 14:07:58 +00:00
SyncIt21 ca436ad925 General maintenance for plumbing filter & splitter (#95084)
## About The Pull Request
- Both UI's now don't auto update so it saves some bandwidth on the
client side
- Removed English version list on the chemical splitter list to save
memory. It now auto computes it
- Plumbing splitter now sends reagents even if the requested amount is
larger than the amount set
- Removed unused & redundant vars from both. Code is more compat
- Plumbing splitter is a 3 way component allowing you to split reagents
in 3 directions

## Changelog
🆑
refactor: code for plumbing splitter & filter have been improved.
plumbing splitter is now a 3 way component. Report bugs on github
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2026-02-13 14:41:23 +01:00
SyncIt21 f8c864f886 [NO GBP] Puts plumbing machines back on Machine subsystem (#95069)
## About The Pull Request
Moves plumbing machines from `SSPlumbing` back to `SSMachines` which was
done in #94753

Plumbing machines call `use_energy()` a lot from `process()` and this
proc reports accurate readings to devices like power monitors only when
called from `SSMachines`

## Changelog
🆑
fix: power monitors report accurate readings for plumbing machinery
/🆑
2026-02-13 14:32:03 +01:00
SyncIt21 4271c8bb33 General maintenance for plumbing automatic buffer (#94945)
## About The Pull Request
- Adds examines & screen tips for resetting connections & changing
threshold of plumbing automatic buffer
- Removes `datum/buffer_net` and replaces it with a simple list of
connections for memory savings
- Replaced `attack_by()` attack chain for screwdriver with
`screwdriver_act()`
- Added tgui for plumbing buffer

## Changelog
🆑
refactor: plumbing automatic buffer has been refactored for better
performance & interactions. report bugs on github
/🆑
2026-02-13 14:31:18 +01:00
nevimer 00ccf0c6b5 Merge remote-tracking branch 'tgstation/master' into upstream-feb12-2026
# Conflicts:
#	.github/CODEOWNERS
#	.github/workflows/compile_changelogs.yml
#	.github/workflows/stale.yml
#	SQL/database_changelog.md
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/__DEFINES/atom_hud.dm
#	code/__DEFINES/inventory.dm
#	code/__DEFINES/mobs.dm
#	code/__DEFINES/species_clothing_paths.dm
#	code/__DEFINES/subsystems.dm
#	code/__DEFINES/surgery.dm
#	code/__HELPERS/global_lists.dm
#	code/_globalvars/lists/maintenance_loot.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/minor_mapping.dm
#	code/controllers/subsystem/processing/quirks.dm
#	code/controllers/subsystem/shuttle.dm
#	code/datums/components/palette.dm
#	code/datums/components/surgery_initiator.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/hud.dm
#	code/datums/mood.dm
#	code/datums/mutations/chameleon.dm
#	code/datums/quirks/negative_quirks/nyctophobia.dm
#	code/datums/status_effects/debuffs/debuffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/slime/slime_leech.dm
#	code/datums/weather/weather.dm
#	code/game/data_huds.dm
#	code/game/objects/items.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/frog_statue.dm
#	code/game/objects/items/rcd/RLD.dm
#	code/game/objects/items/robot/items/hypo.dm
#	code/game/objects/items/stacks/medical.dm
#	code/game/objects/items/stacks/wrap.dm
#	code/game/objects/items/storage/garment.dm
#	code/game/objects/items/tools/medical/defib.dm
#	code/game/objects/items/weaponry.dm
#	code/game/objects/items/weaponry/melee/misc.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/game/objects/structures/curtains.dm
#	code/game/objects/structures/dresser.dm
#	code/game/objects/structures/girders.dm
#	code/game/objects/structures/maintenance.dm
#	code/game/objects/structures/mirror.dm
#	code/modules/admin/greyscale_modify_menu.dm
#	code/modules/admin/verbs/light_debug.dm
#	code/modules/antagonists/ashwalker/ashwalker.dm
#	code/modules/antagonists/heretic/knowledge/starting_lore.dm
#	code/modules/antagonists/ninja/ninjaDrainAct.dm
#	code/modules/art/paintings.dm
#	code/modules/client/preferences.dm
#	code/modules/client/verbs/ooc.dm
#	code/modules/clothing/head/wig.dm
#	code/modules/events/disease_outbreak.dm
#	code/modules/holodeck/holo_effect.dm
#	code/modules/jobs/job_types/head_of_security.dm
#	code/modules/jobs/job_types/security_officer.dm
#	code/modules/library/skill_learning/generic_skillchips/point.dm
#	code/modules/mining/lavaland/ash_flora.dm
#	code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/basic/guardian/guardian.dm
#	code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm
#	code/modules/mob/living/carbon/carbon.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/human_defines.dm
#	code/modules/mob/living/carbon/life.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_defines.dm
#	code/modules/mob/mob.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mod/mod_control.dm
#	code/modules/mod/modules/modules_general.dm
#	code/modules/modular_computers/computers/item/computer_ui.dm
#	code/modules/paperwork/paper.dm
#	code/modules/paperwork/paperbin.dm
#	code/modules/power/lighting/light.dm
#	code/modules/projectiles/guns/energy/kinetic_accelerator.dm
#	code/modules/projectiles/projectile.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/food_reagents.dm
#	code/modules/reagents/chemistry/reagents/other_reagents.dm
#	code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
#	code/modules/research/xenobiology/crossbreeding/_clothing.dm
#	code/modules/research/xenobiology/crossbreeding/prismatic.dm
#	code/modules/surgery/advanced/brainwashing.dm
#	code/modules/surgery/advanced/lobotomy.dm
#	code/modules/surgery/amputation.dm
#	code/modules/surgery/blood_filter.dm
#	code/modules/surgery/bodyparts/_bodyparts.dm
#	code/modules/surgery/brain_surgery.dm
#	code/modules/surgery/cavity_implant.dm
#	code/modules/surgery/coronary_bypass.dm
#	code/modules/surgery/gastrectomy.dm
#	code/modules/surgery/healing.dm
#	code/modules/surgery/limb_augmentation.dm
#	code/modules/surgery/organ_manipulation.dm
#	code/modules/surgery/revival.dm
#	code/modules/surgery/sleeper_protocol.dm
#	code/modules/surgery/surgery_helpers.dm
#	code/modules/surgery/surgery_step.dm
#	code/modules/unit_tests/_unit_tests.dm
#	code/modules/unit_tests/designs.dm
#	code/modules/unit_tests/icon_state_worn.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_cultist.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png
#	icons/map_icons/clothing/head/_head.dmi
#	icons/map_icons/clothing/shoes.dmi
#	icons/map_icons/items/_item.dmi
#	icons/mob/huds/hud.dmi
#	icons/mob/inhands/64x64_lefthand.dmi
#	icons/mob/inhands/64x64_righthand.dmi
#	icons/obj/machines/computer.dmi
#	tgui/packages/tgui/interfaces/OperatingComputer.jsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/types.ts
#	tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
#	tools/icon_cutter/check.py
2026-02-12 23:50:09 -05:00
SyncIt21 c779efbeec General maintenance for plumbing disposer (#94944)
## About The Pull Request
- Plumbing disposer disposal rate can now be changed with hand nad has
TGUI interface. It accepts a value between 5->15 meaning it can dispose
anywhere from 10u to 50u reagents per tick. Added examines & screen tips
for the same
- Fixes plumbing disposer icon state not correctly switching between
working and off under certain circumstances

## Changelog
🆑
qol: plumbing disposer now has TGUI interface for operations
fix: plumbing disposer icon state correctly switches between on & off
under circumstances
/🆑
2026-02-03 22:23:58 -05:00
SyncIt21 7fc6e1402a Additional maintenance for plumbing related stuff (#94753)
## About The Pull Request
**Qol**
- Adds examines & screen tips for washing items in sinks
- Adds examines & screen tips for wall frame items i.e deconstructing
with wrench & what structures you can mount them on

**Fixes**
- Plumbing components inside shuttles now properly reconnect 
- Plumbing iv drip has their connectors (red & blue pipes) visible again
- Sinks consume reagents when washing and won't wash when it becomes dry
- Fixes #94942 placing ducts by hand on turf won't run time. Also
Plumbing machinery properly reconnects when un wrenching ducts in
circular connections
- All plumbing machinery now operates in the plumbing subsystem & map
loaded machines begin processing

**Refactor**
- Refactored sink frame into a wall frame item meaning it can now be
carried in hand and mounted on walls
- Refactored the sink attack chain to use `item_interaction()` instead
of `attackby()`
- All sinks are now wall mounted components meaning destroying the wall
they are attached to will cause it to deconstruct

## Changelog
🆑
qol: added examines & screen tips for wall frame items
qol: added examines & screen tips for washing items in sinks
fix: plumbing components inside shuttles reconnect to their machine
counterparts correctly
fix: plumbing iv drip has its red & blue connectors visible again
fix: sinks consume reagents when washing and won't wash when it becomes
dry
fix: map loaded plumbing machines begin processing
fix: placing stack of ducts by hand of ducts works again
fix; plumbing machinery properly reconnects when un wrenching ducts in
circular connections
refactor: sinks are now proper wall mounted components meaning
destroying their attached walls will cause it to get destroyed & sink
frames are wall frame items that can be carried in hand
/🆑
2026-01-26 15:00:11 +01:00
SyncIt21 3c5749f862 General maintenance for plumbing (#94427)
## About The Pull Request
The overall behaviour of everything should stay the same but the memory
& speed of these components has been slightly improved and when you
scale that across large plumbing factories you get a substantial
improvement. Here's a list of the most noticeable changes along with
many others that aren't worth mentioning

- Removed vars `use_overlays`, `turn_connects`,
`recipient_reagents_holder`
- `active` var is now replaced with a proc which simply returns is the
machine wrenched or not
- `turn_connects` has been removed because all machines have their pipes
rotate when the machine is rotated. This also removed all the static
icon states ending with `-s` from the `dmi` file thus reducing that file
size as well
- `extend_pipe_to_edge` var is directly integrated into `cut_overlays()`
because it's use cases were limited such for showers & sinks
- Simplified `Initialize()` a lot. Removed params `start`,
`turn_connects`, `custom_receiver`, `extend_pipe_to_edge`. We now only
pass `bolt_layer` making that proc faster & less convoluted
- Replaced `set_recipient_reagents_holder()` proc with
`recipient_reagents_holder()` which returns the reagent holder for
holding reagents instead of storing it in the component. This removes
the need to hook a qdel signal on the holder & we don't need to keep
track of it
- Merged a ton of procs to reduce overhead & reduce file size
- Plumbing ducts creating the network at mapload is faster without using
recursion and the timer subsystem
- Deconstructing plumbing ducts is faster in reconstructing the network
without using recursion and the timer subsystem

This makes managing plumbing code less convoluted & overall better for
the foreseeable future. See the lines of code removed vs added and still
preserves behaviour

## Changelog
🆑
qol: added examines & screentips for ducts & stack of ducts
qol: you can wrench a stack of ducts on the ground to create a pipe
refactor: plumbing code has been improved overall. Report bugs on github
sprite: removed unused static(does not rotate with machine) icon states
for plumbing connections
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-12-31 13:03:42 +01:00
SyncIt21 468b351b86 Axes grind & juice vars into procs (#94592)
## About The Pull Request
Inspired by #94233. `grind_results`(list) & `juice_typepath`(typepath)
are only used when grinding & juicing after which the atom is deleted.
This means if that object is not processed these vars occupy memory &
don't do anything.

Now these values are only generated on demand by calling their
respective procs. Considering how these vars are on the obj level the
memory savings are quite significant

## Changelog
🆑
refactor: grinding & juicing have been refactored to occupy low memory.
Report bugs on github
code: improved grinding & juicing code
/🆑
2025-12-25 20:40:35 +01:00
Bloop 0190e64654 Converts simple rotation into a bespoke element (#94582)
## About The Pull Request

<img width="579" height="67" alt="image"
src="https://github.com/user-attachments/assets/d7a4427e-2a6e-44d3-94ba-c90a2d474984"
/>

Simple rotation components number in the 8-9k range per round, and each
contains a needless callback datum as well.

These do not need to hold any state and can be bespoke elements, and the
proc to do things post_rotation can just be a normal atom proc.

<details><summary>Still works as you'd expect, including items that have
flag requirements like the wrench</summary>


![dreamseeker_UhvaohsIYK](https://github.com/user-attachments/assets/a4bd6b3f-d502-4a11-852f-0b96472d688d)


![dreamseeker_fEwUfNQben](https://github.com/user-attachments/assets/62dca771-4622-4cb2-9105-7f3a7c73e15a)

</details>

## Why It's Good For The Game

Makes a heavily used element much more lightweight, saves a few mb of
memory.

## Changelog

🆑
refactor: simple rotation component has been refactored into an element
Please report any bugs to github.
/🆑
2025-12-25 10:32:41 +01:00
MrMelbert dc357ab2f7 Limits the amount of distinct chems that can be held in chemistry factory outputs (#93991) 2025-12-21 14:19:22 +01:00
SmArtKar 610ade0739 Fixes RMB interactions for IV drips (#94505)
## About The Pull Request

#94058 mistyped plumbing IV drip RMB override and broke all IV drips.
Also FALSE is not a valid return, we just need to prevent the child's
code from running in that scenario.

## Changelog
🆑
fix: Fixed RMB interactions for IV drips
/🆑
2025-12-16 21:53:35 -05:00
nevimer 6e9f2ccfc0 Merge remote-tracking branch 'tgstation/master' into upstream-12-15
# Conflicts:
#	.github/workflows/compile_all_maps.yml
#	.github/workflows/run_integration_tests.yml
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/_onclick/hud/credits.dm
#	code/controllers/subsystem/networks/id_access.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/game/machinery/doors/door.dm
#	code/game/objects/structures/crates_lockers/closets/secure/medical.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/modules/antagonists/malf_ai/malf_ai_modules.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/loadout/categories/accessories.dm
#	code/modules/loadout/loadout_helpers.dm
#	code/modules/loadout/loadout_items.dm
#	code/modules/loadout/loadout_preference.dm
#	code/modules/mob/living/silicon/robot/robot_defense.dm
#	code/modules/mod/mod_theme.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/reagents/reagent_containers/cups/drinks.dm
#	code/modules/shuttle/mobile_port/variants/supply.dm
#	code/modules/surgery/organs/internal/eyes/_eyes.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_heretic.png
#	icons/hud/screen_full.dmi
2025-12-15 18:12:29 -05:00
Bloop 7754938c72 Makes a bunch of lists lazy (#94239)
## About The Pull Request

Empy lists. There are a lot of 'em.

<img width="981" height="512" alt="image"
src="https://github.com/user-attachments/assets/b94b041a-2904-466b-ab89-54bd1de11b4e"
/>

Going through ways to reduce memory I found a few easy ones here. Wires,
the edible component, the seethrough component. None of these are really
a concern when it comes to needing lists in memory for performance
reasons. Wires aren't going to be cut most of the time for each door. A
lot of food does not have any junkiness. Seethrough component lies
dormant most of the round. Etc.

Making lists lazy in these cases should be a no brainer.

Everything I tested still seems to work exactly the same.

## Why It's Good For The Game

Frees memory that is just taking up space a lot of the time.

## Changelog

Not player-facing, this is all under-the-hood stuff.
2025-12-03 13:42:16 -07:00
nevimer baf3837ae8 Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29
# Conflicts:
#	_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm
#	_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	code/_onclick/hud/new_player.dm
#	code/datums/components/squashable.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/datums/diseases/chronic_illness.dm
#	code/datums/status_effects/buffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/stamcrit.dm
#	code/game/machinery/computer/crew.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/wall_mounted.dm
#	code/game/turfs/closed/indestructible.dm
#	code/modules/admin/view_variables/filterrific.dm
#	code/modules/antagonists/heretic/influences.dm
#	code/modules/cargo/orderconsole.dm
#	code/modules/client/preferences.dm
#	code/modules/events/space_vines/vine_mutations.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/carbon/human/death.dm
#	code/modules/mob/living/carbon/human/species_types/jellypeople.dm
#	code/modules/mob/living/damage_procs.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mob_spawn/mob_spawn.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/projectiles/guns/ballistic/launchers.dm
#	code/modules/projectiles/guns/energy/laser.dm
#	code/modules/reagents/chemistry/machinery/chem_dispenser.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/surgery/healing.dm
#	code/modules/unit_tests/designs.dm
#	icons/mob/inhands/items_lefthand.dmi
#	icons/mob/inhands/items_righthand.dmi
#	tgui/packages/tgui/interfaces/ChemDispenser.tsx
2025-11-29 22:49:21 -05:00
Alien 3a54507ee7 Gives the automated IV an output pipe and lets you rotate it (#94058)
## About The Pull Request

Plumbing IV drip now has an input and an output, the input only works
when it's injecting and the output only works when it's draining.
You can rotate with it alt click like all other plumbing things now, IV
drip hotkeys removed

## Why It's Good For The Game

It's an *automated* IV drip, the whole point is you can connect it to
plumbing and having half it's functionality just not work is bad.
As for the rotation it's waaaaaay more useful than the IV hotkeys for
plumbing.

## Changelog
🆑 Cat
qol: The plumbing IV drip can be rotate with alt click now
add: The plumbing IV drip can now output chemicals into plumbing
factories
/🆑

fixes #93586

---------

Co-authored-by: John Doe <markkavalerov87@gmail.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2025-11-29 20:02:00 +01:00
Roxy 71faa643bf Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-12 2025-11-12 16:44:13 -05:00
Leland Kemble 8cad3fc210 fixes runtime in plumbing iv add_context() (#93816)
## About The Pull Request

nullchecks `held_item` in `iv_drip/plumbing/add_context()` to prevent
runtimes when attempting to check null.tool_behaviour

## Why It's Good For The Game

fixes #93815

## Changelog
🆑

fix: prevents runtime when hovering over plumbing iv drip

/🆑
2025-11-08 00:36:58 +01:00
Roxy d14e538393 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-15-10-2025 2025-10-15 19:34:41 -04:00
ArchBTW b0e6e72c45 Makes plumbing synthesizers default to 5u (#93332)
## About The Pull Request

As Chemists, when make our massive plumbing factories we always use 5u
because anything under is pointless, and only makes our plumbing
factories slower, and takes up extra tedious/unnecessary time to setup.

This is simply a QoL change so that we don't have to keep pressing the
5u button when we make our synthesizers (its very tedious when working
on huge factories).

## Why It's Good For The Game

Less tediousness, notably when making huge factories

## Changelog

🆑 ArchBTW
qol: Makes plumbing synthesizers default to 5u
/🆑
2025-10-09 08:07:33 +02:00
xPokee 939f2fc9ac Merge branch 'master' of https://github.com/tgstation/tgstation into xpokee-test-upstream-sync 2025-09-10 14:12:16 -04:00
SmArtKar d532cc9003 Adds plumbing to toilets (#92695)
## About The Pull Request

Toilets no longer act as infinite instant water sources, instead working
like showers and sinks - requiring either plumbing, or water reclaimers
to restore their cistern's supply. If a toilet has a large enough fish
inside, or if someone accidentally drops a small item into it, when
flushing it'll spew out all of its cistern's contents around itself
(Dropped items can be removed using a plunger after a small delay).
Also fixed plunger act code on some plumbing objects, and converted
toilets to use item interactions.

### This is a commission for ImprovedName/Ezel

## Why It's Good For The Game

Makes toilets more intresting with plumbing, and brings them more inline
with other plumbing appliances so that way you can't just make a toilet
with 1 material sheet and conjure a infinite water resouce anywhere you
please without a water recycler.
Also you can get up to some silly stuff with foam production.

## Changelog
🆑
add: Toilets now require plumbing or water reclaimers to function, and
can get clogged by small items.
fix: Trying to use plungers on plumbing objects will no longer hit them
after finishing the interaction.
code: Updated toilet item interaction code
/🆑
2025-09-07 09:52:07 +02:00
nevimer b348b617a3 Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07
# Conflicts:
#	README.md
#	code/__DEFINES/admin.dm
#	code/__DEFINES/melee.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/economy.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/elements/crusher_loot.dm
#	code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
#	code/modules/clothing/suits/_suits.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/mineral_scanner.dm
#	code/modules/mob/living/living.dm
#	code/modules/plumbing/plumbers/pill_press.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
2025-09-07 00:37:52 -04:00
SmArtKar aae353ebf8 Fixes unconfigured pill presses manufacturing pills that claim to be bottles (#92832)
## About The Pull Request

Packaging category was unset until you swapped the product type in the
UI, so it'd default to naming the pills bottles. Also decapitalized the
suffixes for parity with the rest of pills/patches/bottles.

## Changelog
🆑
fix: Fixed unconfigured pill presses manufacturing pills that claim to
be bottles
spellcheck: Decapitalized pill press suffixes for parity with the rest
of pills/patches/bottles
/🆑
2025-09-02 18:59:28 -07:00
SyncIt21 796bb41477 Merges copy_to() into trans_to() for reagent holder (#92410)
## About The Pull Request
Merges `/datum/reagents/proc/copy_to()` ->
`/datum/reagents/proc/trans_to()`. Added a parameter `copy_only` to
indicate we want a copy operation

## Why It's Good For The Game
- Less code to maintain
- All the functionality of `trans_to()`[logging, transferring single
reagent, expelling reagents from stomach, etc] now applies for copying
reagents as well which was missing a lot of it, so we have consistent
behaviour

## Changelog
🆑
refactor: code for copying reagents has been refactored. Please report
bugs on github
/🆑

(cherry picked from commit a1d27e384d)
2025-08-08 15:29:11 -04:00
SyncIt21 a1d27e384d Merges copy_to() into trans_to() for reagent holder (#92410)
## About The Pull Request
Merges `/datum/reagents/proc/copy_to()` ->
`/datum/reagents/proc/trans_to()`. Added a parameter `copy_only` to
indicate we want a copy operation

## Why It's Good For The Game
- Less code to maintain
- All the functionality of `trans_to()`[logging, transferring single
reagent, expelling reagents from stomach, etc] now applies for copying
reagents as well which was missing a lot of it, so we have consistent
behaviour

## Changelog
🆑
refactor: code for copying reagents has been refactored. Please report
bugs on github
/🆑
2025-08-05 04:42:58 +02:00
_0Steven da83749a25 Refactor iv drip attackby to item interaction, update screentips (#91940)
## About The Pull Request

Most of this is just the standard refactoring `attackby(...) >
item_interaction(...)`, and adding associated screentips.
The plumbing subtype doesn't need its own separate context code, because
the missing alt-click parts get overridden and thus aren't present
anyway.
The alt-click felt very unclear without feedback, so now makes the
standard clicking sound and plays a balloon alert.
The plumbing iv-drip wrench act no longer needs to check for combat
mode, as that's assumed for tool acts, and we use early returns instead
of that odd order of operations.
## Why It's Good For The Game

Less `attackby`
More screentips
More interaction feedback
## Changelog
🆑
refactor: Refactored IV drip item interactions. Please report any
issues.
sound: IV drip alt-click flow minimization/maximization makes the click
sound.
qol: IV drip alt-click flow minimization/maximization gives feedback.
qol: Updated IV drip screentips.
/🆑
2025-07-11 18:04:50 -04:00
_0Steven d87847affa Refactor iv drip attackby to item interaction, update screentips (#91940)
## About The Pull Request

Most of this is just the standard refactoring `attackby(...) >
item_interaction(...)`, and adding associated screentips.
The plumbing subtype doesn't need its own separate context code, because
the missing alt-click parts get overridden and thus aren't present
anyway.
The alt-click felt very unclear without feedback, so now makes the
standard clicking sound and plays a balloon alert.
The plumbing iv-drip wrench act no longer needs to check for combat
mode, as that's assumed for tool acts, and we use early returns instead
of that odd order of operations.
## Why It's Good For The Game

Less `attackby`
More screentips
More interaction feedback
## Changelog
🆑
refactor: Refactored IV drip item interactions. Please report any
issues.
sound: IV drip alt-click flow minimization/maximization makes the click
sound.
qol: IV drip alt-click flow minimization/maximization gives feedback.
qol: Updated IV drip screentips.
/🆑
2025-07-09 14:22:16 +02:00
SyncIt21 322d4effc5 Removes REAGENT_NOSPLIT flag (#91526)
## About The Pull Request
Because it does nothing.

The only reagents that had this flag were inverse reagents & some
medicines but those reagents already had their `inverse_chem` set to
null meaning they are incapable of splitting even without this flag.

From the comments it said the flag had something to do with stomachs
constantly calling `on_mob_add()` which would split the reagent twice
however upon inspecting stomach code no such thing exists so it didn't
create any problems.

Once the reagent enters the mob it splits just once because purity is
preserved when transferring the reagent to different organs so this flag
never had a chance to do anything

Less code to worry about

## Changelog
🆑
code: removed `REAGENT_NOSPLIT` flag
/🆑
2025-06-15 15:54:33 -04:00
SyncIt21 932e4d2ecc Removes REAGENT_NOSPLIT flag (#91526)
## About The Pull Request
Because it does nothing.

The only reagents that had this flag were inverse reagents & some
medicines but those reagents already had their `inverse_chem` set to
null meaning they are incapable of splitting even without this flag.

From the comments it said the flag had something to do with stomachs
constantly calling `on_mob_add()` which would split the reagent twice
however upon inspecting stomach code no such thing exists so it didn't
create any problems.

Once the reagent enters the mob it splits just once because purity is
preserved when transferring the reagent to different organs so this flag
never had a chance to do anything

Less code to worry about

## Changelog
🆑
code: removed `REAGENT_NOSPLIT` flag
/🆑
2025-06-14 19:59:32 +02:00
Bloop c906b85d30 Audits wash/cleaning signals + refactors wash() to ensure no needless mob updates occur (#91259)
## About The Pull Request

This has the potential to create a lot of needless mob updates which is
not great. Now should only update a mob's clothing if it was actually
washed.

This PR

1) ensures that all wash() procs return a bitflag.
2) ensures that `wash()` proccalls which result in expensive operations
like icon updates only do so when it is necessary

## Why It's Good For The Game

Updating mob sprites is expensive, and doing it when nothing has been
changed is bad.

## Changelog

Nothing really player facing
2025-06-05 20:05:19 -04:00
Bloop 2bae025bfe Audits wash/cleaning signals + refactors wash() to ensure no needless mob updates occur (#91259)
## About The Pull Request

This has the potential to create a lot of needless mob updates which is
not great. Now should only update a mob's clothing if it was actually
washed.

This PR

1) ensures that all wash() procs return a bitflag.
2) ensures that `wash()` proccalls which result in expensive operations
like icon updates only do so when it is necessary

## Why It's Good For The Game

Updating mob sprites is expensive, and doing it when nothing has been
changed is bad.

## Changelog

Nothing really player facing
2025-06-02 18:54:53 +00:00
MrMelbert bc2215667f Re-refactors batons / Refactors attack chain force modifiers (#90809)
Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack

This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.

This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).

🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
2025-05-22 21:30:07 -04:00
sippykot aa2214d566 Printable medipens & other chemistry product changes (#3840)
## About The Pull Request

Adds printable injectors to chemmaster and chemfactory, re-adds bottles
to chemmaster, fixes chemfactory being unable to print 100u bottles that
broke because of upstream changes - see changelog

## Why It's Good For The Game

bugs are bad, there's no real reason why you shouldnt be able to factory
1u pills
and, well... - printable injectors have been a very much requested
feature - we already have hyposprays, but they arent the kind of
disposable slop you can just throw out to crew and have their own issues
- having a 25u 1.5 sec injection is a good alternative to patches and
pills
having them be non-instant limits the potential to use them for murder
(piercing hypospray is still a much better option for that since you can
pump 50u of death slop into people...)

## Proof Of Testing

there would be some if github didnt refuse to load images for some
reason
i did test it a bunch of localhost though, i swear :3

## Changelog
🆑
add: printable 25u injectors, 1.5 sec injection time to other, instant
self inject, AP
add: you can print bottles and large bottles in the chemmaster, no more
pharmacy condimasters
qol: chemfactory can print items with less than 5u reagents now, down to
1u
fix: chemfactory can print 100u bottles properly again
fix: chemfactory doesn't call vials "bottles" anymore
image: added new injector sprites
/🆑
2025-05-21 12:12:20 -07:00
MrMelbert 5261efb67f Re-refactors batons / Refactors attack chain force modifiers (#90809)
## About The Pull Request

Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack

This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.

This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).

## Changelog

🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
2025-05-19 13:32:12 +10:00
Ghom 11d82b7995 You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...

...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!

I also tried to replace some of those single letter vars/args but there
are just way too many of them.

Improving old code. And I want to be able to pet mobroaches while
holding them too.

🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
2025-04-29 18:22:44 -06:00
SmArtKar cabec4e11d Allows chemical presses to customize pill duration, chemmasters can now produce instant pills without the need for water (#90428)
## About The Pull Request

Chemical presses now have a setting to customize pill duration, at 3s by
default (like chemmasters). Both presses and chemmasters now have a
setting for 0s pills, previously the cap was 1 as allowing to completely
dissolve the coating with water was something I only implemented down
the line.
Also slightly cleaned up both chemmaster and chem press files so they
pass linters now.

- Closes #90427

## Why It's Good For The Game

Presses not being able to customize pill durations is kinda silly and
was an oversight on my part, same with 0s pills - you can achieve the
same result, and ideally you should be able to produce those with
presses, at which point there's no reason to not add them to
chemmasters.

## Changelog
🆑
add: You can now customize pill duration in chemical presses
balance: ChemMasters and chemical presses can now create 0s duration
pills.
/🆑
2025-04-29 17:44:07 -06:00
Ghom 339616ae78 You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
## About The Pull Request
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...

...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!

I also tried to replace some of those single letter vars/args but there
are just way too many of them.

## Why It's Good For The Game
Improving old code. And I want to be able to pet mobroaches while
holding them too.

## Changelog

🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
2025-04-23 20:18:26 +00:00