Commit Graph

23506 Commits

Author SHA1 Message Date
necromanceranne 0f849cad42 The effects of flashbangs become less severe the further away you are from the flashbang when it detonates. (#92294)
## About The Pull Request

<img width="691" height="207" alt="flashbang agony zone"
src="https://github.com/user-attachments/assets/a4cc5fdb-19dc-4849-8c4a-2db1ac0fe212"
/>

In this handy chart, you can now see the impact of the flashbang based
on location.

**Dead Center:** While our Powergaming RD for Testing Pruposes is immune
to this, being on this tile when the flashbang goes off still hard stuns
you for a really long time even if you have ear protection. The bang
doesn't do anything in a vacuum.

**Pointblank:** This works as it does live, going through protections.
Though the bang doesn't work in a vacuum.

**Sweetspot:** This works as it does live, stunning and knocking you
down, but not if you're protected from the flash and the bang. This is
currently set to 3 tiles.

**Stagger Zone:** If you're vulnerable to the bang, you are staggered
and drop your items, rather than stunned and knocked down. If you're
vulnerable to the flash, you are dizzied and drop your items, rather
than stunned and knocked down.

**Safe Zone:** Basically this is outside of the flashbang's effective
range. The effective range is the same as live (7 tiles).

## Why It's Good For The Game

Flashbangs are a pretty easy room wide attack that acts as a one of our
more extreme gear checks. You either are entirely safe from this, or you
probably are going to eat shit to something just tossed into your line
of sight. Either you need to be able to disappear from the room
immediately, or the flashbang gets you.

Without nullifying the room attacking effect too severely, as well as
the mass disarming capabilities of the flashbang, this at least helps
provide some ways to counteract flashbangs without absolutely needing to
have the protections. You can play around the stagger and dizziness more
easily than you can the stuns.

The vacuum stuff is mostly because being hit by a flashbang's bang in a
vacuum is a bit absurd. The flash still works, however.

## Changelog
🆑
balance: The effects of flashbangs become less severe the further away
you are from the flashbang.
balance: The bang effect of flashbangs cannot affect you in a vacuum.
The flash still functions in a vacuum.
/🆑

---------

Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
2025-08-19 22:39:39 -04:00
Thunder12345 20118ad747 Converts a bunch of time/delay vars to use time defines (#92495)
## About The Pull Request

Converts as many time vars expressed in deciseconds as I could find to
use time defines.

## Why It's Good For The Game

Makes these values neater and more readable.

## Changelog
🆑
code: Converted a lot of time-based variables to be expressed with time
defines.
/🆑
# Conflicts:
#	code/modules/clothing/head/hat.dm
#	code/modules/clothing/shoes/boots.dm
#	code/modules/clothing/suits/utility.dm
2025-08-19 22:38:55 -04:00
Leland Kemble e49cc16148 fixes "whispering" misspelling for the hallucination anomaly (#92526)
## About The Pull Request

#92525

## Why It's Good For The Game

fixes #92525

## Changelog
🆑

spellcheck: whispering now spelled correctly

/🆑
2025-08-19 22:36:01 -04:00
Krysonism 17006b220f NT researchers make shocking breakthrough in flux anomalogics! Tesla Cannon Resprite / Resound (#92031)
## About The Pull Request

![tesla_card](https://github.com/user-attachments/assets/27d0777b-3014-4785-b06e-f5e7fe0d5a36)

Resprites:

Tesla Cannon 
Tesla Cannon crafting kit

### New SFX / VFX

The tesla cannon now uses a new type of beam effect that randomly picks
sprite variants for each segment instead of a tracer.

This makes the arc look more dynamic and less distorted. 

Autofire guns can now choose to use a looping sound datum when firing.


![image](https://github.com/user-attachments/assets/b9c0c494-fce6-48bc-9d09-ea2e6257c86c)

#### Balance changes

The tesla cannon must now have its stock unfolded before firing, this
takes 1.5 seconds and makes the gun bulky.

It is still normal sized when folded, and folding it is instant.

### Bug fixes

Fixed a bug where looping_sound.stop() would fail to stop sounds.

The tesla cannon is an incredibly powerfu 

## Why It's Good For The Game

### My reasons for respriting

The old sprite was not bad, by all means but I had a few gripes with it.

* The old sprite does not incorporate the flux anomaly yellow colour.

* The old sprite looks a bit much like a real, professionally produced
sci-fi weapon,

* The old sprite looks pretty small for such a ultra high dps full auto
weapon.

* The old inhand is quite indistinct for something that can game end you
in like one second.

### My design

I think that anomaly items should be very mad science coded and, since
anomaly science is by definition a poorly studied field, they should
look more like prototypes created by a scientist rather than something
professionally made in a factory.

## Changelog

🆑
image: The tesla cannon has new sprites.
image: The tesla parts kit has new sprites.
image: The tesla cannon has a new shocking beam effect when firing.
sound: The tesla cannon has new sounds.
balance: The tesla cannon must now be unfolded to fire.
fix: looping sounds now stop playing sounds when commaned to do so.
/🆑
2025-08-19 22:35:58 -04:00
throwawayuseless 6bc67d2bc6 Emitter: The Emitting (#92327)
## About The Pull Request
Adds Diode Disks, installable disks that when fitted into an emitter can
change its function.
* Healing
* Stamina damage, and heals the SM slightly at the cost of internal
energy
* Traitor engi only explosive that damages and supercharges the SM if
used that way. Firerate is halved.
* Incendiary that slightly damages the SM but has lots of energy
* Sanity damaging one that improves SM psi coeff
* Magnetic item attracting one that improves SM mol absorption.
## Why It's Good For The Game
Fun and unique ways for Engi to use excess power or improve their SM
setups. Could also lead to neat engi inventions such as, say, a circuit
device that aims and fires a healing emitter at anyone nearby who is
damaged. Should also incentivize the researching of useful techs, hence
why important medium tier techs are what lock the different disks.
## Changelog
🆑
add: New Diode Disks which allow you to configurate emitters with
special functions.
add: New Engi & CE exclusive traitor item, a diode disk that causes an
emitter to create low radius explosions when it hits things. Note that
this will reduce the fire-rate of your emitter.
/🆑

---------

Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2025-08-19 22:35:55 -04:00
Thunder12345 6618c9d694 Misc File Purge: The Return (#92438)
## About The Pull Request

Purged several files inthe theme of misc.dm and broken the contents out
into better organised files.

Incidentally done some minor cleanup by removing an unused global list
referring to a string file that no-longer exists, and removing a useless
proc that replicated the behaviour of file2list().

## Why It's Good For The Game

See #60358 and all its successors

## Changelog
🆑
code: Reduced the number of files named misc.dm or similar by 14%.
/🆑
# Conflicts:
#	code/_globalvars/lists/flavor_misc.dm
2025-08-19 22:35:47 -04:00
SyncIt21 e1a722580a [NO GBP] Fixes empty vending canisters in some cases (#92538)
## About The Pull Request
- Fixes #92527
- Closes #92537

## Changelog
🆑
fix: product category vendors start out correctly filled & can be
refilled with cargo ordered vending canisters again
/🆑
2025-08-19 22:34:05 -04:00
MrMelbert 5f35bdee00 [MDB Ignore] Re-add hop console second ID slot (#92157)
## About The Pull Request

<img width="491" height="301" alt="image"
src="https://github.com/user-attachments/assets/a3b5b19f-edf5-4de9-9201-9cbfab9e8827"
/>

Mod computers with the access changing software installed have a
secondary ID slot once again. This ID slot doesn't contribute to access.
You can insert IDs into the slot with right click and remove them with
alt-right click.

Also removes the "New IDs and you" memo paper.

Also tweaks PDA on_deconstruct so contents are dropped on when they're
deconstructed with assembly.

Fixes #92151

## Why It's Good For The Game

Changing IDs is very unnecessarily clunky with the one slot. Insert hop
id, log in, remove hop id, insert crew id, change access, remove crew
id, log out.

We had it right back when we had two slots. Insert hop ID, insert crew
id, log in. It just works.

This also allows for mobile HoPs to change access without necessitating
removing their ID from their PDA.

Other changes:

The "New IDs and you" memo is very old. They haven't been new for 4
years now. I don't think anyone reads it and they served their purpose.

I found it odd that, if your PDA was melted or blown up, it would delete
your ID. If this is a hold-over from old PDA behavior feel free to let
me know but otherwise it seems sensible that it'd spit out the contents
as you would expect.

## Changelog

🆑 Melbert
qol: The access changing software (the HoP console) now has ID two slots
again (one for the HoP's id and one for the ID being changed). You can
insert IDs in the secondary slot via the UI or right click, and remove
them via the UI or alt-right click.
qol: If your PDA is destroyed via acid or bombs, your ID (and similar
contents such as disks) are spit out instead of being deleted
del: Deletes the "New IDs and you" memo in the HoP's office. They
haven't been new for 4 years.
fix: Engineering sub-tab in the access changing software no longer looks
messed up
fix: Fix reversed alt-click logic for mod pcs
/🆑
# Conflicts:
#	code/modules/modular_computers/computers/item/computer.dm
2025-08-19 22:32:57 -04:00
Ghom 7ff0a19883 Burned mess from culinary disasters is once again toxic. (#92394)
## About The Pull Request
When an item is cooked, reagents are generally cleared from the
resulting object and the reagents of the source object are transferred
to it instead. This means burned mess won't have its toxins when cooked,
locking you out of one or two chemistry recipes that require it while
also making the item generally not toxic at all.
So to fix it, we simply have to replace all or most of the consumable
reagents inside the burned mess with bad food, via component signals.

## Why It's Good For The Game
Fixing an issue with food and chemistry.

## Changelog

🆑
fix: burned mess made with a microwave, oven or griddle once again
toxins.
/🆑

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2025-08-19 22:30:38 -04:00
Lucy 7497b05ab1 lazily initialize /datum/element/weapon_description on examine (#92489)
## About The Pull Request

currently, `/datum/element/weapon_description` is added during every
single item init, even tho it only ever affects examines. i noticed
while looking at tracy traces downstream that it spent a bit much time
adding the weapon description, so why not just lazily initialize it
during examine instead?

direct port of the same thing from
https://github.com/Monkestation/Monkestation2.0/pull/7502

## Why It's Good For The Game

less wasted time during item init

## Changelog
🆑
code: Item weapon description elements are now initialized when first
examined, instead of immediately upon initialization.
/🆑
2025-08-19 22:30:35 -04:00
SSensum13 99d95aae62 Some ITEM_SLOT bitflags fixes. (#92441)
## About The Pull Request

This PR fixes wrong usage of bitflags in a few places, where instead of
bitfields lists were used.

## Why It's Good For The Game

It will help prevent problems that can be a thing in the future,
improving consistency of the codebase.
2025-08-19 22:30:33 -04: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 1b21175f3b Fixes 2 platform problems (#92475) 2025-08-19 22:23:38 -04:00
Axidy f4dd6aa0f4 Misspeled Kotra Wellington to correct Korta Wellington (#92485) 2025-08-19 22:23:37 -04:00
nevimer 81313b27a5 Merge remote-tracking branch 'origin/pupstream-25-08-08' 2025-08-15 17:36:16 -04:00
Roxy aa624df43b Apply suggestions from code review
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2025-08-12 18:09:12 -04:00
Waterpig a2a8f34691 [NO GBP] fish infusion and other mutant feature fixes (#92161)
fixes #92156

<img width="72" height="74" alt="image"
src="https://github.com/user-attachments/assets/607384a8-b0d1-4cdf-ac42-fdf071df1789"
/>

Fix bug

🆑
fix: Fish tails now correctly show up
fix: Mutant colors and other features now apply correctly in some cases
where they previously didn't
/🆑
2025-08-12 13:48:00 -04:00
Waterpig 55504da79d Datumizes DNA blocks, makes DNA cleaner in general (#92061)
Moves all the dna block handling onto singleton datums initialized
inside global lists, to make the handling dna less of a copy-paste mess
and make adding new blocks significantly easier. There is still some
work to be done in the copypaste department but ultimately that falls
under its own PR scope after the core refactor goes through. (Ill
probably do those but it will also be easier for everyone else as the
code is now significantly less of an eyesore)

Both features and identities have been tested through and through, and
seem to be working fine.

Also removed the reliance on weird hardcoded lookup tables for length,
and other similar things that just didn't make sense when I was passing
through DNA code. There's a lot more that fall out of scope for this
exact PR's goal however

I've been told the maintainers will love me for doing this

🆑
code: feature keys are no longer magical strings floating around the
codebase and use proper defines
refactor: DNA blocks are now handled with singleton datums.
/🆑
2025-08-12 13:48:00 -04:00
Thunder12345 198edf4966 Fixes CRAB-17 sometimes not draining funds (#92335)
## About The Pull Request

Fixes #92230

Fixes an issue where the CRAB-17 would sometimes fail to drain funds due
to being unable to send money to an account.

In `dump()`:

```
var/datum/bank_account/account = bogdanoff?.get_bank_account()
if (account) // get_bank_account() may return FALSE
	account.transfer_money(B, amount, "?VIVA¿: !LA CRABBE¡")
	B.bank_card_talk("You have lost [percentage_lost * 100]% of your funds! A spacecoin credit deposit machine is located at: [get_area(src)].")
```

If during any call of `dump()` our Bogdanoff takes off their ID, never
had one to begin with, or otherwise makes their bank account not visible
to `get_bank_account()` the `if(account)` check fails and money is never
drained.

Instead this PR adds an internal bank account to the CRAB-17, and any
time `dump()` fails to find a destination account the money is stored in
the CRAB-17's account. When destroyed any funds stored internally are
scattered across the floor in a pile of smaller holochips.

Incidentally adds documentation to the relevant code.

## Why It's Good For The Game

Players expect the CRAB-17 to drain funds even if they don't have an
account to send the money to. It's still preferable to have one so they
get the money, but smearing it across the floor still forces the crew to
fight over who gets it, and is more logical than sending it to the void.

(cherry picked from commit 6fa5cb32db)
2025-08-08 15:34:25 -04:00
SmArtKar 16aa15a136 Changes human name updates to be request-based instead of being automatically done every single tick (#92393)
## About The Pull Request

Changes human name to update whenever anything that could result in
their visible name changing occurs, such as changing IDs, equipping
gasmasks, picking potted plants, etc. Currently name updates occur every
``Life()`` tick and in a few "special" cases, which causes a lot of name
changes from sources such as equipment to not apply until the mob ticks,
and makes us waste a tiiiny bit of CPU time on name updates.
I've also slighly cleaned up human /Life() and made species'
``spec_life()`` not run when the mob is dead, as it was causing certain
unintended interactions, such as slimepeople regenerating blood while
dead.

## Why It's Good For The Game

Microoptimization, ensures that correct names are always used (in case
something could update their name but the mob hasn't ticked yet), plus
its just a cleaner implementation

(cherry picked from commit 87e1ef6f64)

# Conflicts:
#	code/game/data_huds.dm
2025-08-08 15:34:22 -04:00
necromanceranne 2a778cd510 Changes flux anomalies and gravity anomalies to be a little less horrible to deal with. (#92216)
## About The Pull Request

Flux anomalies, when they detonate, do a minor explosion and emit a wide
EMP pulse. This can cause a lot of damage in its own right, but it won't
syndicate bomb a random section of the station anymore.

Gravity anomalies

A) No longer have the click catching giant image floating above it
anymore.
B) No longer chain hardstuns you if you get too close every time it
ticks. Instead, it knocks you down. You can also avoid this effect by
wearing magboots.
C) Also doesn't throw literally every object in an area around it
straight into you every time it ticks. Instead, it does so only 20% of
the time.

Long range gas analyzers can now scan anomalies.

## Why It's Good For The Game

> Flux

A really annoying anomaly and one that I think has caused several
shuttle calls in its time. If you don't catch it, it blows up a segment
of the station entirely at random. This thing can almost be as bad as a
vortex in some contexts. A giant EMP can still be pretty destructive,
but it isn't quite at the same level as a giant explosion and I suspect
not shuttle call worthy. The minor explosion will at most trash a room.

> Gravity

I literally do not understand how anyone was supposed to disable these.
I literally gave up years ago even trying to catch them. They're
practically designed to kill you for trying. The click catching warp
effect not only looked kind of lame, but it just straight up stopped you
being able to disable them (mouse opacity doesn't work here and I tried,
it redirects clicks to other tiles for some godawful reason, probably
byond weirdness). You had to spam click a LOT to even try.

On top of that, it just stuns you? It literally just stuns you if you
approach it? And magboots can't help you to avoid that? What the fuck
are you _supposed_ to do to avoid that?

Also it can just instantly kill you if you approach it and it gathered
enough stuff because it will just keep slapping you with every loose
object within a radius around itself? At speed 5 so things that don't
normally embed will embed?

So it mulches you for approaching it, chain hardstuns you for
approaching it, and it deliberately intercepts clicks in a completely
unintuitive fashion even if you do manage to click it. You need to
approach it to stop it. A recipe for disaster. Fuck that.

> Analyzer

It was annoying this wasn't able to do this already!

## Changelog
🆑
balance: Gravity anomalies can be properly clicked. Rather than chain
stunning you, the anomaly will knock you down. You can avoid the
negatives of gravity anomalies by wearing magboots. (Yes, it did not
really protect you until now)
balance: Flux anomalies detonate in a much smaller explosion, but
release a wide EMP as well.
balance: Long range gas analyzers can now scan anomalies.
/🆑

(cherry picked from commit 2b0a824132)
2025-08-08 15:33:41 -04:00
panvxv 2ae097d92d Chaplain's armors fixes and tweaks - matching body parts covered with coresponding sprites (#92446)
## About The Pull Request
Matching body parts covered of chaplain's armor to sprites. I think a
leftover from times when those armours where subtype of riot armour.

<img width="75" height="69"
alt="474691928-183826a3-79e5-431e-aed5-b9a02a2c382e"
src="https://github.com/user-attachments/assets/072228c8-6b04-4aef-b656-aae757af6a7a"
/>

Adept armor was covering arms, hands and feet yet it sprite wasn't
covering those parts. In exchange gave bone bracers to the kit so it
wasn't the worst choice.
<img width="66" height="77" alt="obraz"
src="https://github.com/user-attachments/assets/f3b3ab73-df07-4dc9-890a-47122163f3f5"
/>

Same for Divine Archer coat. It's unique boots and bracers now have
armor. Boots provide less protection to keep the archer comfortable
while on the move (RP reason). (Real reason: so armor from coat and
boots don't give too much legs protection)

## Why It's Good For The Game
Makes Chaplain's armor less confusing. No exposed arms with secret 50%
melee resist. Exposed limbs are actually exposed.
Profane Kit getting something unique - really strong helmet against
melee.
## Changelog
🆑
add: Bone bracers to Divine Adept kit
qol: Adept robes doesn't cover arms, hands and feet as to match the
sprite
qol: Ancient armour doesn't cover hands as to match the sprite
qol: Divine Archer coat doesn't cover arms, hands and feet as to match
the sprite
qol: Divine Archer bracers now have the same armor as Divine Archer coat
balance: Divine Archer boots have their own unique armor
/🆑

(cherry picked from commit 255801a668)
2025-08-08 15:32:33 -04:00
Rhials 86f0340909 The Chain of Command can now give a speed boost by whipping other players (#92387)
## About The Pull Request

The Chain of Command can now hasten other mobs when right-click
attacked.

https://github.com/user-attachments/assets/b6c2185e-0edb-45d5-a015-3c7e0a684ffc

It's not a very ample speed boost, but it's enough to make it worth
taking into battle if you have friendlies to buff. Lasts 7 seconds.
Refreshes on hit. You cannot whip yourself.

This only applies to the Chain of Command, not whips nor tailwhips.
There's only one of these bad boys on the station. Use it well.
## Why It's Good For The Game

The chain of command is nice as a ceremonial weapon, but it doesn't
actually see any use in combat. Ever.

Instead of just making it do more damage (boring), I wanted to make it a
support tool. The captain (its owner) should usually be in the backlines
of a fight, after all.

Support tools gives less combat-focused players (or pacifists) a way
contribute meaningfully to a team fight (nukies, revs). Not equipped to
fight the blob with the rest of the team? You can use this to buff your
allies without putting yourself within the blob's reach.

<details>
<summary>The EVIL secret reason I think it's good for the
game...</summary>
It gives people some mechanical incentive to steal the chain of command
for once >:)
</details>

## Changelog
🆑 Rhials
balance: The Chain of Command will give a speed bonus to other players
when right-clicking them.
/🆑

(cherry picked from commit 70d36ada20)
2025-08-08 15:31:16 -04:00
SmArtKar 53f198a61d Implements (a poor imitation of) speculars, improves/fixes unrestricted access overlay lights (#92272)
## About The Pull Request

Implements a poor imitation of specular surfaces by encoding "shinyness"
into blue channel of emissive overlays, which allows some pixels to be
more illuminated than others (by applying lighting multiplied by
specular mask onto them a second time)
This means that hazard vests, engineering coats, security jackets and
firefighter suits no longer outright glow in the dark, but instead
amplify light so even the tiniest amounts make them highly visible. I
made a pass through all of our emissive overlays and converted ones that
made sense into bloom-less/specular ones.

https://github.com/user-attachments/assets/2167e26e-f8b8-42d7-a67c-dfc643e1df29

I've also converted unrestricted access airlock overlays into overlay
lights instead of ABOVE_LIGHTING overlays, so they should no longer look
jank or catch people's clicks.

<img width="297" height="262" alt="dreamseeker_LovPHZ7xHQ"
src="https://github.com/user-attachments/assets/1bf4d7b8-219a-41ed-aee9-6cdc41803e21"
/>

Turns out that windoors had incorrect icon states assigned to theirs, so
I fixed that too - they should show up again after god knows how many
years.

## Why It's Good For The Game

~~Shiny lights make my moth brain go happy~~
Neat visual effects that look more believable than neon glowing stripes,
and airlocks no longer have inflated hitboxes with extremely weird
visuals.

## Changelog
🆑
add: Added specular overlays - some items like hazard vests or
firefighter suits no longer outright glow in the dark, but instead
amplify existing light to shine brighter than their surroundings.
add: Redid unrestricted access airlock overlays to look less bad
fix: Fixed unrestricted access overlays not showing up on windoors.
/🆑

(cherry picked from commit 3d730689f4)
2025-08-08 15:31:15 -04:00
SmArtKar 1db39e2a64 Fixes topdown emissives/emissive blockers and blood trail rendering (#92430)
## About The Pull Request

Fixes this

<img width="983" height="591" alt="zen_Mhqh2OqiU4"
src="https://github.com/user-attachments/assets/b3275052-1b24-404b-82bc-a4c8e88bdbcf"
/>

This code is mildly bad, but this is the best way we can fix FLOAT_LAYER
topdown emissives/blockers rendering ontop of everything else.

Also added logging/unit testing for blood trails spawned outside of
holders, mappers can use holders to spawn trails (which is the right way
to add them to your maps)

## Changelog
🆑
fix: Fixed blood/glass floor glow going over objects
/🆑

(cherry picked from commit ea0fa299c4)
2025-08-08 15:31:12 -04:00
Arturlang 1c0ac21cb4 Fixes the issue of usr pointing to admins by making Trigger pass down clicker (#92354)
## About The Pull Request
Fixes the issue of usr pointing to admins by making Trigger pass down
clicker, as usr is fucky and can be passed down by other unrelated
procs. Fun.
Added the clicker arg to all usages of Trigger as well
Also changes isobserver check in antagonist ui_act code that prevents
observers from clicking UI's instead to check if the ui.user is
owner.current
## Why It's Good For The Game
Fixes admins giving heretic to people opening the heretic UI for the
admin instead

(cherry picked from commit 0bc42d6940)
2025-08-08 15:31:08 -04: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
Ghom a058207247 replaces the health variable for fishes with integrity (#92192)
## About The Pull Request
Because fish is an item, it inherits the use of integrity from objects,
however it also has its own health variable. For consistency, ~~damaging
its integrity should also lower its health and healing it should also
recover its integrity. Fish has a max integrity that's double its
health.
I've also renamed `adjust_health` to `set_health` since it doesn't
adjust the health by the provided value but sets it to said value.~~
I've scrapped the latter to instead use integrity.

## Why It's Good For The Game
A small bit of consistency. If you shoot a fish with a laser gun,
wouldn't it die?

(cherry picked from commit 940d73aeae)
2025-08-08 15:29:14 -04:00
SyncIt21 d4ac4824f8 Fixes closets not reusing images for clients (#92408)
## About The Pull Request
- Fixes #92214
- Fixes #92407

Whenever a mob with a client attached to it steps into a closet we
create 2 images(background & contents image) to display to that viewer

https://github.com/tgstation/tgstation/blob/4ee0793ecd23876994fa125e4e112a13a6f44455/code/game/objects/structures/crates_lockers/closet_see_inside.dm#L87

We are meant to reuse these images for multiple clients however this
proc does not check if we already made an image before. It just creates
a new one for every client(and we don't keep track of those previously
creates images) so we loose track of all sanity.

But now we make sure we make this image just once to reuse across
multiple clients

## Changelog
🆑
fix: You can no longer see parallel universes when 2 or more people gets
shoved into closets.
code: cleaned up closet see through code. It's documented & slightly
faster performance wise
/🆑

(cherry picked from commit c6dcc304ce)
2025-08-08 15:29:13 -04:00
SyncIt21 796bb41477 Merges copy_to() into trans_to() for reagent holder (#92410)
## About The Pull Request
Merges `/datum/reagents/proc/copy_to()` ->
`/datum/reagents/proc/trans_to()`. Added a parameter `copy_only` to
indicate we want a copy operation

## Why It's Good For The Game
- Less code to maintain
- All the functionality of `trans_to()`[logging, transferring single
reagent, expelling reagents from stomach, etc] now applies for copying
reagents as well which was missing a lot of it, so we have consistent
behaviour

## Changelog
🆑
refactor: code for copying reagents has been refactored. Please report
bugs on github
/🆑

(cherry picked from commit a1d27e384d)
2025-08-08 15:29:11 -04:00
SmArtKar 43349d99ba Fixes recovered crew bodybags being foldable while there's a "corpse" inside (#92423)
## About The Pull Request

Closes #92356
Also fixed prisoner envirobags being foldable while strapped despite
showing a failure message.

## Changelog
🆑
fix: Fixed recovered crew bodybags being foldable while there's a
"corpse" inside
/🆑
2025-08-04 20:53:41 -04:00
Thunder12345 e7c25d4c40 The Glitterening (#92226)
## About The Pull Request

Adds a number of new capabilities to glitter.

- It can be any colour.
<img width="657" height="398" alt="image"
src="https://github.com/user-attachments/assets/60e80c04-8eee-470c-8953-47f6eda9f83e"
/>

- It can be made in chemistry and dyed by combining it with acetone and
other reagents to give it the average colour of the non-glitter,
not-acetone reagents.
- Multiple colours can be mixed into one reagent datum, randomly
depositing a colour from those in the datum on the floor.
<img width="554" height="507" alt="image"
src="https://github.com/user-attachments/assets/9cc7d1d5-9bec-4b28-af06-310ffb24de49"
/>

- Anyone with glitter reagent in them will cough glitter onto the floor
- Glittery crates will leave a trail of appropriately coloured glitter
when moved
<img width="960" height="259" alt="image"
src="https://github.com/user-attachments/assets/71cc1176-23f9-4ae7-b500-1744b752c014"
/>

Resprited glitter to support these changes and make it not look like gas
(or ass).

## Why It's Good For The Game

It looks cool and raises the bar for chemists maximally pissing off the
janitor as they fill a room with multicoloured glitter and all the
occupants run off to cough more up all over the surrounding area.

## Changelog
🆑
add: Glitter can now be made from plastic polymers and aluminium.
add: Plastic polymer can be made at any temperature, and then heated to
produce sheets.
add: Glitter can now be made any colour, mix 10 units each of glitter
and acetone to change its colour to that of the other reagents in the
beaker.
add: Mixing different colours of glitter will cause a random selection
of those colours to appear on the floor when released.
add: Being exposed to glitter in reagent form causes you to cough up
more glitter onto the floor
add: Dragging glittery crates will now spread a trail of glitter and
angry janitors behind them.
image: Added new glitter sprites (that don't look like gasses)
/🆑
2025-08-04 20:53:39 -04:00
Aliceee2ch cc1d778418 Fixed the nukies outpost chemical locker not having beakers inside of the beaker box (#92365)
## About The Pull Request

title

## Why It's Good For The Game

because you pay tc for chemical room + not intended

## Changelog

🆑
fix: Fixed the nukies outpost chemical locker not having beakers inside
of a beaker box
/🆑
2025-08-04 20:53:36 -04:00
Maximal08 601e8d8f6f Computer and machine construction qol (#92323) 2025-08-04 20:53:35 -04:00
necromanceranne 566e9be0c9 Non-workout sources of athletics experience diminishing returns on experience gain (#92206)
## About The Pull Request

For instances of athletics gains that don't involve workout
machinery/granting the exercised status effect, those sources of
experience suffer from increasing diminishing returns as the person
gains athletics levels.

## Why It's Good For The Game

While I still like that this lets more people engage with athletics
across a round, it did unfortunately trivialize getting higher levels of
athletics by doing some relatively banal activities that took really no
preparation to accomplish. The intended method of getting experience
should be the workout equipment, and so at a certain point these sources
of experience should stop granting free levels.

If someone refuses to interact with the workout mechanics and only
chooses to use these alternative methods, then uh....I guess all the
more power to them but they'll be there for a while.

## Changelog
🆑
balance: Athletics experience gain from non-workout sources, such as
climbing ladders, hopping tables and rope climbing, experience
diminishing returns as you gain athletics levels. To reach legendary
fitness, you really should hit the gym.
/🆑
2025-08-04 20:53:34 -04:00
SmArtKar 78908f40a3 Removes forced tint from NVGs (#92322)
## About The Pull Request

Partially reverts #84594, removing forced tint from night vision goggles
(if anyone for some reason wants to experience it again, they can toggle
it via alt click like it could be done before the [aforementioned
PR](https://github.com/tgstation/tgstation/pull/84594))

Approved by Ghom (the original PR author)

## Why It's Good For The Game

NVG tint is a pretty sizeable accessibility issue, as forced screentint
can easily cause eye strain if they're used for prolonged periods of
time, being especially bad for blue-tinted NVGs. They're already locked
pretty deep down the techweb, and this change just made everyone avoid
them. If we need to make tintless variants of them for every single
antag and special role (and bitrunners, lol), we maybe shouldn't have
added the tint in the first place.
2025-08-04 20:53:32 -04:00
LemonInTheDark 38f927b658 Render plate code cleanup, moves game effects up to the lit game plate (#92357) 2025-08-04 20:53:31 -04:00
Ghom ec360cf326 [NO GBP] Adds unit test checks for materials and processable comp & co. (#92194) 2025-08-04 20:53:30 -04: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
LemonInTheDark 9bf9c875bb Fixes infinite loop in closet resist code (#92355) 2025-07-30 17:37:44 -04:00
dj-34 6949f8c798 Remove duplicate inhand icons in banners code (#92316)
Co-authored-by: dj-34 <20109643+dj-34@users.noreply.github.com>
2025-07-30 17:37:41 -04:00
Joshua Kidder ff7ee72146 Ore silo logging & access refactor; UI updates, single-target bans, more robust logging information, more robust access control (#91142)
## About The Pull Request

# More robust logging
## Ore silo logs have now been refactored in the UI to display:
- Number of sheets is now the relative unit when displaying a given log.
- Instead of `100 iron` being displayed when removing one sheet, it just
says `1 iron`
- Instead of `25 iron` being displayed when using a quarter sheet, it
just says `0.25 iron`
- All information from ID_DATA(log_user) now sent to tgui backend
    - The items rendered to ore silo users are:
	- Name on ID, job on ID
- If the ID's bank account (if one is registered) is one of the ore
silo's banned users
- If the user for a given entry was wearing a chameleon card, they will
always appear unbanned
- NOTE: The bank account ID # is (currently) not shown to players using
the ore silo.
- Full log information is rendered within a dropdown; the dropdown
one-liner shows
  - Action (deposit, eject, item created)
- Amount (deposit/eject? amount of material used. item created? number
of items created.)
- Either name of material (if deposit/eject) or the name of items
crafted
- The name of the user who performed a given operation (if wearing an
unbanned ID) or ID_READ_FAILURE (if ore silo ID requirement has been
disabled and the person is not wearing an ID)
  - As name, but instead, the job of the ID (or ID_READ_FAILURE)


![image](https://github.com/user-attachments/assets/bb992a81-8db3-4a92-ad3a-917239fc407a)


# Access control improvements
## Single-user bans
- Anyone with QM access (not silicons) can now ban/unban a user from a
given log from using the ore silo
    - Bans are associated to bank account IDs.
        - Wearers of chameleon cards bypass any ban restrictions.
	- Anyone with QM access on their worn card bypasses ban restrictions.
	- Silicons bypass ban restrictions.
- QM access requirement is removed if the ore silo is emagged.
- Silicons can ban/unban people if the ore silo is emagged.
## Worn ID requirement
- Enabled at roundstart, can be disabled by anyone with QM access (not
silicons)
- If enabled, you must be wearing an ID with a bank account associated
to it to use ore silo materials.
- Wearers of chameleon cards bypass this restriction (so-called ID
requirement free thinkers wearing chameleon ID cards)
- QM access requirement to toggle removed if emagged.
- Silicons can toggle this on/off if the ore silo is emagged.
# Access control radio notifications
## Access control operations reported on the radio
- Any operations for access control are reported on radio channels.
    - Currently, the policy is always the default.
- In the future, the ore silo UI will allow the quartermaster to modify
what operations are reported on what channels (petty QM broadcasting ban
reports on Common)
- Current default policy:
    - Reported on COMMON channel:
- Anyone but the Captain attempts to ban someone with QM access from the
ore silo (nice try dumbass)
	    - Ore silo ID requirement toggling
	- Reported on COMMAND channel:
	    - Common channel reports.
		- Per-user banning/unbanning.
		- Anyone without QM access attempts to ban/unban someone.
		- Anyone without QM access attempts to toggle the restriction for ID.
		- Silicons attempting to tamper with the ID requirement restriction
		- Silicons attempting to tamper with the ban/unbanned user list
- A ban attempt failing because a given log entry had a user with no
bank ID.
	- Reported on SECURITY channel:
	    - Common channel reports.
		- Per-user banning/unbanning.
		- Anyone without QM access tampering with the silo.
	- Reported on SUPPLY channel:
	    - Command channel reports.
- Reporting to the radio is disabled if the ore silo is emagged.
## Modifications to the remote_materials component
- Strictly encompass the behavior for connecting/disconnecting ore silos
to material receptacles (RCDs, machines, etc) into procs on the
component, instead of handling it all over the place

## Why It's Good For The Game

Gives people with ore silo access more fine grained control over ore
silo use without having to resort to heavy-handed fabricator lockouts

Makes the logging on the ore silo more robust so we can make sure we
kill the right Roboticist for using all the materials

Offers an avenue for sidestepping all of this with a chameleon card or
emag if a given traitor (organic or otherwise) is particularly opposed
to DRM mats.



https://github.com/user-attachments/assets/effd2c63-509c-4d33-992f-837a0d62b935



## Changelog
🆑 Bisar
add: The ore silo has had a significant expansion to its logging
capabilities.
add: The ore silo now allows any ID with Quartermaster access (NOT
SILICONS!) to ban/unban specific users from the silo.
add: The ore silo now has a toggle (on by default) that a user of ore
silo materials has an ID with an associated bank account. This can be
toggled by anyone with Quartermaster access (NOT SILICONS!)
add: NanoTrasen discounts any reports that Syndicate contraband
(cryptographic sequencer, agent card) can be used to circumvent any
protocols instituted on the ore silo access control routines.
add: The ore silo now announces operations to ban/unban users and
enable/disable ID requirements on radio channels (check the Github for
actions reported to what channels.)
add: The tgui interface for ore silo log entries has been reworked.
refactor: The code for logging a given access to ore silo materials has
been significantly refactored.
qol: Ore silo log entries now display materials spent in terms of sheets
rather than the obfuscated absolute-units previously display (1 iron
ejected instead of -100 iron, 0.25 used in a craft instead of -25 iron)
/🆑
2025-07-30 17:37:38 -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
DresserOnFire ca12d8c5b1 Fixes Infinite wanted poster generation (#92169)
## About The Pull Request

fixes #90586

## Why It's Good For The Game

the poster isnt _that_ wanted

## Changelog

🆑
fix: Wanted posters now correctly return to your inventory if you move
while placing them
/🆑

---------

Co-authored-by: Xerseon <138307753+Xerseon@users.noreply.github.com>
2025-07-30 17:37:36 -04:00
Joshua Kidder e2527138c8 Climbing hooks; usage limit removed, can now climb up OR down, Syndicate climbing hook is much much faster than normal ones (#92191)
This does as the title says; climbing hooks are no longer limited-use,
and have had their functionality updated to where you can use them to
climb both UP and DOWN. As well, the Syndicate climbing hook has a
climbing speed of 0.75 seconds per movement, in contrast to the 4 second
speed of the emergency climbing hook.
Climbing hooks are a cool idea for people experimenting with multi-z,
either in the game or in map design, but for some reason we gimped them
with a hard and stingy usage limit. The syndicate climbing hook having
an extremely fast speed enables you to do cat burglar activities before
scuttling away and cackling evilly.

🆑 Bisar
add: Climbing hooks can now be used to climb UP or DOWN, instead of only
up.
qol: Climbing hooks no longer have a limit on their number of uses.
balance: Syndicate climbing hooks now have a speed of 0.75 seconds to
climb, in comparison to the standard 4 seconds for emergency hooks.
fix: Fixed a runtime in climbing hooks when you would try to climb down.
/🆑
2025-07-30 17:37:35 -04:00
Nick fb2bdd2af7 Removes the ralsei plushie (#92311)
## About The Pull Request

Removes ralsei plushie

## Why It's Good For The Game
Its a lazy sprite forced into the game
+ i killed him


https://github.com/user-attachments/assets/a678fa08-0882-4e24-86df-942e7adfda84



## Changelog

🆑 Ezel
del: Removes ralsei plushie
/🆑
2025-07-30 17:37:35 -04:00
Fikou ec96a7dd2c Makes mech removal crowbar remove mech sleeper patients (#92281) 2025-07-30 17:37:34 -04:00
Bloop e3f30b5da8 Fixes manifest hard dels (#92283)
## About The Pull Request

<img width="378" height="199" alt="1eSxYbsh0e"
src="https://github.com/user-attachments/assets/e8a658ca-c1c4-48fe-bb51-c77c85a7f824"
/>

Noticed some hard dels here, does some light refactoring/code
improvement to ensure that doesn't happen.

Crates shouldn't really be owning a hard ref to the manifest in the
first place since they are detachable. Removes some code duplication in
favor of calling `tear_manifest()` which has the safety check to prevent
`forceMove()`ing a qdeleted manifest out of nullspace.

## Why It's Good For The Game

Less server hiccups.

## Changelog

Nothing players will notice besides less server hiccups.
2025-07-30 17:37:33 -04:00
FalloutFalcon 0b677b689a generic parent type for both sabre sheaths (#92300)
## About The Pull Request
puts both the grass and normal sabre sheath types under a shared parent
type for shared behavior.
considered subtyping the storage datum but it seemed overkill. can do if
requested.
## Why It's Good For The Game
less copy paste. good if someone wants to add a clay-more sheath for
similar (believe that exists somewhere downstream), would have done it
myself but no sprites.
## Changelog
N/A
2025-07-30 17:37:32 -04:00
grungussuss b8fc52880a hand items have no attack cooldown with northstar gloves (#91888)
## About The Pull Request
closes https://github.com/tgstation/tgstation/issues/84319
## Why It's Good For The Game
consistency
## Changelog
🆑
fix: all hand items will now have no cooldown when used with northstar
gloves, including circle hand
/🆑
2025-07-30 17:37:31 -04:00