## About The Pull Request
- Fixes#93392
- Replaces all custom callbacks with call to `deconstruct()`. The
callbacks weren't necessary as it did the same thing as `deconstruct()`
but in an round about way
- Removed duplicate `Initialize()` procs and the params `building` &
`ndir` from all wall mounts. Makes everything cleaner
## Changelog
🆑
fix: wall mounts placed by player now falls off when the wall they are
mounted on is destroyed
code: cleaned up wall mount code
/🆑
## About The Pull Request
This is me picking up #93077 but with code changes relative to the two
new flags that Krysonism added in his PR, which unfortunately he never
finished.
## Why It's Good For The Game
Monkeys should be able to ventcrawl even if their left or right arm is
actually a chainsaw or armblade or whatever. See #93077
## Changelog
🆑 Krysonism
balance: prosthetic item limbs are no longer considered equipped items
for some purposes such as ventcrawling.
/🆑
---------
Co-authored-by: Krysonism <robustness13@hotmail.com>
## About The Pull Request
The fish analyzer now uses ui_data to fetch hunger, health, size, weight
and breeding cooldown rather than ui_static_data, meaning these values
are updated in real time on the UI. It also calls
update_static_data_for_all_viewers() whenever the user scans a new fish
or aquarium or if fishes are added/removed to/from the aquarium, and
closes the UI if the scanned object is out of normal view or further
than 7 tiles away.
I've also reduced the breeding cooldown for newly spawned fish from two
times the standard cooldown (usually 2 minutes, hence 4 minutes) to 60%
of it. Offsprings still retain the usual 200% cooldown however. This
should make it a bit easier for people who want to use the aquarium with
fish acquired through means other than fish farming itself.
Lastly, this PR introduces a small unit test to make sure that the
stable population of most fish is higher than 1. This was the problem
with #93043, where you couldn't breed a slimefish with a lavaloop
because the stable population of the latter wasn't set. I'm sure that's
a problem with other fishes as well, and that explains some of the
confusion with the feature (that and its opacity as a whole I guess).
## Why It's Good For The Game
This will close#93043, improve the fish analyzer UI updates, make fish
farming etc. less problematic.
## Changelog
🆑
qol: The fish analyzer UI should update more reliably.
fix: Fixed some of the fishes being unable to reproduce.
balance: Fish acquired through means other than fish farming itself
takes less time to be able to reproduce.
/🆑
## About The Pull Request
shadekin eyes had different offsets based on the direction before but
now they wont be different
## Why It's Good For The Game
fix bug
## Proof Of Testing
i am not opening my localhost again just to show proof but this is what
they looked like before
<img width="560" height="259" alt="afbeelding"
src="https://github.com/user-attachments/assets/58115cc5-d879-42f9-8730-5517c057663d"
/>
They are now fine after I fixed them I moved the right one 1 pixel more
into the face
<details>
<summary>Screenshots/Videos</summary>
</details>
## Changelog
🆑
fix: fixes shadekin eyes being offset wrong
/🆑
## About The Pull Request
So, my original goal was just a refactor for the emissive overlays of
eyes, as a way to implement the specular emissive introduced by smartkar
some time ago, but somehow I found myself dragged into a bigger refactor
or cleanup of organ damage, thresholds, failures. One of the main
problem was that there were no procs called when a organ suffered enough
damage to fail or when recovering from failure. It'd just enable or
disable a bitflag, leaving it up to subtypes to decide how to tackle
organ failure their own ways: diverse, funky and sometimes incompatible.
More often than not relying on their very own "update_thingamajig" kinda
procs that run whenever the organ takes damage, rather than just when
the threshold is reached (low, high, failure. There are however a couple
organs with their own quirky thresholds, I let those slide).
There's also a bit of old code, especially for ears, with the
`AdjustEarDamage` and temporary deafness both predating the framework
for organ damage as far as I know. It really needed a coat of fresh
paint.
Oh, there were also more than a handful of organs that still heavily
relied on some ORGAN_TRAIT source instead of the `organ_traits` list and
the two add/remove procs `add_organ_trait` or `remove_organ_trait`. This
include organs that lose or gain specific traits when failing et
viceversa.
~~Lastly, felinids (and the halloween ghost species) having reflective
eyes. It's just a nod to the tapetum lucidum that animals with night
vision often have (including cats), which is why their eyes are a bit
brighter in the dark. Felinids however, do not have night vision (nor do
ghosts). This is merely cosmetic.~~ Cut out for the time being due to
issues with the specular emissive...
## Why It's Good For The Game
Refactoring / cleaning up old organ code.
## Changelog
🆑
refactor: Refactored organ damage code a little. Hopefully there won't
be issues (otherwise report them).
/🆑
## About The Pull Request
- [ ] I tested this pr
Adds "Midround Mass Traitors" and "Midround Mass Changelings" heavy
rulesets
Midround Mass Traitors will turn a number of the crew into sleeper
agents
Midround Mass Lings will spawn a number of changeling meteors
BY DEFAULT:
- Traitors will spawn 2-4 sleeper agents
- Lings will spawn 2-3 changeling meteors
- They won't run without >=2 candidates
- They have no config blacklist (so the HoP can roll mass midround
traitor, despite not being able to roll normal midround traitor. However
default blacklisted roles like security officers are still blocked)
- They're weighted impossible on tier 0, same weight as most midrounds
on tier 1, and fairly high on tiers 2 and 3
- They're repeatable but very unlikely to repeat
- Significantly higher min pop brackets than their solo counter part
## Why It's Good For The Game
Adds more options for lategame antags than big midrounds
## Changelog
🆑 Melbert
add: Two new heavy dynamic rulesets: "Midround Mass Traitors" and
"Midround Mass Changelings"
/🆑
## About The Pull Request
What it says on the tin. Cargo now has new math for market elasticity,
each parameter and what it does is explained below
**1. Refactor**
1. **k_elasticity**: This is the elasticity as before applied on all
exports except now this is a floating-point value that swings from
`0->1` instead of 10e-10 like is the current case. This in laymen terms
is the percentile of an items actual cost that is sold on cargo [0 means
you get no credits, 0.5 means you get 50% of the items cost, 1 means you
get 100% of the items cost]. Whenever an item is sold on cargo this
value decreases by an amount that is determined by the next variable
2. **k_hit_percentile(default 5%)**: This is the value by which an
export `k_elasticity` decreases whenever an export is successful for
every unit of an item sold. The real formulae by which the exports
elasticity decreases is dependent on the total amount sold and is as
follows
<pre>k_elasticity -= amount sold (1 for most cases except stacks) *
k_hit_percentile</pre>
So subsequent exports yield lesser profits cause the elasticity
decreases. Now the rate at which the elasticity recovers is as follows
3. **k_recovery_time(default 10 minutes)**: This is the time (minimum
unit should be seconds) it takes for the elasticity to rebound back to
100% after it has reached full 0 but recovery process starts immediately
if it decreases at any point. So if elasticity becomes say 50% it means
it would take 5 minutes to reach 100% again
**2. Some Balance changes**
1. Profits earned from exporting gas is linear per mole sold so the more
gas you put in the more profits you get HOWEVER the max number of
credits you can make per canister is 15000 cr
2. Selling fish yields higher prices because it's no longer subject to
the old elasticity formula
3. Selling 50 sheets of anything will decrease future sale price by 10%
and will take 8 minutes to rebound back to 100% if it reaches 0
**3. Improvements:**
- `SSProcessing` subsystem no longer processes more than 180+ export
datums from round start itself but now starts out empty. It instead
processes only those exports whose elasticity has been impacted and
later cancels it after elasticity has reached 100% so performance of
this subsystem has been drastically improved
- export datums now respect `abstract_type` meaning they won't be
created and can be used as a skeleton body for subtypes. So datums like
`datum/material` & `datum/material/market` are not created anymore but
only their subtypes are so we save processing power & memory
- Shaved of a lot of dead exports that went unused
## Changelog
🆑
balance: cargo exports now have different prices with applied elasticity
code: Improved performance of export code
qol: stock blocks can be recycled for materials & show up as stock
blocks in order console sold items
refactor: refactored cargo export code in whole. Report bugs on GitHub
/🆑
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
## About The Pull Request
`TEST_ASSERT` returns on failure, in a loop like this test that means if
you encounter a single failure the whole test fails immediately. We want
every failure listed, `TEST_FAIL` fails without returning.
## Why It's Good For The Game
I thought my code base had one failure but it didn't it had 60+
## About The Pull Request
Heretic has received a complete overhaul. This PR touches nearly every
aspect of the antagonist. For readability's sake, not every change is
going to be listed in this pull request.
For the full list of changes please refer to the design doc:
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.
Code by Me, @Xander3359 and @Arturlang
TGUI by @Arturlang
Sprites by OrcaCora and GregorDM
Writing bits by @necromanceranne
### Core changes
- Cross-pathing has been removed. Main knowledge spells are now
exclusive to their path (for the most part).
- For every main knowledge unlocked (save for the robes and the blade
upgrade), Heretics can choose one option from a draft of 3 random side
knowledges (this is a free point).
- Heretics can now purchase side knowledges from a new tab, the
"Knowledge Shop". Side-knowledges have been divided by tier (Stealth,
Defense, Summons, Combat and Main). Tiers are unlocked as you progress
toward your main path.
- Heretics now gain the grasp and mark upgrade immediately, but their
main knowledge choices cost twice as much (except for the first spell,
the robes and the blade upgrade).
- Path specific robes have been introduced! They come with their own set
of quirks.
- Each Path has received a passive ability. This passive is upgraded
when you first create your robes, and again when you complete the Ritual
of Knowledge.
- Paths have been rebalanced as a result of the removal of cross-path
progression. Cosmic and Moon paths have received soft reworks.
- Upon unlocking the path 2nd level or reaching a total of 8 points
worth of knowledge, Heretics will lose the ability to blade break (and
the limit on blades all together).
- Ascension now automatically calls the shuttle with no possibility of a
recall.
- Late join Heretic has been removed.
### New UI
<img width="750" height="635" alt="moon path ui"
src="https://github.com/user-attachments/assets/184ef783-5c9c-48a1-a2f7-4807ca93e990"
/>
### Knowledge shop
<img width="787" height="669" alt="Knowledge shop"
src="https://github.com/user-attachments/assets/3dc89b84-8c70-4d47-b612-54396e3ea6e7"
/>
### Quality of life //General balance changes
- Heretics will now gain X-ray vision for a few seconds when nearby an
eldritch essence (this effect has a cooldown).
- Ritual of knowledge now requires 1 uncommon item instead of 2. You may
now use a stunprod instead of a baton to complete the ritual. Beartraps
have been removed from the list of possible reagents.
- The maximum number of possible sacrifices required to ascend has been
reduced from 6 to 5 while the minimum has been upped to 4.
- Codex Cicatrix no longer requires a special pen to be made.
### Passive abilities
- Heretics now start with a passive ability. You can find what it does
on the path info tab after a path has been selected, and what they gain
when upgraded.
- Crafting your first set of Eldritch robes will bump your passive to
level 2.
- Unlocking the 2nd level will subsequently unlock your "Ritual Of
Knowledge"
- Completing the ritual of knowledge or ascending will net you the final
level.
### Path Specific Robes
- Armorer's Ritual is no longer a side knowledge. Each path will have
their own unique version of the ritual. This is placed after the 2nd
spell in the tree.
- Robes can no longer be destroyed by fire and acid, grant t4 flash
protection (Moth Heretics stay winning) and protection against basic
syringes, to bring them on par with other antagonist's armor sets.
- The recipe to craft the robes is now a set of armor/vest, a mask (any
mask will do now, not just gas masks), plus the unique reagent required
for the blades (Plasma for Cosmic, Trash For Rust, match for Ash and so
on)
- Wearing the robes as a non-heretic may yield some unfortunate
side-effects.
### Moon Path Rework
Moon path rework.
Moon Heretics gain immunity to brain traumas and slowly regenerate brain
health. Equipping the moon amulette channels its effects through the
moon blade; making it unblockable and cause sanity damage instead of
brute. Ring leader's Rise now summons an army of harmless clones that
explode when attacked; the explosion briefly stuns non-heretics and
cause sanity and brain damage to them. Moon blade can also now be used
when pacified and Moon spells are no longer blocked by regular anti
magic, only mind magic protection.
**Cosmic Path Rework**
Cosmic path has received the biggest batch of changes alongside Moon.
The path has been dead last in ascension and pickrate (less than 5%) for
almost 2 years. It did gain some popularity over the last few months,
reaching the highest ascension rate in the game (12%) while mantaining a
relatively low pickrate.
Cosmic sits in a weird spot, where pretty much every knowledge
surrounding the path is either mediocre or, in the case of the
ascension, dysfunctional. Yet it has maintained a smidge of relevancy
due to how quickly Cosmic heretics can capture and sacrifice targets
thanks to Star Touch.
As a result, the best course of action would be to rebalance the
entirety of the kit; granting the heretic more tools to manipulate space
and dictate the flow of a fight, while lessening their ability to end a
confrontation by instantly sleeping their opponents.
lastly The Star Gazer is now ghost controlled ; And they shoot lazers!
<img width="636" height="451" alt="gazer gag 3"
src="https://github.com/user-attachments/assets/601d6881-c042-4e42-8ce6-ac90cd27848b"
/>
## Why It's Good For The Game
### Ok...but why do we want this?
Again, if you want my full reasoning, please check my doc
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.
To keep it short and concise; Heretic is too complex and unintuitive for
its own good. Too impenetrable for new players and too abusable for
experienced players. This can be chalked up to a lot of poor design
decisions. But ultimately, what I believe being the biggest contributor
to the current status of Heretic is the ability to move into different
paths, also known as "Cross-Pathing".
### Cross Pathing my beloathed.
Cross-pathing, while cool in theory, overcomplicates the antagonist and
overloads them with power. Players dealing with the heretic are
incapable of working out what a given heretic can do. This also leads to
late game heretics having 3 rows Worth of action buttons and virtually
no weakness.
Over the last year, I've often received the understandable but also kind
of unfair accusations of making Heretic too powerful without a clear aim
or purpose.
My goal with the paths I've reworked over the last year (Rust,Void and
Blade) wasn't necessarily to just make them stronger (although that was
also part of the goal, as they were paths that were underperforming),
but for them to have more interactions with the sandbox and to better
live up to the fantasy presented to the player.
If an harbringer of frost gets countered by a cup of coffee, we probably
messed something up.
Unfortunately, the current incarnation of Heretic doesn't really allow
for surgical balance changes to specific paths. Every time a knowledge
gets buffed, we make every path that can easily tap onto that knowledge
stronger by default. It doesn't take a genius to understand why this
system is ultimately unsustainable.
### Blade Breaking
I feel that after a heretic has reached the near peak of their power,
they no longer need the ability to instantly escape any encounter. Check
my doc for my full reasoning.
## Less versatile, more specialized paths.
By removing cross-pathing, we remove a huge maintainability burden from
the antagonist. Paths can now be designed around clearer strengths and
weaknesses. They become easier to balance and less of an headache to
understand for everyone.
It also means we can give paths some needed quality of life quirks
without having to worry how such a change might have a knock-on effect
for other paths.
Ash heretics can finally let loose without dying by their own flames.
Cosmic Heretic can go to space without having to carry a modsuit. Moon
Heretic can use their abilities without fear of one random trauma
ruining their day, and so on.
### What a horrible night to have a curse...., wait how do I curse
people again?
As of right now the heretic tree has quite a hefty amount of trinkets
that pretty much never see use.
Partly because the tree itself is a nightmare to navigate. And partly
because why would anyone set up an elaborate plan or scheme when they
can unleash 2 rows of spell in the span of bunch of seconds.
Heretics mostly gravitate towards powers that push them towards greater,
more potent combat strength. If it doesn't contribute to killing people
quicker, it isn't worth doing for most. And given the opportunity cost
associated for taking those powers, they will remain that way so long as
there are better choices to be poached.
The new draft system encourages Heretics to play more with the tools at
their disposal. If you want to go for a specific combo from the side
path options, you may now do so by tapping into the knowledge shop.
Yes, the shop does include a few knowledges from the other paths. But
these are limited to 1 per path, are very expensive and can only be
unlocked very late into the shift.
## Drip Of the Mansus
The iconic heretic robe is actually sequestered to a side path that is
most easily access by only two paths at a time. Since heretic paths are
being made to be much more specialized, the most obvious way in which
this can be showcased is through an easily
identifiable outfit.
By using the robes, we can both telegraph WHAT heretic you are looking
at, and just how much power they've accumulated and when it is
reasonable to take the kid gloves off and treat them as a genuine
threat. If a heretic is in their
robes, that heretic is now a significantly more prominent danger to the
station.
It also serves as a useful means for gating some of the more powerful
effects of a heretic's path behind the robes, AND enable options for
disarming them of that power should they be captured without making it
something endemic to their mob.
A major problem with heretics is a lack of certainty as to how powerful
they have become. A heretics robes is one of the milestones to help
players dealing with heretics identify that.
### Will this be 100% fair and balanced?
This is a massive overhaul to a pretty complex and bloated antagonist.
I've done my best to show the changes to several maintainers and other
members of the community for their feedback. But at some point we'll
have to see how this behave in the environment to get a feel if
something is over or undertuned. (that's my way of saying, yes this is
likely gonna require a testmerge or two).
What I will say is that I'm not trying to change the core identity of
Heretic.
Heretics should have the upperhand in single encounters early on, be
able to joust a small group of players after they unlock their final
spell, and end the round when they ascend. They're a progression
antagonist. They should retain their payoff as well as pose a danger as
they grow stronger.
But if more players feel like they are more reliably able to play the
antagonist in more varied and interesting ways, rather than the
antagonist largely existing as a measuring stick for 'robustness' due to
its elitist design philosophy, then the rework has been a success. There
should be something for
everyone in the antagonist, as is true for all of our antagonist roles.
## About The Pull Request
`/proc/flatten_list()` -> `/proc/assoc_to_values()`, also changes the
code doc to mirror the language of `assoc_to_keys()`'s code doc
## Why It's Good For The Game
Having a proc called `assoc_to_keys` that takes an associative list and
returns a list of the keys, and also having a proc that takes an
associative list and returns a list of the values, and the latter not
being called `assoc_to_values` is very funny
## Changelog
🆑
code: renamed flatten_list proc to assoc_to_values
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
### CMO palette update
Before - after
<img width="533" height="324" alt="image"
src="https://github.com/user-attachments/assets/c8a843a6-875d-4796-8c62-d24dd509147b"
/>
Logical follow up to #93313 and #91902
CMO now has a backpack which matches their teal palette rather than
re-using the medical doctor's blue backpack
CMO now starts with white sneakers instead of blue sneakers
### Garment bag update
Garment bags can hold backpacks, duffels, etc.
However they CANNOT store backpacks which have ANY contents, so no risk
of storage nesting memes here.
### Misc
Removed the defib mount from the CMO's closet
Minor bugfix for being unable to swap storage positions of items which
were instantiated in a storage
## Why It's Good For The Game
- Much like the Paramedic, the CMO has had many cooks which have not
always been on the same page, so this makes their sprite a bit more
coherent.
- Heads with unique packs just tossed them in their closet which is
pretty spammy given we have four variants now. Putting them in the
garment back makes sense.
- Defib mount in CMO's locker hasn't been necessary for a while now that
all treatment centers spawn with defib mounts.
- Bugfix.
## Changelog
🆑 Melbert
image: CMO now has unique backpack/satchel/etc. sprites which matches
their teal palette.
image: CMO spawns with white sneakers instead of blue sneakers.
qol: Garment bags can hold empty backpacks/satchels/etc.
del: Defib mount removed from CMO's locker.
fix: Items stocked in a storage item by default can be
mouse-drag-swapped like any other item.
/🆑
## About The Pull Request
Fixes#93359
Caused by #93165
Inventory screen elements were no longer considered reachable, which
broke mousedrop handing on objects that check "is dragging into
inventory slot"
I don't know the best way to fix this yet but I figured the next best
thing would be to make all of these use the `drag_pickup` element, which
skips this reach-ability check
Thus I refactored it slightly to accommodate for items which should
contextually not be drag-pick-up-abble and bam, works like a charm
## Changelog
🆑 Melbert
fix: Dragging defibs and modsuits off your back works again
/🆑
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
## About The Pull Request
Caused by #93165
I'm not sure but I think this was just missing a check for
`TRAIT_SKIP_BASIC_REACH_CHECK`, because soup pots are given that trait
## Changelog
🆑 Melbert
fix: You can interact with soup pots on stoves again
/🆑
## About The Pull Request
`dcs_check_list_arguments` doesn't use the unit test room anyway, nor
should any (so far non-existent) unit test after `create_and_destroy`.
Nonetheless, we cannot enforce these assertions after spawning 99% of
the objects and mobs in the game.
## Why It's Good For The Game
Fixing CI.
## Changelog
N/A
## About The Pull Request
#93305 rearranged the logic for `alert/Click` but deleted `return TRUE`
at the end which all subtypes rely on
## Changelog
🆑 Melbert
fix: Screen alerts are clickable again
/🆑
## About The Pull Request
Hotswapping now hijacks the attack chain in pre_attack rather than doing
so before item_interaction, which now allows players to interact with
items in their inventories (such as stabilizing cores with serums)
without hotswapping the two items.
Also added a unit test to ensure that it works as intended.
## Changelog
🆑
fix: Mining style hotswapping now respects item interactions
/🆑
## About The Pull Request
One of the development hell cycles with mapping is how long it takes to
fix quality or run issues with maps.
By adding a prefix called "maptest_" to some of the unit tests it allows
mappers to only target some tests instead of the usual 350+ tests to run
each time or trying to trigger them individually and faffing.
This does not rename the unit test files themselves to preserve history
but just the "/datum/unit_test/" in each file.
This does not break the current CI or obstruct other tests - A few other
map files that call these tests specifically have been edited to point
at the new datum name.
This assumes you are using the TG testing extension to do this.
| All Tests | maptest_ |
|--------|--------|
| <img width="426" height="106" alt="image"
src="https://github.com/user-attachments/assets/d1d6f81e-16bd-473a-88da-e8b56f8bd3d0"
/> | <img width="434" height="96" alt="image"
src="https://github.com/user-attachments/assets/ea1c47fe-a6ce-40c6-b2cb-65b9c8e94a29"
/> |
| <img width="360" height="886" alt="image"
src="https://github.com/user-attachments/assets/65bcd774-79ad-432e-8211-c67fb9d3e443"
/> | <img width="370" height="833" alt="Screenshot 2025-10-01 204609"
src="https://github.com/user-attachments/assets/ad360796-5698-42fd-bd2e-51de1a02ab87"
/> |
## Why It's Good For The Game
- Should make it easier for mappers to test locally, saving CI/Github
resource for TG
- Mappers can now test their work 56% faster
## Changelog
🆑
code: Mappers can now run just mapping unit tests - Should be 56% faster
- Should have no player impact
/🆑
Co-authored-by: loganuk <falseemail@aol.com>
## About The Pull Request
Fixes#93280
It would give you the null rod arm, then equip the null rod, then try to
give you the null rod arm again, which removed your null rod arm and
caused... problems
## Changelog
🆑 Melbert
fix: Fixed chainsaw nullrod
/🆑
## About The Pull Request
When more Felinid ear styles were added, no one updated the jank old
randomization code
When Felinid ears were refactored, no one updated the jank old
randomization code
Sooo let's do that shall we?
1. Species `get_mut_organs` -> `get_organs`, it gets gets all organs the
mob has anyways
2. Prefs `relevant_external_organ` -> `relevant_organ`, it applies to
any organ type
3. Del organ `preference`, the preference itself handles it via
`relevant_organ`
## Changelog
🆑 Melbert
fix: Felinids will randomize their ear type properly
/🆑
## About The Pull Request
Adds
- baseball bat
- 9mm pistol
- laser gun
- wooden baton
- toolbox
To monkey business weapon pool
## Why It's Good For The Game
Expands coverage to more weapon types - blunt weapons, stun weapons,
storage objects, ballistic firearms, and laser firearms
## About The Pull Request
This adds more trash:
- Paper
- Empty cigarette packs
- Empty lighters
- Empty food containers from snacks
- Empty can containers
- Unarmed mousetraps
- Cut wire
- Broken plates
- ~~Empty bowls~~
This slightly tweaks some existing values to make things feel fresh.
Also adds a unit test to enforce trash food types to be added to the
trash spawner.
## Why It's Good For The Game
The more trash we have, the less we'll feel bad about being garbage
players.
## Changelog
🆑
qol: More types of garbage (empty lighters, empty cigarette packs, empty
food, etc.) have been added to the trash spawner.
qol: Paper plane added to the paper spawner, which is now used in the
trash spawner.
/🆑
## About The Pull Request
This PR adds 4 new types of soil and a holder item; the soil sack, to
contain and transport said soils.
<img width="496" height="378" alt="bild"
src="https://github.com/user-attachments/assets/57f42a9c-c731-4195-91df-b4456ec45e7b"
/>
Two of the new soils + the regular old soil are available in the premium
section of the nutrimax.
All 5 soil types are available from cargo.
It also adds two new plant traits; soil lover and semiaquatic, that
allows coders to confer maluses to plants growing in trays or soil
respectively.
Potatoes, sweet potatoes, carrots, parsnips, cahn'roots, white and red
beets currently have soil lover, reducing their produced yield by 30%
and their potency randomly between 20-80% if grown hydroponically.
Rice has semiaquatic which increases the amount of weeds gained by 50%
if grown in soil rather than hydroponically.
## Advanced soil types
### Vermaculite
#### Stats
Max Nutrients: 20u
Max Water: 150u
#### Special Effects
Multigraft: Up to 3 grafts can be cut from a plant planted in
vermaculite.
Graft Medium: Graft cuttiongs can be directly placed into vermaculite to
create a new plant vegetatively.
### Hydrogel Beads
#### Stats
Max Nutrients: 15u
Max Water: 300u
#### Special Effects
Hydroponic + Soil: Both water loving and soil loving plants can grow
without maluses.
Super Water: Water consumption rate is decreased by 50%
### Korta Coir
#### Stats
Max Nutrients: 20u
Max Water: 100u
#### Special Effects
Fast Mushrooms: Mushrooms mature(and age) 40% faster if planted in this
soil.
### Worm Castings
#### Stats
Max Nutrients = 35u
Max Water = 200u
#### Special Effects
Slow Release: If the nutrients run out, 1u nitrogen will be
automatically added to the nutient pool.
Worm Habitat: Composting veggies in this soil has a chance to produce an
extra slimy worm.
### Soil Sacks
Use them on the floor to place a soil at that location.
You can reverse this process by right clicking a soil with a shovel.
The sacks are huge items that deals stamina damage, but have slowdown
when carried.
They can be wielded to remove slowdown, double the damage output and
gain 25% block chance.
They have unique normal and wielded inhands for each sack type.
#### Price List
**Soil**
Nutrimax: 50 cr
Cargo: 400 cr / 5 sacks
**Vermaculite**
Nutrimax: 100 cr
Cargo: 400 cr / 3 sacks
**Hydrogel**
Nutrimax: 100 cr
Cargo: 400 cr / 3 sacks
**Coir**
Nutrimax: N/A
Cargo: 600 cr / 3 sacks
**Worm Castings**
Nutrimax: N/A
Cargo: 800 cr / 3 sacks
#### Misc Soil Changes
Soil now have a new armour type and are generally much harder to destroy
by shooting or bashing them.
Fixed a bug where weeds would instantly reduce yield to 3 instead of
lowering it by 1-2 per cycle.
## Why It's Good For The Game
I have long been a fan of using soils in botany, they are the cheapest
and easiest way to make new trays and enable many interesting
strategies.
The default soil is fine for what is but it kinda sucks, not only having
low stats but also missing autogrow, a feature botanist have grown
completely addicted and dependent on.
When self sustaining trays were removed and autogrow added, it was
intended as a way to keep a couple of plants alive while you ran out to
do errands or grab a drink.
However, the feature has devolved into basically a shift start self
sustaining for all your trays and standard practice is using it on every
single tray that currently is not trying to mutate.
This has resulted in certain core botany mechanics like water and pests
being made totally irrelevant, shrinking design space a lot.
Rather than just reaching for the stick, I thought it would be fun to
instead offer them a carrot in the form of an expanded toolset of soils
with unique effects that cannot be replicated by trays.
These new soils offer niche benefits that enable advanced botany
gameplay and provides a framwork for deepening plant / tray interactions
in the furture.
## Changelog
🆑
add: Added 4 new types of soil
add: Added soils sacks to the nutrimax
add: Added soil sack crates to cargo.
balance: Soil now has higher armor values.
balance: Rice now gets more weeds if grown in soil.
balance: Carrots, potatoes, beets and their mutations now get reduced
yield and potency if grown hydroponically.
fix: Weed overgrowth no longer instantly sets yield to 3.
/🆑
## About The Pull Request
I was a solo doctor when someone chem factorised this and killed most of
the crew :)
Fixes#93133
temp_trauma was declared as an instance reference but stored a type path
Store the actual trauma better and direct delete it, then cleans it up.
Also adds a unit test.
## Why It's Good For The Game
- Exploit farming bad
## Changelog
🆑
fix: Fixes endless Neurine trauma farming & adds unit test to keep it
safe
/🆑
Co-authored-by: loganuk <falseemail@aol.com>
## About The Pull Request
update_filters() is more expensive than it should be due to running
timSort every time a filter is added or removed, plus we wipe
re-initialize the entire atom filter list every time we call it. I
swapped it to use binary insertion into the main list, and we can cut
down on the amount of filter churn by storing filters in a separate list
which we can use Insert on, which allows us to stop constantly deleting
and recreating filters completely.
## Why It's Good For The Game
Server CPU consumption go down
## Changelog
🆑
refactor: Refactored filters to utilize binary insertion instead of
timSort. The server should run somewhat faster now, hopefully.
/🆑
## About The Pull Request
The first argument of `Hear` is `message`, the message heard
OR SO YOU'D THINK
Actually the first argument doesn't do anything but get overridden by
ALL implementations of `Hear`
No other uses as far as I and Ephe can tell. Removing it makes it a ton
easier to understand and gives us some free performance in radio code by
not rendering messages twice
## Changelog
🆑 Melbert
code: Removed some redundant code from core hearing code. Report if you
hear anything weird.
/🆑
## About The Pull Request
moves all implementations (im aware of) for "Im a parent type dont spawn
me please" to the datum layer to standardized behavior
adds a standerized proc for filtering out "bad" items that we dont want
spawning. applies to it the subtype vendor, gifts, and a new spawner and
mystery box for a random gun (neither playerfacing)
"port" of https://github.com/shiptest-ss13/Shiptest/pull/4621https://github.com/user-attachments/assets/22f6f0b2-b44e-411a-b3dc-6b97dc0287aa
small warning: I dont have EVERY abstract type defined right now but,
ive done a good enough job for now. Im tired of data entry rn
## Why It's Good For The Game
standardizing behavior. Might be a micro hit to performance however
having this lets us not rely on icon state to determine whether
something is a parent type and makes it much easier to tell something is
a parent type (could be applied further to things like admin spawning
menus and things like that).
need feedback on if this is actually good for the game.
## Changelog
🆑
add: Soda cans show up in the silver slime drink table.
add: Examine tag for items that are not mean to show up ingame.
refactor: Standardizes how gifts rule out abstract types.
fix: gifts no longer check if something has an inhand, massively
expanding the list of potential items.
/🆑
## About The Pull Request
Having 2 different species with similar names, looks, attributes etc.
seemed like it would be confusing so I thought we should probably trim
it down to 1, however since I'm doing that I thought of other changes to
go along with it:
- The passthrough ability was replaced, now while you're passing through
things you no longer drop stuff, but you put a tombstone where you start
phasing, and are pulled back to it while done. You still can't interact
with anything in this form. Having the tombstone dug out will be raiding
your grave, so you'll be pulled out as a dead skeleton.
- Removes holy water interactions
- Ghosts now have organic limbs & are a Humanoid, so they can have
surgery and other forms of healing used on them.
https://github.com/user-attachments/assets/5db0c204-0070-466b-8b6c-1702ff0fd94e
## Why It's Good For The Game
Ghosts being available to Wizards is okayish but is a rather big buff
for one you get free, yes you can still be caught up to if you're in
hallways and such but it's way easier to get away with than like, your
default teleport scroll even. Being available to Miners though was a big
mistake because it opened them to be quite an annoyance with it. The
only counter was the fact no healing worked on them, which I don't think
is how it should be balanced.
I thought I could trust players with such tools but apparently I had too
high hopes.
Anyway this makes it more bearable for it to be given out at the low
cost it currently is at, it's still good as flavor, to spook people or
ghost around, and I think while it doesn't make 100% sense why you lose
access to your hands, inventory, and UI when you supposedly "drop" your
tombstone, I think it's still a good advantage for "scouting", sorta
like a lesser spirit realm rune.
Closes https://github.com/tgstation/tgstation/issues/91849
## Changelog
🆑
del: Merged ghosts and spirits into one species.
balance: Spirit's passthrough ability is now tied down 7 tiles from a
tombstone, but is no longer affected by holy water nor does it make them
drop their equipped gear.
balance: Ghosts can now be healed.
/🆑
<img width="819" height="348" alt="image"
src="https://github.com/user-attachments/assets/0424ec76-2648-43d3-8e94-d44558b44bcf"
/>
## About The Pull Request
Follow up from #92751 - Not to conflict with it but as an idea on how to
change it for the long run.
Paramedics currently start with broad department access. This proposal
replaces that by granting temporary department access only when an
emergency is called.
When a player presses "Call X" on a Requests Console, responders called
receive temporary access to the common work areas of that department.

