## About The Pull Request
Based on feedback from #94903, this PR decreases the cost of multitools
from the youtool vendor, as well as increases the quantity available
from the premium section from 2 to 4. The cost has been adjusted from
300 credits -> 150 credits each.
This change is being atomized out of the linked PR above, but is
otherwise relatively simple.
## Why It's Good For The Game
To quote the previous PR this was atomized out of:
> Multitools are considered to be standard job equipment for about 1/3
of the jobs on station, and the jobs that don't have multitools,
assistants included, typically will make obtaining one part of their
roundstart routine. It was looking into this that led me to learn that
multitools are currently sitting at 300 credits, which, while expensive,
just means that roundstart players are more tempted to just break into
or ask cargo/engineering for a multitool instead of ever buying one, and
for good reason. It's too good to pass up, especially when it's only one
door or plastic flap away for most players.
> So, to try and incentivize people to buy them from vendors over the
alternative, I've decreased the price to be within the range for regular
crew, but expensive enough for assistants so that they're encouraged to
look for/make a few credits, or wait a moment or two before they jump
into them.
## Changelog
🆑
balance: Multitools cost has been decreased from youtool vendors, and
their stock increased (150 credits, 4 stock).
/🆑
## About The Pull Request
This PR refactors ``effect_system``s to be a bit easier to use by
getting rid of ``set_up``, allowing ``attach()`` to be chained into
``start()`` and refactoring most direct system usages in our code to use
helper procs.
``set_up`` was unnecessary and only existed to allow ``New``'s behavior
to be fully overriden, which is not required if we split
sparks/lightning/steam into a new ``/datum/effect_system/basic`` subtype
which houses the effect spreading behavior. This allows us to roll all
logic from ``set_up`` into ``New`` and cut down on code complexity.
Chaining setup as ``system.attach(src).start()`` also helps a bit in
case no helper method exists
I've added ``do_chem_smoke`` and ``do_foam`` helpers, which respectively
allow chemical smoke or foam to be spawned easily without having to
manually create effect datums and reagent holders.
Also turns out we've had some nonfunctional effect systems which either
never set themselves up, or never started, so I fixed those while I was
at it (mostly by moving them to aforementioned helper procs)
## Why It's Good For The Game
Cleaner code, makes it significantly easier for users to work with. Also
most of our effect system usage was copypasta which was passing booleans
as numbers, while perfectly fine helper procs existed in our code.
## Changelog
🆑
refactor: Refactored sparks, foam, smoke, and other miscellaneous effect
systems.
refactor: Vapes now have consistent rigging with cigs using the new
system.
fix: Fixed some effects never working.
/🆑
## About The Pull Request
1. Adds doppler radar towers to Lavaland and the Icemoon
Weather radios now need a doppler radar on the target z-level to get an
accurate reading. Without a radar tower, the expected timing of incoming
storms will be off by a random factor.
Lavaland and the Icemoon both have a few towers mapped into them.
The towers themselves can be constructed with plasteel if they some how
get destroyed. They also have an in built GPS.
Each tower requires a cable connection to function. They need a pretty
small amount of power to function.
2. Adds anomalous radar towers
Attaching a weather anomaly core to a radar tower results in an
anomalous radar tower.
<img width="260" height="409" alt="image"
src="https://github.com/user-attachments/assets/3430b0aa-0bbc-44df-ae75-67c2c3cca5a6"
/>
This allows you to cancel ongoing storms **or summon storms yourself**.
Each cancellation and summon uses a percentage of the core's charge.
After the charge runs dry, the core is destroyed, and the tower goes
back to being normal.
Yes, you can construct a radar tower on the station to summon storms on
the station, *including* rad storms.
All storms summoned abide by radstorm rules, meaning maint is safe.
Summoning onto the station uses significantly more charge.
3. Limits weather anomaly cores to 5
Because they are charge based and spamming weather events all round
would be annoying, slightly lowers the max core count.
## Why It's Good For The Game
Weather manipulation seems super appropriate for weather anomaly cores.
Initially it was just going to be the machine, but then I thought "what
if I want the frame of the machine to be available roundstart on
Lavaland to encourage cooperation with miners" and then I thought "what
if it tied into the weather radios, which opens up rare sabotage
methods"
So that's how we got here. The towers exist to facilitate the anomaly
use while also allowing enterprising traitors to sabotage, potentially
leaving their target unaware in a storm.
## Changelog
🆑 Melbert
add: Adds doppler radar towers to Lavaland and the Icemoon. These towers
ensure weather radios have accurate readings.
add: Adding a weather anomaly core to a radar tower upgrades it, giving
you control of weather - allowing you to cancel storms or even spawn a
weather event of your choice. However, the core will expire after use,
requiring replacement.
add: You can construct radar towers with plasteel. Even on the station.
Yes, you can summon weather onto the station.
balance: Limits weather anomaly cores to 5.
/🆑
## About The Pull Request
The Slime Management Console will include a random stored_monkeys in a
to_chat if there aren't enough. This removes it so that it reads better.
## Why It's Good For The Game
Reads like proper english in a player facing console.
## Changelog
🆑
spellcheck: The slime management console no longer reads a variable name
out incorrectly.
/🆑
## About The Pull Request
Instead of being snowflake interactions on objects themselves, rigging
things with plasma or welding fuel is now handled on reagents' side via
``on_spark_act``, allowing each reagent to decide how they want to
handle exposure to electric currents or violent heating.
- Obviously plasma and welding fuel cause explosions, but former gains
additional power from electric current being passed through it (same
math as powercells), while latter doesn't explode unless in an enclosed
space, or a high enough current/temperature has been reached, and merely
creates a hotspot instead.
- Napalm and phlogiston create hotspots, or (try to) damage the holder
if they're enclosed
- Sorium, liquid dark matter, TATP, nitroglycerin and flash/smoke/sonic
powders trigger their usual detonation effects, albeit slightly weaker.
- Teslium creates a ZAP, with additional power for a BIG ZAP if it has
been triggered by electric current.
- RDX becomes spicier with temperature and current, similarly to how it
becomes more dangerous when mixed with LE or teslium.
- Gunpowder produces a delayed explosion effect (unless its hot or the
current is high enough, in which case its instant) and causes sparks as
the message claims it does (normal gunpowder explosions also do that)
Plasma and gunpowder rigged items can now be controlled using
stabilizing agent - in its presence, plasma will not explode unless the
used charge is higher than 0.2% of a standard cell's per unit of agent,
while gunpowder will instead spend 0.1 + (charge / 10% of a standard
cell's charge) units of agent to delay its detonation.
Smoke (powder) now produces a visible message and slightly damages lungs
of whoever it reacted inside of, if the container was a mob.
The numbers on plasma/welding fuel rigs should be ***roughly*** the
same. Also lighters can now be rigged in a fashion similar to welding
tools.
Also it turns out we broke light rigging at some point, so now it works
again.
## Why It's Good For The Game
This makes the system much more flexible and allows players to make more
creative IEDs, expanding upon the sandbox aspect of the game. Also I
have an upcoming project bringing IEDs (kind of, in a new form) back,
which is why I wrote this in the first place (but decided to atomize the
PRs).
As for smoke damage, it feels weird to not have any tells when someone
suddenly starts hacking up volumetric amounts of smoke, it makes sense
that they'd struggle a bit after coughing a few dozen cubic meters of
thick vape clouds.
## Changelog
🆑
add: Multiple new reagents such as napalm, sorium, TATP,
smoke/sonic/flash powders and other explosives can now be used to rig
cells or tools.
add: Plasma and gunpowder rigged items can now have controlled current
requirement/delay by adding some stabilizing agent alongside the main
reagent.
balance: Creating chemical smoke inside of a mob now makes them
violently cough it up, damaging their lungs a bit.
fix: Chemically-rigged lightbulbs now once again explode.
refactor: Refactored how power cells, welding tools, lightbulbs,
cigarettes (and now, lighters) handle being rigged with chemicals.
/🆑
## About The Pull Request
1. Adds stasis bodybags, unlocked with cryogenics tech
These bodybags are portable forms of stasis. However, they wear down
with use, only being able to keep someone in stasis for about 2, 3
minutes before falling apart.
Bodyparts and organs put in the bodybag are also frozen, allowing you to
maintain parts of gibbed people.
You can med scan through the walls of the stasis bag as well. Also you
can med scan through holographics bodybags.
2. Adds triage cards to the medical vendor
Triage cards are small pieces of paper you can write on and stick to
people. They're color coded according to severity, and are intended to
be used in mass casualty events for prioritizing patients.
3. You can pin paper to bodybags
You can pin a sheet of paper to bodybags that people can read, be it
autopsy or whatever.
4. Updates paper interaction code slightly
We have new procs for allowing interactions rather that snowflakes
5. Other forms of stasis apply tumor suppression
Oversight?
## Why It's Good For The Game
I made these a while back to just give medical doctors a few more tools
to play around with beyond the meta tools. Just to get more immersed
into the larp.
Otherwise, stasis bodybags gives Paramedics a tangible upgrade(if you
can call it that), offering a safer way to retrieve patients
## Changelog
🆑 Melbert
add: Adds stasis bodybags, unlocked with cryo tech. They put its
occupants (organ or mobs) in stasis, but wear down over time.
add: Adds triage cards to the medical vendor, a flavor item docs can use
during mass casualty events.
qol: You can pin papers to closed bodybags. Keep organized with your
autopsies.
qol: You can interact with papers in folders and on clipboards
qol: All forms of stasis stop brain tumors
/🆑
## About The Pull Request
Adds vitals monitors to medbay
<img width="368" height="292" alt="image"
src="https://github.com/user-attachments/assets/af32ef4b-5d20-4d9d-bb0d-bec554dd4dbc"
/>
These are wall mounted monitors that display a patient's state visually:
- The doll on the left shows bodypart damage + missing bodyparts
- The droplet next to the head shows blood level, from a bright red to a
grey
- The top bar shows heart rate (an approximation - stops when dead,
speeds up in hard crit), as well as overall health
- The second to the top shows respiration (stops when not breathing)
- Second from the bottom bar shows oxyloss level
- Bottom bar shows toxloss level
You can **examine** a vitals display to get a condensed health analyzer
output to your chat. (This lets the AI see health scans as well)
They beep as patient conditions betters or worsens, though I didn't add
any sound FX to it (yet), it's just a runechat message.
They can link to most machines that accept an occupant - such as cryo
cells and stasis beds - as well as operating tables.
They are printable in two forms - basic and advanced, the latter
requiring tech and does advanced scans on examine, rather than basic
scans.
The displays are mapped in every surgical theatre, as well as over most
stasis beds and by a few cryo cells.
## Why It's Good For The Game
I made these to cut down on juggling the health analyzer when trying to
determine how a patient is faring. (And also to add to medical larp.)
Currently while monitoring a patient's state you have to spam click them
with your scanner and fill up your chat.
This is cumbersome and distracts you from the rest of chat.
The vitals display provides a visual feedback for how a patient is
doing, no spam clicking needed unless you need specific details like...
organ health.
Some other benefits:
- AI can now monitor patient health without a shell.
- Other doctors don't need to crowd around a patient, they can step back
to watch the screen instead.
- Visitors don't need to rush in and print an analyzer to see how a
patient is doing either.
## Changelog
🆑 Melbert
add: Adds vitals monitors, mapped into the medbay treatment center,
cryogenics, and every surgical theatre. They act as wall mounted health
scanners, providing visual feedback for a patient's health.
/🆑
## About The Pull Request
Floppy disks received a sprite upgrade, as well as unique wraps:
<img width="364" height="150" alt="image"
src="https://github.com/user-attachments/assets/0ac433e3-7432-4c06-bec2-aeae00b6852f"
/>
<img width="786" height="527" alt="image"
src="https://github.com/user-attachments/assets/0f36bd0d-0362-4431-8131-49060a2fe348"
/>
You can now stack floppy disks! They also scatter around when thrown.
The video also showcases new styling options with a selection of
stickers! You can also write something on the disk instead of selecting
an icon:
https://github.com/user-attachments/assets/ff0a8542-9d79-4108-ae46-672ca5d620a2
MOST disks now inherit the `/item/disk` type to properly stack and do...
stuff. An updatepaths script included.
## Why It's Good For The Game
Old school is cool. Stacking disks makes them feel more authentic, while
styling allows for more crearivity!
## Changelog
🆑
add: New unique wraps for floppy disks
qol: Floppy disks can now be stacked
image: New sprites and stickers for floppy disks
map: Added and ran an updatepaths script
refactor: Most disks are now under the base disk item type
/🆑
---------
Co-authored-by: The-Tyrant <tyrantofgaming@gmail.com>
## About The Pull Request
The overall behaviour of everything should stay the same but the memory
& speed of these components has been slightly improved and when you
scale that across large plumbing factories you get a substantial
improvement. Here's a list of the most noticeable changes along with
many others that aren't worth mentioning
- Removed vars `use_overlays`, `turn_connects`,
`recipient_reagents_holder`
- `active` var is now replaced with a proc which simply returns is the
machine wrenched or not
- `turn_connects` has been removed because all machines have their pipes
rotate when the machine is rotated. This also removed all the static
icon states ending with `-s` from the `dmi` file thus reducing that file
size as well
- `extend_pipe_to_edge` var is directly integrated into `cut_overlays()`
because it's use cases were limited such for showers & sinks
- Simplified `Initialize()` a lot. Removed params `start`,
`turn_connects`, `custom_receiver`, `extend_pipe_to_edge`. We now only
pass `bolt_layer` making that proc faster & less convoluted
- Replaced `set_recipient_reagents_holder()` proc with
`recipient_reagents_holder()` which returns the reagent holder for
holding reagents instead of storing it in the component. This removes
the need to hook a qdel signal on the holder & we don't need to keep
track of it
- Merged a ton of procs to reduce overhead & reduce file size
- Plumbing ducts creating the network at mapload is faster without using
recursion and the timer subsystem
- Deconstructing plumbing ducts is faster in reconstructing the network
without using recursion and the timer subsystem
This makes managing plumbing code less convoluted & overall better for
the foreseeable future. See the lines of code removed vs added and still
preserves behaviour
## Changelog
🆑
qol: added examines & screentips for ducts & stack of ducts
qol: you can wrench a stack of ducts on the ground to create a pipe
refactor: plumbing code has been improved overall. Report bugs on github
sprite: removed unused static(does not rotate with machine) icon states
for plumbing connections
/🆑
---------
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
## About The Pull Request
This PR makes it so you can print expiri science scanner out any
departmental protolathe.
(its the tool you do research with)
## Why It's Good For The Game
Currently the whole weight doing expiriments is on science, where we
have tasks like make pure halopiridol or scan blood and such normally
you have to go science to ask for one of these devices, we also made a
standard where heads can research for their department this allows
departments work impedentely when it comes to expiriments.
A engineer would likely do stock parts upgrading etc
where medbay would do corpses autospies/pure chem scanning etc
Eitherway i think its intresting for every department being able to
control their own research progress instead of being forced to break
into science for one of those devices, departments control their own
expirimental progress where science itself control the research flow
along with the departmental heads.
## Changelog
🆑 Ezel
balance: All protolathes can now print out a expiri science scanner
/🆑
## About The Pull Request
Inspired by #94233. `grind_results`(list) & `juice_typepath`(typepath)
are only used when grinding & juicing after which the atom is deleted.
This means if that object is not processed these vars occupy memory &
don't do anything.
Now these values are only generated on demand by calling their
respective procs. Considering how these vars are on the obj level the
memory savings are quite significant
## Changelog
🆑
refactor: grinding & juicing have been refactored to occupy low memory.
Report bugs on github
code: improved grinding & juicing code
/🆑
## About The Pull Request
<img width="579" height="67" alt="image"
src="https://github.com/user-attachments/assets/d7a4427e-2a6e-44d3-94ba-c90a2d474984"
/>
Simple rotation components number in the 8-9k range per round, and each
contains a needless callback datum as well.
These do not need to hold any state and can be bespoke elements, and the
proc to do things post_rotation can just be a normal atom proc.
<details><summary>Still works as you'd expect, including items that have
flag requirements like the wrench</summary>


</details>
## Why It's Good For The Game
Makes a heavily used element much more lightweight, saves a few mb of
memory.
## Changelog
🆑
refactor: simple rotation component has been refactored into an element
Please report any bugs to github.
/🆑
## About The Pull Request
This was LONG overdue and its finally time. Refactors 2 components to
regular datums
- `/datum/component/material_container` -> `/datum/material_container`
- `/datum/component/remote_materials` -> `/datum/remote_materials`
Reduced memory overhead and stops misuse of component i.e. storing it in
a variable
## Changelog
🆑
refactor: refactored material container code to reduce memory overhead.
Report bugs on github
/🆑
## About The Pull Request
A weather anomaly can spawn on the station, causing a sandstorm,
snowstorm, or rainstorm to affect the room (and nearby rooms). These
weathers range from "harmless" to "mildly damaging".
They last for around five minutes.
The weather doesn't start immediately, giving people time to neutralize
it before it causes damage.
Neutralizing the anomaly stops the weather.
If they detonate, it just throw objects away from itself.
<img width="407" height="225" alt="image"
src="https://github.com/user-attachments/assets/2de1b797-2b17-442c-9023-11085b4849cf"
/>
<img width="991" height="674" alt="image"
src="https://github.com/user-attachments/assets/afe5a21d-9cf8-4e9d-95ec-adef6fd12a93"
/>
A rarer version of the anomaly can also occur, which brings a lightning
storm, which may damage the station itself.
Also, reactive weather armor. When you are hit, it summons a lightning
strike below nearby assailants.
## Why It's Good For The Game
With the added rain mechanics I wanted to use them, but it's kinda hard
to shoe them into the station because, "why is it raining on a space
station that makes no sense"
However, anomalies are weird, so this fits perfectly
## Changelog
🆑 Melbert
add: Weather anomalies, in four variants: Rain, snow, sand, and the rare
lightning storm.
add: Reactive Weather Armor
/🆑
## About The Pull Request
Modsuit storage modules are now called compact storage modules and the
expanded ones are just regular storage modules. (Regular because they
have the same capacity as a backpack afaik) They're researched in the
modular suit equipment node instead of all the way on the advanced
engineering node, and the small storages only take up 1 capacity.
## Why It's Good For The Game
Picking your storage module is now more of a choice instead of "I'm not
going to get a modsuit until advanced engineering suits are researched".
The advanced engineering node is still good though because it has ion
thrusters.
## Changelog
🆑
balance: Expanded storage modules are now unlocked much earlier
balance: Regular storage modules require 1 complexity instead of 3
spellcheck: Regular storage modules are now called compact storage
modules and the expanded ones are just called storage modules.
/🆑
---------
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request
Huzzah! It's been a good while since I last added more fishing features
(instead I focused on small fixes now and then), but here I'm at it once
more.
This PR adds two designs to the Marine Utility techweb node (which
previously only had the bio-electric generator kit): The fish gene-gun
an as well as the bluespace fishing reel.
The fish gene-gun is a pretty easy concept. It's a device that takes
empty syringes. When used on a fish with an empty syringe loaded inside
it, It'll prompt the user to choose which trait to extract. Once the
trait is extracted, the syringe is replaced with a specialized 'fish
trait injector' containing said trait. You can then hit another fish
with the fish gene-gun again to inject the trait, or use it to remove
the injector, which can then be used on its own, or loaded into the
gene-gun later (the results are the same anyway). There are two caveats
though: Using the fish-gene gun on the same fish more than once
(extracting or injector) will kill it, and it also cannot be used on
dead fish. The fish can still be revived though.
The other thing is the bluespace fishing reel. It greatly increases the
cast range, and it also goes through walls and other solid objects and
is not disrupted by them. If used on objects, reeling the item in will
move it through wall and solid objects as well. Other than that. It's a
pretty standard fishing reel. However, it has one flaw, and that is it
cannot go through reinforced walls (as well as indestructible ones), so
no stealing from the armory etc.
## Why It's Good For The Game
I've been having some honest to god skill issues with aquariums at times
(they were also half-broken in the past but things have gone for the
better...). Some of the fish traits are good, some are bad, others are
utterly terrible (*looking at the anxious zip zap*) and kinda withhold
some of the potential stuff that can be done, which is what prompted me
to make this PR.
Also, bluespace fishing reel because ~~JoJo Vento Aureo reference~~ it's
such a neat concept.
## Changelog
🆑
add: Two items have been added to the The Marine Utility tech node: a
fish-gene gun to add and remove traits to/from fish, and a bluespace
fishing reel.
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
As the title says, this excludes Kilo & Pubby from failing CI due to the
design being added while the tech node isn't, now it's only ran if the
map has it. This was an oversight of my original PR
https://github.com/tgstation/tgstation/pull/94160
## Changelog
Nothing player-facing.
## About The Pull Request
Skyrat gun removal pr somehow made a typo from FLARE to FLAE
## Why It's Good For The Game
Flae
## Proof Of Testing
no
<details>
<summary>Screenshots/Videos</summary>
</details>
## Changelog
🆑
fix: Fixed a typo in the .38 flare ammo, no longer will it be Flae ammo.
/🆑
## About The Pull Request
1. Ammo will no longer show as a loot option until a weapon that uses
said ammo has been claimed. Some ammo, particularly shotgun ammo has
unique status bypassing this, since you could reasonably acquire a
shotgun from the armory, a bartender, or cargo. There is also a 10%
chance that some ammo will show up anyways, to keep people on their
toes.
2. If you claim another weapon of an already claimed ammo type, the ammo
in the pool will be refreshed, meaning obtainable once again.
3. Unclaimed items have a 40% chance of being re-added to the loot pool.
This is on top of the 80% chance for an item to not be removed from the
pool when selecting loot.
4. When hard bounties empty out their loot pool, they will instead draw
from the medium loot pool. Likewise medium bounties will draw from the
easy pool when they run out.
5. Modified the antag info panel text slightly.
6. Made more appropriate use of `SStraitor.uplink_items`, and checks for
abstract items more thoroughly.
7. Some weapons no longer come in gun cases for Spies
## Why It's Good For The Game
1. Initially the thought was Spies would just have dud bounties on
occasion. They could take the time to lie low or work on their plans
rather than prowl for loot. Alternatively, an aggressive spy would go
after them *just in case* they got the correct gun, or a passive spy
would go after them for the ability to later bribe someone carrying the
correct gun.
However, in practice it seems people largely just don't like having dud
bounties, as it hurts the pacing. Someone who is on a roll doesn't want
to sit there and do nothing.
Ghommie tried to implement this earlier but I disagreed with the
implementation, so here we are.
2. It would be pretty unappealing to go after a gun after realizing all
the gun's ammo has been looted already.
3. I noticed in testing pools would drain themselves pretty fast. This
serves as a bit of a stop-gap, and prevents items that rolled on
particularly difficult targets from being lost forever. Now you can roll
the dice and hope that it shows up again.
4. Might as well reward people with non-junk items if they manage to
drain a tier's loot pool, especially since the top tier pool is pretty
small.
5. People were oft confused about the wording of the text, thinking
they'd get banned.
6. No reason to use the indexed list.
7. Having a gun case thrust into your hands is not very inconspicuous
## Changelog
🆑 Melbert
balance: Ammo will no longer show up in the Spy loot pool until a weapon
that uses said ammo has been claimed. Some ammo for weapons easily
obtainable on station (shotgun shot) are not limited by this
restriction. Also, there's a rare chance ammo will show up anyways just
to keep people on their toes.
balance: Claiming a weapon will refresh ammo in the loot pool that has
already been claimed or cycled out.
balance: Bounty rewards that no Spy claimed have a chance to re-enter
the loot pool after a bounty refresh, rather than being lost for the
remainder of the round.
balance: When higher tier Spy bounties empty their loot pools, they will
attempt to draw from lower tier pools before defaulting to telecrystals.
balance: Spies no longer are rewarded with gun cases for bounties;
rather just the gun itself
spellcheck: Modified the Spy antag info text
/🆑
## About The Pull Request
This PR makes all R&D console boards that are either printed or sourced
from tech storage start out locked. They can be unlocked by swiping them
with an ID that has research access.
R&D consoles can also be unlocked with an emag, but doing so will break
their comms circuit as well, making all researched nodes broadcast over
public comms. You can still emag the console itself after it's been
constructed without breaking it in any way, while also silencing
announcements instead. (that's definitely a noob trap, but it's out of
scope for this PR)
The reason why the tech storage board is locked as well is because the
goal of this PR is to stop engineers from making R&D consoles, and
engineers have access to tech storage. Leaving the board unlocked and
moving it to secure tech storage would make engineers break in there
every shift.
The changelog basically has a FAQ for "Okay, so what do I do instead?",
because I know people will be confused about what route they're intended
to take when science closes their desk shutters for the umpteenth time
this week.
## Why It's Good For The Game
Engineering has a habit of making an R&D console every round to bypass
having to ask science or a head of staff to research things. Locking the
consoles at least makes engineers consider asking science to do
science's job.
Note that this doesn't solve the issue entirely, it just removes the
easiest and most convenient way of bypassing science. Engineers can
still break into R&D extremely easily using their wire knowledge, and do
so regularly.
More importantly though, this might shine some light on the fact that
heads of department like the CE have remote access to the research
network via their PDAs. This means engineers can ask the CE to research
things for them.
Asking people with access to the research network to research things is
a lot better for roleplay and immersion than having engineering
construct R&D consoles every shift.
## Changelog
🆑
balance: R&D console boards sourced from printing or tech storage are
now locked by default. It's recommended to ask your respective head of
department or the science department to complete research for you. Heads
of department can remotely access the research network using their PDAs.
/🆑
## About The Pull Request
First, boring stuff.
The "Modsuit equipment" techweb node has been split into two nodes, with
the additional node containing the more civilian MODules (And the new
plating), and costing 20 points.
A new "Perfumer" MODule has been added(not printable anywhere, but in
the new suit by default) that just cleans you.
The MODsuit being added has been added to the LawDrobe's premium
section, for 300 credits.
Now, the real addition.
This adds a MODsuit that is a modular suit, that is to say, a suit, tie,
shoes and glasses. The glasses aren't actually real flash-proof
sunglasses by default, but the welding protection module can be added.
The suit is obviously not space-proof, and offers no protection to
anything but biohazards. The suit has 10 complexity max, due to the fact
that most modules don't have a point on it. This is subject to change.
The pre-made one also has the stamp and paper dispenser MODules
pre-installed, which are both now activateable via the neck slot.
The suit control unit is the tie.
## Why It's Good For The Game
Have you ever been called to court, but you didn't have a nice suit, so
the judge holds you in contempt and sends you to jail? Well, never
again. Gone are the days that you cause two innocent boys to almost be
executed for a crime they didn't commit simply because you don't have a
nice suit. With the Moonraker Conglomerate's newest export in your
hands, you'll never be the less formal one ever again. No matter the
occasion, you're never more than a few moments away from
self-representing.
Video of the fit:
https://github.com/user-attachments/assets/44d08ca8-9ae1-4887-81e6-cec11792132e
It's the same look as a suit jacket, white tie, sunglasses and laceup
shoes. You must get a matching jumpsuit of your own.
I think it's neat, and it's a damn shame that there's not a single
MODsuit that isn't just head gloves suit shoes. All these MODules which
are activateable from head, mask or glasses, and no suits that allow it.
Missed opportunity, I'd say.
Also, lawyer buff. Need I say more?
## Changelog
🆑
add: Added a modular SUIT, a deployable, one-piece three-piece suit.
Purchasable from the LawDrobe.
balance: The MODsuit equipment techweb node has been split in two, with
an offshoot for civilian MODules.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Extends the part of the crafting unit test that ensures consistency
between the total mats of the components of a recipe (or rather, the
result of said recipe) and a generic instance of the same type as its
result, previously only implemented on food recipes.
## Why It's Good For The Game
This ensures a degree of consistency with the material composition of
various objects in the game. I couldn't do it in the original PR as that
one was too big already and it took months to get it merged, and have
the relative bugs fixed.
Currently a WIP as I slowly deal with the unit test reports.
## Changelog
🆑
refactor: Follow-up to the crafting/material refactor from months ago.
All objects crafted with stacks now inherit their mat composition (not
necessarily the effects and color) by default, while previously only a
few things like chair, sinks and toilets did. Report any object looking
or behaving weirdly as a result.
fix: The material composition of ammo boxes is no longer a 1/10 of what
it's supposed to be. It was a shitty hack to make it harder to recycle
empty ammo boxes. Instead, they lose materials as they're emptied now.
/🆑
## About The Pull Request
This PR removes Defibrillators from being printable in the techlathe.
Which means the Compact belt becomes CMO exclusive item.
And adds a objective for spies to steal compact belt because it feeds it
into the black market, which other antags can maybe buy and emagg it to
turn it into a reasonable weapon
This pr also makes it so the baseline of roundstarting defibs is 4
## Why It's Good For The Game
Years ago we made defibrillators never printable, and there was no way
to get them unless it was trough cargo, and later we added it to the
techlathe which immediatly voided the cargo crate.
Medical starts with 4 defibrillators medbay usually uses 2, and then the
other 2 go to medical borgs (and theres not really ever a real reason to
print out another since you got plenty).
We also have spefific upgrade modules for medical cyborgs which is
voided by just printing a defib and inserting it into the medical borgs.
TL;DR order it from cargo either 1 using your departmental budget, 2
using your free ordering console, or 3 just from cargo
## Changelog
🆑 ezel
add: Compact Defibrillator is now a Spy objective
balance: Compact Defib is CMO exclusive again
balance: you can no longer print Defibrillators in techlathe (purchase
them via cargo if needed)
sprite: CMO compact defib now looks unique from other ones
map: catwalk defibs trimmed to 4 instead of 6
map: metastation defib added from 3 to 4
map: wawastation defib added from 3 to 4
map: tramstation defib added from 3 to 4
map: nebulastation defibs trimmed from 6 to 4
/🆑
## 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
It's the same as every other combat mech, but the category was just
completely empty for some reason. Probably an oversight?
Atomized from #94190
## Why It's Good For The Game
bugfix
## Changelog
🆑
fix: Exosuit fabricator UI now shows the Savannah-Ivanov's supported
equipment
/🆑
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request
I'm working on a pubby update for the map depot for admins to run, and
thought I should throw this here. Removes a varedit from Pubby and makes
the monastery telescreen replaceable by making it researchable and
printable through the service techfab.
Also re-adds the pubby map wall item, using the new map item outlines.
## Why It's Good For The Game
Repairability for a map that seems to be ran frequently by admins
(judging by it getting actual issue reports), this has no effect
otherwise.
## About The Pull Request
This removes printable soup pots
## Why It's Good For The Game
<img width="915" height="378" alt="image"
src="https://github.com/user-attachments/assets/827f193b-56bb-4046-8ffe-eb0c9dfa0626"
/>
Just get it from the vendor or order restocking units.
## Changelog
🆑 ezel
balance: You can no longer print soup pots
/🆑
## About The Pull Request
It's just a partial cleanup of
anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md)
code from /tg/'s ancient history. I compiled & tested with my helpful
assistant and damage is still working.
<img width="1920" height="1040" alt="image"
src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3"
/>
I'll upload the .cs script I used to do it shortly.
## Why It's Good For The Game
Just minor code cleanup.
Script used is located at https://metek.tech/camelTo-Snake.7z
EDIT 11/23/25: Updated the script to use multithreading and sequential
scan so it works a hell of a lot faster
```
/*
//
Copyright 2025 Joshua 'Joan Metekillot' Kidder
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
//
*/
using System.Text.RegularExpressions;
class Program
{
static async Task Main(string[] args)
{
var readFile = new FileStreamOptions
{
Access = FileAccess.Read,
Share = FileShare.ReadWrite,
Options = FileOptions.Asynchronous | FileOptions.SequentialScan
};
FileStreamOptions writeFile = new FileStreamOptions
{
Share = FileShare.ReadWrite,
Access = FileAccess.ReadWrite,
Mode = FileMode.Truncate,
Options = FileOptions.Asynchronous
};
RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled;
Dictionary<string, int> changedProcs = new();
string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*";
Regex camelCaseProcRegex = new(regexPattern, regexOptions);
string snakeify(Match matchingRegex)
{
var vals =
matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray();
var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower();
string logString = $"{vals[0]} => {newVal}";
if (changedProcs.TryGetValue(logString, out int value))
{
changedProcs[logString] = value + 1;
}
else
{
changedProcs.Add(logString, 1);
}
return newVal;
}
var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>();
// uses default ParallelOptions
// https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main
await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) =>
{
var reader = new StreamReader(filePath, readFile);
string oldContent = await reader.ReadToEndAsync();
string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify));
if (oldContent != newContent)
{
var writer = new StreamWriter(filePath, writeFile);
await writer.WriteAsync(newContent);
await writer.DisposeAsync();
}
reader.Dispose();
});
var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList();
foreach (var pair in logToList)
{
Console.WriteLine($"{pair.Key}: {pair.Value} locations");
}
}
}
```
## Changelog
🆑 Bisar
code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use
snake_case, in-line with the STYLE guide. Underscores rule!
/🆑
## About The Pull Request
- Gives Janiborgs the Experimental Broom round-start.
- Comments out the wirebrush upgrade. (It's already there round-start
already?)
- Gives Janiborgs Cable, RLD, RTD, and Decal Painter upgrades.
## Why It's Good For The Game
Allows janiborgs to fix lights and maint-mice wires later in the round.
Upgrades them from their shitty-tiles to modern-tiles so they can
actually make the kitchen look classy after someone blows it up. Gives
them the ability to touch up areas with decals as well, because most
engineers are just gonna slap down the pipes/wires and call it a day.
## Proof Of Testing
<img width="461" height="398" alt="image"
src="https://github.com/user-attachments/assets/75ffe907-f4ec-4d81-aefa-f43d458f17a3"
/>
<img width="599" height="160" alt="image"
src="https://github.com/user-attachments/assets/d8307015-6980-4138-8556-bc8a72f1264c"
/>
<img width="563" height="203" alt="image"
src="https://github.com/user-attachments/assets/d5c0b210-3826-4f28-8555-1c19a57a9ee1"
/>
</details>
## Changelog
🆑
add: RLD, RTD, Decal Painter, and Cable upgrades for janiborgs.
del: wirebrush upgrade, because it's already roundstart.
qol: added brooms to janiborgs roundstart
/🆑
## About The Pull Request
The console called attack() on the potion, which, after the recent
refactor, no longer works. This switches it to interact_with_atom.
## Why It's Good For The Game
fixes#94120
## About The Pull Request
If you research a node you can still buy it from NT Frontier, and when
you do it refunds the research points you spent. It's like how
experi-scanners work.
Also cytology gives you an 80 point discount instead of a 120 point
discount. This doesn't change anything because it only costs 80 points
and NT Frontier boosts can't make costs go negative.
## Why It's Good For The Game
Right now it's most efficient to delay research until ordnance gets
finished and then grab all the free stuff, and any head of staff
researching stuff for their own deparment or robo that wants to make
cool mechs can fuck things up. That's not great, because it's
unrealistic to expect everyone to be coordinated and delaying research
never gets tried in practice.
Also, doing ordnance after the round has been going on for a while is
way less effective because all of the nodes you would've discounted were
already researched.
## Changelog
🆑
balance: NT Frontier can purchase and refund researched techweb nodes.
/🆑
---------
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>