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!
/🆑
This commit is contained in:
Joshua Kidder
2025-11-27 15:50:23 -05:00
committed by GitHub
parent 0079462f05
commit 7a3ad79506
410 changed files with 1695 additions and 1695 deletions
+1 -1
View File
@@ -4,4 +4,4 @@
/datum/smite/brain_damage/effect(client/user, mob/living/target)
. = ..()
target.adjustOrganLoss(ORGAN_SLOT_BRAIN, BRAIN_DAMAGE_DEATH - 1, BRAIN_DAMAGE_DEATH - 1)
target.adjust_organ_loss(ORGAN_SLOT_BRAIN, BRAIN_DAMAGE_DEATH - 1, BRAIN_DAMAGE_DEATH - 1)
+1 -1
View File
@@ -22,7 +22,7 @@
if (target.health <= 1)
target.gib(DROP_BODYPARTS)
else
target.adjustBruteLoss(min(BSA_MAX_DAMAGE, target.health - 1))
target.adjust_brute_loss(min(BSA_MAX_DAMAGE, target.health - 1))
target.Paralyze(BSA_PARALYZE_TIME)
target.set_stutter(BSA_STUTTER_TIME)
+1 -1
View File
@@ -11,7 +11,7 @@
/proc/lightningbolt(mob/living/user)
var/turf/lightning_source = get_step(get_step(user, NORTH), NORTH)
lightning_source.Beam(user, icon_state="lightning[rand(1,12)]", time = 5)
user.adjustFireLoss(LIGHTNING_BOLT_DAMAGE)
user.adjust_fire_loss(LIGHTNING_BOLT_DAMAGE)
playsound(get_turf(user), 'sound/effects/magic/lightningbolt.ogg', 50, TRUE)
if(ishuman(user))
var/mob/living/carbon/human/human_target = user
+4 -4
View File
@@ -44,10 +44,10 @@
#define TAG_MARK(X) "<b>(<A href='byond://?_src_=holder;[HrefToken(forceGlobal = TRUE)];mark_datum=[REF(X)]'>MARK</a>)</b>"
#define TAG_SIMPLE_HEALTH(X) "<font color='#ff0000'><b>Health: [X.health]</b></font>"
#define TAG_CARBON_HEALTH(X) "<font color='#ff0000'><b>Health: [X.health]</b></font> (\
<font color='#ff3333'>[X.getBruteLoss()]</font> \
<font color='#ff9933'>[X.getFireLoss()]</font> \
<font color='#00cc66'>[X.getToxLoss()]</font> \
<font color='#00cccc'>[X.getOxyLoss()]</font>"
<font color='#ff3333'>[X.get_brute_loss()]</font> \
<font color='#ff9933'>[X.get_fire_loss()]</font> \
<font color='#00cc66'>[X.get_tox_loss()]</font> \
<font color='#00cccc'>[X.get_oxy_loss()]</font>"
ADMIN_VERB(display_tags, R_ADMIN, "View Tags", "Display all of the tagged datums.", ADMIN_CATEGORY_GAME)
var/index = 0
+2 -2
View File
@@ -714,8 +714,8 @@
if(DEAD)
status = "<font color='red'><b>Dead</b></font>"
health_description = "Status: [status]"
health_description += "<br>Brute: [lifer.getBruteLoss()] - Burn: [lifer.getFireLoss()] - Toxin: [lifer.getToxLoss()] - Suffocation: [lifer.getOxyLoss()]"
health_description += "<br>Brain: [lifer.get_organ_loss(ORGAN_SLOT_BRAIN)] - Stamina: [lifer.getStaminaLoss()]"
health_description += "<br>Brute: [lifer.get_brute_loss()] - Burn: [lifer.get_fire_loss()] - Toxin: [lifer.get_tox_loss()] - Suffocation: [lifer.get_oxy_loss()]"
health_description += "<br>Brain: [lifer.get_organ_loss(ORGAN_SLOT_BRAIN)] - Stamina: [lifer.get_stamina_loss()]"
else
health_description = "This mob type has no health to speak of."
+1 -1
View File
@@ -554,7 +554,7 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w
SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Mass Braindamage"))
for(var/mob/living/carbon/human/human_mob in GLOB.player_list)
to_chat(human_mob, span_bolddanger("You suddenly feel stupid."), confidential = TRUE)
human_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 60, 80)
human_mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 60, 80)
message_admins("[key_name_admin(holder)] made everybody brain damaged")
if("floorlava")
SSweather.run_weather(/datum/weather/floor_is_lava)
+11 -11
View File
@@ -74,23 +74,23 @@
var/newamt
switch(Text)
if("brute")
L.adjustBruteLoss(amount, forced = TRUE)
newamt = L.getBruteLoss()
L.adjust_brute_loss(amount, forced = TRUE)
newamt = L.get_brute_loss()
if("fire")
L.adjustFireLoss(amount, forced = TRUE)
newamt = L.getFireLoss()
L.adjust_fire_loss(amount, forced = TRUE)
newamt = L.get_fire_loss()
if("toxin")
L.adjustToxLoss(amount, forced = TRUE)
newamt = L.getToxLoss()
L.adjust_tox_loss(amount, forced = TRUE)
newamt = L.get_tox_loss()
if("oxygen")
L.adjustOxyLoss(amount, forced = TRUE)
newamt = L.getOxyLoss()
L.adjust_oxy_loss(amount, forced = TRUE)
newamt = L.get_oxy_loss()
if("brain")
L.adjustOrganLoss(ORGAN_SLOT_BRAIN, amount)
L.adjust_organ_loss(ORGAN_SLOT_BRAIN, amount)
newamt = L.get_organ_loss(ORGAN_SLOT_BRAIN)
if("stamina")
L.adjustStaminaLoss(amount, forced = TRUE)
newamt = L.getStaminaLoss()
L.adjust_stamina_loss(amount, forced = TRUE)
newamt = L.get_stamina_loss()
else
to_chat(usr, "You caused an error. DEBUG: Text:[Text] Mob:[L]", confidential = TRUE)
return