## About The Pull Request
1. Penbang
A flashbang disguised as a pen. Clicking the pen arms the flashbang and
has no other visual or audio tell besides the pen clicking.
The fuse's length is based on the angle the pen cap is twisted.
Works as a normal pen otherwise.
2. Camera Flash
A camera with a high power flash.
Clicking on an adjacent target will flash them, ie, as a handheld flash.
Works as a normal camera otherwise - no tell.
3. Dagger Boot
A pair of jackboots with a blade embedded in them.
Makes your kicks sharp, meaning they will cause bleeding.
Looks like normal jackboots otherwise, though has a tell on
double-examine
4. Monster Cube Box
A box containing 5 monster cubes, which spawn into a random monster when
wet.
Monsters include Migos, Carps, Bears, Spiders, Wolves...
5. Spider Bite Scroll
A martial art focused around kicks and grabs.
- Punches against standing, staggered targets will instead kick them,
applying the bonus accuracy and damage that you'd expect from a kick.
(Also combos with the dagger boots)
- All kicks have a chance to disarm the target's active weapon. Chance
increases per sequential kick.
- Grants you the innate ability to tackle. This form of tackling has a
very high skill modifier, meaning you are very likely to get a positive
outcome (or at least, not fail). You also get up fast from it.
- Your grabs are 20% harder to escape from and deal an additional 10
stam damage on fail.
## Why It's Good For The Game
1, 2, 3: Just some random flavorful items, giving them some more toys to
use to complete bounties.
4: Shenanigans, for people who just wanna do "funny thing" instead of
focusing on big loot.
5: I figured it would fill a fun niche: Spies are commonly depicted as
martial artists, and the only martial arts they can obtain is Krav Maga
(it's not unique to Spies) and Sleeping Carp (it's not unique to Spies).
This gives them their own thing that people may look forward to
acquiring and playing around with.
As for the design of it, I wanted to add something that synergizes with
one of the other other items, so in the field if you notice both of them
pop up you really want to go for both.
The rest of the design I just filled in as vaguely useful and flavorful
tools a spy might want for kidnapping or detaining people: Better grabs,
tackling, and disarms.
Then I just went with the flavor of it being something the Spider Clan
used to teach to their Spies / Ninjas, kinda like an analog to the real
life Ninjutsu. (Maybe we can give it to Space Ninjas as well later...
since it doesn't especially benefit Ninjas in any way.)
## Changelog
🆑 Melbert
add: Adds 5 rewards to the Spy item pool: Penbang, Camera Flash,
Dagger-Boot, Monster Cube Box, and the Spider Bite martial art
/🆑
## About The Pull Request
<img width="491" height="301" alt="image"
src="https://github.com/user-attachments/assets/a3b5b19f-edf5-4de9-9201-9cbfab9e8827"
/>
Mod computers with the access changing software installed have a
secondary ID slot once again. This ID slot doesn't contribute to access.
You can insert IDs into the slot with right click and remove them with
alt-right click.
Also removes the "New IDs and you" memo paper.
Also tweaks PDA on_deconstruct so contents are dropped on when they're
deconstructed with assembly.
Fixes#92151
## Why It's Good For The Game
Changing IDs is very unnecessarily clunky with the one slot. Insert hop
id, log in, remove hop id, insert crew id, change access, remove crew
id, log out.
We had it right back when we had two slots. Insert hop ID, insert crew
id, log in. It just works.
This also allows for mobile HoPs to change access without necessitating
removing their ID from their PDA.
Other changes:
The "New IDs and you" memo is very old. They haven't been new for 4
years now. I don't think anyone reads it and they served their purpose.
I found it odd that, if your PDA was melted or blown up, it would delete
your ID. If this is a hold-over from old PDA behavior feel free to let
me know but otherwise it seems sensible that it'd spit out the contents
as you would expect.
## Changelog
🆑 Melbert
qol: The access changing software (the HoP console) now has ID two slots
again (one for the HoP's id and one for the ID being changed). You can
insert IDs in the secondary slot via the UI or right click, and remove
them via the UI or alt-right click.
qol: If your PDA is destroyed via acid or bombs, your ID (and similar
contents such as disks) are spit out instead of being deleted
del: Deletes the "New IDs and you" memo in the HoP's office. They
haven't been new for 4 years.
fix: Engineering sub-tab in the access changing software no longer looks
messed up
fix: Fix reversed alt-click logic for mod pcs
/🆑
# Conflicts:
# code/modules/modular_computers/computers/item/computer.dm
## About The Pull Request
<img width="491" height="301" alt="image"
src="https://github.com/user-attachments/assets/a3b5b19f-edf5-4de9-9201-9cbfab9e8827"
/>
Mod computers with the access changing software installed have a
secondary ID slot once again. This ID slot doesn't contribute to access.
You can insert IDs into the slot with right click and remove them with
alt-right click.
Also removes the "New IDs and you" memo paper.
Also tweaks PDA on_deconstruct so contents are dropped on when they're
deconstructed with assembly.
Fixes#92151
## Why It's Good For The Game
Changing IDs is very unnecessarily clunky with the one slot. Insert hop
id, log in, remove hop id, insert crew id, change access, remove crew
id, log out.
We had it right back when we had two slots. Insert hop ID, insert crew
id, log in. It just works.
This also allows for mobile HoPs to change access without necessitating
removing their ID from their PDA.
Other changes:
The "New IDs and you" memo is very old. They haven't been new for 4
years now. I don't think anyone reads it and they served their purpose.
I found it odd that, if your PDA was melted or blown up, it would delete
your ID. If this is a hold-over from old PDA behavior feel free to let
me know but otherwise it seems sensible that it'd spit out the contents
as you would expect.
## Changelog
🆑 Melbert
qol: The access changing software (the HoP console) now has ID two slots
again (one for the HoP's id and one for the ID being changed). You can
insert IDs in the secondary slot via the UI or right click, and remove
them via the UI or alt-right click.
qol: If your PDA is destroyed via acid or bombs, your ID (and similar
contents such as disks) are spit out instead of being deleted
del: Deletes the "New IDs and you" memo in the HoP's office. They
haven't been new for 4 years.
fix: Engineering sub-tab in the access changing software no longer looks
messed up
fix: Fix reversed alt-click logic for mod pcs
/🆑
## About The Pull Request
Changes human name to update whenever anything that could result in
their visible name changing occurs, such as changing IDs, equipping
gasmasks, picking potted plants, etc. Currently name updates occur every
``Life()`` tick and in a few "special" cases, which causes a lot of name
changes from sources such as equipment to not apply until the mob ticks,
and makes us waste a tiiiny bit of CPU time on name updates.
I've also slighly cleaned up human /Life() and made species'
``spec_life()`` not run when the mob is dead, as it was causing certain
unintended interactions, such as slimepeople regenerating blood while
dead.
## Why It's Good For The Game
Microoptimization, ensures that correct names are always used (in case
something could update their name but the mob hasn't ticked yet), plus
its just a cleaner implementation
(cherry picked from commit 87e1ef6f64)
# Conflicts:
# code/game/data_huds.dm
## About The Pull Request
Matching body parts covered of chaplain's armor to sprites. I think a
leftover from times when those armours where subtype of riot armour.
<img width="75" height="69"
alt="474691928-183826a3-79e5-431e-aed5-b9a02a2c382e"
src="https://github.com/user-attachments/assets/072228c8-6b04-4aef-b656-aae757af6a7a"
/>
Adept armor was covering arms, hands and feet yet it sprite wasn't
covering those parts. In exchange gave bone bracers to the kit so it
wasn't the worst choice.
<img width="66" height="77" alt="obraz"
src="https://github.com/user-attachments/assets/f3b3ab73-df07-4dc9-890a-47122163f3f5"
/>
Same for Divine Archer coat. It's unique boots and bracers now have
armor. Boots provide less protection to keep the archer comfortable
while on the move (RP reason). (Real reason: so armor from coat and
boots don't give too much legs protection)
## Why It's Good For The Game
Makes Chaplain's armor less confusing. No exposed arms with secret 50%
melee resist. Exposed limbs are actually exposed.
Profane Kit getting something unique - really strong helmet against
melee.
## Changelog
🆑
add: Bone bracers to Divine Adept kit
qol: Adept robes doesn't cover arms, hands and feet as to match the
sprite
qol: Ancient armour doesn't cover hands as to match the sprite
qol: Divine Archer coat doesn't cover arms, hands and feet as to match
the sprite
qol: Divine Archer bracers now have the same armor as Divine Archer coat
balance: Divine Archer boots have their own unique armor
/🆑
(cherry picked from commit 255801a668)
## About The Pull Request
Changes human name to update whenever anything that could result in
their visible name changing occurs, such as changing IDs, equipping
gasmasks, picking potted plants, etc. Currently name updates occur every
``Life()`` tick and in a few "special" cases, which causes a lot of name
changes from sources such as equipment to not apply until the mob ticks,
and makes us waste a tiiiny bit of CPU time on name updates.
I've also slighly cleaned up human /Life() and made species'
``spec_life()`` not run when the mob is dead, as it was causing certain
unintended interactions, such as slimepeople regenerating blood while
dead.
## Why It's Good For The Game
Microoptimization, ensures that correct names are always used (in case
something could update their name but the mob hasn't ticked yet), plus
its just a cleaner implementation
## About The Pull Request
Matching body parts covered of chaplain's armor to sprites. I think a
leftover from times when those armours where subtype of riot armour.
<img width="75" height="69"
alt="474691928-183826a3-79e5-431e-aed5-b9a02a2c382e"
src="https://github.com/user-attachments/assets/072228c8-6b04-4aef-b656-aae757af6a7a"
/>
Adept armor was covering arms, hands and feet yet it sprite wasn't
covering those parts. In exchange gave bone bracers to the kit so it
wasn't the worst choice.
<img width="66" height="77" alt="obraz"
src="https://github.com/user-attachments/assets/f3b3ab73-df07-4dc9-890a-47122163f3f5"
/>
Same for Divine Archer coat. It's unique boots and bracers now have
armor. Boots provide less protection to keep the archer comfortable
while on the move (RP reason). (Real reason: so armor from coat and
boots don't give too much legs protection)
## Why It's Good For The Game
Makes Chaplain's armor less confusing. No exposed arms with secret 50%
melee resist. Exposed limbs are actually exposed.
Profane Kit getting something unique - really strong helmet against
melee.
## Changelog
🆑
add: Bone bracers to Divine Adept kit
qol: Adept robes doesn't cover arms, hands and feet as to match the
sprite
qol: Ancient armour doesn't cover hands as to match the sprite
qol: Divine Archer coat doesn't cover arms, hands and feet as to match
the sprite
qol: Divine Archer bracers now have the same armor as Divine Archer coat
balance: Divine Archer boots have their own unique armor
/🆑
## About The Pull Request
title
## Why It's Good For The Game
because you pay tc for chemical room + not intended
## Changelog
🆑
fix: Fixed the nukies outpost chemical locker not having beakers inside
of a beaker box
/🆑
## About The Pull Request
Partially reverts #84594, removing forced tint from night vision goggles
(if anyone for some reason wants to experience it again, they can toggle
it via alt click like it could be done before the [aforementioned
PR](https://github.com/tgstation/tgstation/pull/84594))
Approved by Ghom (the original PR author)
## Why It's Good For The Game
NVG tint is a pretty sizeable accessibility issue, as forced screentint
can easily cause eye strain if they're used for prolonged periods of
time, being especially bad for blue-tinted NVGs. They're already locked
pretty deep down the techweb, and this change just made everyone avoid
them. If we need to make tintless variants of them for every single
antag and special role (and bitrunners, lol), we maybe shouldn't have
added the tint in the first place.
## About The Pull Request
title
## Why It's Good For The Game
because you pay tc for chemical room + not intended
## Changelog
🆑
fix: Fixed the nukies outpost chemical locker not having beakers inside
of a beaker box
/🆑
## About The Pull Request
Partially reverts #84594, removing forced tint from night vision goggles
(if anyone for some reason wants to experience it again, they can toggle
it via alt click like it could be done before the [aforementioned
PR](https://github.com/tgstation/tgstation/pull/84594))
Approved by Ghom (the original PR author)
## Why It's Good For The Game
NVG tint is a pretty sizeable accessibility issue, as forced screentint
can easily cause eye strain if they're used for prolonged periods of
time, being especially bad for blue-tinted NVGs. They're already locked
pretty deep down the techweb, and this change just made everyone avoid
them. If we need to make tintless variants of them for every single
antag and special role (and bitrunners, lol), we maybe shouldn't have
added the tint in the first place.
## About The Pull Request
puts both the grass and normal sabre sheath types under a shared parent
type for shared behavior.
considered subtyping the storage datum but it seemed overkill. can do if
requested.
## Why It's Good For The Game
less copy paste. good if someone wants to add a clay-more sheath for
similar (believe that exists somewhere downstream), would have done it
myself but no sprites.
## Changelog
N/A
## About The Pull Request
puts both the grass and normal sabre sheath types under a shared parent
type for shared behavior.
considered subtyping the storage datum but it seemed overkill. can do if
requested.
## Why It's Good For The Game
less copy paste. good if someone wants to add a clay-more sheath for
similar (believe that exists somewhere downstream), would have done it
myself but no sprites.
## Changelog
N/A
## About The Pull Request
## Chemical Department
Adds a extra section to the chemlab, with materials and even a empty
bomb case for your evil chemistry needs!
Adds various beakers sizes of beakers to do chemistry with, gives one
chemical payload that can hold up to 5 beakers to nukies
Adds a locker with chemical closet supplies, medigels pill bottles
beakers.
Adds a hand labeler to properly label your stuff with! a succesfull
nukie is a organized one
Adds a toolbox for properly editing of grenades and plumbing
Adds a smart fridge ontop of the window to store your stuff in

## Bio Terrorism Department
Expands the cells so you no longer have to juggle your slimes between 2
cells
Adds a big BZ chamber to store the slimes your not breeding in (enough
space to contain every color)
adds a fully upgraded slime proccesor aswell!

## Medical section
Moves some stuff to make place for a operating computer

This also introduces a new locker sprite made by aliceee2ch
and one chemical payload variant by me
## Why It's Good For The Game
Removes some of the jank and make these places easier to use.
Adds extra stuff to the chemical section to widen the options you can do
as nukies. and make the lab a more proper lab toolwise then the absolute
bare mininum
## Changelog
🆑 Ezel
balance: Nukie Chemistry section, now includes a proper chemistry locker
with pill bottles medigels and big beakers
balance: Nukie Chemistry section, now has a extra section attached to it
that holds some limited amount chemistry materials and a empty bombcase.
balance: Nukie Chemistry section, now has various sizes of beakers, a
special chemical payload that can hold up to 5 beakers, and a hand
labeler to tag your stuff with
map: Nukie Chemistry section, now has a smartfridge
map: Nukie xenobiology section widened and added a fully upgraded slime
proccesor
sprite: New syndicate chemical locker sprite by aliceee2ch
sprite: Adds a darker version of chemical payload only for nukies
/🆑
---------
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
## Chemical Department
Adds a extra section to the chemlab, with materials and even a empty
bomb case for your evil chemistry needs!
Adds various beakers sizes of beakers to do chemistry with, gives one
chemical payload that can hold up to 5 beakers to nukies
Adds a locker with chemical closet supplies, medigels pill bottles
beakers.
Adds a hand labeler to properly label your stuff with! a succesfull
nukie is a organized one
Adds a toolbox for properly editing of grenades and plumbing
Adds a smart fridge ontop of the window to store your stuff in

## Bio Terrorism Department
Expands the cells so you no longer have to juggle your slimes between 2
cells
Adds a big BZ chamber to store the slimes your not breeding in (enough
space to contain every color)
adds a fully upgraded slime proccesor aswell!

## Medical section
Moves some stuff to make place for a operating computer

This also introduces a new locker sprite made by aliceee2ch
and one chemical payload variant by me
## Why It's Good For The Game
Removes some of the jank and make these places easier to use.
Adds extra stuff to the chemical section to widen the options you can do
as nukies. and make the lab a more proper lab toolwise then the absolute
bare mininum
## Changelog
🆑 Ezel
balance: Nukie Chemistry section, now includes a proper chemistry locker
with pill bottles medigels and big beakers
balance: Nukie Chemistry section, now has a extra section attached to it
that holds some limited amount chemistry materials and a empty bombcase.
balance: Nukie Chemistry section, now has various sizes of beakers, a
special chemical payload that can hold up to 5 beakers, and a hand
labeler to tag your stuff with
map: Nukie Chemistry section, now has a smartfridge
map: Nukie xenobiology section widened and added a fully upgraded slime
proccesor
sprite: New syndicate chemical locker sprite by aliceee2ch
sprite: Adds a darker version of chemical payload only for nukies
/🆑
---------
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
This PR simply doesn't add any special gameplay mechanics or any
mechanics but instead just updates the sprites for the medals boxes and
gives it variants. I've attempted to save sprite space by making them
all share the same 'opened' box sprite. But ultimately this is only a
cosmetic PR.
medal boxes locked

medal boxes unlocked

medal inside their respective boxes

## Why It's Good For The Game
With this PR I am attempting to add some visual aid to the game and
update the lockboxes. It wont add any special mechanics or anything but
just visual aid and to just update the sprite. I think this would be
good to be merged, only because it is just a sprite change, and it
updates the sprite from all the way in 2017, hence modernizing them
somewhat. I've taken the old colours from the former lockbox so it can
keep to its roots but also still look modern.
## Changelog
🆑
image: updates medalbox sprites.
image: adds variants to medal box sprites.
/🆑
## About The Pull Request
Several different tailcoats did not have the proper storage or armor
values applied to them from their parent labcoat type. Also the
pharmacist's labcoat did not inherit the proper storage from the
chemist's labcoat. This fixes all that.
This includes:
Coroner's tailcoat: storage only
Paramedic's tailcoat: storage and fishing bonus (paramedic's labcoat has
a fishing bonus)
Geneticist's tailcoat: storage only
Scientist's tailcoat: storage only
Chemist's tailcoat: storage only
Pharmacist's labcoat: storage only
CMO's tailcoat: storage and special fishing component (CMO's labcoat has
a fishing bonus)
RD's tailcoat: storage and armor (RD's labcoat has better resistances
than the normal labcoat)
Brig-medic's tailcoat: storage and armor, utilized the same stats from
brig-medic's security medic labcoat
The way it was done was by just having them inherit the proper type that
they are. So coroner's tailcoat inherits the coroner's labcoat,
paramedic's tailcoat inherits the paramedic's labcoat etc.
## Why It's Good For The Game
Inconsistencies and bugs are bad. These were intended to have parity
with their respective job's normal attire and they do for the others but
not for these, so I fix this oversight.
## Proof Of Testing
Tested locally, works fine.
## Changelog
🆑
fix: fixed various tailcoats and the pharmacist's labcoat not having the
proper storage or armor values
/🆑
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
## About The Pull Request
This PR simply doesn't add any special gameplay mechanics or any
mechanics but instead just updates the sprites for the medals boxes and
gives it variants. I've attempted to save sprite space by making them
all share the same 'opened' box sprite. But ultimately this is only a
cosmetic PR.
medal boxes locked

medal boxes unlocked

medal inside their respective boxes

## Why It's Good For The Game
With this PR I am attempting to add some visual aid to the game and
update the lockboxes. It wont add any special mechanics or anything but
just visual aid and to just update the sprite. I think this would be
good to be merged, only because it is just a sprite change, and it
updates the sprite from all the way in 2017, hence modernizing them
somewhat. I've taken the old colours from the former lockbox so it can
keep to its roots but also still look modern.
## Changelog
🆑
image: updates medalbox sprites.
image: adds variants to medal box sprites.
/🆑
## About The Pull Request
title
## Why It's Good For The Game
it inherits a lot of behavior from clothing which leads to lots of bugs
when it isn't actually clothes, for example: shredded overlays. this
should be better.
probably fixes a bunch of bugs
## Changelog
🆑
code: mob holders are no longer subtypes of clothes, report any issues
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
This PR removes the suture/emergency item and replaces it with a bandage
in all instances.
Provides as much brute healing overall(25), but in one big chunk.
## Why It's Good For The Game
### Flavour
Suturing is a specialised medical skill and not typically something
you'd expect to find a standard workplace first aid kit.
The emergency suture also shared a sprite with the regular suture
causing confusion.
### Healing Glut
Like when I first added sutures and mesh six year ago, one of the main
reasons for making this change is also to start making a dent in the
glut of free easy healing available to the crew.
While medical is in a much better place than before we started the grand
medical revitalisation project¹ 6 or so years ago, we have been
backsliding by turbo powercreeping chems, letting plumbing churn out
ungodly amounts of heal mix patches, nerfing organ damage and wounds and
adding more free healing items to maps.
While these bandages provide the same amount of healing, the healing is
less granular as such some of it will likely be wasted, leading to a
modest reduction of free heal points available to the crew under real
world conditions.
#### Wound Treatment
The bandages are worse for treating bleeds, but the kit already contains
a super ez bleed fixing pen and gauze, so the kit is still very robust
for dealing with bleeds.
Hopefully the minor reduction in bleed treating power will encourage
players to engage more with the expansive and robust system we have for
ghetto treatment of bleeds.
While this doesn't address the multiple elephants in the room, it
reduces the free item glut slightly.
1. (cloning removal, organ damage, trek meds removal, sleeper removal,
bruise pack removal, surgery expansion etc)
## About The Pull Request
title
## Why It's Good For The Game
it inherits a lot of behavior from clothing which leads to lots of bugs
when it isn't actually clothes, for example: shredded overlays. this
should be better.
probably fixes a bunch of bugs
## Changelog
🆑
code: mob holders are no longer subtypes of clothes, report any issues
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
This PR removes the suture/emergency item and replaces it with a bandage
in all instances.
Provides as much brute healing overall(25), but in one big chunk.
## Why It's Good For The Game
### Flavour
Suturing is a specialised medical skill and not typically something
you'd expect to find a standard workplace first aid kit.
The emergency suture also shared a sprite with the regular suture
causing confusion.
### Healing Glut
Like when I first added sutures and mesh six year ago, one of the main
reasons for making this change is also to start making a dent in the
glut of free easy healing available to the crew.
While medical is in a much better place than before we started the grand
medical revitalisation project¹ 6 or so years ago, we have been
backsliding by turbo powercreeping chems, letting plumbing churn out
ungodly amounts of heal mix patches, nerfing organ damage and wounds and
adding more free healing items to maps.
While these bandages provide the same amount of healing, the healing is
less granular as such some of it will likely be wasted, leading to a
modest reduction of free heal points available to the crew under real
world conditions.
#### Wound Treatment
The bandages are worse for treating bleeds, but the kit already contains
a super ez bleed fixing pen and gauze, so the kit is still very robust
for dealing with bleeds.
Hopefully the minor reduction in bleed treating power will encourage
players to engage more with the expansive and robust system we have for
ghetto treatment of bleeds.
While this doesn't address the multiple elephants in the room, it
reduces the free item glut slightly.
1. (cloning removal, organ damage, trek meds removal, sleeper removal,
bruise pack removal, surgery expansion etc)
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.


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


- 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
/🆑
## About The Pull Request
Returns clean toolbox back to their original force upgrade of 1TC = 1
damage, rather than .5 - which was added because progtots had access to
'infinite' TC.
## Why It's Good For The Game
Progression traitor is dead
## Changelog
🆑
balance: Assistant-only clean toolbox now does 1 damage per TC again.
/🆑
## About The Pull Request
Just makes sure the variables are actually filled before trying to spawn
stuff, so it doesn't try to spawn `null` and runtime
## Why It's Good For The Game
Not entirely relevant here, but it came up downstream when trying to
make one that starts empty. Ifever an empty guncase was wanted up here,
it might prevent a runtime before it happens.
## Changelog
No player facing changes (am I using that right? There's zero change
anybody could see ingame)
## About The Pull Request
Returns clean toolbox back to their original force upgrade of 1TC = 1
damage, rather than .5 - which was added because progtots had access to
'infinite' TC.
## Why It's Good For The Game
Progression traitor is dead
## Changelog
🆑
balance: Assistant-only clean toolbox now does 1 damage per TC again.
/🆑
## About The Pull Request
Changes `/obj/item/storage/backpack/duffelbag/update_desc` to
`/obj/item/storage/backpack/duffelbag/examine`
## Why It's Good For The Game
`examine` is cleaner for this, using `update_desc` also prevents
dufflebags from being used as a `/datum/orderable_item` because they
fail the unit test for having a dynamic description
## Changelog
🆑
code: examine text for dufflebag zipper status uses examine proc instead
of update_desc
/🆑
## About The Pull Request
Changes `/obj/item/storage/backpack/duffelbag/update_desc` to
`/obj/item/storage/backpack/duffelbag/examine`
## Why It's Good For The Game
`examine` is cleaner for this, using `update_desc` also prevents
dufflebags from being used as a `/datum/orderable_item` because they
fail the unit test for having a dynamic description
## Changelog
🆑
code: examine text for dufflebag zipper status uses examine proc instead
of update_desc
/🆑
## About The Pull Request
Just makes sure the variables are actually filled before trying to spawn
stuff, so it doesn't try to spawn `null` and runtime
## Why It's Good For The Game
Not entirely relevant here, but it came up downstream when trying to
make one that starts empty. Ifever an empty guncase was wanted up here,
it might prevent a runtime before it happens.
## Changelog
No player facing changes (am I using that right? There's zero change
anybody could see ingame)
## About The Pull Request
Removes action_slots from items which dont need it.
Either the parent type already has it set (anything storage)
or chain of command, which has no actions, nor any subtypes do
## Why It's Good For The Game
code improvement
## Changelog
🆑
code: removes action_slots when not needed
/🆑
**We all like a little flavor, and a new brand in the sector promises a
dark smoke, questionable trace compounds, and the robust flavors of
maintenance...**

## About The Pull Request
I've added a new brand of cigarettes! Mainthol greys, now available in
hacked cigarette vending machines for an immodest sum, hand rolled &
grown in the Sybil sector. The syndicate stock some stolen surplus too.
The goal was to create another nice little flavor item, a compliment to
grey bull and other maintenance loot.
<details>
<summary>Chemical contents in code, for the joy of discovery!</summary>
```
1u oculine is in every cigarette, an imperceptible buffer against the
welder harming an enterprising assistant's eyes.
Extremely trace amount for cigarette microdosing.
Each cigarette has a 40% chance to have an extra reagent from a list of
14 minor toxins, drugs, and things like glitter.
They're inconsequential via cigarette, but still noticed and
experienced.
```
</details>
I tested these bad boys extensively, blending them, ate them, blinded
myself with a welder, spammed a health analyzer while smoking to gauge
chemicals and ensure intended effects are noticed and add a nice je ne
sais quois.
**Our sprites!**

## Why It's Good For The Game
It's an extra little flavor item with a couple simple surprises to spice
up your assisting.
## Changelog
🆑
add: Added a new brand of cigarettes to hacked & syndicate vending
machines+spawner list.
/🆑
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
https://github.com/tgstation/tgstation/pull/91415 changed how
zip_slowdown is incremented and decremented, but did not test their
changes or consider that set_zipper runs on init to zip it, reducing
slowdown, thus reducing slowdown to negative numbers.
## Why It's Good For The Game
speedy duffels bad
## Changelog
🆑
fix: fix duffels making you fast as fuck
/🆑
## About The Pull Request
Removes action_slots from items which dont need it.
Either the parent type already has it set (anything storage)
or chain of command, which has no actions, nor any subtypes do
## Why It's Good For The Game
code improvement
## Changelog
🆑
code: removes action_slots when not needed
/🆑
**We all like a little flavor, and a new brand in the sector promises a
dark smoke, questionable trace compounds, and the robust flavors of
maintenance...**

## About The Pull Request
I've added a new brand of cigarettes! Mainthol greys, now available in
hacked cigarette vending machines for an immodest sum, hand rolled &
grown in the Sybil sector. The syndicate stock some stolen surplus too.
The goal was to create another nice little flavor item, a compliment to
grey bull and other maintenance loot.
<details>
<summary>Chemical contents in code, for the joy of discovery!</summary>
```
1u oculine is in every cigarette, an imperceptible buffer against the
welder harming an enterprising assistant's eyes.
Extremely trace amount for cigarette microdosing.
Each cigarette has a 40% chance to have an extra reagent from a list of
14 minor toxins, drugs, and things like glitter.
They're inconsequential via cigarette, but still noticed and
experienced.
```
</details>
I tested these bad boys extensively, blending them, ate them, blinded
myself with a welder, spammed a health analyzer while smoking to gauge
chemicals and ensure intended effects are noticed and add a nice je ne
sais quois.
**Our sprites!**

## Why It's Good For The Game
It's an extra little flavor item with a couple simple surprises to spice
up your assisting.
## Changelog
🆑
add: Added a new brand of cigarettes to hacked & syndicate vending
machines+spawner list.
/🆑
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
https://github.com/tgstation/tgstation/pull/91415 changed how
zip_slowdown is incremented and decremented, but did not test their
changes or consider that set_zipper runs on init to zip it, reducing
slowdown, thus reducing slowdown to negative numbers.
## Why It's Good For The Game
speedy duffels bad
## Changelog
🆑
fix: fix duffels making you fast as fuck
/🆑
My original plan was to just implement materials into crafting so that
items would inherit the materials of their components, allowing for some
interesting stuff if the material flags of the item allow it. However to
my dismay crafting is a pile of old tech debt, starting from the old
`del_reqs` and `CheckParts` which still contain lines about old janky
bandaids that are no longer in use nor reachable, up to the
`customizable_reagent_holder` component which has some harddel issues
when your custom food is sliced, and items used in food recipes not
being deleted and instead stored inside the result with no purpose as
well as other inconsistencies like stack recipes that transfer materials
having counterparts in the UI that don't do that.
EDIT: Several things have come up while working on this, so I apologise
that it ended up changing over 100+ files. I managed to atomize some of
the changes, but it's a bit tedious.
EDIT: TLDR because I was told this section is too vague and there's too
much going on. This PR:
- Improves the dated crafting code (not the UI).
- replaced `atom/CheckParts` and `crafting_recipe/on_craft_completion`
with `atom/on_craft_completion`.
- Reqs used in food recipes are now deleted by default and not stored
inside the result (they did nothing).
- Renames the customizable_reagent_holder comp and improves it (No
harddels/ref issues).
- Adds a unit test that tries to craft all recipes to see what's wrong
(it skips some of the much more specific reqs for now).
- In the unit test is also the code to make sure materials of the
crafted item and a non-crafted item of the same type are roughly the
same, so far only applied to food.
- Some mild material/food refactoring around the fact that food item
code has been changed to support materials.
Improving the backbone of the crafting system. Also materials and food
code.
🆑
refactor: Refactored crafting backend. Report possible pesky bugs.
balance: the MEAT backpack (from the MEAT cargo pack) may be a smidge
different because of code standardization.
/🆑
## About The Pull Request
The issue was threefold, first speed potions sent the comsig before
actually applying which could be abused to make items not have a
slowdown without spending it or coloring them by using it on them in a
state when they don't have a slowdown (i.e. disabled magboots). Magboots
``initial()``'d their slowdown which could break them if they somehow
got it negative, but I believe that didn't happen in actual gameplay.
And I've made duffelbags and laptops have their open slowdown set to 0
similarly to magboots when a speed potion is applied to them. Last one
may be a balance change, depending on the original intent, but I'm going
off their pre-rework behavior here (and it generally feels weird to be
the case when they get unslowdowned and then it gets reapplied when you
close and open them)
- Closes#91381
## Changelog
🆑
fix: Fixed speed potions behaving super inconsistently on magboots,
duffelbags and laptops
/🆑
This moves Cyborgs onto using storage datums, removing the remenants of
the shitcode that was Cyborg inventory. It's now done mostly by
equipping/unequipping/storage items, much like how other mobs do.
This allows borgs to take advantage of more hand support stuff and
things like ``dropped()``, so borgs no longer have to copy paste drop
code to ``cyborg_unequip``
It also:
- Removes ``CYBORG_ITEM_TRAIT``
- Removes all borg items being ``NODROP``
https://github.com/user-attachments/assets/11442a10-3443-41f2-8c72-b38fb0126cdb
Currently borgs are able to have their entire inventory open and a bag
below it, which I thought was a little weird. I always assumed they WERE
storage items, so I guess I'm doing it myself.
Cyborgs using storage code makes it easier for contributors to actually
do stuff with, without risking breaking everything. It also hopefully
will make borg items more resilient against breaking in the future, now
that we're not relying on nodrop.
Also just brings them more in line with other mobs, all of which make
use of storages.
🆑
refactor: Cyborg's modules now use storage (so opening a bag will close
modules instead of overlap one over the other).
qol: Observers can now see Cyborg's inventories (like they can for
humans).
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Refactors most of blood handling code untouched by #90593 and completely
rewrites all blood decals, components and reagents.
- Blood types now have behavioral flags which allow them to control
where they leave decals/DNA/viruses. Oil no longer transfers DNA and
viruses with it, while podpeople water-blood doesn't leave visible
decals on turfs and items, but still can be picked up by DNA scanners.
- Multiple blood types have received unique handling - liquid
electricity blood now glows in the dark, oil trails are flammable and
lube ones are slippery. Oil blood can be restored with fuel, lube with
silicon and slime with stable plasma (as normal plasma already passively
regenerates their blood), instead of everything using iron. Saline
solution only supplements on iron-based blood and won't do anything to
help with bloodloss for species who rely on different blood types.
(Roundstart this applies only to Ethereals)
- All blood logic has been moved away from the blood reagent itself into
a blood element that is assigned to the blood reagent by default, and to
any reagent that's drawn from a mob as their "blood" (in
``transfer_blood_to``). This means that blood you draw from lizards will
be green and have lizard's blood description instead of mentioning red
blood cells, Ethereal "blood" will actually contain their DNA and genes,
etc.
- Refactored all blood decals. Blood states are no more, everything is
now handled via blood DNA. Credits to MrMelbert and Maplestation, as a
significant amount of code has been taken from
https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his
followup PRs. Oil and xenomorph splatters are now subtypes of blood,
blood drying is now animated, blood trails now curve and can be
diagonal.
- Rewrote bloodysoles and bloody_spreader components, credits to Melbert
again for the former, while latter now makes more sense with its
interactions. Bloody soles no longer share blood DNA with your hands.
- Ported Melbert's bloody footprint sprites and bot-blood-spreading
functionality.
- Removed all species-side reagent interactions, instead they're handled
by said species' livers. (This previously included exotic blood
handling, thus the removal)
- Slightly optimized human rendering by removing inbetween overlay
holders for clothing when they're not needed.
- Blood-transmitted diseases will now get added to many more decals than
before.
- Cleaned up and partially refactored replica pods, fixed an issue where
monkeys/manipulators were unable to harvest mindless pods.
- Exotic bloodtype on species now automatically assigns their blood
reagent, without the need to assign them separately.
- Clown mobs now bleed (with colorful reagent instead of blood during
april fools), and so do vatbeasts (lizard blood)
- Implemented generic procs for handling bleeding checks, all sorts of
scanners now also correctly call your blood for what it is.
- Podpeople's guts are now lime-green like their organs, instead of
being weirdly greyish like their water-blood. (Their bleeding overlays
are still grey, as they're bleeding water)
- Slimepeople now can bleed. Their jelly is pale purple in color, but
their wound overlays copy their body color.
- Injecting/spraying/splashing/etc mob with a reagent preserves its
data, so you could theoretically recycle fine wines from someone's
bloodstream
- Fixed burdened chaplain's sect never actually giving a blessing when
applying effects, and giving a blessing when nothing can be healed.
Inverted check strikes again.
- Closes#91039
A lot of blood here has dried, visually the blood colors are almost
exactly the same as before either of the blood refactors.

