## About The Pull Request
These changes fix how machines are pried open with crowbars. Currently,
most machines can be pried open, but many of them have no method for
being closed again. This means they can be pried once, and then never
again (as their internal logic has them stuck in an "open" state).
Additionally, the densities of these machines is also inconsistent, as
density is tied to the procs for opening/closing machines (open =
non-dense, closed = dense). Thus, these new changes allow desired
densities to be passed to `open_machine()` and `close_machine()`, as
well as `default_pry_open()`, meaning that atypical machine densities
can be maintained (e.g. machines that should remain dense when open, or
non-dense when closed).
I've also added a `close_after_pry` boolean parameter to the
`default_pry_open()` proc, which determines whether to immediately close
a machine after opening it. This is useful for machines that don't
really have a use case for remaining open, often lacking a sprite to
represent this state as well.
* Note: Opening and immediately closing machines with this boolean will
still drop their contents onto the floor, but will now immediately
"close" in their logic, allowing for further prying attempts in the
future.
It's worth noting that this implements default density values for these
procs, which match the existing behavior for machines, so as to
(hopefully) not disrupt existing or expected machine behavior.
Two caveats to these changes currently exist:
1. On machines that immediately close after prying, the prying action
can now be spammed to the chat with repeated clicking. I'm uncertain if
this needs some sort of spam protection or if it's fine as is.
2. I've only been able to manually test this code. I'd love to write
unit tests for it, as it affects a lot of different machines, but don't
know where to begin with DM Unit Testing (or which files would be good
examples to reference in the code base).
* Note: I did manually test each and every machine that calls
`default_pry_open()` and they all seem to be working correctly. (Except
for `obj/machinery/plumbing/sender`, but that doesn't seem to need
prying, as it has no contents to drop, only reagents.)
As always, let me know if any improvements/changes should be made.
This closes#26833.
## Why It's Good For The Game
These changes allow crowbar prying to correctly occur multiple times on
any machine, which is intended behavior. It prevents player confusion
that could occur when a machine couldn't be pried open a second time
during a shift, even though it had previously been pried before, forcing
players to question themselves. (Are they missing something? Did they
perform the action a different way last time? Is the machine actually
still powered on instead of off? Etc.)
These changes also maintain the correct density for machines after
prying, preventing scenarios where a machine might behave differently
once it had been pried open. (An example of this was being able to walk
through a smartfridge after prying it open.) Additionally, players are
no longer required to know/use workarounds (such as machine disassembly)
to retrieve a powered-off machine's contents.
Overall, these changes improve consistency around machines, creating
more scenarios where they behave as players would expect.
## Changelog
🆑
fix: machines can now be pried open more than once.
fix: machines now have the correct density when pried open.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
https://github.com/tgstation/tgstation/pull/73796 Seems to have made it
so that gondola meat is used in the infuser instead of its body, which
turns into meat on death. The issue with that is the meat slab does not
have the `GORE` flag and so was rejected by the infuser.
As per
afe6ecc353/code/game/machinery/dna_infuser/dna_infuser.dm (L294-L297)
Looking at the code this should fix it right up.
## Why It's Good For The Game
Bugfix
## Changelog
🆑
fix: fixes gondola meatslab not being able to be placed into the DNA
infuser
/🆑
🆑 coiax
fix: Fixed missing food types for the meat clown, it is now meat and
fruit.
/🆑
Liked by lizards, toxic to moths, and neutral to humans and felnids in
terms of species biases.
The construction recipe is steak + banana, but the resulting product has
no food types, making it blandly suitable for everyone. This is an
oversight. Not everyone will like a mixture of banana and flesh.
## About The Pull Request
I changed exactly 2 letters of code, The name of the food item in-game
should now properly be "Paçoca"
## Why It's Good For The Game
I'm not really sure why it was wrong in the first place. This is the
only Brazilian food item in the game, it better at least get the name
right
I was initially worried that this might cause issues for those who do
not have Ç on their keyboard to search it, but then again, mothic food
exists
## Changelog
🆑
spellcheck: Pacoca is now called "Paçoca", as it should
/🆑
## About The Pull Request
Adds wirebrush to janitor vendor, ability to put it in janitor belt and
adds it for janitor borg.
Just though that if it's in-game then why is it just in autolathe.
It won't be used so rarely and it'll be obtainable not just by
autolathe.
## About The Pull Request
Fixes#74119
This was probably a victim of the storage refactor.
When removing items, it was dumping them _inside the mob_ rather than on
the floor, additionally it was putting mob blood on every item already
inside the mob rather than on the items being dumped for some reason?
Now it doesn't do that.
## Why It's Good For The Game
Removing a storage implant from someone should dump the items, not trap
them in your body.
## Changelog
🆑
fix: Removing a storage implant from someone will dump the items on the
ground rather than inside the mob.
/🆑
## About The Pull Request
HackMD for this can be found here:
https://hackmd.io/VEbjO1kaQJarao4KqGfzgw?view
Basically, this gives the first Janitor an access key that they can use
to enter departments. This requires a Head of Staff to approve it
through the keycard authenticator, and only holds one department at a
time, and will clear itself out after 10 minutes.
This gives departmental AA, including the head of staff's office, adding
a tradeoff.
The Janitor is alerted when access is given to their key (as their
keyring will say such) and everyone can see janitors trying to open a
door when they use it (with a cool sound, too).
You can't bump open airlocks with it, I limited it to directly using it
on the door, because I thought it made it feel more realistic to a
keyring.
I had an earlier version of this that gave the key it's own access,
which allowed bumping open, but it also allowed things like locking RD
consoles, and I dunno how strong I want this key to be.
I also wanted to limit how easy this is to greytide/steal, currently
only the first Janitor spawns with the key. I thought it would be too
easy to exploit otherwise, or essentially stolen roundstart if there
were no Janitors. Maybe this can also fit as a Traitor objective after
melon's new objective PR is done?
### Minor detail
While adding icons, I realized inhands don't actually set its icon state
to the default if it's null, so I removed that LYING comment.
## Why It's Good For The Game


