Commit Graph
124547 Commits
Author SHA1 Message Date
tgstation-ci[bot]andGitHub 3dfdcca182 Automatic changelog for PR #96007 [ci skip] 2026-05-09 01:59:29 +00:00
Leland KembleandGitHub 250f6e5115 SyndEye PDA app tracking successfully tracks (#96007)
## About The Pull Request

Inversion on early return, tracks only if the target isn't on cams. 

## Why It's Good For The Game

fixes #95935

## Changelog
🆑

fix: SyndEye PDA app tracking tracks successfully

/🆑
2026-05-08 21:59:04 -04:00
tgstation-ci[bot]andGitHub 2faf5cdbe0 Automatic changelog for PR #95956 [ci skip] 2026-05-09 01:52:00 +00:00
MrMelbertandGitHub 1945df3929 Spacers are slightly taller again (Reverts "Reverts Makes Spacers Taller") (#95956) 2026-05-09 11:47:23 +10:00
tgstation-ci[bot] 690f27c1be Automatic changelog compile [ci skip] 2026-05-09 00:00:26 +00:00
Aliceee2chandGitHub f13d479dcf scapel (#96004) 2026-05-08 18:25:23 -04:00
tgstation-ci[bot]andGitHub f991f7ed90 Automatic changelog for PR #95720 [ci skip] 2026-05-08 19:40:21 +00:00
SmArtKarandGitHub 119c1e9ccc Adds a priority targeting framework, and priority targeting to mining mobs (#95720)
## About The Pull Request

Introduces a new targeting priority strategy system for basicmob AIs,
which allows controllers to decide which mob to prioritize over others.

Mining mobs will now focus on the NODE drone unless hit, and will pursue
the attacker for 25 seconds before dropping the aggro. They also get
increased aggro if you've attacked other mobs in their view recently,
and after a few hits will have enough aggro to swap to you from the NODE
drone. Ashwalkers get a reduction in aggro because they live there.
Legion broods and brimdemons will immediately target anyone who attacks
their allies rather than waiting for multiple hits. Broods also now
inherit their parent's targets and retaliation/reinforcements lists.


https://github.com/user-attachments/assets/6baaba8a-8b3c-4b2f-ae8b-842f0b1f2b6d

#### This is a bounty for ArcaneMusic

## Why It's Good For The Game

Makes vent defense mob behavior more predictable and easier for players
to manipulate, allowing them to draw aggro from the NODE drone should
make vents more engaging and less of an AI rng fest

## Changelog
🆑
add: Mining mobs now use priority when choosing their target,
prioritizing NODE drones over miners who haven't attacked them or their
allies
/🆑
2026-05-08 20:40:01 +01:00
tgstation-ci[bot] 7579ccc8c2 Automatic changelog compile [ci skip] 2026-05-08 06:00:30 +00:00
tgstation-ci[bot]andGitHub 72cea42463 Automatic changelog for PR #96012 [ci skip] 2026-05-08 05:13:24 +00:00
Y0SH1M4S73RandGitHub b9618d9cc3 [I ded] Xenomicrobes and Nanomachines are maintenance pill only (#96012)
## About The Pull Request

See title.

## Why It's Good For The Game

These reagents are far too disruptive to the round to allow to be
produced in the vast quantities and with the distribution vectors that
botany offers. The amounts of them that can be procured through natural
maintenance pill spawns and the silver-extract-exclusive food items
containing them is still acceptable.

## Changelog

🆑
balance: You can no longer get Xenomicrobes and Nanomachines from botany
mutations.
/🆑
2026-05-08 07:13:05 +02:00
tgstation-ci[bot]andGitHub d0114384d9 Automatic changelog for PR #95850 [ci skip] 2026-05-08 04:40:57 +00:00
TheRyeGuyWhoWillNowDieandGitHub 42268e9b20 modernizes granibitaluri (#95850) 2026-05-08 00:40:34 -04:00
tgstation-ci[bot] c404a2081a Automatic changelog compile [ci skip] 2026-05-07 18:00:34 +00:00
tgstation-ci[bot]andGitHub b6b8bbcea4 Automatic changelog for PR #95985 [ci skip] 2026-05-07 15:13:33 +00:00
MrMelbertandGitHub 746494b888 Always update hair and eyes on coverage change, use facial hair color (#95985) 2026-05-07 17:12:49 +02:00
tgstation-ci[bot] 19e9f1e358 Automatic changelog compile [ci skip] 2026-05-07 12:00:29 +00:00
tgstation-ci[bot]andGitHub 21579ab5e6 Automatic changelog for PR #95955 [ci skip] 2026-05-07 09:21:10 +00:00
SmArtKarandGitHub 940d91bb62 [MDB IGNORE] Adds new features and tiles for lavaland biomes (#95955)
## About The Pull Request

Adds new floor types and natural decor to both Siderite and Shale
biomes, as well as makes flora and fauna spawns differ between said
biomes.

<img width="1216" height="997" alt="dreamseeker_uIv1OgVkpD"
src="https://github.com/user-attachments/assets/327d9caa-a58c-4d70-acbe-477da69b4d71"
/>

---

Basalt biome now spawns more legions and goliaths, but less watchers and
no brimdemons. You can rarely find new volcanic pore rocks which will
spew out lava when destroyed.

<img width="505" height="361" alt="dreamseeker_TA9rXzOgad"
src="https://github.com/user-attachments/assets/fb19a60a-c927-441b-abad-161ce5022a60"
/>


Siderite biome has a lot of rock formations and may sometimes spawn new
stalagmites. You can expect to see a ton of bileworms, raptors and
watchers there.


<img width="747" height="613" alt="dreamseeker_uZgRX8qqh3"
src="https://github.com/user-attachments/assets/d356f1c6-371a-4b8b-899b-470edb0d2790"
/>


Shale is full of lobstrocities, goldgrubs and brimdemons, and home to a
new glowgrowth "plant" - colony of bioluminescent fungi growing on
natural air vents.

<img width="274" height="220" alt="dreamseeker_EtxiS4X9M7"
src="https://github.com/user-attachments/assets/cbefba67-b618-4a65-ad12-9ee5182b650c"
/>


While it cannot be planted by itself, it contains luminescent fluid
inside which will grant whoever eats it minor night vision as long as it
is inside their bloodstream (as well as cyan-glowing eyes)

---

Ruins now properly respect their biome's rock (and now floor as well)
type, since it was broken for some of them previously.

<details>
<summary>More images under the dropdown</summary>

<img width="1216" height="997" alt="dreamseeker_fpXXV0Rt3D"
src="https://github.com/user-attachments/assets/fa790ca1-7045-490e-bcb2-c1f9da9f277c"
/>
<img width="414" height="303" alt="dreamseeker_l6E8S2fzCe"
src="https://github.com/user-attachments/assets/8b10dcca-c546-41ce-9363-a12b0f225881"
/>
<img width="784" height="587" alt="dreamseeker_RUWQo0unNp"
src="https://github.com/user-attachments/assets/d7364abc-ec68-4daf-b3cb-a03b8ba7e5de"
/>
<img width="1216" height="997" alt="dreamseeker_zoltABvkBw"
src="https://github.com/user-attachments/assets/324f50f8-83c9-4451-8eff-33ebf81c1d0d"
/>
<img width="1125" height="571" alt="dreamseeker_ky5qvl2XtC"
src="https://github.com/user-attachments/assets/ff08d22f-fc15-4961-b76e-7c10d7814096"
/>

</details>

Credit for original versions of new flora/feature sprites to
SentryPrimis on the /tg/station discord

## Why It's Good For The Game

Makes biomes more distinct and interesting, as well as gives them unique
atmosphere, since right now they only differ in rock type and mineral
distribution.

## Changelog
🆑 SmArtKar, SentryPrimis
add: Siderite and Shale lavaland biomes now have unique floors, as well
as flora, features and fauna!
fix: Fixed some ruins generating with default basalt walls instead of
their biome's walls
/🆑
2026-05-07 10:20:43 +01:00
tgstation-ci[bot] 60c5dc15ed Automatic changelog compile [ci skip] 2026-05-07 06:00:34 +00:00
tgstation-ci[bot]andGitHub 4220ef63ed Automatic changelog for PR #95731 [ci skip] 2026-05-07 04:14:29 +00:00
ArcaneMusicandGitHub 283fdd5290 Adds the E-2 Earthcracker, a traitor tool for premeditated sabotage. (#95731)
## About The Pull Request

Adds a new traitor item, the E-2 Earthcracker. The Earthcracker is a
handheld sabotage device that you can deploy onto the ground in order to
deliberately create a weakpoint on that location.

As a recap, weakpoints can be exploited with a sufficiently large enough
explosive in order to create a chain of cracked turfs from it's
location, randomly breaking floors and walls, as well as attempting to
create new weakpoints that will allow for more of the hull to break
down. Weakpoints, if discovered, can be welded to taped up to repair
them using sticky tape.

The earthcracker creates a longer, and larger weakpoint than the kind
that spawn naturally. However, to use this subtly, you'll need to hide
the weakpoint created, as well as clear away the spent earthcracker by
using a wrench.

Practical use is: Get the earthcracker, use in hand to arm/anchor onto a
turf (Can be unwrenched at this point), activate with an empty hand to
begin the cracking process, then wrench away, and you have a well
hidden, high power sabotage device.

Two variants are available in-game: The E-2 Earthcracker which can be
obtained from the traitor uplink at 2TC each, and the E-1 Earthcracker
which can be purchased on the black market. The E-1 variant spawns
normal run-of-the-mill weakpoints as opposed to the E-2, with a 30%
availability from the back market, at a cost of 200-600 credits.


![earthcraking](https://github.com/user-attachments/assets/0ab3a5af-f6c3-4096-b59a-7a1b44a01700)


## Why It's Good For The Game

I'll be frank, I don't think we necessarily need *more* tools to cause
havoc, but I wanted to expand the weakpoint framework a bit and this
idea came to mind. The Earthcracker fits in the same category as C4, but
without a signifigant amount of the control that comes from C4 and
absolutely from X4. This stands to cause more damage across the hull,
with the ability to keep expanding the crack. For that reason, I think I
may have underpriced this in terms of TC, but I'm up for discussion on
if it needs to go up to a 3-5 range.

In an ideal world, this could be used for making booby traps, such as
planting an earthcracker in an area like escape or a larger department,
and then triggering the weakpoint when the right people are around, even
through something like a detomatrix or a trigger on a grenade.

As an added reminder, weakpoints have a dedicated method to repair them
if discovered, that being welding them or hitting them with sticky tape
to repair them quickly, offering some counterplay.

I also added a lighter variant onto the black market as a fun, dubious
thing to have on the black market.

## Changelog
🆑
add: Adds the E-2 Earthcracker device as a purchasable traitor item for
2 TC. Use it to create potentially devastating weakpoints onto the
station!
/🆑
2026-05-07 06:13:55 +02:00
tgstation-ci[bot] 3cc6b3c4ad Automatic changelog compile [ci skip] 2026-05-07 00:00:21 +00:00
tgstation-ci[bot]andGitHub 4700700824 Automatic changelog for PR #95954 [ci skip] 2026-05-06 18:54:50 +00:00
HigginandGitHub cc06c01c4e [NO GBP] Fixes passive positive virus healing. (#95954)
## About The Pull Request

Fixes the passive positive virus healing behavior I fucked up about two
years ago in the process of reworking virology.

Basically, if you had even one single tick of time spent malnourished or
at lower than 0 satiety, you started to accumulate recovery_prob. If
recovery_prob was anything other than 0, you'd be rolling to get rid of
your virus, eventually getting to a point where, by virtue of the
scaling, it was gonna happen.

This change just makes sure that
- if we aren't currently rocking spaceacillin,
- if we aren't eating a ton of junk food and recovering (negative
satiety trends towards 0, a good binge will put you at about -150,)
- if we aren't starving (less than 150 nutrition,) 
our positive viruses are not going to have a recovery_prob and so are
not going to self-cure. They will still accumulate peaked_cycles and so,
if you constantly dip into and out of time spent malnourished, on
antibiotics, or whatever, they're going to eventually cure faster when
allowed. But if you maintain yourself, they should actually be rock
solid now.

## Why It's Good For The Game

Intended behavior that I somehow missed in the tests and tweaks and then
fell out from really ever investigating why it didn't work. You weren't
supposed to be fucked out of having the positive virus work from even
one slightest brush with the negative circumstances. That totally
undercut both the predictability and value of smart maintenance as
player behavior.

## Changelog

🆑
fix: positive viruses no longer self-cure when not having spaceacillin
or meeting the nutrition/satiety requirements.
/🆑
2026-05-06 19:54:18 +01:00
tgstation-ci[bot]andGitHub c45f60a0f9 Automatic changelog for PR #95888 [ci skip] 2026-05-06 18:53:29 +00:00
ShroopyandGitHub e3b1237746 Fixes maximum time of syndicate bombs and refactors slightly (#95888)
## About The Pull Request
Fixes the maximum time of syndicate bombs being 60,000 seconds (1,000
minutes) to instead be 6,000 seconds (100 minutes) as intended. The
previous code used the MINUTES define, which converts to deciseconds,
rather than directly converting to seconds.
## Why It's Good For The Game
Makes the game work as intended.
## Changelog
🆑
fix: Fixed syndicate bombs having a maximum timer of 1000 minutes
instead of 100 minutes.
/🆑
2026-05-06 19:53:11 +01:00
tgstation-ci[bot] c9249aceb7 Automatic changelog compile [ci skip] 2026-05-06 12:00:30 +00:00
tgstation-ci[bot]andGitHub a88ebc4fe4 Automatic changelog for PR #95982 [ci skip] 2026-05-06 11:32:22 +00:00
Leland KembleandGitHub 17f6533531 Animated wand of animation works and animated wand of animation animating a wand of animation works (#95982)
## About The Pull Request

Fix 1: argument 4 on a new mimic is delete parent, not not having googly
eyes, so the issue there is clear

fix 2: `remove_thing_from_blackboard_key()` had no handling for the list
not yet being up, so it crashes thinking it's been called where
`clear_blackboard_key()` should've been.

fix 3: same as 1 but on wand of nothing, replaced copypaste with just
calling the function

## Why It's Good For The Game

fixes #95981
fixes an animated wand of animation animating a wand of animation
runtiming
Also the same problem with the wand of nothing

## Changelog
🆑

fix: animating a wand of animation works, and that animated wand of
animation animating a wand of animation does not runtime

/🆑
2026-05-06 12:30:42 +01:00
BloopandGitHub 357b1f84c2 Removes a needless UseEffect from FeatureDropdownInput (#95971)
## About The Pull Request

~~I saw this when I was debugging something else, and thought it was my
fault.~~

~~Nope - turns out this has been happening for who knows how long. I was
able to very reliably reproduce it in my env downstream so went ahead
and pushed a fix to this while I am working on something unrelated, I
have tested it and seems to be gone.~~

~~populateOptions function was being passed as an inline arrow function
from the caller, which created a new function reference on every render.
Since it was listed as a dependency in useEffect, the effect re-ran on
every render, which called setDropdownOptions, which triggered a
re-render, which created a new function reference... and so on~~

Building off of the fix Mothblocks made in
https://github.com/tgstation/tgstation/pull/95904 this goes a step
further and nukes that useEffect while we are at it

## Why It's Good For The Game

## Changelog

Nothing player-facing
2026-05-06 07:15:44 +00:00
tgstation-ci[bot] 374e28dd92 Automatic changelog compile [ci skip] 2026-05-06 06:00:33 +00:00
tgstation-ci[bot]andGitHub 5802fd82be Automatic changelog for PR #95824 [ci skip] 2026-05-06 05:47:44 +00:00
BloopandGitHub b39968afde Adds signboards (#95824) 2026-05-06 01:47:27 -04:00
53fe04a572 Fix broken React usage with dropdowns causing unnecessary re-renders in preferences (#95904)
Fixes
https://github.com/tgstation/tgstation/issues/95860#issuecomment-4320548139.
Thank you to @leaKsi for isolating it

React lints would've caught this--components not being components'd
properly and then an inline callback ended up causing a bunch of
re-renders.

I didn't test shit

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-05-06 15:36:00 +12:00
tgstation-ci[bot]andGitHub 80cf6f86a1 Automatic changelog for PR #95878 [ci skip] 2026-05-06 03:13:07 +00:00
bb477c9dbd Admins can now varedit blobs to not instantly end the round on victory (#95878)
## About The Pull Request
Originally this PR was just supposed to split blob's "start victory"
thing into its own proc and add an extra check that could be overridden,
both for downstreams because a friend asked, but then I thought
"wouldn't it be funny if you could varedit a blob to not end the round
on critical mass?" so now we're here.

Anyways, it's about what it says on the tin. Blobs now have a variable,
`end_round_on_victory`, which defaults to TRUE (preserving current
behavior). Setting it to 0/FALSE:
- Makes the blob no longer gain infinite points upon reaching critical
mass
- Makes it announce an "emergency containment activation" instead of
killing everyone if it does hit critical mass
- Prevents the blob from expanding over the blob victory count (400 by
default).
- ...basically does nothing else. (You're still going to have to
manually remove the blob from SSshuttle's hostile environments list!)

## Why It's Good For The Game

Maybe you want to jumpscare the station with a giant fight they have to
take but then not actually kill them in the sake they don't actually
win. You could make an event out of this (said in the same cadence as
"You could make a religion out of this"), probably.

## Changelog

🆑
admin: Admins can now varedit blob overminds (the eye mob) to not kill
everyone on the station if they hit critical mass. (Admins will still
have to remove the blob from the shuttle subsystem's "hostile
environments" tracker, though.)
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2026-05-05 23:12:50 -04:00
tgstation-ci[bot] a772d501ce Automatic changelog compile [ci skip] 2026-05-06 00:00:30 +00:00
tgstation-ci[bot]andGitHub fb0c758afa Automatic changelog for PR #95843 [ci skip] 2026-05-05 18:55:04 +00:00
BloopandGitHub faaa1f1516 Ghosts now have (better) runechat (#95843)
## About The Pull Request

Ports our optimizations to the version of ghost runechat introduced by
https://github.com/tgstation/tgstation/pull/95223

Instead of looping through all the mobs a second time it will do it in
deadchat_broadcast(). Also adds a global for if drunechat is
enabled/disabled and an admin verb for toggling it on or off.

<details><summary>still works</summary>

<img width="330" height="220" alt="dreamseeker_kkNBPBjbMv"
src="https://github.com/user-attachments/assets/4706ad98-fafe-4f88-9de0-6b72983ab044"
/>

</details>

## Why It's Good For The Game

Better option for performance

## Changelog

🆑
code: speeds ghost runechat up a bit, and makes it show as italic
admin: adds a 'toggle dead runechat' admin verb in case you need to
disable it midround for an event or something
/🆑
2026-05-05 14:54:04 -04:00
tgstation-ci[bot] 5da29c311b Automatic changelog compile [ci skip] 2026-05-05 18:00:35 +00:00
tgstation-ci[bot]andGitHub d4d29b1489 Automatic changelog for PR #95900 [ci skip] 2026-05-05 14:50:54 +00:00
MrMelbertandGitHub 21e4c7faac Adds an ingame holiday for Chernobyl Disaster Remembrance Day (#95900)
## About The Pull Request

April 26th is Chernobyl Disaster Remembrance Day

There are no colored tiles or posters associated, but it does have
station prefixes.
Also as an added effect, radiation storms are twice as likely to trigger
randomly, and multiple can trigger in one round.

## Why It's Good For The Game

Today is the 40th anniversary of the Chernobyl disaster and I feel it
would be somewhat fitting as an in game holiday given our game's
propensity to have reactor meltdowns

(and also the Space Soviet Union existed in the lore so I imagine they'd
carry the tradition out to the Spinward Sector)

## Changelog

🆑 Melbert
add: April 26th is Chernobyl Disaster Remembrance Day.
/🆑
2026-05-05 16:50:31 +02:00
tgstation-ci[bot]andGitHub 35b5b9c694 Automatic changelog for PR #95923 [ci skip] 2026-05-05 14:35:42 +00:00
MrMelbertandGitHub 0d8e223e90 Adds some tier zero (penguin, plant) and a tier one (stoat) gene infusion (#95923) 2026-05-05 10:35:12 -04:00
tgstation-ci[bot]andGitHub 34d86c55cf Automatic changelog for PR #95929 [ci skip] 2026-05-05 14:29:18 +00:00
IvyandGitHub 1be26bd847 Fix pda messenger splitting all words instead of putting them on new lines (#95929) 2026-05-05 10:28:48 -04:00
tgstation-ci[bot]andGitHub bb7b42d691 Automatic changelog for PR #95947 [ci skip] 2026-05-05 14:27:02 +00:00
Leland KembleandGitHub 633675c87a Fixes clicking on compact defib (#95947) 2026-05-05 10:26:30 -04:00
tgstation-ci[bot]andGitHub 02a65c7d30 Automatic changelog for PR #95952 [ci skip] 2026-05-05 14:26:04 +00:00