## About The Pull Request
- Moves borg inducer to the same file as other inducers for easy
maintainence
- Compressed code for its `get_cell()` proc
- Fixes examines & screentips for borg inducer
## Changelog
🆑
code: slightly improved code for borg inducer
spellcheck: fixes examines & screentips for borg inducer
/🆑
---------
Co-authored-by: AMyriad <143908044+AMyriad@users.noreply.github.com>
## About The Pull Request
~~Kept you waitin huh!~~
The projectile refactor is finally here, 4 years later. This PR (almost)
completely rewrites projectile logic to be more maintainable and
performant.
### Key changes:
* Instead of moving by a fixed amount of pixels, potentially skipping
tile corners and being performance-heavy, projectiles now use
raymarching in order to teleport through tiles and only visually animate
themselves. This allows us to do custom per-projectile animations and
makes the code much more reliable, sane and maintainable. You (did not)
serve us well, pixel_move.
* Speed variable now measures how many tiles (if SSprojectiles has
default values) a projectile passes in a tick instead of being a magical
Kevinz Unit™️ coefficient. pixel_speed_multiplier has been retired
because it never had a right to exist in the first place. __This means
that downstreams will need to set all of their custom projectiles' speed
values to ``pixel_speed_multiplier / speed``__ in order to prevent
projectiles from inverting their speed.
* Hitscans no longer operate with spartial vectors and instead only
store key points in which the projectile impacted something or changed
its angle. This should similarly make the code much easier to work with,
as well as fixing some visual jank due to incorrect calculations.
* Projectiles only delete themselves the ***next*** tick after impacting
something or reaching their maximum range. Doing so allows them to
finish their impact animation and hide themselves between ticks via
animation chains. This means that projectiles no longer disappear ~a
tile before hitting their target, and that we can finally make impact
markers be consistent with where the projectile actually landed instead
of being entirely random.
<details>
<summary>Here is an example of how this affects our slowest-moving
projectile: Magic Missiles.</summary>
Before:
https://github.com/user-attachments/assets/06b3a980-4701-4aeb-aa3e-e21cd056020e
After:
https://github.com/user-attachments/assets/abe8ed5c-4b81-4120-8d2f-cf16ff5be915
</details>
<details>
<summary>And here is a much faster, and currently jankier, disabler
SMG.</summary>
Before:
https://github.com/user-attachments/assets/2d84aef1-0c83-44ef-a698-8ec716587348
After:
https://github.com/user-attachments/assets/2e7c1336-f611-404f-b3ff-87433398d238
</details>
### But how will this affect the ~~trout population~~ gameplay?
Beyond improved visuals, smoother movement and a few minor bugfixes,
this should not have a major gameplay impact. If something changed its
behavior in an unexpected way or started looking odd, please make an
issue report.
Projectile impacts should now be consistent with their visual position,
so hitting and dodging shots should be slightly easier and more
intuitive.
This PR should be testmerged extensively due to the amount of changes it
brings and considerable difficulty in reviewing them. Please contact me
to ensure its good to merge.
Closes#71822Closes#78547Closes#78871Closes#83901Closes#87802Closes#88073
## Why It's Good For The Game
Our core projectile code is an ungodly abomination that nobody except
me, Kapu and Potato dared to poke in the past months (potentially
longer). It is laggy, overcomplicated and absolutely unmaintaineable -
while a lot of decisions made sense 4 years ago when we were attempting
to introduce pixel movement, nowadays they are only acting as major
roadblocks for any contributor who is attempting to make projectile
behavior that differs from normal in any way.
Huge thanks to Kapu and Potato (Lemon) on the discord for providing
insights, ideas and advice throughout the past months regarding
potential improvements to projectile code, almost all of which made it
in.
## Changelog
🆑
qol: Projectiles now visually impact their targets instead of
disappearing about a tile short of it.
fix: Fixed multiple minor issues with projectile behavior
refactor: Completely rewrote almost all of our projectile code - if
anything broke or started looking/behaving oddly, make an issue report!
/🆑
## About The Pull Request
Fixes issues with var typing and proc arguments, discovered using
OpenDream's WIP TypeMaker feature (using improvements I haven't PR'd
upstream yet).
## Why It's Good For The Game
Codebase maintenance.
## About The Pull Request
- Fixes#87641
TODO
- [x] Write unit tests for bog omnitool wrench
- [x] Write unit tests for bog omnitool screwdriver
- [x] Write unit tests for bog omnitool wirecutter
- [x] Write unit tests for borg omnitool crowbar
- [x] Write unit tests for borg omnitool multiool
Tests for engiborg omnitool for now
## Changelog
🆑
fix: some broken borg omni tools should work again
/🆑
## About The Pull Request
(my dumb ass commited previous pr on master branch so i made new 💀)
- Adds "Service Cyborg Botany Upgrade" that cost 13 iron and 2 glass.
- Basically, the mostly unused cyborg model has now more functionality.
(as we know how many gimmicks can be made through botany)
- Botany Omni-tool:

