## About The Pull Request
Macros that are strings do not need to be doing this.
## Why It's Good For The Game
Less improper things to copy paste existing in the codebase
## About The Pull Request
Ai pathing will avoid turfs that have glass tables on them.
## Why It's Good For The Game
Monkeys loooove glass tables
## Changelog
🆑 Melbert
qol: Monkeys will avoid stepping over glass tables
/🆑
## About The Pull Request
ports https://github.com/DaedalusDock/daedalusdock/pull/1144
ports https://github.com/DaedalusDock/daedalusdock/pull/1147
full credit to @Kapu1178 for the juice
instead of `reacher.CanReach(target)` we now do
`target.CanBeReachedBy(reacher)`, this allows us to give special
behavior to atoms which we want to reach, which is exactly what I need
for a feature I'm working on.
## Why It's Good For The Game
allows us to be more flexible with reachability
## Changelog
🆑
refactor: refactored how reaching items works, report any oddities with
being unable to reach something you should be able to!
/🆑
## About The Pull Request
This fixes custom materials for a few objects:
- Wooden tables are now made of wood
- Racks are now made of iron
- Bone racks are now made of bone
Also the formatting was missing a space in between the `=` which was
annonying.
## Why It's Good For The Game
Consistency.
## Changelog
🆑
fix: Fix custom materials on wood tables and racks
/🆑
## About The Pull Request
Adds new variables and removes minor hardcoding with the
`/obj/structure/table` adding the variables
`var/flipped_table_icon`
`var/unflip_table_sound`
`var/flipped_table_sound`
## Why It's Good For The Game
This will provide more modular-ability, maintenance, and general care
for changes up and down the stream. allowing modules and individual
things to be made without affecting the /TG/ master files. Including
with these new sound variables, it allows further control over how
things should sound, not having to code-dive to find and change
anything. Making it much easier to control.
## Changelog
No player facing changes.
## About The Pull Request
Closes#92627 by restricting users to a single do_after at a time per
table
## Changelog
🆑
fix: Fixed table flipping sound/alert spam
/🆑

This PR adds "platforms" to the game, a port of the window frames from
the Wallening branch but with no windows attached.
You can craft them with two stacks of many kinds of materials.
Functionally they're basically just tables for standing on and act as a
decorative tool allowing you to make raised areas like stages.
Largely as far as I can tell I _think_ these were sprited by @Krysonism
although it's a little hard to check if there's any that were done by
someone else.
You can walk directly from tables to platforms (and crates) and vice
versa. You can also tableslam people onto them.
This PR also comes with "steps" (AKA small stairs)
You can use steps to walk onto platforms (or tables, or crates) without
needing to do the climbing action first.

If you try to run through them the wrong way you will trip.
Right now they only come in "Iron" flavour. Maybe one day someone will
sprite some wooden ones, or other varieties.
Basically the intention is to use them to build a little stage or altar
or maze or something. They don't have a lot of non-decorative purpose.
Don't be alarmed by the touched files list. It's mostly sprites and
there's barely even any code in this PR. It's almost entirely elements
and boilerplate.
Mappers keep asking me to add these.
Salvages some sprites from the Wallening project which we can still use.
You can make a really really big multitile pizza.
🆑 Jacquerel, Smartkar, sprites by Kryson
add: Added "platforms", or "half-walls" which are a kind of decorative
block similar to tables which you can walk around on.
add: You can walk freely between tables, platforms, and crates that
happen to be near tables or platforms.
add: You can construct iron steps to traverse tables and platforms
without needing to climb on, but try not to trip over them.
/🆑
---------
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
## About The Pull Request

This PR adds "platforms" to the game, a port of the window frames from
the Wallening branch but with no windows attached.
You can craft them with two stacks of many kinds of materials.
Functionally they're basically just tables for standing on and act as a
decorative tool allowing you to make raised areas like stages.
Largely as far as I can tell I _think_ these were sprited by @Krysonism
although it's a little hard to check if there's any that were done by
someone else.
You can walk directly from tables to platforms (and crates) and vice
versa. You can also tableslam people onto them.
This PR also comes with "steps" (AKA small stairs)
You can use steps to walk onto platforms (or tables, or crates) without
needing to do the climbing action first.

