Skip to content

Darkpack Pull 8/7/2026 - #137

Merged
FalloutFalcon merged 449 commits into
ApocryphaXIII:masterfrom
FalloutFalcon:apoc-pull-8-7-26
Aug 8, 2026
Merged

Darkpack Pull 8/7/2026#137
FalloutFalcon merged 449 commits into
ApocryphaXIII:masterfrom
FalloutFalcon:apoc-pull-8-7-26

Conversation

@FalloutFalcon

Copy link
Copy Markdown
Member

No description provided.

tgstation-ci Bot and others added 30 commits July 25, 2026 12:00
## About The Pull Request

This duplicated the cost for reacting to this in overlay light for....
no reason.

## Why It's Good For The Game

People have been saying this
## About The Pull Request

- Delete the `smash` override on
`/obj/item/reagent_containers/cup/glass/bottle/juice/smallcarton`
because I have no idea why it exists, cartons of juice shouldn't be
smashing into glass
- Remove the mob type check in
`/obj/item/reagent_containers/cup/glass/throw_impact` because `smash`
takes `atom` now
- Refactor `smash` to take `atom/thrower` and add an `ismob` check where
needed
- Break the two args passed to `splash_reagents` into separate vars
because the call was getting really long with the ternaries
- Add a `post_smash` proc called at the end of `smash` but before the
`qdel`
- Change `/obj/item/reagent_containers/cup/glass/bottle` to use
`post_smash` so it doesn't have to duplicate a bunch of code from
`smash`

## Why It's Good For The Game

Glasses only smashing if a mob threw them (because of the type check in
`throw_impact`) is stupid. Closes #97080

## Changelog
:cl:
add: Glasses will always smash when thrown around, not just if thrown by
a mob
/:cl:
Co-authored-by: CabinetOnFire <CBF>
## About The Pull Request

Retypes all human inventory variables to just ``/obj/item`` and adds
typechecks in places that assumed their type.
CASTING_CLOTHING is now a trait and not a clothing flag, and MODsuit
themes can now apply traits to their parts.
Glasses now use signals to update wearer's vision flags rather than
being snowflaked in update_sight() code

## Why It's Good For The Game
One step closer to datumized inventories.

## Changelog
:cl:
refactor: Brought down all inventory slots on humans to /obj/item
/:cl:

