2423 Commits

Author SHA1 Message Date
nevimer a9a59ed3f9 Merge remote-tracking branch 'origin/upsteam-12-15-25-revert-unique-reskins'
# Conflicts:
#	_maps/bubber/automapper/templates/centcom/interlink_adminoffice.dmm
#	_maps/map_files/BoxStation/BoxStation.dmm
#	_maps/map_files/generic/CentCom_skyrat_z2.dmm
#	_maps/map_files/moonstation/moonstation.dmm
#	code/modules/holiday/holidays.dm
2026-01-12 22:09:10 -05:00
amsy2 d548ed6693 Adds Firebot upgrade to heat/cool air to room temperature (#5063)
## About The Pull Request

Adds new Firebot variant and new Freon Firefighting Foam

Freon Firefighting Foam works same as Firefighting Foam (like ones in
advanced extingishers) with added beenfit of bringing temperature
down/up to 20C even if there's no fire, it also leaves no plasma stains
on the floor. This foam is not meant to be available to players and used
only by the upgraded Firebot.

You can upgrade standard Firebot by giving it a piece of Hot Ice! Doing
so will make it use it's foam if air temperature is below 18C or above
22C, effectively helping keep corridors at room temperature.

## Why It's Good For The Game

Firebots are rarely given a chance to shine, giving them option to
effectively work as walking space heaters widens their use and
practicality by a lot, especiely on maps like Ice Box notorious for
having their corridors go cold all the time. The upgrade also require
Hot Ice which is an atmos made material made with Freon, that currently
doesn't have many uses, giving atmos techs another way to contribute
with their projects to well being of the station.

## Proof Of Testing

<img width="404" height="216" alt="image"
src="https://github.com/user-attachments/assets/bf2e968e-18c3-495d-8ed7-335daca6fdbb"
/>
<img width="393" height="35" alt="image"
src="https://github.com/user-attachments/assets/0e327489-2360-4c9f-b05b-b26e78ede0af"
/>
<img width="428" height="131" alt="image"
src="https://github.com/user-attachments/assets/bdb0500d-d83c-4880-8c23-0d2b2399f627"
/>

## Changelog

🆑
add: You can upgrade Firebots by giving them Hot Ice. Doing so makes
their foam fix air to room temperature.
/🆑

---------

Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2025-12-28 15:34:07 -08:00
amsy2 f1b3b70c46 Makes overclocked volume pumps work in walls again, reverting #94007 from TG (#5031)
## About The Pull Request

Volume pumps work in walls again. I just removed the code added in
[#94007](https://github.com/tgstation/tgstation/pull/94007)

## Why It's Good For The Game

The bug to place overclocked pumps in walls has been around for years at
this point, long enough to become stable among atmosians for making
compact setups by ignoring pressure limits. Only thing that changes with
wall placement no longer working, is that atmos techs have to waste
extra time.

Removing floor from a tile surrounded by windows does effectivly exact
same thing as placing pumps in walls, but takes extra time in a job that
is already heavily time consuming, it's just an annoyance, it doesn't
introduce any new problem to solve or workaround when solution is pretty
straightforward.

The loss of gas isn't relevant either, placing pumps in walls did not
stop leaking, it just stopped it from spreading into air, the loss of
gas is already at 0.1%, it's not enough to mess with efficiency of the
setup.

Proper approach would be actually changing the way pumps work, make it
engineering problem to solve instead of just adding annoying friction to
playerbase of atmos techs that's already pretty small, which is why I
believe it'd be best course to revert the change introduced by
[#94007](https://github.com/tgstation/tgstation/pull/94007) until
someone actually bothers to properly work on atmos content like this.

## Proof Of Testing

<img width="224" height="135" alt="image"
src="https://github.com/user-attachments/assets/5a226421-070c-4691-98b5-c7d807da2de1"
/>

## Changelog

🆑
balance: Overclocked volume pumps work in walls again
/🆑

---------

Co-authored-by: nevimer <77420409+nevimer@users.noreply.github.com>
2025-12-22 20:04:57 -05: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
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
Bloop 7754938c72 Makes a bunch of lists lazy (#94239)
## About The Pull Request

Empy lists. There are a lot of 'em.

<img width="981" height="512" alt="image"
src="https://github.com/user-attachments/assets/b94b041a-2904-466b-ab89-54bd1de11b4e"
/>

Going through ways to reduce memory I found a few easy ones here. Wires,
the edible component, the seethrough component. None of these are really
a concern when it comes to needing lists in memory for performance
reasons. Wires aren't going to be cut most of the time for each door. A
lot of food does not have any junkiness. Seethrough component lies
dormant most of the round. Etc.

Making lists lazy in these cases should be a no brainer.

Everything I tested still seems to work exactly the same.

## Why It's Good For The Game

Frees memory that is just taking up space a lot of the time.

## Changelog

Not player-facing, this is all under-the-hood stuff.
2025-12-03 13:42:16 -07:00
Ghom 0b0c5ea91e Unit test material checks are now performed on all crafting recipes by default. All stack recipes now transfer mats to the results (#92620)
## About The Pull Request
Extends the part of the crafting unit test that ensures consistency
between the total mats of the components of a recipe (or rather, the
result of said recipe) and a generic instance of the same type as its
result, previously only implemented on food recipes.

## Why It's Good For The Game
This ensures a degree of consistency with the material composition of
various objects in the game. I couldn't do it in the original PR as that
one was too big already and it took months to get it merged, and have
the relative bugs fixed.

Currently a WIP as I slowly deal with the unit test reports.

## Changelog

🆑
refactor: Follow-up to the crafting/material refactor from months ago.
All objects crafted with stacks now inherit their mat composition (not
necessarily the effects and color) by default, while previously only a
few things like chair, sinks and toilets did. Report any object looking
or behaving weirdly as a result.
fix: The material composition of ammo boxes is no longer a 1/10 of what
it's supposed to be. It was a shitty hack to make it harder to recycle
empty ammo boxes. Instead, they lose materials as they're emptied now.
/🆑
2025-12-02 18:29:01 -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
Bloop 9c8a60a0b8 Removes some cargo cult string interpolations (#94210)
## About The Pull Request

Macros that are strings do not need to be doing this.

## Why It's Good For The Game

Less improper things to copy paste existing in the codebase
2025-11-30 13:25:45 -06: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
Pickle-Coding 9425819c7e Stops overclocked volume pumps from working inside walls. (#94007)
Turns off overclocking when the volume pump is overclocked while inside
a wall.

Closes #88513

## About The Pull Request
Overclocked pumps will turn off overclocking when they try to operate
inside a closed turf.

## Why It's Good For The Game
Removes an unintended exploit that trivialises the leaking
functionality. This makes it consistent with commit
ba6d08d5eb from #57971.

## Changelog

🆑
fix: Fixes overclocked volume pumps being able to work on walls.
/🆑
2025-11-28 16:28:16 -08: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
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
Sarah C ad50b792a5 Moves the HFR from process() to process_atmos() (#93902)
## About The Pull Request

This pull request makes the HFR process at the same rate as other
atmospheric components. Because its temperature changes previously
didn't take `seconds_per_tick` into account, heat output and a few
things related to it had to be adjusted to compensate. This also fixes a
bug preventing the moderator from being able to leak its gases from
cracked parts.

## Why It's Good For The Game

The HFR not processing with the rest of atmospheric machinery can
occasionally cause odd behavior such as pressure spikes in the waste
output every 1 in 4 atmos ticks, which this PR corrects.

## Changelog
🆑
fix: Fixed cracked HFR parts not being able to leak moderator gases.
code: The HFR now processes at the same rate as other atmos machinery.
/🆑
2025-11-19 04:09:42 +01: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
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
Roxy d84a87f668 Rewrites to fix compiler errors on 516.1670+ (#93801)
## About The Pull Request

Fixes all instances of numbers being used as assoc list keys in things
that aren't alists, either by turning them into alists or changing the
keys to something else. Also adds new macros to support creating global
alists, as a few global lists became alists. Most of these are pretty
simple and self-explanatory but
- The GLOB.huds one necessitated rewriting because code depended on it
being a non-assoc list, which it technically was because the defines it
used as keys were numbers so BYOND turned it into a regular list, most
of this was for loops through all the subtypes of
`/datum/atom_hud/data/diagnostic` of which there's only one, so I just
changed it to get that type directly by key
- NT Frontier used number indexes which it looped through for some
reason and also passed to TGUI, changed these to strings and adjusted
the TGUI to match, I tested this and it works fine

## Why It's Good For The Game

Makes the code compile, I couldn't test everything but I tried to check
all usages of affected vars to make sure they wouldn't break from being
switched to alists, a TM might be in order just to be sure nothing's
fucked

## Changelog
🆑
refactor: rewrote all cases of numbers being used as keys in non-alist
associative lists
/🆑
2025-11-08 14:19:55 -08: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
SyncIt21 9740c687de General maintenance for wall mounts (#93534)
## About The Pull Request
- Fixes #93392
- Replaces all custom callbacks with call to `deconstruct()`. The
callbacks weren't necessary as it did the same thing as `deconstruct()`
but in an round about way
- Removed duplicate `Initialize()` procs and the params `building` &
`ndir` from all wall mounts. Makes everything cleaner

## Changelog
🆑
fix: wall mounts placed by player now falls off when the wall they are
mounted on is destroyed
code: cleaned up wall mount code
/🆑
2025-10-23 17:26:19 +02: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
Xander3359 bbe729aef7 Converts more attackby's to interactions (#93106)
## About The Pull Request
Converts the following:
- Medical Kiosk
- Implant case
- Flamethrower
- Chemical implant case
- Pappercutter

Also I've looked at some alt click procs and adjusted some of their
returns
2025-10-12 22:40:42 -05:00
John Willard 5055602702 Removes 2 power sinks (#93287)
## About The Pull Request

Lowers the power needed for the unary vents & gas miners by making unary
vents respect going idle and gas miners taking 7.5kW power less since it
doesn't really have a way to "turn off".

## Why It's Good For The Game

These machines are straight up power sinks that sucks up a lot of power
away from ghost roles & arrivals. The unary vents is quite a big issue
as on Metastation arrivals loses power about 3-4 minutes in and prevents
the rest of the station to charge their APCs, significantly cutting the
15 minute delay Engineering gets to set up power.
2025-10-05 15:32:07 -05:00
xPokee 8aa39b75f0 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-10-04 05:28:09 -04:00
MrMelbert 2560ceb447 Fix cryo visuals on multiz maps (#93257)
## About The Pull Request

It needs to match parent plane

## Changelog

🆑 Melbert
fix: Multi-z map cryo no longer makes locked fighting game characters
/🆑
2025-10-04 04:37:21 +02:00
xPokee 5e629dff04 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-10-03 07:05:54 -04:00
Archemagus 6f834fb418 AAS code cleanup (#93158)
## About The Pull Request

- Added full support for RETA system
- Categorized all configs for search purposes
- Added channel check for most usages of get_announcement_system() calls
## Why It's Good For The Game
## Changelog
🆑
code: Little AAS code cleanup. Added full RETA support. Grouped configs
for search purposes.
/🆑
2025-10-02 18:17:38 +00:00
Pickle-Coding b56b28c6b5 Fixes cryo grenades being able to cool chemicals below 2.7 Kelvin. (#93225)
## About The Pull Request
Prevents cryo grenades being able to cool gases below 2.7 Kelvin by
capping the minimum temperature in chem_splash().

## Why It's Good For The Game
This can interact with the air, and having negative temperature shoudl
not be opossible.

## Changelog

🆑
fix: Fixes cryo grenades being able to cool the air below 2.7 Kelvin.
/🆑
2025-10-02 20:15:01 +02:00
mskinner5278 28a6899586 fix hyper-noblium formation when bz is null (#93193)
## About The Pull Request
Hyper-Noblium formation is able to occur with or without BZ as a
moderator. The BZ-less formation reaction is commonly used in Ordnance
for high-yield tests. Currently, it throws an error when attempting to
perform the reaction without BZ present because it attempts a list
lookup on the null BZ variable. This results in the TTV failing to
detonate when the valve opens, which is capable of creating impossible
tank states.
<img width="334" height="199" alt="image"
src="https://github.com/user-attachments/assets/74b689c1-9566-47e7-8378-6c3aeeb50be2"
/>

I believe issue #93064 is actually a result of the error this PR fixes.
Comments in that issue also mention a case that I have encountered,
where the TTV was signaled, failed to detonate, and then detonated
instantly in-hand when one of the tanks was removed. Those comments also
mention the Blast Cannon not working with the hyper-noblium reaction,
which is exactly what prompted me to make this fix, and is working with
this fix in place.
## Why It's Good For The Game

Misfired TTVs loaded with maxcaps that detonate unexpectedly is quite
funny, but also very frustrating for the player who properly constructed
the device.
## Changelog
🆑
fix: fixed error during hyper-noblium formation reaction when bz is not
present
/🆑

---------

Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com>
2025-09-30 22:25:19 -07:00
MrMelbert f20c61f670 [MDB Ignore] Deletes the bluespace gas vendor (#93137)
## About The Pull Request

Deletes the Bluespace Gas Vendor and accompanying Bluespace Gas Sender

## Why It's Good For The Game

These wall mounts were added as ways to encourage Atmos Techs to
participate in the economy and crew at large. Unfortunately, it's missed
the mark and is unused in 99% of all rounds*.

**I have seen more atmos techs use the bluespace gas sender for exploits
than for its intended use.*

It has been noted that
1. Atmos doesn't need to sell gas to the crew to make money. They can
export gas to cargo to make more money.
2. The crew doesn't really care about gases. They will rarely go out of
their way to acquire them, even if free.
3. Most importantly, most atmos players **like to give out gas for
free** - it's mass producible and seeing people utilize their creations
tend to be its own reward.
4. Even for the atmos techs that want to charge for their products (to
create conflict or whatnot), *you could easily do that by hand via
pre-filling tanks**.

***I have seen more atmos techs make money off of selling pre-filled
tanks than by using the vendor.*

Ultimately, this machine serves no purpose besides bloating wall space
and existing as an atmos exploit vector.

## Changelog

🆑 Melbert
del: Bluespace Gas Vendors and the accompanying Bluespace Gas Sender
have been removed
/🆑
2025-09-26 20:27:30 +02:00
xPokee b308ee9d78 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-24 10:13:01 -04:00
MrMelbert 750ca9d2ec Two as anything greps (and some other cleanup) (#92974) 2025-09-20 13:44:28 -04:00
xPokee 9b282a850e Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-17 11:45:44 -04:00
Pickle-Coding 51e8a31a54 Caches individual gases for gas reactions. (#92980)
## About The Pull Request
Caches individual gases for gas reactions.

## Why It's Good For The Game
Makes the lines shorter and more readable.

## Changelog

🆑
code: Caches individual gases for gas reactions.
/🆑
2025-09-16 22:26:59 -07:00
SimplyLogan d4fcf29709 Engineering & Atmos rework for Catwalk map [C.A.T] (#92830)
## About The Pull Request

**Ready for review, images below were WIP images, for final comparison
please see map diff bot or video**

https://youtu.be/rk-87JqzLe4


<img width="1616" height="1168" alt="image"
src="https://github.com/user-attachments/assets/5e564dfc-0f0f-48b1-ba25-47f10bc34666"
/>
<img width="1466" height="1166" alt="image"
src="https://github.com/user-attachments/assets/fce0b644-ed34-4ea3-ac67-3ce7c861f359"
/>
<img width="1011" height="904" alt="image"
src="https://github.com/user-attachments/assets/8ac9dbf2-bad4-42c6-a5fe-6550074e9abf"
/>
<img width="1501" height="1175" alt="image"
src="https://github.com/user-attachments/assets/23503a1d-d4c4-42be-95d3-f2988bb73c8a"
/>
<img width="1538" height="1219" alt="image"
src="https://github.com/user-attachments/assets/07e13e32-3b34-48e1-8862-17ec7c9bcd70"
/>
<img width="1417" height="942" alt="image"
src="https://github.com/user-attachments/assets/765af815-cda4-4485-a925-cb04591cdf29"
/>
<img width="1469" height="1236" alt="image"
src="https://github.com/user-attachments/assets/881e69dc-ef49-4fcd-a811-d1d604650fde"
/>
## Why It's Good For The Game

- Catwalk engineering & atmos has often been the weakest part of the
map, this overhaul helps solve some of the biggest gripes players have
with it.
- Should help with player population not dropping like a stone when it
rolls
## Changelog
🆑
map: Catwalk - Atmos and Engineering split, new access hallway, new
stairs to AI sat, HFR re-located, space for passion projects, new
lighting, So many changes to document. [C.A.T]
/🆑
2025-09-12 01:28:06 +00:00
Joshua Kidder 10642f596e Clearly you don't own an air fryer: optimizes /datum/gas_mixture/turf/heat_capacity by ~32% (#92926)
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-09-11 20:27:21 +02:00
xPokee 939f2fc9ac Merge branch 'master' of https://github.com/tgstation/tgstation into xpokee-test-upstream-sync 2025-09-10 14:12:16 -04:00
SyncIt21 27e868a3da Refactors how air sensors & atmos monitors connect (#92849)
## About The Pull Request
**1. Qol**
- Air sensors(maploaded & hand crafted) now auto connect to any input
ports & output valves that are within a 4 tile radius from it meaning
there is no need for these ports to have unique IDs attached to them &
you don't need a multitool to link them together if you first placed
those ports & then placed the air sensor close to them
- Atmos control monitors now finds all air sensors that are closest to
it within the same z level meaning you can have/place multiple air
sensors of the same type on the same z level & the monitor will locate
them correctly without any ambiguity

**2. Refactor**
- Removed var `chamber_id` from both injectors & vents meaning you don't
need to have unique ids assigned to them. As long as mappers/players put
them within 4 tile radius from the air sensor it will auto connect to
them
- Removed var `GLOB.map_loaded_sensors`

## Changelog
🆑
qol: hand crafted air sensors now auto connect to input & output ports
if they are located within a 4 tile radius from it
qol: atmos control monitors now locate all air sensors nearest to in on
that same z level meaning you can have multiple air sensors of the same
type on the same map
refactor: refactored how air sensors & atmos monitors connect to each
other. Please report any atmos computers that have missing input
valves/output ports on their connected air sensors or those that don't
list any air sensors at all on github
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-09-10 01:06:36 -07:00
sushi be4ab89080 Releasing water vapor will now also clean radiation on items. (#92871)
## About The Pull Request

Adds the `CLEAN_RAD` flag to those passed to the `turf/wash()` call in
`turf/open/water_vapor_gas_act()`.
## Why It's Good For The Game

Washing items in a sink or shower is enough to clean the rads off of
them and so it makes sense to me that releasing water vapor into a
radiated room would have the same effect. Useful for radiation-related
disasters that make a room really obnoxious to be in and gives the
janitor a unique opportunity to fix something quickly given that they
start with a water vapor canister.


![dreamseeker_DTIneot8tQ](https://github.com/user-attachments/assets/a8d54096-169d-474c-8b8a-2410de702ed3)
## Changelog
🆑 sushi
add: water vapor on a turf will now also wash radiation off of the items
on it
/🆑
2025-09-07 21:06:17 -04:00
nevimer b348b617a3 Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07
# Conflicts:
#	README.md
#	code/__DEFINES/admin.dm
#	code/__DEFINES/melee.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/economy.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/elements/crusher_loot.dm
#	code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
#	code/modules/clothing/suits/_suits.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/mineral_scanner.dm
#	code/modules/mob/living/living.dm
#	code/modules/plumbing/plumbers/pill_press.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
2025-09-07 00:37:52 -04:00
Pickle-Coding fb1bc13935 Excited groups no longer breakdown during certain gas reactions. (#92412)
## About The Pull Request
Excited groups no longer breakdown during certain gas reactions that are
considered too volatile without necessarily being a fire.
## Why It's Good For The Game
This stops shit like antinoblium from breaking down and equalising with
a large chunk of the station instantly. Should make that feel more like
goop spreading.
## Changelog
🆑
balance: Some gas reactions will prevent excited groups from breaking
down.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-09-02 21:39:37 -07:00
tonyhawq 64af7e953d Adds back mounted wind turbines (#92516)
## About The Pull Request
Adds portable wind turbines that can be put in your back slot or
anchored to the ground. They accept a cell-powered item and charge it
while you walk, or when space wind passes over them. Can be purchased
for 400 credits or crafted with 3 kitchen knives, plastic, and servos.
Requires a capacitor to charge things, and higher tiers charge faster,
faster walkspeed also charges faster.

<img width="592" height="644" alt="im222age"
src="https://github.com/user-attachments/assets/e9997536-5ee0-4417-a31c-cb58666d4d07"
/>


https://github.com/user-attachments/assets/1cf7fce5-d385-4e3e-be97-fb15e253c308

## Why It's Good For The Game
Sometimes you don't have a cell charger. And you need to charge
something. Now you can charge something by running laps around the
station.
During a blob, rechargers are brought to the front lines to charge
energy guns and such but what if the blob turns off the power? And what
are bar-rp'ers to do? Kill two birds with one stone by having them run
laps instead of sitting around doing nothing.
Also its funny.

## Changelog

🆑
add: Added a portable wind turbine which can charge things when you walk
around
add: Added a signal that procs when an object resists space wind (from
being anchored / pulled)
sound: added woosh.ogg as a low "wooshing" noise
image: added a wind turbine sprite
/🆑

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
2025-08-31 21:13:11 +00:00
SimplyLogan f41cbfbf3d Prevents vent crawlers getting trapped in a static vent or scrubber. (#92711)
## About The Pull Request

<img width="262" height="268" alt="image"
src="https://github.com/user-attachments/assets/699ec3e6-7f49-4704-9b24-07ee7eb015d7"
/>

Fixes - #92682

Allows any vent crawler to exit a vent, with any directional key, if
there is no pipe to move to in that direction.

Also adds a cooldown as would flood the chat if you held the movement
key at a welded vent
<img width="424" height="67" alt="image"
src="https://github.com/user-attachments/assets/a144d809-aa21-420c-aad8-831c22f568fa"
/>

## Why It's Good For The Game

- Quick fix
- Prevents hard locks of players stuck in isolated vents or scrubbers
## Changelog
🆑
fix: Prevents vent crawlers getting trapped in a static vent or
scrubber.
/🆑
2025-08-26 18:47:12 -06:00
SyncIt21 532c36fd67 Fixes unconnected Thermomachine pipe being invisible (#92720)
## About The Pull Request
- Fixes #92700
2025-08-26 16:46:23 -05:00
Pepsilawn c9e194eb2f Fixes gas miners connecting to surrounding pipes. (#92644)
## About The Pull Request
Closes #92578

## Why It's Good For The Game
They aren't supposed to do that and would just cause runtimes when you
added them to pipelines didn't even provide any gas there's no intended
interaction for that.
2025-08-26 16:41:50 -05:00
MrMelbert 57884727ca Attackedby differentiates failed attacks from 0 damage attacks (#92564)
## About The Pull Request

Fixes #92558

Currently `attacked_by` does not differentiate an attack that did 0
damage with an attack that failed (due to blocking or whatnot)

See also: This hack I left in

https://github.com/tgstation/tgstation/blob/ce958c77c006a5fe279fb46fed513206e341cfce/code/_onclick/item_attack.dm#L346-L347

This causes problems because successful attacks can deal 0 damage. See
linked issue.

This PR addresses the issue by having `attacked_by` return `-1`
(`ATTACK_FAILED`) for attacks which entirely do not connect.
-1 was used so consumers can easily check if an attack did 0 damage OR
failed (via checking `<= 0`)

This isn't the preferred fix - I'd prefer if all block checking and zone
targeting was moved to `/item/proc/attack`, but that requires attack
itself be reigned in a bit (cuz it's still a bit of a mess).

## Changelog

🆑 Melbert
fix: Item on-attack effects will trigger as expected when hitting a limb
at damage cap
/🆑
2025-08-19 22:40:47 -04:00
SimplyLogan 9f82195b6f [NO GBP] contributor.md web links (#92507)
… link
## About The Pull Request

A very minor update to contributor guidelines - I've been going through
the wiki pages and guides and trying to figure out what would make
contributing a bit more accessible - When you clicked on the .md links
in the guide, it would 404 on Github as it was expecting a local repo
path instead of a web path.

### Steps to re-produce

1. Start here: https://github.com/tgstation/tgstation
2. Scroll down and click Contributing tab button
3. Click under the contents "Development guides"
4. Then click one of the links
5. Currently the URL is:
https://github.com/tgstation/tgstation/blob/master/guides/HARDDELETES.md
6. But the site is not knowing it is actually:
https://github.com/tgstation/tgstation/blob/master/.github/guides/HARDDELETES.md

The .github is missing from the URL.

I also spotted a link in the atmos guide without a title so added it +
fixed the URL.

Originally added double absolute web links but on a comment - Changed it
from **./ to /.**


https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#relative-links

Fully unsolved and not acknowledged alas, Quite a few discussions and
sub links here:

https://github.com/orgs/community/discussions/67750

No change log as does not affect anything server side.
## Why It's Good For The Game

Keen to lower the friction barriers for people who might be curious to
contribute and have never done it before.
## Changelog

N/A - No change log as does not affect anything server side.
2025-08-19 22:39:34 -04:00
MrMelbert 844ad39d65 Attackedby differentiates failed attacks from 0 damage attacks (#92564)
## About The Pull Request

Fixes #92558

Currently `attacked_by` does not differentiate an attack that did 0
damage with an attack that failed (due to blocking or whatnot)

See also: This hack I left in

https://github.com/tgstation/tgstation/blob/ce958c77c006a5fe279fb46fed513206e341cfce/code/_onclick/item_attack.dm#L346-L347

This causes problems because successful attacks can deal 0 damage. See
linked issue.

This PR addresses the issue by having `attacked_by` return `-1`
(`ATTACK_FAILED`) for attacks which entirely do not connect.
-1 was used so consumers can easily check if an attack did 0 damage OR
failed (via checking `<= 0`)

This isn't the preferred fix - I'd prefer if all block checking and zone
targeting was moved to `/item/proc/attack`, but that requires attack
itself be reigned in a bit (cuz it's still a bit of a mess).

## Changelog

🆑 Melbert
fix: Item on-attack effects will trigger as expected when hitting a limb
at damage cap
/🆑
2025-08-15 04:24:18 +02:00
SimplyLogan 736116b243 [NO GBP] contributor.md web links (#92507)
… link
## About The Pull Request

A very minor update to contributor guidelines - I've been going through
the wiki pages and guides and trying to figure out what would make
contributing a bit more accessible - When you clicked on the .md links
in the guide, it would 404 on Github as it was expecting a local repo
path instead of a web path.

### Steps to re-produce

1. Start here: https://github.com/tgstation/tgstation
2. Scroll down and click Contributing tab button
3. Click under the contents "Development guides"
4. Then click one of the links
5. Currently the URL is:
https://github.com/tgstation/tgstation/blob/master/guides/HARDDELETES.md
6. But the site is not knowing it is actually:
https://github.com/tgstation/tgstation/blob/master/.github/guides/HARDDELETES.md

The .github is missing from the URL.

I also spotted a link in the atmos guide without a title so added it +
fixed the URL.

Originally added double absolute web links but on a comment - Changed it
from **./ to /.**


https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#relative-links

Fully unsolved and not acknowledged alas, Quite a few discussions and
sub links here:

https://github.com/orgs/community/discussions/67750

No change log as does not affect anything server side.
## Why It's Good For The Game

Keen to lower the friction barriers for people who might be curious to
contribute and have never done it before.
## Changelog

N/A - No change log as does not affect anything server side.
2025-08-13 01:29:01 -07:00
SmArtKar 5a2becfa67 Fixes random runtimes from RPD usage (#92246)
## About The Pull Request

SSair inits some pipes for its directional cache when RPD is used which
runtimes when atmos components try to update their icon due to assuming
they have a loc while being nullspaced.

## Changelog
🆑
fix: Fixed RPD causing runtimes when placing atmos components for the
first time.
/🆑

---------

Co-authored-by: Lucy <lucy@absolucy.moe>
(cherry picked from commit 99797151d7)
2025-08-08 15:29:12 -04:00
SmArtKar 99797151d7 Fixes random runtimes from RPD usage (#92246)
## About The Pull Request

SSair inits some pipes for its directional cache when RPD is used which
runtimes when atmos components try to update their icon due to assuming
they have a loc while being nullspaced.

## Changelog
🆑
fix: Fixed RPD causing runtimes when placing atmos components for the
first time.
/🆑

---------

Co-authored-by: Lucy <lucy@absolucy.moe>
2025-08-05 14:49:54 +12:00