Alternatively, https://youtu.be/dlkSbQ-IkRM?t=182 (timestamp)
## Changelog
🆑 JohnFulpWillard, sprites by BalkyGoat
add: The Janitor Access key: Janitors can now be given departmental AA
(one at a time) using the Keycard authentication device in Command
offices. Use it if you need cleaning!
fix: HoP's trim is no longer set to edit Supply access.
/🆑
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
## About The Pull Request
Fixes#74080
In #74029 I intended to change the implant logic to use biotypes for
animals and basic mobs, except what I actually did was make it use
biotypes for _every_ mob.
Because plasmamen are "minerals" they then couldn't be implanted.
Now we only check biotypes for "animals".
You can implant Ian, you can implant your plasmaman coworker, and you
can't implant Beepsky.
## Why It's Good For The Game
It fixes a bug.
## Changelog
🆑
fix: Plasmamen and golems (and androids, if you ever find one) can be
implanted again.
/🆑
## About The Pull Request
This PR adds a new unit test for all organs, a new unit test for lungs,
and includes improvements for the existing breath and organ_set_bonus
tests. Using the tests, I was able to root out bugs in the organs. This
PR includes an advanced refactor of several developer-facing functions.
This PR certainly represents a "quality pass" for organs which will make
them easier to develop from now on.
### Synopsis of changes:
1. Fixed many fundamental bugs in organ code, especially in
`Insert()`/`Remove()` and their overrides.
2. Added two new procs to `/obj/item/organ` named `on_insert` and
`on_remove`, each being called after `Insert()`/`Remove()`.
3. Added `organ_effects` lazylist to `/obj/item/organ`. Converted
`organ_traits` to lazylist. 2x less empty lists per organ.
4. Adding `SHOULD_CALL_PARENT(TRUE)` to `Insert()`/`Remove()` was very
beneficial to stability and overall code health.
5. Created unit test `organ_sanity` for all usable organs in the game.
Tests insertion and removal.
6. Created unit test `lungs_sanity` for
`/obj/item/organ/internal/lungs`.
7. Improved `breath_sanity` unit tests with additional tests and
conditions.
8. Improved `organ_set_bonus_sanity` unit tests with better
documentation and maintainable code.
---
### Granular bug/fix list:
- A lot of organs are overriding `Insert()` to apply unique
side-effects, but aren't checking the return value of the parent proc
which causes the activation of side-effects even if the insertion
technically fails. I noticed the use-case of applying "unique
side-effects" is repeated across a lot of organs in the game, and by
overriding `Insert()` the potential for bugs is very high; I solved this
problem with inversion-of-control by adding two new procs to
`/obj/item/organ` named `on_insert` and `on_remove`, each being called
after `Insert()` and `Remove()` succeed.
- Many organs, such as abductor "glands", cursed heart, demon heart,
alien hive-node, alien plasma-vessel, etc, were not returning their
parent's `Insert()` proc return value at all, and as a result those
organs `Insert()`s were always returning `null`. I have been mopping
those bugs up in my last few PRs, and now the unit test reveals it all.
Functions such as those in surgery expect a truthy value to be returned
from `Insert()` to represent insertion success, and otherwise it
force-moves the organ out of the mob.
- Fixed abductor "glands" which had a hard-del bug due to their
`Remove()` not calling the parent proc.
- Fixed cybernetic arm implants which had a hard-del bug due to
`Remove()` not resetting their `hand` variable to `null`.
- Fixed lungs gas exchange implementation, which was allowing exhaled
gases to feedback into the inhaled gases, which caused Humans to inhale
much more gas than intended and not exhale expected gases.
### Overview of the `organ_sanity` unit test:
- The new `organ_sanity` unit test gathers all "usable" organs in the
game and tests to see if their `Insert()` and `Remove()` functions
behave as we expect them to.
- Some organs, such as the Nightmare Brain, cause the mob's species to
change which subsequently swaps out all of their organs; the unit test
accounts for these organs via the typecache `species_changing_organs`.
- Some organs are not usable in-game and can't be unit tested, so the
unit test accounts for them via the typecache `test_organ_blacklist`.
### Overview of the `lungs_sanity` unit test:
- This unit test focuses on `/obj/item/organ/internal/lungs` including
Plasmaman and Ashwalker lungs. The test focuses on testing the lungs'
`check_breath()` proc.
- The tests are composed of calling `check_breath` with different gas
mixes to test breathing and suffocation.
- Includes gas exchange test for inhaled/exhaled gases, such as O2 to
CO2.
### Improvements to the `breath_sanity` unit tests:
- Added additional tests for suffocation with empty internals, pure
Nitrogen internals, and a gas-less turf.
- Includes slightly more reliable tests for internals tanks.
## Why It's Good For The Game
**Organs and Lungs were mostly untested. Too many refactors have been
submitted without the addition of unit tests to prove the code works at
all.** Time to stop. _Time to get some help_. Due to how bad the code
health is in organs, any time we've tried to work with them some sort of
bug caused them to blow up in our faces. I am trying to fix some of that
by establishing some standard testing for organs. These tests have
revealed and allowed me to fix lot of basic developer errors/oversights,
as well as a few severe bugs.

