Commit Graph
16107 Commits
Author SHA1 Message Date
MrMelbertandGitHub 02dc41e46c Buffs the good aspects of Spacer by a little bit, so people might actually notice them (#96009) 2026-05-16 11:34:14 +10:00
nikothedudeandGitHub 4ae9d2c934 Partially reverts #4614, leaving record defaults but separating exploitables and security (#5560)
## About The Pull Request

Partially reverts #4614.

Exploitables, background, and security are now separate.
## Why It's Good For The Game

This was never a good change. Exploitables and sec records hold
completely separate purposes. Sec should not see every single
exploitable node you have, basically. Additionally, some people have
stuff in their exploitables and background they cant access right now.
Exposing them again lets people retrieve them.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

<img width="787" height="620" alt="image"
src="https://github.com/user-attachments/assets/b8b464a8-ff4a-40f1-a48f-086c99abb6af"
/>

</details>

## Changelog
🆑
add: Exploitables, background, and security records are now distinct
record fields, instead of being combinced.
/🆑
2026-05-16 01:10:09 +02:00
+37 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00
nikothedudeandGitHub a3142bda2e [BOUNTY] Allows family heirloom users to mark & rename items instead of getting a random one (#5523)
## About The Pull Request

Title. Bounty link:
https://discord.com/channels/1059199070016655462/1398375166244819014

Adds a new pref option that, if disabled, gives you a one-use action
that marks a held item as your heirloom and also gives a chance to
rename and redescribe it (the original name is retained in parenthesis).
## Why It's Good For The Game

Gives wider variety for family heirloom users. I can finally break out
the set of family jordans...
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

<img width="665" height="110" alt="image"
src="https://github.com/user-attachments/assets/6a3a9c1c-676d-4daa-8031-bcf173779f50"
/>


https://github.com/user-attachments/assets/059c1a97-926e-4922-82b0-4fdd8aade9fd

</details>

## Changelog
🆑
add: Family heirloom users can now use a quirk preference to, instead of
getting a random item, mark an item inhand as an heirloom.
/🆑
2026-05-15 08:56:34 -07:00
JinsheeandGitHub 45a5980443 Tele-Port: Ports Telepathy changes from NovaSector (#5531)
## About The Pull Request

This ports changes from
https://github.com/NovaSector/NovaSector/pull/6016 and
https://github.com/NovaSector/NovaSector/pull/6398.

- The quirk no longer automatically applies the Genetics power to the
quirk user. Prior to this PR, communication was mostly anonymized and
only _not_ so when one possessed the gene. This presented a clear
downgrade for individuals who had the genetic variant over the quirk
variant. With this PR, communication through the quirk is not anonymous,
but adding the gene on top of the quirk will allow a user to upgrade it
into being anonymous.
- Every time someone uses the quirk everyone else (in sight) will see
where their attention is sent. This does not add a visual cue besides
the warning in the chat, so it's still somewhat discrete.
- Added a new quirk, Psionic Dampener. This blocks most forms of
telepathic communication.
- Telepathy was made multiline for readability.

## Why It's Good For The Game

Currently, Telepathy as a quirk has a discrepancy where non-synths
receive the mutation Telepathy, while synths receive a different
version. The mechanical differences of these created a problem where,
depending on who was using it, this either did or did not anonymize the
identity of the caster. Additionally, these changes allow the quirk
holder who seeks the genetic variant in-round to properly receive the
benefits of such.

Other changes allow people to opt-out of receiving telepathic messages,
in order to avoid negative interactions from those who abuse it.

Multiline telepathy is a desirable feature for the sake of proof
reading.

## Proof Of Testing

<img width="654" height="279" alt="image"
src="https://github.com/user-attachments/assets/056f4d52-5365-4b5f-a422-40791c5e568d"
/>


## Changelog

🆑
add: Added a new quirk Psionic Dampener, affecting telepathy from
quirks, genetics, slimes, xenomorphs, revenants and so on.
balance: Telepathy (Quirk) no longer automatically gives the gene.
qol: The telepathic communication power granted by the quirk or the
genetic power is only anonymous if the caster has the mutation, not the
target.
qol: Telepathy (Quirk) now shows when the user uses the power and on
whom, but not the contents of the message.
qol: Telepathy is now multiline.
/🆑
2026-05-14 03:07:32 +02:00
Leland KembleandGitHub 7a2854dc0c You can unbuckle people from wheelchairs again (#96047)
## About The Pull Request

`CAN_FORCE_UNBUCKLE` was teeing up the blocking signal rather than
`CANNOT_FORCE_UNBUCKLE`

## Why It's Good For The Game

CAN force unbuckle
2026-05-13 17:58:55 -05:00
Leland KembleandGitHub 28b58b1610 Junkies get the drug addiction they have in their preferences (#96044)
## About The Pull Request

`add()` runs before `add_unique()`, and `add()` includes randomization
of `reagent_type` in lieu of an already defined one. `add_to_holder()`
runs before both, so that's where the pref will be read.
2026-05-13 17:58:38 -05:00
af8f69da13 Adds "Event Logging", or EVLogging, A new debug system that allows us to track individual datums and log events on a timeline (#96035)
## About The Pull Request

This Pull Request adds a new logging system that uses a timeline to
track and visualize important events for specific datums.

This is done via a new window in which you can select a datum for
tracking, which adds it to the timeline. If this datum implements the
EVLOGGING macros, it can track important events onto this timeline. As
an example, we can log whenever an AI is deciding to make a new path, if
it decides to generate a new decisionmaking plan, it finishes an action,
or it decides to target someone/something.

We can select these events to see more information, and optionally get a
snapshot of important variables at the time this event was logged (like
the blackboard and current plan for AI controllers).

You can also filter out specific events / track info, which is done via
categories. Each event / piece of track info is given a category and if
you disable a category all events / track info in that category is
hidden. This lets you filter out things you might not care about.

<img width="2346" height="1209" alt="image"
src="https://github.com/user-attachments/assets/0763077c-e349-4c7c-b017-23d29e1d089b"
/>

_whoever thinks we didnt need advanced cleanbot logging is a noob_


In the video below I showcase how this works;
https://file.house/7nsOiqdvmSTxlsk3fs-e8g==.mp4
A cleanbot is roaming the halls, I turn on the event logger, click the
"pick target" button and click on the datum I'd like to track (the
cleanbot). This results in the cleanbot now tracking its events. I spawn
some dirt and the cleanbot decides to clean it, and I go through the
events; You can see theres different events being listed, such as when
the cleanbot starts targetting the dirt, when it cleans plan, when it
makes it JPS path and every time it moves over it.


The macros I've currently implemented are as follows:

**EVLOG_TEXT(DATUM, CATEGORY, INFO)**
Only adds text to the event logger window, no world-visuals

EVLOG_LOCATION(DATUM, CATEGORY, INFO, TURF) 
Adds text to the event logger and adds an image to where that turf is.

EVLOG_TURFS(DATUM, CATEGORY, INFO, TURFS)
Adds text to the event logger and adds an image to each turf in the
TURFS list

EVLOG_LINES(DATUM, CATEGORY, INFO, TURF_A, TURF_B)
Adds text to the event logger and adds a line from turf_a to turf_B

EVLOG_PATH(DATUM, CATEGORY, INFO, TURFS)
Adds text to the event logger and visualizes a path from A to B (same
way as the pathfinding debugger, of which I moved the visualization
before to SSPathfinder)

In terms of performance, the logger is a singleton, and events are ONLY
logged if
1. The logger is running
2. The datum has the DF_EVLOGGING flag.

This means most of the time, logging an event is a single var lookup
(Since the runner is off by default). The DF_EVLOGGING flag is off by
default as well and has to be enabled by the event logger, or set
temporarily by a dev in code.

This system can easily be extended with more event types / visualization
types as well. (I'm thinking of datumizing the ones I have now)

The TGUI is still a bit of a mess, I would love some pointers because
I'm not really good at react so I just kind of hit it with a hammer
until it did what I wanted 😎

Also, all of this is based on VisLogging from Unreal Engine, so it will
have some likeness https://unreal-garden.com/tutorials/visual-logger/

## Why It's Good For The Game

This system allows us to debug more complex systems (like basic AI) in
an understandable and clear way. While the implementation cases are not
super common right now, extending this system could make debugging these
systems much more comprehensible, and hopefully lets more developers
help us with improving these systems. (plus, we LOVE timelines)

## Changelog

🆑 CabinetOnFire
refactor: Implements "Event Logging" an improved way for programmers to
debug specific datums.
/🆑

---------

Co-authored-by: Lucy <lucy@absolucy.moe>
2026-05-13 12:37:56 +00:00
SmArtKarandGitHub 479ac46740 Reworks goliaths, slightly changes watchers/legions/brimdemons/lobstrocities (#96028)
## About The Pull Request

Goliaths no longer instantly stun the mobs they hit with their tentacle
for full 10 seconds, instead leashing them to the spot they were grabbed
at or dragging them towards themselves. The ranged tetris-piece attack
has been changed to a full cross which tethers the target preventing
them from moving away more than 1 tile, while the line and the ring
attacks tether the mob directly to the goliath itself and drag them in.



https://github.com/user-attachments/assets/0b566a12-17ae-4a8a-97ac-5734c89c83d4

The tentacles can be manually removed after standing for 6 seconds, or
by hitting them for 75 damage total (3 PKC swings, or 5 bayonet hits).
They also naturally retract after 10/15 (cross/line and ring) seconds
like before.
Goliaths themselves have received a massive speed boost, going from 3
second movement delay to 1.2 seconds (150% buff) and no longer can
friendly fire with their tentacles (and ancient goliaths have their
trophy drop guaranteed)

Brimdemons, lobstrocities, watchers and legions also received some
changes:
- Brimdemons no longer can wound with their beams (they were basically
guaranteed to land a nasty burn wound with the initial blast), but are
now affected by laser armor and their beam DOT (not the initial 25 burn
damage upon firing) has been increased from 5 to 7. Their blasts can now
be interrupted by hitting them from their side or from their back
- Lobstrocities have had their retreat distance decreased from 8 to 6,
making them much less likely to randomly lose aggro on the miner (their
aggro range is 9 tiles, meaning that even a single tile of movement on
miner's part will result in lobsters losing interest in them when on CD)
- Watchers now try to stick to 3-5 (previously 4-6) tiles of distance
between themselves and their target, and legions try to maintain 4-6
tiles of distance as opposed to running away completely. This should
make fighting both of them more interesting and engaging, and make
dealing with them during vents less cancerous.

Sprites for the tentacle item and mob overlay are by thgvr from
https://github.com/shiptest-ss13/Shiptest/pull/2432

## Why It's Good For The Game

Goliaths are extremely outdated in their attack design, 10 second
hardstuns are basically a guaranteed death if there are any other mobs
around and aren't very engaging to fight on their own as they are very
easy to evade with 3 second movement delays.
Change to lobstrocities should just make their AI less jank, and
watcher/legion range changes should make them less slippery when
fighting with PKC or zero range PKA, or during vent defense.

## Changelog
🆑 SmArtKar, thgvr
balance: Goliaths no longer hardstun, but instead bind and drag their
targets in with their tentacles. They are, however, much faster now.
balance: Brimdemon beams can no longer wound, but deal a bit more DOT
damage. Their beams can also be interrupted by hitting them from the
side or back in melee.
balance: Watchers and legions now try to maintain a few tiles of
distance from their targets instead of retreating.
fix: Lobstrocity AI should no longer sometimes flee out of their aggro
range when retreating.
/🆑
2026-05-12 19:16:02 +01:00
MrMelbertandGitHub e8d87d2578 Block two people cuffing to one item (#96050)
## About The Pull Request

Fixes #96042
Fixes #96041

Simply stops two people from cuffing to the same item
We could add support for this behavior later, but we'd need to sort out
how that behavior should work

## Changelog

🆑 Melbert
fix: Blocks two people cuffing to one item
/🆑
2026-05-12 08:28:36 +02:00
Y0SH1M4S73RandGitHub b8c1d9080f More accurate feedback for action button consciousness check failure (#95820)
## About The Pull Request

This PR provides a more accurate feedback message for when the
consciousness check for an action button fails due to you being in
softcrit.
2026-05-11 20:04:33 -05:00
MrMelbertandGitHub 18947edfac Cuffing items to you now chains you to the item rather than give you nodrop (shields can be cuffed again) (#95991) 2026-05-09 20:54:17 +02:00
John WillardandGitHub 067d8f9680 Reorganizing the non-game UI (#95383) 2026-05-09 15:06:03 +03:00
MrMelbertandGitHub 3450f8ba1e Lizard frills are hidden by HIDEHAIR rather than HIDEEARS / Lizard frills are masked like hair by hats (#95986) 2026-05-09 13:23:48 +02:00
MrMelbertandGitHub 40a55054c0 Ghostrole on revive death examine tweak (#95862) 2026-05-09 13:21:49 +02:00
NeocloudyandGitHub c0294e3190 Removes testing spam about materials (??) (#95983)
## About The Pull Request
Prevents this:
<img width="481" height="188" alt="image"
src="https://github.com/user-attachments/assets/f21d1af3-976d-49ff-a42b-0ac2acf67142"
/>
By not having `testing` output in
`/datum/material_container/proc/has_materials`.

I forgot what object is processing and constantly checking for this, but
oh well.
## Why It's Good For The Game
Calm down.

## Changelog
Not player-facing.
2026-05-09 10:28:00 +02:00
MrMelbertandGitHub 1945df3929 Spacers are slightly taller again (Reverts "Reverts Makes Spacers Taller") (#95956) 2026-05-09 11:47:23 +10: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
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
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
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 b39968afde Adds signboards (#95824) 2026-05-06 01:47:27 -04:00
Time-GreenandGitHub b9dfbcaca3 Adds more SeCrEt ChEmS (#95952) 2026-05-05 10:25:32 -04:00
BloopandGitHub b3770614c1 Makes invisimins actually invisible to regular ghosts, plus qol improvements (#95856) 2026-05-05 10:00:22 -04:00
MrMelbertandGitHub cee225fecb Moves hair and eyes into standing overlays (#95781) 2026-05-04 22:50:36 +02:00
SmArtKarandGitHub ece35e83db Implements OverFlayer, VV dev tool for debugging appearances and images (#95852) 2026-05-04 12:19:35 +03:00
BloopandGitHub e6e0200edb Makes quirk points configs get loaded into vars on the subsystem, + a small biome fix (#95941) 2026-05-03 20:23:12 +02:00
Aliceee2chandGitHub a7901ff365 Fixed color matrix not applying in reskinnable item preview (#95919)
## About The Pull Request

#94466 introduced changes for reskinnable items that broke recoloring
for kmaga alt style, this pr supposedly fixes it??

## Changelog

🆑
fix: Fixed color matrix not applying in reskinnable item preview.
/🆑
2026-05-03 16:24:10 +02:00
Leland KembleandGitHub 0cab031622 Storage opening being interrupted in on_found() now works without runtiming (#95827)
## About The Pull Request

`active_storage` could be null

## Why It's Good For The Game

Pretty much the same functionality, without the runtime

## Changelog
🆑

code: Things that interrupted the opening of storages are no longer
reliant on a runtime, meaning they interrupt regardless of whether you
had another open storage open at the time

/🆑
2026-05-03 16:14:56 +02:00
e06f612296 Style Meter: Smaller Item, Stored Multiplier (#95864)
## About The Pull Request

Style meters now store their permanent multiplier modifier on the item
so it's not lost when unequipped or otherwise disabled. Also makes the
style meter (item itself) a small item, in case you're... shoving it in
your pocket or something.

## Why It's Good For The Game

I think being able to switch to NV mesons without losing my multiplier
carefully obtained from kicking megafauna in the shins is a good thing,
actually.

## Changelog

🆑
qol: The style meter for miners now stores its permanent multiplier on
the meter in case you're switching eyewear. The style meter item is now
small, allowing for easier storage.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2026-05-02 17:08:44 +10:00
JacquerelandGitHub 79db8d75de Update hierophant club sprite (#95924) 2026-04-30 00:35:58 -04:00
CabinetOnFireandGitHub bd4f39a7c7 Fixes pet commands that required pointing (by fixing pointing) and fixes pets being unable to attack (#95910)
## About The Pull Request

This is a two-parter but they are part of the same journey; I was fixing
#95715 and noticed the commands didnt work, so I also fixed that #94689

The issue for #95715 was that pets did not have their damage set at all,
so they could not attack on combat mode. Dogs specifically circumvented
this by setting and reverting the damage during behavior, which is not
what ai behavior should do. Now those values are the same. I set it up
as 5 lower and upper by default on pets, but if I need to tweak that let
me know.

For #94689 the issue is that if pointed_at's loc is a turf, it would
override pointed_at to be the turf, so that it could pass the view()
check below. But by setting pointed_at everything after now uses that
for the logic, including the signals. Which means the logic often just
thought you were pointing at the floor. I've fixed this by assigning the
loc to a temp var and not changing pointed_at

## Why It's Good For The Game

Dog-mauling is back, this is a good thing.

## Changelog
🆑 dresseronfire
fix: You can now sic pets onto targets again
fix: Pointing at things no longer sometimes points at the wrong thing
/🆑
2026-04-29 23:25:21 +00:00
BloopandGitHub 966d6547e8 Big tooltype decargo-culting (continued) (#95814)
## About The Pull Request

Gets some instances that I caught missed by
https://github.com/tgstation/tgstation/pull/95408
2026-04-29 12:19:00 -05:00
ElGitificadorandGitHub 7499dbbbdd Changes megafauna kill achievement max range of acquisition to 12 (#95881)
## About The Pull Request

i ll be honest i dont know know if the number 7 is there for a
particular reason. i put it to 12 globally because of this, but it s
probably best to just do hiero. Close #95799

## Why It's Good For The Game

currently obtaining the hierophant crusher kill achievement forces you
to tank at least a portion of it s deathrattle attack so this makes it
so that you can get the cheevo (currently of any megafauna) obtainable
from 12 tiles (1 tile away from hiero final blast). would fix the
underlaying issue pointed in #95799

## Changelog
🆑

fix: hierophant achievement can now be obtained from 1 tile away of it s
final blast

/🆑
2026-04-29 09:51:57 +02:00
MrMelbertandGitHub aae24b1ab2 Sect of the Dream God (#95643)
## About The Pull Request

Adds a new chaplain sect, the sect of the Dream God

This sect gains favor from dreaming and blessing dreamers. 

Their blessing only works on sleeping mobs - hitting a sleeping mob with
your bible will cause it to start dreaming, and if it's already
dreaming, grant favor. Either way, the mob is healed.

For 0 favor, you can **Banish Nightmare** - offering a Nightmare's
corpse rewards favor for banishing bad dreams. If the Nightmare has a
heart, you are rewarded with a special **Sacred Heart** which heals you
while dreaming and sleeping. You can also offer a Nightmare's heart on
its own without the body attached.

For 0 favor, you can **Deaconize Dreamers** - you can deaconize up to 3
dreamers.

For 50 favor, you can have a **Dream Portent** - This rite immediately
makes you fall asleep, and grants you a dream related to something going
on in the round. It may provide insight into something you otherwise
don't know about. If you take damage, the effect ends early.

<img width="374" height="126" alt="image"
src="https://github.com/user-attachments/assets/7c4e12fe-8456-411c-9d39-691e4ac2312d"
/>

For 100 favor, you can **Dream Projection** - this rite allows you to
pick one of your deacons, and forces you to become an imaginary friend
of that deacon. For the duration of the effect you are asleep. If you
are woken up or take damage, the effect ends. If the deacon dies, the
effect ends early.

<img width="492" height="294" alt="image"
src="https://github.com/user-attachments/assets/4e2f6810-15cd-41af-a69f-daa6ddca671a"
/>

For 200 favor, you can give you and your followers **Dream Protection**
- While sleeping and dreaming all damage taken is reduced.

For 200 favor, you can start a **Slumber Party** - All nearby mobs (who
can't block magic and some other asterisks) fall asleep and share a
dream. This form of sleep heals the mob rapidly (also heals holy people
even more).

## Why It's Good For The Game

A new sect for chaplains to sink their teeth into. This one brings a
unique niche, focused around sleeping and fortune telling.

## Changelog

🆑 Melbert
add: Adds the Sect of the Dream God, a new option for chaplains.
/🆑
2026-04-29 00:01:56 +01:00
John WillardandGitHub 475fe94750 Say verb & skin shenanigans (Pray is a hotkey, Whisper is in commandbar) (#95477)
## About The Pull Request

Removes Say/Me/OOC/Pray/Whisper as stat panel verbs

1. Adds a hotkey for Pray, P by default, and also adds it to the list of
say modes (so tabbing on tgui-say will show it)
2. Makes Whisper a button on the commandbar, which is literally just
``say "#``, letting players know it exists in a more direct manner.
3. You now need 2 characters to be considered "typing", so `#` for
whisper won't cause you to start to think anymore.

Also messes around with the skin a bit, moving the commandbar to be
separate from the chat window, therefore not resizing if the chat
window/stat panel splitter changes, since I was already messing with the
command bar entirely I might as well look into getting this fixed. This
will go even better with
https://github.com/tgstation/tgstation/pull/95383 as it wont stretch the
command bar when the stat panel is closed.



https://github.com/user-attachments/assets/26cd9df0-7582-445e-9f67-c03d2c9cf46d


Also adds a new Adminhelp submenu for the Pray button for additional
visibility



https://github.com/user-attachments/assets/64f31f86-92a2-4f04-b248-6bbe301919fe


My current goal is the deletion of the IC tab so I've been trying to
inch towards that.

## Why It's Good For The Game

Moves Praying & Whispering into something that's more easily seen by
newer players, and helps cut some of the more useless verbs out of the
stat panel.

This is also part of my project you can see more of here -
https://hackmd.io/443_dE5lRWeEAp9bjGcKYw?view

## Changelog

🆑
qol: Pray verb is now a hotkey, Whisper is now a command bar button, and
all say verbs have been removed from the stat panel.
qol: Admin button on the escape menu is now its own section for praying,
as well as seeing your latest ticket & admin notes.
fix: Resizing the stat panel will no longer change the size of the
command bar.
/🆑
2026-04-26 07:20:58 +03:00
BloopandGitHub b9ebec0eac Fixes + optimizes biome gen code (#95871)
## About The Pull Request

There was a lot of code in here that was not in use for anything that
could be scrapped, as well as logic errors in the existing code.

## Changelog

🆑
fix: mobs and features should not be spawning in walls anymore in
certain biomes
/🆑
2026-04-25 14:17:57 -06:00
aa4dc56835 Removes Station-time (more time changes) (#95744)
## About The Pull Request

Removes Station-Time entirely
Server Time is now NST (Nanotrasen Standard Time). SS13 takes place
exactly 540 years in the future of the current day, so every second is 1
second in-game.
Round Time is now PT (Pay-Time), how Nanotrasen keeps track of how long
the current rotation of Employees has been working for.

Telecomms uses NST due to its importance of being the communication to
the blackbox.

Autopsy report, clocks, scientific reports and requisitions use both
timestamps due to them being more official documents that NT may need to
know beyond just the current round (just for flavortext).

Pretty much everything else (Det scanner, PDA, IC logs, Time-of-Death,
AI law changes, Cyborg file downloading) uses PT

PT
<img width="305" height="217" alt="image"
src="https://github.com/user-attachments/assets/cef73025-6292-4f9c-8565-197397bda2ca"
/>
<img width="168" height="59" alt="image"
src="https://github.com/user-attachments/assets/a99db568-045d-45fc-8206-0d9a7b13c7d2"
/>
<img width="308" height="122" alt="image"
src="https://github.com/user-attachments/assets/37ca6f17-8916-4af2-9c91-0f0707038ca5"
/>



https://github.com/user-attachments/assets/29445051-c98b-4af3-a657-812083aab91a


Clock (Literate)
<img width="748" height="292" alt="image"
src="https://github.com/user-attachments/assets/c824e812-91b5-4737-858d-768336e9a7c4"
/>

Clock (Illiterate)
<img width="446" height="94" alt="image"
src="https://github.com/user-attachments/assets/90d5ea0d-eaff-4ced-aa31-ffdf0b4832a5"
/>

New paperwork time working properly

<img width="311" height="190" alt="image"
src="https://github.com/user-attachments/assets/6d048926-db61-4c91-893b-ce93e1ea7775"
/>

NST
<img width="800" height="115" alt="image"
src="https://github.com/user-attachments/assets/35ffde49-13c1-4ce7-ab24-858e48b608bd"
/>
<img width="1288" height="142" alt="image"
src="https://github.com/user-attachments/assets/40c30d16-e0de-4efc-b460-9486eeb901d6"
/>

# Other changes

1. Circuit time checker will now get the value of the given input (Hour,
Minute, Second) rather than the full dedisecond time converted into
hour/minutes/seconds

<img width="270" height="67" alt="image"
src="https://github.com/user-attachments/assets/097440cc-1c45-447f-9976-18de7f9c722c"
/>

2. Turns nightshift into a round event that'll last approximately 22
minutes
3. 12-hour pref (doesn't apply to the stat panel because it's global
info) & removal of "TCT" time

<img width="569" height="440" alt="image"
src="https://github.com/user-attachments/assets/d39083b1-d248-41c0-9a1c-b2398ca203a7"
/>

4. The chocolate pudding negative moodlet is now based on the server's
IRL time.
5. Admins can now use ``class``, ``style`` and ``background`` (they were
already given perms to use ``img`` so hiding background, which was
removed to prevent image embedding, is pointless)
6. Also fixes ``year`` being off on localhost.


## Why It's Good For The Game

Server Time is approximately 1s = 12s converted, not including it
desyncing from lag (I believe?).
This makes it pretty much impossible for people to actually use this as
a unit of measurement for in-game actions.
Different things also uses different timestamps which is a bit more
confusing.

The main change here is for accessibility and, hopefully, using time as
a source of immersion. "20 minutes ago" is no longer OOC, they're just
speaking in PT. There's no timezones in space, Nanotrasen Standard Time
is the closest there is, but Pay Time is how NT considers when you get
your paychecks, so it's what is more commonly used.

It also fixes major inconsistencies between "IC time" and "Station
time", things like breakfast moodlet was the first 15mins of the round
despite the round starting like 7 hours in? Nukies with an L6 SAW firing
down the halls was shooting like 1 bullet every 3 seconds (assuming 4
bullets per second), overall there was just a disconnect between how
long time actually is in the universe.

The secondary reason for this change (though it is what pushed me to
actually get around to making this change) is the greater stat-panel
removal. This hopes to lessen the dependence on the stat panel for
station-time by making it easier to understand, and the end-goal I have
is for this information to be limited to Admins & the AI (AI will get
the IC version with the accurate year), so until that happens I would
like to improve the use of station-time by making it consistent (for
example, you should only care for PT for IC, which is also what your PDA
displays), so that when it gets removed it won't leave players timeless.

If you haven't already, and is interested in helping remove the stat
panel, every entry that needs to be removed can be found here -
https://hackmd.io/443_dE5lRWeEAp9bjGcKYw?view

Closes https://github.com/tgstation/tgstation/issues/94988

## Changelog

🆑
del: Removed Station Time, now we use NST (Nanotrasen Standard Time),
which is IRL server time +540 years, and PT (Pay Time), the amount of
time since the round has started.
del: Station nightshift is now a Station event rather than being based
on Server time.
balance: Time circuit's Unit of Measure now tells the amount of time in
hour/minute/seconds rather than giving the whole time translated to
hours/minutes/seconds.
qol: Added a 12-hour clock pref for people who prefer it.
qol: Hovering over NST timestamps on official documents will now
translate how much it is in PT/Shift Time.
admin: Admins can now use style/class/background in their papercode.
/🆑

---------

Co-authored-by: Isratosh <Isratosh@hotmail.com>
2026-04-25 14:13:31 -06:00
CapsandiandGitHub 937118b769 Cleans up Fire Alarm sounds (#95705)
## About The Pull Request

Collapses fire alarm sound bytes to mono. Cleans up a high register
artefact from the collapse of stereo to mono sound.

## Why It's Good For The Game

Sounds played in world should not be stereo files.

## Changelog
🆑
sound: fire alarms are no longer stereo files condensed to mono at
runtime
/🆑
2026-04-24 17:56:03 -07:00
7763db34a1 Basic beepskies and some ED209 additions (#95783)
## About The Pull Request
this PR refactors beepskies and ED209s into basic mobs. ive also added a
few features for the ed209 because i cant keep my hands to myself:

ED bots can now wear hats! a few hats give them some new unique
dialogue. Putting a cowboy's hat on an ED will have it acting like a
town Sherrif

EDs are now rideable when emagged. theyll still be shooting people while
ridden. youll also have the ability to charge at people full throttle
running them over

ive also added a new Nukie variant, purchasable from the uplink. These
versions come fitted with an LMG and will patrol the station and shoot
all walks of life. If emagged, theyll blow up people with (weaker)
rockets (im still working on balancing this). they are rideable but i
highly suggest against it; youll be caught in the crossfire. (i
understand if ud prefer i atomize this feature)

## Why It's Good For The Game
gives some personality to EDs, as well as updating all these bots to the
cool new ai system

## Changelog
🆑
refactor: beepskies, and ed209s have been refactored. please report any
bugs
add: ed209s can now wear hats! some hats give them new dialogue
add: emagged ed209s are now rideable! 
add: added evil versions of the ed209s to the syndie uplink
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2026-04-25 00:25:28 +00:00
Leland KembleandGitHub 68f5a555d0 Nonbinary people can respawn (#95854)
## About The Pull Request

locked records(admin-only records) now use the `gender` variable to keep
the mob's actual gender, not resorting to "Other". This means that
nonbinary people are once again capable of being respawned. As locked
records are admin-only, and used in few other locations, the gender
variable is only accessed by respawning code at the moment, and should
never be accessed in a player-facing manner, so it doesn't matter that
plural & neuter are in there.

## Why It's Good For The Game

fixes #95768

## Changelog
🆑

fix: Nonbinary people can respawn

/🆑
2026-04-24 18:15:08 -06:00
The SharkeningandGitHub b8493cface Protean Stripping fixes (#5432)
Requires #5420 to be merged.

## About The Pull Request

See changelog

## Why It's Good For The Game

Bug fixes are good. Especially fixing bugs that brick you.

## Proof Of Testing


![dreamseeker_CzphTOTrRo](https://github.com/user-attachments/assets/62996ff4-4f83-45db-9e9e-08baefc4a64d)

## Changelog

🆑
fix: Click dragging a protean modsuit onto yourself no longer unequips
it, bricking you.
del: Removed the Control Click Stripping functionality from Protean
modsuits. It's now only click dragging.
/🆑
2026-04-24 17:11:20 -06:00
Leland KembleandGitHub 24b5007e1a Fixes looming (#95848) 2026-04-24 15:38:26 +02:00
ArcaneMusicandGitHub 0c91535120 Arcmining: Chemical Boosting (#95530) 2026-04-23 17:46:06 +02:00
ElGitificadorandGitHub 14e0622f70 Makes easy_random_mutate mutated genes researchable (#95717)
## About The Pull Request

sets the scrambled flag of easy_random_mutate to FALSE

## Why It's Good For The Game

Within my extensive geneticist playtime I have many times rushed the
avalible genome in a round by myself, having a somewhat fast time of
about 30 min, almost not exiting my lab in a non-stop A-T C-G frenzy. A
kind of painful process for a human hand because of the amounts of
clicking involved and our increasing number of avalible mutations, so i
came up with what i hope is an adequate solution. In the practice what
this pr does is allow for the random mutations caused by
easy_random_mutate, which if im not mistaken are:

toxin_reagents.dm | Unstable Mutagen 
body.dm | Unstable DNA mutation 
radiation_storm.dm | Radiation storm weather effects
floral.dm | Plant-mutating radiation projectiles
experimental_cloner_fuckup.dm  | Cloner malfunctions
eldritch_painting.dm | Heretic eldritch painting examines
_species.dm | Species radiation damage handling

to be saved to the dna consoles. under normal circumstances it means
that unstable mutagen (and i guess cloner malf mutations) can be saved
to dna consoles. IF im not mistaken and didnt miss anything, it
essentially means that geneticists can now cooperate with chemistry in
order to achieve a somewhat less click intensive, not necessarily much
faster decoding process of the genome, at the cost of cooperating with
your local chemist, and shorter lived test subjects (since it deals tox
damage while metabolizing). because of how unstable mutagen works, this
mostly means only unlocking negative mutations, since positives have a
2% of being unlocked and noted be mutagen only works first entering the
mob, not while metabolizing.

<!--EndFragment-->
</body>
</html>
## Changelog

🆑
balance: mutations coming from most random mutation sources can now be
saved in dna consoles
/🆑
2026-04-23 16:06:19 +02:00
ae0b1131c0 EVA helmets have retractable visors (#95687)
## About The Pull Request

<img width="120" height="125" alt="image"
src="https://github.com/user-attachments/assets/0eff5544-5cff-4ca4-ae44-d3329ed773bb"
/>

EVA helmets can have their visors pulled up to show off your face. 

Older models of space helmets don't have retractable visors

## Why It's Good For The Game

This was inspired by #95683 - I thought the potential behind being able
to flip up your visor to get rid of the dirt in your eyes was an
interesting lil gameplay interaction

Then I got thinking of sci-fi tropes and scenes where the guy says "time
to kick some ass" and rips his visor down, or scenes where the unknown
guy in a space suits says "well well well" and rips up is visor to
reveal he's the bad guy

Now does this make much sense from a space suit design perspective?
Well, not really... ideally you want that thing sealed as tight as
possible, but by 2566 you'd think they'd improve the seals on the things
to allow for it, right? (That was part of the reason why I didn't add it
to the older models of space suits)

## Changelog

🆑 Melbert
add: Some EVA helmets now have retractable visors, which you can pull up
or down at will, to reveal your face.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2026-04-23 08:56:47 +12:00
9b6e752f3e Makes lighting objects objects again (#95332)
## About The Pull Request

Continuation of https://github.com/tgstation/tgstation/pull/78857

FOR TOOO LONG WE HAVE SUFF-
Ok yeah so like, we made them overlays to save on maptick, but with
threaded maptick that is potentially not an issue anymore.
I'm opening this pr so I can tm it and see. If it works, it'll save
about 50% of lighting object update costs, which is pretty damn good.

I'm also removing the fullbright light icon state, since it is barely
ever used (it was added as a clientside op, but we don't hit fullbright
very much at all so it does nothing but eat my cpu time)

Also also changing how SSlighting does its resolution. Rather then
waiting for all sources to process, then working on corners and objects,
instead we will do all the sources we had at the start, then all the
sources after, and so on.
The goal is to avoid churn causing the system to constantly choke. it is
better to potentially double operate then it is for things to feel
horrifically slow.

## Why It's Good For The Game

Faster. Also you won't be able to see lights through walls anymore, so
mesons will be less dumb. Can maybe bump their nightvision a bit idk
we'll see.

## Current Issues

to be found

## Changelog
🆑 Absolucy, LemonInTheDark
fix: You can no longer see lights through walls when using mesons or
when ventcrawling.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2026-04-23 08:55:26 +12:00
TimandGitHub d4242d5907 Add Shoe Factory Ruin (#95774)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

This adds a new lava/ice ruin called the Shoe Factory. It's basically an
abandoned conveyor belt full of random shoes.

<img width="736" height="608" alt="StrongDMM-2026-04-16 20 02 24"
src="https://github.com/user-attachments/assets/113f1dc0-7ab7-48fa-9f4d-a32398e7d83d"
/>

There are 29 pairs of random shoes total. These use a new shoe random
spawner that spawns ANY subtype of shoes. (even admin shoe types like
disabler/bullet shoes) On top of this, the shoe spawner modifies the
`slowdown` anywhere between `-0.5` (fast) to `+0.5` (slow) via dice
rolls. (5d3) You basically need to roll a YAHTZEE to get super fast
shoes. Using the dice method results in ~60% of shoes being normal,
while ~20% are fast, and the other ~20% are slow. So you really need to
test each shoe individually Cinderella style.

Here is a [nice
chart](https://tadeohepperle.com/dice-calculator-frontend/?d1=%2B5d3)
showing the probability breakdown of dice rolls.

For atmosphere, there are crates full of leather/tanning/hides. Also,
there is a loom with durathread, cotton, and wool supplies.

## Why It's Good For The Game

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

More ruin content. Also gives a chance for players to obtain some super
rare shoe types.

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
map: Add Shoe Factory to lava/ice ruins.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2026-04-23 08:54:29 +12:00
MrMelbertandGitHub 4174c91330 Tweaks (Fixes) formula for "internal bleeding" volume (#95753)
## About The Pull Request

Before: Internal bleeding `volume = rand(1, damage * coefficient)`

Bleeding could vary between 1 to 40, causing some attacks to drain you
of 0.1% of your blood, and other attacks to drain you of 7% of your
blood

After: Internal bleeding `volume = sqrt(damage) * coefficient *
rand(0.75, 1.5)`

Bleeding may vary between ranges like 5 to 16, amounting to 1% to 3% of
your blood

Also I broke it, now it's fixed oops

## Why It's Good For The Game

The variance in "internal bleeding" roll was so large that it could
practically instantly sign your death warrant or would never matter
across 100 attacks

This aims to raise the low end and lower the high end to bring a more
sensible range of "volume"

## Changelog

🆑 Melbert
balance: The amount of blood loss from an attack to an already bleeding
wound has been tweaked. As an example, a 20 force attack used to range
0.1% to 4% blood loss, and now ranges 1% to 3%.
/🆑
2026-04-23 08:53:48 +12:00
BloopandGitHub 8609b07a53 Fixes incorrect var being used in sprite accessory clothing icon rendering [no gbp] (#95809)
## About The Pull Request

This doesn't actually have any negative consequences here, but any
downstreams might notice some issues if they make use of the
`get_icon_state()` proc.

## Why It's Good For The Game

Fixes an oversight, I'm blind and overlooked this one.

## Changelog

Nothing placer-facing
2026-04-23 08:46:56 +12:00