> [Security] The Automated Announcement System coldly states, "SECURITY
EMERGENCY in Research Lab! (Called by Sloan Keppel, Scientist) RETA door
access granted to responders."
> [Science] The Automated Announcement System coldly states, "RETA
activated (Called by Sloan Keppel, Scientist). Security personnel now
have temporary access to your areas."
They do not receive access to sub rooms or high risk areas.
- Access lasts 5 minutes (configurable)
- Access is removed when the timer expires or the emergency is resolved
- No mapping changes are required (uses existing request consoles)
- Removes Paramedics round start access but gives them external access
to rescue bodies in space by default
- Flashing blue lights on doors affected by temporary access
<img width="897" height="837" alt="image"
src="https://github.com/user-attachments/assets/97980cb4-3481-44b6-9f96-fc241ca16f57"
/>
**The full document is here:
https://hackmd.io/@NM8HxpG_Toahg5pimrpsKw/Hk0tKq3Yxe**
**Wiki documentation for players and admins:
https://wiki.tgstation13.org/Guide_To_RETA**
## Why It's Good For The Game
- Removes paramedics’ broad “Doctor+” access.
- Keeps them effective as emergency responders.
- Responders must be called in OR access upgraded.
- Keeps sensitive areas secure.
- Prevents spam or stacking through cooldown.
- Scales across all maps without mapper work.
- Gives admins a new tool for temp department wide access
- Dedicated logging file and unit tests
- Very performant, only affects living players with connected mind
- Gives Request Consoles more use as an alarm button and further utility
- Imagine later on "Request Janitor" which sorts access and tells
Janitor where needed
## Changelog
🆑
add: RETA System - Request Consoles give temporary access to responders
when used for some areas. Paramedics lose broad access but get external
space access.
qol: Request consoles now show name and job role on call message &
Cooldown on spamming calls + sound prompt
qol: Medibot access no longer based on Paramedic trim ID - Still has
original access
image: Added "lights_reta" for temporary door access when in effect
admin: Gives admins "RETA door access" verb for giving department wide
area access on maps.
config: New config settings for RETA
/🆑
## About The Pull Request
Fixes#85028
Obscured flags and covered flags are tracked on carbons, updated as
items are equipped and unequipped. It's that shrimple.
Closes#92760
Just removes the species exception checks for not making sense
Also refactors handcuffs / legcuffs removal. In all of these situations
they were hardcoded when they could easily just use an inventory proc to
work.
## Why It's Good For The Game
Stops a million excessive calls to `check_obscured_slots`
Makes obscured behavior more consistent
Makes obscured behavior easier to use
Cleans up human rendering (There was some cursed stuff before with
render item -> updated obscured -> update body -> cause side effects)
## Changelog
🆑 Melbert
del: Golems which somehow manage to grow wings and somehow manage to
equip something that covers their jumpsuit can no longer fly.
(Seriously, this will not affect anyone)
refactor: Refactored clothing obscurity entirely. Items should be a
loooot more consistent and what covers what, and should update a lot
snappier. As always, report any oddities, like mysteriously disappearing
articles of clothing, hair, or species parts
refactored: Refactored handcuffs and legcuffs a bit, report any odd
situations with cuffs like getting stuck restrained
/🆑