Commit Graph
4700 Commits
Author SHA1 Message Date
96d60afb47 Turns the Hemophage Species into a Quirk (#5919)
## About The Pull Request
The goal of this PR is twofold:
1. Remove hemophages as a species.
2. Allow anyone to be a hemophage through the use of a quirk.

Currently, hemophages are somewhat limited in what they can look like
bodyshape wise due to being tied to a species, yet almost all of their
abilities and traits are tied to organs.

To-Do:

- [x] Properly implement the removal of the organs when the quirk gets
removed.
- [x] Test the quirk with the other hemophage specific quirks, possibly
work them into toggles with this quirk.
## Why It's Good For The Game
This helps shorten our list of playable species while keeping the core
aspects of hemophage gameplay able to be done. It also increases
customization potential, yippee.
## Proof Of Testing
See below.
<details>
<summary>Screenshots/Videos</summary>
<img width="1917" height="1004" alt="image"
src="https://github.com/user-attachments/assets/f2b6cb97-1425-4888-a9c4-4a7ed30d74bf"
/>

<img width="619" height="154" alt="image"
src="https://github.com/user-attachments/assets/de0c21f9-bca5-4171-8fc9-d6d28b7e3ea0"
/>

</details>

## Changelog
🆑
del: Removed the hemphage specific quirks Masquerade, Sol Weakness, and
Pseudo-Respiration. They are now toggles on the hemophage quirk.
refactor: Refactored the hemophage species into being a quirk:
Hemophagia.
/🆑

---------

Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
2026-07-31 12:50:53 -04:00
ff8b3e2b41 Lizard Gas Rework, Fixes & More (#5802)
## About The Pull Request

A big update that reworks the Lizard's Gas Station, that fixes existing
issues and makes the role overall more interesting.

A third spawner is added, which is the Manager, who will be held to a
higher standard, and is expected to be in charge of interactions between
Lizard's Gas and other factions, along with controlling the budget. The
manager spawns in with slightly more equipment that better allow them to
protect themselves, their workers, and the station itself from danger.
(A unique outfit for them is also planned, but it is still a WIP)

Lizard's Gas will now have their own unique budget, which is mostly for
fluff, but is also intended to be used for tracking the profits, paying
the workers, and for making orders through trade - as an express console
(like Tarkon or Persistence) would be counterproductive as the ghost
role is intended to interact with others.

Entirely new map layout, highly inspired by European service stations.
This reworked layout has the following features:

- A bigger shopfront, with shutters and direct connection to the
employee only areas.
- Store area itself made bigger, with a greater variety of goods on
sale, along with a pair of flatpacked quantum pads.
- The removal of the old shed outside of the gas station itself, which
held the majority of equipment.
- A garage, being the new dedicated workspace. Now holds most of the
equipment that was in the shed.
- A utility closet, containing the rest of the equipment, along with a
big air tank and an SMES that actually works.
- A CCTV system for the gas station, so you can view both what is
outside and inside from relative safety.
- A proper break room, for the employees, with privacy and access to the
CCTV.
- A nice fancy office, for the manager, with privacy and additional ways
to contact other factions (holopad and fax machine), and of course
access to the CCTV.
- Air conditioning, could you imagine having to work on lavaland or an
icemoon without it?


Three new biogenerator machines that are (currently) entirely unique to
Lizard's Gas, these combine some of the functionalities of other already
existing biogens, while adding much more to them to create additional
incentives to both play the roles and interact with them. These could
potentially be added to other ghost roles in the future, as they are
intended to cover for the lack of access to certain machinery or just
general lack of space or extra hands to achieve the desired outcome. The
medical biogenerator specifically is also meant to cover for negative
quirks that normally would result in a quick death due to the lack of
access to the quirk specific medicines, or to simply treat most common
injuries on lavaland - making the role accessible to way more player
characters.

Also currently _planned_:

- New power generators, fueled by wood and biomass.
- New outfit for the manager.
- Fixing the prefab shutters, as their animation is broken and their
sprite could use more work and additional frames.
## Why It's Good For The Game

The intention is to give the gas station the means to easily be
self-sufficient, along with the right tools to connect themselves to a
trading partner of their choosing without being intrusive - a cargo
teleporter and a pair of quantum pads. This will allow Lizard's Gas to
establish a direct link with others, allowing there to be much more
interactions between it and their partner of choosing with much more
ease, but still requiring the other side to assist by setting up their
own cargo teleporter and deploying the quantum pad on their end. Also,
being a neutral faction in a (literal) hotspot, they could act as an
interesting hub for interactions between other factions or themselves.

Here's a much more detailed breakdown of the issues being solved:

- Spawn reliance - A bad spawn entirely dictates who you can and will be
able to interact with, for a ghost role which is guaranteed to spawn,
the spawn location shouldn't play this much of a factor. As such,
Lizard's Gas now is provided a pair of flatpacked quantum pads and a
cargo teleporter to be able to cooperate with any other entity to
establish a quantum pad link (Communication being done by fax or PDA).
Using the Cargo Teleporter allows the Quantum Pads to be set up without
needing someone to actually manually to the Gas Station.
- Quirks - Certain quirks that rely on medicines completely screw you,
as getting more will require a full chemical setup, such as Phobia,
Brain Degeneration, or the worst offender: Asthma. This is solved by the
medical biogen added to Lizard Gas.
- Husked = Roundremoved - If you somehow managed to get husked, or
suffer a serious infection, you are pretty much dead dead. With your
only real options is being taken to the station, or praying the
Persistence players somehow stumble upon your dead body. To solve that
issue without giving Lizard Gas a full chem setup, they instead can just
make synthflesh patches with one of the biogens.
- Bad Piping & Cables - The original map had serious issues with the
piping, such as certain devices not being connected, being useless, or
just going through walls when it is unnecessary, the worst offender was
the oxygen recycler which is meant to suck in oxygen from lavaland not
even working. Cables wise, the SMES was only able to draw power, and not
output any of it.
- No Theft Prevention - Coming across Lizard Gas previously without
knowing about it could easily result in people accidentally stealing
from the Ghost Role, as most of their supplies were completely out in
the open and protected by two notes left on the floor. All of those
supplies are now moved inside.
- No Unique Access - Anyone could wander into the Gas Station if it was
unbolted, and then enter the back areas and snatch whatever they wanted,
which is even more of an issue when they are now provided with three
unique machines that are fairly powerful. Giving the doors special
access only provided to the Gas Station workers fixes that before it is
even an issue.

Along with fixing the aforementioned issues, there are quite a few
additions that are meant to provide the following benefits:

- Interaction Incentives - Now that it is more accessible, Lizard Gas
required a bit more of a unique 'stock' to provide to people visiting
it, and since none of them operate any plasma-fueled vehicles, the next
best thing is selling them items for convenience, at a store, a
convenience store if you will. With the three new machines, Lizard Gas
will have access to a lot of products they can mass produce on the spot
using only biomass. They can make you a burger on the spot! Sure, it
tastes very synthetic and not that high quality, but it is produced on
the spot. Most of the other products are already available in Company
Imports, but this will be an option to trade for it for cheaper, player
interaction is a good thing!
- Neutral Hub - Being able to link themselves up other locations using a
Cargo Teleporter and a pair of Quantum Pads allows the Lizard Gas
workers to link up with the Station, Tarkon, and the Persistence - as
long as there is someone else on the other end with a Cargo Teleporter
as well. This allows all three groups a Neutral ground to be in,
hopefully allowing for more interactions between players without having
to worry about antags, while also being able to return to their
workplace quickly and with ease.
- Third Spawn - Adding a Manager, which fits thematically, and is
expected to be held to higher standards. Now Lizard's Gas is a three
slot Ghost Role!
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

Comparisons!
**Old Lizard Gas:**

<img width="799" height="799" alt="StrongDMM_VGH8uAiA9r"
src="https://github.com/user-attachments/assets/1f72c14c-b070-4871-9058-bb7a540768c0"
/>

**New Lizard Gas (Icebox):**
<img width="1356" height="1017" alt="dreamseeker_KLV97bjWii"
src="https://github.com/user-attachments/assets/8b09df34-a64b-42a3-8af0-70de6b74fcd1"
/>
<img width="1356" height="1017" alt="dreamseeker_OAcImdnaPf"
src="https://github.com/user-attachments/assets/86f6a343-3979-4ed6-a5eb-7e8db9ad4cc8"
/>

**New Lizard Gas (Lavaland):**
<img width="1360" height="1017" alt="dreamseeker_N0k7u5zD8i"
src="https://github.com/user-attachments/assets/3848a851-2213-44f2-bfac-eb2133f68526"
/>
<img width="1356" height="1017" alt="dreamseeker_dedS1dHqaB"
src="https://github.com/user-attachments/assets/d928713e-8bef-40eb-acfc-dbb3ba8d5cfd"
/>

**The new machines & Contents:**
<img width="275" height="138" alt="dreamseeker_NpTCSRoj6k"
src="https://github.com/user-attachments/assets/06579bbe-11eb-4972-9fba-b5df4b30c51b"
/>
<img width="1189" height="973" alt="yLPMyfBjkU"
src="https://github.com/user-attachments/assets/5174833f-bc91-43b6-a472-873e94c4e93b"
/>
<img width="1189" height="711" alt="lRgw4dVQux"
src="https://github.com/user-attachments/assets/8d6cf74e-5e3e-4110-b6b5-ae1800a8f97b"
/>
<img width="1189" height="679" alt="7myy2173s3"
src="https://github.com/user-attachments/assets/c949851c-f487-47a5-9bf5-4db6c2b62e7f"
/>

</details>

## Changelog
🆑 Moldb, Cerberushopeless, Dr.arielpro & Projectkepler-RU
add: Added 3 new unique biomass based machinery intended for ghost roles
only. They are functionally similar to cargo-orderable biogens (Organic
Ration Printer, Organic Material Printer, Colonial Supply Core, Wall
Med-Station) but are consolidated into much more specific roles, while
also adding additional items to their lists.
add: Added an additional spawner to Lizard's Gas, in the form of a
manager role.
add: Gave Lizard's Gas their own budget card, which can only be spent
through trading with others. Their card is actually capable of
withdrawals.
image: New sprites used by the new biogens, taking direct inspiration
from pre-existing machines to fit in nicely.
map: Near complete rework of the Lizard Gas station, making it much more
roomy and more akin to an European service station.
/🆑

---------

Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2026-07-05 12:12:45 -04:00
Roxy de4c3b255d Merge branch 'master' of github.com:tgstation/tgstation into upstream-2026-06-23 2026-06-23 15:51:55 -04:00
LT3andGitHub 5e9e8f3f99 Fixes tram duplicate/unlabelled tram announcements, reduces range (#96606) 2026-06-22 22:33:45 -04:00
RoxyandGitHub eca87996a5 Fix build script always recompiling dm target (#96568)
## About The Pull Request

Juke is supposed to use file modification times to decide whether a
target needs to be rebuilt, this isn't working because the Greyscale
Previews system always replaces the DMIs in `icons/map_icons` even if
they haven't changed, so everything in that folder will end up with a
more recent modification time than the DMB. Tweaks the code so that the
copy only happens if the file has changed

## Why It's Good For The Game

If I'm doing debugging that requires repeatedly launching the server
with no code modifications in between, it'd be nice to not have to wait
for a pointless compilation every time

## Changelog

N/A
2026-06-18 13:05:20 -06:00
ReturnandGitHub a9c562038b Fixes station time being broken (#5777)
## About The Pull Request
This fixes the station time being incorrect on the statpanel, due to the
way time is handled being changed upstream
## Why It's Good For The Game
Correct time. It is not 2026 in setting
## Proof Of Testing
<img width="327" height="99" alt="image"
src="https://github.com/user-attachments/assets/b5c23b31-a0f7-4d2d-8fba-c3799f0c98ee"
/>

</details>

## Changelog
🆑 ReturnToZender
fix: Station time now shows the correct year
/🆑
2026-06-17 18:32:39 -05:00
MrMelbertandGitHub 79cdde5b4e Head revs get codewords, rev antag info panel (#96425) 2026-06-17 22:37:58 +10:00
33824ac7c1 TTS 3.0: Blips Rework, Radio TTS, Unknown Languages are Blips now (#95369)
## About The Pull Request

Re-did blips to be significantly nicer sounding and way better. Alien
speech you don't understand now comes through as Blips. If you have TTS
entirely disabled, you won't hear blips. Blips also now include more
customization options, and a dedicated Blips preview button by clicking
the leaf icon.

<img width="1749" height="354" alt="ApplicationFrameHost_5nKJEvaNV1"
src="https://github.com/user-attachments/assets/ef6c6b61-7c22-4a87-94c9-be50e89c65bb"
/>


https://github.com/user-attachments/assets/8cab7e55-6370-4e4e-99ba-ea2475569453

Radio TTS has been implemented. By default, you will hear all TTS over
the radio, but will not hear yourself over the radio. You can configure
this in Game Settings.


https://github.com/user-attachments/assets/94a44d84-17a9-4e6e-ac5c-3b800b11c159

<img width="743" height="193" alt="chrome_MOIcXaC2gh"
src="https://github.com/user-attachments/assets/907379b7-0689-486c-b29c-9be0a2259b05"
/>

The new TTS stack is located at
https://github.com/Iamgoofball/tgtts-qwen3 and is AGPLv3 licensed. The
new blips design was inspired by
https://github.com/joshxviii/animalese-typing.

The configuration to disable TTS on whispering has been removed, as it
is no longer needed and also interferes with radio TTS functioning
properly.

The Tram now utilizes TTS, and has had a general audio tune-up.


https://github.com/user-attachments/assets/f532d002-939c-43a1-95d0-0f0c43048997

TTS audio is now 3D and in space, see attached.


https://github.com/user-attachments/assets/b00df49a-9d1d-4b27-a8a0-d103099f5c7e

## Why It's Good For The Game

Quality of life improvements to the TTS system, long overdue. Also, TGMC
can migrate to this new method of doing radio audio so they aren't
sending double the TTS requests anymore.

## Changelog

🆑
add: Added support for Radio TTS. You will now hear players over the
radio via the TTS system.
add: Configure this in Game Options under the Sound tab.
sound: Re-did blips to be significantly nicer sounding and way better. 
sound: Alien speech you don't understand now comes through as Blips. If
you have TTS entirely disabled, you won't hear blips.
sound: The Tram and Computers now utilize the TTS system. Configs have
been added to set a consistent voice.
sound: TTS audio now utilizes 3D audio; you can now walk away from
people saying stupid shit and it gets quieter.
sound: Blips also now include more customization options, and a
dedicated Blips preview button by clicking the leaf icon.
del: The configuration to disable TTS on whispering has been removed, as
it is no longer needed and also interferes with radio TTS functioning
properly.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
2026-06-15 18:54:24 -04:00
Ben10OmintrixandGitHub fc55a930a9 Baby stoats can become adults (#96491)
## About The Pull Request
Baby stoats can now grow into adult stoats. ive also included kits into
the spawn pool of maints, (the overall chance of running into a stoat
whether adult/baby remains the same), and you can also now find baby
stoats rummaging through bins. since baby stoats are cute ive made their
growth rates slow so people can enjoy them at their youths for longer.

## Why It's Good For The Game
fixes an oversight.

## Changelog
🆑
fix: baby stoats can now become adults
add: baby stoats are added to the spawn pool of maints, (the overall
chance of running into a stoat whether adult/baby remains the same)
/🆑
2026-06-15 15:41:27 +12:00
LemonInTheDarkandGitHub b5f3b89d8a Fixes rotation breaking on one votable map (#96493)
<!-- 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

Basically, if it's forced, we rely on create_vote to catch the "no
options" case.
This used to be the behavior, but it was removed in persistant tallies.
I have no idea why.
I've also cleaned up the quite dubious caching code to avoid the bugs I
was getting when testing locally.

## Why It's Good For The Game

S been causing forced icebox (15 pop min, meta can't replace it because
meta's the only one with 0 minpop) on the servers, that's silly.

Of note, it's possible this will still be an issue due to the stale map
system, but yaknow, one thing at a time, and that'll be louder so we
should find out pretty fast (fix would be defaulting to some marked
default map if only one can be rolled).

## 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. -->

🆑
fix: End of round mapvotes will now properly default to the only option
if only one map is votable.
/🆑

<!-- 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-06-14 22:27:28 +02:00
FalloutFalconandGitHub 58108d629d Fixes ambience subsystem removing players permanently (#96498)
## About The Pull Request
Fixes #96497 which was created by #59071

Im not really sure why the mob check exists, im moving it to a continue
for the same reason as the newmob check.
## Why It's Good For The Game
Unless this is meant to be a micro op, it just doesn't make sense to
completely drop them from the list, especially if we never readd them 😿
## Changelog
🆑
fix: Clients who sit in the lobby after pregame will no longer have
there ambience disabled till they reconnect
/🆑
2026-06-14 17:08:28 +02:00
anetteraandGitHub e3cd6981c2 Use lore time for a couple spots that list NST (#96320)
## About The Pull Request
Use the year offset value to display accurate time in statpanel 
<img width="351" height="84" alt="image"
src="https://github.com/user-attachments/assets/302782c8-3e7d-463c-8a2d-1feecd8a1f4b"
/>
Statpanel won't doesn't have access to client prefs and I'm not fixing
that so no 12hr clock
## Why It's Good For The Game
muh immersion
## Changelog
🆑
fix: statpanel uses year offset
/🆑
2026-06-13 14:54:35 -07:00
Ben10OmintrixandGitHub 64baa1979d Basic mulebots. last basic bot refactor (#95899)
my watch has ended

<img width="401" height="256" alt="ffffff"
src="https://github.com/user-attachments/assets/a539203c-020b-4ad8-b034-f69ec0eafa78"
/>



## Changelog
🆑 Profakos (originally pulled from their branch, did massive chunk of
this), Ben10omintrix
refactor: mulebots have been refactored. please report any bugs
/🆑
2026-06-11 23:58:13 -07:00
IajretandGitHub 8ef4eb31bc De-hardcodes wilderness levels z-traits (#96426)
## About The Pull Request
Tin. If someone decides to add wilderness levels for maps that isnt ice,
they will not suffer anymore. Uses default icy wilderness traits
(renamed define for clarity), also adjusted another var name, for
clarity too.
## Why It's Good For The Game
Allows for a higher degree of customisation for wilderness levels, which
is a very good idea, but somehow it was hardcoded to only work with snow
maps.
## Changelog
Nothing player facing (i hope)
2026-06-12 01:03:50 +02:00
soulwareandGitHub e843f46d1f Move carving block to basic recipes (Allows carving blocks to be made out of any material) (#96347)
## About The Pull Request
Allow carving blocks to be made by any material, instead of just rigid
materials.
## Why It's Good For The Game
<img width="612" height="70" alt="pride"
src="https://github.com/user-attachments/assets/afb5ed16-ba7a-4910-9b36-8fed8267536a"
/>

This allows for the construction of
Ice Statues (Hot Ice)
Beige Statues (Sand + Sandstone)
Snowpeople (Snow)
Origami Statues (Paper)
Cardboard (Cardboard)
REAL ghosts (Hauntium)
Meat Statue... 🤤🤤🤤🤤 (Meat)
(Not pictured) Pizzer Statue (Pizza)
Also more player expression + if you could make chairs and airlocks and
toilets and sinks and all that other shit out of these, why the hell NOT
a carving block!?
## Changelog
🆑
balance: Carving blocks can be made out of any material now!
/🆑
2026-06-07 22:52:18 +02:00
67bbc096a8 Introduces particle weather, converts rain and ash storms to it (#96297)
Co-authored-by: Lucy <lucy@absolucy.moe>
2026-06-06 19:33:45 -04:00
CabinetOnFireandGitHub cfd1c8bb67 Replaces lavaland generation (Cellular automata caves) with a more sophisticated cave network system (#96026) 2026-06-06 15:36:14 +00:00
5a68cb5ff3 Implements "Sound Tokens", a way to have spatial audio. And implements it on looping sounds. (And also some tweaks to fall-off) (#96018)
## About The Pull Request

This pull request implements sound tokens, based on the implementation
by Kapu at https://github.com/DaedalusDock/daedalusdock/pull/1379

I've taken that implementation and extended it to looping_sounds,
allowing us to have spatial audio that updates much more nicely when
players walk closer. This system also lets players that walk into range
after the sound has started playing to also hear the sound, before if
you missed the sound, you would never hear it. This is particularly
noticeable with long sounds (Which is lame!)

**VIDEOS**:
griddle:
https://streamable.com/v7ayqm

engineering / SM:
https://streamable.com/5lr1oj


The system essentially sends the sound to every client, and changes the
volume based on distance to the sound. There are some performance
concerns here, so we will need to testmerge this and see how impactful
it is. It is in a subsystem though, so there is some limit to the amount
of cpu it will use. Do keep this in mind when watching the videos; it
will probably not be AS responsive as in there.

I've also changed how intense our fall-off is, making sounds lose their
volume slower. Before taking one step away from a 50 volume sound would
make it 18 volume, this is way too big of a drop and it became
particularly jarring with the changes in this PR.

Some sounds might be too long range now, but I think we should just
reduce the max range of those sounds as we were basically playing them
at <5 volume after 10 tiles, at which point we should maybe just reduce
the range a bit since at those volumes theyre really not audible.

**OLD FALLOFF;** note the MASSIVE drop from 1 tile to 2 tiles
<img width="1416" height="897" alt="image"
src="https://github.com/user-attachments/assets/805b270e-6aa5-4e84-868e-39585966f0a4"
/>

**NEW FALLOFF:**
<img width="1418" height="905" alt="image"
src="https://github.com/user-attachments/assets/eabbd592-ae9c-4690-8945-fbd0b4f6614f"
/>

Also tweaked a few looping sounds (deep-fryer in particular got some
clean-up, as its mid-length was way too short for the sounds and it had
a double-definition)


## Why It's Good For The Game

This system allows us to have a richer audio experience, I really don't
like how choppy our looping sounds are, especially in some areas where
you hear them a lot (kitchen and engineering)



## Changelog

🆑 CabinetOnFire, Kapu
sound: Changed our falloff to be less intense, as it was punching volume
down way too fast.
refactor: Implements a system for spatial audio to improve our looping
sounds
/🆑

---------

Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2026-06-05 16:24:25 -07:00
WisemonsterandGitHub 370a529ace Changes slaughter/laughter demons to use sentient mob pref (#96342) 2026-06-05 11:55:34 -04:00
mrmanlikesbtandGitHub 31967bed59 Makes Destroy() a protected proc to safeguard against improper calls (#96331) 2026-06-04 15:32:12 -04:00
shayoki f17515f75d Update statpanel.dm 2026-06-03 17:10:08 -05:00
shayoki a3e7973adf soft statpanel revert 2026-06-03 17:03:58 -05:00
shayoki 7b6e5356b9 Update statpanel.dm 2026-06-03 16:11:11 -05:00
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
f5fc272810 Random recipe logging (and other stuff) (#96148)
## About The Pull Request
-Log outcomes of random recipe init
* Whether recipe failed to load, and why
* Whether recipe failed to generate, and why
* Whether recipe regenerated due to conflicts, and how many attempts it
took

-Stop saving random recipe results to the persistence file
* They aren't randomized anyway

-Split recipe loading and recipe generation into separate procs
* It was kind of a mess
* This way, you can regenerate recipe without qdel'ing it and then
reinitializing

-Generate recipe if it failed to load
* We used to qdel it instead

-Consider recipe generation to be a failure if there aren't enough valid
ingredients or catalysts
* We used to only check whether possible ingredient list is empty
* Since the possible ingredient/catalyst lists don't change from round
to round, this could probably be made into a unit test in the future

-Reorganize random recipe conflict checks to make them more streamlined
* I had to do it in order to log regeneration outcomes

-Fix bugs which won't ever matter anyway
* optimal_ph_max no longer rolls above 14
* optimal_ph_max can no longer be below optimal_ph_min + 1 (we used to
check for CHEMICAL_MIN_PH + 1, which is just 1)
## Why It's Good For The Game

Logs help spot&diagnose issues which might not come up when testing
locally, like the issue where timestamps wouldn't update which was fixed
by #95895
## Changelog
🆑
fix: random recipes can no longer have upper pH bound above 14
/🆑

---------

Co-authored-by: l0 <-->
2026-06-03 08:04:56 +02:00
MrMelbertandGitHub 6b631cb2c2 Roundstart nuke ops now spawn on an elevator to wait while the base loads in (#96178) 2026-06-02 20:59:42 +10:00
mcbalaamandGitHub 052b3a654d feat: Vote panel UI cleanup; auto-close fix (#96166) 2026-05-27 20:42:04 -04:00
John WillardandGitHub ad450f76e8 Re-attempt at vv editing lobby music (#96093)
## About The Pull Request

Previous attempt was in
https://github.com/tgstation/tgstation/pull/95870 but I got 0 feedback
and it just staled and closed.
Instead of adding it as a secret button I am simply making it so vv
editing the ticker's lobby music will properly update it for everyone.

## Why It's Good For The Game

QoL for admins.

## Changelog

🆑
admin: Changing lobby music now updates for people in the lobby.
/🆑
2026-05-20 19:13:42 +02:00
MrGloopyandGitHub 7303e7777c remove mutual exclusivity of Common second language and Bilingual because i wanted multiple languages once (#5582)
## About The Pull Request
Simply removes the mutual exclusivity of CSL and Bilingual quirks, since
you can have the other language quirk with CSL but not Bilingual.

## Why It's Good For The Game
If you can have the other language quirk with CSL, why not Bilingual?

## Proof Of Testing
if it compiles it works, submitting via vscode
<img width="525" height="447" alt="image"
src="https://github.com/user-attachments/assets/aaf562a6-3ee5-433e-bbed-924196441bb5"
/>

<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog

🆑
balance: Removed mutual exclusivity of Common Second Language and
Bilingual quirks.
/🆑
2026-05-16 01:04:56 +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
John WillardandGitHub e698a66f5e Fixes a merge conflict that broke stat panel (#96071)
## About The Pull Request

Fixes a merge conflict between 2 of my stat panel PRs that caused the
'Toggle Stat Panel' button to not work.
Also converts more skin stuff to defines that I missed in the last PR.

## Why It's Good For The Game

Button works wahoo!

## Changelog

🆑
fix: Stat panel's "Toggle Stat Panel" button now works.
/🆑
2026-05-14 22:35:12 -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
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
ArturlangandGitHub d67ca75e37 kills cargo imports (#5491)
## About The Pull Request
kills cargo imports with no mercy, moves it into goodies with
newly-added subcategories
also adds a persi only agent ID single pack per request
also also tarkon and persi can buy private packs via id money
## Why It's Good For The Game
ugly UI that doesn't work for other factions and needs hacks to work
with cargo ui is not great

## Proof Of Testing


<summary>Screenshots/Videos</summary>
<img width="1268" height="1124" alt="image"
src="https://github.com/user-attachments/assets/fd3d9a58-ea0b-4242-88d2-b6123a214c72"
/>

## Changelog

🆑
add: cargo imports moved into it's own category with a brand subcategory
system, and orderable without a private account (god why did i do this)
add: persistence only agent ID single pack
add: persistence and tarkon can now buy stuff via ids directly
add: captain access can always unlock departmental orders
fix: persistence and persistence cargo consoles sending cargo pods to
the station if cargo bay is selected
del: entire cargo company imports system
/🆑
2026-05-12 17:20:32 -07:00
LemonInTheDarkandGitHub 2dfbf0b81a Adds a unit test that makes sure subsystem flags make sense (#96022)
## About The Pull Request

There's a few of these that conflict, mostly relating to timing. This
conflicting won't actually break anything but it does muddy "what is
this doing" somewhat and it's good to be clear so here we go

## Why It's Good For The Game

Makes the MC very slightly harder to confuse yourself with
2026-05-11 11:20:24 -04:00
BloopandGitHub 1fcc2cafc7 Makes disable dead keyloop lagswitch measure smarter (#95976)
## About The Pull Request

As it is now, you enable it once, and all the current observers and dead
mobs are removed from the keyloop list.

New ghosts and observers are unaffected entirely.
But the worst part is you can get mobs reviving into their corpses and
being unable to move, requiring admin intervention.

This should fix all these issues. We have procs that always get called
when mobs die or are created, let's just hook into those?

## Why It's Good For The Game

Less admin intervention required for a tool that shouldn't require any

## Changelog

🆑
fix: disable dead keyloop lagswitch measure now properly affects new
ghosts, and fixes an issue where people can revive and still be frozen
/🆑
2026-05-11 15:05:32 +02:00
John WillardandGitHub 067d8f9680 Reorganizing the non-game UI (#95383) 2026-05-09 15:06:03 +03: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
MrGloopyandGitHub 8795043656 Adds Super Depression because I got slipped once (Removes mutual exclusivity of Depression and Hypersensitivity quirks) (#5537)
## About The Pull Request
Removes mutual exclusivity of Hypersensitive and Depressed. Woe.

This is technically a SPLURT port but like
it's two lines and a commented out line so uh
yeah
## Why It's Good For The Game
### _**ULTRADEPRESSION UPON YE**_

(There's no reason these quirks should be mutually exclusive. They
compound against one another, making the other worse. If you want to
have super depression, you should be able to)
## Proof Of Testing
<img width="582" height="288" alt="image"
src="https://github.com/user-attachments/assets/0549b2ee-cef3-4048-81df-2bc33923bd03"
/>
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
balance: Removes mutual exclusivity of "Depressed" and "Hypersensitive"
quirks.
/🆑
2026-05-08 07:34:28 +02: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
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
RoxyandGitHub e9e9a97ccb Revert "Adds a quirk thats let you not have character mood" (#5501)
Reverts Bubberstation/Bubberstation#5486

As it turns out, there are far more mood interactions than initially
thought and it is in fact breaking things.

As well as tg adding more and more meaningful interactions for mood it's
not a good idea to keep this right now.
2026-04-28 16:16:29 -04:00
d2f84512b5 [No GBP] Actually fix random recipes for real (#95895)
## About The Pull Request
Just the fix parts from #95892
Fixes #95876
## Why It's Good For The Game
## Changelog
🆑
fix: metalgen and secret sauce should now generate properly
/🆑

---------

Co-authored-by: l0 <-->
2026-04-27 18:23:15 +02: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
f472588418 Adds a quirk thats let you not have character mood (#5486)
## About The Pull Request
Adds a free quirk that locks you out of other mood quirks, hides judging
mood face from your screen and moves hunger meter to where mood face
was. All of the negative and positive bonuses are disabled with this
quirk and mood slow down will be replaced with slow down if you are
hungry
## Why It's Good For The Game
I'm huge hater of this feature since the day i started playing this game
and i absolutely despise seeing the mood face on my screen and with this
quirk you will no longer have to worry about some arbitrary mood meter
saying how your character feels like, you can roleplay how you are
feeling like and do whatever you please. and no this is not turbo
broken, the positive mood you can have has way more mechanic value than
having mood always set to neutral so you are locking yourself out of the
positives and negatives
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
<img width="232" height="281" alt="quirk equipped"
src="https://github.com/user-attachments/assets/97108596-4135-411e-86dd-a2fe9d1d864d"
/>


<img width="162" height="276" alt="hungry"
src="https://github.com/user-attachments/assets/a3569085-3581-49b0-8483-807d70203bb4"
/>



<img width="539" height="122" alt="quirk selection"
src="https://github.com/user-attachments/assets/30043354-e36a-4756-80a1-75c87d350907"
/>

</details>

## Changelog
🆑
add: Added new quirk that lets you disable and hide your mood from your
hud
/🆑

---------

Co-authored-by: Copilot <copilot@github.com>
2026-04-25 08:35:45 -04:00
GhomandGitHub 5110eef308 Express consoles have crab rockets once again... (#95817)
## About The Pull Request
Alternative to https://github.com/tgstation/tgstation/pull/95658 that
involves fewer lines rather than more.

## Why It's Good For The Game
Makes it possible to order crab rockets on the express console without
copypasta. I'm not sure if express consoles are supposed to be usable
for special/emag orders (there was a check against that in the code for
some reason), but because they've had the exact same options of a
standard cargo delivery console for such a long time and because I
haven't found any explicit reason for that to not be the case (in lieu
of that, I found a bit of a reference to homoerotic material in the code
comments), I guess it's fine and nothing bad will happen.

## Changelog

🆑
fix: Packs exclusive to the express console (crab rockets for example)
can now be ordered from express consoles.
/🆑
2026-04-23 09:39:26 +12:00
Tsar-SalatandGitHub bb357ce892 Fix tattoo persistence version (#95839)
## About The Pull Request

Hi, strange thing with tattoos.


https://github.com/tgstation/tgstation/blob/55366497a3f156f5553a6446edf4c0b0cbba6716/code/controllers/subsystem/persistence/tattoos.dm#L25-L42

The tattoo persistence version seems to be setting based on engravings'
persistence version, ``ENGRAVING_PERSISTENCE_VERSION``

Yet, in ``load_prisoner_tattoos()``, the conditional checks the value of
TATTOO_PERSISTENCE_VERSION

https://github.com/tgstation/tgstation/blob/55366497a3f156f5553a6446edf4c0b0cbba6716/code/controllers/subsystem/persistence/tattoos.dm#L10-L11

This PR just replaces the engraving version being set with the tattoo
version being set.
## Why It's Good For The Game

This seems rather blatantly incorrect. 
The TATTOO_PERSISTENCE_VERSION has no setter for its value other than
when defined.

Realistically? This does nothing. They are both 0 lol.
2026-04-23 08:58:49 +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
SmArtKarandGitHub 2680aafa3f [MDB IGNORE] Lavaland Mineral Rework: Yapmining 2026 (#95682) 2026-04-20 10:52:59 -04:00
mrmanlikesbtandGitHub 928df286a6 Kills /datum/asset/var/_abstract, uses abstract_type instead (#95756)
## About The Pull Request

It's all in the title

## Why It's Good For The Game

Forgotten in #92909

## Changelog

no player facing changes
2026-04-13 17:20:12 -04:00