Commit Graph
1894 Commits
Author SHA1 Message Date
936c09d5f8 [BOUNTY] Removes the pairing mechanic from sec dept rolls (#6032)
## About The Pull Request

This completely does away with the pairing system for security
department rolls. The pairing system always forced you together with
someone if they were going to be alone as a department sec.

What this means is sec officers will be distributed among all the
departments, with the system trying to put preference first, but if
there's two going for the same one, one will inevitably lose out and be
given to another department.

- Benefits are that more departments get their secoffs.
- Disadvantage is that, well, you're still not guaranteed to get your
preferred dept, but it at least makes sense now and won't just force you
together with someone.

This PR has an alternative version, this is Option 1 and my personally
preferred and endorsed option.

closes #6033 (alternative PR)

## Why It's Good For The Game

It makes the system less confusing by no longer forcing you in with
someone even though your preferred department was empty. Also makes it
that more departments get their secoffs.

## Proof Of Testing

This works in theory, and the procs do react as they should in testing,
but I can't simply summon 7 secoffs to my test server so I need this TMd
to be sure

## Changelog

🆑
balance: Sec officers no longer get forced into a department with
another officer when an empty department is available, making the dept
preference system make sense.
/🆑

---------

Co-authored-by: Maia <maia@punches.cz>
2026-08-10 09:01:17 -04:00
The SharkeningandGitHub 1ba61d9056 Fixes protean outfit duplication (#6010) 2026-07-31 11:22:11 -06:00
Roxy 4ff60d475b fix nanites test 2026-06-23 20:16:28 -04:00
Roxy f266555b40 i know what order letters go in 2026-06-23 19:57:52 -04:00
Roxy 00b94f119f unticked files 2026-06-23 18:12:18 -04:00
Roxy de4c3b255d Merge branch 'master' of github.com:tgstation/tgstation into upstream-2026-06-23 2026-06-23 15:51:55 -04:00
mrmanlikesbtandGitHub f5e471ce1e Adds exclude_from_ci support to unit tests, again (#96545)
## About The Pull Request

When I was working on #96368 I was unaware of the following:
<img width="584" height="294" alt="image"
src="https://github.com/user-attachments/assets/a6578a46-04e8-4316-a2d6-5aaadffbdea6"
/>

So I'm fixing it.

## Why It's Good For The Game

Sorry downstreams

## Changelog

No user facing changes
2026-06-22 04:13:45 +02:00
ArturlangandGitHub bde2f58c72 pref for seethrough limbs (#5805)
## About The Pull Request
adds a pref for making limbs partially-seethrough, i kept options for
head and body as disabled prefs because why not
## Why It's Good For The Game
some people want this aspect of customization, could be extra useful for
slimepeople too, or holographic aspects, since it can be partial invis,
does not prevent their hitboxes from working since it's alpha changes
though
## Proof Of Testing
<img width="107" height="92" alt="image"
src="https://github.com/user-attachments/assets/a481771d-a632-469a-946b-602b6b03b93b"
/>

<img width="98" height="99" alt="image"
src="https://github.com/user-attachments/assets/c58f7329-a366-461d-a815-7cb687691e11"
/>

<img width="1100" height="790" alt="qfpaTFo0Bh"
src="https://github.com/user-attachments/assets/710ccb2b-fae4-4a8b-951e-d2bae4f141f1"
/>


## Changelog
🆑
add: pref for limb transparency
/🆑
2026-06-20 01:25:46 +02:00
IajretandGitHub fa56a10149 FaxBond app for bonding with your fax (fax message subscription app) (#96467)
## About The Pull Request
Adds an up that allows you to subscribe to any fax. Heads start with one
by default and they are subscribed to their office fax upon joining.
Later part involved creation of fax subtype specific to a head. So i
decided to also make those as a required map item for the purposes of
CI.

<details>
<summary>UI</summary>
<img width="435" height="552" alt="изображение"
src="https://github.com/user-attachments/assets/73b814d5-3009-4c76-a829-c01f021aecf4"
/>

</details>

its pretty simplistic, but i am not a UI designer, sorry
## Why It's Good For The Game

It really sucks when you wait for someones message but they never
respond to it because apparently they never visit their office and never
saw a paper over their fax if even if they responded, by the time you
get an answer you already forgot about it anyway. In general, it makes
paperwork experience relating to faxes more enjoyable (probably)
## Changelog
🆑
add: added a FaxBond app. Everyone can download it and use it on a fax
of their choice to be notified when it receives a message. Heads of
staff come with it preinstalled and automatically subscribed to a fax
inside their office.
/🆑
2026-06-19 15:52:44 -06:00
c3c54bf66c Heretic rework & reintroduction - less prog, less murder, more cultsim LARP (#5445)
# Before TMing this please contact me on discord, I'd like to observe
the TM

## About The Pull Request

### There is a shimmer in the air, again. Familiar. The nighttime walk
of dreams yet again takes the uncomfortable form of an icey woodfield,
moths and owls swooping overhead. An uneasy shiver runs down the spine
of the world. The gaze of the Light focuses on our lowly region of space
- will you knock?

Design doc V1 (Tentative, may change based on feedback):
https://hackmd.io/@NikoTheGuyDUde/B1XEAAv3Zg

Reverts https://github.com/Bubberstation/Bubberstation/pull/5268 by
reworking heretic into a far less scaling, less dangerous, and less
murdery antagonist. Read the design doc for more.

### DISCLAIMER
I was not a mainline heretic player, nor someone who had constant
contact with ehretics. Therefore, I am not the best judge of heretic's
balance. A lot of this is **prone to change**.

### Changes
Heretic is now named **acolyte.**

#### Base kit
1. Heretics can no longer blade break. This is because jesus christ
blade breaking was annoying but also as a way to remove some of
heretic's crazy mobility.
2. Cloak of shadows and warren king's welcome are now 0.5 cost shop
items.
3. Passives are purchased now, with cost based off the path itself.
4. The same is true for blades and the mansus grasp mark, being 2 cost
nodes.
5. The heretic aura is now completely disabled, until I find some way to
use it.
6. The living heart ritual now requires plasma. You cannot get a heart
in perma, good riddance.
7. You can no longer shovestun after a grasp. Still a very useful tool,
though.
9. _**ASCENSION IS GONE.**_ Your only progression is with your
objectives. Find a gimmick to do if you want. Opening ways will be hard
enough.
10. Rituals & Mansus grasp are disabled if you have no heart. Its now
complete neutering.

#### Countermeasures
1. No heart = No rituals and no mansus grasp for anything but runes.
2. Added antimagic collars to security and cargo that act the same as
having no living heart, but is less invasive and can be more easily
removed.
3. Most heretic items have examine hints to non-heretics now.

#### Progression
1. Heretics now only progress via their intrinsic objectives, and only
up to a point. Ex. 0.5 points per influence, 2 points per way.
4. Passive generation is also substantially slower.
5. Heretics now have access to **fifteen knowledge points** on spawn,
and **their entire research tree+draft shop**. No more draft freebees
exist, either. (This is prone to change)
#### Objectives
1. Drain Influences - Influences now passively drain sanity aroudn them,
cause hallucinations, and have a rare onetime chance to spawn a heretic
mob. The heretic must drain **six-seven** influences to gain **two**
knowledge points.
2. Open Ways - Ways are a new type of heretic influence that spawn
exclusively in high-importance or high-traffic areas. A heretic must
perform a ritual with four randomly generated items on the way to open
it. Once open, the way has a variety of effects, the majority of which
are **beneficial, but in a bad way.** Ex. spawning 5000 mols of a
valuable gas. The heretic must drain **three** ways to gain **four**
knowledge points.
3. Wildcard - There are currently five wildcard objectives any heretic
can roll. **One:** Steal 1000-1250 credits from crewmembers using the
Claw of the Capitalist ritual. **Three:** Have 9-10 crewmembers consume
potions from the Mawed Crucible. **Four:** Perform a ritual in the SM
chamber to neuter its output for 10 minutes. **Five:** Perform a ritual
in the AI upload to upload 3 ion laws to the AI.
#### New spells
1. Cloak of shadows & Warren king's welcome are now 0.5 cost knowledge -
This gives me a reason to give heretics just a bit more starting
knowledge.
2. The Owl's Secrets - Sacrifice a radio, a pair of ears, and a
bluespace crystal to cast a curse on the telecomms processors. For five
minutes, any outgoing message will be corrupted into heretic-speak, and
will damge the sanity and brain of anyone who hears them. If you start
seeing hypnophrase in the chat, take off your headset or turn off the
processors. 2 uses, as this has the potential to be really annoying. 1
cost.
3. Paranoia's eye - A silent, focusless spell that curses nearby people
to see everyone around them as heretics and disables their ability to
examine them for one minute. 1 cost.
6. Claw of the Capitalist - Allows you to transmute someone's blood into
money by stealing it from their account. Each 1u of blood of 5% drained.
If the blood is from a phylactery, it wont steal any that will reduce
the target's account below 300 credits. The target is notified when this
happens. 1 cost.
7. Voice of the mansus - Single use, but re-researchable, ritual that
allows you to do a fake announcement. 1 ears, 1 radio. 0.5 cost.
12. Trickster's pen - Transmute a pen, a sheet of plasma, and a pair of
eyes into a pen that can be used to change the name, age, job, and trim
of a card, and clicked to turn you momentarily near-invisible. 1 cost.
13. Trickster's mask - Transmute a bandana and a spraycan into a
chameleon mask. Thats it. Best with the pen. 0.5 cost.
14. Trickster's Promise - prestidigitation. You can make an item glow,
clean a atom (cleans forensics), shoot confetti, or my personal
favorite, increase the food quality of an edible by 2 and add 5u of a
weak synth-healing omnizine to it. Perfect for chef heretics. 1 cost.
15. Unwrap Minds - EARLY PULL FROM
https://github.com/tgstation/tgstation/pull/95796/. Scalpal, glass
shard, paper, victim. Hypnotizes the victim with whatever is on the
paper. 2 cost.
16. The Blacksmith's Hammer - One diamond, one set of wirecutters,
upgrades your mansus grasp to emag whatever you hit on right click. One
time use - has to be reinvoked every time. 1 cost.
17. Watching Eye - One set of eyes, a sheet of plasmaglass, and a
blindfold creates a one-time small item that can be viewed as if it was
a long-rnged x-ray camera. Has 10% opacity, for sneakiness. While
uncontained in anything, the heretic can whisper a phrase - such as
sleep, blind - to create a short-term, localized negative effect on
non-heretics that the eye is viewing (but only if theyd be viewable
without x-ray). 2 cost, only one can be made - high risk, high reward.
Sprite by Burger, from path of exile.
#### Spell rebalance
1. Ether of the newborn now doesnt heal normal damage. Get a medkit for
that. Additionally, implants remain. Get a _doctor_ for those, or use
any of the other methods to break them.
2. Mawed crucible potions can now be consumed by non-heretics, albiet
disgusting. The potion shop gimmick is real. Additionally, crucible soul
now lasts for 20 seconds and leaves a trail towards the location you
jaunted from when you return. This is because I've heard quite a few
people complain about this thing in the olden days. This doesnt make it
useless, but it does make it more difficult to use.
4. Space phase now has a 2 second do after before phasing out,
uninterruptable. This is mainly for tramstation and icebox when holy
fucking shit it is ridiculous.
5. Wave of desparation now costs 3 points.
8. Armor is now four points.
9. Rust kit and paintings are gone.
10. Codex morbus is gone. Sorry, I dont want to deal with rebalancing it
right now.
11. Phylactery now needs LOS, and has a 3 second do after.
12. Void cloak now disguises itself instead of going invisible.

### Changed paths

#### Void
In the interest of making void a little less murderkill, I opted to add
some flavor and alternate use to void's abilities.

**Void chill** can now put you to sleep if you click its status. This
sleep will heal you via cryoxadone. Being hit will wake you up, as will
void chill going away.
* This is intended to add a alternate, medical use to void, as well as
to nerf void chill a little bit. It does nothing to help you in active
1v1 combat, but if the void heretic disengages, you can heal yourself.
Its alsl nice and flavorful.
Void chill is also now nearly 100% countered by leporazine. Coffee and
tea help with the slowdown, but dont help with cold at 5 stacks.

**Void pull** is gone. **Cloak of darkness** replaces it, with perfect
invisibility taht prevents the use of any tools or abilities while its
active. Being hit instantly banishes it. The cloak slowly cools the air
around you, so if people are aware of your status of a void heretic,
they might be able to guess the chill in a previously warm room might be
you.

**Void conduit** no longer griefs windows and doors. It now chills the
air around it, while putting people to sleep - using the same eldritch
sleep that void chill does. You can use coffee to counteract this, or
simply fire at the conduit from a distance.

**Void cage** now heals the target for 2 of each damgae type a second.
Can now be self-cast. _Still useful for its intended roles._

**Void phase** now has a 40 second cooldown instead of 20. 20 is
ridiculously low for a jaunt with guaranteed EVA power, and 40 should
prevent its abuse.

_Void will probably receive further changes._ On the docket is a void
phase nerf and a void conduit nerf.

#### Moon

**Ringleader** no longer stuns you if you kill a clone, only knocks
down.
**Lunar parade** now lasts for 45 tiles, down from 60.
The passive's healing is reduced by 25%.
The blades upgraded brain damage is now 20, and the sanity threshold for
insanity is now disturbed.
The armor now translates slughtly more health, meaning its less
protective.

_I understand moon the least of all the paths, but I love its flavor, so
I decided to focus on it. Im balancing based off what Roxy suggested
were the issues._

## TODO

- [x] Void path rework
- [x] Investigate if we need to nerf moon more, maybe reflavor it as
well
- [x] Implement the third objective
- [x] Rigorous bug testing
- [x] Rewrite UI
- [x] Remove irrelevant tarting spells (sacrifice, notably)
- [x] Add more non-combat spells

### Implemented paths

- [x] Void
- [ ] Moon
- [x] Lock
- [x] Flesh
The paths beneath this line will be focused on after the initial TM is a
success.
- [ ] Blade
- [ ] Ash
- [x] Cosmic
- [ ] Rust
## Why It's Good For The Game

Heretic is one of the most flavorful internal antagonists in the entire
game, flavorful enough people were making characters around heretic,
people had entire storylines based on heretic, and I feel a lot of value
was lost with heretic. Simulatniously, uh, _**heretic was one of the
worst designed antags in the game?**_ Too powerful, too scalable, and
generally just has a "I HAVE A ANTI-EVERYTHING SHIELD" vibe.

This PR brings it back as a static, traitor-style antag with limited
progression. Variety is always good.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
TODO
</details>

## Changelog
🆑
add: Heretic - Now reworked as a far less oppressive and far less
scaling antagonist
/🆑

---------

Co-authored-by: Roxy <94389951+SapphoQueer@users.noreply.github.com>
2026-06-18 20:37:25 +02:00
GhomandGitHub 9df4e3960f [NO GBP] fixed fish traits added through the fish gene gun not updating some things properly. (#96517) 2026-06-18 17:14:19 +02:00
aa0dc869bc misc master fixes, re-pulls (#5774)
fixing master issues after upstream merge

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: mcbalaam <104003807+mcbalaam@users.noreply.github.com>
2026-06-16 01:14:05 -04:00
Ben10OmintrixandGitHub 64baa1979d Basic mulebots. last basic bot refactor (#95899)
my watch has ended

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



## Changelog
🆑 Profakos (originally pulled from their branch, did massive chunk of
this), Ben10omintrix
refactor: mulebots have been refactored. please report any bugs
/🆑
2026-06-11 23:58:13 -07:00
gavlaandnevimer cb602798d5 📷📸📷 2026-06-11 15:36:38 -04:00
gavlaandnevimer 1262a99963 📷 2026-06-11 15:36:38 -04:00
mrmanlikesbtandGitHub b08ec39e1b Better Unit Tests - Runs All Of Them On A Single Map (exc. map unit tests) and C&D Split-Up (#96368)
## About The Pull Request

### Don't run every single test

I've had this on my mind for several months and it being brought up
recently reminded me so here we are.

Unit tests only run on `runtimestation_minimal.dmm` now with the
exception of map tests. The following unit tests are declared as map
tests but I didn't see any map dependent logic so 🤷
- `/datum/unit_test/maptest_baseturfs_unmodified_scrape`
- `/datum/unit_test/maptest_baseturfs_placed_on_top`
- `/datum/unit_test/maptest_baseturfs_placed_on_bottom`
- `/datum/unit_test/maptest_get_turf_pixel`
- `/datum/unit_test/maptest_load_map_security`
- `/datum/unit_test/maptest_modular_map_loader`
- `/datum/unit_test/maptest_turf_icons`

`/datum/unit_test/subsystem_init` isn't really a mapping unit test but I
figured somehow, someway, maps might fuck with subsystem initializations
so I just decided to include it.

### Splits up the create & destroy test

Idk, pretty simple. Create & destroy is now split up across all
integration tests and ran in parallel.

## Why It's Good For The Game

oranges promised me "500 nzd" yo

## Changelog

No player facing changes
2026-06-09 06:00:03 +02:00
LucyandGitHub 8994933b62 Add a unit test for language key conflicts (#96382)
## About The Pull Request

simply adds a new unit test, `language_key_conflicts`, ported from my
work on monkestation.

it is exactly what it says on the tin - it ensures two languages do not
have the same exact key. i don't think that's an issue here, but better
safe than sorry.

## Why It's Good For The Game

more unit test coverage for subtle bugs that might be hard to realize is
always nice

## Changelog

No user-facing changes.
2026-06-08 04:31:33 +02:00
AnturKandGitHub a62838fcc8 Polar bear basic mob conversion (#96295)
Straightforward conversion to basic mob. Only effective change is slight
increase in movement speed. They're still walking punching bags.

🆑
balance: polar bears are tiny bit faster
/🆑
2026-06-04 12:29:22 -06:00
tontyandGitHub ddb4b35bc2 Implements "forbidden" areas into atmospherics_sanity unit test (#96141)
## About The Pull Request
I originally just wanted to change the logging for this so that it's
more helpful for mappers, but I realized that this test doesn't cover
the case where a mapper mistakenly connects a illegal area into the air
loop, so I implemented that.

I had to remap Catwalk so that the actual server room was isolated from
everything else. I tried to keep everything intact to the best of my
ability but there simply wasn't much room.

Also, I added a new subtype for the supermatter engine's area, and
included an UpdatePaths file for it. Behaviour should be identical
across the board.
## Why It's Good For The Game
So we can be 100% absolutely definitely sure we didn't attach the waste
loop inside the supermatter engine.

## Mold Spore

<img width="400" height="400" alt="image"
src="https://github.com/user-attachments/assets/f231ba77-097d-4365-b467-17580aceae14"
/>
2026-06-03 14:21:31 -06:00
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
MrMelbertandGitHub 65c41f0cb6 Cutting an airlock's ID wire prevents ID usage again (#96195) 2026-06-01 23:20:53 -04:00
8eed335b94 Refactors inventory UI to be completely datum and vis_contents-based (#95998)
## About The Pull Request

Completely removes individual inventory UI handling from mob and HUD
code and moves it to slot datums.
``/datum/inventory_slot`` now is responsible for displaying items on the
player UI and does so through vis_contests as opposed to screen_loc -
which ensures that wide items will display properly rather than be
offset to the right.
Centralized, slot_id based handling allows us to significantly simplify
inventory and HUD code (see how many lines were removed) as you no
longer need to individually track all items for both the HUD owner and
the observer, and makes it easier for us to fully datumize inventory
handling in the future.

Also fixes a bug where observers would see players' storage UI and have
the items linger on-screen after its closed.

## Why It's Good For The Game

Makes working with inventories and HUDs easier, fixes visual issues with
wide items, I need this for human rendering refactors.

## Changelog
🆑
refactor: Refactors inventory UI to be completely datum and
vis_contents-based
fix: Observers should no longer see doubled up inventory UIs
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2026-05-31 14:27:23 -07:00
John WillardandGitHub 751bfc08bb Removes the IC tab (#95893)
## About The Pull Request

Removes the IC tab in its entirety

- Some mobs (Blob Minion & Lightgeist) had manually removed the "pull"
verb, this replaces it with taking away their pull force.
- Lightgeist had their "Me" verb manually removed, this is replaced by
giving them Emotemute trait (the same that mime's bane gives)
- Floor Changer: You can now RMB the arrow buttons to look in a
direction w/o moving. Added a tip to help with this.
- Exit Hivemind: Already an action button and was removed without
further edits

### Removed entirely

Rest
Resist
Look Up/Down
Move Upwards/Down
Activate Held Object
Open Language Menu
Memories
View Skills

### Moved to command bar (secret verb ooh) because I am biased

Sleep
Navigate

### Martial Arts

Martial Arts had a button to see your current skills & the ability to
cycle between artstyles. This was replaced with 1 action button that
does both of these.

<img width="317" height="148" alt="image"
src="https://github.com/user-attachments/assets/afed910f-b6b6-441d-86cb-dade0e253044"
/>


Name auto-updates as you swap artstyle to whatever help verb the current
style uses. Mention of RMB in the name is only there if you have more
than 1 martial art, but the desc will remain just so players can see it
even if they only have one, for future reference.

## Why It's Good For The Game

Brings greater visibility to Martial Art stuff, and especially since the
stat panel is being made optional we should not be hiding ANYTHING in
there.

This also helps me with my project listed in
https://hackmd.io/443_dE5lRWeEAp9bjGcKYw?view

And also fixes some sorta-removed features due to removing verbs not
matching people's actual powers due to new features like "Custom Me" and
"Ctrl Clicking".

## Changelog

🆑 SirNightKnight (sprites), JohnFulpWillard
del: Deleted the "IC" tab of the stat panel.
fix: Lightgeists can't emote or pull as intended.
fix: Blob minions can't pull again.
qol: Martial Art users now have an action button for their
artstyle-related businesses, rather than it being in the stat panel.
qol: You can now right-click the move up/down UI buttons to look in the
direction without moving.
/🆑
2026-05-26 16:27:09 -07:00
nikothedudeandGitHub be4c58986c Allows cursekin to load a preference slot instead of simply changing species. (#5568)
## About The Pull Request

Title.

Adds a new preference option that allows you to designate a character
slot as your lycan transformation. Does not transfer quirks and does not
change the name.

Additionally, allows peopel to use the lycan species as a prefs-only
species for customization.

### Note

This will likely transfer languages and a few other things, but nothing
gamechanging. If the SAD does it (excluding quirks), this probably also
does it.
## Why It's Good For The Game

Adds for customization of the lycan form. Hair, Augments (NOT IMPLANTS).
Even taur mode.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

<img width="923" height="643" alt="image"
src="https://github.com/user-attachments/assets/92586859-0bc3-49f5-be8a-f39ac798b730"
/>

</details>

## Changelog
🆑
add: Cursekin can select a character slot to transform into rather than
just siwtching species.
/🆑
2026-05-17 20:40:01 +02:00
+37 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

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

---------

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

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

## Why It's Good For The Game

Makes the MC very slightly harder to confuse yourself with
2026-05-11 11:20:24 -04:00
MrMelbertandGitHub 3450f8ba1e Lizard frills are hidden by HIDEHAIR rather than HIDEEARS / Lizard frills are masked like hair by hats (#95986) 2026-05-09 13:23:48 +02:00
SmArtKarandGitHub 940d91bb62 [MDB IGNORE] Adds new features and tiles for lavaland biomes (#95955)
## About The Pull Request

Adds new floor types and natural decor to both Siderite and Shale
biomes, as well as makes flora and fauna spawns differ between said
biomes.

<img width="1216" height="997" alt="dreamseeker_uIv1OgVkpD"
src="https://github.com/user-attachments/assets/327d9caa-a58c-4d70-acbe-477da69b4d71"
/>

---

Basalt biome now spawns more legions and goliaths, but less watchers and
no brimdemons. You can rarely find new volcanic pore rocks which will
spew out lava when destroyed.

<img width="505" height="361" alt="dreamseeker_TA9rXzOgad"
src="https://github.com/user-attachments/assets/fb19a60a-c927-441b-abad-161ce5022a60"
/>


Siderite biome has a lot of rock formations and may sometimes spawn new
stalagmites. You can expect to see a ton of bileworms, raptors and
watchers there.


<img width="747" height="613" alt="dreamseeker_uZgRX8qqh3"
src="https://github.com/user-attachments/assets/d356f1c6-371a-4b8b-899b-470edb0d2790"
/>


Shale is full of lobstrocities, goldgrubs and brimdemons, and home to a
new glowgrowth "plant" - colony of bioluminescent fungi growing on
natural air vents.

<img width="274" height="220" alt="dreamseeker_EtxiS4X9M7"
src="https://github.com/user-attachments/assets/cbefba67-b618-4a65-ad12-9ee5182b650c"
/>


While it cannot be planted by itself, it contains luminescent fluid
inside which will grant whoever eats it minor night vision as long as it
is inside their bloodstream (as well as cyan-glowing eyes)

---

Ruins now properly respect their biome's rock (and now floor as well)
type, since it was broken for some of them previously.

<details>
<summary>More images under the dropdown</summary>

<img width="1216" height="997" alt="dreamseeker_fpXXV0Rt3D"
src="https://github.com/user-attachments/assets/fa790ca1-7045-490e-bcb2-c1f9da9f277c"
/>
<img width="414" height="303" alt="dreamseeker_l6E8S2fzCe"
src="https://github.com/user-attachments/assets/8b10dcca-c546-41ce-9363-a12b0f225881"
/>
<img width="784" height="587" alt="dreamseeker_RUWQo0unNp"
src="https://github.com/user-attachments/assets/d7364abc-ec68-4daf-b3cb-a03b8ba7e5de"
/>
<img width="1216" height="997" alt="dreamseeker_zoltABvkBw"
src="https://github.com/user-attachments/assets/324f50f8-83c9-4451-8eff-33ebf81c1d0d"
/>
<img width="1125" height="571" alt="dreamseeker_ky5qvl2XtC"
src="https://github.com/user-attachments/assets/ff08d22f-fc15-4961-b76e-7c10d7814096"
/>

</details>

Credit for original versions of new flora/feature sprites to
SentryPrimis on the /tg/station discord

## Why It's Good For The Game

Makes biomes more distinct and interesting, as well as gives them unique
atmosphere, since right now they only differ in rock type and mineral
distribution.

## Changelog
🆑 SmArtKar, SentryPrimis
add: Siderite and Shale lavaland biomes now have unique floors, as well
as flora, features and fauna!
fix: Fixed some ruins generating with default basalt walls instead of
their biome's walls
/🆑
2026-05-07 10:20:43 +01:00
MrMelbertandGitHub 0d8e223e90 Adds some tier zero (penguin, plant) and a tier one (stoat) gene infusion (#95923) 2026-05-05 10:35:12 -04:00
MrMelbertandGitHub cee225fecb Moves hair and eyes into standing overlays (#95781) 2026-05-04 22:50:36 +02:00
Y0SH1M4S73RandGitHub 9e92c0aa3d Reverts "Merges ghosts into spirits & a rework", but removes ghosts from Pride's mirror. (#95779) 2026-05-04 16:37:11 -04:00
7aa5fb5d06 Void cloaks do not block surgery while invisibile (#95804)
## About The Pull Request

fixes https://github.com/tgstation/tgstation/issues/95803

The void cloak and its hood do not obstruct body parts for things such
as surgery. I guess it also lets you shave a heretic while their hood is
on but that seems kind of funny.

## Why It's Good For The Game

A) This is going to result in a lot of complications due to the strip
menu obscuring that the void cloak has.

B) It also gets rid of some meta tells that you have the cloak. 

Honestly, I wonder if it would be better if this was a neck item and the
'hood' is just an abstraction, but that's kind of exiting the realm of a
fix at that point.

## Changelog
🆑
fix: Void cloaks no longer obstruct surgery while invisible.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2026-05-01 21:38:01 -04:00
7763db34a1 Basic beepskies and some ED209 additions (#95783)
## About The Pull Request
this PR refactors beepskies and ED209s into basic mobs. ive also added a
few features for the ed209 because i cant keep my hands to myself:

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

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

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

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

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

---------

Co-authored-by: san7890 <the@san7890.com>
2026-04-25 00:25:28 +00:00
9b6e752f3e Makes lighting objects objects again (#95332)
## About The Pull Request

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

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

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

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

## Why It's Good For The Game

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

## Current Issues

to be found

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

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2026-04-23 08:55:26 +12:00
LemonInTheDarkandGitHub 1889ac275f Fixes double transforms for emissives, improves related unit test (#95710)
## About The Pull Request

[Adds an intermediary render plate for overlay
lighting](https://github.com/tgstation/tgstation/commit/34cc054702140677aae94727a54ae83619cae3d7)

The emissive plate isn't allowed to draw directly onto an input plane
(really almost nothing should be drawing onto input planes). This fixes
that.

[Improves plane_double_transform unit
test](https://github.com/tgstation/tgstation/commit/56f812da2e24bdb82966f1af1adb4e1b648b895d)

It was formerly just checking to see if any inputs were directly drawing
onto other inputs. Now, we floodfill

## Why It's Good For The Game

Somewhat nebulous, I hate double transforms double transforms are evil
2026-04-23 08:48:49 +12:00
MrMelbertandGitHub bade006302 DNR'd / playerless bodies risen as zombies are ghost controllable (though mindless bodies are weaker) (#95544)
## About The Pull Request

- A body that revives as a zombie but has no player (IE never had a
player or the player DNR'd) becomes is ghost controllable: A poll is
immediately offered, and the body itself appears in the spawners menu.

- Zombies created from **mindless** mobs (such as monkeys or roundstart
morgue cadavers) are **Mindless Zombies**, a subtype of zombie which is
weaker (heal slower, move slower, not guaranteed to infect on hit)

## Why It's Good For The Game

- When zombies get rolling, there will no doubt be a few players that
DNR or a few DNR'd bodies that get infected, and it results in a lot of
zombies without players standing around, which is kinda lame. Giving
ghosts the options to take over seems like a no-brains-er to me, keeps
the horde a bit active even if some get decapitated.

- However, one big problem this allows for is that it provides a clear
vector for people spamming zombies out of hu-monkeys. Thus I changed
mindless bodies (bodies which never had a player, even a DNR'd one
(hu-monkeys)) to be easier to handle and far less deadly. That way
traitors are still encouraged to infect players over npcs.

## Changelog

🆑 Melbert
add: If a playerless body (DNR'd or otherwise) is raised as a zombie,
ghosts are given the ability to take control of it
add: If a body that never had a player control it is risen as a zombie,
they are risen as a weaker "mindless zombie" (moves and heals slower,
deals less damage, infection is not guaranteed on hit)
/🆑
2026-04-16 12:26:22 +10:00
John WillardandGitHub 774c07cd9b Basic mob stat panel gutting (#95543)
## About The Pull Request

Changes Guardian HUD to use action buttons instead of HUD elements,
which means their buttons
1. Can now be moved
2. Can be binded

Other Holoparasite HUD changes:

1- Moves some special buttons like explosive's explosion ability to be
where the "Toggle Mode" button typically is, to be consistent with some
other modes (assassin, gas) that also works like their unique ability.
2- Gives non-dextrous holoparasites the ability to move floors, since
they float.
3- Fixes dextrous holoparasites having 2 health HUDs
4- Moves "Check Guardian Type" verb to a new action button meant to
mimick the Antag UI Info button.

Gives Soulscythes a Combat mode indicator

Locks Revenant's combat mode indicator (cause it does nothing)

Adds another hoverable HUD element, basic mobs can now hover over their
healthdoll to see their Health %

<img width="85" height="123" alt="image"
src="https://github.com/user-attachments/assets/ad660ba4-296c-4699-9ec4-03a6e7b97880"
/>
<img width="95" height="101" alt="image"
src="https://github.com/user-attachments/assets/12d4d9d3-cf2c-4c52-81aa-17ce538b9d48"
/>


Adds a Unit Test to ensure all basic mobs have a HUD that shows some
form of health & combat mode (unless unnecessary like Revenants), to not
lose any information from basic mob conversion now that they lose the
stat panel.

## Why It's Good For The Game

This is yet another supplement of
https://github.com/tgstation/tgstation/pull/95383 - Removing stat panel
entries for all basic mobs is a great move towards lessening the
reliance of mobs on the stat panel.

This is also just good QoL for Holoparasites, especially since their
stat panel had 2 entries for "Master HP" and your "Own" HP, despite
Holoparasites not even having their own HP at all.

## Changelog

🆑
qol: Holoparasites' abilities are now action buttons, so you can rebind
or move them.
qol: Holoparasites now have floor change buttons.
fix: Holoparasites and Soulscythes now have a combat mode indicator.
fix: Dextrous holoparasites now have their inventory slot again while
non-dextrous had it taken away (not that they could use it).
/🆑
2026-04-13 17:05:57 -06:00
mrmanlikesbtandGitHub 928df286a6 Kills /datum/asset/var/_abstract, uses abstract_type instead (#95756)
## About The Pull Request

It's all in the title

## Why It's Good For The Game

Forgotten in #92909

## Changelog

no player facing changes
2026-04-13 17:20:12 -04:00
xPokee 37d18f10cc Screenshot tests 2026-04-12 16:32:35 -04:00
Phantastic-SwanandThe Sharkening e7a01b6b27 fixes the digitigrade sprites unit test (#5366)
## About The Pull Request

As per the title. The unit test was never skipping any typepaths,
regardless of whether or not they were defined in the modular folders.
This made it so that even TG clothing was being checked. The regex which
was used to find the typepaths was also broken, as it was prematurely
cutting off at the letter `s`, and was also matching with typepaths that
weren't actual definitions/overwrites. It also stopped searching for
typepaths in the file after the first one was found.

## Why It's Good For The Game

Fixes a unit test.

## Proof Of Testing

<img width="258" height="56" alt="image"
src="https://github.com/user-attachments/assets/24b8f8d7-42d1-429d-9a48-30eb9ef95e6b"
/>

It compiled and run the test fine. Checking with the debugger confirmed
that the `typepaths_to_check` list (renamed from `typepath_files`) was
being properly filled with clothing from `modular_skyrat` and
`modular_zubbers` folders.

This screenshot shows the status of the `typepath_files` list before the
changes:
<img width="1703" height="332" alt="image"
src="https://github.com/user-attachments/assets/4e400269-016f-4a89-81b0-887b8f44d200"
/>
As can be seen, it is empty, meaning the `if(subtype_string in
typepath_files)` line is never going to fire, because there is no item
in the list.

This screenshot shows the status of the `typepaths_to_check` list after
my changes:
<img width="1600" height="548" alt="image"
src="https://github.com/user-attachments/assets/f0bf1fed-193d-41c0-950e-3c4285a6db3f"
/>
as you can see, it has 599 entries, all of which were defined or
overwritten in `modular_zubbers` or `modular_skyrat` files.
2026-04-11 08:53:31 -06:00
de1f01fe76 General maintenance for hand held camera (#95295)
## About The Pull Request
- Merged a lot of procs into procs `attempt_picture()` and
`interact_with_atom()` reducing proc overhead
- Taking pictures will now always use the cameras internal
`picture_size_x` & `picture_size_y`. It no longer accepts variable sizes
as parameters
- All camera operations are asynchronous and respects checks on if the
target can be captured on camera or not.
- A bunch of other code rearrangement that makes readability easier
- Fixes the following camera bugs. They fall under the same category
  - Fixes #95286
  - Fixes #95256

## Changelog
🆑
fix: camera devices work again, camera flash turns on in most instances
refactor: camera code has been refactored. Report bugs on github
/🆑

---------

Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
2026-04-04 12:41:39 -04:00
16aef3a2fd Completely refactors HUD element management and datumizes inventory HUDs (#95119)
## About The Pull Request

This is a port/revival of Kapu's
https://github.com/DaedalusDock/daedalusdock/pull/883
By god, please TM this for a while, as HUDs are rather volatile and I
might've missed something (also the original PR had harddel issues, so
we should probably be on the lookout for those)

Instead of being stored in a metric ton of separate variables, all HUD
elements are now kept in a ``key -> element`` assoc list, and separate
category lists have been turned into a single ``group_key -> list of
elements`` assoc list for easier management.
This massively simplifies HUD creation and management, and allows us to
sanely dynamically modify HUDs without having to keep track of our
elements ourselves (harddel fuel)

I've also noticed that plasma vessels had... interesting, to say the
least, way of managing their HUD and in humans were unable to display
it, which I've changed (the element itself is displayed below stamina in
non-aliens, as latter occupies the spot where you'd normally see it)
Also fixes a bunch of minor unlikely to occur issues with HUD not
updating when it should've sometimes.

## Why It's Good For The Game

The two most important results of this is that A) we can fix the issue
with items larger than 32x32 not displaying properly in inventories (in
a separate PR) and B) this paves the way for datumized inventory slots,
although that is a separate nightmare
Some of this code is also actually over a decade old, and is an absolute
nightmare to work with.

## Changelog
🆑
qol: Non-aliens with an implanted plasma vessel now see their plasma
level in their HUD instead of just the stat panel
refactor: Refactored the entirety of HUD management code, report if
anything breaks!
/🆑

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2026-04-02 15:20:55 -04:00
LemonInTheDarkandGitHub f2360d64fd Gives subsystem controllers a bitfield def to make vv easier, renames their flags var (#95439) 2026-03-22 19:06:30 -04:00
MrMelbertandGitHub da64374423 Reverts "Add prosthetic limb" surgery to involve targeting limbs, rather than targeting chest. (Adds stumps) (#95252)
## About The Pull Request

- The `prosthetic replacement` surgical operation has been reverted to
be closer to how it used to work: The operation is done targeting the
limb that's missing

The change was made out of necessity, as surgical state was tied to
limbs - you had to operate on the chest to re-attach limbs because there
was no limb to operate on.

To circumvent that, I have done the unthinkable of adding stumps when
you are dismembered.

- Missing limbs are now represented as an invisible, un-removable,
un-interactable limb.

Making this change was not as difficult as originally anticipated, and
(at least surface level) seems to have broken very little.

Surprisingly little had to change to make this work. 

Direct accesses to `mob.bodyparts` was changed to `mob.get_bodyparts()`
with an optional `include_stumps` argument.
Similarly, `get_bodypart()` had an optional `include_stumps` added. 

This means we ultimately barely needed to change anything, and in fact,
some loops/checks were able to be streamlined.

## Why It's Good For The Game

- As mentioned, this change was out of necessity and was easily the
least intuitive part of the broader changes. Reverting it back to how it
used to work should make it far easier for people to pick up on, and
means we can cut out a bunch of bespoke instruction sets that I had to
include.

- The addition of stumps also adds a ton of future potential - code wise
it allows for stuff like better damage tracking (we can transfer damage
between limb <-> stump rather than limb <-> chest), and feature we can
do "fun" stuff like have stumps bleed on dismemberment that you can
bandage.

## Changelog

🆑 Melbert
del: "Add prosthetic limb" surgical operation has been reverted to be a
bit closer to how it used to work - you operate on the missing limb /
limb stump, rather than on the chest.
refactor: Missing limbs are now represented as limb stumps. In practice
this should change nothing (for now), as no features were rewritten to
make use of these besides surgery. Please report any oddities with
missing limbs, however.
/🆑
2026-03-20 14:32:41 +13:00
MrMelbertandGitHub 760941feef Pun Pun does not randomize name in testing (#95430)
## About The Pull Request

Pun Pun's name shouldn't randomize when we're testing Pun Pun's name
Closes #95424
Closes #95437 
Closes #95438
2026-03-18 17:38:16 -04:00
nevimer b1448e2bf5 fix a linter 2026-03-18 14:16:22 -04:00
RoxyandGitHub 43054c7e64 Add TEST_REPEAT unit test macro (#95384)
## About The Pull Request

Adds a macro to run a unit test a given number of times in a row, can be
combined with `TEST_FOCUS`.

## Why It's Good For The Game

Trying to debug a flaky unit test failure without the ability to easily
repeat a test over and over until you catch a fail is very annoying

## Changelog
🆑
code: added a unit test macro for running the same test multiple times
/🆑
2026-03-17 18:10:09 -04:00
MrMelbertandGitHub f7d7c6f00e Fix Pun Pun's name (#95420)
## About The Pull Request

Moving Pun Pun's name handling in #94463 broke their name assignment as
it used `var/name_to_use = name`

Prior, it would save `var/name_to_use = "Pun Pun"`. But after moving it,
it would use `var/name_to_use = "monkey (842)"`, as name is randomized
in human init.

I will note that I think `use_random_name` var is broken... that may
require future investigation.

## Changelog

🆑 Melbert
fix: Pun Pun is Pun Pun again
/🆑
2026-03-16 08:36:10 +13:00
nevimer 85d2594bd0 Merge remote-tracking branch 'origin/master' into upstream-feb12-2026
# Conflicts:
#	_maps/map_files/moonstation/moonstation.dmm
#	tgstation.dme
2026-03-10 17:10:57 -04:00
BloopandGitHub 38a086093e create_and_destroy will no longer spawn abstract types (#95071)
## About The Pull Request

What it says on the tin-- with having a nice abstract types system now,
we can utilize that in create_and_destroy.

## Why It's Good For The Game

Removes a lot of the need for snowflake item exclusions, and makes this
test likely a lot more stable (and a little faster even).

## Changelog

Not player-facing
2026-03-08 00:34:47 -08:00