---------

Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
## About The Pull Request
Moves the Loader MOD outside of the QM's office in Delta Station, and
replaces the vacant space with a plant.
<img alt="image"
src="https://github.com/user-attachments/assets/edc75c16-d318-4016-a0f8-aced05f84505"
/><img alt="image"
src="https://github.com/user-attachments/assets/a6e49088-ec0d-42de-ab26-f468f9c1677d"
/>
## Why It's Good For The Game
Makes Delta consistent with every other map, such as Meta, where the
Loader MOD is accessible to ordinary Cargo Techs
<img alt="image"
src="https://github.com/user-attachments/assets/cbcd6a80-c0d6-4429-9723-e67eda83e7e3"
/>
## Changelog
:cl:
map: Moved Loader MODsuit outside of QM's office in DeltaStation
/:cl:
…magazine. (#96856)

## About The Pull Request
Crafted pipe guns and pistols no longer come with additional junk shells
out of the blue. The junk shells have their own recipe, which requires
different components than those guns! As for the regal condor, I've
reduced the amount of items and time needed to craft the it.

This PR also introduces code to make it possible to transfer magazines
and ammo over to the new crafted gun if one or more of the components
used in the recipe are is a gun with compatible magazine/ammo. This
means that any junk shell in the pipegun used to craft the regal variant
will be transfered over to the new, better pipegun instead. As for the
makarov used to make the regal condor, its magazine and chambered casing
will be ejected on the floor in the process.

## Why It's Good For The Game
Consistency, however it's also required by #96833 (which is why I'm
making the change to regal condors at all! It's the easiest solution!).
I've made this into a separate PR because it's a bit of a balance
change, especially for pipeguns.

## Changelog

:cl:
balance: Crafted pipe guns and pistols no longer come preloaded with
junk shells out of the blue when crafted. As for the regal pipegun, it
will instead inherit the junk shells present in the pipegun used to
craft it.
balance: The regal condor no longer has a magazine when crafted. I've
reduced the amount of items and time needed to craft it to make up for
it.
/:cl:
## About The Pull Request

I noticed legion infested corpses ate up a lot of ms trying to spawn
corpses. I noticed they were setting species 3 times because they were:
1. setting it when spawning the human
2. Setting it in the mob spawner object 
3. Setting it in the outfit

All of these would replace body parts which is expensive

## Why It's Good For The Game

less overtime when killing legions (and spawning corpses)

## Changelog


:cl:
code: Improved performance of corpse spawners
/:cl:

---------

Co-authored-by: CabinetOnFire <CBF>
## About The Pull Request

`setGrabState` relies on `pulling` to be set to work

## Changelog

:cl: Melbert
fix: Fix perma stun from grabs
/:cl:
## About The Pull Request

Modified version of [this
PR](NovaSector/NovaSector#7699) that I figured I
might as well try pushing to tg even if it's unlikely to get merged.

Basically, spacers can choose their height. Unlike the nova version,
there is no "random" option and you can't pick any height option in
between taller and tallest (tallest is the current spacer height, taller
was the height when they were originally added).
## About The Pull Request

This PR cuts down on the unpredictability of diseases by requiring
diseases to advance twice to advance once, and standardizing the range
of advanced disease symptoms.

All diseases, including simple ones, had their chance of advancing in
stage doubled but only actually move up a stage every other advance.
This means that virology is now weighted more heavily towards the middle
"bell curve" in terms of effectiveness. The worst and best luck are
equally less likely.

Secondly, advanced diseases also have had their symptom delays
standardized from a min value and a max value into a single average
value and another that determines the range. Most symptoms had a range
of around +33% to -33%, with some going as far as +75% to -75% delay.
After this change, viruses have a range of +25% to -25%, with some
exceptions (the super variable symptoms had their delays set to 35% and
40%, for example). This will made dying from a disease more of a
straight line instead of a roller coaster.

## Why It's Good For The Game

RNG is very important to bad diseases, but it's at the point where the
same disease can cause wildly different results because of the massive
amount of interacting randomized effects. Viruses have a chance to
advance forwards each tick, a chance to advance backwards each tick, and
each symptom has a randomize delay between activations in order to deal
a randomized amount of damage to the host. This makes them a headache to
test and I can't imagine they're much fairer in an actual round.
## About The Pull Request

Infections from a disease similar to one you already recovered from have
slower symptom activations and a stronger natural recovery.
Specifically, each symptom you're immune to will have a 1.75x longer
delay between activations and add 1.2 to recovery_prob before the
sleeping multiplier. This does NOT replace the current immunity system
and does not affect simple diseases. If a symptom is neutered you will
not gain nor benefit from immunity to it.

Eternal Youth, Necrotic adaptation, and Inorganic adaptation are exempt
from this system. Viral evolution and Viral adaptation are now ALWAYS
neutered, which effectively makes them exempt as well. It also helps
communicate to the player that they're basically already neutered.

## Why It's Good For The Game

I think this change would be a good step towards eventually buffing
virology (or not, if that isn't wanted) because one of the valid
arguments holding it back is that virologists (referring to any medical
doctor that is working on virology, not the actual job) can churn out 5
nearly identical copies of a disease and make curing them a headache.
Curing the same disease 5 times in a row is boring, but curing 2 or 3
completely different diseases (because they take longer to make) with
different effects and cures is more fun. It also better communicates to
the victims of a pandemic what exactly is going on. If you catch a
similar virus to one you previously had, you might get confused and
think you never got immunity, but now that won't happen.

Yes, you can infect yourself intentionally to build resistances. I don't
think that should be possible but it's definitely not practical even for
one person let alone an entire crew considering you'd have to basically
be constantly spreading non neutered harmful diseases.
…(#96555)

## About The Pull Request

Continuation of #92228

TL;DR of that pr

- AI Upload is now home to a "Module Rack". This concept is inspired by
the Goonstation "Law Rack", but heavily modified, with concepts like
"core law module" / "core module slots", and portable law racks.

- The module rack holds law modules, determining the lawsets of all
silicons linked to the rack

- The module rack also holds upgrade modules, applying upgrades to all
linked relevant silicons (such as combat upgrades)

- To subvert AIs, you can construct a portable law rack and remotely
connect it to the core rack

What changed since then

- The portable module racks were split in two. There are now "base
module racks" (standard, core, small), which can have silicons connected
to them, and "broadcaster module racks" (just small) which can connect
to base racks. Base racks cannot connect to other base racks and
broadcast racks cannot have silicons linked to them.
   - Broadcaster module racks are still susceptible to ion storms. 
- Base module racks will not update their lawsets at all while
depowered. If they lose power, the lawset will be "frozen" on whatever
was in the rack the last time it was powered.
- Broadcaster module racks will not broadcast their modules while
depowered. If they lose power, its laws will be removed from the parent
(so long as the parent is not also depowered).
 
- If a base module racks change z-level to a "distant z-level", it'll
disconnect linked silicons. If a silicon changes z-level, however, they
will not be unlinked.

- Base module racks can no longer remotely unlink portable (now
broadcaster) module racks, you have to follow the GPS to the rack and
neutralize it or install a counter law.

- Base module racks no longer list out what racks are connected
(broadcasting) to it, but instead list out how many modules are being
supplied by broadcast.

- Upload access is no longer needed to unlink silicons from base law
racks.

<img width="396" height="575" alt="image"
src="https://github.com/user-attachments/assets/b53db1f5-b9f6-4656-90a0-564ac091ce5b"
/>

<img width="406" height="273" alt="image"
src="https://github.com/user-attachments/assets/ef5b7470-2748-4d75-b8a6-d0cf47a10c01"
/>

## Why It's Good For The Game

See original PR for more details

A big hang up I had with the original implementation was I didn't like
the way portable racks worked, I thought it was clunky having a rack
that could both connect to another rack and to silicons

So I sat on it a bit, until ultimately I decided just to split them up. 
Broadcaster module racks are now designed explicitly for remove law
adjustments. They can't link to AIs or silicons at all.
Small module racks are designed for making one-off lawsets for cyborgs
or suit AIs.
Standard module racks are designed for off-station or secondary station
AIs.
Core module racks are for the main station AI. Newly constructed station
AIs will auto-link to the first core rack found if you don't use a
multitool to point them at a specific rack.

## Changelog

:cl: Melbert
add: The AI and Cyborg upload computers have been replaced with module
racks, a physical manifestation of AI laws.
add: To subvert an AI, you can print a "broadcaster law rack" to
remotely link to the station's "core law rack". Modules in the portable
law rack will be applied on top of the core law rack's laws. Don't
worry, hacked laws are still applied with priority.
add: Upgrades for the AI, like combat upgrades, are now applied via a
module rack instead of hitting the AI core.
add: Ion storms will now damage law modules housed in module racks,
requiring manual maintenance (a multitool).
del: You can no longer upload a AI laws directly to AI cores, active or
mid construction. You can use a multitool to pre-link AIs to racks,
otherwise they will automatically connect to the station's core rack (or
nothing, if offstation).
del: Removed "law priority" from freeform laws
add: TGUI "state laws" window
refactor: Refactored silicon laws in its entirely, report any oddities
/:cl:
so tgstation/tgstation#97014 got rid of the
`symptom_delay_min` and `symptom_delay_max` vars

tgstation/tgstation#96968 has code that used
those vars

these were both merged in succession.

master is now broken :(
```
code/datums/diseases/advance/symptoms/symptoms.dm:64:error: symptom_delay_min: undefined var
code/datums/diseases/advance/symptoms/symptoms.dm:65:error: symptom_delay_max: undefined var
```

this fixes it, simple enough.
## About The Pull Request

Lockers lazyload their contents so any album in a locker didn't load
persistence
## Why It's Good For The Game

Fix a bug that's been in the game for years now

## Changelog
:cl: PapaMichael
fix: Departmental photo albums now properly save their photos between
rounds
/:cl:
… options experience in VS code and makes some of our build flags more granular (#96809)

## About The Pull Request

Adds support for this new extension
https://github.com/CabinetOnFire/tgbuildflags (Which should be moved
under the tg repo probably? (and probably publish since I figured theres
a repo account for this?)

Basically, this extension allows us to define all the defines and
presets we have for compile_options in a new build_flags.json, which the
extension then reads and uses to populate a bunch of checkboxes to
control the compile params we usually either manually set by
uncommenting defines or by running a preset (which are annoying because
it means we're limited to the specific pre-made permutations)

<img width="728" height="813" alt="image"
src="https://github.com/user-attachments/assets/ec04355f-7d43-4eb7-a153-95f6f66f8538"
/>

I left the existing tasks as is, in theory they could be removed, but I
figured not everyone uses extensions so I shouldn't nuke them. Let me
know if there's an issue with this.

I also removed low memory mode and absolute minimum, instead turning
them into more granular flags (while still making sure the presets
correctly set those flags), since theres situations where you want to
test specifically space zlevels or lavaland, but nothing else. then you
can still select that as an option

Low Memory Mode is now:
					"-DSKIP_LAVALAND",
					"-DSKIP_SPACE_LEVELS",
					"-DFORCE_MAP=\"runtimestation\""

and absolute minimum is:
				"-DSKIP_LAVALAND",
				"-DSKIP_SPACE_LEVELS",
				"-DAUTOSTART_GAME",
                                "-DMINIMAL_CENTCOM",
				"-DFORCE_MAP=\"runtimestation_minimal\""

## Why It's Good For The Game

This means you dont have to dig through compile_options to find out what
define you need to uncomment, and you dotn accidentally submit said
changes to your branch (woops)

## Changelog

:cl:
code: Adds debug flags that can be selected when building in VS code
/:cl:

---------

Co-authored-by: san7890 <the@san7890.com>
FalloutFalcon and others added 14 commits August 6, 2026 13:37
## About The Pull Request

Nossie wont get ripped out of deathmatches and other spawns.
<img width="941" height="987" alt="image"
src="https://github.com/user-attachments/assets/571e8efe-1a5a-431d-845f-7d6751f449d9"
/>

I can also set my own loadout items and if they protect you, your shit
wont get replaced.
<img width="958" height="1014" alt="image"
src="https://github.com/user-attachments/assets/6d66a2bb-df3f-4032-85fd-5b4d6b0d1f5c"
/>
## Why It's Good For The Game
Fixes DarkPack13#848
Fixes
The-Final-Nights/The-Final-Nights-Rebase#388
## Changelog
:cl:
fix: Masquerade breaches no longer get smuggled out of deathmatch arena
and other spawns not meant to send them to the sewers
fix: Loadout items wont get replaced by robes and masks assuming they
cover your breaches
/:cl:

---------

Co-authored-by: chazzyjazzy <33268885+chazzyjazzy@users.noreply.github.com>
)

## About The Pull Request

title. super simple runtime fix (yes this runtime was observed live)

## Changelog

no player-facing hcanges
## About The Pull Request

Adds the detective UI as a possible option. Its color scheme and theme
reasonably fits the codebase I think. I added the dice icon as well dont
worry.

<img width="1757" height="1384" alt="image"
src="https://github.com/user-attachments/assets/95e73342-ba98-4fbb-afa6-f1f8de9918f1"
/>

<img width="367" height="222" alt="image"
src="https://github.com/user-attachments/assets/b8103990-e836-412d-8bc6-26bb352a1521"
/>


## Why It's Good For The Game
Waiter waiter! I'd like another UI choice please!

## Changelog
:cl:
add: Detective UI is now a possible UI to choose from in preferences.
/:cl:
## About The Pull Request
Pulls the latest TGStation commits to keep us up-to-date
Please dont squash this one!!!

Another complete fuckin rework to ai to be a awesome ass tree. Corvids
get expanded behavoir due to this.
html the escape menu

## Why It's Good For The Game
MODERN CODE

## Changelog
:cl: Beautiful TG coders
code: TG Pull. Thank you TG.
/:cl:
## About The Pull Request

This pull request fixes the missing in-hand icon state for the door
shield item.

The issue was caused by the door shield defining `icon_state = "door"`
but not defining `inhand_icon_state`, preventing the correct sprite from
being displayed when the item is held.

This change adds the missing

```dm
inhand_icon_state = "door"
```

assignment to the door shield item definition in
`modular_darkpack/modules/doors/code/door_item.dm`. No sprite assets or
gameplay behavior were modified.

## Why It's Good For The Game

This change restores the intended in-hand appearance of the door shield
by ensuring the correct sprite is displayed when the item is held. The
fix is minimal, reuses the existing sprite assets, and does not affect
gameplay or unrelated systems.

## Changelog

:cl:
fix: Fixed the door shield not displaying its correct in-hand sprite
when held.
code: Added the missing `inhand_icon_state` assignment for the door
shield item.
/:cl:
…code) (DarkPack13#1344)

## About The Pull Request

made it so you can see a phone's number by examining it (albeit you have
to be holding it)

also did a lot of shitcode cleanup. it's still kinda shitcode but it's
slightly a tiny bit better now.


also deleting endpost forums only checked for admin client-side lmao

## Why It's Good For The Game

kinda stupid you have to call someone else / get someone else to look at
ur published number to see ur own phone number

too lazy to make it a memory so this is better for now i guess

also shitcode cleanup good

## Changelog
:cl:
qol: You can now see your phone number by examining your phone.
code: Cleaned up a lot of phone shitcode.
/:cl:
…arkPack13#1346)

## About The Pull Request

this simply disables the NPC spawning pool stuff during unit tests.
because spawning random NPCs and respawning them if they die is _asking_
for flaky failures.

also properly remove npcs from from `SShumannpcpool.currentrun` when
they're destroyed and slightly cleans up `SShumannpcpool.fire()`

## Why It's Good For The Game

less overhead and issues for unit tests

## Changelog

no player-facing changes at all, only affects unit tests
@FalloutFalcon FalloutFalcon added the Upstream Merge Copy and paste Darkpack code. If it compiles, it ships! label Aug 7, 2026
@FalloutFalcon
FalloutFalcon requested review from a team as code owners August 7, 2026 17:15
@FalloutFalcon
FalloutFalcon enabled auto-merge August 8, 2026 13:32
@FalloutFalcon
FalloutFalcon disabled auto-merge August 8, 2026 13:32
@FalloutFalcon
FalloutFalcon enabled auto-merge August 8, 2026 18:29
@FalloutFalcon
FalloutFalcon merged commit 40dd0d9 into ApocryphaXIII:master Aug 8, 2026
36 of 38 checks passed
@FalloutFalcon
FalloutFalcon deleted the apoc-pull-8-7-26 branch August 8, 2026 18:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.