mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 09:05:11 +01:00
docker-container
101 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
21b4095dfd |
[MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026 fixes https://github.com/Bubberstation/Bubberstation/issues/5549 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com> Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com> Co-authored-by: loganuk <fakeemail123@aol.com> Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com> Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com> Co-authored-by: Lucy <lucy@absolucy.moe> Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com> Co-authored-by: Isratosh <Isratosh@hotmail.com> Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com> Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com> Co-authored-by: Alexander V. <volas@ya.ru> Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com> Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Tim <timothymtorres@gmail.com> Co-authored-by: Iamgoofball <iamgoofball@gmail.com> Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com> Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com> Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com> Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com> Co-authored-by: Josh <josh.adam.powell@gmail.com> Co-authored-by: Josh Powell <josh.powell@softwire.com> Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com> Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com> Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com> Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com> |
||
|
|
17239b193c |
Adds the AI_COMPATIBLE flag to the Mauler exosuit (#94572)
## About The Pull Request Just a very simple PR to fix an oversight where the Mauler exosuit doesn't have the AI_COMPATIBLE flag, meaning as well as being unable to be beaconed - which is intended - you also couldn't use an intellicard to manually install an AI into it. ## Why It's Good For The Game If a squad of nukies wants to shove an AI into their Mauler, then why not? The base Marauder model which the Mauler is based on has AI compatibility, so does the Seraph! Also brings parity with the Dark Gygax which currently _can_ have an AI installed. ## Changelog 🆑 fix: Fixed the inability to shove an intellicarded AI into a Mauler-type exosuit. /🆑 |
||
|
|
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! /🆑 |
||
|
|
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 /🆑 |
||
|
|
a0464ce370 |
Fixes blood drunk miner's dash and some mecha actions not working (#92772)
## About The Pull Request #92354 missed a few uses of Trigger, so blood drunk was missing the clicker arg and some mecha actions didn't account for the change. ## Changelog 🆑 fix: Fixed blood drunk miner's dash and some mecha actions not working /🆑 |
||
|
|
e0740e1ea0 |
Removes the Justice mech (#92486)
## About The Pull Request Removes the Justice mech from the game, including its sprites and some of the associated code. Leaves some sprites, effects and sounds in case anyone wants to reuse them for something else. If the maintainers prefer that the mech should remain in the game, but as an admin-only spawn, I will do so. ## Why It's Good For The Game This mech has been under fire recently because of it being way too overtuned, which I think has mainly to do with trying to cram a lot of unusual things for a mech, such as stealth and melee focus, into the same package. Aditionally, I don't really like the flavor at all, being a blatant reference to another unrelated game. If both the ralsei plush and jevil mask have been removed, I feel like a similar standard should be applied here. Finally, this opens up the posibility for someone else to try a new idea on some of the concepts present on Justice's current iteration, such as making a melee-focused mech. ## Changelog 🆑 del: The Justice mech has been removed. /🆑 |
||
|
|
0bc42d6940 |
Fixes the issue of usr pointing to admins by making Trigger pass down clicker (#92354)
## About The Pull Request Fixes the issue of usr pointing to admins by making Trigger pass down clicker, as usr is fucky and can be passed down by other unrelated procs. Fun. Added the clicker arg to all usages of Trigger as well Also changes isobserver check in antagonist ui_act code that prevents observers from clicking UI's instead to check if the ui.user is owner.current ## Why It's Good For The Game Fixes admins giving heretic to people opening the heretic UI for the admin instead |
||
|
|
9b28da6e38 |
Justice mech: Charge attack and code refactor/New blocking system/some balance and sprites! (#91434)
## About The Pull Request New changes for Justice mech - traitor mech that can be created on emaged fabricator(you need robo skillchip to emag it) 1. Charge attack refactor Charged attack is now used not by pressing the action button but on holding right click  While you press right click scope will focus on tile mouse looking for and when you release right button you will charge on this tile (cooldown 5 seconds as before). if your mouse look at position you unable to charge your mouse icon will become red 2. New Justice block Now Justice don't have 60% chance to block any damage. Instead of this rng, justice has 3 engines that orbit around him  Engines can be active and disabled. While all engines active they will block any range projictiles back.  To deactivate engine you need to melee hit mech. When all engines deactivated mech loses its ability to deflect for 10 seconds, after which all cores are recharged and the cycle continues again. Justice can also recharge one engine when pilot hits someone who not in crit.  3. Some balance changes: Mech hp now 300 Mech melee armor now 50 Mech bullet and laser armor now 30 Mech now don't have speed change when you switch safety mod. Instead mech becomes faster in invisibility and slower when holding the right mouse button to charge a charge attack. Invisibility mode now no longer temporary. You can be invisible as long as you want until you attack/ bump with someone/ take damage or turn it off yourself AoE attack from invisibility is now x2 faster  ## Why It's Good For The Game Lots of changes from recived feedback. Basically the most annoying thing was the block chances. Praying on luck to not die from laser spam turned out to be not a very interesting mechanic. Now mech justice requires more strategic actions to destroy it and the mechanics create more fun for both the mech user and those who fight with it. You need to get close to the mech to hit it and only then will you be able to shoot the laser and user of justice has the ability to recharge his cores by attacking enemies (if you don't attack, then you won't be able to recharge the cores (well, only if your other cores are broken)). This all creates more risk reward elements and not just rng. Accordance with block chance changes i also increased HP and armor of Justice to balance the block changes a bit. AoE attack speed was needed simply because 100/100 cases everyone said that the aoe attack is weak and useless because it is almost very easy to get away from it. Changing the charge attack work mechanic is necessary to improve the maneuverability of the mech. pressing the charge button and then getting messages that you chose the wrong direction is very inconvenient and deprives comfortable gameplay and pleasant use of the mech. ## Changelog 🆑 add: Justice mech: New block and charge system! Build and try it now! qol: Justice mech: charge attack is now much more pleasant and convenient to use! balance: Justice mech: Increased HP and armor. balance: Justice mech: Invisibility is now infinite. balance: Justice mech: stealth aoe attack is now 2x faster. refactor: Justice mech: Some code clenup and mechanic improvements. /🆑 --------- Co-authored-by: tgstation-server-ci[bot] <161980869+tgstation-server-ci[bot]@users.noreply.github.com> Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> |
||
|
|
5a3d6881ec |
Completely strips silicon control options out of open cage mechs (except mech domination). Adds flags to handle granular control restrictions and beacon limitations. (#91118)
## About The Pull Request Open cabin mechs cannot be piloted by silicon pilots. MMI's, uploaded AI's, positronics or AI control beacons. The mechs can still be tracker beaconed. It can also be dominated via the malfunctioning AI power. Adds some flags to help flag which mechs can or cannot be beaconed, or which are silicon compatible. ## Why It's Good For The Game I'm not going to lie. I do feel a bit pressured on this change in particular. This is somewhat meant to be an intended feature. But I think the cats out of the bag on open cabin mechs and the ways to circumvent their downsides. And the more I think about it, the more I come to realize that I frankly haven't had many, if any, good interactions with a posibrain/MMI mech army. So making that more efficient is...a problem. Using a silicon-based pilot can help you evade the potential consequences of being a flesh and bone pilot inside of a steel mesh cabin and being shot repeatedly. So you may as well, in those instances, treat it as a sealed cabin mech. And these mechs are surprisingly pretty strong statistically. Especially the Paddy with its ability to equip actual lethal weaponry. They're cheap, can be mass produced, come out early, and durable. The only limitation is pilots, and if you're printing positronics and get ghosts for those positronics, you can usually just keep producing more. From a purely objective standpoint, there isn't much reason to not push out posi-paddys over any other mech. Rather than settle for a perfect answer, let's at least require some human pilots in these mechs so that their supposed downside is more of an Achilles heel. ## Changelog 🆑 balance: Caged mechs cannot accept silicon pilots. AI uploaded pilots, AI control beacons, MMIs or positronics. Malfunctioning AIs can still dominate these mechs. code: Allows for a higher degree of granularity for what mechs can and cannot accept by including additoinal mecha flags to block beacon type installations, pilot uploads and so on. /🆑 |
||
|
|
5261efb67f |
Re-refactors batons / Refactors attack chain force modifiers (#90809)
## About The Pull Request Melee attack chain now has a list passed along with it, `attack_modifiers`, which you can stick force modifiers to change the resulting attack This is basically a soft implementation of damage packets until a more definitive pr, but one that only applies to item attack chain, and not unarmed attacks. This change was done to facilitate a baton refactor - batons no longer hack together their own attack chain, and are now integrated straight into the real attack chain. This refactor itself was done because batons don't send any attack signals, which has been annoying in the past (for swing combat). ## Changelog 🆑 Melbert refactor: Batons have been refactored again. Baton stuns now properly count as an attack, when before it was a nothing. Report any oddities, particularly in regards to harmbatonning vs normal batonning. refactor: The method of adjusting item damage mid-attack has been refactored - some affected items include the Nullblade and knives. Report any strange happenings with damage numbers. refactor: A few objects have been moved to the new interaction chain - records consoles, mawed crucible, alien weeds and space vines, hedges, restaurant portals, and some mobs - to name a few. fix: Spears only deal bonus damage against secure lockers, not all closet types (including crates) /🆑 |
||
|
|
e99a9e1204 |
Adds the exosuit ablative insulation module. A module that protects a mech from energy attacks and their wires from EMPs. But makes it weaker to ballistics and melee weapons. Adds a special version for nukie mechs. (#90845)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request Adds the Ablative Insulation. A type of mech armor. The armor module protects the mech from energy weapons (such as thermal pistols), and also protects the wires from EMPs (only the wires, not the mech itself). However, it makes it weaker against melee and ballistic weapons. The Dark Gygax and Mauler both obtain a version of this module as part of their default loadout that does not have any disadvantages against melee and ballistic weapons. ## Why It's Good For The Game This is a complimentary PR to this one. https://github.com/tgstation/tgstation/pull/90830 Wire scrambling for mechs is an extremely irritable system, but it does force mech pilots out of the mech to repair some of the effects attached. or at least to a standstill. This can often feel a bit like a knowledge check to resolve for some pilots, since the optimal solutions for this typically involve pulsing the wires in some way, utilizing assemblies like voice analyzers, circuits or signalers. While I would like a more obvious way for pilots to resolve these problems without having to set up signal networks, I do think it should come at some expense in other defenses so that it isn't such a catchall solution compared to the other armor booster modules. There would otherwise be no reason not to use this armor booster if there was no downside, since it completely negates a weakness. Therefore, we're aiming for a slight upside/downside exchange. You get a very good upside, but you now need to compensate for weaker defenses elsewhere (such as risking internal damage effects due to lower armor, see this PR https://github.com/tgstation/tgstation/pull/90844) We've given nuclear operatives an improved version because their mechs are A) expensive as shit, and B) meant to be a huge all-in but have suffered immensely from many years of refactors, rebalances and gear availability changes that definitely have left them underperforming for their promised value. I would much rather nuclear operative mechs feel like they are less beholden to the weaknesses that crew mechs need to contend with if only because they exist for what might be a fraction of the time, if they are even spawned at all due to their price. ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and its effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 add: Adds the Exosuit Ablative Insulation armor booster module. Protects the mech from energy-based attacks and its wires from EMPs (only the wires, not the mech). However, the armor booster makes the mech weaker to ballistic and melee weapons. add: The Dark Gygax and Mauler now come pre-packaged with a special version that has no weakness to ballistic and melee weapons. /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> |
||
|
|
b59fe89edc | Makes dark gygaxes and maulers (and the admin mechs) incapable of being beaconed in any fashion (#90846) | ||
|
|
339616ae78 |
You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
## About The Pull Request People can now pet held mothroaches and pugs if they want to, or use items on them, hopefully without causing many issues. After all, it only took about a couple dozen lines of code to make... ...Oh, did the 527 files changed or the 850~ lines added/removed perhaps catch your eye? Made you wonder if I accidentally pushed the wrong branch? or skewed something up big time? Well, nuh uh. I just happen to be fed up with the melee attack chain still using stringized params instead of an array/list. It was frankly revolting to see how I'd have had to otherwise call `list2params` for what I'm trying to accomplish here, and make this PR another tessera to the immense stupidity of our attack chain procs calling `params2list` over and over and over instead of just using that one call instance from `ClickOn` as an argument. It's 2025, honey, wake up! I also tried to replace some of those single letter vars/args but there are just way too many of them. ## Why It's Good For The Game Improving old code. And I want to be able to pet mobroaches while holding them too. ## Changelog 🆑 qol: You can now interact with held mobs in more ways beside wearing them. /🆑 |
||
|
|
73162138e3 |
Fixes justice mech's dash ability (#89252)
## About The Pull Request Fixes the fact that the justice mech dash could only be performed in eight main directions, which was clearly not intended, since you made a dash at the completely wrong place and not at the target. ## Why It's Good For The Game Fixes ability's weird behavior ## Changelog 🆑 fix: Fixed Justice mech's dash ability /🆑 |
||
|
|
17010c1182 |
Makes the mech repair droid unstackable + mech armor balance (#88789)
## About The Pull Request alternative to #88776 Makes the repair droid unable to be stacked and reduces armor slots to 1 on station mechs except the phazon. ## Why It's Good For The Game You can get to some pretty heavy duty values on certain mechs, especially the durand, with a very intense rate of healing. This makes those items unstackable.  ## Changelog 🆑 balance: Reduces armor slots to 1 for all station built mechs except the phazon. balance: melee mech armor has been increased to 20 from 15. balance: mech bullet and laser armor has both been increased to 15 from 10. balance: You can no longer stack the repair droid on mechs. /🆑 |
||
|
|
7fe8f29fdb |
Corpses with clients in them can no longer perform mech actions (#88959)
## About The Pull Request Turns out most mech actions only cared about the person attempting to use them being inside the mech, without checking for things such as the mob being alive. This fixes that, but required a slight refactoring to the `ui_status` proc of mechs to account for the three fundamentally different types of mobs that can pilot a mech. ## Why It's Good For The Game Fixes #88933 ## Changelog 🆑 fix: Corpses at the pilot seat of mechs can no longer toggle the lights, safeties, cabin sealing, strafing, overclocking, or durand shields, nor can they rename the mech or configure its equipment. /🆑 |
||
|
|
e46db99412 |
airlocks and computers are leanable (#88478)
## About The Pull Request - added a signal - `COMSIG_ATOM_DENSITY_CHANGED`, is sent when set_density is called and doesn't early return - changed all manual assignments of .density to use `set_density` so the signal is sent - airlocks get the leanable component, if the airlock opens while you are leaning on it - you will fall - computers get the leanable component ## Why It's Good For The Game can lean on more stuff, roleplay! Immersion! *John Tider leans on the airlock* ## Changelog 🆑 grungussuss add: computers and airlocks are now leanable refactor: changed how density/collision of some objects is changed, report any oddities! /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> |
||
|
|
fc496d1fcb |
Fixes two mech power issues caused by megacell rework (#88414)
…'s production in line with the megacell rework. ## About The Pull Request The durand's shield and the mech plasma generator never got their values adjusted with the power rework. this led to 15 shots (a mag from a laser smg) instantly draining the cell if it hits the durand's shield, ten times more than normal. Also, the plasma generator's power never got increased proportionally, meaning every second it recharged a tenth of what it was meant to. ## Why It's Good For The Game Fixes yet another thing broken by making the base power unit ten times higher than previously. ## Changelog 🆑 WebcomicArtist fix: Durand shield now uses proper amount of power upon taking damage fix: Mech plasma generator now produces the correct amount of charge, previously bugged to be 10% of intended. /🆑 |
||
|
|
a2d463cdd8 |
Guncode Agony 4.4: Armor as an argument (#88143)
## About The Pull Request Lil cleanup/tweak I couldn't do in the main PR because it conflicted before and i forgot after. Yes this works with overrides that don't have the arg, yes I tested it. ## Why It's Good For The Game Don't run armor code thrice please thank you ## Changelog 🆑 code: Projectile impacts no longer fetch mobs' armor values thrice /🆑 |
||
|
|
9ba27165e5 | fixes parriable projectiles runtimes (#87899) | ||
|
|
58501dce77 |
Reorganizes the sound folder (#86726)
## About The Pull Request <details> - renamed ai folder to announcer -- announcer -- - moved vox_fem to announcer - moved approachingTG to announcer - separated the ambience folder into ambience and instrumental -- ambience -- - created holy folder moved all related sounds there - created engineering folder and moved all related sounds there - created security folder and moved ambidet there - created general folder and moved ambigen there - created icemoon folder and moved all icebox-related ambience there - created medical folder and moved all medbay-related ambi there - created ruin folder and moves all ruins ambi there - created beach folder and moved seag and shore there - created lavaland folder and moved related ambi there - created aurora_caelus folder and placed its ambi there - created misc folder and moved the rest of the files that don't have a specific category into it -- instrumental -- - moved traitor folder here - created lobby_music folder and placed our songs there (title0 not used anywhere? - server-side modification?) -- items -- - moved secdeath to hailer - moved surgery to handling -- effects -- - moved chemistry into effects - moved hallucinations into effects - moved health into effects - moved magic into effects -- vehicles -- - moved mecha into vehicles created mobs folder -- mobs -- - moved creatures folder into mobs - moved voice into mobs renamed creatures to non-humanoids renamed voice to humanoids -- non-humanoids-- created cyborg folder created hiss folder moved harmalarm.ogg to cyborg -- humanoids -- -- misc -- moved ghostwhisper to misc moved insane_low_laugh to misc I give up trying to document this. </details> - [X] ambience - [x] announcer - [x] effects - [X] instrumental - [x] items - [x] machines - [x] misc - [X] mobs - [X] runtime - [X] vehicles - [ ] attributions ## Why It's Good For The Game This folder is so disorganized that it's vomit inducing, will make it easier to find and add new sounds, providng a minor structure to the sound folder. ## Changelog 🆑 grungussuss refactor: the sound folder in the source code has been reorganized, please report any oddities with sounds playing or not playing server: lobby music has been repathed to sound/music/lobby_music /🆑 |
||
|
|
d548e8202f |
Retextured Durand's shield, fixed power drain and UI (#85718)
## About The Pull Request  Closes #84419 Durand drained ten times the default cell capacity per tick due to power changes, and UI for some reason multiplied the cell charge by a thousand, confusing the players. Also minor cleanup. ## Why It's Good For The Game Super dated sprite that doesn't really fit the modern durand ## Changelog 🆑 image: Durand shield got a glowup fix: Durand shield no longer instantly drains its battery fix: Mech UI no longer lies about the amount of power your mech has left /🆑 |
||
|
|
d4fc07fea5 |
Justice invisibility now turns off by the safety (#85272)
## About The Pull Request Small change to make justice invisibility turn off when the safety is turned on. Because you could bypass safety check on it by basically turning off mecha safety and turning it on after it went to invicibility. ## Why It's Good For The Game Now everything works as supposed. ## Changelog 🆑 fix: now Justice invisibility turns off in non combat mode as it supposed to /🆑 |
||
|
|
d220adba3f |
HONK mech now waddles (#85152)
## About The Pull Request How the ffffffuck didn't it waddle befoerhand ## Why It's Good For The Game It's essential. Clowns need waddling to survive ## Changelog 🆑 fix: HONK mech now waddles /🆑 |
||
|
|
2c0f5d181a |
Datumizes pod types (#85033)
## About The Pull Request Changes supply pods to use datums instead of a massive nested list to store data and index defines as styles. Complete feature parity. ## Why It's Good For The Game this is nightmare fuel to work with  and this is a sin against nature and god   ends up as  which is ??? Using a nested list to store pod data is a very bad idea, it has horrible formatting, is unreadable without having index defines open in a second tab and is not extendable. And as you can see above, if someone added another pod type before 14th everything would break because other pod type lists **__only have 8 elements__** instead of 10 like the seethrough one does. ## Changelog 🆑 refactor: Pod code now uses datums instead of being a huge nested list /🆑 |
||
|
|
f31ae8e8f5 |
Justice mech invisibility fix (#84906)
## About The Pull Request Closes: https://github.com/tgstation/tgstation/issues/84894 Fixes a bug if you exited the mech and it was in “stealth mode” at the time. This will make your Mech completely unusable. Originally bug found on Massmeta server. ## Why It's Good For The Game Have you spent a lot of TC on your new car and forgotten where you parked it? - Skill Isuue. ## Changelog 🆑 fix: Justice mech invisibility fix /🆑 |
||
|
|
82f92cb983 |
New Traitor mech: Justice. (#84097)
## About The Pull Request Adds new mech that can be created from emaged fabricator. To craft this mech you need: 1. Emag Fabricator to recive Justice disgine(done this, fabricator will emit a text and sound signal that can reveal you). 2. You need to craft it like any other mech but you also need 8 telecrystals to finish constraction. 3. To board a mech you need syndicate access (traitor can get it by purchasing an agent card). About Mech: Video: https://youtu.be/QwJfO_lbLK0 Text: Health 200 Damage 60 Only melee attacks(can't attach range weapons(can't attach anything in his arms at all)) Block chanse 60 Speed - in safty mode 2.5 in combat mode 4.5 Attack effects: In addition to damage, it has a 50 percent chance of cutting off an arm or leg (does not put you to sleep or give a knockdown effect when hit like regular combat mechs do). If a target in crit or stun makes a finishing attack instead of a regular attack, the mech says an epic phrase and after a second cuts off the target's head by dashing through the target. Special actions(can't be used if mech in safty mode): Invisability - Makes the mech invisible for 20 seconds. If the mech is pushed or collides with someone or if the pilot presses the invisibility button again, the mech will no longer be invisible and will go into a 5 second cooldown (the same will happen after 20 seconds). If you attack in invisibility, then instead of a normal attack the mech will make an AoE 3x3 attack 1 second after pressing (the attack will be accompanied by a sound and visual effect and for a second the mech will not be able to move, which gives enemies time to run away from the attack). Upon completion AoE attack, everyone( except peoples in crit and in stunned condition) in a 3x3 radius will receive 35 damage and a 25 chance of having one of their limbs cut off. Charge Attack - Mech makes a dash towards the cursor at a distance of up to 7 cells, breaking all obstacles in its path. If the obstacle is a living person (and he is not in crit and is not stunned) then he will receive 35 damage and a 25 chance of cutting off a limb. Cooldown 5 Seconds. P.S. Also added emag_act on fabricator so you can put any new secret traitor mechs on it. Also made the sounds of mech melee attacks to vars so that it would be more convenient to change them. Also fix a runtime error where if you set something in the mech's max_equip_by_category to 0, the mech UI panel doesn't load. ## Why It's Good For The Game Adds a traitor mech with fun and interesting mechanics. This is a new mech with new unique abilities that turns the battle with you into a boss fight. ## Changelog 🆑 add: New traitor mech: Justice. Emag fabricator to get it. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
38b7580894 |
durand shield is a tad bit stronger and also doesnt immediately depower the mech when taking stamina damage (#84043)
## About The Pull Request durand shield is a tad bit stronger and also doesnt immediately depower the mech when taking stamina damage ## Why It's Good For The Game i mean this shit almost immediately depowers the mecha if you hit it a few times with a toolbox and thats bad for something that costs shittons of mats making it not as bad should make it not a noob trap also bug bad ## Changelog 🆑 fix: durand shield doesnt immediately depower the mech when taking stamina damage balance: durand shield is a bit stronger /🆑 |
||
|
|
0db2a23faf |
Adds a new power storage type: The Megacell. Drastically reduces power cell consumption/storage. [MDB Ignore] (#84079)
## About The Pull Request As the title says. A standard power cell now only stores 10 KJ and drains power similar to how it did before the refactor to all power appliances. The new standard megacell stock part stores 1 MJ (what cells store right now). APCs and SMESs have had their power cells replaced with these megacell stock parts instead. Megacells can only be used in APCs and SMESs. It shouldn't be possible to use megacells in any typical appliance. This shouldn't change anything about how much 'use' you can get out of a power cell in regular practice. Most should operate the same and you should still get the same amount of shots out of a laser gun, and we can look at expanding what can be switched over to megacells, e.g. if we want mechs to require significantly more power than a typical appliance. Thanks to Meyhazah for the megacell icon sprites. ## Why It's Good For The Game Power cell consumption is way too high ever since the power appliance refactor that converted most things to be in joules. It's a bit ridiculous for most of our machinery to drain the station's power supply this early on. The reason it's like this is because regular appliances (laser guns, borgs, lights) all have a cell type that is identical to the APC/SMES cell type. And it means that if we want to provide an easy way to charge these appliances without making it easy to charge APCs/SMESs through a power bug exploit, we need to introduce a new cell type to differentiate between what supplies power and regular appliances that use power. This is primarily what the megacell stock part does. This moves us back to what it was originally like before the power refactor, where recharging power cells wouldn't drain an exorbitant amount of energy. However, it maintains the goal of the original refactor which was to prevent people from cheesing power generation to produce an infinite amount of power, as the power that APCs and SMESs operate at is drastically different from the power that a regular appliance uses. ## Changelog 🆑 Watermelon, Mayhazah balance: Drastically reduces the power consumption and max charge of power cells balance: Added a new stock part called the battery, used primarily in the construction of APCs and SMESs. add: Suiciding with a cell/battery will shock you and potentially dust you/shock the people around you if the charge is great enough. /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com> |
||
|
|
bc0e2587cd |
Phazons now use ectoplasm cores (#83939)
## About The Pull Request Phazons now use ectoplasm anomaly cores instead of bluespace ones. Text implying otherwise has been changed as well. Allows ectoplasm cores to be bought via the science supply console. ## Why It's Good For The Game Bluespace cores are some of the most overused ones in anomalock technology, and often the most desirable ones. Ectoplasm cores, however, have a single gimmicky and mediocre use. This PR aims to make them more appealing to the crew while reducing machines that rely on bluespace anomalies, so their available number can be more freely tweaked. ## Changelog 🆑 balance: Phazon mechs use ectoplasm cores now balance: You can now acquire ectoplasm cores from the science supply interface /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
c4587bf2af |
Centcom/Nukie mechs receive better innate armor but cannot be upgraded (#83580)
## About The Pull Request QoL for antag mechs: no longer are you expected to sit around station Robotics with a [materials] [inducer] [experiment scanner] to upgrade your antag mechs, they are now appropriately armoured out of the box! Unfortunately, this high end armour cannot accept third party upgrade modules. Also good because of incoming (hopefully) sprite upgrades, maulers should become more attractive to buy. Inspired by maplestation.. NOTE: WEB-EDITED! NOT TESTED! ## Why It's Good For The Game Antags like Centcom or Syndicates don't have no time to sit around in the station robotics bay trying to upgrade their mechs - and it's insane to expect them to do so. This is especially poor for newer players who aren't aware of mech mechanics - such as a basic chainsaw or fireaxe dealing 15 or over damage to their mech when a upgraded Durand isn't affected by this. Makes antag/centcom mechs good 'against most threats' out of the box, so better for newbies and less stressful for experienced players who won't have to literally _do station jobs_ to get a good mech. Did you know: mech mechanics aren't even explained at all in-game? Balance wise, it's "good against everything" and loses the ability to be super-specialized against a single thing, while retaining higher-then-normal grades on everything else. Station mechs still have the ability to specialize in one armor, say, melee, but have much worse grades on bullet/laser/EMP, and often have less health. Previously, a trip to Robotics could get a D-GYGAX up to 85% melee while still retaining 40%/50% of bullet/laser which imo is a biit *too* good. The difference between say - 70% and 85% is fairly significant - 9 damage / 13.5 damage for 70% melee vs 4.5 / 6.7 damage for 85%, so twice as good. NOTE: Some of the mechs receive better bomb/energy armors, which weren't affected by armor upgrades. ## Changelog 🆑 balance: Antag/Centcom mechs now have top notch un-upgradeable armor out of the box. You can't add armor to centcom or nukie mechs anymore, but their default armor rating is a lot higher. /🆑 |
||
|
|
8eb3b51ad9 |
/icons/ folder cleansing crusade part 3 (#83420)
## About The Pull Request In my effort to make the /icons/ folder cleaner and more intuitive instead of having to rely on recalling names of stuff and looking them up in code to find them for poor sods such as myself, plus in spurt of complusion to organize stuff, here goes. I've tracked all changes in commit descriptions. A lot still to be done, but I know these waves go over dozens of files making things slow, so went lighter on it. Destroyed useless impostor files taking up space and cleaned a stray pixel on my way. ## Why It's Good For The Game Cleaner /icons/ file means saner spriters, less time spent. Stray pixels and impostor files (ones which are copies of actually used ones elsewhere) are not good. ## Changelog 🆑 image: Cleaned a single stray pixel in a single frame of a bite telegraphing accidentaly found while re-organizing the files. /🆑 |
||
|
|
726bdf5891 |
Viewing Reticence Stats no longer causes NtOS error (#83343)
## About The Pull Request These changes correctly place Reticence's default power module into a `list()` object, preventing an NtOS error when using the "View Stats" button inside the mech. This resolves a bug in the UI, which had prevented players from viewing their Reticence mech's stats, and modifying its loaded modules therein. Closes #82374 Before:  After:  ## Why It's Good For The Game Syndicate Mimes can now scream (inaudibly) for joy, as they'll be able to inspect and modify their mech as was intended. ## Changelog 🆑 fix: Viewing Reticence's stats no longer causes an NtOS UI error /🆑 |
||
|
|
7abafa7819 |
Fixing cell power usage (Part 5) (#82296)
## About The Pull Request Continuation of #82227 Fixes these issues in https://github.com/tgstation/tgstation/issues/82196 and others that weren't noticed. - Batton emp protection - Cyborg stun arm - Cyborg energy sword - Cyborg hug attack - Mechanical god religious sect charge check - Mecha fixes - Phasing energy drain - Short circuit energy drain - Durand shield damage energy drain - Plasma engine recharge rate - Mechbay recharge power rate - Recharge station charge rate Stuff that was already working & didn't require fixing. - Plasma cutter energy shots - Botany cell charging ## Changelog 🆑 fix: Fixed cell energy usage for a bunch of stuff(Part 5). See PR 82296 for details /🆑 --------- Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com> |
||
|
|
c1f11f26ce |
Converts arbitrary energy units to the joule. Fixes conservation of energy issues relating to charging cells. (#81579)
## About The Pull Request Removes all arbitrary energy and power units in the codebase. Everything is replaced with the joule and watt, with 1 = 1 joule, or 1 watt if you are going to multiply by time. This is a visible change, where all arbitrary energy units you see in the game will get proper prefixed units of energy. With power cells being converted to the joule, charging one joule of a power cell will require one joule of energy. The grid will now store energy, instead of power. When an energy usage is described as using the watt, a power to energy conversion based on the relevant subsystem's timing (usually multiplying by seconds_per_tick or applying power_to_energy()) is needed before adding or removing from the grid. Power usages that are described as the watt is really anything you would scale by time before applying the load. If it's described as a joule, no time conversion is needed. Players will still read the grid as power, having no visible change. Machines that dynamically use power with the use_power() proc will directly drain from the grid (and apc cell if there isn't enough) instead of just tallying it up on the dynamic power usages for the area. This should be more robust at conserving energy as the surplus is updated on the go, preventing charging cells from nothing. APCs no longer consume power for the dynamic power usage channels. APCs will consume power for static power usages. Because static power usages are added up without checking surplus, static power consumption will be applied before any machine processes. This will give a more truthful surplus for dynamic power consumers. APCs will display how much power it is using for charging the cell. APC cell charging applies power in its own channel, which gets added up to the total. This will prevent invisible power usage you see when looking at the power monitoring console. After testing in MetaStation, I found roundstart power consumption to be around 406kW after all APCs get fully charged. During the roundstart APC charge rush, the power consumption can get as high as over 2MW (up to 25kW per roundstart APC charging) as long as there's that much available. Because of the absurd potential power consumption of charging APCs near roundstart, I have changed how APCs decide to charge. APCs will now charge only after all other machines have processed in the machines processing subsystem. This will make sure APC charging won't disrupt machines taking from the grid, and should stop APCs getting their power drained due to others demanding too much power while charging. I have removed the delays for APC charging too, so they start charging immediately whenever there's excess power. It also stops them turning red when a small amount of cell gets drained (airlocks opening and shit during APC charge rush), as they immediately become fully charged (unless too much energy got drained somehow) before changing icon. Engineering SMES now start at 100% charge instead of 75%. I noticed cells were draining earlier than usual after these changes, so I am making them start maxed to try and combat that. These changes will fix all conservation of energy issues relating to charging powercells. ## Why It's Good For The Game Closes #73438 Closes #75789 Closes #80634 Closes #82031 Makes it much easier to interface with the power system in the codebase. It's more intuitive. Removes a bunch of conservation of energy issues, making energy and power much more meaningful. It will help the simulation remain immersive as players won't encounter energy duplication so easily. Arbitrary energy units getting replaced with the joule will also tell people more meaningful information when reading it. APC charging will feel more snappy. ## Changelog 🆑 fix: Fixes conservation of energy issues relating to charging powercells. qol: APCs will display how much power they are using to charge their cell. This is accounted for in the power monitoring console. qol: All arbitrary power cell energy units you see are replaced with prefixed joules. balance: As a consequence of the conservation of energy issues getting fixed, the power consumption for charging cells is now very significant. balance: APCs only use surplus power from the grid after every machine processes when charging, preventing APCs from causing others to discharge while charging. balance: Engineering SMES start at max charge to combat the increased energy loss due to conservation of energy fixes. /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
ef714c1c34 |
Overlay Lighting Color/Intensity Pass (#81425)
## About The Pull Request I was looking at screenshots of the game and realized we had a lot of light sources that were really... flat. Medium intensity, not colored at all, cringe. So I went over all the uses of overlay styled lighting (since I've done matrix lighting already) and gave them more unique features. Colors that match the sprite they're used with, intensity to produce vibes, that sort of thing. It's kinda impossible to go one by one cause there's a LOT. I may have gone a bit overboard with a few, I'm messing around with some things like giving bots colors based off their department, etc. We'll see how this all turns out. Oh also I tweaked how the cone of overlay lighting is drawn. It seemed a bit too present to me so I dropped the alpha down from like 200 to 120 at max (so it's roughly half of the mask's alpha so it's less overwhelming ## Why It's Good For The Game Lighting should be impactful, subtle and colorful <details> <summary> Old Lights </summary>           </details> <details> <summary> New Lights </summary>           </details> ## Changelog 🆑 add: Tweaked the saturation, color and intensity of a bunch of lights /🆑 |
||
|
|
70651816c2 |
Fixes complex lights not handling moving well, renames lighting defines (#81423)
## About The Pull Request [Fixes static lights not moving](https://github.com/tgstation/tgstation/commit/ffef43c05a55dae414ef94558ecf9b9df709ded7) Worked fine when the owner moved, but if the owner was inside something else, it would try and trigger an update on the PARENT's lights, which are obviously not us. [Renames MOVABLE_LIGHT and STATIC_LIGHT to better describe what they do](https://github.com/tgstation/tgstation/commit/de73a63bd4d97783c69c95370726d1c253ffb8fe) People keep trying to change the lighting system of lamps and it makes me mad. I choose OVERLAY_LIGHT and COMPLEX_LIGHT here, I couldn't figure out a better name for turf matrix lighting. Suggestions welcome ## Why It's Good For The Game Closes #80005 Hopefully improves understanding of lighting at a glance ## Changelog 🆑 fix: Fixes fancy lights not updating their source location when picked up and moved /🆑 |
||
|
|
a33b688dd7 |
Adds new Role restricted Traitor item: Reticence Assasination Exosuit (#81212)
## About The Pull Request Adds a decade old item that has been in the code for a LONG LONG TIME but yet still unobtainable without admin intervention as a traitor item as it was (supposedly?) designed as screenshots of the item   and a ameteur demonstration video https://github.com/tgstation/tgstation/assets/118483925/641dfc9c-d548-4e56-a106-6f85a5c12ad4 Note: this is my first ever addition PR in tgstation, please inform me if you believe i have made any issues! ## Why It's Good For The Game makes a decade old mime-themed item, obtainable by mime traitors this item is a **VERY FRAGILE** silent, fast, "assasination" exosuit the suit has barely any armor and exactly 100 durability making it extremely fragile to oncoming attacks, however, it includes a RCD, a silenced pistol and the ability to punch open structures effectively making this a glass cannon personally i think this item should have been obtainable by mime traitors in the first place, but i dont get why it never was, i believe it to be a fairly balanced item for any ordinary traitor to use ((unlike certain items)) so i believe its a good addition ## Changelog 🆑 add: Added Reticence Assasination Exosuit For 20 TC to mime traitors tweak: makes the mime mech have a air tank by default tweak: reticence is faster and slightly stronger /🆑 |
||
|
|
46eb5bb38a |
Fixes open-air mechs (Ripley, Paddy) not pushing projectile damage to the pilot (#80844)
## About The Pull Request Moves parent call for mech bullet_act() to after the enclosed and occupant check, so that the rest of the proc has a chance to send the damage to the pilot ## Why It's Good For The Game Bugfix. ## Changelog 🆑 fix: Ripley MK-Is and Paddys now correctly make incoming projectiles hit the pilot again. /🆑 |
||
|
|
f03084c1ca |
FOV is Dead (Long Live FOV) (#80062)
## About The Pull Request FOV as it is currently implemented is incompatible* with wallening. I'm doin wallening, so we gotta redo things here. The issue is the masking of mobs. Wallening relies on sidemap (layering based off physical position), which only works on things on the same plane (because planes are basically sheets we render down onto) So rather then masking mobs, let's reuse the masking idea from old fov, and use it to cut out a bit of the game render plane, and blur/over-saturate the bit that's masked out. My hope is this makes things visible in light, but not as much in darkness, alongside making more vivid shit more easily seen (just like real life) Here's some videos, what follows after is the commits I care about (since I had to rip a bunch of planes to nothing, so the files changed tab might be a bit of a mess) Oh also I had to remove the darkness pref since the darkness is doing a lot of the heavy lifting now. I'm sorry. Edit: NEW FOV SPRITES! Thanks dongle your aviator glasses will guide us to a better future. https://github.com/tgstation/tgstation/assets/58055496/afa9eeb8-8b7b-4364-b0c0-7ac8070b5609 https://github.com/tgstation/tgstation/assets/58055496/0eff040c-8bf1-47e4-a4f3-dac56fb2ccc8 ## Commits I Care About [Implements something like fov, but without the planes as layers hell](https://github.com/tgstation/tgstation/commit/a604c7b1c8d74cd27af4d806d85892c1f7e35ba8) Rather then masking out mobs standing behind us, we use a combo color matrix and blur filter to make the stuff covered by fov harder to see. We achive this by splitting the game plane into two, masking both by fov (one normally and one inversely), and then applying effects to one of the two. I want to make the fov fullscreens more gradient, but as an effect this is a good start [Removes WALL_PLANE_UPPER by adding a WALL_PLANE overlay to material walls (init cost comes here)](https://github.com/tgstation/tgstation/commit/25489337392f708cb337fbf05a2329eacdfc5346) @Mothblocks see this. comment in commit explains further but uh, we need to draw material walls to the light mask plane so things actually can be seen on them, but we can't do that and also have them be big, so they get an overlay. Sorry, slight init time bump, about 0.5 seconds. I can kill it with wallening. [Moves SEETHROUGH_PLANE above ABOVE_GAME_PLANE](https://github.com/tgstation/tgstation/commit/beec4c00e01d34a04fba7c2bb98a9b70d27ead82) I don't think it actually wants to draw here @Time-Green I think this was you so pinging for opinion [Resprites FOV masks to be clean (and more consistent)](https://github.com/tgstation/tgstation/pull/80062/commits/f02ad13696b3b17658af612c62848b48609d785d) [f02ad13](https://github.com/tgstation/tgstation/pull/80062/commits/f02ad13696b3b17658af612c62848b48609d785d) This is 100% donglesplonge's work, he's spent a week or so going back and forth with me sharpening these to a mirror shine, real chill ## Why It's Good For The Game Walls are closing in ## Changelog 🆑 LemonInTheDark, Donglesplonge image: Redoes fov "mask" sprites. They're clean, have a very pleasant dithering effect, and look real fuckin good! del: Changed FOV, it no longer hides mobs, instead it blurs the hidden area, and makes it a bit darker/oversaturated /🆑 ###### * It's technically possible if we start using render targets to create 2 sets of sources but that's insane and we aren't doing it |
||
|
|
9696dd1a1d |
Targeting Datums Renamed (and global) (#79513)
## About The Pull Request [Implements the backend required to make targeting datums global](https://github.com/tgstation/tgstation/commit/6901ead12e419530b7f646ea21094d4432d7385e) It's inconsistent with the rest of basic ai for these to have a high degree of state, plus like, such a waste yaknow? [Implements GET_TARGETING_STRATEGY](https://github.com/tgstation/tgstation/commit/d79c29134d03424a9f8bacd64c08cb41775fe8c0) Regexes used: new.*(/datum/targetting_datum[^,(]*)\(*\)* -> GET_TARGETING_STRATEGY($1) Renamed all instances of targetting to targeting (also targetting datum -> targeting strategy) I've used GET_TARGETING_STRATEGY at the source where the keys are actually used, rather then in the listing. This works out just fine. ## Why It's Good For The Game Not a misspelled name through the whole codebase, very slightly less memory load for basically no downside (slight cpu cost maybe but not a significant one. --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
9ebf319e6a |
fixes signal circuit not working | refactors name of timer cooldown macros to be inherent, also docs them (#79367)
## About The Pull Request Title ## Why It's Good For The Game Less headache in the future for a macro thats not really obvious in what it does ## Changelog 🆑 fix: signals in circuits now actually function /🆑 |
||
|
|
7e1f5e609e |
Overclock safety setting for Gygax (#79101)
 ## About The Pull Request Since people started using OC on all mechs by attaching a signaller to the wire, I figured that Gygax should have at least something special, except the 2x overclock modifier for dark gygax and the UI button for overclock. Now Gygax type mechs have an option to automatically disable overclock when the mech is overheated. As Gygax was designed to use overclock, other mechs lack this component and there is no wire for this. ## Why It's Good For The Game Special overclock behavior for Gygax. ## Changelog 🆑 add: Gygax type mechs now have an option to disable overclock when overheated. fix: Fixed overclocking having no effect on Ripley. /🆑 |
||
|
|
96d7e9c690 |
Invisibility refactor (#78908)
This adds a tracker for sources of invisibility and a priority system. I needed this for another thing so I'm doing this first since it touches a lot of code. As for the bugs fixed in the changelog, it's only what I noticed while going through everything and there's likely a few more things fixed with this. This should be testmerged for a while, I'll bring this out of draft when it feels safe. 🆑 admin: Invisimin can now be used on mobs that are already invisible, whether through temporary or permanent effects. fix: Monkeyize/Humanize mob transformations no longer permanently reveal invisible mobs if they had effects making them invisible otherwise. fix: Objects with the undertile element that have been made invisible through other means are no longer revealed by being uncovered. /🆑 |
||
|
|
d6f79f4427 |
Refactor gib code to use bitflags and have documentation (#78754)
## About The Pull Request This takes all the gib related procs: - `gib()` - `spawn_gibs()` - `spill_organs()` - `spread_bodyparts()` And adds heavy documentation that communicates what the procs are used for and how the different bitflags affect them. The difference is noticeable: `gib(TRUE, FALSE, FALSE, null)` vs `gib(DROP_ORGANS|DROP_BODYPARTS)` The code is now much more legible which is important considering it's used in a lot of places! Another robust change, is that we had several places in the code where there were double negatives like so: ``` /mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts) if(!no_bodyparts) // DOUBLE NEGATIVES ARE BAD M'KAY?!? // do stuff here ``` This is a mindfuck to untangle. I inverted a lot of these parts so we don't lose our sanity. Last thing that was changed was a big `if()` loop in the `spill_organ()` proc. This was refactored to just be a simple `for` loop with `continue` statements where we needed to skip enabled bitflags. It's now shorter and cleaner than before. The only slight gameplay change this affects is that gibbing a mob now guarantees to drop all items unless the `DROP_ITEMS` bitflag is deliberately omitted. Some places like admin gib self, we don't want this to happen. ## Why It's Good For The Game Gib code is very old. (~15 years) People kept adding more arguments to the procs when it should have been a bitflag initially. By doing it this way, there is more flexibility and readability when it comes to adding new code in the future. ## Changelog 🆑 refactor: Refactor gib code to be more robust. qol: Gibbing a mob will result in all items being dropped instead of getting deleted. There are a few exceptions (like admin gib self) where this will not take place. /🆑 |
||
|
|
2d34c7433a |
New Mech UI and equipment refactor (#77221)
 ## About The Pull Request Made a new UI and refactored some mech code in the process. Fixes #66048 Fixes #77051 Fixes #65958 ??? if it was broken Fixes #73051 - see details below Fixes other undocumented things, see changelog. ## Why It's Good For The Game The UI was too bulky and Mechs were too complex for no reason. Now they follow some general rules shared between other SS13 machinery, and there is less magic happening under the hood. ## Detailed Changes ### New Mech UI, Air Tank and Radio as separate modules Previous UI for comparison: <img alt="9SScrXAOjy" src="https://github.com/tgstation/tgstation/assets/3625094/904e3d07-e7d7-4d3a-a062-93e0e35b4b66"> Previously mechs came with radio pre-installed and air canisters magically pre-filled with air even when you build one in fab. Radio and Air Tanks are now both utility modules that are optional to install. Gas RCS thrusters still require Air Tank module to operate. This made the Mechs more barebones when built, giving you only the basic functionality. <img alt="5SDMlXTJxv" src="https://github.com/tgstation/tgstation/assets/3625094/b9364230-49ac-416b-aa70-e851fbf2050e"> To compensate this change, all mechs got two extra utility module slots. All other modules got new UI. And ore box now shows the list of ores inside. <img alt="SRX5FjvsHA" src="https://github.com/tgstation/tgstation/assets/3625094/cbe2e98d-1cd4-4667-8dae-2f9227b4b265"> ### Mounted Radio Works as a normal radio, but with subspace transmission. Available from the basic mech research node and can be printed in fab. ### Cabin Sealing To compensate for the lack of air tank by default, mechs with enclosed cabin (e.g. all except Ripley) got an ability to toggle cabin exposure to the outside air. Exiting the mech makes cabin air automatically exposed. When you seal the cabin, it traps some of the outside air inside the cabin and you can breathe with this air to perform a short space trips. But the oxygen will run out quickly and CO2 will build up. Sealing the cabin in space will make the cabin filled with vacuum, and it will stay there until you return to air environment and unseal the cabin, letting the breathable air to enter. There are temperature and pressure sensors that turn yellow/red when the corresponding warning thresholds are reached. You could also use personal internals in combination with cabin sealing for long space travels, so Air Tank is completely optional now and mostly needed when you need RCS thruster. ### RCS thrusters They are now available earlier in tech tree and consume reasonable amount of air (5 times more than human jetpacks), and they don't work without Mounted Air Tank, unless it's an Ion thruster variant. ### Mounted Air Tank Available from the basic mech research node and can be printed in fab. Built model comes empty, and syndicate mechs come with one full of oxygen. <img alt="GrFDrH5Hwe" src="https://github.com/tgstation/tgstation/assets/3625094/b677b705-bda0-4c8c-96c7-d32bf7bf9f28"> Can be switched to pressurize or not pressurize the cabin. Releases gas only when the cabin is sealed shut. Starts releasing automatically, but can be toggled to not release if you want to use it just as a portable canister. Cabin pressure can now be configured in the module UI instead of Maintenance UI. Can be attached to a pipe network when the mech is parked above a connection port. Comes with a pump that works similarly to the portable pump. It lets you vent the air tank contents outside, or suck air from the room to fill the air tank. Intended to provide an ability to fill the air tank without the need to bother with pipes. Also has gas sensors that display gas mix data of the tank and the cabin (when sealed). ### Stock part changes All mechs now require a servo motor and they reduce mech movement power consumption instead of scanning module. Scanning modules are optional for mech operation (still required to build) and the lack of one disables the following UI elements: - Display of mech integrity (you can still see the alerts or examine the mech to get rough idea) - Display of mech status on internal damage (and you can't repair what you can't diagnose) The rating of scanning module doesn't have any effect as of now. Cargo mech comes without it roundstart. <img alt="2vDtt99oqb" src="https://github.com/tgstation/tgstation/assets/3625094/147144ca-824e-4501-acf5-6ee104f309e7"> Capacitors now also reduce light power usage and raise the overclocking temperature thresholds (see below). ### Maintenance Maintenance UI removed, and its logic migrated to other places. Access modification now managed inside the mech, and anyone who can control the mech, can adjust the access in the same way as they can set DNA key. To open the maintenance panel you just need a screwdriver. It is instant when the mech is empty and it has a 5 second delay when there is an occupant to avoid in-combat hacking and part removal. It will alert the occupant that someone is trying to tinker with their mech.  Once the panel is open, you can see the part ratings:  With open panel you can hack the mech wires (roboticists can now see them): <img alt="mj205G2qDa" src="https://github.com/tgstation/tgstation/assets/3625094/44cea0d1-44b4-4b50-b1d3-a97c0056bab3"> There are wires for: - Enabling/Disabling ID and DNA locks - Toggling mech lights - Toggling mech circuits malfunction (battery drain, sparks) - Toggling mech equipment malfunction (to repair after EMP or cause EMP-like effect, disarming mech) - 3 dud wires that do nothing The hacker may be shocked if the mech power cell allows. When the panel is open and the user has access to the mech, they can remove parts with a crowbar: <img alt="jR40gyTWtJ" src="https://github.com/tgstation/tgstation/assets/3625094/b573f5b9-b8ea-412e-b3e0-c872e01e0c23"> Hitting the mech with an ID from outside now toggles the ID Lock on/off if the ID has sufficient access. ### Power consumption and overclocking Rebalanced mech power consumption. T4 parts were not working in Syndicate Mechs, as their effect was not calculated until you manipulate parts manually. Constructed mechs with t1 parts even had their energy drain reduced with upgrade to t1. Now all mechs apply their base step power usage correctly don't ignore the stock parts. Servo tier now reduces base power consumption by 0% at t1, 50% at t2, 33% at t3 and 25% at t4 Capacitor tier now reduces base power consumption of mele attacks, phasing and light by the same amounts. Gygax leg actuators overload replaced with mech overclocking. Any mech can be overclocked by hacking wires, but only Gygax has a button for toggling it from the Cabin. Now there is an overclock coefficient. 1.5 for Gygax and other mechs, 2 for Dark Gygax. When overclocked, mechs moves N times faster, but consumes N times more power.  While overclocked, mech heats up every second, regardless of movement, and starts receiving internal and integrity damage after a certain temperature threshold. The chance is 0% at the threshold, and 100% at thresholds * 2. The roll happens every tick. Capacitor upgrades this threshold, letting you overclock safely for longer periods.  When you stop overclock, the temperature goes back down. ### Other changes and fixes Concealed weapon bay now doesn't show up when you examine the mech, so it's actually concealed now. New radio module can properly change its frequency, as it didn't work for previous radio. Launcher type weapons were ignoring cooldowns and power usage, so you could spam explosive banana peals, while they should have a 2 second cooldown: <img alt="q5GjUsHwGr" src="https://github.com/tgstation/tgstation/assets/3625094/d102725d-e9e1-4588-9d6c-b9e38b7a6535"> Now this is fixed and all launcher type weapons properly use power and have their cooldowns working. And now they have the kickback effect working (when it pushes you in the opposite direction in zero gravity on throw). Thermoregulator now heats/cools considering heat capacity instead of adding/reducing flat 10 degrees. So you can heat up cabin air quicker if the pressure is low. There were some other sloppy mistakes in mech code, like some functions returning too early, blocking other functionality unintentionally. Fixed these and made some other minor changes and improvements. ## Changelog 🆑 refactor: Refactored Mech UI refactor: Refactored mech radio into a utility module, adding extra slot to all mechs refactor: Refactored mech air tank into a utility module with an air pump, adding extra slot to all mechs refactor: Refactored mech cabin air - there is now a button to seal or unseal cabin to make it airtight or exchanging gases with the environment refactor: Removed mech maintenance UI Access is set in mech UI, and parts are ejected with a crowbar add: Mech now has wires and can be hacked qol: Roboticists now can see MOD suit and mech wires add: Mechs now require servo motor stock part and it affects movement power usage instead of scanning module add: Scanning module absence doesnt block mech movement and hides some UI data instead. Big Bess starts without one. qol: Hitting mech with ID card now toggles ID lock on/off if the card has required access fix: Fixed concealed weapon bay not being concealed on mech examine fix: Fixed mech radio not changing frequency fix: Fixed mech launcher type weapons ignoring specified cooldown fix: Fixed mech launcher type weapons not using specified power amount fix: Fixed mech temperature regulator ignoring gas heat capacity fix: Fixed mech stopping processing other things while not heating internal air fix: Fixed mech being able to leave transit tube in transit fix: Fixed mech internal damage flags working incorrectly fix: Fixed Gygax leg overloading being useless fix: Fixed mechs ignoring their stock parts on creation. Syndicate mechs now stronger against lasers and consume less energy on move. Upgrading from tier 1 to tier 2 doesn't make mech consume MORE energy than before the upgrade. balance: Rebalanced mech energy drain with part upgrades. Base energy drain reduced by 50%, 33%, 25% with upgrades and applies to movement (Servo rating), phasing, punching, light (Capacitor rating). balance: Hydraulic clamp now can force open airlocks balance: Made mech RCS pack consume reasonable amount of gas code: Fixed some other minor bugs and made some minor changes in the mech code /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Sealed101 <cool.bullseye@yandex.ru> Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
a18872b6ee |
Restores some mechs being able to pivot step (move and turn in the same keypress) and diagonal movement (#77345)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request Most mechs couldn't move diagonally. This restores that for all but the Clarke (which is a vehicle on treads) The Clarke and Odysseus once again have pivot step, lost during the refactor for unknown reasons. It was literally just right there, it was an easy fix. Clarkes once again move like a tank! ## Why It's Good For The Game So the way that mech movement works, by blocking diagonal movement, what instead happens is that the mech eats the move command and goes on movement cooldown. By pressing two buttons rather than one, you come to a full stop and no longer can move. I cannot think of a more hostile player-facing feature than this. It utterly gutted the usability of mechs for no real apparent benefit. As such, I'm just removing it on all but the most relevant mech, the Clarke. This should make it much more approachable to pilot mechs and not feel like the game is malfunctioning half the time. Clarkes and Odysseus mechs had a really cool feature. They turned and moved in the same button press. This made them very nimble mechs and fun to utilize. They lost this feature in the refactor for, once again, not much apparent reason since this was literally a line change to restore. ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 fix: Restores a lost feature, Clarkes and Odysseus mechs once again can pivot on a dime and step in the same button press. qol: Mechs universally have diagonal movement as to avoid unresponsive movement, as block diagonal movement was having unintended side effects and was actually intended for pivot step mechs. /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> |
||
|
|
f44adfde1e |
Refactors vendor tipping and adds 2 new malf modules: Remote vendor tipping, and the ability to roll around and crush anything in your path. (#76635)
## About The Pull Request Title. Vendor tipping code is now on /atom/movable, and any movable can fall over like a vendor does. Things like crits have been moved to type-specific availability tables, their effects are now held in their own proc, are now random per crushed item, have probability weights, etc. In the process of making this PR I also had to fix another issue, where a bunch of take_damage() overrides had incorrect args, so that explains the take_damage changes I made. Tipping now also attacks any atoms on the target, given they use integrity. Adds 2 new malf modules. 1. REMOTE VENDOR TIPPING: A mid-cost and mid-supply module allows malf AIs to remotely tip a vendor in any of the 8 directions. After 0.5 seconds of delay and a visual indicator (along with other warnings), the vendor falls over. 1.1. In the process of making this I had to expand a arrow sprite to have orthogonal directions, which is why you may see the testing dmi being changed. 2. CORE ROLLING: A mid-cost but low-supply ability that allows the AI to roll around and crush anything it falls on, including mobs. This has a 5% chance to have a critical hit so it isnt THAT terrible - plus it's guaranteed to never stunlock. It's real utility lies in the fact the AI now has limited movement without borgs. Also, the psychological factor. As a bonus, vendor tipping now uses animate and transforms instead of replacing matrices. ## Why It's Good For The Game 1. Generifying vendor tipping code is just good, period. It's a very wacky and silly little piece of code that really doesn't need to be isolated to vendors exclusively. ANY big and heavy object can fall over and do a ton of damage. 1.1. Also, adding weights to critical hits is really good, because it lets things like the headgib finally be a lot less terrifying, as they're a lot less likely to happen. 2. Remote vendor tipping is a bit of a goofy ability that isn't really THAT practical but has a chance of catching someone unaware and doing some serious damage to that person alone. 2.1. Atop of this, vendor tipping isn't that loud of an action as say, blowing things up, or doing a plasma flood. Even overrides aren't this silent or a non-giveaway. A vendor falling on someone, though, is a mundane thing that happens a lot. This is a decent way to assassinate people before going loud (or at least, damage people) that isn't offered yet. 4. 3.1. For real though, AIs rolling around is just fucking hilarious. The ability to move isn't offered right now (which isn't that much of a bad things), but with sufficiently limited charges (or limits to how many times you can buy the ability), this can be a funny little t hing that lets the AI potentially hide somewhere on the sat (or just relatively close to the sat, such as engineering [it can't go through the teleporter with this but it can go through transit tubes]) without the need for borgs. 3.2. Also, it lets the AI sacrifically execute people by blowing up their brains. |
||
|
|
a373b4cb08 |
Icon folder cleaning wave one (#76703)
## About The Pull Request Due to a mental breakdown caused by unfathomable abomination that is icons folder, I swore to myself to one day clean it. Today is kind of that day. Been at it for around 6, you gotta understand I need a rest. I tracked most changes in descriptions of commits if you are looking for details. ## Why It's Good For The Game Saner spriters make better sprites. And also, just helps keep track of things. ## Changelog 🆑 image: added sprites for different variants of scrolls. image: modified couple posters with ghost pixels. /🆑 --------- Co-authored-by: OrionTheFox <76465278+OrionTheFox@users.noreply.github.com> |
||
|
|
b5ebf5c942 |
Adds better parts for syndie mechs, some tooltips to mech maintenance mode and some little changes. (#74466)
## About The Pull Request Kinda resusticates #72442 cause the whole conflict was stupid. Adds t4 parts for dark gygax, mauler and reticence (for the sake of shitspawn) and t3 for dark honker. Formulas of better parts to understand the difference: https://github.com/tgstation/tgstation/blob/aff9cf1b434c7a95d156ea20108d8b2bc015083d/code/modules/vehicles/mecha/_mecha.dm#L427-L439 Made examine text into span_notices so it's not just plane text. Also added tooltips for maintenance. Screens to compare:   Dark gygax will now spawn without access adding regime. Tool interactions with mech will now have sounds. (wrench and crowbar) Removing parts from mech will now put them in your hands, and not just under the mech. When inserting parts in mech they won't make some noisy noise, already forgot which noise it was, but i changed it for some reason, so meh. Also fixed that you can remove capacitors and scanning mods from mech without proper maintenance as it works with cell. Closes https://github.com/tgstation/tgstation/issues/71577 ## Why It's Good For The Game Syndie mechs are still week. Didn't see them in half a year. ## Changelog 🆑 qol: changed mech description to span_notices and just slightly comfier to use. qol: added tooltips for mech's maintenance mode. balance: added t4 parts for mauler and dark gygax. And t3 parts for dark honker. fix: fixed that you can remove capacitor and scanmod from mech without proper maintenance steps. Now you can't /🆑 |