## Changelog
🆑 A.C.M.O.
fix: Fixed lungs gas exchange implementation, so you always inhale and
exhale the correct gases.
fix: Fixed a large quantity of hard-deletes which were being caused by
organs and cybernetic organs.
fix: Fixed many organs which were applying side-effects regardless of
whether or not the insertion failed.
code: Added unit tests for Organs.
code: Added unit tests for Lungs.
code: Improved unit tests for breathing.
code: Improved unit tests for DNA Infuser organs.
/🆑
On the tin, doing it like this means we can reduce our overall line
fingerprint whenever we have to add two or more traits from the same
source on the same target. Especially helps when we get to the 4+ range
of traits, a breath of fresh air even.
Doesn't mean we have to do for loops, as that's already handled within
the define as well. I replaced some of the checks with `length()`
checks, let me know if I should switch it over to something else (maybe
`islist()`)? We stack_trace whenever we're not passed a list reference
on purpose, and sometimes var/lists are null by default (or just empty,
making this redundant).
## Why It's Good For The Game
I commonly feel the urge to write "use `AddTraits()`" or something in
reviews, then am sad when I remember it doesn't exist. I will no longer
be sad.
Can ensure a lot more trait safety as well by using static lists- when
both ADD_TRAIT_LIST and REMOVE_TRAIT_LIST re-use the same list, you are
confident (from a static point of view) that everything that you want to
be adding/removing works.
I may have missed a few things where this could be used, but both macros
implemented in this PR still use the same framework that was being used
in the last four years- so stuff won't break if left untouched. Just a
nifty new tool for developers.
also fixed up some code in the area, numerous bugs were found and
exploded
## About The Pull Request
The chainsaw now has an audio loop, as well as SFX for starting and
stopping. I'm pretty confident that I did the attribution stuff
correctly.
https://user-images.githubusercontent.com/28870487/225054900-4bf87ee7-9245-4004-b414-77d0e6e83a7c.mp4
I think this came out well. It may be a bit loud, but I wanted the
volume to be about the same as how the chainsaw slash sound comes out.
Audio stuff isn't really my forte, so let me know if anything sounds
off, or if any adjustments should be made.
To make this work for the mounted chainsaw (more specifically, the
abstract object that enters your hand), it has been made into a chainsaw
subtype. An updatepaths script has been included in the event that
someone has a map where the former path was included (why??).
## Why It's Good For The Game
Makes the chainsaw more menacing. It's one of the most powerful and
beloved pieces of crew weaponry, in addition to being a fucking
chainsaw. If you aren't keen on walking around the hallways with the
chainsaw loop playing like the badass you are, you can always just keep
it off until you get into a fight.
Gives an extra bit of immersion for those special moments where you get
to chainsaw someone to death.
## Changelog
🆑
soundadd: The chainsaw now has SFX for starting, stopping, and idling.
/🆑
## About The Pull Request
fumbled around while investigating #74047 and turns out there's other
organs that have the same issue as the reported alien organs in that
issue. went around and replaced parent calls where applicable
(cursed/demonic hearts, flashlight eyes, alien organs, abductor glands)
## Why It's Good For The Game
Fixes#74047
Considerably less ghost internal organs, hopefully less unreported jank
on removing organs
## Changelog
🆑
fix: fixed a few internal organs acting wonky on inserting/removing
(some xenomorph organs, abductor glands, flashlight eyes, demon/cursed
hearts)
/🆑
## About The Pull Request
Bone gel spawned inside player medical belts, for the roles of Paramedic
and Medical ERT, now spawns in a stack of 4. Previously they would spawn
with only a single stack. This new amount matches the stack size
received when purchasing the identical item from a Nanomed, or ordering
it in a Cargo crate.
As such, this change creates consistency around the number of uses in an
fresh, "unopened" bottle of bone gel.
## Why It's Good For The Game
Creating a uniform, default stack size for bone gel keeps interactions
with the item consistent and predictable. In the case of paramedics,
their starting kit also includes 5 stacks of surgical tape, so having a
few stacks of bone gel matches the player expectation that they have
enough supplies to treat a few instances of each type of injury (rather
than only one).
Addressing this discrepancy also Closes#71393.
## Changelog
🆑
balance: Bone gel now spawns in stacks of 4 in Paramedic and Medical ERT
belts
/🆑
## About The Pull Request
There's a couple of open issues which fix places where only simple
animals were considered, but they are doing it piecemeal.
I decided to just go through every instance of `isanimal` or
`subtypesof(mob/living/simple_animal)` I could find, identify which
should also affect basic mobs, and fix them.
I left out the two others which are already in PR, I'm not stealing your
GBP.
Fixes https://github.com/tgstation/tgstation/issues/68881
## Why It's Good For The Game
Consistency, mostly.
As far as I can tell all of these things _should_ have effected basic
mobs, but didn't.
This fixes a fair number of bugs but also they're bugs that nobody
noticed or reported.
There are a couple of places I did not update which will need updating
in future. These are:
- Dextrousness checks, because basic mobs don't have that yet.
- The Charge cooldown action, because frankly I couldn't tell what it
was trying to do.
alright here goes
## Changelog
🆑
fix: Carp will once again be healed from being near carp rifts
fix: Sepia slime cores and the rewind camera now work on Ian
fix: Sapient ridden carp (or cows) can throw off their riders by shoving
them, or by performing the spin emote.
fix: Giant Spider AI will be disabled by the timestop spell
fix: Ian can eat envirochow
fix: Mice, Frogs, and Cockroaches will no longer set off bear traps
fix: You can put a macrobomb implant into Cayenne (or Ian)
fix: Ian will now recognise that being squeezed by a cyborg is a nice
hug
fix: The player panel will tell admins if you're currently a corgi
fix: The staff of storms deals massive damage to Bileworms and Giant
Spiders
fix: Ian will whimper if forced to scream
fix: Slimes can consume space carp
fix: Mice can be captured in xenoballs
fix: You can use pacifying potions on Giant Spiders
fix: Sgt Araneus can be fitted with a xenobiological radio implant
fix: Sapient corgis no longer count as living players for the purpose of
highlander escape objectives
fix: The random sentience event can now target corgis and sergeant
araneus
add: The random sentience event can target a wider array of farm animals
fix: Petsplosion wizard event can target corgis
add: Petsplosion wizard event will now target farm animals and
mothroaches
fix: The colossus possession crystal can now actually possess the
cockroach it spawns, does not kill you instantly upon ending possession
/🆑
## About The Pull Request
EMP can no longer disable safeties on defibs
## Why It's Good For The Game
Rewarding people with a slightly stronger baton that you don't drop when
you get knocked down for literally just mixing a crushed can and like
two common ingredients is a terrible idea.
edit: also ignores shielding and blocks
## Changelog
🆑
balance: You can no longer EMP defibrillators to make them combat-usable
/🆑
## About The Pull Request
1. Fixes#70430
- APC's
- Air Alarms
- Fire Alarms
- Vents
- Scrubbers
Now all re-assign themselves to their correct areas & properly rename
themselves after an area has been created, modified via the station
blueprints.
2. Now Area's can't be expanded if both the current area where the
player is standing and the selected area both have an apc because that
would make the final area have 2 apc's
3. When 2 areas are merged, If the old area has no more turfs left then
it is deleted
4. Bonus fixes
- is removed redundant `Initialize()` proc inside light switch.
- arcd has all upgrades installed
## Changelog
🆑
fix: area machinery from breaking after creating & modifying areas via
the station blueprints.
refactor: turfs are cannonized from areas during creation/editing
operations & empty areas are deleted
refactor: removed duplicate Initialize() from light switch
refactor: arcd has all upgrades installed
/🆑
## About The Pull Request
**1. Suit Storage Units**
- What about them?
1. You can print "suit storage unit" circuit boards from engineering &
science circuit printer's after research to make more suit storage
units, now since they behave like regular constructable machines you can
deconstruct them via screwdriver & crowbar.
2. You can upgrade its capacitor to get faster charging speeds
- Why its good for the game?
1. You can rebuild these in the event they get destroyed
2. Better tier capacitors = faster charging speeds
3. More storage units = More places to decontaminate your equipment +
Recharge more mod suits made in robotics
4. If you decide to leave the game or your done using a mod suit e.g. a
mining mod suit rather than keeping it to yourself or throwing it away,
just build a suit storage unit and hang it there so other players can
use it i.e., sharing is caring.
**2. Freezer Cabinet**
- What about them?
1. They are now craftable