- Meet the "Gardener"

## Why It's Good For The Game
I was outraged that despite the borg ability to cook - near half of the
recipes you could not recreate due to the lack of a botanist (or when
theyre doing syndicate operations). The Service borg can now serve well
on a lowpop rounds.
## Changelog
🆑
add: Added new botany module in mechfabricator designs. Gives service
cyborg plant bag and plant analyzer.
add: Added cyborg botanical omni-tool.
qol: Service apparatus (another existing module) can now hold: seeds,
fish, grafts.
qol: Secondary beaker storage can now hold any beakers. It used to spawn
with one, but when you dropped it - you could no longer pick it back.
image: New gardener skin for service cyborg.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## 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.
/🆑
## About The Pull Request
**1. Qol**
- Adds examines & screentips for screwdriver act, inserting & removing
cell
**2. Code Improvements**
- Autodocs & removes some unused/redundant vars
- Corrects return values of `screwdriver_act()`
**3. Fixes**
- Fixes#85408. Charging is consistent with cell rating & scales for
higher tier cells
- Syndicate inducers now uses super batteries not cells so they have
higher charge
**4. Refactor**
- Moved attack chain to `item_interaction()` & `interact_with_atom()` &
removes a lot of procs to merge with this new attack chain
## Changelog
🆑
qol: adds extra examines & screentips for inducer
fix: inducer charging rate scales with cell rating
fix: syndicate inducers now have correct charge & batteries installed
refactor: inducer attack chain has been improved & redundant vars/procs
have been removed, report bugs on github
/🆑
---------
Co-authored-by: Sealed101 <cool.bullseye@yandex.ru>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
123 changed files and multiple crashes after writing broken regex, I
replaced most remains of direct spans with macros. This cleans up the
code and makes it easier to work with in general, see justification for
the original PR. I also fixed a bunch of broken and/or unclosed spans
here too.
I intentionally avoided replacing spans with multiple classes (in most
cases) and spans in the middle of strings as it would impact readability
(in my opinion at least) and could be done later if required.
## Why It's Good For The Game
Cleaner code, actually using our macros, fixes borked HTML in some
places. See original PR.
## Changelog
Nothing player-facing
## About The Pull Request
<details>
- renamed ai folder to announcer
-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer
- separated the ambience folder into ambience and instrumental
-- ambience --
- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it
-- instrumental --
- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)
-- items --
- moved secdeath to hailer
- moved surgery to handling
-- effects --
- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects
-- vehicles --
- moved mecha into vehicles
created mobs folder
-- mobs --
- moved creatures folder into mobs
- moved voice into mobs
renamed creatures to non-humanoids
renamed voice to humanoids
-- non-humanoids--
created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg
-- humanoids --
-- misc --
moved ghostwhisper to misc
moved insane_low_laugh to misc
I give up trying to document this.
</details>
- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc
- [X] mobs
- [X] runtime
- [X] vehicles
- [ ] attributions
## Why It's Good For The Game
This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.
## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
## About The Pull Request
Adds an upgrade disk that gives the ability to remotely charge an APC
with the AIs backup power (the one that runs down when there is no power
in an APC). This tech disk is under advanced AI tech
Also added the ability to make new disks with the new object type
/obj/item/aiupgrade, and made it so not every AI module is malf, now
only subtypes of /datum/ai_module/malf show up on malf upgrade screens
## Why It's Good For The Game
Adds the ability for an AI to assist crewmembers who do not have power,
which is a pretty interesting interaction. Does chem not have power and
is trying to make some healing chems? you can provide power for them for
a bit, but they better hurry!
## Changelog
🆑
add: Added the remote power AI disk
code: made it possible to easily add new AI upgrade disks
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
This is a researchable upgrade for janitorial cyborgs. It gives them
slightly more than double the amount of lights, and it is researchable
in the same suite of upgrades.
## Why It's Good For The Game
I often found myself wanting more lights, or wanting to fix small broken
windows as a cyborg, and this PR adds a solution.
## Changelog
🆑
add: Add a capacity upgrade for janitorial cyborg light replacers
/🆑
## About The Pull Request
Borg upgrades would vanish upon deconstruction via lockdown-wrench
pipeline, which is inconsistent with them being dropped upon a module
change, and it's also kinda scummy.
Exoskeletons were not being dropped upon such deconstruction because
some melbert guy codered too hard i think haha whoops (#76583)
also made borg exoskeleton's part removal process use head and chest's
`drop_organs()` to handle flash/cell/wiring removal. it seems to be
neater but i could be wrong
## Why It's Good For The Game
Fixes#59647
Makes the exoskeleton (the most expensive and vital borg shell piece)
drop upon deconstruction again which is nice and cool
## Changelog
🆑
fix: fixed borg exoskeletons not dropping when a borg is manually
deconstructed
fix: borg upgrade modules are now dropped when a borg is deconstructed
/🆑
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Currently to check for Silicon access, we do:
``if is silicon or is admin ghost or has unlimited silicon privileges or
has machine remote in hand``
What has unlimited silicon privileges? Bots, Drones, and admin ghosts.
To check for AI access, it just checks for AI instead of silicon, and
doesnt check for unlimited silicon privileges.
This was kinda silly, so I thought I should make this a little easier to
understand.
Now all silicon/ai traits come from ``AI_ACCESS_TRAIT`` or
``SILICON_ACCESS_TRAIT``. I made a single exception to keep Admin ghost,
since now instead of being a var on the client, we moved it to using the
same trait but giving it to the client instead, but since we have to
keep parity with previous functionality (admins can spawn in and not
have this on, it only works while as a ghost), I kept previous checks as
well.
No more type checks, removes a silly var on the mob level and another on
the client.
Now while I was doing this, I found a lot of tgui's ``ui_act`` still
uses ``usr`` and the wrong args, so I fixed those wherever I saw them,
and used a mass replace for the args.
Other changes:
- machinery's ``ui_act`` from
https://github.com/tgstation/tgstation/pull/81250 had ``isAI`` replaced
with ``HAS_AI_ACCESS``, this has been reverted. Machine wands and admin
ghosts no longer get kicked off things not on cameras. This was my
fault, I overlooked this when adding Human AI.
- Human AI's wand gives AI control as long as it's in your hand, you can
swap to your offhand. I hope this doesn't end up going horribly,
otherwise I'll revert this part. It should let human AIs not have their
UI closed on them when swapping to eat food or use their door wand or
whatnot.
- Bots previously had special checks to scan reagents and be
unobservant, I replaced this with giving them the trait. I also fixed an
instance of unobservant not being used, so now statues don't affect the
basic creature, whatever that is.
## Why It's Good For The Game
This is an easier to understand way of handling silicon access and makes
these mobs more consistent between eachother.
Other than what I've mentioned above, this should have no impact on
gameplay itself.
## Changelog
🆑
fix: Statues don't count as eyes to creatures.
fix: Human AIs and Admin ghosts no longer get kicked off of machines
that aren't on cameranets.
/🆑
Hello everybuddy, your number three rated coder-failure here to clean up
some mess. This PR accomplishes some of the more major structural clean
up changes I wanted to do with /obj/ folder, but decided to wait on
until wallening gets merged, and so, time has come. Several things to
still be done, although I know these cleaning PR's are quite a load, so
will wait for this one to get done with first.
## Why It's Good For The Game
Saner spriters, better sprites, less annoyance. Also deleted a whole
load of redundancy this time around, a lot of sprites which existed
simultaniously in two places now got exit their quantum superposition.
## About The Pull Request
This PR adds the "Reaction Search" button to the cyborg shaker, and
allows you to select between the internal beaker, and whatever's in the
beverage holding apparatus.
## Why It's Good For The Game
Very helpful for cyborgs who want to make drinks but don't have access
to a chemical/booze/soda dispenser to open the reaction search menu.
## Changelog
🆑
add: the cyborg shaker in service borgs now have the ability to open the
reaction search menu
/🆑
Sorry for the branch/repo confusion, I'm going to make a separate github
account for tgstation itself since github wont let me have tgstation,
and a fork of tgstation, on my account lol.
https://github.com/user-attachments/assets/d7ef6425-de83-48c6-b829-fbf7ac379941
## About The Pull Request
Changed the text of the medical cyborg omnitool upgrade to specify it
increases surgery speed, and adds the advanced scanner.
## Why It's Good For The Game
I had a hard time figuring what this upgrade does. This should make it
clearer for everyone why it is good, given it has not much visual
feedback.
## Changelog
🆑
qol: Clarified what the Medical Cyborg Omnitool Upgrade does
/🆑
## About The Pull Request
I got annoyed at not being able to plung vents when there's a clog. This
PR corrects that. I copied all of the cyborg mop attributes to make
this. This is my first PR on this server, but I did test it on a local
server, and it indeed, plungs.
## Why It's Good For The Game
More content for janitorial cyborg. They really should have a plunger,
to be honest. It just makes sense to me.
## Changelog
🆑
add: Added a cyborg plunger for janitorial modules
/🆑
## About The Pull Request
As said on the issue this is fixing:
"Looking at it, this seems like it might be an order of operations
issue.
Normally, the borg apparatuses run the `melee_attack_chain(...)` as the
stored object on their `pre_attack(...)`...
However, this is *after* the item interaction type procs on the table,
and thus after it attempts to place the item."
"Borg items I believe are not abstract, which would return `NONE` and
allow it, rather they're just blocked from being placed, which returns
`ITEM_INTERACT_BLOCKING`.
As such, it cuts it short before the `pre_attack(...)` is even ran."
This instead makes it use the `get_proxy_attacker_for(...)` proc, which
cuts earlier into the `melee_attack_chain(...)`, to instead run it as
the stored item when available.
As a side-effect, we can remove the right-clicking to splash bit,
because it should now be possible to use the container's default combat
mode splash. That code was also just, non-functional now, because we cut
into the chain before it can run.
## Why It's Good For The Game
Fixes#85181.
## Changelog
🆑
fix: Fixes borgs not being able to place apparatus-held items on tables.
As a side-effect, they can now combat mode right click splash containers
as normal instead of having their own right-click floor splash.
/🆑
## About The Pull Request
it's - conjunction of "it" and "is"
its - possessive form of "it"
grammar is hard, and there were a lot of places where "it's" was used
where it shouldn't have been. i went and painstakingly searched the
entire repository for these instances, spending a few hours on it. i
completely ignored the changelog archive, and i may have missed some
outliers. most player-facing ones should be corrected, though
## Why It's Good For The Game
proper grammar is good
## Changelog
🆑
spellcheck: Numerous instances of "it's" have been properly replaced
with "its"
/🆑
## About The Pull Request
Adds unique sprites for each cyborg's upgrade modules


## Why It's Good For The Game
Current upgrade modules just use the ancient circuit board sprites which
are kinda boring and uninteresting on top of being shared by a lot of
other things.
These sprites look more like actual upgrade modules and allow you to
identify upgrade modules and their type without having to check the
item's name.
## Changelog
🆑
image: Added new unique sprites for cyborg upgrade modules
/🆑
This PR adds the National Ice Cream Day (yeah, it's one of those
'murrican holidays) to the game, bringing a few niche ice-cream-related
effects to the game
During the Ice Cream Day:
- Crematoriums replaced with cre**a**matoriums.
- All cyborgs that don't already come with the treat dispenser are given
(a slightly weaker) one stuck in ice cream mode.
- Robot customers order ice cream thrice as often.
- The ice cream vat starts with two times and a half more ingredients.
- Ice cream cones can hold up to four times as many scoops as normal.
## About The Pull Request
This PR does a few things but centrally it's all centered around
mechanically enforcing what items are and are-not considered contraband
in-game.
### What does something being contraband MEAN?
Contraband items are visually indistinguishable from non-contraband. If
an item is Contraband, it can only be detected in two ways:
* After being scanned by an N-Spect scanner, which is a standard item
security item, assuming it still has a charge to do so.
* Via a scanner gate, which can now be upgraded with an N-spect scanner
to allow for it to scan a person and all their contents for contraband.
### What items ARE contraband?
Contraband items are intended to be determined both logically and
through other relevant examine text. However, here's the short list of
items that are considered contraband, reserving the right to expand the
list.
<details>
<summary>In hindsight it's kind of a long list.</summary>
* Items that have "contraband" or "illegal" in the name or description.
* Items that allow for the player to obtain other illegal items, that
are NOT particularly stealthy.
* This means that a syndicate uplink is NOT considered contraband, as
they're typically hidden on your person as something else.
* Stealth items under the syndicate uplink, the revolutionary flash, and
some mapped in dangerous items that can come from both syndicate and
company-aligned resources are not considered dangerous.
* Items that are purchased from cargo after emagging or switching to
extended cargo range.
* Items purchased FROM syndicate uplinks, the wizard knowledge scroll,
or other antagonist shops.
* Cursed artifacts/tools magically produced by cultists or heretics.
* Items purchased from the blackmarket.
* Items purchased from the contraband section of vending machines.
* Some drugs and overtly dangerous or criminal byproducts.
</details>
### How does this interact with the round?
Well, primarily, this is an aid for in-game enforcement of space law.
Based on the length of the above list, we have a LONG, LONG list of
items in-game that are technically considered, in one way or another,
illegal to have on the station, and yet without either metaknowledge of
what those items are, or how they're used, security officers lack some
of the certainty of how to deal with these kinds of encounters.
Additionally to the knowledge aspect of this trait, security officers
may now receive a new civilian bounty to collect items that are
considered contraband, also giving them an incentive to look for and
confiscate contraband that's been found across the station while
upholding space law.
### Other minor changes that I rolled into this
Security has a bounty for 3 different rechargers, and considering access
limitations, most security players aren't going to make this exchange,
so I've lowered the required amount down to 1.
Adjusted the N-spect scanner's description to match it's new
functionality.
The Civilian bounty TGUI now has an additional 1 point of padding to
make it feel less cramped.
https://github.com/tgstation/tgstation/assets/41715314/c3cd4752-b03a-4e0b-959e-1252fcc2369d
**Updated as of 6/19/2024:**
Additionally, some storage items will block the presence of contraband
when going through a contraband aligned scanning gate. These items
include the infiltrator modsuit core, storage implant, void cloak, the
aptly named smuggler's satchel, and the chameleon kit's backpack.
**Updated as of 6/23/2024:**
N-spect scanner now has contextual screentips.
**Updated as of 6/29/2024:**
Scanner gates are now available in all lathes that have a feature
specific to how scanner gates function. So, includes cargo (contraband),
security (weapons), and medbay (diseases).
## Why It's Good For The Game
Originally, this started out as a way to be able to provide more
in-character and in-flavor bounties for security officers, because they
suck! Most security bounties as they exist right now do the worst
possible things from all respective bounties:
* They detract away from a job's actual responsibilities as opposed to
working with them.
* They're best completed while sitting next to your lathe and running
items back to the bounty pad.
* They exist with such esoteric rarity of high quantity of items that
it's miserable to fulfil.
As a result, I started work on this as a framework to allow security
officers to be further incentivized to collect contraband across the
station, either as a result of the gamemode or just through routine
patrols across the station.
Implementing it as a learning tool for security as well just happened to
work out as an additional bonus, and having a function in-game allowing
newer or less experienced players to know if an item is considered
dangerous or conspicuous also works as a particularly good way to
provide information where a player may not know what they're up against.
If nothing else, this might be interesting to try, and if not, I'll just
snip out the QOL changes from it and we'll see how it goes.
Going forward, I am a bit hesitant about the contraband scanner gate
mode, and as such, will try working with the admin team to determine if
that's a good feature to keep around for game health, while hoping to
give it a chance in the fullness of time.
## Changelog
🆑
add: Items spawned via traitor uplinks or are known illegal contraband
on the station can now be scanned and identified as such by the N-spect
scanners in security. These only applies to overt traitor or antagonist
items, and "stealth" items will not be seen as such.
add: Scanner gates can now be upgraded by using an N-spect scanner on it
to unlock "contraband scanning" mode.
add: Security officers can now be offered a bounty to turn in pieces of
contraband.
add: Some stealthy storage items like storage implants, smuggler's
satchels, void cloaks, the infiltrator modsuit, and the chameleon
backpack will block the presence of contraband on your person when
placed inside.
qol: N-spect scanner contextual screentips.
balance: Recharger security bounties ask for a quantity of 1, down from
3.
qol: security, cargo, and medbay have access to scanner gate boards.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
This refactors embedding elements to make them use singleton datums
(similarly to armor) instead being bespoke and creating a new element
every time armor values are supposed to be adjusted.
Default values have been removed from defines due to now being declared
in base class itself.
Additionally fixes vending machines and tackling gloves setting
generated shards (which they instantly embed into their victim) embed
properties to null after running the embedding code, despite said shards
having non-null embedding values by default, making them not be able to
embed into anyone else, also potentially breaking the pain/jostling code
if they somehow get updated.
## Why It's Good For The Game
Current embedding system is an unnecessarily complicated mess as bespoke
elements are hard to work with, and creating a new element every time
you change values is hacky at best. This change should make it easier to
read and work with.
## Changelog
🆑
fix: Fixed glass shards generated from falling vending machines or
tackling windows not being able to embed into anyone.
refactor: Refactored embedding code to use datums instead of bespoke
elements and ugly associated lists.
/🆑
## About The Pull Request
1. Objects now have an `get_proxy_for()` proc. This returns an atom that
will participate in the object melee attack chain on behalf of your
atom. Allows for general purpose polymorphism per object interaction
2. Cleaned up some multitool acts to accommodate proxy behaviour
3. You can pry tiles as an Engiborg with crowbar in hand & do other
similar behaviour with crowbar
5. Improves & Depends on #83880. We don't need a hidden omni toolbox &
can create the tools directly in the omnitool and pass them in the
attack chain as a proxy rather than calling the attack chain manually.
All tools are on the borg directly
- Fixes#84355
- Fixes#84359
- Fixes#84393
## Changelog
SyncIt21,zxaber
🆑
fix: omni crowbar tool interaction for replacing tiles has been fixed
fix: techfab screentip does not runtime when you hover over it with an
omnitool multitool
fix: medi borgs can do brain surgery again
code: improved multitool & general tool code for some machines
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Fixes#84340
It hooked pre-attack for tool usage, which is deprecated.
## Changelog
🆑 Melbert
fix: Fixed cyborg omnitools being unusable on some things
/🆑
#84305
That pr's branch was broken in some way so I had to make a new one to
change it
## About The Pull Request
The mediborg omnitool upgrade makes your health analyzer advanced now
## Why It's Good For The Game
It's weird that mediborgs can't get advanced health analyzers. The
omnitool upgrade makes your tools better (including the syringe which
isn't part of the omnitool) so it makes sense to put it in here.
## Changelog
🆑
balance: Mediborg surgical omnitool upgrade makes the health analyzer
advanced
/🆑
## About The Pull Request
As the title says. A standard power cell now only stores 10 KJ and
drains power similar to how it did before the refactor to all power
appliances.
The new standard megacell stock part stores 1 MJ (what cells store right
now). APCs and SMESs have had their power cells replaced with these
megacell stock parts instead. Megacells can only be used in APCs and
SMESs. It shouldn't be possible to use megacells in any typical
appliance.
This shouldn't change anything about how much 'use' you can get out of a
power cell in regular practice. Most should operate the same and you
should still get the same amount of shots out of a laser gun, and we can
look at expanding what can be switched over to megacells, e.g. if we
want mechs to require significantly more power than a typical appliance.
Thanks to Meyhazah for the megacell icon sprites.
## Why It's Good For The Game
Power cell consumption is way too high ever since the power appliance
refactor that converted most things to be in joules. It's a bit
ridiculous for most of our machinery to drain the station's power supply
this early on.
The reason it's like this is because regular appliances (laser guns,
borgs, lights) all have a cell type that is identical to the APC/SMES
cell type. And it means that if we want to provide an easy way to charge
these appliances without making it easy to charge APCs/SMESs through a
power bug exploit, we need to introduce a new cell type to differentiate
between what supplies power and regular appliances that use power. This
is primarily what the megacell stock part does.
This moves us back to what it was originally like before the power
refactor, where recharging power cells wouldn't drain an exorbitant
amount of energy. However, it maintains the goal of the original
refactor which was to prevent people from cheesing power generation to
produce an infinite amount of power, as the power that APCs and SMESs
operate at is drastically different from the power that a regular
appliance uses.
## Changelog
🆑 Watermelon, Mayhazah
balance: Drastically reduces the power consumption and max charge of
power cells
balance: Added a new stock part called the battery, used primarily in
the construction of APCs and SMESs.
add: Suiciding with a cell/battery will shock you and potentially dust
you/shock the people around you if the charge is great enough.
/🆑
---------
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
## 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
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
- 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
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
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
- Gets rid of the item addition copypaste code (Why nobody did this for
7 years is beyond me)
- Adds variable and proper checks for if a module is already installed
(Borgs will no longer eat up unlimited masses of lavaproof track
upgrades, among others) (Technically this never allows duplicates, at
least currently, as I don't recall any modules being capable to used
multiple times intentionally without also deleting themselves with
single_use)
- Unsingleletters most if not all of `robot_upgrades.dm`
## Why It's Good For The Game
Makes the borg module code much cleaner, makes it significantly easier
for new ones to be added. Fixes unintended behaviour with some modules
being able to stack, which until now was always solved by copypasting
code.
## Changelog
🆑
fix: Fixed some borg modules just being constantly eaten up by borgs
even when they shouldn't allow duplicates
refactor: Borg module code now has better handling for adding/removing
items, and to prevent duplicate module usage (Unless one wishes to
override the behaviour.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
The peacekeeper borg works with the Piercing Hypo Module. And it can be
emagged to receive a second hypo with a range of toxins. If you emag it
first and then insert the module, the hacked hypo will pierce as
expected. If you install first and then hack it, the hacked hypo does
not pierce. This PR fixes that bug.
## Why It's Good For The Game
The current way it works is inconsistent and I believe a bug.
## Changelog
🆑
fix: Fixed an inconsistency regarding the interactions between the
Piercing Hypo Borg upgrade and Hacked Borg Hypos.
/🆑
## About The Pull Request
Fixes engineering cyborg omnitool from choosing the wrong reference for
the screwdriver and crowbar. Also fixes cyborg omnitool not transferring
the wound_bonus, bare_wound_bonus, and armour_penetration.
## Why It's Good For The Game
So they behave naturally.
## Changelog
🆑
fix: Fixes engineering cyborg screwdriver not being pointy. Fixes
engineering cyborg crowbar from being pointy.
fix: Fixes cyborg omnitools not using the correct wound bonus and armour
penetration values.
/🆑
## About The Pull Request
Does a audit on all uses of parse_zone, replacing most instances of it
with a new living-level proc that refers to the bodypart in that zone if
it exists.
In other cases, removes parse_zone entirely because the bodypart is
already confirmed to exist, so we just use plaintext_zone.
Also cleans up some single letter vars.
## Why It's Good For The Game
In the doc of ```plaintext_zone```, its said it ```Should be used for
parsing non-instantiated bodyparts```. 99% of the code ignores the
possibility of a bodypart existing, and so uses parse_zone when
plaintext_zone could be accessed instead.
## Changelog
🆑
code: Most instances of parse_zone now refer to the limb's
plaintext_zone var
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Closes https://github.com/tgstation/tgstation/issues/82709
## Why It's Good For The Game
bug fix
## Changelog
🆑 grungussuss
fix: fixed being able to install multiple of the same upgrade to medical
cyborgs
/🆑
## About The Pull Request
Fixes several critical fixes for cyborg omnitools, surgical omnitools in
peculiar. Which is:
1. bonesetter omnitool can do compound fracture surgery now
2. omnitool butchering not properly disabled works (why didn't that
runtime. fucking dreammaker)
3. omnitool surgery_initiator not properly disabled
4. cautery in offhand not working
Fixes#82805Fixes#82868
Honestly I have now regretted for doing this kind of implementation at
the start. with how shoddily coded it is.
Planning to refactor cyborg omnitools, admin omnitool and ayys omnitool
(all have the same base of implementation) to be less snowflakey. but
that's for the future. and will take some time. This is a bandaid fix
for now
## Why It's Good For The Game
this is cbt
## Changelog
🆑
fix: fixed cyborg bonesetter not working for compound fractures
fix: butchering not disabling in cyborg omnitool
fix: fixes a bug where if you select the omnitool it would be stuck in
surgery initiator mode
fix: cautery in off hand for cyborg omnitools not working
/🆑
## About The Pull Request
[This PR is a bounty requested by Ophaq and worked on by
Singul0.](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=36013)
All of the following description in this PR is written by Ophaq as to
what this PR entails:
In this PR, the medical and engineering cyborg's tools are completely
reworked and condensed into an arm similar to the implant a carbon would
get. The tools are shown in a radial wheel around the character to quick
select what is needed instead of looking for it in a cluttered bag of
items. There are a few tools such as the blood filter for the medical
cyborg, as well as the welder, gas analyzer, and t-ray scanner for the
engineering cyborg excluded from the radial wheel. mostly due to their
inherent inmodularity


Each cyborg gets two arms in case the player wishes to have one on the
side to quick swap to, like having a scalpel in one arm and a hemostat
in the other on the hotbar for convenience or just preference. An
upgraded version of the tools has been added to each respective cyborg
upgrade node with somewhat faster action speed. The upgrade replaces the
arms and transforms them into the "advanced" version which is currently
the same sprite as the regular but just a faster and more efficient
version. The sprites for the surgical arm currently look good but may
need replacing later if someone who wishes to resprite them down the
line decides to do so.
## Why It's Good For The Game
As it currently stands, the medical cyborg's magical bag of gadgets
takes up a lot of your screen space and as a player who plays medical A
LOT, this was a MUCH NEEDED quality of life feature.
The amount of clutter in a medical cyborg's bag makes it in my opinion,
hard to see at the bottom of the screen and a nuisance to constantly
close compared to other models. My standard set up for playing medical
cyborg on the hotbar is 1=med analyzer, 2=usually a secondary surgery
tool or injector, and 3=another surgery tool. The flow of gameplay
during surgery ends up being surgery tool, hit 3 and drop it, surgery
tool, repeat or for efficiency using X to swap between the two surgery
tools I need on 2 and 3. This gets tedious especially after so many
hours of playing medical cyborg. I know some people may disagree, but I
think it would help a lot of help to speed up this flow of gameplay
during surgery and declutter.
By turning the medical cyborg's toolset into an omni-surgery tool which
functions like the surgery arm implant's radial wheel, this would
greatly declutter by like an entire row and make things easier on
medical cyborg players. Having a secondary in the bag helps with
efficiency for those players who like having an extra tool on their
hotbar and swapping back and forth would also improve efficiency and
make less swapping by hitting Z needed. Additionally with the upgraded
version as an optional upgrade in the mediborg tech, this also lets them
be on par with players who use advanced tools late game but not at the
level of alien tools where players would obviously out compete a
mediborg in terms of action speed.
Engineering models also benefit from this rework but at a slightly
different and lesser way whereas certain tools are excluded such as the
welder, due to the way they work on refill and the gas scanner and t-ray
scanner not counting as tool components are not included in the arms.
Syndicate versions of the engineering and medical cyborg also get these
arms, unupgraded.
## Changelog
🆑
add: Adds an omnitoolset for both engineering and medical cyborgs,
containing various basic tools
qol: Engineer and Medical module inventory space is now significantly
decluttered
/🆑
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
## About The Pull Request
This re writes most cell power usage cases with 2 defines
`STANDARD_CELL_CHARGE`(Joules) & `STANDARD_CELL_RATE`(Watts) so changing
cell capacity values in the future won't cause discrepancies.
## Changelog
🆑
code: most cell power usages are scaled with defined constants to help
adapt to future changes
/🆑
## About The Pull Request
Rewrites how alt click works.
Based heavily on #82625. What a cool concept, it flows nicely with
#82533.
Fixes#81242
(tm bugs fixed)
Fixes#82668
<details><summary>More info for devs</summary>
Handy regex used for alt click s&r:
`AltClick\((.*).*\)(\n\t.*\.\.\(\))?`
`click_alt($1)` (yes I am aware this only copies the first arg. there
are no other args!)
### Obj reskins
No reason for obj reskin to check on every single alt click for every
object. It applies to only a few items.
- Moved to obj/item
- Made into signal
- Added screentips
### Ventcrawling
Every single atmospherics machine checked for ventcrawling capability on
alt click despite only 3 objects needing that functionality. This has
been moved down to those individual items.
</details>
## Why It's Good For The Game
For players:
- Alt clicking should work more logically, not causing double actions
like eject disk and open item window
- Added context menus for reskinnable items
- Removed adjacency restriction on loot panel
For devs:
- Makes alt click interactions easier to work with, no more click chain
nonsense and redundant guard clauses.
- OOP hell reduced
- Pascal Case reduced
- Glorious snake case
## Changelog
🆑
add: The lootpanel now works at range.
add: Screentips for reskinnable items.
fix: Alt click interactions have been refactored, which may lead to
unintentional changes to gameplay. Report any issues, please.
/🆑
## About The Pull Request
Fixes the following input stalling exploits (maybe missed some):
- Changing GPS tag
- Setting teleporter destination
- Request Console Reply
- Various AI law board interactions
- Note, I used `is_holding` but technically this means these fail with
telekinesis. I can swap them to `can_perform_action(...)`, which allows
TK, but I noticed some places explicitly deny TK interactions with Ai
law boards. Not sure which is preferred.
- Borg Rename Board
- Plumbing Machines and Ducts
- APCs and SMES terminal placements
- Stargazers Telepathy
- Go Go Gadget Hat
## Changelog
🆑 Melbert
fix: You can't change the GPS tag of something unless you can actually
use the GPS
fix: You can't set the teleporter to a location unless you can actually
use the teleporter
fix: You can't reply to request console requests unless you can actually
use the console
fix: You can't update AI lawboards unless you're actually holding them
fix: You can't update a borg rename board unless you're actually holding
it
fix: You can't mess with plumbing machines unless you can actually use
them
fix: You can't recolor / relayer ducts unless you're actually holding
them
fix: You can't magically wire APCs and SMESs unless you're right by them
fix: You can't use Stargazer Telepathy on people who you can't see
fix: You can't configure the Inspector Hat unless you can actually use
it
/🆑