If you try to run through them the wrong way you will trip.
Right now they only come in "Iron" flavour. Maybe one day someone will
sprite some wooden ones, or other varieties.
Basically the intention is to use them to build a little stage or altar
or maze or something. They don't have a lot of non-decorative purpose.
Don't be alarmed by the touched files list. It's mostly sprites and
there's barely even any code in this PR. It's almost entirely elements
and boilerplate.
## Why It's Good For The Game
Mappers keep asking me to add these.
Salvages some sprites from the Wallening project which we can still use.
You can make a really really big multitile pizza.
## Changelog
🆑 Jacquerel, Smartkar, sprites by Kryson
add: Added "platforms", or "half-walls" which are a kind of decorative
block similar to tables which you can walk around on.
add: You can walk freely between tables, platforms, and crates that
happen to be near tables or platforms.
add: You can construct iron steps to traverse tables and platforms
without needing to climb on, but try not to trip over them.
/🆑
---------
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
## About The Pull Request
there was an infinite recursion with masks being dropped over and over
again so the 'move' signal wasnt being unregistered from the mob holding
the mask. i figured the unequip signal wasnt needed anyway since we're
already registering a moved signal on the mask, which already handles
clearing signals from the holding mob upon being removed from their
inventory.
## Why It's Good For The Game
fixes#91607
## Changelog
🆑
fix: moving away from the surgery table with its mask no longer causes
lag
/🆑
## About The Pull Request
1. Adds Handrails, currently mapper only. [Sprite ported from
Baystation](https://github.com/Baystation12/Baystation12/blob/dev/icons/obj/structures/handrail.dmi).
This is just a small fluff object designed to be put onto shuttles.
Players can click on it (or mouse drop) to buckle to it (grab it),
keeping them from being thrown around on shuttle launch.

2. Adds Shuttle chair restraints. [Sprite ported from
Aurora](https://github.com/Aurorastation/Aurora.3/blob/master/icons/obj/structure/chairs.dmi),
though altered a decent amount. They flip up with no one seated and flip
down when someone buckles, but they have no gameplay effects (ie, they
don't require a do-after, they don't block hands, etc etc)


3. Some objects now have unique feedback messages for buckling - you sit
on chairs, or lay down on beds. This message will change depending on if
the mob is restrained, so it's a bit more obvious when someone is tied
to a chair vs just sitting down.

4. If you're buckled on a shuttle which has "knockdown" force, you won't
be paralyzed - instead, just knocked down and immobilized for a short
period (so you can still use your hands / act).
## Why It's Good For The Game
1. Gives mappers some additional fluff for shuttles, especially if their
shuttle has knockdown force.
2. Adds muh immersion to shuttle rides. Just a flavor thing.
3. Adds muh immersion to sitting down at the bar. Again just a flavor
thing.
4. I did this to make handrails work, but I can find an alternate
workaround if so desired.
## Changelog
🆑 Melbert, sprites from Baystation / Aurorastation
add: Adds grabbable handrails (mapper only for now)
image: Adds a visual effect to buckling to shuttle seats
qol: Different objects have different chat messages for buckling.
qol: If you're buckled in on a violent shuttle ride, you will be knocked
down and immobilized, but not fully stunned (ie: can still use hands).
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Air tanks (ones that can slot into tank holders) and breath masks
(normal, surgical and muzzle, which has been repathed to be a subtype of
breath masks instead of being a subtype of a muzzle, for some reason)
can now be attached to operating tables, and removed using
wrenches/screwdrivers respectively.
Right-clicking on an operating table with a mask attached will put it in
your hand akin to defib paddles (similarly snapping back if you walk
away). Dragging the table with an attached tank onto the person lying on
it will attempt to connect their internals to the attached tank.
Also since I had to adjust the table sprite, its lights now change color
based on whenever there's an active patient and an active operating
computer.
##### This is a commission for Improvedname/Ezel
## Why It's Good For The Game
Anesthetics are incredibly clunky to use, as either the person
themselves, or you as a surgeon, need to equip the tank onto whoever is
being operated on, then equip and activate the mask. This should make
them a bit less tedious, so maybe they'll actually see some use.
## Changelog
🆑
add: You can now attach anesthetic tanks and breathing masks to surgical
tables.
/🆑
## About The Pull Request
there was an infinite recursion with masks being dropped over and over
again so the 'move' signal wasnt being unregistered from the mob holding
the mask. i figured the unequip signal wasnt needed anyway since we're
already registering a moved signal on the mask, which already handles
clearing signals from the holding mob upon being removed from their
inventory.
## Why It's Good For The Game
fixes#91607
## Changelog
🆑
fix: moving away from the surgery table with its mask no longer causes
lag
/🆑
## About The Pull Request
1. Adds Handrails, currently mapper only. [Sprite ported from
Baystation](https://github.com/Baystation12/Baystation12/blob/dev/icons/obj/structures/handrail.dmi).
This is just a small fluff object designed to be put onto shuttles.
Players can click on it (or mouse drop) to buckle to it (grab it),
keeping them from being thrown around on shuttle launch.

2. Adds Shuttle chair restraints. [Sprite ported from
Aurora](https://github.com/Aurorastation/Aurora.3/blob/master/icons/obj/structure/chairs.dmi),
though altered a decent amount. They flip up with no one seated and flip
down when someone buckles, but they have no gameplay effects (ie, they
don't require a do-after, they don't block hands, etc etc)


3. Some objects now have unique feedback messages for buckling - you sit
on chairs, or lay down on beds. This message will change depending on if
the mob is restrained, so it's a bit more obvious when someone is tied
to a chair vs just sitting down.

4. If you're buckled on a shuttle which has "knockdown" force, you won't
be paralyzed - instead, just knocked down and immobilized for a short
period (so you can still use your hands / act).
## Why It's Good For The Game
1. Gives mappers some additional fluff for shuttles, especially if their
shuttle has knockdown force.
2. Adds muh immersion to shuttle rides. Just a flavor thing.
3. Adds muh immersion to sitting down at the bar. Again just a flavor
thing.
4. I did this to make handrails work, but I can find an alternate
workaround if so desired.
## Changelog
🆑 Melbert, sprites from Baystation / Aurorastation
add: Adds grabbable handrails (mapper only for now)
image: Adds a visual effect to buckling to shuttle seats
qol: Different objects have different chat messages for buckling.
qol: If you're buckled in on a violent shuttle ride, you will be knocked
down and immobilized, but not fully stunned (ie: can still use hands).
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Air tanks (ones that can slot into tank holders) and breath masks
(normal, surgical and muzzle, which has been repathed to be a subtype of
breath masks instead of being a subtype of a muzzle, for some reason)
can now be attached to operating tables, and removed using
wrenches/screwdrivers respectively.
Right-clicking on an operating table with a mask attached will put it in
your hand akin to defib paddles (similarly snapping back if you walk
away). Dragging the table with an attached tank onto the person lying on
it will attempt to connect their internals to the attached tank.
Also since I had to adjust the table sprite, its lights now change color
based on whenever there's an active patient and an active operating
computer.
##### This is a commission for Improvedname/Ezel
## Why It's Good For The Game
Anesthetics are incredibly clunky to use, as either the person
themselves, or you as a surgeon, need to equip the tank onto whoever is
being operated on, then equip and activate the mask. This should make
them a bit less tedious, so maybe they'll actually see some use.
## Changelog
🆑
add: You can now attach anesthetic tanks and breathing masks to surgical
tables.
/🆑
## About The Pull Request
Closes#91131.
The author currently has other priorities, and as I need it for
something else I am finishing it myself with the author's blessing.
Recently, we turned `transferItemToLoc(...)` into a proc intended to be
for transfers to non-turfs, with it now playing an animation to reflect
that.
However, this had the effect of leaving us with `dropItemToGround(...)`
for mob>turf transfers, which isn't _ideal_. It sends an 'item dropped'
signal, it randomizes offsets, and using it to transfer to a
non-`drop_location()` loc was implemented as an afterthought.
So in this pr we create a new proc, `transfer_item_to_turf(...)`, that
separates off the actual transferring, setting offsets, and animating
into its own proc.
Then `dropItemToGround(...)`, tables, racks, easels, closets, hoops,
beds, conveyor belts, pin the tail corgi posters, some other stuff, and
the `floor_placeable` element call such each with their own preferred
arguments.
While we could leave setting offsets out of it, because setting the
offsets after calling the animation works just fine, having them be set
before the animation felt like a more intuitive flow.
...While I would love to refactor the easel's incredibly questionable
`attackby(...)`, that is outside of the scope of this pr.
## Why It's Good For The Game
Fixes#91082.
Less jank 👍
## Changelog
🆑
fix: Placing an item on a table/turf via the alt-click menu actually
centers it, again.
fix: Certain items, like canvases or syringe guns, are no longer weirdly
offset when placed on tables.
fix: Placing items on racks, closets, crates, hoops, beds, conveyor
belts, and pin the tail corgi posters is animated again, instead of
instantly teleporting followed by the pickup animation.
fix: Placing a canvas on an easels no longer applies a random offset as
if dropped.
fix: Tucking in someone else actually animates the bedsheet from you to
them, instead of from them to them.
qol: Placing a canvas on an easel is animated.
/🆑
## About The Pull Request
Closes#91131.
The author currently has other priorities, and as I need it for
something else I am finishing it myself with the author's blessing.
Recently, we turned `transferItemToLoc(...)` into a proc intended to be
for transfers to non-turfs, with it now playing an animation to reflect
that.
However, this had the effect of leaving us with `dropItemToGround(...)`
for mob>turf transfers, which isn't _ideal_. It sends an 'item dropped'
signal, it randomizes offsets, and using it to transfer to a
non-`drop_location()` loc was implemented as an afterthought.
So in this pr we create a new proc, `transfer_item_to_turf(...)`, that
separates off the actual transferring, setting offsets, and animating
into its own proc.
Then `dropItemToGround(...)`, tables, racks, easels, closets, hoops,
beds, conveyor belts, pin the tail corgi posters, some other stuff, and
the `floor_placeable` element call such each with their own preferred
arguments.
While we could leave setting offsets out of it, because setting the
offsets after calling the animation works just fine, having them be set
before the animation felt like a more intuitive flow.
...While I would love to refactor the easel's incredibly questionable
`attackby(...)`, that is outside of the scope of this pr.
## Why It's Good For The Game
Fixes#91082.
Less jank 👍
## Changelog
🆑
fix: Placing an item on a table/turf via the alt-click menu actually
centers it, again.
fix: Certain items, like canvases or syringe guns, are no longer weirdly
offset when placed on tables.
fix: Placing items on racks, closets, crates, hoops, beds, conveyor
belts, and pin the tail corgi posters is animated again, instead of
instantly teleporting followed by the pickup animation.
fix: Placing a canvas on an easels no longer applies a random offset as
if dropped.
fix: Tucking in someone else actually animates the bedsheet from you to
them, instead of from them to them.
qol: Placing a canvas on an easel is animated.
/🆑
## About The Pull Request
Putting stuff into and removing things from machine now plays a little
animation, and putting stuff INTO nearby containers now also plays an
animation. Putting stuff into containers on your person still does not
play an animation.
## Why It's Good For The Game
https://github.com/user-attachments/assets/68cd7db8-1349-4ae3-a5bc-7082839749dd
## Changelog
🆑 Bisar
image: Animations have been added to inserting/removing items from
machines, and to inserting things into containers that are not on your
person.
/🆑
## About The Pull Request
Putting stuff into and removing things from machine now plays a little
animation, and putting stuff INTO nearby containers now also plays an
animation. Putting stuff into containers on your person still does not
play an animation.
## Why It's Good For The Game
https://github.com/user-attachments/assets/68cd7db8-1349-4ae3-a5bc-7082839749dd
## Changelog
🆑 Bisar
image: Animations have been added to inserting/removing items from
machines, and to inserting things into containers that are not on your
person.
/🆑
## About The Pull Request
<img width="161" alt="image"
src="https://github.com/user-attachments/assets/af923130-b928-4a66-a428-619f37f48616"
/>
Simply put, wooden tables (aka, both wood legs and top) have a 1 in 5
chance to break like glass ones when you stand on them.
## Why It's Good For The Game
More potential for funny, but harmless chaos is always nice, and given
wrestling is probably the most commonly played sport in this game, being
able to do tables matches felt fitting - but please do not let this pull
request distract you from the fact that in 1998, The Undertaker threw
Mankind off Hell In A Cell, and plummeted 16 ft through an announcer's
table.
## Changelog
🆑 Webcomicartist
add: People shoved onto wooden tables now have a 1 in 3 chance to break
it, for all your wrestling needs - but please do not let this pull
request distract you from the fact that in 1998, The Undertaker threw
Mankind off Hell In A Cell, and plummeted 16 ft through an announcer's
table.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
They weren't actually working turns out. There was a race condition with
icon smoothing, so it needs to be flipped after the table gets smoothed.
On top of that the dir wasn't being passed properly.
## Why It's Good For The Game
Stuff that actually works!
This will allow for things like this on mapload:

## Changelog
🆑
fix: fixes flipped table spawners not initializing correctly
/🆑
## About The Pull Request
<img width="161" alt="image"
src="https://github.com/user-attachments/assets/af923130-b928-4a66-a428-619f37f48616"
/>
Simply put, wooden tables (aka, both wood legs and top) have a 1 in 5
chance to break like glass ones when you stand on them.
## Why It's Good For The Game
More potential for funny, but harmless chaos is always nice, and given
wrestling is probably the most commonly played sport in this game, being
able to do tables matches felt fitting - but please do not let this pull
request distract you from the fact that in 1998, The Undertaker threw
Mankind off Hell In A Cell, and plummeted 16 ft through an announcer's
table.
## Changelog
🆑 Webcomicartist
add: People shoved onto wooden tables now have a 1 in 3 chance to break
it, for all your wrestling needs - but please do not let this pull
request distract you from the fact that in 1998, The Undertaker threw
Mankind off Hell In A Cell, and plummeted 16 ft through an announcer's
table.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
They weren't actually working turns out. There was a race condition with
icon smoothing, so it needs to be flipped after the table gets smoothed.
On top of that the dir wasn't being passed properly.
## Why It's Good For The Game
Stuff that actually works!
This will allow for things like this on mapload:

## Changelog
🆑
fix: fixes flipped table spawners not initializing correctly
/🆑
## About The Pull Request
So I was looking for `attackby(...)` instances to kill and, hey look,
table frames- oh what the fuck is this.
Oh why does this have the same checks like five times, across the parent
type and subtypes.
So this pr's primary point is to refactor the table frame
`attackby(...)` into `item_interaction(...)`, and by extension lower the
amount of weird `attackby(...)` override jank going on with them.
Instead of having all of the subtypes define their own almost exactly
the same table construction interactions, we use a single generic
interaction chain and add a new `get_table_type(...)` proc to let
subtypes override what tables to construct for what stacks.
We also move the assigning of frame-and-stack-related things to the
actual table types themselves, instead of specifying all these
interactions on the frame.
We also add screentips for deconstruction and table construction, again
using the `get_table_type(...)` proc so screentips can differentiate
between which stacks can and can't make a table for our table without
needing to change the screentips manually for the subtypes.
Beyond that is mostly generic clean-up.
I'm a bit icky on my implementation of
`/obj/item/stack/proc/get_table_type()`, because of hardcoding for
`/obj/structure/table/greyscale`, but I think it's better than the
alternatives.
This lets us use the old method of letting all `/obj/item/stack/sheet`
subtypes use the generic material table, but limit it to working as long
as they define a `material_type`. I feel it's better than letting broken
tables exist, needing to hardcode it on the table frame, or needing to
expect people to add the generic material table `table_type` whenever
they add a `material_type` (no one would do this).
## Why It's Good For The Game
Screentips good 👍
Less jank encountered good.
Specifically the inability to deconstruct table frames on right click
when tables can be deconstructed on right click has thrown me off so
many times it's wild.
## Changelog
🆑
refactor: Refactored table frame interactions, please report any issues.
fix: You can no longer make material-less material tables out of certain
items.
fix: Fancy tables remember which carpet was used to make them, and no
longer magically transmute carpets into simpler types.
fix: You can no longer stack abductor table frame-using tables
specifically.
qol: Added screentips for deconstructing table frames and constructing
tables out of them if the material you're holding can do so.
qol: Table frames can now also be deconstructed on right click for
parity with tables, in addition to left click.
qol: Table frame interactions use balloon alerts.
/🆑
## About The Pull Request
Refactors martial arts off the mind. Don't worry the martial arts you
learn still transfer with mindswap
Instead, they are just tracked on a list on the mob, and they also
independently track the datum that created them
This fixes a lot of jank with martial arts, like say, having your krav
maga gloves transfer across slime clones or something...
But it also opens an opportunity: As we track all martial arts
available, I added a verb (ic tab) that lets you swap between the ones
you know

(Some don't let you swap like that one brain trauma)
## Why It's Good For The Game
Aforementioned fixes a lot of jank
Recently martial arts have just been up and disappearing and this was
entirely spurred on by that bug
Probably fixes#84710 (haven't checked)
Probably fixes#89247
Probably fixes#89948
Probably fixes#90067
## Changelog
🆑 Melbert
refactor: Refactored martial arts, if you notice any oddities like
managing to know two martial arts at once or having your powers
disappear, report it!
add: If you know multiple martial arts, such as krav maga from gloves
and cqc from a book, you can now swap between them at will via a button
in the IC tab!
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Fixes#85980
- Pixel adjustments are now sourced
When tweaking a mob's pixel w, x, y, z, is is now done via `add_offsets`
and must have a source string associated
- Refactors riding
Refactors how riding component selects the offsets to use. It's now all
done via the getter rather than a weird mix of a var, a cache, and a
getter.
- Moves a bunch of animations to use `pixel_w` / `pixel_z`
Largely to prevent conflicts with adjustments to a mob's pixel position,
but also as many animations are not actual movements, but visual
movements. Floating is one such example.
It just works
🆑 Melbert
fix: Fixed grab offsets not showing for anything but passive grab
fix: Fix jank with mob offsets when riding things
refactor: Refactored riding component, particularly how it selects layer
and offsets. Report any oddities
refactor: Refactored pixel offsets of mobs. Report any oddities
/🆑
## About The Pull Request
Fixes#85980
- Pixel adjustments are now sourced
When tweaking a mob's pixel w, x, y, z, is is now done via `add_offsets`
and must have a source string associated
- Refactors riding
Refactors how riding component selects the offsets to use. It's now all
done via the getter rather than a weird mix of a var, a cache, and a
getter.
- Moves a bunch of animations to use `pixel_w` / `pixel_z`
Largely to prevent conflicts with adjustments to a mob's pixel position,
but also as many animations are not actual movements, but visual
movements. Floating is one such example.
## Why It's Good For The Game
It just works
## Changelog
🆑 Melbert
fix: Fixed grab offsets not showing for anything but passive grab
fix: Fix jank with mob offsets when riding things
refactor: Refactored riding component, particularly how it selects layer
and offsets. Report any oddities
refactor: Refactored pixel offsets of mobs. Report any oddities
/🆑
## About The Pull Request
Adds slips to the list of existing shove stun methods originally set in
https://github.com/tgstation/tgstation/pull/84640 (wall shoves,
telebaton, mansus grasp), and also reifies this concept as the "dazed"
status effect.
This makes it so that being knocked down from a slip from any source
(e.g. wet floor, clown stuff, lube, foam, oil, butterdog) gives the
dazed visual effect and makes you eligible for being shove stunned. The
status always lasts for 3 seconds even if e.g. slipping on lube knocks
you down for 15, but this can be customized per slip.
## Why It's Good For The Game
Further rewards environmental play and provides another feasible means
of fighting back against better equipped opponents, both in line with
the original PR. Also the visual cue fits well as an immediate signal
that you're dazed and can't get up.
## Changelog
🆑
balance: slips now make you eligible for being shove stunned
/🆑
---------
Co-authored-by: Roryl-c <5150427+Roryl-c@users.noreply.github.com>
## About The Pull Request
Skyrat reverts
- Removes the Skyrat surgery speed bonus for 3 tiles of free space
- Removes Skyrat surgery mood debuff
Removes tend wounds slowdown on on dead people. Replaces with a slowdown
on husks.
Slightly buffs tend wounds damage healed per cycle
Introduces new surgery speed bonuses, based on TG speed mods:
- Speed bonus for operating table
- Speed bonus for operating computer
- Speed bonus for using sterilizine/cryostylane now applies to all
surgery steps, not just the one where the reagent is applied
- Speed bonus for anaesthetics/painkillers
Visual feedback of what your surgery speed modifier is
## Why It's Good For The Game
The Skyrat check is dumb and doesn't solve any problems, rather creates
them with TC still being surgery central except now people are screaming
at you to move, which there isn't enough space to do in the TC anyways.
Two doctors working on a patient should not slow down surgery. This
should not count as a clean, quiet environment for lightspeed surgery:

## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
https://github.com/user-attachments/assets/abea1be8-463c-451f-a58b-501600bab8f0
</details>
## Changelog
🆑 LT3
balance: Removed Skyrat surgery speed bonus
balance: Removed Skyrat negative mood events for surgery
balance: Removed operating tables automatically applying numbing
balance: Added surgery speed bonus for operating computers
balance: Added surgery speed bonus for anaesthetic/painkillers
balance: Added surgery speed bonus for sterilizine/cryostylane treatment
balance: Adjusted surgery speed penalty for stasis beds
balance: Removed speed penalty for tending wounds on dead bodies,
replaced with penalty for husked body
balance: Increased tend wounds healed damage per cycle
balance: Increased functional duration of sterilizine
balance: N2O is now eligible for the analgesia surgery bonus
balance: Surgery and treatment room scrubbers filter N2O by default
qol: Bubble notification for surgery speed and damage healed
qol: Medical HUD, health analyzer, and operating computer provide tend
wounds results
qol: Text log indicates what surgery bonuses are active, and which are
available
add: added lidocaine and sterilizine to surgery trays, NanoMed, and
NanoDrug
image: anesthetic machine is now breath machine, usable with all gas
types
/🆑
---------
Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
## About The Pull Request
Swapped direct loc checks with recursive contents to prevent extreme
bluespace bodybag cheese + removed self comsig reg and fixed lowercase
you
## Changelog
🆑
fix: Fixed rolling table being able to carry an infinite amount of
dwarves
grammar: Improved rolling table grammar
/🆑
## About The Pull Request
Looks through calls to `receive_damage` and replaces them with calls to
`apply_damage`
`receive_damage` is a gross to use internal proc that doesn't take into
account physiology (damage modifiers) or even update the mob's sprite
when taking damage
It should be avoided many uses - `apply_damage`, in fact, can take a
bodypart as a target, and is overall a lot easier and more ergonomic to
use.
"So what are valid uses of it?"
- Apply damage itself, and similar direct-damage procs
- Ensuring you deal an exact amount of damage to a bodypart
- Damaging a limb with no owner
## Changelog
🆑 Melbert
refactor: A ton of things now use the more correct method of applying
damage to you. Which means they will correctly factor in damage
modifiers and are less likely to break your sprite. Some examples
include embedded objects jostling around, chiropractice, and tackling a
wall. Report any oddities, such as extreme damage or bodyparts being
wrongly affected.
fix: Having acid splashed on your face may now disfigure you and make
you bald, as it once did three years ago.
fix: Itchy heretic trauma now better checks if the bodypart is covered
or not before determining if you should itch.
fix: "Repair Puncture" logs no longer mistakenly report you are
"Incising burned flesh"
/🆑
## About The Pull Request
I'm "cooking" the materials system a bit, specifically the code
responsible for applying and removing effects. My goal is to move most
of the code to the objects-side, split it in smaller procs that can be
more easily overriden or called for object-specific modifiers and
effects, while also revamping things all around to better support items
made from multiple materials (the cleric mace will most likely be one in
this PR, with the handle and tip made of different materials).
PR NO LONGER WIP, TESTED AND ALL, CLERIC MACES CAN NOW BE MADE OF TWO
MATERIALS.
## Why It's Good For The Game
One of the nastiest flaws with the materials system is that it's just
unfeasable to have items made of multiple mats (with effects enabled)
right now, as they easily tend to override each other, where some of the
modifiers and effects should only be applied the main material.
Beside, the system's starting to show signs of its time, from the
several type checks used to apply different effects, the one letter
variables to the the material flags that are still being passed down as
arguments when you can access them from the atom/source arg anyway. It
would be disonhest of me if I went ahead and coded material fishing rods
or whatever fish fuckery with materials without ensuring it won't
further the technical debt the feature currently has.
## Changelog
🆑
refactor: Refactored materials code. report any issue.
add: Cleric maces (The autolathe-printable weapon design from outer
space) can now be made of two different materials.
balance: Buffed cleric maces a little.
fix: toolboxes' stats are now affected by materials again.
/🆑
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
## About The Pull Request
This pr makes it so reinforced tables can be hooked up to the power
grid, requiring them to be on an open tile with a cable on it much like
grilles, shocking solely people who attempt any of its disassembly
steps.
Insulation obviously still applies.
## Why It's Good For The Game
Saw talk about someone wiring up tables and I think it's funny to have
your table hooked up to the grid.
Allows you to protect your reinforced tables from disassembly, if you're
fine with world's most obvious open cabled tile below your table.
## Changelog
🆑
add: Reinforced tables may now be hooked up directly to the grid much
like grilles, electrocuting people who attempt to disassemble it.
/🆑
## About The Pull Request
This PR kills the abstract internal and external typepaths for organs,
now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds.
This PR also fixes fox ears (from #87162, no tail is added) and
mushpeople's caps (they should be red, the screenshot is a tad
outdated).
And yes, you can now use a hair dye spray to recolor body parts like
most tails, podpeople hair, mushpeople caps and cat ears. The process
can be reversed by using the spray again.
## Why It's Good For The Game
Time-Green put some effort during the last few months to untie functions
and mechanics from external/internal organ pathing. Now, all that this
pathing is good for are a few typechecks, easily replaceable with
bitflags.
Also podpeople and mushpeople need a way to recolor their "hair". This
kind of applies to fish tails from the fish infusion, which colors can't
be selected right now. The rest is just there if you ever want to
recolor your lizard tail for some reason.
Proof of testing btw (screenshot taken before mushpeople cap fix, right
side has dyed body parts, moth can't be dyed, they're already fabolous):

## Changelog
🆑
code: Removed internal/external pathing from organs in favor of a bit
flag. Hopefully this shouldn't break anything about organs.
fix: Fixed invisible fox ears.
fix: Fixed mushpeople caps not being colored red by default.
add: You can now dye most tails, podpeople hair, mushpeople caps etc.
with a hair dye spray.
/🆑
3591 individual conflicts
Update build.js
Update install_node.sh
Update byond.js
oh my fucking god
hat
slow
huh
holy shit
we all fall down
2 more I missed
2900 individual conflicts
2700 Individual conflicts
replaces yarn file with tg version, bumping us down to 2200-ish
Down to 2000 individual conflicts
140 down
mmm
aaaaaaaaaaaaaaaaaaa
not yt
575
soon
900 individual conflicts
600 individual conflicts, 121 file conflicts
im not okay
160 across 19 files
29 in 4 files
0 conflicts, compiletime fix time
some minor incap stuff
missed ticks
weird dupe definition stuff
missed ticks 2
incap fixes
undefs and pie fix
Radio update and some extra minor stuff
returns a single override
no more dupe definitions, 175 compiletime errors
Unticked file fix
sound and emote stuff
honk and more radio stuff
## About The Pull Request
I'm "cooking" the materials system a bit, specifically the code
responsible for applying and removing effects. My goal is to move most
of the code to the objects-side, split it in smaller procs that can be
more easily overriden or called for object-specific modifiers and
effects, while also revamping things all around to better support items
made from multiple materials (the cleric mace will most likely be one in
this PR, with the handle and tip made of different materials).
PR NO LONGER WIP, TESTED AND ALL, CLERIC MACES CAN NOW BE MADE OF TWO
MATERIALS.
## Why It's Good For The Game
One of the nastiest flaws with the materials system is that it's just
unfeasable to have items made of multiple mats (with effects enabled)
right now, as they easily tend to override each other, where some of the
modifiers and effects should only be applied the main material.
Beside, the system's starting to show signs of its time, from the
several type checks used to apply different effects, the one letter
variables to the the material flags that are still being passed down as
arguments when you can access them from the atom/source arg anyway. It
would be disonhest of me if I went ahead and coded material fishing rods
or whatever fish fuckery with materials without ensuring it won't
further the technical debt the feature currently has.
## Changelog
🆑
refactor: Refactored materials code. report any issue.
add: Cleric maces (The autolathe-printable weapon design from outer
space) can now be made of two different materials.
balance: Buffed cleric maces a little.
fix: toolboxes' stats are now affected by materials again.
/🆑
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
## About The Pull Request
This pr makes it so reinforced tables can be hooked up to the power
grid, requiring them to be on an open tile with a cable on it much like
grilles, shocking solely people who attempt any of its disassembly
steps.
Insulation obviously still applies.
## Why It's Good For The Game
Saw talk about someone wiring up tables and I think it's funny to have
your table hooked up to the grid.
Allows you to protect your reinforced tables from disassembly, if you're
fine with world's most obvious open cabled tile below your table.
## Changelog
🆑
add: Reinforced tables may now be hooked up directly to the grid much
like grilles, electrocuting people who attempt to disassemble it.
/🆑
## About The Pull Request
All usages of world.icon_size in code have been replaced with new
`ICONSIZE_X`, `ICONSIZE_Y` and `ICONSIZE_ALL` defines depending on
context
Replaces some "32" magic numbers with the defines
A few bits of code have been modified to split up x/y math as well
## Why It's Good For The Game
Magic number bad, code more readable, code more flexible and I'm told
there's an access cost to doing world.icon_size so minor performance
gains
## Changelog
🆑 tonty
code: made some code relating to the world's icon size more readable
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>