3391 Commits

Author SHA1 Message Date
axietheaxolotl 51ad6527c7 stabs blusec in the jugular and takes their wallet (virosec - security resprite and reset) (#5159)
## About The Pull Request

I'm working on it. the poll won so I am going ahead w/ this. 

<img width="1436" height="286" alt="image"
src="https://github.com/user-attachments/assets/255eda79-eb2c-4e36-9ad8-53c91c3b245e"
/>

<img width="336" height="183" alt="image"
src="https://github.com/user-attachments/assets/f92f5c29-c4e0-46da-889e-88acc903d253"
/>

stuff left to do

- [x] finish hos outfits
- [x] finish warden outfits
- [x] finish obj icons
- [ ] bugtest

this is a total overhaul of security, essentially resetting everything
to a new standard which can be worked off of. this is also a deletion of
blusec, an antiquated, unpopular idea that has long since proven to both
not be liked, and not work.

### this pr will not be the be-all, end-all. stuff will likely be
tweaked, added, removed, changed, or resprited in the coming days,
weeks, and months. due to just how much stuff security has.

## Why It's Good For The Game

will write a markup for this specific pr eventually but I will just be
posting the discord justification I gave

<img width="427" height="313" alt="image"
src="https://github.com/user-attachments/assets/e033ff0c-44f2-4cf6-ad9b-4b2d124cf21e"
/>
<img width="419" height="506" alt="image"
src="https://github.com/user-attachments/assets/84e86f18-72d2-4bef-a84b-1b53067fe41d"
/>

## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

<img width="967" height="1046" alt="image"
src="https://github.com/user-attachments/assets/feaf9395-88d3-4999-a02f-e89cae25cc67"
/>
<img width="602" height="728" alt="image"
src="https://github.com/user-attachments/assets/81daae2f-f18e-41a9-a225-48dbbaad697f"
/>


</details>

## Changelog
🆑 axietheaxolotl / viro
del: blusec
add: redsec
/🆑
2026-02-18 16:38:21 +01:00
nevimer 6e9f2ccfc0 Merge remote-tracking branch 'tgstation/master' into upstream-12-15
# Conflicts:
#	.github/workflows/compile_all_maps.yml
#	.github/workflows/run_integration_tests.yml
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/_onclick/hud/credits.dm
#	code/controllers/subsystem/networks/id_access.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/game/machinery/doors/door.dm
#	code/game/objects/structures/crates_lockers/closets/secure/medical.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/modules/antagonists/malf_ai/malf_ai_modules.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/loadout/categories/accessories.dm
#	code/modules/loadout/loadout_helpers.dm
#	code/modules/loadout/loadout_items.dm
#	code/modules/loadout/loadout_preference.dm
#	code/modules/mob/living/silicon/robot/robot_defense.dm
#	code/modules/mod/mod_theme.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/reagents/reagent_containers/cups/drinks.dm
#	code/modules/shuttle/mobile_port/variants/supply.dm
#	code/modules/surgery/organs/internal/eyes/_eyes.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_heretic.png
#	icons/hud/screen_full.dmi
2025-12-15 18:12:29 -05:00
Bloop 376588db04 Some list optimizations, heretic ruins optimization (#94386) 2025-12-13 08:27:31 +01:00
SyncIt21 f640a0e972 Enhances algorithm for finding an atom mount (#94076)
## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting

## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
2025-12-12 12:23:22 -05:00
Thunder12345 20ef325ce8 Fixes a range of poster bugs (#94377) 2025-12-11 07:41:51 -07:00
Aliceee2ch 896107d239 More posters!!! (#94361)
## About The Pull Request

adds more posters
<img width="681" height="113" alt="image"
src="https://github.com/user-attachments/assets/55b1f611-68a6-4675-a7bf-8816a900685d"
/>

idea for PRing this and all sprites belong to:
https://github.com/PiotrTheTchaikowsky

## Why It's Good For The Game

more silly posters = fvn

## Changelog

🆑
image: Added 2 new contraband and 1 new official posters.
/🆑
2025-12-08 16:17:42 +00:00
SyncIt21 c25d864ae9 [NO GBP] Shards can be embedded in posters again (#94293)
## About The Pull Request
- Fixes #94277

## Changelog
🆑
fix: shards can be embedded in posters again
/🆑
2025-12-05 00:11:32 +01:00
FalloutFalcon 0ff70f7497 adds the cardboard crates to spawners and crafting (#94110) 2025-12-03 11:26:33 +01:00
Roxy 9f7dc7c970 [MDB IGNORE] Make /obj/item/stamp abstract, create proper granted stamp subtype (#94139)
## About The Pull Request

There is technically an `/obj/item/stamp/granted` in that one traitor
objective refers to it and tries to override a proc on it thus making it
a valid type, but not really. This changes the base `/obj/item/stamp`
from being the granted stamp to being an abstract type, and creates a
proper subtype for the granted stamp.

## Why It's Good For The Game

Base types being concrete outside of scenarios where its intuitive are
very annoying

## Changelog
🆑
code: makes /obj/item/stamp abstract, creates /obj/item/stamp/granted
/🆑
2025-12-02 16:53:07 -07:00
archbtw 10ff097c7c Fix click dragging something onto a tile with a decal (pool of oil/blood, etc) (#94200)
## About The Pull Request
Clicking a floor decal (pool of oil, etc) while dragging something will
move it onto it's tile

## Why It's Good For The Game

Oversight 
Decals are cosmetic - Clicking on a decal should Move_Pulled as intended
Some decals (pool of oil) take up nearly the whole tile - makes pulling
onto that tile near improbable/frustrating in practice
2025-12-01 21:59:49 +00:00
Aliceee2ch 8799eec5fb Plum (#94206)
## About The Pull Request

replaced seed plum item on actually grown plum

## Why It's Good For The Game

pr #92519 introduced new grown food spawner and i believe acidentally
placed plum seeds instead of grown plum

## Changelog

🆑
spellcheck: Plant produce spawner now correctly spawns plum instead of
plum seeds.
/🆑
2025-11-30 19:30:56 -05:00
SyncIt21 39a196824a Enhances algorithm for finding an atom mount (#94076)
## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting

## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
2025-12-01 00:50:16 +01:00
nevimer baf3837ae8 Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29
# Conflicts:
#	_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm
#	_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	code/_onclick/hud/new_player.dm
#	code/datums/components/squashable.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/datums/diseases/chronic_illness.dm
#	code/datums/status_effects/buffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/stamcrit.dm
#	code/game/machinery/computer/crew.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/wall_mounted.dm
#	code/game/turfs/closed/indestructible.dm
#	code/modules/admin/view_variables/filterrific.dm
#	code/modules/antagonists/heretic/influences.dm
#	code/modules/cargo/orderconsole.dm
#	code/modules/client/preferences.dm
#	code/modules/events/space_vines/vine_mutations.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/carbon/human/death.dm
#	code/modules/mob/living/carbon/human/species_types/jellypeople.dm
#	code/modules/mob/living/damage_procs.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mob_spawn/mob_spawn.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/projectiles/guns/ballistic/launchers.dm
#	code/modules/projectiles/guns/energy/laser.dm
#	code/modules/reagents/chemistry/machinery/chem_dispenser.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/surgery/healing.dm
#	code/modules/unit_tests/designs.dm
#	icons/mob/inhands/items_lefthand.dmi
#	icons/mob/inhands/items_righthand.dmi
#	tgui/packages/tgui/interfaces/ChemDispenser.tsx
2025-11-29 22:49:21 -05:00
Joshua Kidder 7a3ad79506 All camelCase (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use snake_case. UNDERSCORES RULE! (#94111)
## About The Pull Request
It's just a partial cleanup of
anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md)
code from /tg/'s ancient history. I compiled & tested with my helpful
assistant and damage is still working.

<img width="1920" height="1040" alt="image"
src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3"
/>


I'll upload the .cs script I used to do it shortly.

## Why It's Good For The Game
Just minor code cleanup.

Script used is located at https://metek.tech/camelTo-Snake.7z

EDIT 11/23/25: Updated the script to use multithreading and sequential
scan so it works a hell of a lot faster
```
/*
//
Copyright 2025 Joshua 'Joan Metekillot' Kidder

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
//
*/
using System.Text.RegularExpressions;
class Program
{
    static async Task Main(string[] args)
    {
        var readFile = new FileStreamOptions
        {
            Access = FileAccess.Read,
            Share = FileShare.ReadWrite,
            Options = FileOptions.Asynchronous | FileOptions.SequentialScan
        };
        FileStreamOptions writeFile = new FileStreamOptions
        {
            Share = FileShare.ReadWrite,
            Access = FileAccess.ReadWrite,
            Mode = FileMode.Truncate,
            Options = FileOptions.Asynchronous
        };
        RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled;
        Dictionary<string, int> changedProcs = new();
        string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*";
        Regex camelCaseProcRegex = new(regexPattern, regexOptions);

        string snakeify(Match matchingRegex)
        {
            var vals =
            matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray();
            var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower();
            string logString = $"{vals[0]} => {newVal}";
            if (changedProcs.TryGetValue(logString, out int value))
            {
                changedProcs[logString] = value + 1;
            }
            else
            {
                changedProcs.Add(logString, 1);
            }
            return newVal;
        }
        var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>();

        // uses default ParallelOptions
        // https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main
        await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) =>
        {
            var reader = new StreamReader(filePath, readFile);
            string oldContent = await reader.ReadToEndAsync();
            string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify));
            if (oldContent != newContent)
            {
                var writer = new StreamWriter(filePath, writeFile);
                await writer.WriteAsync(newContent);
                await writer.DisposeAsync();
            }
            reader.Dispose();
        });
        var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList();
        foreach (var pair in logToList)
        {
            Console.WriteLine($"{pair.Key}: {pair.Value} locations");
        }
    }
}

```

## Changelog
🆑 Bisar
code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use
snake_case, in-line with the STYLE guide. Underscores rule!
/🆑
2025-11-27 15:50:23 -05:00
Thunder12345 ae9183c32c Repaths green "captain" suits to not be real captain clothing (#94014)
## About The Pull Request

Repaths the green captain suit and its skirt version to be costumes
instead of real captain clothing, as this is in line with how they're
used and makes them not have the armour of real captain clothing.

Deleted an unused identical copy of the same suit.

Fixes #93972

## Why It's Good For The Game

These are costumes and it's inconsistent for them to have armour values.

## Changelog
🆑
fix: The captain suit costume (green suit) no longer has the same armour
as real captain outfits.
/🆑
2025-11-26 13:40:41 +11:00
FalloutFalcon 37c45f46ba bad type path for syndicate decals (#94056)
## About The Pull Request
fixes someone's copy-pasta
2025-11-21 23:38:56 -07:00
necromanceranne d76d2f5438 Laser Gun Update: Deep Lore, Gun Variety, Pew Pew (#93520)
## About The Pull Request

Updates the laser gun into four proper subtypes: Standard, Pistol, Rifle
and Carbine.

<img width="229" height="210" alt="image"
src="https://github.com/user-attachments/assets/12c03076-8ebf-4d87-8c98-6a8cce6821db"
/>

Current sprites are pending a palette change.

**Standard:** Functions as you would expect. Same as ever.

**Pistol**: Lower charge, 20 force, normal sized, recharges faster.

**Carbine**: 15 force, 26 mag, two round burst. Projectiles flight
slightly faster. Cannot dual-wield.

**Rifle**: 20 force. 40 mag. Two round burst. EMP resistant (not
immune). Projectiles fly slightly faster. Cannot dual-wield (not that
you need to).

All but the rifle can be sourced from cargo. You can also buy the sovl
version of the laser gun if you're especially nostalgic.

### Armory Changes

The Armory now can potentially spawn either pistols, carbines or
standard. The weighting leans closer to spawning carbines and standard
as opposed to pistols.

### Lore Dump

The laser line of weapons now all have lore. That rich, deep lore that
every game needs and is totally not important at all to the meat and
potatoes of the game. I'm paid by the hour ($0.00)

### Code Tidying

Lasers are old and a total mess code-wise so we've tidied up while we're
here.

## Why It's Good For The Game

Variety is the spice of life and also some of these weapons could have
used a face lift. Especially the laser carbine. Both functionaltiy wise
and appearance wise.

A bit of randomness in the armory means some rounds might have unique
outcomes compared to others. Sometimes, items in cargo don't see
particularly much use, so peppering in a few random potential deviations
can maybe nudge people to utilize variant gear on future rounds.

I'm obsessed with writing too much information. I blame Hatterhat.

## Changelog
🆑
add: Three variants of the laser gun; Carbine (replacing the existing
one), Pistol and Rifle! Find it (possibly) in your armory today!
balance: The armory laser guns might be different variants of the laser
gun, rather than always being the standard. The standard is the same as
ever, even if it looks different.
add: If you care, the sovl version is available as a goodie. And in the
hands of pirates...
spellcheck: Lore! LORE FOR LASER GUNS! LOOOORE! Examine laser guns
closely and you might learn more about them.
balance: The new set of laser guns come with brand new sprites.
/🆑

---------

Co-authored-by: StaringGasMask <62149527+Exester509@users.noreply.github.com>
2025-11-20 22:21:16 -05:00
SyncIt21 81427cd5cf Unit tests, refactor & realignment for map loaded wall mounts (#93662)
## About The Pull Request
This 1st has to be PR'd so the integration tests can point out all
wallmounts that could not find a support structure to mount on. I then
will do many map edits to align them onto the closest atom

Yes we no longer use wall mount but atom mounted component. All objects
that are mounted on windows/tables & fences now also fall off when
destroyed

It'll probably be a WHILE before I can fix all wall mounts. Long day.
Expect me to misalign many stuff to fix failing CI so make sure to
provide suggestions when possible

Improved wallmount code overall
- Fixes #93793


## Changelog
🆑
fix: fixes all incorrectly maploded wall mounts that aren't actually
hanging on any support structure
fix: objects mounted on tables, windows & fences also fall off now when
destoryed
qol: lights can be mounted on windows
qol: cameras can be mounted on windows
qol: buttons can be mounted on tables
refactor: improved how wall mounts interact with objects as a whole
report bugs on github
/🆑
2025-11-18 22:37:12 -07:00
Pickle-Coding 73153cafe4 Welding fuel is no longer ignited by kisses. (#94009)
Achieves this by requiring the projectile to do damage to ignite.

## About The Pull Request
Achieves this by requiring the projectile to do damage to ignite.

## Why It's Good For The Game
Closes #93990

## Changelog

🆑
fix: Fixes welding fuel being ignited by kisses.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
2025-11-19 01:43:42 +00:00
MrMelbert 1d5e34274c Fix footprint emissives (#94001)
## About The Pull Request

I don't really know why you can't set the dir of a MA after it's created
but copying the appearance to an image fixes it

## Changelog

🆑 Melbert
fix: Glowing bloody footprints looks less weird
/🆑
2025-11-18 17:47:33 -07:00
Roxy 71faa643bf Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-12 2025-11-12 16:44:13 -05:00
ArcaneMusic 29b6d6c129 Reworks the House Edge's special attack, and some stat adjustment. (#93551) 2025-11-10 13:07:35 +11:00
FalloutFalcon c36bcabe8b Non-tiled floor dont have tiled water overlays (#93853)
## About The Pull Request
changes tiled_dirt to just tiled_turf and expands its use slightly to be
the "i have a 2x2 tile sprite"
<img width="864" height="691" alt="image"
src="https://github.com/user-attachments/assets/78a7ba96-fffe-42e1-9eef-35b96b22481b"
/>


https://github.com/user-attachments/assets/7a273302-a331-48b2-a06f-d65bddf13bfd

## Why It's Good For The Game
its silly for things that arent visually tiled to use the tiled water
sprite
## Changelog
🆑
fix: stuff like carpet and wood tiles dont use the 2x2 tiled sprite
fix: similarly, floors that dont use the tiled sprite now can have
permafrost sprites (as they are not tiled)
/🆑
2025-11-09 23:59:27 +01:00
Aliceee2ch 8ee1cd2474 Makes EMP logs less bad (#93841)
## About The Pull Request

closes #93805

## Why It's Good For The Game

we actually have almost no emp logging at all lol, not even emp chem
reaction, so you barely can track potential griefer?

## Changelog

🆑
admin: EMP logs are improved, additionally chemical EMP reactions are
now logged.
/🆑
2025-11-09 14:46:10 +01:00
MrMelbert 5146cfd403 Moves camera update handling to background subsystem, (maybe) fixing lag (#92208)
## About The Pull Request

When a camera update is triggered, it is instead added to a queue on a
background subsystem

An AI entering a camera chunk which is queued to update will force the
update immediately (bypassing the queue)

While the root problem of this is, ultimately, not addressed...

<img width="554" height="58"
alt="467828777-eff3f0e5-49d6-4997-b4d7-05eff6432155"
src="https://github.com/user-attachments/assets/c2d6a5f5-d958-463e-959f-116bd0dab475"
/>

...the change will ultimately prevent update spam from consuming all of
the server's resources - instead allocating updates to the backburner in
times of high server stress (or on multi-z maps)

## Changelog

🆑 Melbert
refactor: Refactored the way camera updates are handled to hopefully
reduce some lag. Report any oddities
/🆑
2025-11-08 01:43:48 +01:00
Roxy d0ca474789 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-05 2025-11-05 19:43:07 -05:00
SmArtKar 1c6c506936 Raptor Rework - Ranching and Companionship (#93564) 2025-11-01 22:13:29 +11:00
ArcaneMusic 9df1ff28ef Makes soda cans explode when exposed at low pressure. (#93571)
## About The Pull Request

Fun idea discussed on the discord.
At low pressure, cans of soda will burst at 67.458 kPa, which is WAY
higher than I would have expected, but that may just say something about
the construction of the average can of soda.

## Why It's Good For The Game

Fun little realism feature, which I found amusing enough for a quick 15
minute project. Only applies to cans that are actually exposed to atmos,
so a held can while in space or in the bag won't trigger this reaction.

## Changelog

🆑
add: Leaving a can of soda exposed to the elements at low pressure will
now burst.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-10-31 16:59:15 -06:00
Pickle-Coding 0eebcc0f54 Fixes supermatter anomalies being able to drop anomaly cores. (#93611)
## About The Pull Request
Readds the drops_core argument for determining whether an anomaly is
capable of dropping a core through any means possible.

## Why It's Good For The Game
For intended behaviour of the supermatter.

## Changelog

🆑
fix: Supermatter anomalies no longer drop anomaly cores.
fix: Fix supermatter flux anomalies from sm delam not emping or
whatever.
/🆑
2025-10-29 01:02:47 +01:00
SyncIt21 3a593b088a [NO GBP] Fixes 2 more wall mounts (#93641)
## About The Pull Request
- Fixes #93603. posters now apply the wall mount component
- Fixes tram wall frame doing a lot of extra checks & not applying the
wall mount component

## Changelog
🆑
fix: posters applied on walls fall off when the wall is destroyed
fix: player mounted tram wall frame controller falls off when the wall
is destroyed
/🆑
2025-10-29 00:58:26 +01:00
Roxy e28e9fbdba Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-23-10-2025 2025-10-23 17:38:23 -04:00
TheNobodyofimportance 3183f532c7 Changez vomit drinking from checking for flyperzon to checking for fly mouth (#93554)
## About The Pull Request
Changes the vomit drinking check to check the mob's mouth instead of
species. (You still need a flyperson stomach to turn food into vomit)
## Why It's Good For The Game
Being a dizzzguzzzting freak of tele-zzzcience doezzzn't only mean being
a buzzing eyezore of a menaze to the ztation. One azzpect of thizzz izz
the way one feedz. You uzze your teeth to chew your food, a fly should
thuzz use their probozziz to zuck up their food, not their ztatuz as a
flyperzzon to do it (even when they are mizzing a fly mouth!). Thiz also
makez the interaction fit better with the action dezzcription for it.
## Changelog
🆑
balance: Vomit drinking now checks for fly mouth instead of fly species
/🆑

---------

Co-authored-by: tonty <39193182+tontyGH@users.noreply.github.com>
2025-10-23 11:02:51 -04:00
Roxy a58d3115f2 Fixes for d1cf293c58 2025-10-15 22:57:06 -04:00
Roxy d14e538393 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-15-10-2025 2025-10-15 19:34:41 -04:00
EnterTheJake a2c7c8e57b Heretic Antagonist Full Overhaul. (#92119)
## About The Pull Request

Heretic has received a complete overhaul. This PR touches nearly every
aspect of the antagonist. For readability's sake, not every change is
going to be listed in this pull request.

For the full list of changes please refer to the design doc:
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.

Code by Me, @Xander3359 and @Arturlang 

TGUI by @Arturlang 

Sprites by OrcaCora and GregorDM

Writing bits by @necromanceranne 

### Core changes

- Cross-pathing has been removed. Main knowledge spells are now
exclusive to their path (for the most part).

- For every main knowledge unlocked (save for the robes and the blade
upgrade), Heretics can choose one option from a draft of 3 random side
knowledges (this is a free point).

- Heretics can now purchase side knowledges from a new tab, the
"Knowledge Shop". Side-knowledges have been divided by tier (Stealth,
Defense, Summons, Combat and Main). Tiers are unlocked as you progress
toward your main path.

- Heretics now gain the grasp and mark upgrade immediately, but their
main knowledge choices cost twice as much (except for the first spell,
the robes and the blade upgrade).

- Path specific robes have been introduced! They come with their own set
of quirks.

- Each Path has received a passive ability. This passive is upgraded
when you first create your robes, and again when you complete the Ritual
of Knowledge.

- Paths have been rebalanced as a result of the removal of cross-path
progression. Cosmic and Moon paths have received soft reworks.

- Upon unlocking the path 2nd level or reaching a total of 8 points
worth of knowledge, Heretics will lose the ability to blade break (and
the limit on blades all together).

- Ascension now automatically calls the shuttle with no possibility of a
recall.

- Late join Heretic has been removed.

### New UI 
<img width="750" height="635" alt="moon path ui"
src="https://github.com/user-attachments/assets/184ef783-5c9c-48a1-a2f7-4807ca93e990"
/>


### Knowledge shop

<img width="787" height="669" alt="Knowledge shop"
src="https://github.com/user-attachments/assets/3dc89b84-8c70-4d47-b612-54396e3ea6e7"
/>




### Quality of life //General balance changes

- Heretics will now gain X-ray vision for a few seconds when nearby an
eldritch essence (this effect has a cooldown).

- Ritual of knowledge now requires 1 uncommon item instead of 2. You may
now use a stunprod instead of a baton to complete the ritual. Beartraps
have been removed from the list of possible reagents.

- The maximum number of possible sacrifices required to ascend has been
reduced from 6 to 5 while the minimum has been upped to 4.

- Codex Cicatrix no longer requires a special pen to be made.

### Passive abilities

- Heretics now start with a passive ability. You can find what it does
on the path info tab after a path has been selected, and what they gain
when upgraded.

- Crafting your first set of Eldritch robes will bump your passive to
level 2.

- Unlocking the 2nd level will subsequently unlock your "Ritual Of
Knowledge"

- Completing the ritual of knowledge or ascending will net you the final
level.

### Path Specific Robes

- Armorer's Ritual is no longer a side knowledge. Each path will have
their own unique version of the ritual. This is placed after the 2nd
spell in the tree.

- Robes can no longer be destroyed by fire and acid, grant t4 flash
protection (Moth Heretics stay winning) and protection against basic
syringes, to bring them on par with other antagonist's armor sets.

- The recipe to craft the robes is now a set of armor/vest, a mask (any
mask will do now, not just gas masks), plus the unique reagent required
for the blades (Plasma for Cosmic, Trash For Rust, match for Ash and so
on)

- Wearing the robes as a non-heretic may yield some unfortunate
side-effects.

### Moon Path Rework

Moon path  rework.

Moon Heretics gain immunity to brain traumas and slowly regenerate brain
health. Equipping the moon amulette channels its effects through the
moon blade; making it unblockable and cause sanity damage instead of
brute. Ring leader's Rise now summons an army of harmless clones that
explode when attacked; the explosion briefly stuns non-heretics and
cause sanity and brain damage to them. Moon blade can also now be used
when pacified and Moon spells are no longer blocked by regular anti
magic, only mind magic protection.


**Cosmic Path Rework**

Cosmic path has received the biggest batch of changes alongside Moon.
The path has been dead last in ascension and pickrate (less than 5%) for
almost 2 years. It did gain some popularity over the last few months,
reaching the highest ascension rate in the game (12%) while mantaining a
relatively low pickrate.

Cosmic sits in a weird spot, where pretty much every knowledge
surrounding the path is either mediocre or, in the case of the
ascension, dysfunctional. Yet it has maintained a smidge of relevancy
due to how quickly Cosmic heretics can capture and sacrifice targets
thanks to Star Touch.

As a result, the best course of action would be to rebalance the
entirety of the kit; granting the heretic more tools to manipulate space
and dictate the flow of a fight, while lessening their ability to end a
confrontation by instantly sleeping their opponents.

lastly The Star Gazer is now ghost controlled ; And they shoot lazers!

<img width="636" height="451" alt="gazer gag 3"
src="https://github.com/user-attachments/assets/601d6881-c042-4e42-8ce6-ac90cd27848b"
/>


## Why It's Good For The Game


### Ok...but why do we want this?

Again, if you want my full reasoning, please check my doc
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.

To keep it short and concise; Heretic is too complex and unintuitive for
its own good. Too impenetrable for new players and too abusable for
experienced players. This can be chalked up to a lot of poor design
decisions. But ultimately, what I believe being the biggest contributor
to the current status of Heretic is the ability to move into different
paths, also known as "Cross-Pathing".

### Cross Pathing my beloathed.

Cross-pathing, while cool in theory, overcomplicates the antagonist and
overloads them with power. Players dealing with the heretic are
incapable of working out what a given heretic can do. This also leads to
late game heretics having 3 rows Worth of action buttons and virtually
no weakness.

Over the last year, I've often received the understandable but also kind
of unfair accusations of making Heretic too powerful without a clear aim
or purpose.

My goal with the paths I've reworked over the last year (Rust,Void and
Blade) wasn't necessarily to just make them stronger (although that was
also part of the goal, as they were paths that were underperforming),
but for them to have more interactions with the sandbox and to better
live up to the fantasy presented to the player.

If an harbringer of frost gets countered by a cup of coffee, we probably
messed something up.


Unfortunately, the current incarnation of Heretic doesn't really allow
for surgical balance changes to specific paths. Every time a knowledge
gets buffed, we make every path that can easily tap onto that knowledge
stronger by default. It doesn't take a genius to understand why this
system is ultimately unsustainable.

### Blade Breaking

I feel that after a heretic has reached the near peak of their power,
they no longer need the ability to instantly escape any encounter. Check
my doc for my full reasoning.

## Less versatile, more specialized paths.

By removing cross-pathing, we remove a huge maintainability burden from
the antagonist. Paths can now be designed around clearer strengths and
weaknesses. They become easier to balance and less of an headache to
understand for everyone.

It also means we can give paths some needed quality of life quirks
without having to worry how such a change might have a knock-on effect
for other paths.

Ash heretics can finally let loose without dying by their own flames.
Cosmic Heretic can go to space without having to carry a modsuit. Moon
Heretic can use their abilities without fear of one random trauma
ruining their day, and so on.

### What a horrible night to have a curse...., wait how do I curse
people again?

As of right now the heretic tree has quite a hefty amount of trinkets
that pretty much never see use.

Partly because the tree itself is a nightmare to navigate. And partly
because why would anyone set up an elaborate plan or scheme when they
can unleash 2 rows of spell in the span of bunch of seconds.

Heretics mostly gravitate towards powers that push them towards greater,
more potent combat strength. If it doesn't contribute to killing people
quicker, it isn't worth doing for most. And given the opportunity cost
associated for taking those powers, they will remain that way so long as
there are better choices to be poached.

The new draft system encourages Heretics to play more with the tools at
their disposal. If you want to go for a specific combo from the side
path options, you may now do so by tapping into the knowledge shop.

Yes, the shop does include a few knowledges from the other paths. But
these are limited to 1 per path, are very expensive and can only be
unlocked very late into the shift.

## Drip Of the Mansus

The iconic heretic robe is actually sequestered to a side path that is
most easily access by only two paths at a time. Since heretic paths are
being made to be much more specialized, the most obvious way in which
this can be showcased is through an easily
identifiable outfit.

By using the robes, we can both telegraph WHAT heretic you are looking
at, and just how much power they've accumulated and when it is
reasonable to take the kid gloves off and treat them as a genuine
threat. If a heretic is in their
robes, that heretic is now a significantly more prominent danger to the
station.

It also serves as a useful means for gating some of the more powerful
effects of a heretic's path behind the robes, AND enable options for
disarming them of that power should they be captured without making it
something endemic to their mob.

A major problem with heretics is a lack of certainty as to how powerful
they have become. A heretics robes is one of the milestones to help
players dealing with heretics identify that.

### Will this be 100% fair and balanced?

This is a massive overhaul to a pretty complex and bloated antagonist.
I've done my best to show the changes to several maintainers and other
members of the community for their feedback. But at some point we'll
have to see how this behave in the environment to get a feel if
something is over or undertuned. (that's my way of saying, yes this is
likely gonna require a testmerge or two).

What I will say is that I'm not trying to change the core identity of
Heretic.

Heretics should have the upperhand in single encounters early on, be
able to joust a small group of players after they unlock their final
spell, and end the round when they ascend. They're a progression
antagonist. They should retain their payoff as well as pose a danger as
they grow stronger.

But if more players feel like they are more reliably able to play the
antagonist in more varied and interesting ways, rather than the
antagonist largely existing as a measuring stick for 'robustness' due to
its elitist design philosophy, then the rework has been a success. There
should be something for
everyone in the antagonist, as is true for all of our antagonist roles.
2025-10-15 22:34:51 +00:00
Ghom b6c3e8f6d5 [NO GBP] Fixes dimensional anomalies duplicating airlocks (#93403)
## About The Pull Request
The code assumed that req_access and req_one_access weren't null. A
mistake that led to runtime errors, preventing the old airlock from
being deleted among other things.

## Why It's Good For The Game
This will fix https://github.com/tgstation/tgstation/issues/93355.

## Changelog

🆑
fix: Fixed dimensional anomalies duplicating airlocks
/🆑
2025-10-12 15:25:21 +03:00
SmArtKar 4d648d016c Sleeping Carp and Cain & Abel no longer tell you about armor penetration when you reflect projectiles with them (#93275)
## About The Pull Request

Projectile refactor pulled armor check above the pre-hit comsig, this
fixes that. No need to check armor before you're hit when you
potentially will not be.

## Changelog
🆑
fix: Sleeping Carp and Cain & Abel no longer tell you about armor
penetration when you reflect projectiles with them
/🆑
2025-10-12 05:39:43 +02:00
SmArtKar 157d88d39d Visual and balance changes to brimdust sacks and rush glands (#93323) 2025-10-10 13:43:22 +11:00
Ghom aa4cf2b136 The nullrod refactor (the carp-sie plushie is now actually a plushie) (#93311) 2025-10-10 13:42:33 +11:00
die 0204ab8fdd Canreach refactor (#93165)
## About The Pull Request
ports https://github.com/DaedalusDock/daedalusdock/pull/1144
ports https://github.com/DaedalusDock/daedalusdock/pull/1147

full credit to @Kapu1178 for the juice

instead of `reacher.CanReach(target)` we now do
`target.CanBeReachedBy(reacher)`, this allows us to give special
behavior to atoms which we want to reach, which is exactly what I need
for a feature I'm working on.
## Why It's Good For The Game
allows us to be more flexible with reachability
## Changelog
🆑
refactor: refactored how reaching items works, report any oddities with
being unable to reach something you should be able to!
/🆑
2025-10-07 20:28:59 +02:00
Tim d1cf293c58 More trash added to spawners plus unit test (#93045)
## About The Pull Request
This adds more trash: 
- Paper 
- Empty cigarette packs
- Empty lighters
- Empty food containers from snacks
- Empty can containers
- Unarmed mousetraps
- Cut wire
- Broken plates
- ~~Empty bowls~~

This slightly tweaks some existing values to make things feel fresh.
Also adds a unit test to enforce trash food types to be added to the
trash spawner.
 
## Why It's Good For The Game
The more trash we have, the less we'll feel bad about being garbage
players.

## Changelog
🆑
qol: More types of garbage (empty lighters, empty cigarette packs, empty
food, etc.) have been added to the trash spawner.
qol: Paper plane added to the paper spawner, which is now used in the
trash spawner.
/🆑
2025-10-05 07:31:21 +02:00
xPokee 8aa39b75f0 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-10-04 05:28:09 -04:00
John Willard e9e3df89d9 Latejoiners are buckled in again. (#93250)
## About The Pull Request

Not reported yet but I noticed this and immediately knew I broke it, my
bad.
Fixes latejoiners not being buckled into their chairs & Hangover station
trait effects, also merges the two hangover landmarks into one cause i
dont see why they had to be two, I put it in the same updatepaths as the
PR this is a fix to.

## Why It's Good For The Game

Bug fixes

## Changelog

🆑
fix: Latejoiners are buckled in to their chairs & Hangover station trait
now kicks their effects in again.
/🆑
2025-10-04 04:43:06 +02:00
xPokee 5e629dff04 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-10-03 07:05:54 -04:00
MrMelbert 3ea7b03369 Accentuate the positive with **Personality**: A (soft) mood rework (#92941)
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-10-02 19:00:13 +00:00
Krysonism 075de00420 Chekov's Canister! Adds missing resupply canisters, makes them constructable & spawn in maint,. (#93028)
## About The Pull Request

This is was created because I found several rare and exciting canisters
in game and then finding out there is no way to actually construct the
vendor they belong to!...

<img width="768" height="385" alt="image"
src="https://github.com/user-attachments/assets/70261cea-daaf-41df-a212-21cef6d6bd0c"
/>

### This PR:

* Makes all noteable vendors constructable, if you have the canister. 
* Adds canisters to syndismokes, syndiechem, liberation station,
magivend, shambler's juice and bombuddy
* Replaces the old tptally random canisters spawner, with a variety of
spawners weighted for power and split according to different themes.
* Adds the new main canister spawner to maint. 

### Spawner weights

The random canister spawner from maintenance has a:

* **93,5%** chance to spawn a common station vendor refill(with weights
for wardrobes being somewhat reduced.)
* **6%** chance to spawn a rare and special vendor refill.
* **0.5%** chance to spawn a oddity level., super powerful vendor
refill.

## Why It's Good For The Game

One must never place a filled canister in maint if it isn't going to be
constructed It's wrong to make promises you don't mean to keep.

## Changelog

🆑
add: Nearly all notable vendors are now constructable if you have the
canister.
add Added refill canisters for syndiesmokes, liberation station,
magivend, bombuddy 3000, shambler's juice and syndichem.
add: Random vending refill canisters now have a chance to spawn in
maint.
image: Robco Toolmaker and Centdrobe canisters have new sprites.
/🆑
2025-10-02 20:12:46 +02:00
John Willard fd752f043d Easy multi-z support for alarm console (+spawn changes) (#93198)
## About The Pull Request

Station alarm consoles now register to all Station Z levels+Areas if
they were created on a station Z level (this doesn't include mining, but
station ones will see mining areas), otherwise will be a "local" console
to that Z level only.

Mostly the same applies for Cyborg/AI, but if they were built on a
non-station Z level then they have their Z level added on top of Station
Z levels, so example Nukie saboteur borgs will see alarms they might
need, while a Golem/Oldstation AI will also be able to see their own
alarms.

Because of how alarms and spawning in worked, Cyborgs/AIs had CentCom's
Z level as something it would detect, so we simply create the mob at the
spawn location rather than on the title screen during Initialization,
fixing that issue as well.

## Why It's Good For The Game

Adds easy multi-z support for station alarms and removes the previous
bandaid of having to deconstruct your board and multitool it or map in
every single station alarm console to allow station alerts (which is
quite silly) which was done in
https://github.com/tgstation/tgstation/pull/88343.

Closes https://github.com/tgstation/tgstation/issues/61592
Closes https://github.com/tgstation/tgstation/issues/83042
Closes https://github.com/tgstation/tgstation/issues/69314

I find this solution better since it catches pretty much all use cases
without the need for special subtypes and needing players to actually
know the difference between these things.

## Changelog

🆑
fix: Cyborgs and AIs will now see alerts of the whole station rather
than solely the Z level they were spawned on.
fix: Cyborgs and AIs will no longer get alerts about Thunderdome.
/🆑
2025-10-02 18:12:57 +02:00
John Willard f440c85e3c Adds better chalk outlines (#93166)
## About The Pull Request

Drawing an outline of someone now makes a proper outline of them, rather
than a decal that faces their direction
<img width="401" height="446" alt="image"
src="https://github.com/user-attachments/assets/4402e66a-2f77-4e45-95dd-1570a449ccd3"
/>

You can also use crayons to draw outlines now, but they won't be as
strong visually
<img width="138" height="143" alt="image"
src="https://github.com/user-attachments/assets/91f2fda8-cd84-46c3-bee9-b9f16efeb975"
/>

This unfortunately uses GFI, I've messed around with it a bit and
couldn't find a good alternative that would work with humans. If there's
anything better please lmk.

## Why It's Good For The Game

Been enjoying some Detective gameplay and thought it would be cool to
make proper outlines of corpses to better visualize the crime scene
rather than use what looks like graffiti.

## Changelog

🆑
qol: You can use crayons to make chalk outlines, not just white ones.
qol: Chalk outlines are now properly outlines of the body you're
outlining.
/🆑
2025-09-30 16:59:10 +02:00
necromanceranne f843f61b9f Tendril loot changes: Demonic portals drop locked chests instead of just flat out the item, removes some items from some lists, punching mitts is a vendor item. Concussive gauntlets grant hunter boxing. (#93127) 2025-09-29 08:12:33 +02:00
Ghom 96e9ed833b airlocks affected by dimensional anomalies retain their access (#93148)
## About The Pull Request
I'm not sure if to classify this as a fix or small balance detail, but I
don't think dimensional anomalies should nuke airlock access and other
things, such as unrestricted sides, locks and emergency access, when
transformed it into another airlock.

## Why It's Good For The Game
Dimensional anomalies are supposed to fuck up with the aesthetics of the
room. This is more of a side effect of the fact "transformed" objects
are actually deleted and new ones placed in their stead. This also
extends to dimensional bomb cores. Dimensional reactive armors don't
fuck with doors and objects, only spawn some cades and change turfs.
2025-09-28 01:47:06 -05:00