## About The Pull Request
Fixes#84170
Adds pen clicking and changes some of edagger and pendriver code to use
it instead.
Also replaces most pen typechecks to writing implement checks where it
makes sense, so now you can rename things with everything you can write
with (crayons)

Twisting pen caps (for traitor uplinks) has been moved to ctrl + click
instead.
## About The Pull Request
- Complete rewrite of borg omnitool code;
- - Borgs that use omnitools now have a "Omni Toolbox" that holds
whatever tools the Omnitool would cover. The toolbox keeps track of
Omnitool "Arms" in a list, as well as when to upgrade (or downgrade)
tool speed. The toolbox is not seen by the player directly.
- - Omnitool "Arms" will display available tools based on the Omni
Toolbox's contents. Selecting one does not move the tool out of the
toolbox, but instead simply overrides any following clicks with a melee
attack chain of the selected item. This is reminiscent of how borg
apparatus tools work. When selecting a tool, the Omnitool "arm" will
also set its own icon state to match the tool selected.
- - Because all Omnitool "arms" are using the same tools from the same
toolbox, actions done with one can be seen from another. For example,
using the first Omnitool to scan the Silo with the engineer borg's
multitool will update the tool's buffer, and it can be used later, even
if the multitool is selected by the second Omnitool.
- Because we're now using real tools, rather than a single tool item
faking tool usage via tool flags, almost all interactions with tools
should properly carry over.
- Added Cyborg versions of the medical toolset, for use with the Medical
Cyborg omnitool, so that we can finally use the really nice borg-version
medical tool sprites.
## Why It's Good For The Game
Easier to read code.
Fixes#83667Fixes#83537Fixes#83077Fixes#82918 partially; Heating beakers works, but the tile quick-swap
function will not function; the action is initiated by a click from the
tile stack rather than the crowbar.
## Changelog
🆑
fix: Refactored borg omnitool code, fixing most of the unique
interaction issues.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
fixes emagged medbot hypo receiving upgraded medicine upgrade
## Why It's Good For The Game
closes#83764
## Changelog
🆑
fix:fixed emagged medbot hypo receiving upgraded medicine upgrade
/🆑
## About The Pull Request
Adds 2 sounds: One for turning on internals and one for turning it off
[breathing
showcase.webm](https://github.com/tgstation/tgstation/assets/44149906/2c5811ac-6a1e-4da5-80e4-ced5e9f9e3c8)
PS: The passive breathing has been removed from this PR as Maintainer's
request and will be added with an option to turn it off later
sounds made by Beebblie on discord for this PR, couldn't have been done
without them.
## Why It's Good For The Game
Sound feedback good.
## Changelog
🆑 DATA, with sounds by Beebblie
sound: Added sounds for turning on and off internals.
/🆑
## About The Pull Request
Fix#84242
DNA probe has a blocking interaction for being used on a DNA vault (to
link it)
DNA vault has a blocking interaction for having a probe used on it (to
give samples)
This is problematic so I moved uploading onto the probe itself.
## Changelog
🆑 Melbert
fix: Fix DNA vault probes
/🆑
## About The Pull Request
So sparks were laying waste to every department that had sparks as a
little pizzazz particle effect, which turned out to be seemingly every
single department, and also just a bunch of random shit we had laying
around. That wasn't really the goal so I've reworked them, for now,
until I'm able to more comprehensively address how we handle things that
are combustible vs things that are actually dangerously flammable, which
we don't differentiate for now.
Sparks now send a signal to whatever thing is touching those sparks.
Right now I've specifically made pools of welding fuel, things made of
plasma, people covered in flammables, and cigarettes respond to this
signal. Sparks that touch objects with reagents in them will heat those
reagents marginally (approximately 40kelvin increase from 300 kelvin
underneath a popped lightbulb). There is also another signal
'HAZARDOUS_SPARKS' but as of this PR it is not used.
If you walk into sparks or get showered by them, the sparks will also
interact with any of your visible equipment (outerwear and held items),
but to reiterate, nothing besides the above stated items have
interactions with sparks... for now...
## Why It's Good For The Game
I won't apologize for being hilarious but turning departments into
fields of burnt boxes, tables, vegetables, and crates wasn't really the
intent.
Addresses #84169 and similar
## Changelog
🆑 Bisar
balance: Sparks have been heavily adjusted; they only affect items made
of plasma, pools of welding fuel, flammable people, cigarettes, and
items that contain reagents... for now. Their long-standing behavior of
igniting flammable gas has been untouched.
/🆑
## About The Pull Request
Funnily enough I was already working on this before shit broke, but here
we go.
This is mostly just the same behaviour but ported to
`item_interaction(...)`.
Primary changes include splitting off ID recoloring into its own method
for clarity, adding more sanity checks when using tgui windows, and
slightly improving the comprehensibility of genpop prisoner id
interactions (proper time text instead of seconds, actual usage descs).
## Why It's Good For The Game
Better to use `item_interaction(...)` than `attackby(...)`.
Fixes an interaction bug introduced by the recent afterattack refactor.
Nice to have a better idea of how to use genpop.
## Changelog
🆑
refactor: Updated cards/ids to use the proper item interaction system
instead of attackby, please report any issues.
fix: You can no longer recolour an ID at any point if you open the menu
but then don't select anything until later.
fix: ID cards can be recoloured using crayons/spraycans again.
qol: Prisoner IDs show genpop sentence time in hours/minutes/seconds
instead of seconds.
qol: Prisoner IDs have genpop usage tips in their examine.
/🆑
## About The Pull Request
This halves the slowdown incurred by the energy bola, and by extension,
the "cyborg energy bear trap" that this item is inexplicably tied to.
Before:

After:

Unrestrained (Control):

## Why It's Good For The Game
The energy bola is a very important part of the security kit. It's
available at roundstart and complements very well with a baton to the
face. The slowdown, however, is too extreme. Extreme to the point that
anyone hit by one of these is at too far of a disadvantage to even
properly fight back.
Summarily, if you get hit by one of these, and if you don't have a
teleport on-hand, you're cooked. Not even a firearm will save you.
They're uncatchable, unblockable, and work on prone targets.
Reducing the slowdown, in my opinion, enables it to be a tool used for
preventing a criminal from evading you, rather than completely crippling
them. It's not the final say in a combat encounter, but rather you
forcing that person to stand and fight (at a fair disadvantage) instead
of continuing to run away.
## Changelog
🆑 Rhials
balance: The energy bola slowdown has been (roughly) halved, to allow
for more retaliation when used on a criminal.
/🆑
## About The Pull Request
Updates the description of the fruit bowl.
## Why It's Good For The Game
Foreshadowing.
## Changelog
🆑 LT3
spellcheck: Melon fruit bowl now comes with a side of foreshadowing for
people who want to experience an explosion of flavour
/🆑
## About The Pull Request
Recently we allowed items held in your hands to catch fire if you catch
fire.
This makes sense but the code had a few oversights, then we reverted it.
This PR reintroduces the feature, but with a few refinements.
The basic feature is simple: If you are on fire then items you are
holding will also catch fire, in the same vein as items you are wearing
on your head or hands.
There are also a few caveats we forgot about the first time we added
this:
- If your gloves cannot catch fire, your held items will not catch fire
(because your hands aren't on fire).
- If you are extinguished, your held items will also be extinguished.
- Stopping, Dropping, and Rolling on top of any items will also
extinguish those items.
As part of this change, after an argument about whether or not this is
an oversight in coding-general, I've made the proc `get_equipped_items`
take a bitflag instead of a series of booleans as an argument and added
a new one for "include held items", so that we need no longer argue
about whether holding something counts as "equipping" it (in all other
parts of the game than this proc, it does). This is what gives the PR
most of its code footprint, don't be scared.
## Why It's Good For The Game
Items you are holding in your hands _should_ catch fire if everything
else on your person is on fire, and taking an item off of your body to
put it in your hands shouldn't protect it from fire, because those
things don't make intuitive sense.
If we want an item to be able to catch fire when worn, then it should do
so.
This might expose some issues where we were improperly setting the
flammability flags on items, but any weapon which will burn in your
hands now would also have burned if you were wearing it on your belt or
back, so making those issues more visible should be a bonus (we'll also
stop them from burning on your back or belt).
If you see someone holding a piece of paper that you really don't want
them to read you can now set them on fire to stop them from reading it,
whereas previously they would deftly hold the very flammable object out
of reach of their flaming body.
## Changelog
🆑
balance: Items held in your hands can catch fire.
balance: Items you are holding won't catch fire if your hands cannot
catch fire.
balance: When you stop being on fire so will items you are holding.
balance: If you roll around on your burning items they will stop being
on fire.
/🆑
## About The Pull Request
This pull request adds a couple of lines to the code for matches and
lighters that has it check to see if its location (which would also be
its user) is a living mob with flammable liquid on them. If so, they get
lit on fire.
## Why It's Good For The Game
It adds a goofy interaction for people unfortunate enough to get
splashed with flammable liquid. Beyond a possible way of making a
half-assed attempt to assassinate a smoker, it's also a good safety
lesson. Just look at these poor young men below...
https://github.com/tgstation/tgstation/assets/49173900/f073f71f-6b37-46ce-8ea3-eb30ec2378a1
## Changelog
🆑 Bisar
add: The Nanotrasen safety commission reminds employees to properly
clean themselves of all flammable material before going on smoke breaks.
/🆑
## About The Pull Request
Currently, sparks only ignite the air in rooms with
plasma/tritium/hydrogen in them. This PR changes sparks to ignite
flammable things they touch, including mobs covered in flammable
liquids. They also marginally heat containers (40K temp increase from a
broken light bulb).
The initial purpose was to make welding fuel pools more responsive to
flaming things being thrown into them. I have also done that. They now
respond to hot objects (including flaming mobs) entering their space or
being thrown onto them. They are also ignited by sparks.
This PR makes sparks a fire hazard. Keep a fire extinguisher handy.
## Why It's Good For The Game
Safety hazards are fun. Sparks should, logically, set flammable things
on fire, including YOU. Welding fuel pools should be more hazardous.
## Changelog
🆑 Bisar
add: Sparks now ignite flammable things. Including you. Keep a fire
extinguisher handy or stop dousing yourself in welding fuel!
fix: Fixed a few oversights with welding fuel pools not igniting when
you throw lit/hot things into them or when you walk into them while on
fire.
/🆑
## About The Pull Request
gives medborgs upgraded with the omnitool upgrade TRAIT_FASTMED which
makes use of syringes quicker
## Why It's Good For The Game
encourages medical cyborgs to use a variety of chemicals with different
effects they've crafted themselves through the beaker apparatus instead
of just relying on their infinite hypospray for everything
## Changelog
🆑
balance: the advanced omnitool upgrade now hastens the mediborg's syringe
too
/🆑
## About The Pull Request
PR has been reworked a bunch! Changes in bold. Some of the **HATE** is
now outdated.
**Negative mutations now allow you to have more positive mutations, via
reducing your instability!**
**All mutations have been overall standardized via defines on their
instability values. Many mediocre positive mutations have had their cost
reduced significantly!**
```
/// Negatives that are virtually harmless and mostly just funny (language)
// Set to 0 because munchkinning via miscommunication = bad
#define NEGATIVE_STABILITY_MINI 0
/// Negatives that are slightly annoying (unused)
#define NEGATIVE_STABILITY_MINOR -20
/// Negatives that present an uncommon or weak, consistent hindrance to gameplay (cough, paranoia)
#define NEGATIVE_STABILITY_MODERATE -30
/// Negatives that present a major consistent hindrance to gameplay (deaf, mute, acid flesh)
#define NEGATIVE_STABILITY_MAJOR -40
/// Positives that provide basically no benefit (glowy)
#define POSITIVE_INSTABILITY_MINI 5
/// Positives that are niche in application or useful in rare circumstances (parlor tricks, geladikinesis, autotomy)
#define POSITIVE_INSTABILITY_MINOR 10
/// Positives that provide a new ability that's roughly par with station equipment (insulated, cryokinesis)
#define POSITIVE_INSTABILITY_MODERATE 25
/// Positives that are unique, very powerful, and noticeably change combat/gameplay (hulk, tk)
#define POSITIVE_INSTABILITY_MAJOR 35
```
Added a new height mutation: Acromegaly! It's the opposite of Dwarfism
and makes you uncannily tall. It also makes you hit your head 8% or 4%
(with synch) of the time you pass through airlocks. Wear a helmet!
**Injectors and activators' duration is now dependent on the
in/stability (absolute value) of the mutations to be injected! With a
minimum of 5-10-15 seconds for each type of injector. Also changed up a
bit how part upgrade cooldowns work, by making each tier reduce
cooldowns by 25-15-10% for each injector type.**
## Why It's Good For The Game
**> Negative mutations now allow you to have more positive mutations,
via reducing your instability!**
Genetics has been long in dire need of a rework. This isn't really one,
but it IS intended to increase genetics depth a bit and stave off its
stagnation, making it slightly more interesting than 'free shit', by
making it so **you can now gain more positive mutations, but you need to
figure out what you're going to take as a downgrade in turn.**
Genetic powers are heavily themed around comic book superheroes, and you
know what those had a lot? Debilitating drawbacks to their powers. Let's
replicate that.
**I intend to make a sister PR for this that adds more interesting
positive mutations (for the first time in decades) to genetics, so
there's an actual element of pick-and-choose involved**
> Added a new height mutation: Acromegaly! It's the opposite of Dwarfism
and makes you uncannily tall. It also makes you hit your head 8% or 4%
(with synch) of the time you pass through airlocks. Wear a helmet!
We have Super Tall. Let's add it to the game somewhere! With a fun
downside, of course.
**Gigantism is now a recipe mutation, mix Acromegaly with Strength to
get it.**
> **Injectors and activators' duration is now dependent on the
in/stability (absolute value) of the mutations to be injected! With a
minimum of 5-10-15 seconds for each type of injector. Also changed up a
bit how part upgrade cooldowns work, by making each tier reduce
cooldowns by 25-15-10% for each injector type.**
**Made no sense that a Glowy injector cost the same as a Hulk injector.
Just annoying. The cooldown is based on the absolute value, so a -30
instability injector would take ~30 seconds. This mostly so that
geneticists can't make a million modded syringe gun supersyringes**
## About The Pull Request
Changes `tanktype` to be a list and `AttemptRefill` to properly check
for a list. Also adds a `has_reagent` check to `AttemptRefill` to
prevent people from converting a fuel tank to plumbed to refill a fire
extinguisher with welding fuel.
## Why It's Good For The Game
People be allowed to refill fire extinguishers from the plumbed variant
of tanks. Also I thought it would be funny if we could refill
extinguishers from water coolers.
fix: #68174
## Changelog
🆑 Goat
qol: fire extinguishers can now be filled via stationary tanks. (and
water coolers)
/🆑
## About The Pull Request
fixes#83947
allowing cigarettes to be grinded in mortars again
## Why It's Good For The Game
Need muh nic sippy cup for my orny child
(fixing bugs is good for game health, duh)
## Changelog
🆑
fix: allows cigarette grinding in mortar
/🆑
## About The Pull Request
We be addin' peg legs an' peg arms, makin' 'em craftable fer all ye
scurvy dogs. Ye can attach 'em yerselves, no need fer a surgeon's touch,
usin' the mighty ligament hook code. There be tons o' balance tweaks an'
special properties fer these limbs. Yarrrrr!
## Why It's Good For The Game
Arrr, this be givin' ye a ghetto alternative to headin' to medbay when
yer limbs be blown off. Plus, the potential fer pirate RP be fantastic!
Who doesn’t want peg limbs? If ye think otherwise, ye be lyin’ ,and
ye'll be walkin’ the plank! Yarrrrr!
## Changelog
🆑 Hacks-The-Doors (coding) & Septicchlorine (spriting)
add: craftable peg limbs (2 planks) which are attachable without surgery
bal: peg limbs take 1.5x burn and 1.3x brute, and do reduced damage
bal: peg limbs have chunky fingers (like insuls, but per limb)
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: septic <105231896+septoBismol@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
What it says on the tin: Allows dental pills to be used in crit, simply
gets rid of hands_free and adds a NONE flag
## Why It's Good For The Game
Dental implants are among the lowest used surgeries in the game, and I
think have a lot of potential for funny shenanigans, such as using ghoul
powder to fake your own death, or just blowing yourself up when in crit.
Requires another person to do the surgery, so its harder to powergame
with and also reviver implants alongside other things set the precedent
that this sorta change is okay.
## Changelog
🆑 Hacks-The-Doors
balance: dental pills can now be used in crit.
balance: dental pills now give off a message when you start using them
balance: dental pills have a 2.5 second delay when in soft crit
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Baby plushies are now smaller than their parents
25% by transform 0.75
## Why It's Good For The Game
Easier to distinguish, so its qol, which means i get gbp

Stupid and cute and funny
## Changelog
🆑
qol: Baby plushies are now smaller than their parents
/🆑
## About The Pull Request
This PR changes it so that if you refine an anomaly by neutralising it,
it respects the same limit on number of anomaly cores as refining one
you bought from Cargo.
If it would produce an illegal core, it will create a mostly useless
inert core which you can sell at cargo for 80% of the price of buying a
raw core.
## Why It's Good For The Game
https://hackmd.io/@tgstation/r1tzxpwPL
This was a requirement in the original design doc which just never made
it into the game.
We want to be able to control how many cores of each type can possibly
exist in a round, as this is what allows them to have the "these items
can be really busted" allowance.
## Changelog
🆑
fix: Neutralising an anomaly cannot produce more anomaly cores than are
supposed to exist in a single round
/🆑
## About The Pull Request
adds the flatpacker, it flatpacks machines

it is unlocked at industrial engineering
the default print time is 4.5 seconds, reduced by the servo tier divided
by 2
matter bins increase material capacity
better servos decrease material cost, and the flatpacker cannot print a
machine if it contains parts that are of a tier larger than the servos
tier
explained in this vid
https://github.com/tgstation/tgstation/assets/70376633/c26e4379-f49b-4b1d-a70c-61f1ba96a9e0
## Why It's Good For The Game
machine construction sucks, this should be more convenient, this does
not replace machine construction at all
compared to machine frames while this is faster and more convenient, it
is significantly more costly in materials, and a better servo is needed
to use higher tier parts, and the printed machines are always the lowest
required tier
## Changelog
🆑
add: the flatpacker, a machine unlocked at industrial engineering
/🆑
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
## About The Pull Request
Uses ADD_CLOTHING_TRAIT to store a ref to the individual holster item
that's providing the gunflip trait. This fixes an issue that was
happening where having one holster equipped and dropping or unequipping
another would remove the trait from you, even though you were still
wearing one.
## Why It's Good For The Game
Fixes#83762
## Changelog
🆑
fix: Fixed thermal pistols sometimes not recognising an equipped holster
when trying to spin them to recharge.
/🆑
## About The Pull Request
I was looking at sounds (as you do) and I noticed this

These sounds don't exist
We have `portal_open_1`, not `portal_open1`.
This wasn't caught on compile because they used `""` and not `''`.
So I went through and audited a bunch of playsound uses that don't use
`''`. Only one error, fortunately
Likewise there was a ton of places running `get_sfx` pointlessly
(because `playsound` does it for you) so I clened that up.
However while auditing the portal stuff I noticed a few oddities, so I
cleaned it up a bit.
Also also I added the portal sounds to the wormholes event and gave it a
free ™️ optimization because it was an in-world loop
## Changelog
🆑 Melbert
sound: Portals made by portal guns now make sounds as expected
sound: Wormholes from the wormhole event now make sounds when formed
/🆑
## About The Pull Request
Same idea as #82656 but for ctrl click & ctrl shift click cause why not
- Does your signal & `can_perform_action()` checks using
`interaction_flags_click` flags before delegating the event down to
`ctrl_click()` proc.
- The one new change now is that `ctrl_click()` proc is now blocking,
meaning returning `CLICK_ACTION_SUCCESS` or `CLICK_ACTION_BLOCKING` will
stop the object from getting grabbed/pulled. So remember to return these
values if you want to stop the grab action or return `NONE` if you want
to process the click but still want the object to get grabbed as well
## Changelog
🆑
refactor: Ctrl click & Ctrl shift click has been refactored. Please
report bugs on GitHub
/🆑
## About The Pull Request
Mouse drag & drop has been refactored into its own attack chain. The
flowchart below summarizes it

Brief summary of each proc is as follows
**1. `atom/MouseDrop()`**
- It is now non overridable. No subtype should ever touch this proc
because it performs 2 basic checks
a) Measures the time between mouse down & mouse release. If its less
than `LENIENCY_TIME`(0.1 seconds) then the operation is not considered a
drag but a simple click
b) Measures the distance squared between the drag start & end point. If
its less than `LENIENCY_DISTANCE`(16 pixels screen space) then the drag
is considered too small and is discarded
- These 2 sanity checks for drag & drop are applied across all
operations without fail
**2. `atom/base_mouse_drop_handler()`**
- This is where atoms handle mouse drag & drop inside the world. Ideally
it is non overridable in most cases because it also performs 2 checks
- Is the dragged object & the drop target adjacent to the player?.
Screen elements always return true for this case
- Additional checks can be enforced by `can_perform_action()` done only
on the dragged object. It uses the combined flags of
`interaction_flags_mouse_drop` for both the dragged object & drop target
to determine if the operation is feasible.
We do this only on the dragged object because if both the dragged object
& drop target are adjacent to the player then `can_perform_action()`
will return the same results when done on either object so it makes no
difference.
Checks can be bypassed via the `IGNORE_MOUSE_DROP_CHECKS` which is used
by huds & screen elements or in case you want to implement your own
unique checks
**3. `atom/mouse_drop_dragged()`**
- Called on the object that is being dragged, drop target passed here as
well, subtypes do their stuff here
- `COMSIG_MOUSEDROP_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc
**4. `atom/mouse_drop_receive()`**
- Called on the drop target that is receiving the dragged object,
subtypes do their stuff here
- `COMSIG_MOUSEDROPPED_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc
## Why It's Good For The Game
Implements basic sanity checks across all drag & drop operations. Allows
us to reduce code like this
8c8311e624/code/game/machinery/dna_scanner.dm (L144-L145)
Into this
```
if(!iscarbon(target))
return
```
I'm tired of seeing this code pattern `!Adjacent(user) ||
!user.Adjacent(target)` copy pasted all over the place. Let's just write
that at the atom level & be done with it
## Changelog
🆑
refactor: Mouse drag & drop attack chain has been refactored. Report any
bugs on GitHub
fix: You cannot close the cryo tube on yourself with Alt click like
before
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
## About The Pull Request
You can now alt click mod suit bags and extinguishers while resting
Adds screentips to extinguishers
## Why It's Good For The Game
Fixes#83896
## About The Pull Request
- Fixes#83679
RHD(Rapid handheld device) refers to the RCD, RPLD & RTD. During the
`do_after()` when building the design if the blueprint is changed then
the build process is cancelled. This way we don't use the wrong amount
of resource when the design changes mid build
## Changelog
🆑
fix: RCD, RPLD & RTD cancels their build process if their design is
changed during build.
/🆑
## About The Pull Request
- Afterattack is a very simple proc now: All it does is this, and all
it's used for is for having a convenient place to put effects an item
does after a successful attack (IE, the attack was not blocked)

- An overwhelming majority of afterattack implementations have been
moved to `interact_with_atom` or the new `ranged_interact_with_atom`
I have manually tested many of the refactored procs but there was 200+
so it's kinda hard
## Why It's Good For The Game
Afterattack is one of the worst parts of the attack chain, as it
simultaneously serves as a way of doing random interactions NOT AT ALL
related to attacks (despite the name) while ALSO serving as the defacto
way to do a ranged interaction with an item
This means careless coders (most of them) may throw stuff in afterattack
without realizing how wide reaching it is, which causes bugs. By making
two well defined, separate procs for handing adjacent vs ranged
interactions, it becomes WAY WAY WAY more easy to develop for.
If you want to do something when you click on something else and you're
adjacent, use `interact_with_atom`
If you want to do something when you click on something else and you're
not adjacent, use 'ranged_interact_with_atom`
This does result in some instances of boilerplate as shown here:

