mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 03:26:31 +01:00
docker-container
7 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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! /🆑 |
||
|
|
39a2434c06 |
Voidwalker Rework | Basic Mob Edition + Bonus Antag (#91646)
## About The Pull Request Reworks the Voidwalker into a basic mob, including a lot of the balance and mechanics! Old (left), new (right)  https://github.com/user-attachments/assets/22d6138f-11aa-4f7a-8600-2565e6578bcf (little outdated) https://youtu.be/cp1E3qPJGX4 (high res mirror) **🟨Voidwalker mob changes🟨** No longer a human species and no more void eater. Instead deals damage by simple unarmed attacks. Instead of dealing brute, the voidwalker does oxygen damage (4-5 hits to knock out) with left-click, and slight brute on right click. Non-human mobs automatically take brute damage instead of oxygen damage. 150 HP 33% burn armor Yes it has hands, but it can only pick up and drop stuff **🟨Window phase🟨**  Instead of needing to smash a window with the void eater, moving through windows simply leaves them passable for 5 seconds. Makes kidnapping a lot easier, but also makes it easier for people to chase you People who used the voided skull also leave windows passable for a short bit. **🟩Cosmic Charge🟩** Standard charge ability, but only lets you charge towards space and works while dragging people **🟩The Vomitwalker🟩** People you kidnapped now occasionally do the nebula vomit, which voidwalkers can use to dive from and into  Diving into it is very fast but also removes the nebula vomit. You can also kidnap people into the vomit (this doesn't remove the vomit). There is also a little UI for tracking this. Clicking it while in space dive teleports you to the next nebula vomit, if there are any.  **🟨Voided people changes🟨** Kidnapped people and people that used the cosmic skull are no longer muted, but take 10% extra brute and occasionally leave behind glass shards when taking a lot of damage. Are no longer obliterated on a second encounter with voidwalkers. Voidwalkers can't hurt people they've already voided (unless they really want to), but instead just knock them out for 30s Also the kidnapped do space vomit as I said earlier. **🟩Sunwalker🟩** Voidwalker variant made for pure murderbone. Has no camo and kindap mechanics, but has a fiery charge, loads of damage and area igniting and people ignition. It's admin, but I might change this later once I've had some more time to think about it.  Other changes: - Voidwindows no longer need to be space adjacent - Unsettle works faster but can't be used in combat anymore - Space camo now grants complete space invisibility - Makes a lot of aspects easily moddable, so we can easily mod it into a moistwalker in-game - Taking a cosmic skull when you already used one gives you the old voidwalker void eater arm. Additional uses just gives you more void eater arms until you run out of hands - I definitely forgot a lot more - I made a cool voidwalker hud! It even has a unique space camo toggle ## Why It's Good For The Game <details> <summary>Lot of text</summary> Voidwalker was basically a snowflaked toghether human species because I didn't know how to sprite, but I was able to work with species and visual effects. Then I realized I can just commission sprites! This also let me just cut out a lot of the snowflake code, because it's no longer a human so half the things I didn't want them to be able to do, they just literally cannot do. Voidwalkers were in a bit of strange spot with kidnapping? There was essentially no incentive, other than "smash spaceman = funny". They also had issues doing, anything? There's surprisingly little space on a space station, especially maps such as tram. Making the voided victims have nebula vomit gives the voidwalker a reason to WANT to kidnap, by giving them a way to appear basically anywhere on the station. I don't think it's too overpowered. Voided people don't vomit that much, it's easily cleanable and diving into it removes them, so they're limited usability. Replacing the brute damage with oxygen damage also kinda... just makes sense? I seriously contemplated letting them do stamina damage for the first iteration, but opted not to do it because stamina damage has so many hooks attached. Oxygen damage doesn't! It's also just incredibly thematic, let's them bypass most armor and makes them more suited to non-letha kidnappings. Space camo making them completely invisible was also long overdue. It was literally just urging people to turn up their gamma and turn down their parallax settings. I thought it was an interesting mechanic, but it's just straight up unfair and doesn't belong in a multiplayer game. They now more frequently leave behind little glass shards, leave particles from nebula vomit they leave from and have more unique sound effects, so attentive (and lucky) people can still deduce if an area is safe-ish. I removed being able to shatter voided people because the mechanic was deeply misunderstood. It was intended to give them a means of removing people if they kept incessently bothering the voidwalker, but people went out of their way to use this to roundremove people they had already voided. The 30s sleep conveys my intention a lot better, and fits better now that the voidwalker benefits from having as many voided people vomitting all over the place. The cosmic charge gives them some much needed survivability. My experiences (in observing voidwalkers, I can never get the roll ;_;) is that they're constantly one mistake away from complete obliteration. The cosmic charge let's them get out quick despite their slow movement speed in gravity. It also makes them stronger when fighting in space. They got 33% burn armor so it's a tiny bit harder to wipe them away in a single laser salvo, while still giving people ample opportunity to fight them off . Also they're like glass or something so it fits thematically. I gave them hands because I thought it was cool, might be a mistake idk </details> ## Changelog 🆑 Time-Green, INFRARED_BACON add: Voidwalker has been throughly reworked! Now you are even less safe! admin: Adds admin-only Sunwalker mob fix: Unsettle doesnt work on yourself anymore fix: Space camo doesnt stop bobbing anymore fix: Voidwalker windows now recharge on kidnap runtime: Fixes healthanalyzers runtiming when scanning mobs without reagent holders /🆑 |
||
|
|
c1d68698fb |
Micro-optimize qdel by only permitting one parameter (#80628)
Productionizes #80615. The core optimization is this: ```patch - var/hint = to_delete.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up. + var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up. ``` We avoid a heap allocation in the form of copying the args over to a new list. A/B testing shows this results in 33% better overtime, and in a real round shaving off a full second of self time and 0.4 seconds of overtime--both of these would be doubled in the event this is merged as the new proc was only being run 50% of the time. |
||
|
|
5bf6d09903 |
Cuts the number of apply_damage copypaste procs from 3(.5) to 1, fixing a few bugs along the way (#79207)
## About The Pull Request - `apply_damage` is now uniform, handled, in a single place. At the living level. - Fixes people being held at gunpoint from being unable to flinch from taking damage. - Fixes a few signals (explodable, glass jaw) of apply damage maybe potentially not having effects if the passed hit zone was a bodypart and not a def zone. - Fixes regenerator component always halting regeneration no matter what damage taken. - Fixes pressure damage being unaffected by `brute_mod` despite what documentation claims. - Signalizes the `check_species_weakness` proc on species. ## Why It's Good For The Game The copy+paste of this proc made it awful, awful to maintain or add features to. And also made it very bug prone. This just takes a step forward in making sustaining damage a lot more consistent, not only across all mobs, but across all methods of... taking damage. Unarmed attacks, hulk, item attacks, etc. ## Changelog 🆑 Melbert fix: People held at gunpoint can now flinch when being hit. fix: Regenerating mobs no longer stop regenerating no matter hit with what. fix: Pressure damage is now properly modified by a mob's brute damage modifier. fix: Fixes some occasions which some effects (glass jaw, explodable worn items) won't respond to hits. refactor: Refactored core code related to mobs sustaining damage. /🆑 |
||
|
|
9420370cd1 |
Zombies use the regenerator component (#79208)
## About The Pull Request https://github.com/tgstation/tgstation/pull/79207#discussion_r1368165636 Simple enough, just moves zombie regeneration to the regenerator component. Adapts the component slightly to support it. Minor code cleanup, etc etc. ## Why It's Good For The Game Besides more consistent behavior, it gives a lot more user feedback on how zombie regeneration works. Makes 'em glow green and gives a visible message when it starts, rather than just needing to guess (as it is currently). ## Changelog 🆑 Melbert refactor: Refactored zombies to use the regenerator component. Now they'll have a slight glow/animation when the regeneration actually kicks in. /🆑 |
||
|
|
4c48966ff8 |
Renames delta time to be a more obvious name (#74654)
This tracks the seconds per tick of a subsystem, however note that it is not completely accurate, as subsystems can be delayed, however it's useful to have this number as a multiplier or ratio, so that if in future someone changes the subsystem wait time code correctly adjusts how fast it applies effects regexes used git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i 's/DT_PROB/SPT_PROB/g' git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i 's/delta_time/seconds_per_tick/g' |
||
|
|
f47b29a392 |
Basic Mob Carp Part II: Regenerator (#71437)
## About The Pull Request <details> <summary>Video</summary> https://user-images.githubusercontent.com/7483112/203324325-5bf46e0f-b294-4832-9016-aec275036ca9.mp4 </details> Adds a "Regenerator" component, applies it to carp, and removes the previous implementation from megacarp. The function of this component is that any time you take damage a timer is reset, when that timer expires you will begin regenerating health and display an animated border for visual feedback. This was previously a function of mega carp but was extremely obscure because there was _no_ feedback, so it would only be visible that it was happening if you were wearing a medical hud. Additionally because mega carp will pursue a target until it dies you probably wouldn't notice it even then, it had to survive a fight in order to gain any value from this. This will still be true for all carp until AI changes are pushed, so until then this isn't going to do very much for NPCs but might be a small buff to player controlled carp (though those can all retreat to a carp rift for a similar effect). This also modifies a few "defence" procs which were either directly setting HP or neglecting to call signals from a base proc, as they would bypass triggering the effect. This should make them more reliable for other things which rely on those signals too. ## Why It's Good For The Game Gives an iconic creature some more unique behaviour than "moves directly towards you and bites". Gives visual feedback to some behaviour which has existed invisibly for a long time. ## Changelog 🆑 add: All Space Carp will now start regenerating health after 6 seconds of not taking any damage, until they're back to full health. This behaviour was previously unique to mega carp. /🆑 |