mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 16:18:01 +01:00
mayfools
95
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
a33fd49968 |
Upstream 12 15 25 unique reskins fixes (#5019)
This branch needs help, tons of datums to make for the customizable items. --------- Co-authored-by: Alexis <catmc8565@gmail.com> |
||
|
|
1a21687143 |
Revert "Refactors unique_reskin, deletes retool kit (#93775)"
This reverts commit
|
||
|
|
2ab2be0f37 | Guards against qdeletion in afterattack (#94211) | ||
|
|
0b0c5ea91e |
Unit test material checks are now performed on all crafting recipes by default. All stack recipes now transfer mats to the results (#92620)
## About The Pull Request Extends the part of the crafting unit test that ensures consistency between the total mats of the components of a recipe (or rather, the result of said recipe) and a generic instance of the same type as its result, previously only implemented on food recipes. ## Why It's Good For The Game This ensures a degree of consistency with the material composition of various objects in the game. I couldn't do it in the original PR as that one was too big already and it took months to get it merged, and have the relative bugs fixed. Currently a WIP as I slowly deal with the unit test reports. ## Changelog 🆑 refactor: Follow-up to the crafting/material refactor from months ago. All objects crafted with stacks now inherit their mat composition (not necessarily the effects and color) by default, while previously only a few things like chair, sinks and toilets did. Report any object looking or behaving weirdly as a result. fix: The material composition of ammo boxes is no longer a 1/10 of what it's supposed to be. It was a shitty hack to make it harder to recycle empty ammo boxes. Instead, they lose materials as they're emptied now. /🆑 |
||
|
|
6ebfbccebb |
Refactors unique_reskin, deletes retool kit (#93775)
## About The Pull Request Closes #93635 `unique_reskin` is no longer a list on `/item`, now `/datum/atom_skin` The actual reskinning behavior has been moved out to `/datum/component/reskinable_item` PKC reskinning is now handled via alt-click reskin, rather than via the retooling kit. The retooling kit has been removed. There's no limit on how many times you can reskin your PKC (though perhaps we limit it to one reskin and keep the retooling kit as a way to allow a miner to reskin it a second time?) The Ashen Skull unique reskin is still a trophy, and instead unlocks its unique reskin option in the alt-click radial. ## Why It's Good For The Game I'm unsure why the retooling kit exists on its own, when it's relatively cheap and just performs the behavior of alt-click reskinning. So to keep it consistent with all other forms of reskinning I've just made it baseline. To accomplish that I refactored reskinning. The new form of reskinning allows for greater potential in adding reskins, allowing far more than just an icon state change. Also we can put it on turfs and mobs and structures now which is cool I guess There's also the added benefit of being able to see an item's reskins without needing to instantiate it, which the loadout menu uses to great effect. ## Changelog 🆑 Melbert refactor: Refactored item reskinning (the alt-click way), report any oddities with that del: Deleted the crusher retool kit, now you can just reskin your crusher with alt-click. The Skull skin is still locked behind having the Ashen Skull trophy applied. fix: Stunswords no longer have an incorrect lore blurb fix: Fixed loadout item reskinning's UI /🆑 |
||
|
|
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! /🆑 |
||
|
|
5aae6ccb2f |
Adds lore text to stun batons and contractor batons (#93622)
## About The Pull Request Adds lore to the stun baton and the contractor baton. ## Why It's Good For The Game It's fun to include world snippets in the various notable items found in the game world. The lore element basically exists to enrich the world, after all. ## Changelog 🆑 qol: Adds lore text to the stun baton and contractor baton, detailing a bit about their dynamic as tools of Nanotrasen and Cybersun Industries respectively. Examine them closely to learn more. /🆑 |
||
|
|
e807d2df94 |
fixes master (#93568)
## About The Pull Request Removes a var that's no longer defined in the code. ## Why It's Good For The Game Makes the code compile again. ## Changelog N/A |
||
|
|
2815f835fa | Removes sec baton scaling armor pen, tweaks down tele baton armor pen (maybe just a test pr we'll see) (#93374) | ||
|
|
a2c7c8e57b |
Heretic Antagonist Full Overhaul. (#92119)
## About The Pull Request Heretic has received a complete overhaul. This PR touches nearly every aspect of the antagonist. For readability's sake, not every change is going to be listed in this pull request. For the full list of changes please refer to the design doc: https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g. Code by Me, @Xander3359 and @Arturlang TGUI by @Arturlang Sprites by OrcaCora and GregorDM Writing bits by @necromanceranne ### Core changes - Cross-pathing has been removed. Main knowledge spells are now exclusive to their path (for the most part). - For every main knowledge unlocked (save for the robes and the blade upgrade), Heretics can choose one option from a draft of 3 random side knowledges (this is a free point). - Heretics can now purchase side knowledges from a new tab, the "Knowledge Shop". Side-knowledges have been divided by tier (Stealth, Defense, Summons, Combat and Main). Tiers are unlocked as you progress toward your main path. - Heretics now gain the grasp and mark upgrade immediately, but their main knowledge choices cost twice as much (except for the first spell, the robes and the blade upgrade). - Path specific robes have been introduced! They come with their own set of quirks. - Each Path has received a passive ability. This passive is upgraded when you first create your robes, and again when you complete the Ritual of Knowledge. - Paths have been rebalanced as a result of the removal of cross-path progression. Cosmic and Moon paths have received soft reworks. - Upon unlocking the path 2nd level or reaching a total of 8 points worth of knowledge, Heretics will lose the ability to blade break (and the limit on blades all together). - Ascension now automatically calls the shuttle with no possibility of a recall. - Late join Heretic has been removed. ### New UI <img width="750" height="635" alt="moon path ui" src="https://github.com/user-attachments/assets/184ef783-5c9c-48a1-a2f7-4807ca93e990" /> ### Knowledge shop <img width="787" height="669" alt="Knowledge shop" src="https://github.com/user-attachments/assets/3dc89b84-8c70-4d47-b612-54396e3ea6e7" /> ### Quality of life //General balance changes - Heretics will now gain X-ray vision for a few seconds when nearby an eldritch essence (this effect has a cooldown). - Ritual of knowledge now requires 1 uncommon item instead of 2. You may now use a stunprod instead of a baton to complete the ritual. Beartraps have been removed from the list of possible reagents. - The maximum number of possible sacrifices required to ascend has been reduced from 6 to 5 while the minimum has been upped to 4. - Codex Cicatrix no longer requires a special pen to be made. ### Passive abilities - Heretics now start with a passive ability. You can find what it does on the path info tab after a path has been selected, and what they gain when upgraded. - Crafting your first set of Eldritch robes will bump your passive to level 2. - Unlocking the 2nd level will subsequently unlock your "Ritual Of Knowledge" - Completing the ritual of knowledge or ascending will net you the final level. ### Path Specific Robes - Armorer's Ritual is no longer a side knowledge. Each path will have their own unique version of the ritual. This is placed after the 2nd spell in the tree. - Robes can no longer be destroyed by fire and acid, grant t4 flash protection (Moth Heretics stay winning) and protection against basic syringes, to bring them on par with other antagonist's armor sets. - The recipe to craft the robes is now a set of armor/vest, a mask (any mask will do now, not just gas masks), plus the unique reagent required for the blades (Plasma for Cosmic, Trash For Rust, match for Ash and so on) - Wearing the robes as a non-heretic may yield some unfortunate side-effects. ### Moon Path Rework Moon path rework. Moon Heretics gain immunity to brain traumas and slowly regenerate brain health. Equipping the moon amulette channels its effects through the moon blade; making it unblockable and cause sanity damage instead of brute. Ring leader's Rise now summons an army of harmless clones that explode when attacked; the explosion briefly stuns non-heretics and cause sanity and brain damage to them. Moon blade can also now be used when pacified and Moon spells are no longer blocked by regular anti magic, only mind magic protection. **Cosmic Path Rework** Cosmic path has received the biggest batch of changes alongside Moon. The path has been dead last in ascension and pickrate (less than 5%) for almost 2 years. It did gain some popularity over the last few months, reaching the highest ascension rate in the game (12%) while mantaining a relatively low pickrate. Cosmic sits in a weird spot, where pretty much every knowledge surrounding the path is either mediocre or, in the case of the ascension, dysfunctional. Yet it has maintained a smidge of relevancy due to how quickly Cosmic heretics can capture and sacrifice targets thanks to Star Touch. As a result, the best course of action would be to rebalance the entirety of the kit; granting the heretic more tools to manipulate space and dictate the flow of a fight, while lessening their ability to end a confrontation by instantly sleeping their opponents. lastly The Star Gazer is now ghost controlled ; And they shoot lazers! <img width="636" height="451" alt="gazer gag 3" src="https://github.com/user-attachments/assets/601d6881-c042-4e42-8ce6-ac90cd27848b" /> ## Why It's Good For The Game ### Ok...but why do we want this? Again, if you want my full reasoning, please check my doc https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g. To keep it short and concise; Heretic is too complex and unintuitive for its own good. Too impenetrable for new players and too abusable for experienced players. This can be chalked up to a lot of poor design decisions. But ultimately, what I believe being the biggest contributor to the current status of Heretic is the ability to move into different paths, also known as "Cross-Pathing". ### Cross Pathing my beloathed. Cross-pathing, while cool in theory, overcomplicates the antagonist and overloads them with power. Players dealing with the heretic are incapable of working out what a given heretic can do. This also leads to late game heretics having 3 rows Worth of action buttons and virtually no weakness. Over the last year, I've often received the understandable but also kind of unfair accusations of making Heretic too powerful without a clear aim or purpose. My goal with the paths I've reworked over the last year (Rust,Void and Blade) wasn't necessarily to just make them stronger (although that was also part of the goal, as they were paths that were underperforming), but for them to have more interactions with the sandbox and to better live up to the fantasy presented to the player. If an harbringer of frost gets countered by a cup of coffee, we probably messed something up. Unfortunately, the current incarnation of Heretic doesn't really allow for surgical balance changes to specific paths. Every time a knowledge gets buffed, we make every path that can easily tap onto that knowledge stronger by default. It doesn't take a genius to understand why this system is ultimately unsustainable. ### Blade Breaking I feel that after a heretic has reached the near peak of their power, they no longer need the ability to instantly escape any encounter. Check my doc for my full reasoning. ## Less versatile, more specialized paths. By removing cross-pathing, we remove a huge maintainability burden from the antagonist. Paths can now be designed around clearer strengths and weaknesses. They become easier to balance and less of an headache to understand for everyone. It also means we can give paths some needed quality of life quirks without having to worry how such a change might have a knock-on effect for other paths. Ash heretics can finally let loose without dying by their own flames. Cosmic Heretic can go to space without having to carry a modsuit. Moon Heretic can use their abilities without fear of one random trauma ruining their day, and so on. ### What a horrible night to have a curse...., wait how do I curse people again? As of right now the heretic tree has quite a hefty amount of trinkets that pretty much never see use. Partly because the tree itself is a nightmare to navigate. And partly because why would anyone set up an elaborate plan or scheme when they can unleash 2 rows of spell in the span of bunch of seconds. Heretics mostly gravitate towards powers that push them towards greater, more potent combat strength. If it doesn't contribute to killing people quicker, it isn't worth doing for most. And given the opportunity cost associated for taking those powers, they will remain that way so long as there are better choices to be poached. The new draft system encourages Heretics to play more with the tools at their disposal. If you want to go for a specific combo from the side path options, you may now do so by tapping into the knowledge shop. Yes, the shop does include a few knowledges from the other paths. But these are limited to 1 per path, are very expensive and can only be unlocked very late into the shift. ## Drip Of the Mansus The iconic heretic robe is actually sequestered to a side path that is most easily access by only two paths at a time. Since heretic paths are being made to be much more specialized, the most obvious way in which this can be showcased is through an easily identifiable outfit. By using the robes, we can both telegraph WHAT heretic you are looking at, and just how much power they've accumulated and when it is reasonable to take the kid gloves off and treat them as a genuine threat. If a heretic is in their robes, that heretic is now a significantly more prominent danger to the station. It also serves as a useful means for gating some of the more powerful effects of a heretic's path behind the robes, AND enable options for disarming them of that power should they be captured without making it something endemic to their mob. A major problem with heretics is a lack of certainty as to how powerful they have become. A heretics robes is one of the milestones to help players dealing with heretics identify that. ### Will this be 100% fair and balanced? This is a massive overhaul to a pretty complex and bloated antagonist. I've done my best to show the changes to several maintainers and other members of the community for their feedback. But at some point we'll have to see how this behave in the environment to get a feel if something is over or undertuned. (that's my way of saying, yes this is likely gonna require a testmerge or two). What I will say is that I'm not trying to change the core identity of Heretic. Heretics should have the upperhand in single encounters early on, be able to joust a small group of players after they unlock their final spell, and end the round when they ascend. They're a progression antagonist. They should retain their payoff as well as pose a danger as they grow stronger. But if more players feel like they are more reliably able to play the antagonist in more varied and interesting ways, rather than the antagonist largely existing as a measuring stick for 'robustness' due to its elitist design philosophy, then the rework has been a success. There should be something for everyone in the antagonist, as is true for all of our antagonist roles. |
||
|
|
ce433c9698 |
Adds Stunsword (#93270)
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> |
||
|
|
b23b4c0fb0 |
Buffs the amount EMPs drain cells to be worthwhile (#92902)
Simply put, EMPs now drain cells at hopefully decent rates. Starting at basic high capacity, a heavy emp (aka a direct ion rifle hit) drains 1/3 of the battery, with each successive tier of cell taking an extra heavy emp to drain it. At the end, the data looks like this: - Basic Cell: Instantly drained. Unchanged. - High Capacity: 3 hits - Super Capacity: 4 Hits - Hyper Capacity: 6 Hits - Bluespace: 8 hits. Also potatoes take halfed emp damage, because theres not really much silicon to emp, given its a potato. ## Why It's Good For The Game As of now, this is the stats to drain a cell with EMPs. (Do note some stuff just doesnt drain at all and this is for those that do just run the proc to the cell itself) - Basic Cell: Instantly drained. - High Capacity: 10 hits - Super Capacity: 20 Hits - Hyper Capacity: 30 Hits - Bluespace: 40 hits. The EMP gun on the station can shoot 10 bolts before needing a recharge. It is *physically impossible* to use the ion to depower something with an upgraded cell without needing to reload, and even landing 10 direct hits with the ion to bring down a stock cell is frankly a big ask. Additionally, using emps as crew or sec runs the risk of you getting caught in the splash damage and now your modsuit/pda/whatever doesnt work. Hopefully, this will make the EMP gun actually useful for its intended purpose of countering silicons/mechs. ## Changelog 🆑 WebcomicArtist balance: EMPs now drain cells better, starting at 3 emps to drain a basic cell, up to 8 for bluespace. /🆑 --------- Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com> |
||
|
|
d838bff525 |
Adds some throwing datum nullchecks (#91720)
## About The Pull Request A few places seem to call `hitby` or `throw_impact` without a throwing datum to mimic the effect of colliding with something, which is cringe, but I guess we should support it. So we need to nullcheck for `get_thrower`, else it runtimes and cancels the whole proc. ## Changelog 🆑 Melbert fix: Glass shards from colliding with vendors or glass table hurt you again. /🆑 |
||
|
|
57624ca1e2 |
Rebalances wound determination values, wounding escalation and wound armor to hopefully be less explosive (#91099)
## About The Pull Request This is a big one so please bear with me, wounds are complicated ### Max Potential Wound Rolls We've decreased the max contributed damage to wound rolls from 35 to 25. This results, after the exponent, a max possible wound roll of 1 to 91 before any modifiers (assuming the attack, after armor, is 25 or above). The minimum value to wound is still 5. ### Wound Escalation Penalties Most wounds were contributing significant numbers per wound type to the potential for a new wound to occur. Getting wounded once meant you were getting wound a lot, but actually getting past that first wounding may be the tricky part. We have significantly reigned in the wound penalty that having a wound contributes, and instead utilize the series wound penalty to allow same type wounds to escalate themselves faster as a priority. Having wounds still makes you more wound vulnerable, just not to such an extreme degree. The priority here for what wounds matter most for contributing to overall wounding vulnerability is ``Infected BURNS > BURNS > SLASH|PIERCE > BLUNT.`` ### Wound Armor Wound armor, unlike all other kinds of armor, was used as a additive value to the wound roll modifiers rather than a multiplicative value. We have reworked how wound armor is determined by changing how wound modifiers are calculated. Firstly, we're passing our entire injury roll into the ``check_woundings_mod()`` proc, as we're not treating this as a proc that just adds values anymore. Secondly, bare wound bonus only applies if there is no potential wound protection from any source, as expected. But it comes last in the calculations. Thirdly, wound protection is applied to the injury roll last, after wound bonuses from the attack, wound bonuses from other wounds and wound bonuses from a disabled limb are applied. This does not include serial wound bonuses, which are determined outside of this proc. Wound protection comes from two sources. Clothing and limb wound resistance. Your chest and head have an amount of wound resistance so long as they are not mangled in any fashion. Being mangled means having either a hairline fracture or a weeping avulsion wound. Wound protection reduces the final injury roll by a percentage. Say our roll is 50, and we have effectively 50% wound protection. The final roll would be 25. ### ~~Wound Armor on Clothing~~ Reverted ~~Most clothing have had their wound armor values changed. As a loose rule, I used the highest of melee or bomb armor, except where that value was 100, in which case I used the lowest instead. I'm basing this decision on how embeds are calculated, which is attack type agnostic.~~ ~~Some armor have inconsistent values because they are alternative armors to an existing armor type or are hyperspecialized armor. Ablative, bulletproof and security vests all share a value of 35, despite the former two not having decent melee or bomb armor.~~ ~~Some clothing missing wound armor that should have had them now have wound armor.~~ ~~This may need a bit of scrutiny in case one or two seem weirdly high. Some have maybe become too low. Its a bit hard to say.~~ ### The ``bare_wound_bonus`` variable I changed it to ``exposed_wound_bonus`` to better represent when it applies. You can be naked and still not be affected by this bonus if the limb has wound resistance. ## Why It's Good For The Game I'm not promising anything with this PR, but this is an attempt to sanity check the values on wounds so that we're not seeing what the data that determined the removal of beheading presented. An extreme over-representation of tier 3 wounds. ~~And, from that, maybe I can argue for beheadings coming back. That's my goal. I think beheadings happened so much because the numbers were in need of work.~~ Well okay I just wanna make wounds a bit more workable actually more than I want beheadings. Why is it that tier 3 wounds were so over-represented? Because wounds will often force more severe wounds of other types by merit of any wounds existing at all on a limb. Having **_a_** wound makes you more wound prone for any kind of wound, and not just making you more likely to suffer a more severe type of the same wound. The threshold mechanic was intended to simulate making a wound worse, but oddly just made a limb broadly more prone to getting worse from any kind of attack to such a degree that future wound rolls of different types were often going to start at the threshold necessary to be a tier 3 wound. Dismemberment, mind you, requires you to suffer a flesh wound while you have a bone wound of tier 2 or higher (with tier 3 giving a bonus to this). You can do this readily via just a sharp weapon, because having a mangled limb causes the wound to turn into a bone wound. Technically, this is meant to be less likely as the effective damage for this wound is halved. But the wound bonus from having a flesh wound was almost always significant enough to kick your new bone wound up to a tier 3. In other words; its not surprising that you saw so many beheadings, because the system wanted to behead you as fast as it possibly can thanks to all these escalating values. Wound armor was only applied as a flat reduction on the roll. The average for wound armor was 10. After receiving a single wound, you can expect wound rolls to reach upwards of 100, even if the actual damage roll was not particularly high, due to wound stacking bonuses form being wounded. This meant that wounds, if they happened, came thick and fast after the first, regardless of what your protection might be to wounds. It was just a matter of getting past the initial bump. This is why effects that forced wounds were so powerful. They basically made a given limb more prone to taking a wound without having to deal with the protection problem first. Finally, this is just a broad flaw with the system that is not its fault. It is actually a problem that isn't a problem. Most people in the game are not wearing helmets that protect their head. So most people are going to suffer from a higher proclivity of being wounded if people are aiming for the head. There is this...kind of cargo cult belief that aiming for the head means you do more damage, or can stun someone if you're lucky or what have you. It's entirely nonsense, but it has a grain of truth in that people rarely wear, or even have access too, headwear that provides wound protection or any protection at all. People have jumpsuits, which are universally wound protected, but that isn't true of the head. Look, the point is, they're not aiming at the head because it is usually less armored, its for other reasons but it just so happens to become true due to wounds and how wounds roll their type. To soften this issue, I've decided to treat wound resistance as armor until the limb suffers a tier 3 wound. This way, hits to the head MAY not necessarily escalate to tier 3 instantly as they would on live even from relatively low power weapons. Some weapons have very low force, but have extreme bare wound bonuses. This should be less likely after this change. I doubt this will necessarily make high damage high wound weapons like energy swords any less prone to cutting you clean open, but it might thanks to the reduction to contributed damage to the injury roll. The system is now _a bit more random_. ## Changelog 🆑 balance: Wounds do not make you as vulnerable to suffering wounds of all types as before. Instead, wounds make you more vulnerable to suffering worse versions of themselves as a priority. balance: Wound armor is now more impactful when protecting you from wounds when you have already been wounded. balance: Your head and chest are more difficult to wound until they have been mangled; either from suffering from a weeping avulsion or a hairline fracture. code: Changed the variable for bare_wound_bonus to exposed_wound_bonus to better explain what that variable is doing. /🆑 --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> |
||
|
|
ae2e30ac29 |
Adds an isliving check to baton afterattack (#91254)
## About The Pull Request Very simple fix, afterattack is called for atom attacks - I forgot to isliving here Fixes #91253 ## Changelog 🆑 Melbert fix: You (can't) baton furniture /🆑 |
||
|
|
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) /🆑 |
||
|
|
853c9196b6 |
Removes 'thrownby' var on items (#90877)
## About The Pull Request Fully removes thrownby as a var on items, and is now instead handled by throwingdatums' ``get_thrower()`` proc Also replaces the early return for throwing things at yourself (it now only prevents the call for check_block and therefore hit reaction stuff), since the only way to throw things at yourself is with boomerangs, which currently only works because it doesn't pass you as the thrower for boomerang's return Speaking of, boomerangs now see the thrower as thrower on returns Before (Boomerangs don't pass you as the thrower, so it shows you as being hit by nothing):  After (Boomerangs pass you and you can affect yourself, so it sees you hitting yourself & it still batons you):  This is gonna be used for https://github.com/tgstation/tgstation/pull/90689 as well. ## Why It's Good For The Game Better logging for boomeranged items, removes a deprecated var and better consistency for thrown items leaving better readability. ## Changelog 🆑 admin: People throwing boomeranged items and hitting themselves now logs it as them hitting themselves (rather than being hit by the air). /🆑 |
||
|
|
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. /🆑 |
||
|
|
b5522e5313 |
fixes a spelling error and a grammar error (#90197)
## Why It's Good For The Game I like grammar 🆑 spellcheck: fixed a typo and a grammar error /🆑 |
||
|
|
198ae4d126 |
add nunchaku to spy uplink (mini CQC) (#89817)
## About The Pull Request Added a much faster and deadlier “version” of the telescopic baton, with the ability to counterattack (stun) melee/throwable attacks, but switching back after each one. The speed of stun and harm strikes are identical to each other, allowing for combo attacks. The knockdown time is significantly shorter to make battle more cinematic. Medium-high spy bounty. ## Why It's Good For The Game A In-hand and stylish replacement for the nukie CQC, allowing for non-lethal combat, and crushing skull if need be. stun/harm speed = 0.8 SECONDS (default value for any melee) force = 16 (7 hit crit) bare wound = 5 stamina damage = 30 (4 hit stamcrit) knockdown time = 250 MILLISECONDS (+500 for up, but you may crawling and pickup guns) active throw mode = counterattack (stun) enemy |
||
|
|
d7130a4598 |
Make slips eligible for shove stuns (#89313)
## About The Pull Request Adds slips to the list of existing shove stun methods originally set in https://github.com/tgstation/tgstation/pull/84640 (wall shoves, telebaton, mansus grasp), and also reifies this concept as the "dazed" status effect. This makes it so that being knocked down from a slip from any source (e.g. wet floor, clown stuff, lube, foam, oil, butterdog) gives the dazed visual effect and makes you eligible for being shove stunned. The status always lasts for 3 seconds even if e.g. slipping on lube knocks you down for 15, but this can be customized per slip. ## Why It's Good For The Game Further rewards environmental play and provides another feasible means of fighting back against better equipped opponents, both in line with the original PR. Also the visual cue fits well as an immediate signal that you're dazed and can't get up. ## Changelog 🆑 balance: slips now make you eligible for being shove stunned /🆑 --------- Co-authored-by: Roryl-c <5150427+Roryl-c@users.noreply.github.com> |
||
|
|
6bf0f1acc6 |
Fixes stunprod's missing inhands sprite (#89339)
## About The Pull Request Closes #89338 ## Changelog 🆑 fix: Fixed stunprod's missing inhands sprite /🆑 |
||
|
|
d0a7f955f8 |
Fix various issues with names in string interpolation (#89246)
## About The Pull Request Commit messages should be descriptive of all changes. The "incorrect `\The` macro capitalization" was intentional when it was added, but as far as I know TG says "the supermatter" rather than "The Supermatter," so it's incorrect now. This is completely untested. I don't even know how you'd go about testing this, it's just a fuckton of strings. Someday I want to extract them and run NLP on it to catch grammar problems... ## Why It's Good For The Game Basic grammar pass for name strings. Should make `\the` work better and avoid cases like `the John Smith`. |
||
|
|
b72368fd03 |
#87754: Batons have their stamina damage reduced by armor, get stun armor penetration, but not a test and actually intended to be merged (#88830)
## About The Pull Request This PR is literally just https://github.com/tgstation/tgstation/pull/87754 so you should probably go read the contents of that PR to learn more. ### Sorry, No Stunsword in this PR. Stunbaton inhand tips change color as the cell it has inside increases in capacity. They also have different animations based on the cell, to make it clearer which one you are looking at.  ## Why It's Good For The Game So, two things; A) The test showed that there is more work to be done, but that this was actually improving survivability to some degree against batons when properly geared, while not necessarily impacting the average tider arrest attempts. It didn't solve the issue of alleviating the need for anti-baton knockdown tools, but it did help a bit. Enough that I think this could be worked on further as a foundation for solving that problem. B) People have been asking me to, or have made it obvious that they would like to see this actually merged into the game. So uh...here is that PR if any maints care for it. I think there is still more to do for testing and possible changes to address the issues I was trying to investigate in the test. However, I actually think this change could be an important step towards accomplishing some of those changes. It isn't quite enough to start pulling out baton resistance from various sources just yet, but it is a start. ## Changelog 🆑 balance: Batons now respect the armor worn by targets. Analog batons respect MELEE armor. Cell-type batons respect ENERGY armor. balance: Various batons have differing amounts of armour penetration based on what type of baton it is. balance: Heads of staff have color graded batons to denote penetration power. Bronze (Quartermaster), Silver (Chief Engineer, Chief Medical Officer, Head of Personnel, Research Director), Gold (Captain). Contractor batons are equivalent to Gold. balance: Cell-type batons gain armor penetration based on their cell's quality. The better it is, the more it penetrates. /🆑 --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> |
||
|
|
7ddc30783a |
Adds better attack animations and alternate attack modes (#88418)
## About The Pull Request This is the first PR in a series attempting to modernize our damage and armor, both from a code and a gameplay perspective. This part implements unique attack animations, adds alternate attack modes for items and fixes some minor oversights. Items now have unique attack animation based on their sharpness - sharp items are now swung in an arc, while pointy items are thrust forward. This change is ***purely visual***, this is not swing combat. (However, this does assign icon rotation data to many items, which should help swing combat later down the line). Certain items like knives and swords now have secondary attacks - right clicks will perform stabbing attacks instead of slashing for a chance to leave piercing wounds, albeit with slightly lower damage - trying to stick a katana through someone won't get you very far! https://github.com/user-attachments/assets/1f92bbcd-9aa1-482f-bc26-5e84fe2a07e1 Turns out that spears acted as oversized knives this entire time, being SHARP_EDGED instead of SHARP_POINTY - in order for their animations to make sense, they're now once again pointy (according to comment, originally they were made sharp because piercing wounds weren't very threatening, which is no longer the case) Another major change is that structure damage is now influenced by armor penetration - I am not sure if this is intentional or not, but attacking item's AP never applied to non-mob damage. Additionally, also fixes an issue where attack verbs for you and everyone else may differ. |
||
|
|
778ed9f1ab |
The death or internal/external organ pathing (ft. fixed fox ears and recoloring bodypart overlays with dye sprays) (#87434)
## About The Pull Request This PR kills the abstract internal and external typepaths for organs, now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds. This PR also fixes fox ears (from #87162, no tail is added) and mushpeople's caps (they should be red, the screenshot is a tad outdated). And yes, you can now use a hair dye spray to recolor body parts like most tails, podpeople hair, mushpeople caps and cat ears. The process can be reversed by using the spray again. ## Why It's Good For The Game Time-Green put some effort during the last few months to untie functions and mechanics from external/internal organ pathing. Now, all that this pathing is good for are a few typechecks, easily replaceable with bitflags. Also podpeople and mushpeople need a way to recolor their "hair". This kind of applies to fish tails from the fish infusion, which colors can't be selected right now. The rest is just there if you ever want to recolor your lizard tail for some reason. Proof of testing btw (screenshot taken before mushpeople cap fix, right side has dyed body parts, moth can't be dyed, they're already fabolous):  ## Changelog 🆑 code: Removed internal/external pathing from organs in favor of a bit flag. Hopefully this shouldn't break anything about organs. fix: Fixed invisible fox ears. fix: Fixed mushpeople caps not being colored red by default. add: You can now dye most tails, podpeople hair, mushpeople caps etc. with a hair dye spray. /🆑 |
||
|
|
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 /🆑 |
||
|
|
e61afc4318 |
New Syndicate Stealth MODule: Wraith. (#86449)
## About The Pull Request Introduces a new MODule in the uplink, makes the user transperent and grants the ability to siphon light sources to recharge your suit. Ingame demonstration: https://www.youtube.com/watch?v=bhXNOAMDy4U ## Why It's Good For The Game I've been playing a ton of Splinter Cell and Intravenous recently and this random idea popped in my head. "Wouldn't it be cool if traitors could blend in the darkness to get a jump on their opponents?" Also unrelated "Wouldn't it be cool if tots had a tool to recharge their suit that didn't involve sitting in a pod for 10 minutes?" This PR introduces a new module to the uplink, the Wraith. It comes with a passive and active component. Passively it works exactly like the crew version of the cloaking module with just a couple of differences. 1) Doesn't need to be manually activated, if you lose the cloak it's regained after 5 seconds. 2) Lower stealth alpha value( how trasperent you are basically), slightly less visible than the crew version, not as good the ninja module however , I tuned it just enough so that you are more or less undetectable in the dark. The active component of the module lets you destroy stationary lights to recharge your suit power, if used on handheld or borg lights it turns them off for a minute. **Why do we need this module when we already have the stealth implant and the chameleon projector?** I can think of a few reasons. 1) MODsuits were designed to be customizible, traitor suits range between 6 to 16 TC, having to invest in a 7-8 TC item after you already bought a suit is fairly expensive. 2) This MODule would be a better fit for ambushes, as it doesn't have the *uncloaking* delay of its counterparts. It is however considerably worse if you get caught, as the cloak is disrupted on bump or damage. 3) It has better interactions with the sandbox. Lights can go out for many reasons, maybe it’s just a power outage, or some assistant broke it, or maybe it was anightmare. It leaves room for plausible deniability, adding to the paranoia. It's also not complete invisibility, if you want to stay undetected you need to lurk in the darkness, you might expand your domain, at the cost of the crew eventually wising up to your shaeneningans. Lastly, since the active component of the module uses the same proc of the saboteur handgun, I've updated the code to be a generic proc rather than a signal, to make it easier to reuse in the future. Item desc provided by NecromancerAnne. Module sprite made by Orcacora. ## Changelog 🆑 add: The Wraith Cloaking Module is now available in the uplink, costs 3 TC. code: the saboteur handgun now uses a generic proc rather than a signal /🆑 --------- Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
a2ee15f060 |
Batone sounds overhaul (#86475)
## About The Pull Request <details> https://github.com/user-attachments/assets/069353f3-7c29-49d6-ab6b-51f9a8d65d23 </details> ## Why It's Good For The Game  ## Changelog 🆑 grungussuss sound: changed sounds for stun baton, stun prod, contractor baton and telescopic baton code: made it easier to modify turning on and turning off for batons /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
a380e4c218 |
gives some items sound_vary true (#86467)
## About The Pull Request changed the `sound_vary` var that gives `vary` to pickup/drop sounds to `TRUE` on: - grenade - handcuffs - lead pipe - batons - beaker - drinking glass ## Why It's Good For The Game will give more variety for the soundscape, only did it for items that will sounds good with it ## Changelog 🆑 grungussuss sound: some more items will vary in pitch when picking them up and placing them down /🆑 |
||
|
|
b9dfb7a44f |
Power cell overlay now updates when exiting an object's contents (#85079)
## About The Pull Request The charge indicator overlay on power cells is now properly updated when the cell is charged/discharged. Before, you could use a power cell until it's empty and the overlay wouldn't change at all. ## Why It's Good For The Game The overlay is there to indicate the charge of the cell. It should work. ## Changelog 🆑 fix: The charge indicators on power cells now work properly. code: Removed some now redundant power cell appearance updates /🆑 --------- Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> |
||
|
|
f0575ec415 |
The Soundening: Security and guns edition. (#85309)
## About The Pull Request https://github.com/user-attachments/assets/9c47c512-ff22-4832-9524-fd6f3e6147c7 Pickup sounds for: - all guns - riot shields - handcuffs - batons and telebatons - pepper spray - all grenades Storage open sound for: - security belt, security webbing, all holsters Successfully cuffing someone now has its own satisfying sound! ## Why It's Good For The Game The most combat intensive role in the game doesn't have these sounds to complement their gameplay, these sounds will increase the amount of danger audio cues you can listen for and give feedback to players on what others are doing. ## Changelog 🆑 sound: guns have pickup and drop sounds sound: security belts and holsters have opening sounds sound: handcuffs have pickup and drop sounds sound: stun batons and telescopic batons now have pickup and drop sounds sound: grenades have pickup and drop sounds sounds: riot shields and telescopic shields have pickup and drop sounds sound: successfully handcuffing someone has sound /🆑 |
||
|
|
f50e7221d1 |
Limits the methods through which you can be stunned by a shove. Shoves disarm people who are knocked down. (#84640)
## About The Pull Request For the sake of this PR's language, we'll be defining two different stuns; First: **wall stuns** are any stuns related to the shoving mechanic where you are pushing people into objects and other people to cause a knockdown. And, while they are in that specific knockdown, you shove them again to stun them. Second, a **shove stun** is any instance where you would be currently able to apply this stun from a shove even if the conditions above have not been met. This PR limits down the potential stuns from a shove to; **wall stuns**, and **shove stuns** following a telescoping baton knockdown or being touched by the Mansus Grasp. To know when you can stun someone with a shove, they will have this animated visual cue.  Successfully stunning, paralyzing or immobilizing the victim will remove the opportunity for a stun. You cannot apply another stun from a shove on someone for at least 3.5 seconds after the last stun was applied. The stun lasts for 3 seconds, so there is a 0.5 gap after the stun expires before another stun from a shove can be applied. This does not prevent further knockdowns or staggers. This part was added mostly to help clarify better when someone is or is not vulnerable, as well as cut down on chain stuns without some additional attacks. To make up for the loss of this advantage, shoving someone while they are in any kind of knockdown forces them to drop their held items. ## Why It's Good For The Game You may have remembered the removal of shove stuns testmerge a bit ago. [You can read a bit about it here, but I'll link specifically to my conclusions about that testmerge.](https://tgstation13.org/phpBB/viewtopic.php?p=726119#p726119) At the moment, shove stuns are very oppressive. Generally, it makes a few engagements against a variety of tools too dangerous to be worth attempting, and can often mean that a fight has already been won not from the intelligent employment of a tool, but the mere existence of one taking advantage of a very specific combination of actions. The most egregious part is that it enables an individual who knows the patterns to chain these stuns together to deny someone a chance at fighting back. Wall stunning, however, is a good equalizer that punishes people for not considering their environment, and rewards players who are. It allows the clever player to maneuver themselves just right to score a powerful reversal against even better equipped opponents, or a strong opener to allow them a chance at a successful attack. And it is a strong example of our environmental combat mechanics. Something that shove stuns in isolation is not necessarily (though it can be in some cases). Shove stuns are not exclusive to these scenarios, however. They exist as a ubiquitous means of turning any given knockdown effect into a chain of stun effects. Better equipped opponents, particularly ones with gear able to apply knockdowns, often find themselves able to readily match any opponent without having to worry about the aforementioned environmental aspect of shoving. It is all the advantages with none of the effort put in, and does play into any kind of struggle once the chain effects start to take place. We want to enable players to be able to have their big win moments against the odds. But we also don't want to be rewarding players for already being in an advantage position beyond what their gear affords them. Edit: With the new visual cue, I've allowed in a few shove stuns for equipment that somewhat needs it in order to function well. Heads of staff utilizing their telebatons are meant to be reasonably intimidating opponents, contractors absolutely need the advantage in order to successfully kidnap, and Heretics were one of the biggest sufferers during the testmerge and clearly also hinge quite a bit on the effect. ## Changelog 🆑 balance: You can only stun someone with a shove if they have been shoved into objects or people, or have been hit by telescopic batons, contractor batons or the Mansus Grasp. balance: If someone is knocked to the floor, however, you can still disarm them of any object with a shove. /🆑 --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
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> |
||
|
|
bfd539e9a0 |
The Syndicate MODs are now resistant to batons knockdown. (#83510)
## About The Pull Request Adds a new Module preinstalled into the nukie suits, and purchasable in the uplink, grants resistance to batons knockdown. ## Why It's Good For The Game At the last coderbus meeting, i personally asked to Fikou and Mothblocks for more baton counters to be introduced, they seemed to be ok with the idea, so here we are. Introduces an unremovable module which grants to the wearer resistance to baton knockdown, it comes preinstalled in all syndicate modsuits. With the fix of "rest to prevent disarm", stun batons have gotten even more powerful than they once were, and while i do agree secret kinda abusable tech is bad for the health of the game, the end result is that the stun meta is even more prominent than ever, so it's a good time introduce a small counter to it. From a thematic perspective, Syndie suits should at least make people feel afraid, which is hard to do when a single prod from a stun stick will make you drop like a sack of potatoes, lose your desword and get slashed to bits. On the gameplay side, wearing one of these will make you a target for the entire station, if a traitor is willing to expose themselves, or in the case of nukies, forced to; they should probably have a small edge on what's the most common tool used to stop them. Keep in mind that this only prevents the knockdown, it does nothing for the stamina damage, you'll still get stamcritted in a couple of hits, nothing changes on that front. This is merely to prevent a scenario where a single baton hit will immediately lose you a fight. ## Changelog 🆑 add: adds the MOD shock-absorption module, into the game. add: The MOD shock-absorption module into the the uplinks, costs 4 TC. balance: Nukie modsuits come with the shock_absorption module preinstalled. /🆑 |
||
|
|
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> |
||
|
|
b20c982404 |
Converts slimes to basic mobs (#82176)
## About The Pull Request After months of preparation, and further months of work, I am finally done. Please bear with me, as this is a massive refactor, but I have already atomized everything I could. This is now ready for review. General - The hilbert hotel slimes are now a subtype instead of a varedit. - The `use_mob_ability` subtree now also accepts non cooldown abilities. If set_behaviours is set up properly, mobs won't keep continously triggering it as if it were a 0 second cooldown action. The alternative would have been turning the slime abilities into cooldown abilities. - Wrestling off a slime now signs up to the `COMSIG_ATOM_ATTACK_HAND` signal, instead of being part of attack_hand. - Adds datum/ai_controller/controller as a fourth, optional argument to `/datum/ai_behavior/find_hunt_target/valid_dinner()` to make it possible to access blackboard keys. - Slimes no longer attack windows if they would accidentally move into them (when the conditions are met), since random walk behaviour ignores tiles they can't go in. It was also not worth to keep. Did you know this was the sole override of `ObjBump()`? - Examine was made less snowflaky/bespoke. Also added a new element: `/datum/element/basic_health_examine`, which is a simple bespoke element that prints out a custom message based on how damaged the basic mob it is attached to is. - Slimes only perform knockdown instead of paralysis, as they can attack more often now, and paralysis is not that fun. - LAssailant has been removed due being archaic code. To befriend a slime, you have to spawn a monkey with the slime console, or feed them a sheet of plasma. Simple grabbing the monkey or stuffing them in disposals do not work anymore. Slime console spawned monkeys will have a visible status effect, with pheromones coming off them to make this clearer. Actions - Feeding, reproduction and evolution is no longer a verb. - Slime feeding is no longer an action button. You have to use right click, or as previously, mousedrop. Slimes can always unbuckle from mobs they are attached to. Hunger - Instead randomly changing the starvation and max nutrition values while growing up, evolution costs 200 nutrion. This makes the code more readable, and behaviour more predictable, while still giving the intended time between evolving and splitting. As a result, I could also turn these into defines. - Added a component that handles doing an effect over time while buckled to a mob, until the mob dies or you get unbuckled. - Slimes gained nutrition is no longer randomly multiplied by the damage config value, but rather gain nutrition equal to twice the damage dealt. You'll have to eat one monkey to evolve, just as before. - Slimes do not heal passively. They only heal from eating. It was a rather miniscule value that did not have much effect. - Slimes generate electricity from hunger threshold, instead of the random amount of hunger threshold + 100. Environment - Slimes take 15 damage from cold every second, instead of using a complex formula (that also decreased the damage up to a point?). - Slimes still heal from burn damage, but this is now set on the damage coefficient list. - Slimes instead of getting stunned by the cold, freeze in an ice cube. BZ instead of setting them unconscious, calls the stasis status effect, allowing you to safely stash your hungry slimes for later. They also no longer slow down from the cold, as they are already slowed down by the damage they get. Conversely they no longer get a speed up from a random amount of temperature. I could be convinced to readd this either as part of the basic sensitive component, or a similar one. AI - Removed the attacked_stacks system. Slimes will just perform regular retaliation if you hit them in a harmful manner. - Slimes now use the pet orders component. They will interrupt their feeding when given a command by their master. - Slimes have their own subtrees. I tried to replicate as much as I could from the old code, dividing ancient code artifacts and intentional stuff, so there might be some weirdness. - Slime speech has been almost fully reduced to basic blorbing, as you can not even understand them anymore, and most of them require the slime to loop through all of their surroundings. - Discipline does not have stacks either. Disciplined baby slimes have a chance to clear their attack and hunt blackboard keys. All slimes will stop feeding on the target otherwise. - Since discipline is not a stack, rabidity instead gets removed at a 10% chance per disciplining. - Slimes faces are a bit more randomly picked now. ## Why It's Good For The Game - We want to convert all simple animals to basic mobs. Old slime code was also very strange, and had some systems that have been replicated by components. - Slimes fully paralyzing you is not fun at all. Knockdown should give you a fighting chance when a slime would like to eat you. - Slimes slow down from the heavy damage they get from the cold, so I don't think they need extra slowdown, nor do they need to speed up from warmth, as they are already fast. - Slimes turning into an icecube instead of becoming paralyzed from the cold is more fun for the slimes, as they can break out for a few moments. It is also funny. - Slimes entering proper stasis from BZ is not just a visual indicator of a slime that is safe to approach, but also keeps the slimes's hunger value in check, allowing it to not starve while stopped. They can also look around and blorble, instead of staring at a black screen, if player controlled. - The attack_stack and discipline_stack behaviours were rather overcomplicated, and the xenobio mains I talked with didn't even know it was a thing, so I argue it needed simplification. - The bespoke friendship system of slimes was also too complicated. Slimes slowly gained levels of trust, and at certain levels commands costed friendship, and other levels, they did not. The binary friend/not friend system that everything else in the game uses is much more sensible. - Using right click for feeding is much more sensible than using an action, and then picking someone from a dropdown. - Slime speech was very soulful but not only did it loop through everything in sight, you couldn't even understand it unless you spoke slime. Maybe it can be readded later in a different form. - Slime's passive healing was miniscule, and having them rely on feeding is more interesting. also fixes #81463 ## Changelog 🆑 refactor: Slimes are now basic mobs. Please report any strange behaviours! balance: Slimes only stun you for two seconds when they shock you, the rest of the duration is a knockdown. balance: Slimes are not stunned from the cold, but rather, get frozen in a freon icecube. BZ also puts them in complete stasis, instead of making them unconscious. Their speed is likewise unchanged by temperatures. balance: Slimes do not passively heal, they instead rely on feeding. fix: Slimes can use the buckling screen alert to unbuckle and stop feeding, along with clicking on the mob they are riding /🆑 |
||
|
|
01dce512a3 |
Fixes crank weapons never charging using the crank. Fixes stun batons having functionally infinite charge. (#82189)
## About The Pull Request https://github.com/tgstation/tgstation/pull/81579 overlooked some areas. I suspect there are others. We'll find them eventually I'm sure. ## Why It's Good For The Game These values weren't utilizing any define, so when power itself was changed to use not only a define but one with a value immensely disproportionate to the magic numbers added to these items, well...you get these problems. ## Changelog 🆑 fix: Crank weapons now can actually be charged using their crank. fix: Stun batons and their variants now actually meaningfully consume charge when used. /🆑 --------- Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com> |
||
|
|
9f4a8dfc50 |
Buffs the SC/FISHER Saboteur Handgun. (#81553)
## About The Pull Request The saboteur gun will now silence pAIs, toggle off radio broadcasting (won't auto-relay nearby speech), disable turrets, chill out secbots a little, and turn off APCs like power outages do. The disrupt duration has also been buffed from 10/20 to 15/25 for ranged and point-blank respectively. Removed a conspicious chat message from an otherwise inconspicious gun. Brought the code up to date. ## Why It's Good For The Game The concept is cool, alas it's also undermined by how much of a joke it's right now, and the game has plenty already. The amount of interactions it has with things is underwhelming, so you could barely consider it a stealth tool. The duration is also quite scarce, I pointed that out in the original PR too. Basically, I want to make the item cooler. ## Changelog 🆑 balance: Buffed the duration of the SC/FISHER Saboteur Handgun's disruption effects. It's also stealthier and it won't conspiciously alert living mobs hit by it. add: Added saboteur interactions with radios, pAIs, turrets, secbots and APCs. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
b98edb898e |
Stun Baton Eyecandy | Glows and Sparks (#81449)
## About The Pull Request Adds a soft glow and sparks to the stun baton and stun prod. Video below: https://github.com/tgstation/tgstation/assets/70779744/468351ef-0574-46b9-8d32-58cf40651f3a ## Why It's Good For The Game  Looks cool. ## Changelog 🆑 add: In an attempt to stop the greytide, NanoTrasen has increased security's baton energy output. This has, through testing, done nothing but make the device spark more than it used to. /🆑 |
||
|
|
577d900d2f |
Fixes security batons reporting to cyborgs that they're stunning them (#80781)
## About The Pull Request Fixes security batons reporting to cyborgs that they're stunning themselves ## Why It's Good For The Game  Funny! But a bug I think. ## Changelog 🆑 fix: Cyborgs no longer think they're hitting themselves when stunned with a stun baton /🆑 |
||
|
|
365e50bbce |
Mob attackedby / check_block refactor, plus some minor cleanup of attack_x procs (#79563)
## About The Pull Request - Deletes `spec_attacked_by` - Elements simple/basic mob attack threshold - There was a skeleton mob that "mimics armor" but didn't use the actual mimicing armor thing we have, so I changed that. - Moves `check_shields` down to the living level, renames it to `check_block` - Martial art blocking is now signalized (only CQC uses it anyways) - Cleaned up a bit of `attack_x` procs, but not a lot. Should have an entire PR dedicated to this .... mess. - Deprecates `/obj/item/melee` ## Why It's Good For The Game Second verse, same as the first. - Less bad species related procs. - Largely brings a lot of code in line, making combat more consistent across types. - Makes it a lot easier to add new code relating to blocking or taking damage. ## Changelog 🆑 Melbert refactor: Refactored another large chuck of attack code, primarily involving melee item attacks and non-human mob attacks. Report if you see anything weird fix: Pacifists clicking on simple robots or silicons no longer causes sparks fix: Blocked thrown batons are now properly... blocked /🆑 |
||
|
|
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> |
||
|
|
69827604c4 |
Improves the RPG loot wizard event. (#77218)
## About The Pull Request As the title says. Adds a bunch more stat changes to various different items and a somewhat simple way of modifying them whilst minimizing side-effects as much as possible. Added a new negative curse of polymorph suffix that can randomly polymorph you once you pick up the item. Curse of hunger items won't start on items that are not on a turf. Curse of polymorph will only activate when equipped. Bodyparts, two-handed melees, bags, guns and grenades, to name a few, have a bunch of type-specific stat changes depending on their quality. Some items won't gain fantasy suffixes during the RPG loot event, like stacks, chairs and paper, to make gamifying the stats a bit harder. I'm sure there'll still be other ways to game the event, but it's not that big of a deal since these are the easiest ways to game it. High level items also have a cool unusual effect aura ## Why It's Good For The Game Makes the RPG item event cooler. Right now, it's a bit lame since everything only gains force value and wound bonus on attack. This makes the statistic increases more type-based and make it interesting to use It's okay for some items to be powerful since this is a wizard event and a very impactful one too. By making the curse of hunger items not spawn on people, it'll also make it a less painful event too. ## Changelog 🆑 add: Expanded the RPG loot wizard event by giving various different items their own statistic boost. /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> |
||
|
|
4f2227baf3 |
Implements a macro for checking mind traits (#76548)
## About The Pull Request  Seeing this pattern repeated over various sections of code was starting to piss me off ## Why It's Good For The Game Lessens chance to cause errors with mind traits, ensures consistent behavior, makes it easier to change how mind traits work if necessary. ## Changelog hopefully not player facing --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
6466037e16 |
Fixes an edge case runtime with the snatcherprod (#76386)
## About The Pull Request Adds a user check to a line and makes it early return now. ## Why It's Good For The Game Thrown items don't always have a mob throwing them. ## Changelog 🆑 fix: Fixed snatcherprods potentially giving held objects a one-way ticket to nullspace if thrown at someone by something that's not a mob. /🆑 |
||
|
|
43f1a52223 |
Removes some boilerplate from transforming component (#75998)
## About The Pull Request Removes some boilerplate from transforming component, uses traits in a similar way to the two-handed component Also fixes #74955 (If it's still broken?) ## Why It's Good For The Game Makes it a bit cleaner to work with. Cause I wanna do something with this in the future maybe. ## Changelog 🆑 Melbert fix: Fixed e-cutlasses and bananium swords having invisible inhands code: Removed boilerplate from transforming component /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
ae5a4f955d |
Pulls apart the vestiges of components still hanging onto signals (#75914)
## About The Pull Request Signals were initially only usable with component listeners, which while no longer the case has lead to outdated documentation, names, and a similar location in code. This pr pulls the two apart. Partially because mso thinks we should, but also because they really aren't directly linked anymore, and having them in this midstate just confuses people. [Renames comp_lookup to listen_lookup, since that's what it does](https://github.com/tgstation/tgstation/commit/102b79694fa8eb57ecf7b36032616a9e368ccced) [Moves signal procs over to their own file](https://github.com/tgstation/tgstation/commit/33d07d01fd336726b4f6f6f1b61bb0b3f11a00dc) [Renames the PREQDELETING and QDELETING comsigs to drop the parent bit since they can hook to more then just comps now](https://github.com/tgstation/tgstation/commit/335ea4ad081ec63c42cfa05856e582cca833af6e) [Does something similar to the attackby comsigs (PARENT -> ATOM)](https://github.com/tgstation/tgstation/commit/210e57051df63f88dac3dd83321236da825aae5e) [And finally passes over the examine signals](https://github.com/tgstation/tgstation/commit/65917658fb8a1e7d28ae23c9437a583d646f0302) ## Why It's Good For The Game Code makes more sense, things are better teased apart, s just good imo ## Changelog 🆑 refactor: Pulled apart the last vestiges of names/docs directly linking signals to components /🆑 |
||
|
|
877a1942b2 |
Abductors can now use batons in general. (not just their specialized baton) (#75561)
## About The Pull Request Abductors can now use any baton instead of just their special baton. ## Why It's Good For The Game Abductors are a bit fucked if they lose their baton and are unable to buy one from their shop. Sure they can just use flashes or maint-fu but those methods are hard and or unreliable. (if they manage to lose their baton, they probably aren't that robust anyways). This PR gives more leeway if you fuck up as an abductor. ## Changelog 🆑 balance: The mothership which abductors came from has worked very hard to train their field agents how to use batons from their specimen's habitat /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
1674f25725 |
New Medical job: The Coroner (#75065)
## About The Pull Request HackMD: https://hackmd.io/RE9uRwSYSjCch17-OQ4pjQ?view Feedback link: https://tgstation13.org/phpBB/viewtopic.php?f=10&t=33972 Adds a Coroner job to the game, they work in the Medical department and have their office in the Morgue. I was inspired to make this after I had played my first round on Paradise and messed around in there. The analyzer is copied from there (https://github.com/ParadiseSS13/Paradise/pull/20957), and their jumpsuit is also mostly stolen from it (i just copied the color scheme onto our own suits). Coroners can perform autopsies on people to see their stats, like this  They have access to Medbay, and on lowpop will get Pharmacy (to make their own formaldehyde). They also have their own Secure Morgue access for their office (doubles as a surgery room because they are edgelords or whatever) and the secure morgue trays. Secure Morgue trays spawn with their beepers off and is only accessible by them, the CMO, and HoS. It's used to morgue Antagonists. Security's own morgue trays have been removed. The job in action https://cdn.discordapp.com/attachments/950489581151735849/1102297675669442570/2023-04-30_14-16-06.mp4 ### Surgery changes Autopsies are a Surgery, and I tried to intertwine this with the Dissection surgery. Dissections and Autopsies both require the Autopsy scanner to perform them, however you can only perform one on any given body. Dissections are for experiments, Autopsies is for the paper of information. Dissected bodies now also give a ~20% surgery speed boost, this was added at the request of Fikou as a way to encourage Doctors to let the Coroner do their job before reviving a body. I also remember the Medical skill, which allowed Doctors to do surgery faster on people, and I hope that this can do something like that WITHOUT adding the potential for exploiting, which led to the skill's downfall. ### Morgue Improvements Morgue trays are no longer named with pens, they instead will steal the name of the last bodybag to be put in them. Morgue trays are also removed from Brig Medical areas and Robotics, now they have to bring their corpses to the Morgue where the Coroner can keep track and ensure records are properly updated. ### Sprite credits I can't fit it all in the Changelog, so this is who made what McRamon - Autopsy scanner Tattax - Table clock sprites and in-hands CoiledLamb - Coroner jumpsuits & labcoats (inhand, on sprite, and their respective alternatives) - Coroner gloves - CoronerDrobe (the vending machine) ## Why It's Good For The Game This is mostly explained in the hackmd, but the goal of this is: 1. Increase the use of the Medical Records console. 2. Add a new and interesting way for Detectives to uncover mysteries. 3. Add a more RP-flavored role in Medical that still has mechanics tied behind it. ## Changelog 🆑 JohnFulpWillard, sprites by McRamon, tattax, and Lamb add: The Coroner, a new Medical role revolving around dead corpses and autopsies. add: The Coroner's Autopsy Scanner, used for discovering the cause for someone's death, listing their wounds, the causes of them, their reagents, and diseases (including stealth ones!) qol: Morgue Trays are now named after the bodybags inside of them. balance: The morgue now has 'Secure' morgue trays which by default don't beep. balance: Security Medical area and Robotics no longer have their own morgue trays. balance: Dissected bodies now have faster surgery speed. Autopsies also count as dissections, however they're mutually exclusive. /🆑 --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> |