But I think it's acceptable, feel free to oppose if you don't I'm sure
we can think of another solution
~~Additionally it makes it easier to implement swing combat. That's a
bonus I guess~~
## Changelog
🆑 Melbert
refactor: Over 200 item interactions have been refactored to use a
newer, easier-to-use system. Report any oddities with using items on
other objects you may see (such as surgery, reagent containers like cups
and spray bottles, or construction devices), especially using something
at range (such as guns or chisels)
refactor: Item-On-Modsuit interactions have changed slightly. While on
combat mode, you will attempt to "use" the item on the suit instead of
inserting it into the suit's storage. This means being on combat mode
while the suit's panel is open will block you from inserting items
entirely via click (but other methods such as hotkey, clicking on the
storage boxes, and mousedrop will still work).
refactor: The detective's scanner will now be inserted into storage
items if clicked normally, and will scan the storage item if on combat
mode
/🆑
## About The Pull Request
Adds a new Module preinstalled into the nukie suits, and purchasable in
the uplink, grants resistance to batons knockdown.
## Why It's Good For The Game
At the last coderbus meeting, i personally asked to Fikou and Mothblocks
for more baton counters to be introduced, they seemed to be ok with the
idea, so here we are.
Introduces an unremovable module which grants to the wearer resistance
to baton knockdown, it comes preinstalled in all syndicate modsuits.
With the fix of "rest to prevent disarm", stun batons have gotten even
more powerful than they once were, and while i do agree secret kinda
abusable tech is bad for the health of the game, the end result is that
the stun meta is even more prominent than ever, so it's a good time
introduce a small counter to it.
From a thematic perspective, Syndie suits should at least make people
feel afraid, which is hard to do when a single prod from a stun stick
will make you drop like a sack of potatoes, lose your desword and get
slashed to bits.
On the gameplay side, wearing one of these will make you a target for
the entire station, if a traitor is willing to expose themselves, or in
the case of nukies, forced to; they should probably have a small edge on
what's the most common tool used to stop them.
Keep in mind that this only prevents the knockdown, it does nothing for
the stamina damage, you'll still get stamcritted in a couple of hits,
nothing changes on that front.
This is merely to prevent a scenario where a single baton hit will
immediately lose you a fight.
## Changelog
🆑
add: adds the MOD shock-absorption module, into the game.
add: The MOD shock-absorption module into the the uplinks, costs 4 TC.
balance: Nukie modsuits come with the shock_absorption module
preinstalled.
/🆑
## About The Pull Request
- Fixes the emergency open spamming infinitely on bump open
- Tram doors have an associated assembly, can be repaired, rebuilt, and
constructed
- Adjusted door timings to better match the animation, no longer getting
briefly stuck on an invisible, open door
## Why It's Good For The Game
Fixing little issues that have surfaced
## Changelog
🆑 LT3
fix: Tram doors can now be constructed and assemblies built
fix: Emergency opening tram doors no longer spam balloon alerts
fix: Tram doors open faster on arrival
fix: Tram doors correctly force close on attempt 3
/🆑
## About The Pull Request
Adds a new positronic brain variant to bepis tech
To save materials we took the corners off but now they can roll
It can roll around, knock items over and push other posibrains away
You can also kick it across the room and it's a lot cheaper because you
cut the corners off
https://github.com/tgstation/tgstation/assets/7501474/e4f913e8-cf2f-455a-b2eb-1654468df708
## Why It's Good For The Game
A chorus of whining posibrains is like heroine to the ears, now they can
aggresively shit around the robotics lab while whining for their DURAND
or cyborg shell, but the robo can also punt them into the disposal bin
## Changelog
🆑
add: Adds a positronic sphere to bepis tech and roboticist mail goodies.
It can now wreack havoc across the robotics lab while whining for a
DURAND body, but you can also punt it!
/🆑
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
Makes energy bolas work on prone targets and not leave behind garbage
when they'd whiff.
Ever notice how you could crawl through one unlike other bolas and how,
if you got hit by one while prone, it left behind a little blue
bear-trap looking thing?
#60160 gave them the ability to be blocked and to hit flying mobs, but
it did this by making them create a subtype of bear trap on the location
on hitting a valid atom. This meant that if the target lacked a leg, was
prone, or already had a bola on, the bear trap object would be left
behind and the bola would do nothing.
This fixes that. Does not seem to have been intended behavior.
## Why It's Good For The Game
Fix good.
## Changelog
🆑
fix: energy bolas now work on prone targets and don't leave behind a
fake item when they whiff.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
So this PR comes in two basic parts: the new ammo types and the minor
balance changes. I'll go over each separately.
**--- NEW AMMO TYPES ---**

