2239 Commits
Author SHA1 Message Date
FalloutFalconandGitHub d2f34e33be moves abstract_type up to datum, spawners wont spawn them (#92909)
## About The Pull Request
moves all implementations (im aware of) for "Im a parent type dont spawn
me please" to the datum layer to standardized behavior
adds a standerized proc for filtering out "bad" items that we dont want
spawning. applies to it the subtype vendor, gifts, and a new spawner and
mystery box for a random gun (neither playerfacing)
"port" of https://github.com/shiptest-ss13/Shiptest/pull/4621



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

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

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

need feedback on if this is actually good for the game.
## Changelog
🆑
add: Soda cans show up in the silver slime drink table.
add: Examine tag for items that are not mean to show up ingame.
refactor: Standardizes how gifts rule out abstract types.
fix: gifts no longer check if something has an inhand, massively
expanding the list of potential items.
/🆑
2025-09-13 00:36:15 +02:00
MrMelbertandGitHub c88a265e89 Put dev prefs json backup in gitignore (#92938)
## About The Pull Request

This file is made when upping a major version. It should also be
ignored.
2025-09-11 20:22:37 +02:00
nevimer b348b617a3 Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07
# Conflicts:
#	README.md
#	code/__DEFINES/admin.dm
#	code/__DEFINES/melee.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/economy.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/elements/crusher_loot.dm
#	code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
#	code/modules/clothing/suits/_suits.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/mineral_scanner.dm
#	code/modules/mob/living/living.dm
#	code/modules/plumbing/plumbers/pill_press.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
2025-09-07 00:37:52 -04:00
Col.RiceandGitHub 9aecebe231 [BOUNTY] Add frontier clothing from organic printer to the loadout menu [2.0 - Electric boogalo] (#4593)
## About The Pull Request
This add frontier equipment that is found in the frontier organic
printer.

The PR has been tested and functional codewise.
## Why It's Good For The Game
Created because of a bounty on Discord by user mrgloopy. This add no
advantage variant of the frontier clothing pieces such as jacket,
gloves, mask and hat. The original pieces are still kept if the
player(s) require armoured variant. These variants are solely for drip
purpose. Of which the user has stated in their bounty. This sentiment is
shared among other players. After all... Drip is good.

## Proof Of Testing

<img width="375" height="555" alt="image"
src="https://github.com/user-attachments/assets/2e48d1d5-577f-465f-af7b-7462af2c6376"
/>

<img width="299" height="575" alt="image"
src="https://github.com/user-attachments/assets/bf015a07-ec9d-4555-884b-5e199f0535f2"
/>

<img width="180" height="156" alt="image"
src="https://github.com/user-attachments/assets/25e1be7c-f6f7-4574-ab95-9a9d0e62b090"
/>

<img width="218" height="300" alt="image"
src="https://github.com/user-attachments/assets/63d74ddf-ba82-4989-bb13-536f09d2aec2"
/>

<img width="598" height="230" alt="image"
src="https://github.com/user-attachments/assets/1085230c-fe46-46b7-8a75-d2115cca6e2c"
/>

<img width="603" height="190" alt="image"
src="https://github.com/user-attachments/assets/6bb3616d-c610-4af1-9d63-ec173998e080"
/>

<img width="1100" height="837" alt="image"
src="https://github.com/user-attachments/assets/08580f6d-d34f-4669-89a9-b4945998fa66"
/>

## Changelog

🆑
add: frontier caps.
add: frontier jacket.
add: frontier gas mask.
add: frontier jackboots.
add: frontier jumpsuit.
add: frontier bags.
add: frontier gloves.
code: added new define for frontier bags in character creation menu.
code: added icon define for frontier bags.
code: added frontier bags to spawn roundstart from character creation.
🆑
2025-09-02 12:07:40 +03:00
BloopandGitHub 04bd315bf0 Guards against runtiming in the middle of the client Destroy() proc (#92686)
## About The Pull Request

Tin.

Runtiming in this spot is really not good and may have potentially
caused a crash for one of our rounds.

Not sure how it happened exactly, but it costs nothing to be safe here.

<img width="696" height="38" alt="image"
src="https://github.com/user-attachments/assets/c56c5c18-8ae0-428f-a407-b2e3de79d87a"
/>

## Why It's Good For The Game

Let clients finish their destruction

## Changelog

Not player-facing
2025-08-30 21:19:38 -07:00
MrMelbertandGitHub c2b8ef1d09 Allow localhosts to set "dev override preferences" to load a specific preference savefile for guests (#92770)
## About The Pull Request

A verb is now available on localhost called `"Export Save as Dev
Preferences"`

This exports your current savefile to `/config/dev_preferences.json`

If you then connect to your localhost as a guest, it will load
`dev_preferences.json` as your preference datum

This allows for devs testing the game locally to load preferences for
guests.
(Guests connecting to live servers are completely unaffected.)

## Why It's Good For The Game

Initially I only did this because the recent keybinding changes have
destroyed my muscle memory when testing w/o logging in.

But as I worked on it I thought of a few other usecases, like when
implementing preference version migration - the dev preference is never
saved which means you can re-compile as much as you want without needing
to revert your save manually.
2025-08-29 18:36:56 -04:00
ReturnandGitHub cc0157190d Makes species in the menu sort themselves better (#4470)
## About The Pull Request
This PR makes species in the species menu sort themselves by how much
lore is present for them, and also sorts template species to the bottom
of the species list.

This should help ensure that players see finished species to get their
brains whirling first. As more species have lore written for them, this
list is likely to change, and we will probably rewrite species with
excessive lore in order to simplify them.

Unathi are renamed to Lizardperson (generic) and moved to a template
species.

## Why It's Good For The Game
The species we've finished so far come first in the species menu,
without removing any species from the game

## Proof Of Testing
<img width="78" height="603" alt="image"
src="https://github.com/user-attachments/assets/512d2aa6-7e98-45d6-8ca1-233c4551ff9a"
/>

## Changelog

🆑 ReturnToZender
add: The species menu now sorts itself based on the length of provided
lore. Species with lore come first.
del: Unathi have been renamed to Lizardperson (Generic). They don't have
lore, and lack a lot of the engaging mechanics that Lizardpeople have,
so we've reflavored them as a template species.
/🆑
2025-08-24 21:43:55 +03:00
Roxy 4c62a21b1a Fixes for #92061 2025-08-12 13:50:57 -04:00
WaterpigandRoxy 55504da79d Datumizes DNA blocks, makes DNA cleaner in general (#92061)
Moves all the dna block handling onto singleton datums initialized
inside global lists, to make the handling dna less of a copy-paste mess
and make adding new blocks significantly easier. There is still some
work to be done in the copypaste department but ultimately that falls
under its own PR scope after the core refactor goes through. (Ill
probably do those but it will also be easier for everyone else as the
code is now significantly less of an eyesore)

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

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

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

🆑
code: feature keys are no longer magical strings floating around the
codebase and use proper defines
refactor: DNA blocks are now handled with singleton datums.
/🆑
2025-08-12 13:48:00 -04:00
itsmeowandRoxy 8a7e6d059f Bumps rust_g to 4.0.0 / IconForge Improvements (#92333) 2025-08-04 20:53:34 -04:00
itsmeowandGitHub 23816b8ef2 Bumps rust_g to 4.0.0 / IconForge Improvements (#92333) 2025-07-30 22:51:23 -06:00
Ice-TypeandRoxy 7703cbd97f Extends Integer scaling range, corrects some info (#92130)
## About The Pull Request

Extends the max range for integer scaling up to 9x, corrects some
misinfo in the visuals guide

## Why It's Good For The Game

This allows proper integer scaling up to 8k resolution, which not only
is generally the highest consumer-available resolution currently, but
also the next resolution that is able to perfectly display a 480p image
on it via integer scaling.

Also corrects misinfo because misinfo is bad.

## Changelog

🆑
qol: Increased the integer scaling range up to 9x
/🆑
2025-07-19 20:29:25 -04:00
MrMelbertandRoxy b5b88a295e Fixes some cases of dynamic reading defined values over config values (#92126)
## About The Pull Request

Fixes #92125

Very simple, when working without an instantiated datum we would read
from the config manually, but some places neglected to do that.

So I added a macro to help in the future.

## Changelog

🆑 Melbert
fix: Fixes some places where dynamic configs were not being read
correctly
/🆑
2025-07-19 20:29:24 -04:00
Ice-TypeandGitHub f24a22ec1f Extends Integer scaling range, corrects some info (#92130)
## About The Pull Request

Extends the max range for integer scaling up to 9x, corrects some
misinfo in the visuals guide

## Why It's Good For The Game

This allows proper integer scaling up to 8k resolution, which not only
is generally the highest consumer-available resolution currently, but
also the next resolution that is able to perfectly display a 480p image
on it via integer scaling.

Also corrects misinfo because misinfo is bad.

## Changelog

🆑
qol: Increased the integer scaling range up to 9x
/🆑
2025-07-14 17:20:40 -06:00
WaterpigandGitHub b01756b97c Datumizes DNA blocks, makes DNA cleaner in general (#92061)
## About The Pull Request

Moves all the dna block handling onto singleton datums initialized
inside global lists, to make the handling dna less of a copy-paste mess
and make adding new blocks significantly easier. There is still some
work to be done in the copypaste department but ultimately that falls
under its own PR scope after the core refactor goes through. (Ill
probably do those but it will also be easier for everyone else as the
code is now significantly less of an eyesore)

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

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

## Why It's Good For The Game

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

## Changelog

🆑
code: feature keys are no longer magical strings floating around the
codebase and use proper defines
refactor: DNA blocks are now handled with singleton datums.
/🆑
2025-07-14 16:51:45 -06:00
MrMelbertandGitHub 5cddf64930 Fixes some cases of dynamic reading defined values over config values (#92126)
## About The Pull Request

Fixes #92125

Very simple, when working without an instantiated datum we would read
from the config manually, but some places neglected to do that.

So I added a macro to help in the future.

## Changelog

🆑 Melbert
fix: Fixes some places where dynamic configs were not being read
correctly
/🆑
2025-07-14 16:46:28 -06:00
Roxy 72f1622c3f Fixes for #91875 2025-07-11 19:20:16 -04:00
san7890andRoxy c6b633169b Better Savefile Versioning (Define Macros Edition) (#91898)
Savefile versioning is quite robust, but it relied a lot on comments to
explain why exactly it worked (such as needing to explain that
error/empty states were negative integers only because any valid
savefile version would be a positive integer). Anyways, let's spell it
out a lot more using `#define` values and dmdoccing said values in order
to make the whole system a bit more cohesive.

This also corrects an issue that has irked me for a while, which is that
we call and go through `update_preferences()` or `update_character()`
_every single time_. `SAVEFILE_VERSION_MAX` is essentially just a
placeholder, it's not checked against anything! Let's use that in one of
the new macros we created so we can slim down on the proc call overhead
(as well as whole branches of code) that we iterate through every single
time we load a savefile. Like we were generating a backup json every
single run without fail, let's trim that out when it's not necessary.

More clear for people operating on this code in the future as well as
does a lot less work. Win win.
Tested it and it migrated my savefile from 48 -> 49 without any ill
effect. Let me know if we want to have the redundancy behavior baked in
where we call these procs/enter code branches every single time though-
I would rather just bake the code in that way rather than live in a
world of confusion on why it operates that way.

🆑
server: Savefile migration has been tweaked a bit, though there
realistically shouldn't be any issues with this. Keep a wary eye out
though.
/🆑
2025-07-11 17:58:28 -04:00
san7890andGitHub 52c7ae300e Better Savefile Versioning (Define Macros Edition) (#91898)
## About The Pull Request

Savefile versioning is quite robust, but it relied a lot on comments to
explain why exactly it worked (such as needing to explain that
error/empty states were negative integers only because any valid
savefile version would be a positive integer). Anyways, let's spell it
out a lot more using `#define` values and dmdoccing said values in order
to make the whole system a bit more cohesive.

This also corrects an issue that has irked me for a while, which is that
we call and go through `update_preferences()` or `update_character()`
_every single time_. `SAVEFILE_VERSION_MAX` is essentially just a
placeholder, it's not checked against anything! Let's use that in one of
the new macros we created so we can slim down on the proc call overhead
(as well as whole branches of code) that we iterate through every single
time we load a savefile. Like we were generating a backup json every
single run without fail, let's trim that out when it's not necessary.
## Why It's Good For The Game

More clear for people operating on this code in the future as well as
does a lot less work. Win win.
## Changelog
Tested it and it migrated my savefile from 48 -> 49 without any ill
effect. Let me know if we want to have the redundancy behavior baked in
where we call these procs/enter code branches every single time though-
I would rather just bake the code in that way rather than live in a
world of confusion on why it operates that way.

🆑
server: Savefile migration has been tweaked a bit, though there
realistically shouldn't be any issues with this. Keep a wary eye out
though.
/🆑
2025-07-06 22:13:18 -07:00
MrMelbertandRoxy bcd1d78189 Migrate "Cyborg Pre-screened dogtag" quirk to loadout (#91868)
## About The Pull Request
Borg me dogtag is a loadout item instead of a quirk

## Why It's Good For The Game
The quirk doesn't do anything

## Changelog

🆑 Melbert
del: "Cyborg Pre-screened dogtag" quirk. It's a loadout item now.
/🆑
2025-07-04 16:33:06 -04:00
f2db304b6c Adds In Game Rank Editing (Permissions Panel Cleanup) (#91873)
## About The Pull Request

Ok there's a lot here, sorry bout that.

- Cleaned up the permissions panel backend pretty signficantly
- Added some extra security measures to said code, mostly proc call
checks
- Properly implemented filtering code jordie wrote years and years ago
for permissions logs
- Cleaned up the permissions ui generally, more bars, nicer lookin
stuff, etc
- Fixed the Management panel's relationship with combined roles, and
renamed it to Housekeeping. Its display is expanded too.
- Added tracking to rank datums on where exactly they came from
- Added a new tab to the permissions panel which allows the modification
and deletion of ranks
- Beefed up rank modification to try and avoid accidential temp rank
additions to the db

I'm doing my best to avoid perms escalation issues, tho they are always
possible right.
Also, got mad at some query cleanup handling, did a pass on it. this
isn't nearly all of em, but it's some.

## Why It's Good For The Game

I realized there is no way to, in game, cleanly edit/create ranks, and
that the way the existing system worked was quite opaque.
I'm trying to fix that here. It does mean potentially opening up DB rank
deletion/modification to bad actors, but frankly I am not overly worried
about that. Admin modification has always been a vulnerability so like.

Here's a video with my changes (mostly, it's lightly outdated)
https://file.house/XqME7KWKk0ULj4ZUkJ5reg==.mp4

## Changelog
🆑
refactor: Fucked with admin rank setup very slightly, please yell at me
if anything is wrong.
admin: Updated the permissions panel to be a good bit more user
friendly, added rank management support to it.
server: I've added code that gives the game modification/deletion perms
for the rank table, be made aware.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2025-07-04 16:33:06 -04:00
MrMelbertandGitHub cde912d1b5 Migrate "Cyborg Pre-screened dogtag" quirk to loadout (#91868)
## About The Pull Request
Borg me dogtag is a loadout item instead of a quirk

## Why It's Good For The Game
The quirk doesn't do anything

## Changelog

🆑 Melbert
del: "Cyborg Pre-screened dogtag" quirk. It's a loadout item now.
/🆑
2025-06-29 11:41:49 -06:00
2e5d3ad984 Adds In Game Rank Editing (Permissions Panel Cleanup) (#91873)
## About The Pull Request

Ok there's a lot here, sorry bout that.

- Cleaned up the permissions panel backend pretty signficantly
- Added some extra security measures to said code, mostly proc call
checks
- Properly implemented filtering code jordie wrote years and years ago
for permissions logs
- Cleaned up the permissions ui generally, more bars, nicer lookin
stuff, etc
- Fixed the Management panel's relationship with combined roles, and
renamed it to Housekeeping. Its display is expanded too.
- Added tracking to rank datums on where exactly they came from
- Added a new tab to the permissions panel which allows the modification
and deletion of ranks
- Beefed up rank modification to try and avoid accidential temp rank
additions to the db

I'm doing my best to avoid perms escalation issues, tho they are always
possible right.
Also, got mad at some query cleanup handling, did a pass on it. this
isn't nearly all of em, but it's some.

## Why It's Good For The Game

I realized there is no way to, in game, cleanly edit/create ranks, and
that the way the existing system worked was quite opaque.
I'm trying to fix that here. It does mean potentially opening up DB rank
deletion/modification to bad actors, but frankly I am not overly worried
about that. Admin modification has always been a vulnerability so like.

Here's a video with my changes (mostly, it's lightly outdated)
https://file.house/XqME7KWKk0ULj4ZUkJ5reg==.mp4

## Changelog
🆑
refactor: Fucked with admin rank setup very slightly, please yell at me
if anything is wrong.
admin: Updated the permissions panel to be a good bit more user
friendly, added rank management support to it.
server: I've added code that gives the game modification/deletion perms
for the rank table, be made aware.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2025-06-29 11:41:41 -06:00
MrMelbertandRoxy e0bdfc3f5f Dynamic Rework (#91290)
Implements https://hackmd.io/@tgstation/SkeUS7lSp , rewriting Dynamic
from the ground-up

- Dynamic configuration is now vastly streamlined, making it far far far
easier to understand and edit

- Threat is gone entirely; round chaos is now determined by dynamic
tiers
   - There's 5 dynamic tiers, 0 to 4.
      - 0 is a pure greenshift.
- Tiers are just picked via weight - "16% chance of getting a high chaos
round".
- Tiers have min pop ranges. "Tier 4 (high chaos) requires 25 pop to be
selected".
- Tier determines how much of every ruleset is picked. "Tier 4 (High
Chaos) will pick 3-4 roundstart[1], 1-2 light, 1-2 heavy, and 2-3
latejoins".
- The number of rulesets picked depends on how many people are in the
server - this is also configurable[2]. As an example, a tier that
demands "1-3" rulesets will not spawn 3 rulesets if population <= 40 and
will not spawn 2 rulesets if population <= 25.
- Tiers also determine time before light, heavy, and latejoin rulesets
are picked, as well as the cooldown range between spawns. More chaotic
tiers may send midrounds sooner or wait less time between sending them.

- On the ruleset side of things, "requirements", "scaling", and
"enemies" is gone.
- You can configure a ruleset's min pop and weight flat, or per tier.
- For example a ruleset like Obsession is weighted higher for tiers 1-2
and lower for tiers 3-4.
- Rather than scaling up, roundstart rulesets can just be selected
multiple times.
- Rulesets also have `min_antag_cap` and `max_antag_cap`.
`min_antag_cap` determines how many candidates are needed for it to run,
and `max_antag_cap` determines how many candidates are selected.

- Rulesets attempt to run every 2.5 minutes. [3]

- Light rulesets will ALWAYS be picked before heavy rulesets. [4]

- Light injection chance is no longer 100%, heavy injection chance
formula has been simplified.
- Chance simply scales based on number of dead players / total number
off players, with a flag 50% chance if no antags exist. [5]

[1] This does not guarantee you will actually GET 3-4 roundstart
rulesets. If a roundstart ruleset is picked, and it ends up being unable
to execute (such as "not enough candidates", that slot is effectively a
wash.) This might be revisited.

[2] Currently, this is a hard limit - below X pop, you WILL get a
quarter or a half of the rulesets. This might be revisited to just be
weighted - you are just MORE LIKELY to get a quarter or a half.

[3] Little worried about accidentally frontloading everything so we'll
see about this

[4] This may be revisited but in most contexts it seems sensible.

[5] This may also be revisited, I'm not 100% sure what the best / most
simple way to tackle midround chances is.

Other implementation details

- The process of making rulesets has been streamlined as well. Many
rulesets only amount to a definition and `assign_role`.

- Dynamic.json -> Dynamic.toml

- Dynamic event hijacked was ripped out entirely.
- Most midround antag random events are now dynamic rulesets. Fugitives,
Morphs, Slaughter Demons, etc.
      - The 1 weight slaughter demon event is gone. RIP in peace.
- There is now a hidden midround event that simply adds +1 latejoin, +1
light, or +1 heavy ruleset.

- `mind.special_role` is dead. Minds have a lazylist of special roles
now but it's essentially only used for traitor panel.

- Revs refactored almost entirely. Revs can now exist without a dynamic
ruleset.

- Cult refactored a tiny bit.

- Antag datums cleaned up.

- Pre round setup is less centralized on Dynamic.

- Admins have a whole panel for interfacing with dynamic. It's pretty
slapdash I'm sure someone could make a nicer looking one.

![image](https://github.com/user-attachments/assets/e99ca607-20b0-4d30-ab4a-f602babe7ac7)

![image](https://github.com/user-attachments/assets/470c3c20-c354-4ee6-b63b-a8f36dda4b5c)

- Maybe some other things.

See readme for more info.

Will you see a massive change in how rounds play out? My hunch says
rounds will spawn less rulesets on average, but it's ultimately to how
it's configured

🆑 Melbert
refactor: Dynamic rewritten entirely, report any strange rounds
config: Dynamic config reworked, it's now a TOML file
refactor: Refactored antag roles somewhat, report any oddities
refactor: Refactored Revolution entirely, report any oddities
del: Deleted most midround events that spawn antags - they use dynamic
rulesets now
add: Dynamic rulesets can now be false alarms
add: Adds a random event that gives dynamic the ability to run another
ruleset later
admin: Adds a panel for messing around with dynamic
admin: Adds a panel for chance for every dynamic ruleset to be selected
admin: You can spawn revs without using dynamic now
fix: Nuke team leaders get their fun title back
/🆑

(cherry picked from commit 4c277dc572)
2025-06-26 20:12:17 -04:00
MrMelbertandGitHub 4c277dc572 Dynamic Rework (#91290)
## About The Pull Request

Implements https://hackmd.io/@tgstation/SkeUS7lSp , rewriting Dynamic
from the ground-up

- Dynamic configuration is now vastly streamlined, making it far far far
easier to understand and edit

- Threat is gone entirely; round chaos is now determined by dynamic
tiers
   - There's 5 dynamic tiers, 0 to 4.
      - 0 is a pure greenshift.
- Tiers are just picked via weight - "16% chance of getting a high chaos
round".
- Tiers have min pop ranges. "Tier 4 (high chaos) requires 25 pop to be
selected".
- Tier determines how much of every ruleset is picked. "Tier 4 (High
Chaos) will pick 3-4 roundstart[1], 1-2 light, 1-2 heavy, and 2-3
latejoins".
- The number of rulesets picked depends on how many people are in the
server - this is also configurable[2]. As an example, a tier that
demands "1-3" rulesets will not spawn 3 rulesets if population <= 40 and
will not spawn 2 rulesets if population <= 25.
- Tiers also determine time before light, heavy, and latejoin rulesets
are picked, as well as the cooldown range between spawns. More chaotic
tiers may send midrounds sooner or wait less time between sending them.

- On the ruleset side of things, "requirements", "scaling", and
"enemies" is gone.
- You can configure a ruleset's min pop and weight flat, or per tier.
- For example a ruleset like Obsession is weighted higher for tiers 1-2
and lower for tiers 3-4.
- Rather than scaling up, roundstart rulesets can just be selected
multiple times.
- Rulesets also have `min_antag_cap` and `max_antag_cap`.
`min_antag_cap` determines how many candidates are needed for it to run,
and `max_antag_cap` determines how many candidates are selected.

- Rulesets attempt to run every 2.5 minutes. [3]

- Light rulesets will ALWAYS be picked before heavy rulesets. [4]

- Light injection chance is no longer 100%, heavy injection chance
formula has been simplified.
- Chance simply scales based on number of dead players / total number
off players, with a flag 50% chance if no antags exist. [5]

[1] This does not guarantee you will actually GET 3-4 roundstart
rulesets. If a roundstart ruleset is picked, and it ends up being unable
to execute (such as "not enough candidates", that slot is effectively a
wash.) This might be revisited.

[2] Currently, this is a hard limit - below X pop, you WILL get a
quarter or a half of the rulesets. This might be revisited to just be
weighted - you are just MORE LIKELY to get a quarter or a half.

[3] Little worried about accidentally frontloading everything so we'll
see about this

[4] This may be revisited but in most contexts it seems sensible. 

[5] This may also be revisited, I'm not 100% sure what the best / most
simple way to tackle midround chances is.

Other implementation details

- The process of making rulesets has been streamlined as well. Many
rulesets only amount to a definition and `assign_role`.

- Dynamic.json -> Dynamic.toml

- Dynamic event hijacked was ripped out entirely.
- Most midround antag random events are now dynamic rulesets. Fugitives,
Morphs, Slaughter Demons, etc.
      - The 1 weight slaughter demon event is gone. RIP in peace. 
- There is now a hidden midround event that simply adds +1 latejoin, +1
light, or +1 heavy ruleset.

- `mind.special_role` is dead. Minds have a lazylist of special roles
now but it's essentially only used for traitor panel.

- Revs refactored almost entirely. Revs can now exist without a dynamic
ruleset.

- Cult refactored a tiny bit. 

- Antag datums cleaned up.

- Pre round setup is less centralized on Dynamic.

- Admins have a whole panel for interfacing with dynamic. It's pretty
slapdash I'm sure someone could make a nicer looking one.


![image](https://github.com/user-attachments/assets/e99ca607-20b0-4d30-ab4a-f602babe7ac7)


![image](https://github.com/user-attachments/assets/470c3c20-c354-4ee6-b63b-a8f36dda4b5c)

- Maybe some other things.

## Why It's Good For The Game

See readme for more info.

Will you see a massive change in how rounds play out? My hunch says
rounds will spawn less rulesets on average, but it's ultimately to how
it's configured

## Changelog

🆑 Melbert
refactor: Dynamic rewritten entirely, report any strange rounds
config: Dynamic config reworked, it's now a TOML file
refactor: Refactored antag roles somewhat, report any oddities
refactor: Refactored Revolution entirely, report any oddities
del: Deleted most midround events that spawn antags - they use dynamic
rulesets now
add: Dynamic rulesets can now be false alarms
add: Adds a random event that gives dynamic the ability to run another
ruleset later
admin: Adds a panel for messing around with dynamic
admin: Adds a panel for chance for every dynamic ruleset to be selected
admin: You can spawn revs without using dynamic now
fix: Nuke team leaders get their fun title back
/🆑
2025-06-25 17:36:10 -07:00
John WillardandRoxy 2a79d6424e Removes widescreen config (#91419)
19x15 forever, or 15x15 if you're non widescreen user.

Idek why this is a config
2025-06-21 22:38:18 -04:00
SmArtKarandRoxy 0712d9870c Planecube Optimizations and Job Security: Part One (#91696)
## About The Pull Request

This is an atomized revival of #82419, with this part containing the
simplest of its features:
- Fixes AO pref refreshing the wrong plane, thus not updating until you
swap bodies
- Removes supermatter's copypasted warp effect
- Culls distortion effects when they're not in use because its a chonky
filter
- Hides the escape menu when its, well, hidden
- Fixes hide_highest_offset not working upon parent's creation (we're so
good at our jobs hell yeah)
- Replaces runechat's AO dropshadow with an outline, because its barely
visible due to low opacity.

## Why It's Good For The Game

Our rendering performance is shit and we need to improve it, and the
first step in this task is optimizing planecube's simplest parts. The
next step is conditional culling, better non-multiz handling and
parallax rework/removal, but all of those need to be atomized as to
prevent the PR from sharing the fate of the original.

## Changelog
🆑
fix: Ambient Occlusion pref should now update immediately upon being
changed, instead of having to swap bodies or waiting for server restart
to get it updated.
code: Slightly improved rendering code/performance just a tiny bit.
/🆑
2025-06-21 22:21:57 -04:00
John WillardandGitHub 4c82b029c7 Removes widescreen config (#91419)
## About The Pull Request

19x15 forever, or 15x15 if you're non widescreen user.

## Why It's Good For The Game

Idek why this is a config
2025-06-22 01:14:55 +00:00
SmArtKarandGitHub 1e0668802c Planecube Optimizations and Job Security: Part One (#91696)
## About The Pull Request

This is an atomized revival of #82419, with this part containing the
simplest of its features:
- Fixes AO pref refreshing the wrong plane, thus not updating until you
swap bodies
- Removes supermatter's copypasted warp effect
- Culls distortion effects when they're not in use because its a chonky
filter
- Hides the escape menu when its, well, hidden
- Fixes hide_highest_offset not working upon parent's creation (we're so
good at our jobs hell yeah)
- Replaces runechat's AO dropshadow with an outline, because its barely
visible due to low opacity.

## Why It's Good For The Game

Our rendering performance is shit and we need to improve it, and the
first step in this task is optimizing planecube's simplest parts. The
next step is conditional culling, better non-multiz handling and
parallax rework/removal, but all of those need to be atomized as to
prevent the PR from sharing the fate of the original.

## Changelog
🆑
fix: Ambient Occlusion pref should now update immediately upon being
changed, instead of having to swap bodies or waiting for server restart
to get it updated.
code: Slightly improved rendering code/performance just a tiny bit.
/🆑
2025-06-18 21:00:23 -07:00
John WillardandRoxy a370710836 Ghost lighting now updates prefs (#91592) 2025-06-15 15:54:32 -04:00
LemonInTheDarkandRoxy f722a840f0 Presistent clients now actually properly track clients between reloads (#91440) 2025-06-15 15:42:08 -04:00
John WillardandGitHub d8a032cb56 Ghost lighting now updates prefs (#91592) 2025-06-14 00:16:37 -06:00
RoxyandGitHub 5f18ba4881 Remove all our quirk species whitelist code (#4030)
## About The Pull Request

Upstream now has a system for this, removes all our override code and
changes the relevant quirks to use the upstream system instead

## Why It's Good For The Game

Fixes #3732 

## Proof Of Testing

Tested it on a local with sol weakness, masquerade, and hydrophillic,
the latter wasn't selectable unless you were a slime, the former two
weren't selectable unless you were a hemophage. Sol weakness was still
removed as normal if you turned into a bloodsucker

## Changelog

🆑
fix: fixed species-locked quirks not actually working
/🆑
2025-06-13 16:55:48 -04:00
LemonInTheDarkandGitHub 14745079b9 Presistent clients now actually properly track clients between reloads (#91440) 2025-06-06 23:17:34 -04:00
John WillardandRoxy c90cc22bc5 Returns the title bar (#91402)
## About The Pull Request

It breaks by setting ``is-fullscreen`` to false so we need to basically
not call set_fullscreen ever as it will permanently remove it from the
client. I can't figure out why this happens, but setting
``is-fullscreen`` to any value permanently removes ``menu`` from
mainwindow, which is what this subtitle bar thing uses.

## Why It's Good For The Game

I don't like the title bar and i want it gone but this is a bug fix.

## Changelog

🆑
fix: The title bar is back for non-fullscreen users.
/🆑
2025-06-05 19:52:06 -04:00
John WillardandRoxy ac94a14822 Escape menu improvements (#91397)
Removes the blur of the escape menu so players can sorta see what's
going on in their game while going through, so they can react in case
something's happening while they're in menu.
Changes the font of the escape menu so it's no longer the LISA font
Makes the title only show up on the home menu, so being on the suicide
panel wont show you "another day on space station 13".
Moves the 'back' button on the suicide menu to the top left.

![image](https://github.com/user-attachments/assets/4d527059-38ab-4330-9e8c-f373e0942777)

![image](https://github.com/user-attachments/assets/23f0f230-f901-480d-9426-9ca8f33493f9)

This hopes to make the escape menu a little more easy to go through,
removing some obstruction of your game's screen so you can see what's
happening around you, and give a little generic part of submenus in case
we add more (which I do have at least one planned).

🆑
qol: The escape menu no longer blurs the game in the background.
qol: The escape menu now has a more readable font, and the escape menu's
back button is now smaller and in the corner.
/🆑
2025-06-05 19:50:34 -04:00
JeremiahandRoxy a5a4b83a25 Sets prettier to run on the repo (#91379)
Prettier (an auto formatter) is set to only run within the tgui folder
currently. This removes that limitation, allowing it to automatically
format all supported files in the repo (.js, .html, .yml
[etc](https://prettier.io/docs/))

I made a few exceptions for bundled and generated files
I'm of the opinion that code should look uniform and am lazy enough to
want CTRL-S to format files without having to think beyond that
2025-06-05 19:13:02 -04:00
John WillardandRoxy c5d84a2b20 Moves info buttons to the Escape menu (#91234)
This is my second contribution to the move towards removing the stat
panel (first one being https://github.com/tgstation/tgstation/pull/90572
)

This moves the info buttons at the top right of the game's screen
(Changelog, Rules, Wiki, etc) to the Escape menu, except for Fullscreen
which is now a pref instead. This means you can set Fullscreen to be on
permanently and every launch will automatically fullscreen you (the
viewport will be a little off because it only fixes it once
initialization is complete). This follows through rounds and auto
updates if you set your game to fullscreen with the OOC button or F11,
so players will learn about the pref after playing a round with
fullscreen enabled.

What the game now looks like

be a newscaster

https://github.com/user-attachments/assets/7871a226-1e0b-410d-a690-88f3616bebb0

This is something I wanted to do since the Esc menu was added but just
never got around to it, but here it is.

These buttons don't warrant being in the player's face 24/7 and since
we've want to remove the stat panel and this has to be somewhere, I
thought it would be a better fit in the Escape menu. It helps make the
Esc menu the tool players use to access their OOC tools and overall I
think improves the appearance of the game's screen to something more
like an actual game would look like, especially when our comparison is
SS14.

🆑
qol: Info buttons previously at the top right of your screen (Changelog,
wiki, forums) is now in the Escape menu.
qol: Fullscreen is now a preferences and will follow you through rounds.
/🆑
2025-06-05 18:49:10 -04:00
Roxy 164cc66c91 Remove unused is_vetted check
This data is never used by the UI and is potentially causing unnecessary DB queries
2025-06-01 19:31:00 -04:00
John WillardandGitHub 8bdacb7f8e Returns the title bar (#91402)
## About The Pull Request

It breaks by setting ``is-fullscreen`` to false so we need to basically
not call set_fullscreen ever as it will permanently remove it from the
client. I can't figure out why this happens, but setting
``is-fullscreen`` to any value permanently removes ``menu`` from
mainwindow, which is what this subtitle bar thing uses.

## Why It's Good For The Game

I don't like the title bar and i want it gone but this is a bug fix.

## Changelog

🆑
fix: The title bar is back for non-fullscreen users.
/🆑
2025-06-01 18:52:09 +00:00
RoxyandGitHub f1ee0e7427 The vettening (#3937)
## About The Pull Request

Add watermark to unvetted clients, add warning to unvetted clients when
attempting to join the game, eventually locking out access on September
1st. Add warning text to examine for unvetted clients

## Why It's Good For The Game

The time has come

## Proof Of Testing

Tested it extensively last night

## Changelog
🆑 Bubberstation Staff
add: The clock is ticking.
/🆑
2025-06-01 02:00:57 -04:00
John WillardandGitHub 7d7f284d82 Escape menu improvements (#91397)
## About The Pull Request

Removes the blur of the escape menu so players can sorta see what's
going on in their game while going through, so they can react in case
something's happening while they're in menu.
Changes the font of the escape menu so it's no longer the LISA font
Makes the title only show up on the home menu, so being on the suicide
panel wont show you "another day on space station 13".
Moves the 'back' button on the suicide menu to the top left.


![image](https://github.com/user-attachments/assets/4d527059-38ab-4330-9e8c-f373e0942777)

![image](https://github.com/user-attachments/assets/23f0f230-f901-480d-9426-9ca8f33493f9)

## Why It's Good For The Game

This hopes to make the escape menu a little more easy to go through,
removing some obstruction of your game's screen so you can see what's
happening around you, and give a little generic part of submenus in case
we add more (which I do have at least one planned).

## Changelog

🆑
qol: The escape menu no longer blurs the game in the background.
qol: The escape menu now has a more readable font, and the escape menu's
back button is now smaller and in the corner.
/🆑
2025-05-31 19:12:05 -07:00
John WillardandRoxy cc8c6916eb Adds a sleep icon (and fixes Alien HUD a bit) (#91256)
## About The Pull Request

Adds a new HUD element that only shows up when you're resting that
flicks when you click it once, and puts you to sleep for 40 seconds if
you double click it (so you don't accidentally sleep yourself for 40
seconds), which is meant to replace the verb in the stat panel.
Doesn't show up if you're sleep immune.
I also fixed alien huds a bit, putting rest on the right side where it
is for every other mob, and brought the floor change buttons down to
compensate.

New Larva HUD (other xenos have Throw between rest and sleep)

![image](https://github.com/user-attachments/assets/890faa34-4929-418b-ba88-d007bd1e6a4e)

Demonstration


https://github.com/user-attachments/assets/11f7574d-dd6d-4da5-ab39-6fcf6d6694b9

Rest can be seen in IDB

### New accessibility setting

As a compromise to putting a tgui confirmation menu in your face or
requiring a double click, I added a new setting in accessibility tab
that allows you to disable "double click" features. So far all it does
is give a tgui menu instead of require double click for sleeping, and
allow you to further examine things with a linked button in base
examine.

## Why It's Good For The Game

Sleep is currently only a verb available in the stat panel, this
provides an alternative so it doesn't become a chatbar-only verb when
the stat panel is removed. It's also just good feedback to the player
that this action exists.
2025-05-30 03:00:01 -04:00
JeremiahandGitHub 9db2f6916b Sets prettier to run on the repo (#91379)
## About The Pull Request
Prettier (an auto formatter) is set to only run within the tgui folder
currently. This removes that limitation, allowing it to automatically
format all supported files in the repo (.js, .html, .yml
[etc](https://prettier.io/docs/))

I made a few exceptions for bundled and generated files
## Why It's Good For The Game
I'm of the opinion that code should look uniform and am lazy enough to
want CTRL-S to format files without having to think beyond that
## Changelog
2025-05-29 21:23:59 -07:00
John WillardandGitHub 793853a2d4 Moves info buttons to the Escape menu (#91234)
## About The Pull Request

This is my second contribution to the move towards removing the stat
panel (first one being https://github.com/tgstation/tgstation/pull/90572
)

This moves the info buttons at the top right of the game's screen
(Changelog, Rules, Wiki, etc) to the Escape menu, except for Fullscreen
which is now a pref instead. This means you can set Fullscreen to be on
permanently and every launch will automatically fullscreen you (the
viewport will be a little off because it only fixes it once
initialization is complete). This follows through rounds and auto
updates if you set your game to fullscreen with the OOC button or F11,
so players will learn about the pref after playing a round with
fullscreen enabled.

What the game now looks like

##### Alt ideas for sprites: Changelog can be a newspaper and Forums can
be a newscaster


https://github.com/user-attachments/assets/7871a226-1e0b-410d-a690-88f3616bebb0

This is something I wanted to do since the Esc menu was added but just
never got around to it, but here it is.

## Why It's Good For The Game

These buttons don't warrant being in the player's face 24/7 and since
we've want to remove the stat panel and this has to be somewhere, I
thought it would be a better fit in the Escape menu. It helps make the
Esc menu the tool players use to access their OOC tools and overall I
think improves the appearance of the game's screen to something more
like an actual game would look like, especially when our comparison is
SS14.

## Changelog

🆑
qol: Info buttons previously at the top right of your screen (Changelog,
wiki, forums) is now in the Escape menu.
qol: Fullscreen is now a preferences and will follow you through rounds.
/🆑
2025-05-29 18:25:33 -07:00
John WillardandRoxy 25da3e86a6 Ghost settings UI (#91370)
This is part of my ongoing project to remove the Stat panel which you
can read/contribute to here: https://hackmd.io/443_dE5lRWeEAp9bjGcKYw

Replaces the pAI button at the bottom of Ghost's HUD with a new button
for Ghost settings

Default look

![image](https://github.com/user-attachments/assets/7b97287d-5f8b-40a4-b574-98ecaafa8533)

With fun verbs (admin only, the 2 buttons at the top right), No body,
and lag switches on (disables T-Ray and Zooming)

![image](https://github.com/user-attachments/assets/3ee9bb9b-389c-452c-8ff5-fbd0ee677fef)

The ghost icon next to "re-enter body" is the DNR button, which requires
double click.
Extra view is now easier to understand, 0 is "default", anything more is
extra vision you get. Goes to 3 for regular users, 7 for BYOND members.

Removes the "Ghost" tab from the stat panel entirely, this replaces it.

The Ghost tab of the stat panel is filled with barely functional stuff,
like "Jump to Mob" which allows you to jump to "oranges ear" which
teleports you to nullspace, or the 4 different jump to verbs for
different things which is irrelevant from the Orbit menu and the many
improvements it got over the years, and even the Notifications panel,
which seems pretty useful, but because it's delegated to a small button
filled with the rest of these it gets entirely drowned out.
This puts all the important things in front of the user at the click of
a button, meant to be easy to navigate and giving important information
first.

🆑
add: Added a 'Ghost settings' button, taking the spot of the pAI
candidate button and replacing the "Ghost" tab of the Stat panel. This
button contains buttons pertinent to your time as an Observer.
/🆑
2025-05-29 16:17:39 -04:00
SmArtKarandRoxy 0f8fc18054 Colorblindness now prevents you from seeing wire colors (#91315)
Being colorblind now makes you see all wires in tones of grey.

Also fixes the eyechart not taking the monochromacy quirk into account
when checking for colorblindness

Makes the quirk/trauma a bit more immersive and can lead to funny
situations when you know which color to cut but can't find it.
2025-05-29 16:16:13 -04:00
John WillardandGitHub d21c105522 Adds a sleep icon (and fixes Alien HUD a bit) (#91256)
## About The Pull Request

Adds a new HUD element that only shows up when you're resting that
flicks when you click it once, and puts you to sleep for 40 seconds if
you double click it (so you don't accidentally sleep yourself for 40
seconds), which is meant to replace the verb in the stat panel.
Doesn't show up if you're sleep immune.
I also fixed alien huds a bit, putting rest on the right side where it
is for every other mob, and brought the floor change buttons down to
compensate.

New Larva HUD (other xenos have Throw between rest and sleep)

![image](https://github.com/user-attachments/assets/890faa34-4929-418b-ba88-d007bd1e6a4e)

Demonstration


https://github.com/user-attachments/assets/11f7574d-dd6d-4da5-ab39-6fcf6d6694b9

Rest can be seen in IDB

### New accessibility setting

As a compromise to putting a tgui confirmation menu in your face or
requiring a double click, I added a new setting in accessibility tab
that allows you to disable "double click" features. So far all it does
is give a tgui menu instead of require double click for sleeping, and
allow you to further examine things with a linked button in base
examine.

## Why It's Good For The Game

Sleep is currently only a verb available in the stat panel, this
provides an alternative so it doesn't become a chatbar-only verb when
the stat panel is removed. It's also just good feedback to the player
that this action exists.
2025-05-29 20:15:07 +00:00
John WillardandGitHub ca96a9e2cd Ghost settings UI (#91370)
## About The Pull Request

This is part of my ongoing project to remove the Stat panel which you
can read/contribute to here: https://hackmd.io/443_dE5lRWeEAp9bjGcKYw

Replaces the pAI button at the bottom of Ghost's HUD with a new button
for Ghost settings

Default look

![image](https://github.com/user-attachments/assets/7b97287d-5f8b-40a4-b574-98ecaafa8533)

With fun verbs (admin only, the 2 buttons at the top right), No body,
and lag switches on (disables T-Ray and Zooming)

![image](https://github.com/user-attachments/assets/3ee9bb9b-389c-452c-8ff5-fbd0ee677fef)

The ghost icon next to "re-enter body" is the DNR button, which requires
double click.
Extra view is now easier to understand, 0 is "default", anything more is
extra vision you get. Goes to 3 for regular users, 7 for BYOND members.

Removes the "Ghost" tab from the stat panel entirely, this replaces it.

## Why It's Good For The Game

The Ghost tab of the stat panel is filled with barely functional stuff,
like "Jump to Mob" which allows you to jump to "oranges ear" which
teleports you to nullspace, or the 4 different jump to verbs for
different things which is irrelevant from the Orbit menu and the many
improvements it got over the years, and even the Notifications panel,
which seems pretty useful, but because it's delegated to a small button
filled with the rest of these it gets entirely drowned out.
This puts all the important things in front of the user at the click of
a button, meant to be easy to navigate and giving important information
first.

## Changelog

🆑
add: Added a 'Ghost settings' button, taking the spot of the pAI
candidate button and replacing the "Ghost" tab of the Stat panel. This
button contains buttons pertinent to your time as an Observer.
/🆑
2025-05-29 10:21:29 -07:00
SmArtKarandGitHub a5eed384ce Colorblindness now prevents you from seeing wire colors (#91315)
Being colorblind now makes you see all wires in tones of grey.

Also fixes the eyechart not taking the monochromacy quirk into account
when checking for colorblindness

Makes the quirk/trauma a bit more immersive and can lead to funny
situations when you know which color to cut but can't find it.
2025-05-28 09:45:20 -04:00