Commit Graph

559 Commits

Author SHA1 Message Date
nevimer 6e9f2ccfc0 Merge remote-tracking branch 'tgstation/master' into upstream-12-15
# Conflicts:
#	.github/workflows/compile_all_maps.yml
#	.github/workflows/run_integration_tests.yml
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/_onclick/hud/credits.dm
#	code/controllers/subsystem/networks/id_access.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/game/machinery/doors/door.dm
#	code/game/objects/structures/crates_lockers/closets/secure/medical.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/modules/antagonists/malf_ai/malf_ai_modules.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/loadout/categories/accessories.dm
#	code/modules/loadout/loadout_helpers.dm
#	code/modules/loadout/loadout_items.dm
#	code/modules/loadout/loadout_preference.dm
#	code/modules/mob/living/silicon/robot/robot_defense.dm
#	code/modules/mod/mod_theme.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/reagents/reagent_containers/cups/drinks.dm
#	code/modules/shuttle/mobile_port/variants/supply.dm
#	code/modules/surgery/organs/internal/eyes/_eyes.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_heretic.png
#	icons/hud/screen_full.dmi
2025-12-15 18:12:29 -05:00
RikuTheKiller be1f231869 Lock R&D console boards by default (#94114)
## 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.
/🆑
2025-12-05 19:12:22 -05:00
Roxy d0ca474789 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-05 2025-11-05 19:43:07 -05:00
SyncIt21 002aef897f [MDB Ignore] Removes circuit board recipe for vend a tray (#93517)
## About The Pull Request
- Closes #93497

'Vend a trays' are not subtypes of machines but structures i.e. their
path is `/obj/structure/displaycase/forsale`. You can't create
structures with machine circuit boards so they runtime like hell

You can still create an Vend a tray by
- Creating a "display case chassis" with 5 wood
- Inserting a card reader in it

It's just this broken way of designing the tray has to go

## Changelog
🆑
del: Removes circuit board recipe for vend a tray. Use 5 wood to create
a "display case chassis" and insert a card reader to create the tray
instead
/🆑
2025-10-29 23:19:02 +01:00
xPokee 5e629dff04 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-10-03 07:05:54 -04:00
Krysonism 075de00420 Chekov's Canister! Adds missing resupply canisters, makes them constructable & spawn in maint,. (#93028)
## About The Pull Request

This is was created because I found several rare and exciting canisters
in game and then finding out there is no way to actually construct the
vendor they belong to!...

<img width="768" height="385" alt="image"
src="https://github.com/user-attachments/assets/70261cea-daaf-41df-a212-21cef6d6bd0c"
/>

### This PR:

* Makes all noteable vendors constructable, if you have the canister. 
* Adds canisters to syndismokes, syndiechem, liberation station,
magivend, shambler's juice and bombuddy
* Replaces the old tptally random canisters spawner, with a variety of
spawners weighted for power and split according to different themes.
* Adds the new main canister spawner to maint. 

### Spawner weights

The random canister spawner from maintenance has a:

* **93,5%** chance to spawn a common station vendor refill(with weights
for wardrobes being somewhat reduced.)
* **6%** chance to spawn a rare and special vendor refill.
* **0.5%** chance to spawn a oddity level., super powerful vendor
refill.

## Why It's Good For The Game

One must never place a filled canister in maint if it isn't going to be
constructed It's wrong to make promises you don't mean to keep.

## Changelog

🆑
add: Nearly all notable vendors are now constructable if you have the
canister.
add Added refill canisters for syndiesmokes, liberation station,
magivend, bombuddy 3000, shambler's juice and syndichem.
add: Random vending refill canisters now have a chance to spawn in
maint.
image: Robco Toolmaker and Centdrobe canisters have new sprites.
/🆑
2025-10-02 20:12:46 +02:00
John Willard fd752f043d Easy multi-z support for alarm console (+spawn changes) (#93198)
## About The Pull Request

Station alarm consoles now register to all Station Z levels+Areas if
they were created on a station Z level (this doesn't include mining, but
station ones will see mining areas), otherwise will be a "local" console
to that Z level only.

Mostly the same applies for Cyborg/AI, but if they were built on a
non-station Z level then they have their Z level added on top of Station
Z levels, so example Nukie saboteur borgs will see alarms they might
need, while a Golem/Oldstation AI will also be able to see their own
alarms.

Because of how alarms and spawning in worked, Cyborgs/AIs had CentCom's
Z level as something it would detect, so we simply create the mob at the
spawn location rather than on the title screen during Initialization,
fixing that issue as well.

## Why It's Good For The Game

Adds easy multi-z support for station alarms and removes the previous
bandaid of having to deconstruct your board and multitool it or map in
every single station alarm console to allow station alerts (which is
quite silly) which was done in
https://github.com/tgstation/tgstation/pull/88343.

Closes https://github.com/tgstation/tgstation/issues/61592
Closes https://github.com/tgstation/tgstation/issues/83042
Closes https://github.com/tgstation/tgstation/issues/69314

I find this solution better since it catches pretty much all use cases
without the need for special subtypes and needing players to actually
know the difference between these things.

## Changelog

🆑
fix: Cyborgs and AIs will now see alerts of the whole station rather
than solely the Z level they were spawned on.
fix: Cyborgs and AIs will no longer get alerts about Thunderdome.
/🆑
2025-10-02 18:12:57 +02:00
MrMelbert f20c61f670 [MDB Ignore] Deletes the bluespace gas vendor (#93137)
## About The Pull Request

Deletes the Bluespace Gas Vendor and accompanying Bluespace Gas Sender

## Why It's Good For The Game

These wall mounts were added as ways to encourage Atmos Techs to
participate in the economy and crew at large. Unfortunately, it's missed
the mark and is unused in 99% of all rounds*.

**I have seen more atmos techs use the bluespace gas sender for exploits
than for its intended use.*

It has been noted that
1. Atmos doesn't need to sell gas to the crew to make money. They can
export gas to cargo to make more money.
2. The crew doesn't really care about gases. They will rarely go out of
their way to acquire them, even if free.
3. Most importantly, most atmos players **like to give out gas for
free** - it's mass producible and seeing people utilize their creations
tend to be its own reward.
4. Even for the atmos techs that want to charge for their products (to
create conflict or whatnot), *you could easily do that by hand via
pre-filling tanks**.

***I have seen more atmos techs make money off of selling pre-filled
tanks than by using the vendor.*

Ultimately, this machine serves no purpose besides bloating wall space
and existing as an atmos exploit vector.

## Changelog

🆑 Melbert
del: Bluespace Gas Vendors and the accompanying Bluespace Gas Sender
have been removed
/🆑
2025-09-26 20:27:30 +02:00
xPokee 9b282a850e Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-17 11:45:44 -04:00
FalloutFalcon d2f34e33be moves abstract_type up to datum, spawners wont spawn them (#92909)
## About The Pull Request
moves all implementations (im aware of) for "Im a parent type dont spawn
me please" to the datum layer to standardized behavior
adds a standerized proc for filtering out "bad" items that we dont want
spawning. applies to it the subtype vendor, gifts, and a new spawner and
mystery box for a random gun (neither playerfacing)
"port" of https://github.com/shiptest-ss13/Shiptest/pull/4621



https://github.com/user-attachments/assets/22f6f0b2-b44e-411a-b3dc-6b97dc0287aa

small warning: I dont have EVERY abstract type defined right now but,
ive done a good enough job for now. Im tired of data entry rn
## Why It's Good For The Game
standardizing behavior. Might be a micro hit to performance however

having this lets us not rely on icon state to determine whether
something is a parent type and makes it much easier to tell something is
a parent type (could be applied further to things like admin spawning
menus and things like that).

need feedback on if this is actually good for the game.
## Changelog
🆑
add: Soda cans show up in the silver slime drink table.
add: Examine tag for items that are not mean to show up ingame.
refactor: Standardizes how gifts rule out abstract types.
fix: gifts no longer check if something has an inhand, massively
expanding the list of potential items.
/🆑
2025-09-13 00:36:15 +02:00
nevimer b348b617a3 Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07
# Conflicts:
#	README.md
#	code/__DEFINES/admin.dm
#	code/__DEFINES/melee.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/economy.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/elements/crusher_loot.dm
#	code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
#	code/modules/clothing/suits/_suits.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/mineral_scanner.dm
#	code/modules/mob/living/living.dm
#	code/modules/plumbing/plumbers/pill_press.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
2025-09-07 00:37:52 -04:00
Leland Kemble 052844c8ec Remove double (Computer Board) on custom shuttle boards (#92806)
## About The Pull Request

computer boards saying (Computer Board) is done by name_extension on the
base board, and the shuttle boards had a second one in their base name.

## Why It's Good For The Game

Only need one (Computer Board)

## Changelog
🆑
spellcheck: Made shuttle computer boards only say (Computer Board) once
/🆑
2025-09-02 18:56:47 -07:00
SyncIt21 8b0d22d14b General maintenance for vending machines (#91987)
## About The Pull Request
**1. Code Improvements**
- Removed unused vars `coin`, `bill` & other stuff
- Removed duplicate definition of `on_deconstruction()`
- Autodoc for a lot of procs
- Merged smaller procs into larger ones to avoid scrolling in the code
editor & reduced overhead
- Split the vending machine file into several smaller files for easy
code management

**2. Qol**
- Implemented vending machine ads. They now display random stuff on the
UI

https://github.com/user-attachments/assets/9720ea60-f268-4ca2-940d-243e3d0ac75f
- More error messages for custom & normal vendors as to why an item
could not be loaded
- Custom vending machines can be deconstructed safely via crowbar
without any explosion only after unlinking your account from the machine
else you get the same explosion. Upon deconstruction all loaded items
are moved into its restock canister meaning the machine can be safely
moved with all its products just like a regular vending machine to a new
location

**3. Fixes**
- Fixes #81917. Any returned items in the vending machine now show up as
free in the UI & won't cost credits to buy them
- Fixes #87416. Custom & normal vendors now keep track of products
removed via `Exited()` so the UI gets always updated
- Fixes #83151. Items with different names & custom prices now show up
in unique rows
- Fixes #92170 Custom vendors now show the correct icon for inserted
items
- Closes #80010. From the above fix this situation is impossible so it's
safe to close this as a duplicate
- Closes #78016 same problem as above with `Exited()` duplicate
- Custom vendors can now actually be used by players who are not the
owner instead of locking down the UI
- Vending machines keep track of `max_amount` of stocked items by hand
as well & not just RPED

**4. Refactor**
- Separates custom vending machine code from normal vending machine
code. This prime Marely focus on the `vending_machine_input` list which
now only exists inside the custom vending machine
- Compressed the UI code for vending machine so both custom & normal
vending machines can send the same data instead of separating the 2.
Overall less code
- Moved attack chain from `attackby()` to `item_interaction()` for
loading items

## Changelog
🆑
code: cleaned up vending machine code
qol: vending machines now have more product slogans you never heard
before
qol: custom & normal vending machines now have more feedback on why an
item could not be loaded
qol: vending machines now display random ads on the UI
qol: custom vending machines can be deconstructed via crowbar safely
only after unlinking your account from the machine.
qol: upon deconstructing a custom vendor all its products are moved into
its refill canister & it will be restored when reconstructing the
machine elsewhere
fix: Returned items to the vending machine now show up as free in the UI
and won't be greyed out if you don't have credits to get them back
fix: items that leave the vending machine by any means will update the
UI in all cases
fix: loading items by hand to the vending machine now respects the
max_amount for that category
fix: custom vendors can now actually be used by players who are not the
owner thus enabling them to transfer credits to the owner during
purchases & basically they do their job again
fix: custom vendors now show the correct icon for inserted items
fix: Items with different names & custom prices now show up in unique
rows in custom vendors
refactor: separated custom & normal vending machine code. Reduced UI
code & improved attack chain
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
# Conflicts:
#	code/modules/vending/_vending.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
2025-08-19 22:28:01 -04:00
SyncIt21 0b6101a37e General maintenance for vending machines (#91987)
## About The Pull Request
**1. Code Improvements**
- Removed unused vars `coin`, `bill` & other stuff
- Removed duplicate definition of `on_deconstruction()`
- Autodoc for a lot of procs
- Merged smaller procs into larger ones to avoid scrolling in the code
editor & reduced overhead
- Split the vending machine file into several smaller files for easy
code management

**2. Qol**
- Implemented vending machine ads. They now display random stuff on the
UI


https://github.com/user-attachments/assets/9720ea60-f268-4ca2-940d-243e3d0ac75f
- More error messages for custom & normal vendors as to why an item
could not be loaded
- Custom vending machines can be deconstructed safely via crowbar
without any explosion only after unlinking your account from the machine
else you get the same explosion. Upon deconstruction all loaded items
are moved into its restock canister meaning the machine can be safely
moved with all its products just like a regular vending machine to a new
location

**3. Fixes**
- Fixes #81917. Any returned items in the vending machine now show up as
free in the UI & won't cost credits to buy them
- Fixes #87416. Custom & normal vendors now keep track of products
removed via `Exited()` so the UI gets always updated
- Fixes #83151. Items with different names & custom prices now show up
in unique rows
- Fixes #92170 Custom vendors now show the correct icon for inserted
items
- Closes #80010. From the above fix this situation is impossible so it's
safe to close this as a duplicate
- Closes #78016 same problem as above with `Exited()` duplicate
- Custom vendors can now actually be used by players who are not the
owner instead of locking down the UI
- Vending machines keep track of `max_amount` of stocked items by hand
as well & not just RPED

**4. Refactor**
- Separates custom vending machine code from normal vending machine
code. This prime Marely focus on the `vending_machine_input` list which
now only exists inside the custom vending machine
- Compressed the UI code for vending machine so both custom & normal
vending machines can send the same data instead of separating the 2.
Overall less code
- Moved attack chain from `attackby()` to `item_interaction()` for
loading items

## Changelog
🆑
code: cleaned up vending machine code
qol: vending machines now have more product slogans you never heard
before
qol: custom & normal vending machines now have more feedback on why an
item could not be loaded
qol: vending machines now display random ads on the UI
qol: custom vending machines can be deconstructed via crowbar safely
only after unlinking your account from the machine.
qol: upon deconstructing a custom vendor all its products are moved into
its refill canister & it will be restored when reconstructing the
machine elsewhere
fix: Returned items to the vending machine now show up as free in the UI
and won't be greyed out if you don't have credits to get them back
fix: items that leave the vending machine by any means will update the
UI in all cases
fix: loading items by hand to the vending machine now respects the
max_amount for that category
fix: custom vendors can now actually be used by players who are not the
owner thus enabling them to transfer credits to the owner during
purchases & basically they do their job again
fix: custom vendors now show the correct icon for inserted items
fix: Items with different names & custom prices now show up in unique
rows in custom vendors
refactor: separated custom & normal vending machine code. Reduced UI
code & improved attack chain
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-08-11 14:37:13 +02:00
SyncIt21 31edad9967 Adds some bit running construction qol (#92217)
## About The Pull Request
- Closes #92210

1) Bit Forge can be deconstructed with a screwdriver & crowbar like a
normal machine
2) Adds examines & screentips for netpod, bitforge(icon for panel open
state added) & quantum server on how to deconstruct them. New icon state
for when bitforge has its panel open is shown below
<img width="210" height="103" alt="Screenshot (497)"
src="https://github.com/user-attachments/assets/bb44c78d-1f0e-468f-9a79-ebc5800edd09"
/>

3) Moved bitrunning machine designs into files that exist to hold that
type of code

## Changelog
🆑
code: moved designs & circuitboards for bitrunning into their correct
files
qol: adds examines & screentips for bitrunning netpod, bitforge & server
on how to deconstruct them
fix: bitforge can be deconstructed with a screwdriver & crowbar
/🆑

(cherry picked from commit bb38209bb4)
2025-08-08 15:29:17 -04:00
SyncIt21 bb38209bb4 Adds some bit running construction qol (#92217)
## About The Pull Request
- Closes #92210

1) Bit Forge can be deconstructed with a screwdriver & crowbar like a
normal machine
2) Adds examines & screentips for netpod, bitforge(icon for panel open
state added) & quantum server on how to deconstruct them. New icon state
for when bitforge has its panel open is shown below
<img width="210" height="103" alt="Screenshot (497)"
src="https://github.com/user-attachments/assets/bb44c78d-1f0e-468f-9a79-ebc5800edd09"
/>

3) Moved bitrunning machine designs into files that exist to hold that
type of code

## Changelog
🆑
code: moved designs & circuitboards for bitrunning into their correct
files
qol: adds examines & screentips for bitrunning netpod, bitforge & server
on how to deconstruct them
fix: bitforge can be deconstructed with a screwdriver & crowbar
/🆑
2025-08-05 19:02:56 +10:00
Roxy 7a9b25c2b7 Refactor custom vending machine brand selection (#92205)
The list of options you could choose from when screwdrivering a custom
vending machine circuit board was hard-coded and also contained copy
pastes of every vending machine name (some of which were outdated). It
was yucky
- Add a new var on `/obj/machinery/vending` called `allow_custom`,
defaults to FALSE and determines whether that type shows up as an option
when screwdrivering a custom vending machine board, I've went through
and made assignments for it mirror what was in the old static list i.e.
this won't introduce any new options
- Change the hard-coded static list to be built on Initialize,
populating with every subtype that has `allow_custom` set to TRUE
- Eliminate a second static list that was just the inverse of the first
one (first one was typepath = name and this one was just name =
typepath)
- Changed an `istype` check to `==` because old behavior meant subtypes
of a given vending machine would have their type set to the supertype if
that was also a valid custom vending machine option

Cleaner code, no needing to maintain two separate entries for the name
of a vending machine, eligibility for a machine to be used in custom
vending machines is now a var on the type instead of in a random file
pertaining to circuit boards

🆑
refactor: refactored custom vending machine brand code, a new var on
/obj/machinery/vending called allow_custom now determines whether the
machine can be chosen when screwdrivering the circuit board
/🆑
2025-07-30 17:37:44 -04:00
moocowswag b7dab59e5e Adds modular shield gates and makes modular shields less useless indoors (#91251)
## About The Pull Request
Adds modular shield gates and puts them in holographics research (This
is the final machine to be added to holographics, if anymore are added
they will be put into a brand new adv holographics tech)

It can be rotated with screwdriver (to open panel) and wrench

It has NO ui (its meant to be used with either a remote signaler or
modular shield console in another PR)

It takes NO penalty from generating tiles indoors

It projects a field until either its max range has been reached or it
comes across a closed turf or shield that blocks it.

Regeneration rate is still based on how many tiles it projected vs the
maximum theoretical range it can project at, meaning relays are still
useful.

Infact its very inefficient at longer ranges (which is why it's called a
gate and not a directional generator, because you will most likely use
it like a gate)

its screwdrivered in the video thats why the connections are broken..


https://github.com/user-attachments/assets/4536dd5c-a515-43fc-9186-bbd2fc21b703


Makes hulks deal 30 + shield regeneration rate instead of 100+ (remember
shields don't have any armor or damage deflection)

Has shields block clicks on things under them (mandatory for the shield
gate)

Shields now react better to explosions and atmos (they used to not block
either with barely any interaction)


HALVES the bubble shield generator's max radius when set to project
tiles in doors (similar to regen)
Doubles capacity and regen (if used indoors this is not a large buff
because max radius impacts the regen calculation)

## Why It's Good For The Game

Allows engineers to use up excess power to further manipulate their
environment to produce complicated doorways, walls, and containment
fields that are nonharmful but still meaningful as breaching them is an
easy fix.

Modular shield generators are meant to be progressive content that
engineers can mess with throughout an ENTIRE round, giving them a
generator subtype that give them a bit more fine control with how to use
them seems essential.


Alot of people have asked me why the generator is so weak and told me
its trash, ive kept it weak because it affects a large area, outside in
space thats not a big deal, but inside the station its incredibly
powerful to just drop a 300 health bullet sponge wherever you want it by
ramping up the radius and blocking someone from entering/exiting a room
(this is similar to closing a door behind someone as ai except you're
completely surrounding them with that one door.)

This is deceptively powerful and by nerfing the radius indoors it's much
harder to abuse, which means that shield can now be somewhat stronger
without being oppressive.


## Changelog
🆑
add: Modular shield gates which project a shield in a line and does not
suffer indoor penalties.
balance: Modular shields now better interact with and block atmos and
explosions and melee for what they are protecting, hulks are able to
take one down eventually no matter what.
balance: Modular shields now suffer a severe range penalty when
generating indoors but are more potent in their capacity to endure
damage.
image: modular shield gate sprites

/🆑

---------

Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
2025-07-30 17:37:37 -04:00
Roxy 87ebbba36a Refactor custom vending machine brand selection (#92205)
## About The Pull Request

The list of options you could choose from when screwdrivering a custom
vending machine circuit board was hard-coded and also contained copy
pastes of every vending machine name (some of which were outdated). It
was yucky
- Add a new var on `/obj/machinery/vending` called `allow_custom`,
defaults to FALSE and determines whether that type shows up as an option
when screwdrivering a custom vending machine board, I've went through
and made assignments for it mirror what was in the old static list i.e.
this won't introduce any new options
- Change the hard-coded static list to be built on Initialize,
populating with every subtype that has `allow_custom` set to TRUE
- Eliminate a second static list that was just the inverse of the first
one (first one was typepath = name and this one was just name =
typepath)
- Changed an `istype` check to `==` because old behavior meant subtypes
of a given vending machine would have their type set to the supertype if
that was also a valid custom vending machine option

## Why It's Good For The Game

Cleaner code, no needing to maintain two separate entries for the name
of a vending machine, eligibility for a machine to be used in custom
vending machines is now a var on the type instead of in a random file
pertaining to circuit boards

## Changelog
🆑
refactor: refactored custom vending machine brand code, a new var on
/obj/machinery/vending called allow_custom now determines whether the
machine can be chosen when screwdrivering the circuit board
/🆑
2025-07-30 01:11:24 +10:00
moocowswag e49aa65687 Adds modular shield gates and makes modular shields less useless indoors (#91251)
## About The Pull Request
Adds modular shield gates and puts them in holographics research (This
is the final machine to be added to holographics, if anymore are added
they will be put into a brand new adv holographics tech)

It can be rotated with screwdriver (to open panel) and wrench

It has NO ui (its meant to be used with either a remote signaler or
modular shield console in another PR)

It takes NO penalty from generating tiles indoors

It projects a field until either its max range has been reached or it
comes across a closed turf or shield that blocks it.

Regeneration rate is still based on how many tiles it projected vs the
maximum theoretical range it can project at, meaning relays are still
useful.

Infact its very inefficient at longer ranges (which is why it's called a
gate and not a directional generator, because you will most likely use
it like a gate)

its screwdrivered in the video thats why the connections are broken..


https://github.com/user-attachments/assets/4536dd5c-a515-43fc-9186-bbd2fc21b703


Makes hulks deal 30 + shield regeneration rate instead of 100+ (remember
shields don't have any armor or damage deflection)

Has shields block clicks on things under them (mandatory for the shield
gate)

Shields now react better to explosions and atmos (they used to not block
either with barely any interaction)


HALVES the bubble shield generator's max radius when set to project
tiles in doors (similar to regen)
Doubles capacity and regen (if used indoors this is not a large buff
because max radius impacts the regen calculation)

## Why It's Good For The Game

Allows engineers to use up excess power to further manipulate their
environment to produce complicated doorways, walls, and containment
fields that are nonharmful but still meaningful as breaching them is an
easy fix.

Modular shield generators are meant to be progressive content that
engineers can mess with throughout an ENTIRE round, giving them a
generator subtype that give them a bit more fine control with how to use
them seems essential.


Alot of people have asked me why the generator is so weak and told me
its trash, ive kept it weak because it affects a large area, outside in
space thats not a big deal, but inside the station its incredibly
powerful to just drop a 300 health bullet sponge wherever you want it by
ramping up the radius and blocking someone from entering/exiting a room
(this is similar to closing a door behind someone as ai except you're
completely surrounding them with that one door.)

This is deceptively powerful and by nerfing the radius indoors it's much
harder to abuse, which means that shield can now be somewhat stronger
without being oppressive.


## Changelog
🆑
add: Modular shield gates which project a shield in a line and does not
suffer indoor penalties.
balance: Modular shields now better interact with and block atmos and
explosions and melee for what they are protecting, hulks are able to
take one down eventually no matter what.
balance: Modular shields now suffer a severe range penalty when
generating indoors but are more potent in their capacity to endure
damage.
image: modular shield gate sprites

/🆑

---------

Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
2025-07-27 01:37:17 +02:00
Nick 9cb4fb1023 Nukie base, expansion expansion pack! (#91829)
## About The Pull Request

## Chemical Department
Adds a extra section to the chemlab, with materials and even a empty
bomb case for your evil chemistry needs!
Adds various beakers sizes of beakers to do chemistry with, gives one
chemical payload that can hold up to 5 beakers to nukies
Adds a locker with chemical closet supplies, medigels pill bottles
beakers.
Adds a hand labeler to properly label your stuff with! a succesfull
nukie is a organized one
Adds a toolbox for properly editing of grenades and plumbing
Adds a smart fridge ontop of the window to store your stuff in

![image](https://github.com/user-attachments/assets/d05418ac-64be-4cfd-817d-b67208192f40)

## Bio Terrorism Department
Expands the cells so you no longer have to juggle your slimes between 2
cells
Adds a big BZ chamber to store the slimes your not breeding in (enough
space to contain every color)
adds a fully upgraded slime proccesor aswell!

![image](https://github.com/user-attachments/assets/f4d35f2e-c96a-4f07-a5b7-5d6d9f73eace)

## Medical section
Moves some stuff to make place for a operating computer

![image](https://github.com/user-attachments/assets/1c9dc5e8-8033-42fa-ae2f-557873cf2230)

This also introduces a new locker sprite made by aliceee2ch
and one chemical payload variant by me

## Why It's Good For The Game

Removes some of the jank and make these places easier to use.
Adds extra stuff to the chemical section to widen the options you can do
as nukies. and make the lab a more proper lab toolwise then the absolute
bare mininum

## Changelog
🆑 Ezel
balance: Nukie Chemistry section, now includes a proper chemistry locker
with pill bottles medigels and big beakers
balance: Nukie Chemistry section, now has a extra section attached to it
that holds some limited amount chemistry materials and a empty bombcase.
balance: Nukie Chemistry section, now has various sizes of beakers, a
special chemical payload that can hold up to 5 beakers, and a hand
labeler to tag your stuff with
map: Nukie Chemistry section, now has a smartfridge
map: Nukie xenobiology section widened and added a fully upgraded slime
proccesor
sprite: New syndicate chemical locker sprite by aliceee2ch
sprite: Adds a darker version of chemical payload only for nukies
/🆑

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-07-19 20:29:22 -04:00
SyncIt21 30266f421f [MDB Ignore] General maintenance for SMES (#91587)
- SMES now directly gives/takes charge to the power cells stored inside
its component parts instead of modifying a `charge` variable whose value
was set from the total charge of its stored cells
- Removed `capacity` var. It's now derived from the total cells
`max_charge`. Even then its value was set to this so manually setting it
was a waste
- Fixes #71918. Because of point 1, this also means if you install
rigged cells in the SMES it now explodes
- Adds examines & screentips for installing terminal & other tool acts
- Smes can be connected to the powernet with a multitool with the panel
open after construction.
- General maintenance for portable smes as well. Repaths it to machine
subtype instead of power cause all it's functionality wasn't used
- Removed a bunch of unused defines, autodoc and shuffled around other
code

🆑
qol: SMES has examines and screentips for various stuff
code: Improved code of SMES in general
fix: smes can be connected to the powernet with a multitool with the
panel open after construction
refactor: SMES now functions consistently with its power cells & the
RPED.
/🆑
2025-07-19 20:29:20 -04:00
Nick 60549f1c56 Nukie base, expansion expansion pack! (#91829)
## About The Pull Request

## Chemical Department
Adds a extra section to the chemlab, with materials and even a empty
bomb case for your evil chemistry needs!
Adds various beakers sizes of beakers to do chemistry with, gives one
chemical payload that can hold up to 5 beakers to nukies
Adds a locker with chemical closet supplies, medigels pill bottles
beakers.
Adds a hand labeler to properly label your stuff with! a succesfull
nukie is a organized one
Adds a toolbox for properly editing of grenades and plumbing
Adds a smart fridge ontop of the window to store your stuff in

![image](https://github.com/user-attachments/assets/d05418ac-64be-4cfd-817d-b67208192f40)

## Bio Terrorism Department
Expands the cells so you no longer have to juggle your slimes between 2
cells
Adds a big BZ chamber to store the slimes your not breeding in (enough
space to contain every color)
adds a fully upgraded slime proccesor aswell!

![image](https://github.com/user-attachments/assets/f4d35f2e-c96a-4f07-a5b7-5d6d9f73eace)

## Medical section
Moves some stuff to make place for a operating computer

![image](https://github.com/user-attachments/assets/1c9dc5e8-8033-42fa-ae2f-557873cf2230)

This also introduces a new locker sprite made by aliceee2ch
and one chemical payload variant by me

## Why It's Good For The Game

Removes some of the jank and make these places easier to use.
Adds extra stuff to the chemical section to widen the options you can do
as nukies. and make the lab a more proper lab toolwise then the absolute
bare mininum

## Changelog
🆑 Ezel
balance: Nukie Chemistry section, now includes a proper chemistry locker
with pill bottles medigels and big beakers
balance: Nukie Chemistry section, now has a extra section attached to it
that holds some limited amount chemistry materials and a empty bombcase.
balance: Nukie Chemistry section, now has various sizes of beakers, a
special chemical payload that can hold up to 5 beakers, and a hand
labeler to tag your stuff with
map: Nukie Chemistry section, now has a smartfridge
map: Nukie xenobiology section widened and added a fully upgraded slime
proccesor
sprite: New syndicate chemical locker sprite by aliceee2ch
sprite: Adds a darker version of chemical payload only for nukies
/🆑

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-07-12 22:54:58 +00:00
SyncIt21 f57f95aa95 [MDB Ignore] General maintenance for SMES (#91587)
## About The Pull Request
- SMES now directly gives/takes charge to the power cells stored inside
its component parts instead of modifying a `charge` variable whose value
was set from the total charge of its stored cells
- Removed `capacity` var. It's now derived from the total cells
`max_charge`. Even then its value was set to this so manually setting it
was a waste
- Fixes #71918. Because of point 1, this also means if you install
rigged cells in the SMES it now explodes
- Adds examines & screentips for installing terminal & other tool acts
- Smes can be connected to the powernet with a multitool with the panel
open after construction.
- General maintenance for portable smes as well. Repaths it to machine
subtype instead of power cause all it's functionality wasn't used
- Removed a bunch of unused defines, autodoc and shuffled around other
code

## Changelog
🆑
qol: SMES has examines and screentips for various stuff
code: Improved code of SMES in general
fix: smes can be connected to the powernet with a multitool with the
panel open after construction
refactor: SMES now functions consistently with its power cells & the
RPED.
/🆑
2025-07-12 16:21:58 +02:00
SyncIt21 4a47c90c18 Flatpacker & machine frame enhancements (#91752)
## About The Pull Request

**1. Makes the machine creation process from both efficient.**
The machine frame no longer creates & deletes the machines old component
parts before moving in the new parts. It instead now passes its parts
directly to the circuit boards `apply_default_parts()` meaning the old
parts are never created and the new ones get applied directly. This also
mean it does not have to again call `RefreshParts()` as the machines
`Initialize()` proc will do that for us by default so the performance is
just faster now.
Flatpack box also benefits from this and it will need it as stated below

- Fixes #86514. As the circuit board is passed to the machine's
`Initialize()` proc during reconstruction so it sets it's
`all_products_free` from the board both during mapload & when player
constructed from either machine frame & flatpack

**2. Flatpack enhancements** 
- The flatpack box now passes its stored circuit board into the machine
meaning any changes made like with a screw driver or such are preserved
in the newly created machine rather than the board getting deleted & the
machine creating the default board
- Flatpacker now accept custom component parts that replaces its stored
circuit board default parts. This implements

https://github.com/tgstation/tgstation/pull/91670#issuecomment-2977259973
meaning instead of the vendor created from the flatpacker starting out
empty it now accepts the refill canister and will package both of them
together. Then during deployment that stored canister is stored back in
the vendor meaning instead of starting out empty you get to carry over
all your previous stock

Depends on https://github.com/tgstation/tgstation/pull/91512 because of
named arg conflict. Keep this drafted till that gets merged

## Changelog
🆑
qol: flatpacker now accepts custom component parts(like vendor refill
canister) along with the circuit board so you can carry over your
previous stock during deployment rather than starting out empty
fix: flatpack boxes now passes its stored circuit board into the machine
thus preserving its properties instead of creating a default board in
the machine
fix: vending machines reconstructed on station from circuits loaded off
station(having free products) will continue to sell free products
code: machine construction via flatpacker/machine frame is faster
performance wise
/🆑
2025-07-11 18:04:56 -04:00
SyncIt21 2d41569c65 Flatpacker & machine frame enhancements (#91752)
## About The Pull Request

**1. Makes the machine creation process from both efficient.**
The machine frame no longer creates & deletes the machines old component
parts before moving in the new parts. It instead now passes its parts
directly to the circuit boards `apply_default_parts()` meaning the old
parts are never created and the new ones get applied directly. This also
mean it does not have to again call `RefreshParts()` as the machines
`Initialize()` proc will do that for us by default so the performance is
just faster now.
Flatpack box also benefits from this and it will need it as stated below

- Fixes #86514. As the circuit board is passed to the machine's
`Initialize()` proc during reconstruction so it sets it's
`all_products_free` from the board both during mapload & when player
constructed from either machine frame & flatpack

**2. Flatpack enhancements** 
- The flatpack box now passes its stored circuit board into the machine
meaning any changes made like with a screw driver or such are preserved
in the newly created machine rather than the board getting deleted & the
machine creating the default board
- Flatpacker now accept custom component parts that replaces its stored
circuit board default parts. This implements

https://github.com/tgstation/tgstation/pull/91670#issuecomment-2977259973
meaning instead of the vendor created from the flatpacker starting out
empty it now accepts the refill canister and will package both of them
together. Then during deployment that stored canister is stored back in
the vendor meaning instead of starting out empty you get to carry over
all your previous stock

Depends on https://github.com/tgstation/tgstation/pull/91512 because of
named arg conflict. Keep this drafted till that gets merged

## Changelog
🆑
qol: flatpacker now accepts custom component parts(like vendor refill
canister) along with the circuit board so you can carry over your
previous stock during deployment rather than starting out empty
fix: flatpack boxes now passes its stored circuit board into the machine
thus preserving its properties instead of creating a default board in
the machine
fix: vending machines reconstructed on station from circuits loaded off
station(having free products) will continue to sell free products
code: machine construction via flatpacker/machine frame is faster
performance wise
/🆑
2025-07-11 08:58:11 +02:00
AnturK 508e9ab573 Fixes war ops being able to launch shuttle before 20 minutes passed. (#91687)
Fixes the lockdown timer counting from server start instead of challenge
start.

## Why It's Good For The Game
I'm not sure it's actually good, but balance should be explicit not
confluence of bugs.
2025-06-21 22:36:00 -04:00
moocowswag a4d5c97f63 Adds Modular shield consoles, boards, and tech, lets monkeys mash their keyboards (#91189)
## About The Pull Request
(had to cut off the video cause of github file size limit)


https://github.com/user-attachments/assets/f6a51d28-dc35-41ad-93ac-099c48215013


Adds modular shield generator consoles to the game, boards are available
through holographics tech

Simply multitool buffer a generator and then use the buffer on a
console.

The console can see the current shield health status of every generator
that is linked to it and can toggle the generators on
and off, but cannot change radius or any other settings.

The console can also rename generators for convenience



And should a monkey manage to slip past your defenses via ventcrawl it
will be able to randomly toggle your shields.


https://github.com/user-attachments/assets/94435d15-e52f-45c7-a2e6-135228e7bc08


## Why It's Good For The Game

Helps engineers keep track of their generators for primarily PVE content
(mainly when they are trying to protect the station against meteors)
## Changelog
🆑
add: You can now remotely monitor and control modular shield generators
using modular shield generator consoles.
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-06-21 22:26:31 -04:00
AnturK ed7e92bf77 Fixes war ops being able to launch shuttle before 20 minutes passed. (#91687)
Fixes the lockdown timer counting from server start instead of challenge
start.

## Why It's Good For The Game
I'm not sure it's actually good, but balance should be explicit not
confluence of bugs.
2025-06-19 18:23:26 +00:00
moocowswag c2e0d21c7a Adds Modular shield consoles, boards, and tech, lets monkeys mash their keyboards (#91189)
## About The Pull Request
(had to cut off the video cause of github file size limit)


https://github.com/user-attachments/assets/f6a51d28-dc35-41ad-93ac-099c48215013


Adds modular shield generator consoles to the game, boards are available
through holographics tech

Simply multitool buffer a generator and then use the buffer on a
console.

The console can see the current shield health status of every generator
that is linked to it and can toggle the generators on
and off, but cannot change radius or any other settings.

The console can also rename generators for convenience



And should a monkey manage to slip past your defenses via ventcrawl it
will be able to randomly toggle your shields.


https://github.com/user-attachments/assets/94435d15-e52f-45c7-a2e6-135228e7bc08


## Why It's Good For The Game

Helps engineers keep track of their generators for primarily PVE content
(mainly when they are trying to protect the station against meteors)
## Changelog
🆑
add: You can now remotely monitor and control modular shield generators
using modular shield generator consoles.
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-06-19 14:16:47 +00:00
jimmyl c12d2189e0 atmospherics shield generator (#91055)
## About The Pull Request

(old video)


https://github.com/user-attachments/assets/4b04c372-05a2-4bab-b4a4-1b2c965061e5

unlocked by holographics research
put two facing eachother and turn one on to make a field that blocks
atmos, if not obstructed by wall
fields cannot be broken or clicked but the generators may (theyre
relatively weak)
requires external airlock access or apc access
uses area power, environmental channel
may be locked
may be screwed open to access wiring, has 1 wire that just toggles it

changes tiny fans on stations to use those

## Why It's Good For The Game

a better and rebuildable alternative to magic tiny fans 

## Changelog
🆑
add: atmospherics shield generator, unlocked by Holographics research
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-06-15 15:54:08 -04:00
Tim 730eb8af99 Photocopier Improvements (#91258)
## About The Pull Request
Photocopiers no longer initialize all their stored papers. Since the
only paper that can be stored has to be empty this is now just stored as
a number value. This prevents hundreds of blank papers from being
spawned during round start loading, since every station map has a dozen
of these machines scattered about.

Other stuff:
- Emag function where it breaks the payment system so people are no
longer charged for printing
- Stock parts now affect max paper storage, print time, and toner usage
(swapped servo part for matter bin)
- Can now load paper via paper bins
- Can now select which type of paper to print with (regular, carbon,
construction, natural)
- Fix stored paper counts being wrong
- Gave paper subtypes proper names so we can use them in our UI
- Paper and toner are now dropped when machine deconstructed
- Refactored item code to use `item_interaction()` instead of
`attackby()`

## Why It's Good For The Game
New functionality, bugfixes, refactored code, and optimizations are
good.

## Changelog
🆑
add: Photocopiers can now be emagged to disable the payment system that
charges you for printing copies
add: Photocopiers are now affected by stock part upgrades. Matter bins
affect paper capacity, lasers affect toner usage, and scanning module
affects time to print. The servo stock part was replaced with matter
bin.
add: Photocopiers can now be loaded with regular, carbon, construction,
and natural paper. You can select which kind to use in the UI when
printing copies if any are stored.
qol: Photocopiers can now be loaded with paper bins
fix: Photocopiers now display the correct amount of stored paper
fix: Photocopiers now drop toner and paper when machine is deconstructed
code: Paper subtypes (carbon, construction, natural) were given proper
names to use with photocopiers UI menu.
refactor: Photocopier code was refactored to not spawn paper when it is
initialized. Instead it stores blank papers as a numeric value. Also
switched the `attackby()` code handling to use the modern
`item_interaction()` proc.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-06-15 15:52:32 -04:00
SyncIt21 c62755e2cd Engine circuit boards use datum parts (#91451)
## About The Pull Request
As it says on the tin and it should be using them because it doesn't
take up space in game. Also moved them to `machine_circuitboards.dm`
cause it doesn't take up that much space

## Changelog
🆑
code: engine circuit boards use datum parts and don't occupy memory in
game
/🆑
2025-06-15 15:52:24 -04:00
Ghom 75e7ef6def Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.

The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.

Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.

🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
2025-06-15 15:50:31 -04:00
jimmyl 089059d7d3 atmospherics shield generator (#91055)
## About The Pull Request

(old video)


https://github.com/user-attachments/assets/4b04c372-05a2-4bab-b4a4-1b2c965061e5

unlocked by holographics research
put two facing eachother and turn one on to make a field that blocks
atmos, if not obstructed by wall
fields cannot be broken or clicked but the generators may (theyre
relatively weak)
requires external airlock access or apc access
uses area power, environmental channel
may be locked
may be screwed open to access wiring, has 1 wire that just toggles it

changes tiny fans on stations to use those

## Why It's Good For The Game

a better and rebuildable alternative to magic tiny fans 

## Changelog
🆑
add: atmospherics shield generator, unlocked by Holographics research
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-06-10 15:31:43 +02:00
Tim a91d61d449 Photocopier Improvements (#91258)
## About The Pull Request
Photocopiers no longer initialize all their stored papers. Since the
only paper that can be stored has to be empty this is now just stored as
a number value. This prevents hundreds of blank papers from being
spawned during round start loading, since every station map has a dozen
of these machines scattered about.

Other stuff:
- Emag function where it breaks the payment system so people are no
longer charged for printing
- Stock parts now affect max paper storage, print time, and toner usage
(swapped servo part for matter bin)
- Can now load paper via paper bins
- Can now select which type of paper to print with (regular, carbon,
construction, natural)
- Fix stored paper counts being wrong
- Gave paper subtypes proper names so we can use them in our UI
- Paper and toner are now dropped when machine deconstructed
- Refactored item code to use `item_interaction()` instead of
`attackby()`

## Why It's Good For The Game
New functionality, bugfixes, refactored code, and optimizations are
good.

## Changelog
🆑
add: Photocopiers can now be emagged to disable the payment system that
charges you for printing copies
add: Photocopiers are now affected by stock part upgrades. Matter bins
affect paper capacity, lasers affect toner usage, and scanning module
affects time to print. The servo stock part was replaced with matter
bin.
add: Photocopiers can now be loaded with regular, carbon, construction,
and natural paper. You can select which kind to use in the UI when
printing copies if any are stored.
qol: Photocopiers can now be loaded with paper bins
fix: Photocopiers now display the correct amount of stored paper
fix: Photocopiers now drop toner and paper when machine is deconstructed
code: Paper subtypes (carbon, construction, natural) were given proper
names to use with photocopiers UI menu.
refactor: Photocopier code was refactored to not spawn paper when it is
initialized. Instead it stores blank papers as a numeric value. Also
switched the `attackby()` code handling to use the modern
`item_interaction()` proc.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-06-08 16:09:56 +00:00
SyncIt21 ec86096909 Engine circuit boards use datum parts (#91451)
## About The Pull Request
As it says on the tin and it should be using them because it doesn't
take up space in game. Also moved them to `machine_circuitboards.dm`
cause it doesn't take up that much space

## Changelog
🆑
code: engine circuit boards use datum parts and don't occupy memory in
game
/🆑
2025-06-08 15:34:43 +00:00
Ghom 14fb86e3e8 Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
## About The Pull Request
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.

The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.

## Why It's Good For The Game
Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.

## Changelog

🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
2025-06-08 13:57:10 +02:00
Tim 0e7e603d4b Properly document circuitboard vars (#91348)
## About The Pull Request
Some of the code comments only used `//` so they weren't appearing in
VSC when you hover over the proc which is annoying.

## Why It's Good For The Game
Documentation good.

## Changelog
🆑
code: Properly document circuitboard vars
/🆑
2025-05-29 16:16:11 -04:00
Tim 2ace938a50 Properly document circuitboard vars (#91348)
## About The Pull Request
Some of the code comments only used `//` so they weren't appearing in
VSC when you hover over the proc which is annoying.

## Why It's Good For The Game
Documentation good.

## Changelog
🆑
code: Properly document circuitboard vars
/🆑
2025-05-27 18:01:30 +02:00
moocowswag 2273df83be Adds Modular Shield Cables and wrench connection QoL, Spraypainting the generator now causes it to color the shields on next activation (#91122)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-05-22 21:30:11 -04:00
moocowswag 32abbcc58f Adds Modular Shield Cables and wrench connection QoL, Spraypainting the generator now causes it to color the shields on next activation (#91122)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-05-19 16:48:53 +02:00
Jacquerel d315286ec3 Readds Cloning (#90754) 2025-04-29 18:33:35 -06:00
Goat 713000b32b [MDB Ignore] Makes photocopiers buildable (#90658)
## About The Pull Request
Adds the ability to build & deconstruct photocopiers. Replaces
photocopiers on current maps with a prebuilt version that's prestocked
with ink & paper. It starts preresearched in the office equipment node.
Takes a scanning module, micro laser, and servo to build.
## Why It's Good For The Game
Being able to remake is GOOD !!! Lets crew have ~ass scanning factories~
hard working offices wherever they want.
## Changelog
🆑 Goat, LePiromano
qol: Photocopiers now have boards meaning you can build, destroy, and
remake them. (If you're a mapper use the prebuilt version to prestock
your photocopiers)
/🆑
2025-04-29 18:04:28 -06:00
SmArtKar 341090d420 Adds a unit test for techweb design presence, puts some missing designs into protolathes (#90219)
## About The Pull Request

Adds a unit test that checks that all designs are accessible through
some source, be it techweb, disks, or innate designs. Certain designs,
like pocket extinguishers, entertainment screens, etc, that have been
present in autolathes but not in the techweb despite having PROTOLATHE
flag assigned have been put into protolathes (where it made sense,
otherwise the flag was removed).
An important change is that restaurant portals are now printable, and
thus can be constructed and deconstructed. Indestructible portals have
been a major gripe of mine for a while, and I don't see a solid reason
for keeping them indestructible if they can easily be printed from the
service protolathe.

Closes #90212

## Why It's Good For The Game

Initial argument for keeping portals unbreakable was to prevent people
from griefing the chef/bartender, but by that logic we can make most
machinery unbreakable too. I don't think that having an unbreakable
portal is good if its locking us out from allowing chefs/bartenders to
reorder or even outright reposition their lunchroom/bar.

## Changelog

🆑
balance: Restaurant portals can now be printed, constructed and
deconstructed. They're also no longer completely invulnerable.
/🆑
2025-04-29 17:09:44 -06:00
Jacquerel f2b07029ef Readds Cloning (#90754) 2025-04-29 08:35:02 -06:00
Goat 3799f50e65 [MDB Ignore] Makes photocopiers buildable (#90658)
## About The Pull Request
Adds the ability to build & deconstruct photocopiers. Replaces
photocopiers on current maps with a prebuilt version that's prestocked
with ink & paper. It starts preresearched in the office equipment node.
Takes a scanning module, micro laser, and servo to build.
## Why It's Good For The Game
Being able to remake is GOOD !!! Lets crew have ~ass scanning factories~
hard working offices wherever they want.
## Changelog
🆑 Goat, LePiromano
qol: Photocopiers now have boards meaning you can build, destroy, and
remake them. (If you're a mapper use the prebuilt version to prestock
your photocopiers)
/🆑
2025-04-18 17:47:26 +02:00
SmArtKar 44c968f75e Adds a unit test for techweb design presence, puts some missing designs into protolathes (#90219)
## About The Pull Request

Adds a unit test that checks that all designs are accessible through
some source, be it techweb, disks, or innate designs. Certain designs,
like pocket extinguishers, entertainment screens, etc, that have been
present in autolathes but not in the techweb despite having PROTOLATHE
flag assigned have been put into protolathes (where it made sense,
otherwise the flag was removed).
An important change is that restaurant portals are now printable, and
thus can be constructed and deconstructed. Indestructible portals have
been a major gripe of mine for a while, and I don't see a solid reason
for keeping them indestructible if they can easily be printed from the
service protolathe.

Closes #90212

## Why It's Good For The Game

Initial argument for keeping portals unbreakable was to prevent people
from griefing the chef/bartender, but by that logic we can make most
machinery unbreakable too. I don't think that having an unbreakable
portal is good if its locking us out from allowing chefs/bartenders to
reorder or even outright reposition their lunchroom/bar.

## Changelog

🆑
balance: Restaurant portals can now be printed, constructed and
deconstructed. They're also no longer completely invulnerable.
/🆑
2025-04-03 08:05:08 +02:00
Y0SH1M4S73R f3ac412f69 Custom Shuttles Redux: Allows for the construction of custom shuttles. (#88493)
## About The Pull Request

This incredibly detailed PR adds the ability to construct custom
shuttles, which function similarly to whiteships.

To construct a custom shuttle, you need the following items:
- Shuttle frame rods
These rods can be hand-crafted by using 5 rods on 1 sheet of titanium,
or printed at a sci/engi/cargo lathe after researching the Shuttle
Engineering techweb node.
Lattices built with these rods, and catwalks/floors built on top of
these lattices, are valid for shuttle construction.
- Shuttle engines
Did you know shuttle engines have boards that weren't normally
obtainable? Well the board for one specific engine type is now available
from the sci/engi/cargo lathe after researching Shuttle Engineering. Of
course, the old options remain. You can steal engines from other
shuttles, including escape pods (it's not like engines are strictly
necessary for *those* shuttles anyways). Alternatively, the shuttle
engine supply pack is no longer locked behind the purchase of the BYOS.
- Flight Control & Navigation Console boards
These boards are printed at the sci/engi/cargo lathe after researching
the Shuttle Engineering techweb node.
If built on a custom shuttle, it will automatically link to it, unless
the shuttle already has such a console.
If built on a turf that is valid for custom shuttle construction, it
will automatically link to any shuttle constructed from or expanded with
that turf.
- Shuttle blueprints
Standard shuttle blueprints can be printed at the sci/engi/cargo lathe
after researching the Shuttle Engineering techweb node.
A cyborg upgrade granting access to a shuttle blueprint database can be
printed at the exofab after researching the aforementioned node.
Crude shuttle blueprints can be crafted by hand with a sheet of paper
and either a rainbow crayon or 10 uses of a blue crayon or spraycan.

If Science won't research the tech, you can also buy a goody pack
containing a flight control board, a docker board, two engine boards,
and a set of shuttle blueprints for 1200 credits, if you have aux base
access.

A shuttle can be constructed atop any continuous region of turfs
containing a shuttle rod lattice or a catwalk/tile built upon such.
Currently, this region cannot intersect any area other than space,
lavaland, the icemoon, or the station asteroid. Preexisting custom areas
can be included in the construction of the shuttle, but only if every
turf in the custom area is valid for shuttle construction.

In the shuttle blueprint UI, you can toggle a visualizer to display
which turfs fulfill all of the aforementioned conditions.

The following video goes through the basic process of shuttle
construction.


https://github.com/user-attachments/assets/3283422e-a201-4978-972d-67527b5df4ee

The blueprint used to construct the shuttle will be its master
blueprint. The master blueprint can be copied to other blank shuttle
blueprints (or to engiborgs with the shuttle database upgrade), and
allows the holder to perform a christening ritual on the shuttle to
rename it.
If a shuttle's master blueprint ceases to exist, a blank blueprint can
be linked to the shuttle to become the new master blueprint, or an
existing blueprint associated with that shuttle can be promoted to the
master blueprint.

Once constructed, the following options are available from the blueprint
UI to modify it:
- Create Area
Convert a continuous open area of the shuttle into a new area with the
name written in the above text input. This operates very similarly to
regular area construction.
- Rename Area
Change the name of the area you're currently in to the name written in
the above text input.
- Expand Area
Add a continuous open area of the shuttle to the neighboring area
selected from the dropdown to the left. This operates like regular area
expansion.
- Expand Shuttle
Expand a shuttle with valid frame turfs as defined above. These turfs
must be physically connected to the shuttle.
- Remove Area
    Remove an area, giving its tiles to the default shuttle area.
- Cleanup Empty Space (implemented after the above video was recorded)
Removes all completely empty turfs from the shuttle. If all the turfs in
one of the shuttle's areas were removed, that area is deleted. If
absolutely no turfs of the shuttle remain, the shuttle itself is
deleted. Due to the ability for this action to delete the shuttle, only
the master blueprint can do it.

As mentioned above, the shuttle's master blueprint can be used to
christen its associated shuttle. To do this, fill a glass drink bottle
with some amount of reagents, then hit it against one of the shuttle's
walls from outside while holding the master blueprint. You will be
prompted to enter a new name for the shuttle. The variety of things that
can happen while inputting a new name can cause the christening rite to
fail in one of several humorous ways.

### Optional (Unless specifically requested by a maintainer) Todo's
- [x] A way for shuttle circuits to be obtainable without techweb nodes
- [x] A more convenient way to carry around shuttle engines or the means
to deploy them
- [ ] A shuttle construction guide available as a reference book
- [ ] Allow boards to be linked to shuttles before construction so they
can be used outside the shuttle

## Why It's Good For The Game

Shuttles have been part of the sandbox for an incredibly long time, but
their limited accessibility has rendered them the exclusive territory of
lucky space explorers or the few antagonists who get one off the bat
(nukies and pirates). Giving players the means to construct shuttles to
their liking opens up a variety of possibilities for gimmicks for antags
and non-antags alike.

Besides the applications for antaggery and crew-sided gimmicks, this
provides side content for several departments to engage with during the
relatively-frequent periods of time where they have little else to do as
part of their intended roles.

With respect to engineering, if the station isn't actively being
damaged, the supermatter is in perfect working order, and nobody is
clamoring for machine upgrades, engineers have little else to resort to
other than construction projects. While the BSA station goal provides an
incentive for engineers to construct dedicated rooms for the cannon, it
will not necessarily be available every round. Custom shuttles not only
provide such a construction project to pursue, but provide the rare
opportunity, as well as a very good reason, to set up an independent
power network, complete with its own power source.

While atmos techs have a lot to do with gas mixing and the crystallizer,
they rarely get the opportunity to set up working life support systems
outside of repairing the ones that get blown up. Custom shuttles will
frequently start with no air, and unless the design settled upon is an
open floor plan, it will have several independent chambers that cannot
so easily be profused with a proper airmix by just opening a canister.
Furthermore, if the air in a custom shuttle gets messed up, a proper
scrubber and distro network is a significantly less tedious method of
rectifying the problem than cleaning the air manually with portable
scrubbers and pumps.

Scientists, it can be argued, with their access to RPDs through
ordnance, have similar opportunities to atmos techs, even though the act
in and of itself is not exactly part of their duties. But compared to
the other job content they could be working with after they've completed
most of their gameplay loop, custom shuttle construction is a
substantially more active endeavor. And I know how much people complain
about late-game science content just being sitting around at a console
and making gamer gear. Roboticists can have a part to play in this too.
They can put their mech RCDs to a use other than 2D topdown Fortnite,
and with the shuttle database upgrade, they can help interested cyborgs
get in on the action.

Cargo is yet another department known for having significant amounts of
downtime during a considerable number of rounds. If every other
department has gone through their initial rounds of departmental orders,
and there isn't an active need for cargo to order lots of one thing or
another, cargo techs have little to do besides mail (at least on the
days where there **is** mail to deliver). Usually, if cargo techs do, in
fact, do something as a department when not presented with more pressing
duties, they order guns and other contraband. As funny as this is,
there's not a lot of variety in how this behavior manifests. With custom
shuttles, cargo can use their free time to plan, and execute, a unique
collective expression of design sensibilities, not limited by the size
and shape constraints of the cargo bay itself.

## Changelog

🆑 Y0SH1_M4S73R (with special thanks to Vect0r, whose original PR
inspired the implementation of these changes)
add: Shuttle blueprints, the tool used to construct and modify custom
shuttles. Print a set at a science, engineering, or cargo techfab after
researching Shuttle Engineering, or craft a crude set from the crafting
menu.
add: Shuttle blueprint database upgrade for engineering cyborgs,
printable from the Exosuit Fabricator after researching Shuttle
Engineering. A version of shuttle blueprints designed for use by
cyborgs.
add: Shuttle frame rods, usable to construct custom shuttles. Hand-craft
by using 5 rods on 1 titanium sheet, or by printing them at a science,
engineering, or cargo techfab after researching Shuttle Engineering.
add: Custom shuttle flight control and navigation boards, printable from
a science, engineering, or cargo techfab after researching Shuttle
Engineering.
add: Shuttle engine boards can be printed from a science, engineering,
or cargo techfab after researching shuttle engineering.
add: The shuttle engine supply pack is no longer locked behind the
purchase of the Build Your Own Shuttle kit.
add: Shuttle Construction Starter Kit goodie pack, containing a set of
shuttle blueprints, flight control and navigation console boards, and
two engine boards, can be purchased from cargo for 1200 credits.
Requires aux base access to purchase.
refactor: Shuttles now keep track of what areas are underneath each of
their individual turfs, so that the areas left behind on movement are
consistent with what they were beforehand.
refactor: Shuttle ceilings now place themselves down as baseturfs,
instead of only appearing if the turf above is open space.
/🆑

---------

Co-authored-by: vect0r <71346830+Vect0r2@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2025-03-12 16:46:40 -04:00
Y0SH1M4S73R cbc3350224 Custom Shuttles Redux: Allows for the construction of custom shuttles. (#88493)
## About The Pull Request

This incredibly detailed PR adds the ability to construct custom
shuttles, which function similarly to whiteships.

To construct a custom shuttle, you need the following items:
- Shuttle frame rods
These rods can be hand-crafted by using 5 rods on 1 sheet of titanium,
or printed at a sci/engi/cargo lathe after researching the Shuttle
Engineering techweb node.
Lattices built with these rods, and catwalks/floors built on top of
these lattices, are valid for shuttle construction.
- Shuttle engines
Did you know shuttle engines have boards that weren't normally
obtainable? Well the board for one specific engine type is now available
from the sci/engi/cargo lathe after researching Shuttle Engineering. Of
course, the old options remain. You can steal engines from other
shuttles, including escape pods (it's not like engines are strictly
necessary for *those* shuttles anyways). Alternatively, the shuttle
engine supply pack is no longer locked behind the purchase of the BYOS.
- Flight Control & Navigation Console boards
These boards are printed at the sci/engi/cargo lathe after researching
the Shuttle Engineering techweb node.
If built on a custom shuttle, it will automatically link to it, unless
the shuttle already has such a console.
If built on a turf that is valid for custom shuttle construction, it
will automatically link to any shuttle constructed from or expanded with
that turf.
- Shuttle blueprints
Standard shuttle blueprints can be printed at the sci/engi/cargo lathe
after researching the Shuttle Engineering techweb node.
A cyborg upgrade granting access to a shuttle blueprint database can be
printed at the exofab after researching the aforementioned node.
Crude shuttle blueprints can be crafted by hand with a sheet of paper
and either a rainbow crayon or 10 uses of a blue crayon or spraycan.

If Science won't research the tech, you can also buy a goody pack
containing a flight control board, a docker board, two engine boards,
and a set of shuttle blueprints for 1200 credits, if you have aux base
access.

A shuttle can be constructed atop any continuous region of turfs
containing a shuttle rod lattice or a catwalk/tile built upon such.
Currently, this region cannot intersect any area other than space,
lavaland, the icemoon, or the station asteroid. Preexisting custom areas
can be included in the construction of the shuttle, but only if every
turf in the custom area is valid for shuttle construction.

In the shuttle blueprint UI, you can toggle a visualizer to display
which turfs fulfill all of the aforementioned conditions.

The following video goes through the basic process of shuttle
construction.


https://github.com/user-attachments/assets/3283422e-a201-4978-972d-67527b5df4ee

The blueprint used to construct the shuttle will be its master
blueprint. The master blueprint can be copied to other blank shuttle
blueprints (or to engiborgs with the shuttle database upgrade), and
allows the holder to perform a christening ritual on the shuttle to
rename it.
If a shuttle's master blueprint ceases to exist, a blank blueprint can
be linked to the shuttle to become the new master blueprint, or an
existing blueprint associated with that shuttle can be promoted to the
master blueprint.

Once constructed, the following options are available from the blueprint
UI to modify it:
- Create Area
Convert a continuous open area of the shuttle into a new area with the
name written in the above text input. This operates very similarly to
regular area construction.
- Rename Area
Change the name of the area you're currently in to the name written in
the above text input.
- Expand Area
Add a continuous open area of the shuttle to the neighboring area
selected from the dropdown to the left. This operates like regular area
expansion.
- Expand Shuttle
Expand a shuttle with valid frame turfs as defined above. These turfs
must be physically connected to the shuttle.
- Remove Area
    Remove an area, giving its tiles to the default shuttle area.
- Cleanup Empty Space (implemented after the above video was recorded)
Removes all completely empty turfs from the shuttle. If all the turfs in
one of the shuttle's areas were removed, that area is deleted. If
absolutely no turfs of the shuttle remain, the shuttle itself is
deleted. Due to the ability for this action to delete the shuttle, only
the master blueprint can do it.

As mentioned above, the shuttle's master blueprint can be used to
christen its associated shuttle. To do this, fill a glass drink bottle
with some amount of reagents, then hit it against one of the shuttle's
walls from outside while holding the master blueprint. You will be
prompted to enter a new name for the shuttle. The variety of things that
can happen while inputting a new name can cause the christening rite to
fail in one of several humorous ways.

### Optional (Unless specifically requested by a maintainer) Todo's
- [x] A way for shuttle circuits to be obtainable without techweb nodes
- [x] A more convenient way to carry around shuttle engines or the means
to deploy them
- [ ] A shuttle construction guide available as a reference book
- [ ] Allow boards to be linked to shuttles before construction so they
can be used outside the shuttle

## Why It's Good For The Game

Shuttles have been part of the sandbox for an incredibly long time, but
their limited accessibility has rendered them the exclusive territory of
lucky space explorers or the few antagonists who get one off the bat
(nukies and pirates). Giving players the means to construct shuttles to
their liking opens up a variety of possibilities for gimmicks for antags
and non-antags alike.

Besides the applications for antaggery and crew-sided gimmicks, this
provides side content for several departments to engage with during the
relatively-frequent periods of time where they have little else to do as
part of their intended roles.

With respect to engineering, if the station isn't actively being
damaged, the supermatter is in perfect working order, and nobody is
clamoring for machine upgrades, engineers have little else to resort to
other than construction projects. While the BSA station goal provides an
incentive for engineers to construct dedicated rooms for the cannon, it
will not necessarily be available every round. Custom shuttles not only
provide such a construction project to pursue, but provide the rare
opportunity, as well as a very good reason, to set up an independent
power network, complete with its own power source.

While atmos techs have a lot to do with gas mixing and the crystallizer,
they rarely get the opportunity to set up working life support systems
outside of repairing the ones that get blown up. Custom shuttles will
frequently start with no air, and unless the design settled upon is an
open floor plan, it will have several independent chambers that cannot
so easily be profused with a proper airmix by just opening a canister.
Furthermore, if the air in a custom shuttle gets messed up, a proper
scrubber and distro network is a significantly less tedious method of
rectifying the problem than cleaning the air manually with portable
scrubbers and pumps.

Scientists, it can be argued, with their access to RPDs through
ordnance, have similar opportunities to atmos techs, even though the act
in and of itself is not exactly part of their duties. But compared to
the other job content they could be working with after they've completed
most of their gameplay loop, custom shuttle construction is a
substantially more active endeavor. And I know how much people complain
about late-game science content just being sitting around at a console
and making gamer gear. Roboticists can have a part to play in this too.
They can put their mech RCDs to a use other than 2D topdown Fortnite,
and with the shuttle database upgrade, they can help interested cyborgs
get in on the action.

Cargo is yet another department known for having significant amounts of
downtime during a considerable number of rounds. If every other
department has gone through their initial rounds of departmental orders,
and there isn't an active need for cargo to order lots of one thing or
another, cargo techs have little to do besides mail (at least on the
days where there **is** mail to deliver). Usually, if cargo techs do, in
fact, do something as a department when not presented with more pressing
duties, they order guns and other contraband. As funny as this is,
there's not a lot of variety in how this behavior manifests. With custom
shuttles, cargo can use their free time to plan, and execute, a unique
collective expression of design sensibilities, not limited by the size
and shape constraints of the cargo bay itself.

## Changelog

🆑 Y0SH1_M4S73R (with special thanks to Vect0r, whose original PR
inspired the implementation of these changes)
add: Shuttle blueprints, the tool used to construct and modify custom
shuttles. Print a set at a science, engineering, or cargo techfab after
researching Shuttle Engineering, or craft a crude set from the crafting
menu.
add: Shuttle blueprint database upgrade for engineering cyborgs,
printable from the Exosuit Fabricator after researching Shuttle
Engineering. A version of shuttle blueprints designed for use by
cyborgs.
add: Shuttle frame rods, usable to construct custom shuttles. Hand-craft
by using 5 rods on 1 titanium sheet, or by printing them at a science,
engineering, or cargo techfab after researching Shuttle Engineering.
add: Custom shuttle flight control and navigation boards, printable from
a science, engineering, or cargo techfab after researching Shuttle
Engineering.
add: Shuttle engine boards can be printed from a science, engineering,
or cargo techfab after researching shuttle engineering.
add: The shuttle engine supply pack is no longer locked behind the
purchase of the Build Your Own Shuttle kit.
add: Shuttle Construction Starter Kit goodie pack, containing a set of
shuttle blueprints, flight control and navigation console boards, and
two engine boards, can be purchased from cargo for 1200 credits.
Requires aux base access to purchase.
refactor: Shuttles now keep track of what areas are underneath each of
their individual turfs, so that the areas left behind on movement are
consistent with what they were beforehand.
refactor: Shuttle ceilings now place themselves down as baseturfs,
instead of only appearing if the turf above is open space.
/🆑

---------

Co-authored-by: vect0r <71346830+Vect0r2@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2025-02-23 17:18:43 +11:00