3. You can deconstruct them with a welding tool.
- Why its good for the game?
1. You can now make more of them if they get stolen/destroyed
2. More places to store food, dead bodies, whatever
**3. Flood Lights**
- What about them?
They can now be fully deconstructed in the exact opposite sequence you
constructed them.
- First use screwdriver to open its panel
- Then use empty hand to remove light
- Then use screwdriver to unscrew the wiring from frame
- Use wire cutter to remove wiring completely
- Finally use wrench to completely deconstruct frame
- Why it's good for the game?
Reclaim used material to build flood light else where . Also much more
clean than what the wiki is suggesting.

## Changelog
🆑
add: suit storage unit circuit boards to engineering & science
department circuit printers.
add: freezer cabinet as a craftable & destructible item.
qol: flood light can now be deconstructed rather than destroyed/thrown
away.
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Not much to discuss.
Fixed name of box of party poppers and camera tag of tech_storage.
## Why It's Good For The Game
Grammar
## Changelog
🆑
spellcheck: fixed a box of party_poppers and camera tag "tech_storage"
/🆑
## About The Pull Request
My contribution to the March Into Mapping/Mapness event -- The forlorn
homestead of mister Charles Morlbaro, a high-brow individual with a
taste for cigarettes. This ruin spawns on the surface level of Icebox.