-- Metallic Hydrogen Ammo: Made from Metallic Hydrogen, obviously. Has
middling damage and no dismemberment chance, but pierces through armor
and enemies like they weren't even there.
-- Zaukerite Slivers: Made from a zaukerite crystal. Does high toxic
damage, and has excellent wounding and embed chances, but lacking in
armor penetration. Also gives 1 second of blurry vision if it hits you!
-- Paper balls: Crafted from a sheet of paper. Mostly just a throwing
joke item, and 99% nonlethal like donksoft. Can be fired from a
crossbow, but also could be used if you wanted to have a snowball fight
on metastation.
-- Healium Crystal Bolts! Crafted (using menu) from the healium grenade
item. Heals 30 of brute/tox/burn, but puts who is hit by it to sleep for
three seconds, limiting its use in actual combat.
-- Supermatter Bolts: Dusts whoever you shoot it at! Absurdly
overpowered! Admin only!
-- A makeshift quiver, made from cutting a o2 tank in half, to store all
the ammo in.
**MINOR BALANCE CHANGES**
-- For some reason I thought the 357, which the traitor crossbow is a
direct competitor to, did 40 damage when making the first version of the
PR, instead of the reality of it doing 60. It's been buffed to 55
damage. (The basic engi one still does 35.)
-- I've been informed that generally, the stressed rebar crossbow isn't
ever used, as the misfire chance isnt worth the extra shot. As such, I
felt it was thematic to say that the stressing procedure involves
messing with the draw system in the fluff, and the stressed one now
takes half as long to rack.
**OTHER CRAP**
-- The rods now drop themselves if you shoot them at a wall. Hopefully.
-- Fixed the the non-bare wound chance on the traitor crossbow not being
increased from the base version.
-- Has a nice electronic discharge noise on firing.
## Why It's Good For The Game
I'm very happy with the reception of the rebar crossbow, and felt that
given it was an engi weapon at heart, giving it some engi-related
ammunition would fit it very well (and also have a good reason for
making zaukerite besides selling it.) The paper balls were more just so
the crew could able to shoot their buddies with it and not maim them.
As for the balance, I feel the tot crossbow being department restricted
is already a strong factor in it being infrequently seen, and if someone
is lucky enough to roll traitor in a job slot, it's a shame if their
job's items aren't worth it. The stressed variant is a similar case, and
I hope it's enough of a buff to encourage its use.
## Changelog
🆑 WebcomicArtist
add: Added zaukerite (high damage/embed, low AP) and metallic hydrogen
(High AP and piercing, but low embed) crossbow ammo for the rebar
crossbows
add: Added healium crystal ammo for the crossbow as well, which heals
whomever you shoot it at.
add: Added admin-only supermatter crossbow bolts that dust you, because
why the hell not.
add: Added non-harmful paper balls. Can be shot from a crossbow, or
thrown at co-workers.
add: Added a quiver made from cutting an o2 tank in half, to hold it
all.
image: added sprites for all the above.
balance: Traitor Engineer Crossbow ammo now does 55 damage instead of
45, to make it compete with revolver.
balance: Stressed Rebar Crossbow now has a shorter delay required to
rack it, but can shoot you in the face on misfire.
fix: fixed rebar crossbow shots not dropping items on hitting walls
fix: fixed traitor crossbow having worse wound chance than the base one
sound: added new crossbow firing sound effect
/🆑
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
Medical tools have some operation sounds that added to the aesthetic of
their work so I thought why not engineering.
https://github.com/tgstation/tgstation/assets/92416224/30e4558c-8a64-407b-a7fb-b1ad30966fe5
## Why It's Good For The Game
People play engineering to fix stuffs so making the aesthetic of using
the tools better should make it fixing more enjoyable.
## Changelog
🆑
sound: added operating sounds for wrench, wirecutter and crowbar
/🆑
---------
Co-authored-by: Afevis <ShizCalev@users.noreply.github.com>
## About The Pull Request
Fixes the admin borg panel's upgrade functionality. Caused by not
registering the signals for deletion and also by the upgrade code
checking the robot's contents instead of upgrades list (since the borg
panel spawns the item in the borg, it appears in the borg's contents,
making the check think the borg already has it installed.)
## Why It's Good For The Game
Easier testing new borg modules
## Changelog
🆑
fix: Fixes admin borg panel upgrade functions
/🆑
## About The Pull Request
closes#83755
there was a typographical error in both of the item
## Why It's Good For The Game
it closes#83755
## Changelog
🆑
fix: smoking pipe not showing sprite when lit
/🆑
## About The Pull Request
Checks that held modules exist in new module list after rebuilding
modules before putting them back in held modules.
Fixes emag modules stuck in inventory/screen after losing emag status
Also fixes jank fail to install piercing hypospray upgrade
## Why It's Good For The Game
Fixes buges
## Changelog
🆑
fix: Borg emag module jank when no longer emagged
fix: Borg piercing hypospray fail message
/🆑
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
What it says on the tin.
I experienced this one personally when a lawyer (ofc) called out my
existence mere moments after being activated through no fault of my own
🧂
## Why It's Good For The Game
Fix good.
## Changelog
🆑
fix: Pre-Loaded Syndicate Intellicard AI's no longer appear in PDA
messenger.
/🆑
## About The Pull Request
So apparently RLD glowsticks just straight up didn't glow, but also
thought they were on.
Looking into it, this seemed to be an issue of it using `G.light_on =
TRUE` rather than `G.turn_on()`.
Replacing it with the latter fixes our issue.
We then also just, replace the single letter variable `G`.
## Why It's Good For The Game
Y'know I think glowsticks should probably like, actually glow, right?
## Changelog
🆑
fix: RLD glowsticks actually glow again.
/🆑
## About The Pull Request
**1. Qol**
- Screentips & examines for welder, wrench & plunger tools
- Examining plumbing machinery will display the reagents & their
respective volumes present inside
- Plumbing grinder now has a grind/juice mode which can be changed by
hand
**2. Code Improvements**
- Rapid plumbing device now uses the new attack
chain(`interact_with_atom()` & `interact_with_atom_secondary()`) instead
of the general `attackby()`
- Same attack chain improvements applied for plumbing grinder
- Plumbing grinder now processes items that enter into it asynchronously
**3. Fixes**
- Fixes#83538. Contains various sub changes
- You can now attack the plumbing grinder with any item in combat mode
without the grinder trying to consuming it
- You can deconstruct the plumbing grinder with the Rapid plumbing
device without the grinder trying to consuming it
- You cannot grind abstract & hologram items in the plumbing grinder
- Growing vat now uses the correct layer selected on rapid plumbing
device
## Changelog
🆑
qol: more examines & screentips for plumbing machinery
qol: plumbing grinder has a grind/juice mode which be toggled by hand
code: improved attack chain for RPLD & plumbing grinder
fix: You can deconstruct the plumbing grinder with the RPLD
fix: You can attack the plumbing grinder with any item in combat mode
without getting that item consumed
fix: You cannot grind abstract/ hologram items in the plumbing grinder
fix: growing vat now uses the correct layer selected on rapid plumbing
device
/🆑