7 Commits
Author SHA1 Message Date
dd5915f83d Security: A lot of changes (#5132)
## About The Pull Request

Special thanks to Cato for helping me with decisionmaking and balancing
on this one [in a bunch of things here, but not all.]


This PR changes a lot of things so I will be breaking it up into
numbers.

# 1. Security Vouchers: Primary
Ported from monkestation, securirty no longer starts with a taser, but
instead with two vouchers. A utility and a primary. All sec should get a
utility, the HOS, ~~medic~~ and detective do not get a primary voucher.
 
The vouchers can be redeemed at the same vendor that you get
flashbangs/cuffs/donuts from.
The choices are:
- The default taser
- The disabler and an energy shoulder holster to pair
- A pepperball gun and a single clip
- A flash-bulb riot shield


Why the change?:
- Warden might not be there to give you your preferred loadout, so even
on lowpop, you get your preferred gear up to some extent. We're not
giving out hellfire lasers here. It adds nothing that couldn't have been
done before, frankly.
- The weapons are availible roundstart already, with the exception of
the pepperball, which was adjusted to match
- More variety in security playstyle, allows sec officers to personalize
and play in (mostly) different ways.
- The disabler, which is the question I always get, is left in due to it
being present in the game as a standalone tool AND some players just
having a preferrence to shoot themselves in the foot, or don't like
fiddling with modes on the go.


The pepperball gun now has a higher shot delay, which is offset by how
the weapon makes or breaks fights by applying item drop, knockdown and
temporary blindness with it's reagent. Pair it with a baton and any
antag who forgot a gas mask just lost.

# 2. Security Vouchers: Utility
The choices are:
- Barrier nades x2
- Stingbangs x2
- Sec laptop, a laptop with relevant programs on it. Lets you view
cameras on the go, among others.
- Justice Helmet
- Donuts
- Weighted Space Law/Corporate Regulations. More on that later.
- Security barrier projector. More on that later.
- A pair of pinpointers, linked with eachother

## Weighted Space Law and Space Law changes:
I'll call it space law but it's corporate regulations ok?
- Space Law actually links you to wiki. Still teaches you legalese, so
just use it more than once to open it.
- Weighted Space Law, otherwise known as Space Law: Collecter's Edition.
With a gold-coloured-metal-plated trim. Allows you to beat people with
space law for 13 damage, a chance to teach them legalese so they can sue
you after, and a funny message. Overall a gimmicky thing for more
interesting interactions.

## Security Projector changes
- Security projector can now CUFF people. Use it as handcuffs to do so.
- The cuffs can be EMP'd away at a 50% chance. Makes sense according to
what they are and it works for their general purpose of "infinite cuffs,
but no cuffs". THE CUFFS FIZZLE OUT IF YOU LEAVE 1 SCREEN OF RANGE. This
is because of the sheer amount of space you can save on cuffs by taking
this 1 item in their stead, with the condition of "if you can keep them
by you until you sit them in their cell.". Worse than cuffs, but a huge
timesaver if you feel confident in your skills as an officer.


# 3. Breaching Hammer Buff
In the current meta, the breaching hammer is dead. Long-gone. Frangible
rounds in shotguns, sawn off or otherwise, are much more worth it than
any amount of cooperated breaching which leads to yourself being shocked
as they are NOT insulated. For that reason, the hammer now takes just 1
person to breach and is resistant to electricity. It's easier to get
than the frangible shotgun, it needs potentially less space counting the
shots, is infinite, can be even used for dealing with insulated things
as security. Simple as. Item revival, way behind meta, or even just
convenience.


## Proof Of Testing

<img width="1409" height="684" alt="aaaaaaaaa"
src="https://github.com/user-attachments/assets/782c23ca-11bb-4ba7-8294-80086af1b134"
/>
<img width="307" height="269" alt="bbbbbbb"
src="https://github.com/user-attachments/assets/8d75a1bb-fb2e-44d8-8338-f22ed6be62da"
/>
<img width="260" height="311" alt="ddddddd"
src="https://github.com/user-attachments/assets/51229031-0a6d-480c-8021-0f57cd8496dc"
/>
<img width="193" height="181" alt="ccccccc"
src="https://github.com/user-attachments/assets/97254655-60f7-4713-9673-bb6b3071d97e"
/>
## Changelog

🆑
add: Security starts with a primary and utility voucher for redemption
in their equipment lathe to make a choice for what they want to use as
their main, nonlethal weapon that round, and a bonus piece of gear on
the side.
add: Corporate Regulations: Collector's Edition, a space law book with
some heft and blunt force to it...
add: Security holobarriers can now additionally create holographic cuffs
around people, which have a chance to disappear when EMP'd, and
disappear if they leave the projector's range of 9 tiles [1 screen]
add: Pepperball magazines now in security vendor, premium section
balance: Pepperball guns fire much slower, fire delay 8
balance: Breaching hammers can be used by 1 person to breach and are now
insulated
fix: Space law books now link our website's space law
/🆑

---------

Co-authored-by: Alexis <catmc8565@gmail.com>
2026-01-29 12:40:15 +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 KidderandGitHub 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
b8ca0e2884 Federation Legalese (#4530)
## About The Pull Request
This PR adds a new language, Federation legalese, the language of
Bureaucracy in the Federation (hence the name.) After reading Space Law
just once, you too can pretend you know Latin.

## Why It's Good For The Game
A new language for lawyers. This won't make lawyers played more, but
this will let me pretend to know Latin as one

## Proof Of Testing
It compiles

## Changelog

🆑 ReturnToZender
add: Federation legalese is now a selectable language
/🆑

---------

Co-authored-by: Alexis <catmc8565@gmail.com>
2025-09-25 08:27:15 -04:00
John WillardandGitHub ace20e2dcd Wiki books opens a page in-game again (#89250)
## About The Pull Request

Wiki is currently down but this should work once it's back.
If you're on 516 or above it will open the page in-game, if you're still
on 515 then it'll do the old behavior from the PR linked in the why it's
good for the game section.

## Why It's Good For The Game

In https://github.com/tgstation/tgstation/pull/86891 this was removed
"Until 516 with webview2 releases", well it's here now so we're fvckin
back

## Changelog

🆑
qol: The wiki books for users on 516 no longer opens the page on an
external website on your browser.
/🆑
2025-01-29 17:48:30 +01:00
088409bbe3 Fix guide books that rely on the wiki (#86891)
## About The Pull Request

This pull request aims to fix the wiki manuals. Currently the wiki
manuals just show "You start skimming through the manual..." because of
a bad link (http://www.tgstation13.org/wiki instead of
http://tgstation13.org/wiki) which is fixed with this PR, but the issue
does not end there. Because BYOND uses trident for its `browse()`
function, a lot of Javascript and HTML elements do not function
properly, disallowing the removal or blocking of hyperlinks which break
the book entirely if they are clicked.

Therefore, as a temporary solution (until BYOND 516 is released with
webview2) when the user opens a book they are prompted with the
following:


![image](https://github.com/user-attachments/assets/2b92dfc2-df3e-45ff-a15d-0b44576d4c9e)

Although not the best solution, it makes the books have a function again
and are usable.

Fixes https://github.com/tgstation/tgstation/issues/77315.
## Why It's Good For The Game

Makes books work again so new players can use them to be guided to the
wiki resources.
## Changelog
🆑
fix: fix wiki manuals by making them open wiki page on browser
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-09-29 00:03:47 +02:00
san7890andGitHub f6a31d92b6 Fixes Wiki Book Manuals not working (#79589)
## About The Pull Request

Fixes #79545

Basically, the TGUI markdown reader that every other book uses didn't
properly send the HTML printified wiki page that we had. In order to fix
this, I shuffled around a bunch of code and worked in an edge case to
ensure that these manuals keep functioning.

In an ideal world we would be able to do something more elegant, or
maybe not even rely on displaying wiki pages in-game at all, but we just
gotta play the hand we're dealt and ensure that these sorts of features
continue to work for right now.

Also, we no longer need to both write and access raw HTML in the book
framework to make everything work here. This should reduce a LOT of
potential exploit vectors.

## Why It's Good For The Game


![image](https://github.com/tgstation/tgstation/assets/34697715/061ed8d1-2f33-4482-977e-e7db5ad59672)

Thing work 👍 
## Changelog
🆑
fix: Nanotrasen has clarified an issue with their manual publishers, and
these guides should now contain actual user-pertinent content.
/🆑
2023-11-09 18:37:15 +13:00