A local of the ice planet, Morlbaro lived a peaceful life at home, until
an _incident_ compromised one of his windows. Fearing the cold and
unable to keep anything larger than a cigarette lit, he sequestered
himself in his private smoking room, and hasn't been seen since.
...
Oh, right, the loot. That's the most important part for some of you
guys.

Where there's smoke, there's fire, and where there's cigarettes, there's
lighters. Mister Morlbaro collected novelty lighters, which have to be
worth something to someone, right? You might be able to find some if you
dig around in his belongings. Just try not to disturb him if you choose
to enter his smoking room.
### Mapping March
<!-- If your pull request is part of Mapping March and you want to earn
an antagonist token for your FIRST mapping pull request submitted this
month, please include your ckey. For more information, read about the
event here: https://hackmd.io/@EOBGames/BkwuRlxkh -->
Ckey to recieve rewards: theduffelbag
## Why It's Good For The Game
Ruin variety is nice. This one doesn't have any particularly spectacular
loot, but it's a surface ruin.
Bro space ruins are sooooo 2020 bro, it's all about icebox ruins now
bro.
## Changelog
🆑 Rhials
add: Adds the Smoking Room icebox ruin, found on the station level!
/🆑
## About The Pull Request
Adds the Snatcherprod, the telecrystal version of the teleprod. It
yoinks an item out of the victim's hand, and puts it into yours. Or on
the ground, if your hands are full.
You make it like you would a teleprod, but using a telecrystal instead.
## Why It's Good For The Game
It was a funny joke I observed. Also I'm deeply sleep deprived and so my
better judgement eludes me during these capricious moments.
## Changelog
🆑
add: Adds the Snatcherprod. Like a teleprod, but it steals stuff from
peoples hands instead. Made using a telecrystal, rather than a bluespace
crystal.
/🆑
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
## About The Pull Request
Code changes:
- Fixes#73946 , Ice Slipping not going forever as intended
- Detailed in the issue report. Ice slide slip was replaced from a stun
to a knockdown, but it relied on it being a stun to function. I replaced
it back with an immobilize and incapacitate, reduced to 1 second to
prevent cheese.
- Refactors noslip mechanics
- Changes noslip and noslip_ice from a clothing flag to a clothing
trait, as the trait already existed and was used by MODsuits. Also added
noslip_slide, which prevents all sliding from slips like lube.
- Refactors magboots
- Refactored and modernized magboot code. Mostly cleanup, like using
base icon state, updating appearance, etc.
- Fixes speed potioned magboots not maintaining the speed boost after a
toggle
- Adds a helper for adding or removing clothing traits from existing,
(potentially) worn items.
- `TRAIT_NEGATE_GRAVITY` now always updates gravity on signal, no longer
requiring a manual call after.
Balance change:
- Magboots now prevent sliding on permafrost (outside icebox).
- This is mainly to give them more of a purpose on Icebox.
- Magboot snow prevent sliding on ice (or lube). You will still slip.
- Slipping over ice or lube will knock you down as before, but will not
send you across the room.
- See https://tgstation13.org/phpBB/viewtopic.php?t=33217.
## Why It's Good For The Game
Magboots justification:
This makes Magboots much less of a "noob trab" for engineers
fire-fighting in the Supermatter room. Most engineers believe themselves
to be completely save to the Supermatter's pull with magboots, however
"wet ice" will still send you flying into the crystal.
I think it is an inconsistency, seeing as it protects you from other
forms of forced movement like gravitational pulls. However making them
pure no-slip seemed a bit too far to me, so the knockdown still occurs.
## Changelog
🆑 Melbert
balance: Magboots will now protect you from sliding on ice. It will not
stop the slip, though.
fix: "Ice sliding" (from patches of permafrost ice) will now correctly
slide you until you reach a non-ice patch.
fix: Speed potioned magboots maintain their speed booster after toggling
them
refactor: Refactored magboots.
refactor: Refactored noslip mechanics.
/🆑
Internal_organs now also contains external organs, so the naming was
incorrect
Requested by @tralezab in #72734
Also removed some now incorrect 'as anythings' that assumed everything
in the internal_organs list was an internal_organ (which is a lie since
I put extorgans in there which means runtimes and unintentionakl
behaviour
🆑
fix: fixes deadly harvesting just taking harmless extorgans
code: renames internal_organs to organs now that it can also contain
external_organs
/🆑
## About The Pull Request
I'm a bit sad about the state of trashbags.
They're very clunky to use, so they almost never get touched. S
depressing. Let's try and fix that.
Let's make em fit in the belt slot (again), but as a tradeoff we'll make
it harder to pull one thing from your bag.
We'll give it a say, 1.5 second delay, so you can't quickdraw from em.
If you try and dump them out into something else, we'll throw any
spillover on the ground below you
I'm also doing some general code cleanup here. Making procs more
readable, vars more direct, removing some old legacy stuff.
I've added a remove_single proc to hook into via subtype, which takes a
mob as input. this has required placing extra requirement on some helper
procs, but fortunately it's not something they're unable to meet.
My hope is this will make garbage bags usable without being stupid.
## Why It's Good For The Game
I don't see these get used at all, cause they're a pain to carry around.
They got gimped because people were using them as infinite storage for
shotgun shells and other small items.
I've made using them for this sort of thing hard and slow, so I think we
oughta be fine. If not I'll do some more touching, maybe give the
autodrop a delay.
## Changelog
🆑
balance: The janitor's trashbag now fits on his belt. In exchange,
taking something out of it sends a visible message, and has a delay.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
The metallic hydrogen axe had no usesound var set despite having a
tool_behavior applied to it, this meant that when using it as a crowbar,
for example to remove floor tiles no sound was played. I've given it the
default crowbar sound for this.
Bonus fix: Crowbars were incapable of hitting fully constructed default
windows, this included the H2 axe, They are now able to be used on
standard windows (they already worked on reinforced windows)
## Why It's Good For The Game
Missing sound bad. Pretty sure the crowbar thing is a bug too.
## Changelog
🆑
fix: The metallic hydrogen axe is no longer silent when using it as a
crowbar.
fix: You are now capable of hitting standard windows with a crowbar when
they're fully constructed.
/🆑
## About The Pull Request
This transforms the Calomel now into a better version called Ammoniated
Mercury and brings the old Calomel back. Calomel purges all chemicals
again and Ammoniated Mercury purges toxins. Calomel deals toxin damage
until you have less than 100 health in which case it starts doing to
opposite. Ammoniated Mercury heals toxin damage if you do not have
enough brute or fire damage.
Paramedics now get a bottle of Ammoniated Mercury since it is the new
Calomel.
## Why It's Good For The Game
I always used to use Calomel back in the day to get rid of all
chemicals. Multiver does the same but has very weird conditions, so now
I split the old and new Calomel into two chemicals for both uses to
become available. I have never seen anyone use Calomel so now it can be
used to fix overdoses again.
## Changelog
🆑
add: Adds Ammoniated Mercury, a chemical to the game.
balance: Calomel now purges all chemicals again, and now Ammoniated
Mercury only purges toxins.
/🆑
## About The Pull Request
Pinata's drop various items when struck with a sufficiently powerful
weapon. This PR adds two types, a standard one which can be bought from
cargo which contains various candy items and a syndicate one which
contains both candy items and explosives purchasable by clown
operatives.
The pinata functionality is also a component so admins can turn any
structure/machine/mob into a pinata and customize the "candy" inside
Sprites by @Mey-Ha-Zah animated versions by me
## Why It's Good For The Game
Adds a cute little celebration themed structure that can be bought by
players to accommodate a celebration based gimmicks or the party trait.
I think the options on things to do as a crew during a celebration are a
bit limited at present with most of the options being making/purchasing
food, activity wise the main example of a celebration item is pin the
tail on the corgi which is a bit uninteresting, the pinata on the other
hand is more cathartic and provides a "reward" in the form of various
candy items for people who participate in smashing it. I also think its
just funny to have clown operative gambling half their TC to try and get
explosives.
## Changelog
🆑 Mey-Ha-Zah & NamelessFairy
add: Added pinata crates to cargo, they contain various candy items. Fun
at parties.
add: Clown operatives can now purchase a weapons grade pinata, this
contains both candy and explosives. Still fun at parties.
admin: Admins can now turn players, mobs and objects into pinata's with
the new pinata component.
/🆑
## About The Pull Request
- Juggernaut and Rust Walker projectiles were subtyped off of magic,
which is `nodamage`.
- The juggernaut actually had a copy+paste error with their type
`on_hit` which caused none of their special effects on hit ("relative
patching catches this")
- Then I realized projectiles have this var `nodamage` which is, for all
intents and purposes, just `damage > 0`. it's not checked for pacifism,
it's just that. This is dumb. So very dumb, so I removed it.
- There are, however, a few situations which used it in a unique way,
such as the blast wave cannon. This is why I replaced it with a proc,
`is_hostile_projectile`, for certain situations to actually find out if
the projectile is damaging. Projectiles can override this on a per type
basis by default, damaging projectiles = hostile.
- This has a chance to break some things, but I ... kinda doubt it will.
Fixes#73756
## Why It's Good For The Game
Projectiles that act as they should, less dumb vars
## Changelog
🆑 Melbert
fix: Fixes Juggernaut / Rust Walker projectiles doing zero damage
fix: Fixes Juggernaut projectiles not doing bonus damage to nearby
structures
code: Removed projectile nodamage var, replaces it with just checking
for damage
/🆑
## About The Pull Request
This, as the title suggests, fixes some wrapping paper bugs.
First, wrapping paper coloration has been rebound to Alt+click, so the
control doesn't conflict with extracting wrapping paper from a roll,
which is right click. Originally, both of them were on right click,
which caused problems.
Second, it fixes a problem with the greyscale icons on the gifts
themselves. They were showing up as the default gift icon, no matter
what color you selected, because the automatic path generation wasn't
set up properly. This fixes that.
Fixes#73800.
## Why It's Good For The Game
Bugs are bad, and we should try to fix them.
## Changelog
🆑
fix: Gifts you wrap will now display their greyscale colors as they're
supposed to.
fix: Wrapping paper color selection has been rebound to Alt+click, to
fix a bug where both wrapping paper color selection, and extracting
wrapping paper from a roll were both bound to right click.
/🆑
🆑 coiax
fix: Tiziran lung stirfry now correctly uses a bowl in its construction,
and is left over after eating. It also can only be constructed with
organic lungs, because cybernetic lungs don't fry as well.
/🆑
Sprite has a bowl, but no bowl involved in the crafting or left behind.
Using cybernetic organs also seems like an oversight, given the whole
"lizards love the raw meat" vibe they have with Tiziran food.
## About The Pull Request
1. Borg held RCD UI always displays matter units left as 0 including
when its examined. This is because borg rcds don't use `matter` var but
the cell directly. Now the UI & examines takes that into consideration
when displaying matter units left. The maximum matter is the max cell
charge. As borgs cell charge drains overtime the units left also
decreases which is why the examines in the below image has a different
value cause i examined it one second earlier before opening the UI

2. ARCD beam animation is overall wonky. It starts only after the
structure is built and it lasts for a total of 3 seconds regardless of
the construction time which is way too long. Now it's a lot smoother,
the animation gets cancelled if the user moves and it lasts exactly the
duration of the construction. It now also has infinite matter just like
the other admin rcd which makes it consistent.
https://user-images.githubusercontent.com/110812394/222103839-fd8b55b9-c967-49fa-a4cf-bb63b486afa7.mp4
3. Fixes#61576
RCD was cancelling the attack chain too early inside `preattack()` so it
never went into the toolbelt or other storage units when you clicked on
them with the RCD. Now all the code has been moved into `afterattack()`
allowing the pre storage code to do its thing.
5. RLD now updates its icon state like it used to based on the matter
units it has left. I broke this sometime ago but thats fixed now
## Changelog
🆑
fix: borg rcd's not displaying the correct matter units in its UI & when
examined
qol: arcd animation is smoother and makes more sense and has infinite
matter
fix: rcd not getting inserted into toolbelts & other storage units upon
clicking
fix: rld updating its icon state correctly based on the matter left
/🆑
## About The Pull Request
Fixes: #73844
RLD's now have a default light color so they will work out of the box,
and setting the light color to white doesn't result in the light color
on produced lights being set to null anymore.
I'm not certain if the glowstick thing is a bug so give me a heads up if
its not and I'll change it to balance but it seemed weird to me that the
glowstick mode was unusable in the dark so it is now usable, this also
impacts floor lights but wall lights worked in the dark already.
## Why It's Good For The Game
Bugfix good.
## Changelog
🆑
fix: Rapid lighting devices can now have their color set to #ffffff and
the resulting lights will now function.
fix: Rapid lighting devices will now default its set color to white when
created instead of trying to produce colorless lights.
fix: The rapid lighting device can now be used in the dark when
producing glow sticks or floor lights.
/🆑
## About The Pull Request
I noticed while working on a feature for a downstream, that three of the
lipstick colours weren't actually seperate items, so this PR just adds
those three so they can be spawned in by admins.
## Why It's Good For The Game
It lets admins spawn more colours of lipstick for costuming, also good
for downstreams that might want to make lipsticks buyable.
## Changelog
🆑
add: Adds the rest of the lipsticks to the cosmetics.dm
/🆑
## About The Pull Request
The original issue caused by #70037
Esword issue caused by #73716
Originally the transforming component did not override the inhand icon
state of the the item on its own (instead putting the onus on the item
itself if they wanted unique behavior). It was changed to always update
inhand icon state, most of which don't have one
I don't really like this fix, it should be explicit "I want inhand to
change" and not default, but this will work for now
Also the PR that fixed the Jaws issue didn't actually set the var they
created
Fixes#73805Fixes#73711 (Actually)
## Why It's Good For The Game
Invisible sword bad
## Changelog
🆑 Melbert
fix: Fixed a eswords, some tools, and some other misc. items from being
invisible while extended / active
fix: Teleshields and other misc items not extending in hand when active
fix: Switchblades click on extend again
fix: Pendrivers click on extend
/🆑
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/73765
Also adds some warnings and description to bread/breadslice so you can
more easily notice that something is wrong.
Not much to discuss i think.
## Why It's Good For The Game
You can get normal bread from butchering bread dog. And potentially less
issues with bread in future.
## Changelog
🆑
fix: fixed butchering bread dog spawning error bread.
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
Adds a new neutral station trait the announces to the crew its a member
of staff's birthday, spreads some confetti/balloons around and gives out
some birthday themed items including hats, new toys and cake ingredients
for the chef.
The mechanical impact of the trait is quite minimal only giving out some
fluff items and giving the janitor some extra work. However the event
has a lot of potential roleplay impact by singling out a crewmember and
informing everyone about their birthday, I can foresee players using
this as an opportunity to run birthday themed gimmicks or give one
specific player preferential treatment for the shift which should allow
for some interesting stories to be produced.
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
## Why It's Good For The Game
Partially explained in my about section but in short I think a lot of
the station traits we have at the moment are very mechanically driven
and we could use a more open ended roleplay prompt themed one which this
one provides. The idea of one player getting put in the spotlight while
not being an antagonist is also something I can see potentially great
stories come from.
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
🆑
add: New Neutral Station Trait, "Employee Birthday", its someone on the
crews birthday, make sure to wish them a happy birthday and perhaps get
them a gift.
add: Two new party themed items have been added to the arcade prize
pool, the party horn and a box of party poppers.
/🆑
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
Refactored how eggs growing into chicks is implemented, and
how the number of chickens and chicks are tracked. It's now possible for
admins to make anything into an egg.
- Instead of the "fertility" of an egg being whether or not it's
processing (along with the ugliness of adding a variable to a item
defined in another file), fertile eggs are now implemented via
components.
- The number of chickens in the world, and the number of chicks hatched
from egg throwing are now global variables, rather than static variables
on the class.
I've tried very hard to keep these changes completely feature freeze
compatible, any variation in the old behaviour is non-intended (at this
point).
Adds the Law Panel.
The Law Panel shows all silicons in the world and their lawsets.
From this panel, an admin can add new laws, remove old laws, edit
existing laws, or even re-arrange law order.
This allows for admins to get a lot more creative in creating custom
silicon lawsets. It also gives a much easier way for admins to deal with
law grief at a glance.
Additionally, the panel allows for admins to force a silicon to state
laws, privately announce the laws to the player, or give them a the
"laws updated" alert as normal.
Refactored DNA vault to use better dna list checking, no more for loops.
Datumized the mutation rewards from dna vault. Allow dna probes to
directly access the dna database from the vault its linked to.
## About The Pull Request
Just making shivs more consistent with what is expected. It's weird when
glass shard allows you to smash grille connected to power while shivs
made out of glass dont. Extended to bone knives for the same reason.
## Why It's Good For The Game
Immersium
## Changelog
🆑 Remuluson2
fix: After pressure from Nanotrasen, Space Wizard Federation made glass
and bone knives non-conductive again.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Quite a lot of mobs had faction defines as a string, which always has a
chance for error. For example, the clown mob spawner had their faction
written as "clown", when the official faction name was "clowns", and a
define existed for it anyways! This PR moves every single string based
factions over here. No references or special role factions. Hopefully I
didn't miss anything.
I also moved a global define used for picking your uplink provider's
flavour to the only file that used it, datum_traitor.dm, and renamed
them a bit to avoid confusion.
I have also noticed that the mimic faction was assigned to the petrified
player with += instead of |=. |= would ensure no duplicate factions, so
I have changed it.
Future improvement:
I have noticed that there is a lot of bloat with factions that contain
only one or two entries (examples: gnomes, floating eyeballs, penguins,
the pet lizards), and some always appear in pairs (vines and plants, the
rare exceptions being killer tomatoes and strange reagent spawned pine
trees), but trimming consolidating them is a matter for a different
time.
## Why It's Good For The Game
Makes assigning factions a bit less error prone.
I can finally remove the ```/// Later all mob factions will be moved
here and their current factions replaced with faction defines.```
comment. Later is NOW.
## Changelog
Nothing player facing
## About The Pull Request
Teleport scrolls would only deplete a charge if used in hand, however
their implementation actually granted you the spell as an item action
which you could use by hitting the action button, This would not deplete
a charge, and had no cooldown whatsoever.
The action button is convenient and should stay, but I modified the code
so that instead of depleting a charge when clicked it depletes a charge
when the spell contained by the item successfully casts.
I also changed the order of operations slightly in `spell/after_cast`
because using the signal to delete the scroll would also delete the
spell (sensibly, it should clean up after itself) before the last cast
could make smoke, which was sad.
## Why It's Good For The Game
On live the teleport scroll gives all wizards _and_ apprentices the
teleport spell with absolutely no cooldown and infinite usage, which is
probably not intended.
## Changelog
🆑
fix: Using a teleport scroll will deplete a charge regardless of whether
used in-hand or by pressing the action button.
/🆑
## About The Pull Request
Fixes#73631
## Why It's Good For The Game
Reads better
## Changelog
🆑
fix: Borg hypospray will correctly tell you the name of the limb that is
blocked when trying to inject into a blocked limb.
/🆑