mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-19 20:15:47 +01:00
docker-container
94 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b3770614c1 | Makes invisimins actually invisible to regular ghosts, plus qol improvements (#95856) | ||
|
|
4ceac8f297 |
Classic Cocktails 2: The liqueurening (#95392)
## About The Pull Request TL;DR: "What do you mean we didn't have a negroni in the game before?" This adds three new very commonly used liqueurs to the game: A bitter red aperitivo, an herbal liqueur, and maraschino liqueur. Additionally, it adds 15 new classic cocktails that use these new liqueurs. Mechanically relevant drinks include: - The Poet's Dream, which can grant non-heretics the ability to dream like them - The Garibaldi, which grants revolutionaries the determination to shrug off their wounds - The Jungle Bird, which soothes the supermatter when ingested by those around it - The Thermonuclear Daiquiri, which causes you to glow (and very rarely emit high-energy nuclear particles) - and more! Full list here: https://hackmd.io/@0lHAWBNkSXixU4v6xxYS_w/SkYjyDofbg  On the non-player facing side of things, this also refactors the heretic dream code a bit and adds a trait that enables non-heretics to have heretic dreams, which could easily be used by other things (ie if anyone wanted to make a perk or something that does this) Also, special thanks to MrMelbert and ChipPotato for helping me out with coding stuff in the discord! ## Why It's Good For The Game This is good for the game for more or less the same reasons as my first classic cocktail PR #92955 is good for the game: More variety gives bartenders more to do and a greater range of drinks to base gimmicks off of, and adding more cocktails to the game which are commonly served in IRL bars decreases awkward, RP breaking moments where someone orders a cocktail that's a staple you can find just about anywhere but which isn't in the game. Additionally, the new liqueurs are commonly used in many other classic and modern cocktails, which people can use to make cocktails in future projects. ## Changelog 🆑 add: Added three new liqueurs, with bottles available in the booze-o-mat. add: Added 15 new cocktails that use the aforementioned liqueurs. /🆑 |
||
|
|
cd002246ab | Fixes ghost poll alerts missing backgrounds (#95363) | ||
|
|
feccb60c35 |
Update spotlight plane on z change (#94837)
## About The Pull Request Spotlights don't break on multi-z maps ## Changelog 🆑 Melbert fix: Fixed spotlight effect on multi-z map /🆑 |
||
|
|
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! /🆑 |
||
|
|
999bde8f84 |
Most screen alerts now fit the player's hud style. (#93493)
## About The Pull Request Most screen alerts that use the midnight hud style no longer have the button baked in their icon. Other screen alerts with their own background or shape (robot and mech alerts, atmos, heretic buffs or debuffs etc.) are not affected. Also updated a couple sprites but didn't spend too much time on them. Mostly reusing existing assets. Montage of how the alerts look on threee different hud styles (Operative, Trasen-Knox, Detective, ALSO I FIXED THE BUCKLED ALERT ALREADY): <img width="293" height="323" alt="image" src="https://github.com/user-attachments/assets/3a2b972b-aa5a-4c27-a454-c8c39acf6e20" /> It looks only a smidge iffy on the syndicate since the top and bottom borders aren't layered over all the overlays, but it isn't something to worry about in this PR. ## Why It's Good For The Game Screen alerts always had the midnight hud button baked in their icon states (now overlays), which completely disregard the player's hud setting, much unlike action alerts buttons. Melbert has also said that it'd be nice if the code for action buttons could also be used in screen alerts and viceversa, to slim things down. That's obviously not what I'm doing today, but having most of the screen alerts already without the baked background will surely help if we ever pursue that objective. ## Changelog 🆑 refactor: Refactored screen alerts a little. Most should now fit the player's hud style. Report any issue. imageadd: A few screen alerts have been polished/updated a little. /🆑 |
||
|
|
9f31f36ddc | item offers now persist when pulling and moving a tile away. (#93252) | ||
|
|
0204ab8fdd |
Canreach refactor (#93165)
## About The Pull Request ports https://github.com/DaedalusDock/daedalusdock/pull/1144 ports https://github.com/DaedalusDock/daedalusdock/pull/1147 full credit to @Kapu1178 for the juice instead of `reacher.CanReach(target)` we now do `target.CanBeReachedBy(reacher)`, this allows us to give special behavior to atoms which we want to reach, which is exactly what I need for a feature I'm working on. ## Why It's Good For The Game allows us to be more flexible with reachability ## Changelog 🆑 refactor: refactored how reaching items works, report any oddities with being unable to reach something you should be able to! /🆑 |
||
|
|
3ea7b03369 |
Accentuate the positive with **Personality**: A (soft) mood rework (#92941)
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> |
||
|
|
72580ce0bb |
Adds Various Classic Cocktails (#92955)
## About The Pull Request TL;DR: "What do you mean we didn't have an old fashioned in the game before?" This adds a bunch of different classic cocktails to the game that I always felt were rather odd holes in the lineup of drinks that bartenders could make, as well as a few less classic ones 'cause why not. Adds thirteen new alcoholic drinks and one non alcoholic one. Mechanically relevant drinks include the Blue Blazer and Hot Toddy which warm you up like coffee, Bitters and Soda which settles upset stomachs, and the Suffering Bastard which, in it's role as a hangover cure, calms nausea, prevents headaches, and very slowly heals brain damage, giving a way to heal chip brain damage that doesn't require chemistry or surgery. Full list here: https://hackmd.io/@0lHAWBNkSXixU4v6xxYS_w/SkjlmIbsgx <img width="439" height="435" alt="drinks" src="https://github.com/user-attachments/assets/406ca285-63af-49d4-b0e8-176edb251291" /> PS This is basically my first real project and also my first time spriting for anything, so I would really appreciate any advice or reccomendations. ## Why It's Good For The Game More variety for service is always nice, but also many of these drinks are extremely commonly ordered in real world bars. Adding them here fills some weird gaps in the bar's line up, allows people to order more drinks that they personally like, and decreases the amount of awkward interactions in which people order a drink that they're familiar with and then get confused when a partender somehow can't give them an daiquiri despite having everything to make it. ## Changelog 🆑 add: You can now make 15 new classic (and some less classic) cocktails. Includes old standards like the Old Fashioned, Daiquiri, Ramos Gin Fizz, and more! /🆑 |
||
|
|
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> |
||
|
|
379e2a0ee0 |
Refactor: Moves throwing and giving items from /mob/living/carbon to /mob/living (#91049)
## About The Pull Request Given the existence of basic mobs with hand slots, it feels like throwing and giving items shouldn't be something exclusive to carbon mobs, so I've pulled things around to make this happen. The only basic mobs with hands at time of writing are gorillas and dextrous holoparasites, but the inability to throw things when you're a gorilla just doesn't seem right to me. Some more details about what I've done here: - Made the dextrous component optionally enable throwing for the mob it's added to. - Moved offer/give item functionality to /mob/living (I can't see any reason why only carbon mobs should have this option) - Moved throwing and give item hotkeys from carbon to "human" (where all the other /mob/living hotkeys go) and, as a result, removed carbon hotkeys (nothing is left in them). - Moved throwing code and item offering code to its own file because living.dm is 3000+ lines long and should probably be broken up some day (I'm not brave enough for that) - Cleaned up an unused global signal that hasn't been used since dogs got moved to basic mobs. - Other miscellaneous cleanup where I noticed it. - In terms of testing: Tested using gorillas (only checked the dextrous holoparasite to confirm the button and hotkeys worked). Things that were working: - Can throw items if the mob is set up to allow it. - Can give items as a gorilla to a human, as a human to a gorilla, and as a human to a human. - Can give a high five to a gorilla (and the gorilla can receive it). Gorillas can't give a high five back, though (they don't have the emote), this already ballooned in scope, someone else can make that happen. - There are an alarmingly high amount of niche emote-into-item-into-giving behaviours I suspect half the playerbase or more aren't even aware of (does anyone offer their hand to someone to get them up off of the ground?) and I don't know if I broke any of them with this, but the fact high fives work gives me some hope they're probably still fine. ## Why It's Good For The Game Lets gorillas and dextrous holoparasites throw things and give things, but most importantly sets up more framework for any future dextrous basic mobs to also be able to do this. There's no real reason to keep this functionality confined to carbon mobs when dextrous basic mobs are a thing. ## Changelog 🆑 add: Gorillas can now throw things and offer items to players. refactor: Moved throwing and offering item code to be based on living mobs, not just carbon mobs. /🆑 --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
0b40a9b343 |
Fix divine smites (#90511)
## About The Pull Request Fixes #90510 I added the overlay when only smites that destroyed the body had the divine smite flag, then I added the flag to a bunch more things. Oops ## Changelog 🆑 Melbert fix: Fix divine smites making you glow forever /🆑 |
||
|
|
5d3519b9cf |
Adds Dustself, dust smite, divine smites (#89973)
## About The Pull Request - Adds `dustself` admin verb - Adds Dust admin smite - Does what it says on the tin - Adds Divine smites - Variations of smites that come with the prayer sound and special effects - so you can get the message across that this is a punishment from god. https://github.com/user-attachments/assets/1cf89ece-3e89-4135-a984-79ca10c278a6 ## Why It's Good For The Game - Request. Parity for `gibself` - Request. Parity with "Gib" - Request. Someone wanted to add some more flair to smites so I obliged. ## Changelog 🆑 Melbert admin: Adds "Dustself" admin: Adds "Dust" smite. Does what it says on the tin admin: Adds "Divine" smites. They are variations of normal smites themed around divine intervention. /🆑 |
||
|
|
f40bb684b1 |
Fixes an old simplemob damage bug (#89759)
## About The Pull Request Literally every single bit of our code assumes that adjustXLoss returns the total health delta (old_damage - new_damage), so negative values when damage was taken and positive when it was healed, ***except*** simplemobs had this inverted for (supposedly) two years. Yeah. This broke crushers, mending touch and slime feeding - not sure if anything else was screwed due to this. Closes #87550 ## Why It's Good For The Game  ## Changelog 🆑 fix: Fixed inconsistent crusher trophy droprates /🆑 |
||
|
|
851c5a5df9 |
Convert all traits given by status effects to use TRAIT_STATUS_EFFECT(id) (#89291)
## About The Pull Request This makes (almost?) all traits given by status effects use `TRAIT_STATUS_EFFECT(id)` as their source, rather than the previous mix of `id`, `type`, `REF(src)`, or some bespoke thing. ## Why It's Good For The Game Consistency is good. ## Changelog No user-facing changes |
||
|
|
b8671462a9 |
The Galactic Mineral Market Presents: The Spotlight Station Trait (#89136)
## About The Pull Request ### _**HEY HUSTLERS**_ Do you want to know all about the station's real GDP **_BREADWINNERS_** this shift? Well, look no further than the all new GMM SPOTLIGHT. On select shifts (Where the trait is rolled), the GMM SPOTLIGHT will shine on who's HUSTLING and GRINDING the hardest so YOU CAN ~~know who has enough money to try and mug them~~ LEARN THE SECRETS OF THE CREDIT WHISPERS **AMONG US**. Don't know where these legendary GRIND-O-HOLICS are this very SECOND? Well, the GMM will UPDATE the SPOTLIGHT every 5 minutes, with their IDENTITY MADE KNOWN to all crewmates via the station updates and economic summary newcaster channels. WHAT ARE YOU WAITING FOR? ALIEN JIM KRAMER??? UNLEASH THE SECRETS OF THE HUSTLERS **TODAY**!!! (The original idea for this station trait was given to me by xhorian/@YesterdaysPromise a few months back, so big thanks to him for the inspiration.) Video of it in action: https://discord.com/channels/326822144233439242/326831214667235328/1330408517248614432 ## Why It's Good For The Game This is, obviously, a negative station trait. On shifts where players are working to make lots of personal profit, it can either serve as a badge of honor, or as a target being painted on your back about who has the most money. Still, it's somewhat flavorful, and I think it could be interesting to have happen to a player, where suddenly a beam of light from above ™️ suddenly appears and starts following you. I wouldn't be against giving command some kind of control to let them cancel the effect early by un-subscribing from their newsletter, but it depends on how people feel about this. ## Changelog 🆑 add: Stations in your sector may start with the GMM spotlight, a massive economic broadcast spotlight that will follow the wealthiest crewmate on board until the next paycheck /🆑 |
||
|
|
30179707ec | [NO GBP] Fixing a couple nits with hot spring turfs. (#88318) | ||
|
|
69c01b27ee |
Improved shower/blood effects (#87747)
## About The Pull Request Last night I was experimenting with hooking up different chemicals to a shower and discovered that blood didn't really do anything other than have red mist and particles. Your characters clothes were still cleaned. The mood boost was still happy. So I reworked it a bit. Blood now: - Gives a negative mood, disgust, and status effect when showering with it (unless you are morbid, evil, or undead, then it's considered positive) - Has an icon alert for bloody showers - Covers a mob's clothing with blood when showering (or any objects on the tile) - Tossing or spraying a container full of blood now covers objects/mobs in blood - The revenant defile spell now affects showers by removing all water recyclers and reagents that gets replaced with blood Showers now: - Require 70% of water to clean and get mood/status effects - Require 70% of blood to get mood/status effects - Require 20% of radioactive reagents to stop radiation removal effects So it's possible to have a clean water shower that is secretly radioactive. Since radioactive reagents do nothing on `TOUCH`, all this achieves is preventing the water from washing off the radiation. I did have to refactor some of the reagent code to support method types for objects since I was experiencing hazmat issues when I was testing. Whenever I would inject blood from a syringe into a beaker, it would cover the beaker in blood on the outside. This would have been extremely hazardous for viruses. So I needed to make sure we are only applying it to the methods for `VAPOR|TOUCH` Also improved the mood typecasting for owner to allow checking of mob biotypes. (so we can check `UNDEAD` for mood) ## Why It's Good For The Game Blood effects and interactions are now more consistent. The code for objects is refactored to support method interactions with reagents. Evil/Morbid people now get some unique interactions that fit their theme. Last we get a cool new ability to let revenant's make their defiled areas something out of a horror movie. ## Changelog 🆑 add: The revenant defile spell now affects showers by removing all water recyclers and reagents that gets replaced with blood. add: Showering in clean water (+70%) results in positive mood/regen/stamina effects. It will wash off the mob. add: Showering in dirty water results in negative mood effects and disgust. It will NOT wash off the mob. add: Showering with radioactive reagents (+20%) results in the preventing the shower from washing off the radiation. add: Showering in blood (+70%) results in severe negative mood effects and disgust. (unless you are morbid, evil, or undead then it's considered positive) It will cover the mob in blood. add: Water effects that interact with a mob from touch or vapor (showering/spray bottles/etc.) will now heal sleep, unconsciousness, confusion, drowsiness, jitters, dizziness, and drunkenness. fix: Fix bloody showers not covering objects in blood. fix: Tossing or spraying a container full of blood now covers objects/mobs in blood fix: Fix wrong status effect for watery tile image: Add new alert icons for bloody/dirty showers code: Refactored some expose_obj reagent code to support method types. code: Improved mood typecasting for owner to allow checking of mob biotypes. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
3c40876f15 |
Fix itchy skillchip status effect "Curse of Mundanity", adds unit test for effects set to "Curse of Mundanity" (and missing IDs) (#88240)
## About The Pull Request Fixes a lot of status effects having the default alert, adds a unit test to check that status effects don't forget to change it I chose a test rather than just making the default "no alert" because I think people making status effects should think about whether it should have an alert Also I added a test for effects which did not set an ID because that's kind of important, I applied the same mindset here to account for abstract types but admittedly less sold on this one. ## Changelog 🆑 Melbert fix: You should be afflicted by the "Curse of Mundanity" far, far less /🆑 |
||
|
|
ee271daf46 |
clickable alerts glow + the slimed status effect now actually tells you how to get it off without water in the description (#87902)
## About The Pull Request clickable alerts glow (regex: /atom/movable/screen/alert/.*/Click) ## Why It's Good For The Game people are much more likely to look at the chat or anywhere else than the status effect (really, its usually never worth reading 99% of them so they end up ignored) ## Changelog 🆑 qol: alerts that do stuff when clicked glow gold /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
239797a4ee |
Deletes misleading infinite define, adds defines for clearer status effect durations (#87842)
## About The Pull Request 1. Deletes `INFINTIE`, it is misleading and not at all a big number and causes bugs 2. Adds `STATUS_EFFECT_PERMANENT` and `STATUS_EFFECT_NO_TICK` to make it clearer what infinite status effects are |
||
|
|
e5472d9be4 |
Fishing bluespace capsules (#87639)
## About The Pull Request With this PR, I'm introducing fishing bluespace capsules to the game. They can be found on the black market, but I'll get a couple more ways to get them before it's ready. Anyway, they're special bluespace capsules that spawn a fishing spot of your choice. The fishing spot can be changed by alt-clicking the capsule, and so far it has 5 choices, plus 2 locked behind emagging for obvious reasons: - Freshwater: pretty basic, you get freshwater fish from this. - Saltwater: mainly saltwater fish. - Tiziran: You get tiziran fish here, like the gunner jellyfish, armorfish, needlefish, dwarves moonfish and the new, bigger zagoskian moonfish. By the by, moonfish now periodically lay moonfish eggs, a staple of lizardfolk cuisine. - Ice fishing spot: A small ice turf with a hole dug in it; salmon, arctic char, arctic chrabs and the bonemass (skeleton fish). - Hot Spring: Somehow the new home to the ought-to-be-extinct sacabambaspis. It also doubles as a better shower overall, with mild healing on top of stamina recovery. Felinids still hate it though, and won't benefit from the healing. - Lava: A 2x2 square of pure lava. Requires an emag for obvious reasons. - Plasma: Ditto, but it's plasma instead of lava. As a sidenote, unlike standard shelter capsules, these require their area to be clear of pipes and cables on top of the other requirements, unless emagged. Obviously, I've done some changes to allow pipes and cables to not be hidden by water turfs, though I'm still keeping these reqs because I don't think these fishing spots would look great if riddled with cables and pipes. I may remove this extra req later if it proves to be a tad too tedious. Also they don't knock you back when expanding. Screenshot from a recent test (fixed the misplaced decal and tweaked a few things since then):  ## Why It's Good For The Game The idea stems from how not all fishing spots aren't designed to be accessible every round, which is fine, because we have the fish-porter for that. However, even the fish-porter should have its limits in terms of what it can provide by itself (linking is all fair and game), so I've thought having something of a middle point would been neat, also as a way to mess around with the station layout a bit, to empower the player with a little extra "terraforming". ## Changelog 🆑 add: Added fishing bluespace capsules to the game, which can be used to spawn a variety of fishing spots, from freshwater to tiziran sea to hot springs, and also lava and plasma if emagged. add: Added two new fish: the zagoskian moonfish and the sacabambaspis. Moonfish will now periodically lay moonfish eggs. map: The 'crashed pod' lavaland ruin now has a hot spring, and the cursed hotspring on icemoon now has a plastic chair and a fishing toolbox. /🆑 |
||
|
|
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. /🆑 |
||
|
|
cffe5ffc33 |
Mixed bag of fishing adjustments. (#87201)
## About The Pull Request This more or less ties with my previous PR where I fix some of the issues I've seen with fishing, because both are the result of some live playtesting in which I assessed some flaws and nits. So, let's get started: Lowered the number of fish to scan for each fish scanning experiment: This is the most time-gating feature of fishing. As a scientist you're usually better off doing anything else than this anyway, which is understandable, but for whoever else that plans to get some nice ocean fish, this is going to be a huge bummer. From 4, 8, 14, 21 to 3, 7, 11, 17. Switched the ocean and chasm portal setting: Right now, the ocean portal has the largest amount of catchable creatures, which can also help progress the experiments, while the chasm setting only has two and is only mildly useful for chasm chrabs --> lobstrosities (which suffer a bit from not having a good enough AI right now). I hope I'll have the time to add some late fishes to the chasm setting at some point. Added a premapped fishing portal generator to the common service room of every map: It takes quite some time to setup fishing. Making a fishing portal is by far what I consider to be the most tedious part. Also Wawa and Birdshot were also missing the aquarium kit. On a side-note I realized some days ago that service jobs receive very good discounts on the fishing items sold by the good clean vendor. Added the fish puns speech modifier to fish-infused gills: I forgot to do it when I made the PR. Shrimple as that. Mild fish infusion tweaks: Lowered the crawling speed very sightly, but buffed showers and water healing slightly. Drinking water now wets you by about 1/4 of what splashing it would do. Buffed fishing difficulty modifiers for items and chairs a little: For the time and credits invested, buying a carp costume or whatever to be slightly better at fishing doesn't seem that profitable, and I reckon I was being a bit conservative with the values. Fishing is a considerable time investment already, especially in the initial stage with the setup. Also idk why sunglasses and thermals buff fishing while fish are technically cold-blooded creatures so I removed the comp from them. Added fishing rods and fish cases designs to cargo and science lathes: Other base fishing designs are shared between the three departments, while these two are only available for service (and autolathes obviously). Fishing skill now affects completion gain and not only completion loss: Fishing as a feature has a slower pace than most things in the game. It feels right that by the time you reach about legendary level, you get to complete the minigame a bit faster. ## Why It's Good For The Game To put it briefly, the feature feels right as a casual experience, however time is very much against you and getting something done takes some effort (especially on tram, where moving to and fro' departments is almost like playing froggers at times) ## Changelog 🆑 map: Added a premapped fishing portal generator to every map. balance: Lowered the requirements for fish scanning experiment. Swapped the rewards of the second and third experiments. balance: Buffed fishing difficulty modifiers for several items and chairs. balance: Fishing skill now affects completion speed of the minigame more actively. balance: Mild fish infusion tweaks. Crawling is a smidge slower, but healing from showers and drank water is a bit better. qol: Fishing rods and fish cases can now be printed by cargo and science lathes. add: Gills now give the fish puns speech modifier. /🆑 |
||
|
|
466011f541 |
Felinid mood fix (#87230)
 ## About The Pull Request Showering will add negative mood effect to felinids ## Why It's Good For The Game there was a status effect that drops stamina for felinids on shower but at the same time it boosts mood i decided to make it better 🆑 Mamaii add: shower will give felinids negative mood effect fix: fixed shower hater status effect alert not showing /🆑 |
||
|
|
96c0c0b12c |
Fish infusion (#87030)
## About The Pull Request I'm adding a new infusion ~~(actually four, but two of them are just holders for specific organs tied to a couple fish traits)~~ to the game. As the title says, it's about fish. The infusion is composed of three primary organs, plus another few that can be gotten from fish with specific traits. The primary organs are: - Gills (lungs): Instead of breathing oxygen, you now need to stay wet or breathe water vapor. - fish-DNA infused stomach: Can safely eat raw fish. - fish tail: On its own, it only speeds you up on water turfs, but it has another effect once past the organ set threshold. It also makes you waddle and flop like a fish while crawling (I still gotta finish sprites on this one) Other organs are: - semi-aquatic lungs: A subtype of gills from fish with the 'amphibious' trait, falls back on oxygen if there's no water. Can also be gotten from frogs, axolotl and crabs. - fish-DNA infused liver: From fish with the 'toxic' trait. Uses tetrodotoxin as a healing chem instead of a toxin. Also better tolerance to alcohol if you want to drink like a fish (ba dum tsh). - inky tongue: From fish with the 'ink production' trait. Gives mobs the ability to spit ink on a cooldown, blinding and confusion foes temporarily. The main gimmick of this infusion revolves around being drenched in water to benefit from it, In the case you get the gills organ, this also becomes a necessity, to not suffocate to death (alternatively, you can breathe water vapor, without any benefit). To enable the bonus of the organs set, three organs need to be infused. They can be gills, stomach, tail and/or liver, while the inky tongue doesn't count towards it. Once the threshold is reached, the following bonus are enabled: - Wetness decays a lot slower and resists fire a bit more. - Ink spit becomes stronger, allowing it to very briefly knock down foes. - Fishing bonuses and experience - Resistance to high pressures - Slightly expanded FOV - drinking water and showers mildly heal you over time. - for felinids: You won't hate getting sprayed by water or taking a shower. - While wet: - - If the fish tail is implanted, crawling speed is boosted. - - You no longer slip on wet tiles. - - You also become slippery when lying on the floor. - - You get a very mild damage resistance and passive stamina regeneration, and cool down faster. - - You resist grabs better. - - get a very weak positive moodlet. - However, being dry will make you quite squisher, especially against fire damage, slower and give you a modest negative moodlet. While working on it, I've also noticed a few things that explained why tetrodotoxin (TTX) did jackshit at low doses, because livers have a set toxin tolerance value, below which, any amount of toxin does nothing. Also I've felt like reagents like multiver & co were a bit too strong against a reagent that's supposed to work at very low doses, with slow metabolization, so I've added a couple variables to buff TTX a bit, making it harder to purge and resistant to liver toxin tolerance (also added a bit of lungs damage). ## Why It's Good For The Game I wanted to take a shot at coding a DNA infusion and see how chock-full I could make it. DNA infusions are like a middle point between "aha, small visual trinket" and organs with generally ok effects. I seek to make something a bit more complex ~~(also tied to fishing ofc because that's more or less the recurrent gag of my recent features)~~ primaly focused around the unique theme of being strong when wet and weaker when dry. EDIT: The PR is now ready, have a set of screenshots of the (fairly mid) fish tails (and gills, barely visible) on randomly generated spessman and one consistent joe:  ## Changelog 🆑 add: Added a new infusion to the game: Fish. Its main gimmick revolves around being stronger and slippery when wet while weaker when dry. balance: Buffed tetrodotoxin a little against liver tolerance and purging reagents. /🆑 |
||
|
|
e2785ac4d6 |
Shower now regen stamina.... Not for the felinids. (#86889)
## About The Pull Request Washing now give you status effect that regen 4 stamina per tick. https://github.com/user-attachments/assets/1691ac4b-d8e4-402a-98d1-3cba61c00879 BUT if you felinid you will loss 4 stamina insteed becouse cats don't love water. https://github.com/user-attachments/assets/e566e4d8-7f8a-47e6-aadc-b2910758d6ea ## Why It's Good For The Game Gives more reasons to wash. ## Changelog 🆑 add: Showers now heals stamina when you washing. But not for you catgitls. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
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 /🆑 |
||
|
|
91df95c767 |
Fixes the other half of the crusher bug (#84028)
## About The Pull Request Fixes #83906 So when I test the first issue I just whacked the guy and the checked VV to see if it was tracking damage at all then I called it a day, turns out while it was applying damage it was actually negative damage from the crusher itself so while the final number of damage dealt may look like "2500" the tracker tracked like "1400". (I mean that's still a pretty interesting statistic is shows that the crusher itself, with none of its special effects, does just under 60% of the total damage dealt, so cool) ## Changelog 🆑 Melbert fix: Crusher Fix For Real /🆑 |
||
|
|
ff6b41aa07 |
Afterattack is dead, long live Afterattack (#83818)
## About The Pull Request - Afterattack is a very simple proc now: All it does is this, and all it's used for is for having a convenient place to put effects an item does after a successful attack (IE, the attack was not blocked)  - An overwhelming majority of afterattack implementations have been moved to `interact_with_atom` or the new `ranged_interact_with_atom` I have manually tested many of the refactored procs but there was 200+ so it's kinda hard ## Why It's Good For The Game Afterattack is one of the worst parts of the attack chain, as it simultaneously serves as a way of doing random interactions NOT AT ALL related to attacks (despite the name) while ALSO serving as the defacto way to do a ranged interaction with an item This means careless coders (most of them) may throw stuff in afterattack without realizing how wide reaching it is, which causes bugs. By making two well defined, separate procs for handing adjacent vs ranged interactions, it becomes WAY WAY WAY more easy to develop for. If you want to do something when you click on something else and you're adjacent, use `interact_with_atom` If you want to do something when you click on something else and you're not adjacent, use 'ranged_interact_with_atom` This does result in some instances of boilerplate as shown here:  But I think it's acceptable, feel free to oppose if you don't I'm sure we can think of another solution ~~Additionally it makes it easier to implement swing combat. That's a bonus I guess~~ ## Changelog 🆑 Melbert refactor: Over 200 item interactions have been refactored to use a newer, easier-to-use system. Report any oddities with using items on other objects you may see (such as surgery, reagent containers like cups and spray bottles, or construction devices), especially using something at range (such as guns or chisels) refactor: Item-On-Modsuit interactions have changed slightly. While on combat mode, you will attempt to "use" the item on the suit instead of inserting it into the suit's storage. This means being on combat mode while the suit's panel is open will block you from inserting items entirely via click (but other methods such as hotkey, clicking on the storage boxes, and mousedrop will still work). refactor: The detective's scanner will now be inserted into storage items if clicked normally, and will scan the storage item if on combat mode /🆑 |
||
|
|
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 /🆑 |
||
|
|
c85f84245d |
Fix love not working right before Valentines day (VERY HIGHI priority) (#81440)
## About The Pull Request The parent new call is what handles showing the alt appearance to the mob So we add the alt appearance to our date, try to show to any mob, it fails (there is no seer), then set seer Fixes this by fixing the order ## Changelog 🆑 Melbert fix: You can once again see love on Valentines Day /🆑 |
||
|
|
54ab1e3936 |
Organ movement refactor *Un-nullspaces your organs* (#79687)
<!-- 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. --> closes #53931, #70916, #53931 ## About The Pull Request Organs were previously stored in nullspace. Now they are stored in their prospective bodyparts. Bodyparts are now stored in the mob. I've also had to refactor a lot of code concerning organ movement. Previously, organs were only moved into bodyparts once the bodyparts were removed. To accomodate this change, two major distinctions have been made: **Bodypart removal/insertion** Called only when an organ is taken out of a bodypart. Bodypart overlays, damage modifiers or other changes that should affect a bodypart itself goes here. **Mob insertion/removal** Called when an organ is removed from a mob. This can either be directly, by taking the organ out of a mob, or by removing the bodypart that contains the organ. This lets you add and remove organ effects safely without having to worry about the bodypart. Now that we controle the movement of bodyparts and organs, we can fuck around with them more. Summoning someones head or chest or heart will actually kill them now (and quite violently I must say (chest summoning gibs lol)). https://github.com/tgstation/tgstation/assets/7501474/5efc9dd3-cfd5-4ce4-b70f-d0d74894626e I´ve also added a unit test that violently tears apart and reconstructs a person in different ways to see if they get put toghether the right way This will definitely need a testmerge. I've done a lot of testing to make sure interactions work, but more niche stuff or my own incompetence can always slip through. ## Why It's Good For The Game <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> A lot of organ work is quite restricted. You can't C4 someones heart, you cant summon their organs and a lot of exceptions have to be made to keep organs in nullspace. This lets organs (and bodyparts) play more nicely with the rest of the game. This also makes it a lot easier to move away from extorgans since a lot of their unique movement code has been removed and or generalized. I don't like making PRs of this size (I'm so sorry reviewers), but I was in a unique position to replace the entire system in a way I couldn't have done conveniently in multiple PRs ## 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. --> 🆑 refactor: Your organs are now inside your body. Please report any issues with bodypart and organ movement, including exotic organ, on github and scream at me fix: Cases of unexpected organ movement, such as teleporting bodyparts and organs with spells, now invokes a proper reaction (usually violent death) runtime: Fixes HARS runtiming on activation/deactivation fix: Fixes lag when species swapping /🆑 <!-- 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. --> |
||
|
|
274eb2a52e |
Removes Clone Damage (#80109)
<!-- 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 Does what it says on the tin. We don't have any "special" sources of clone damage left in the game, most of them are rather trivial so I bunched them together into this PR. Notable things removed: - Clonexadone, because its entire thing was centered around clone damage - Decloner gun, it's also centered around cloning damage, I couldn't think of a replacement mechanic and nobody uses it anyways - Everything else already dealt clone damage as a side (rainbow knife deals a random damage type for example), so these sources were removed <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game Consider the four sources of normal damage that you can get: Brute, Burn, Toxins and Oxygen. These four horsemen of the apocalypse are very well put together and it's no surprise that they are in the game, as you can fit any way of damaging a mob into them. Getting beaten to death by a security officer? Brute damage. Running around on fire? Burn damage. Poisoned or irradiated? Toxin damage. Suffocating in space? Brute, burn and oxygen damage. Technically there's also stamina damage but that's its own ballpark and it also makes sense why we have a damage number for it. Picture this now: We have this cool mechanic called "clone pods" where you can magically revive dead people with absolute ease. We don't want it to be for free though, it comes at a cost. This cost is clone damage, and it serves to restrain people from abusing cloning. Fast forward time a bit and cloning is now removed from the game. What stays with us is a damage number that is intrinsically tied to the context of a removed feature. It was a good idea that we had it for that feature at the time, but now it just sits there. It's the odd one out from all the other damage types. You can easily explain why your blade dealt brute damage, but how are you going to fit clone damage into any context without also becoming extremely specific? My point is: **clone damage is conceptually a flawed mechanic because it is too specific**. That is the major issue why no one uses it, and why that makes it unworthy of being a damage stat. Don't take my word for it though, because a while ago we only had a handful of sources for this damage type in the game. And in most of the rounds where you saw this damage, it came from only one department. It's not worthwhile to keep it around as a damage number. People also didn't know what to do with this damage type, so we currently have two ways of healing clone damage: Cryotubes as a roundstart way of healing clone damage and Rezadone, which instantly sets your clone damage to 0 on the first tick. As a medical doctor, when was the last time you saw someone come in with clone damage and thought to yourself, "Oh, this person has clone damage, I cannot wait to heal them!" ? Now we have replacements for these clone damage sources. Slimes? Slime status effect that deals brute instead of clone. Cosmic heretics? Random organ damage, because their mechanics are already pretty fleshed out. Decloning virus? The virus operated as a "ticking timebomb" which used cloning damage as the timer, so it has been reworked to not use clone damage. What remains after all this is now a basically unused damage type. Every specific situation that used clone damage is now relying on another damage type. Now it's time to put clone damage to rest once and for all. Sure, you can technically add some form of cellular degradation in the future, but it shouldn't be a damage number. The idea of your cells being degraded is a cool concept, don't get me wrong, but make it a status effect or maybe even a wound for that matter. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## 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. --> 🆑 del: Removed clone damage. del: Removed the decloner gun. del: Removed clonexadone. /🆑 <!-- 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. --> |
||
|
|
f8b41f9442 |
Changes occurrences of recieve in code to receive (#80065)
## About The Pull Request I've stumbled across this enough to finally go through the entire codebase and fix it. I left out changelogs simply because rewriting history logs is bad. ## Why It's Good For The Game I find it pretty annoying because I stumble across words that are misspelled for a few seconds, and I'm likely not the only one who feels like this. Less spelling mistakes in code are better. ## Changelog 🆑 spellcheck: Occurrences of "recieve" has been changed to "receive". /🆑 |
||
|
|
f718be700a |
Gunpoint now blocks bumps, adds examine text and can be broken by shoving (#79564)
## About The Pull Request Lesser version of https://github.com/tgstation/tgstation/pull/75226 Changes a few things with bumping which could lead to cheesing a charged shot if the shooter has an ally to bump the target. Also adds examine text to know what's happening. Also shoving now can be used to break gunpoint, since having immovable mobs can be troublesome in some situations ## Why It's Good For The Game Grabs from the target no longer counter gunpoint; Accidental or cheesy bumps are removed; Shoves and pulls can be used in a teamplay to break gunpoint ## Changelog 🆑 qol: Gunpoint: Examining the target will show who is holding them at gunpoint qol: Gunpoint: Examining the shooter will show who they are holding at gunpoint balance: Gunpoint: If the target tries to grab, they will trigger the shot balance: Gunpoint: If the target or the shooter are shoved, it will cancel the gunpoint balance: Gunpoint: If the target is pulled, it will cancel the gunpoint balance: Both the target and the shooter can't be bumped anymore to avoid cheesing charged shot or removing the gunpoint by just moving around fix: Clicking the alert button of the shooter will now correctly remove gunpoint /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
b5654d7203 |
Security Pen and Penlight improvement (#79299)
## About The Pull Request Improves penlight sprite and code. A new type of pen has been introduced - the Security Pen. This pen is red and can create a holograph around a person, similar to a medical penlight. The holograph prompts the person to surrender for 30 seconds, and the holograph itself is visible for 5. There is a 30-second cooldown between usage. Holosign itself does nothing except be visual, just like medical holosign **(DO NOT MISTAKE HOLOSIGNS FOR HOLOBARRIERS)** https://github.com/tgstation/tgstation/assets/42353186/1ee5f794-7218-4e52-b04f-3ebb50bd224a Now every Security member spawns with a Security Pen in their PDA. Now you can print Security Pens at Security Techfab, and Penlights at Medical Techfab. ## Why It's Good For The Game The only way to prompt someone to perform the surrender emote is by holding them up with a gun. However, this mechanic can be quite unreliable, even after updates, especially if the person is moving. As a result, many players are unaware of how to prompt the surrender emote or even about its existence, so they don't know they can trigger it themselves by typing "*surrender". This enables non-lethal arrests without stun batons or other tools. Sprites are a significant improvement as the previous penlight sprites were outdated. ## Changelog 🆑 qol: There is now a more convenient way to prompt surrender to emote - the Security Pen. Each officer is equipped with one in their PDA. Simply click someone with it to prompt a 30-second surrender. They are printable at Security Techfab as well. qol: Penlights now are printable at Medical Techfab. image: Penlights got a new cleaner sprite to replace its ancient one code: The code for Penlight's holographic sign has been improved. /🆑 |
||
|
|
68b798efa0 | A thorough audit of damage procs and specifically their use in on_mob_life() (with unit tests!) (#78657) | ||
|
|
9e1c71f794 |
Reworks transformation sting to be temporarily in living mobs, forever in dead mobs (#78502)
## About The Pull Request
- Reworks transformation sting.
- Transformation sting is now temporary, lasting 8 minutes (number not
final) in humans.
- If used on a monkey, it lasts forever instead.
- While the target mob is dead or in stasis, the duration will not
progress, making it functionally infinite until revived and taken off
stasis, where it will resume its timer where it left off.
- Chemical cost reduced to 33
- DNA cost reduced to 2
- Removes TRAIT_NO_TRANSFORMATION_STING, instead just checks for
TRAIT_NO_DNA_COPY
- These were essentially the same traits, so I just combined the two
- Organizes some trait lists alphabetically
- Adds TRAIT_STASIS, to allow for reacting to mobs entering and exiting
stasis via COMSIGS
- Everything that checks IS_IN_STASIS now checks HAS_TRAIT TRAIT_STASIS,
which is probably more performant, so that's a bonus.
## Why It's Good For The Game
A lot of people don't like the current iteration of Transformation
Sting, me included
Right now it's only use is for a meme - you make the entire station into
felinids until you get lynched, and that's it.
It's not really a healthy ability for ling's current kit, so this pr
attempts to soft rework it to make it a bit more in line with how ling
should be acting - turning it into a source of short term confusion
between people, or using it on a body to cover your tracks.
This accomplish it two fold - One, it is now cheap enough to use twice
in rapid succession, allowing for quick on-the-spot "BE CONFUSED"
situations while you abscond. Two, as mentioned in the last paragraph,
you can poke a body of someone you murder to obfuscate the crime scene
and maybe help out in taking over someone's identity.
## Changelog
🆑 Melbert
balance: Transformation sting now lasts 8 minutes, down from permanent.
However, the effect is paused for dead and stasis mobs, making it
permanent SO LONG AS they stay dead or in stasis. The effect is also
permanent if used on a monkey.
balance: Transformation sting now costs 33 chemicals, down from 50.
balance: Transformation sting now costs 2 dna points, down from 3.
fix: Transformation sting works on monkeys again.
refactor: Refactored a bit of human randomization.
/🆑
|
||
|
|
4fec8b5e88 |
megafauna no longer gib/dust you (#77731)
## About The Pull Request megafauna now gut you instead of gibbing or dusting colossus bolts still dust to prevent bodychair cheese ## Why It's Good For The Game shaft miners are already hard to recover(or impossible in the case of dusting), having to go through lavaland and likely near the megafauna itself. This should still be punishing enough for losing to a megafauna as it removes their heart, lungs and liver from their body while still leaving it intact, just easier to recover. ## Changelog 🆑 balance: megafauna will now gut instead of dusting or gibbing /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
eea20b83e3 |
Kills seconds_per_tick from status effect tick, replaces it with seconds_between_ticks to clarify some things (#77219)
## About The Pull Request https://github.com/tgstation/tgstation/pull/66573#discussion_r861157216 `status_effect/proc/tick(seconds_per_tick)` is wildly misleading and I feel like I should address it For a majority of status effects, they process on fast processing but do not tick every fastprocessing tick This means that using `seconds_per_tick` here is not giving you the seconds between status effect ticks, it's giving you seconds between processing ticks (`0.2`) This is how it's misleading - If you have a tick interval of `1 SECONDS`, you'd think `seconds_per_tick` is, well, one. But it's actually one-fifth. So all of your effects are now 80% weaker. I have replaced the use of `seconds_per_tick` in tick with `seconds_between_ticks`. This number is, quite simply, the initial tick interval of the status effect divided by ten. An effect with the tick interval of `1 SECONDS` has a `seconds_between_ticks` of 1. As a consequence, some things which were inadvertently made weaker, such as fire and some heretic things (at a glance), are now a little stronger. ## Why It's Good For The Game See above. Makes it more clear what you're doing when working with effects. ## Changelog 🆑 Melbert code: Updated some status effect tick code to be more clear of how long is elapsing between ticks. Some effects that were inadvertently weakened are now stronger as a result (fire and some heretic effects). /🆑 |
||
|
|
dc88203f0b |
Fix Too Slowing people with high fives (#76277)
## About The Pull Request At some point with the refactors to offering it was made so that dropping the item stops the offer, unfortunately too slowing people with high fives relied on this behavior (dropping not stopping the offer). Restores that behavior with a bit more code tweaking. ## Why It's Good For The Game How can I be too slow? ## Changelog 🆑 Melbert fix: You can once again "too slow" someone with a high five /🆑 |
||
|
|
4ffccee19e |
[NO GBP] I flunked a commit just a hour ago and now Tinea Luxor's effect only lasts two seconds when added to mobs with a reagent holder. That was idiotic of me. (#76328)
## About The Pull Request So, I was going to use `-1` as second arg for that apply_status_effect() call, which is the duration of all status effects that don't expire with time, except that looks like a magic number that could use a define, though I was groaning at the idea of doing that, so I rolled back the change. Turns out I had forgotten the default value of that duration argument was `2 SECONDS` and only noticed it a few minutes after the PR was merged. @ZephyrTFA ## Why It's Good For The Game Do I have to explain again? ## Changelog If this gets merged before the change goes live, I won't have to. |
||
|
|
cf443bfbad |
[s] Knocks the lights out of Tinea Luxor (#76295)
## About The Pull Request So, we've a problem where the lights from Tinea Luxor can be staked up indefinitely, because someone thought it was a brilliant idea to use expose_mob rather than on_mob_metabolize. ## Why It's Good For The Game This will close #76263. Aaaand yes, this is a webedit PR. ## Changelog 🆑 fix: Fixes the lights from Tinea Luxor being stackable to the point of crashing the game for others. /🆑 |
||
|
|
b729ba5d3f |
The destabilization of your eigenstate can no longer be paused by stripping naked (#75982)
## About The Pull Request The destabilization of your eigenstate can no longer be paused by stripping naked. ## Why It's Good For The Game one of the stages of the eigenstasium od's status effect is causing your items to teleport off of you this early returned out if you had no items to teleport off of yourself and it did this before the line of code that increments the status effect's progress counter so if you had no items to teleport, you'd never progress to the later stages of the status effect ## Changelog 🆑 ATHATH fix: The destabilization of your eigenstate can no longer be paused by stripping naked. /🆑 |
||
|
|
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 /🆑 |
||
|
|
00e7d5d746 |
*hand, or That /One/ Emote You Always Felt Was Missing (#71600)
## About The Pull Request It's happened to me _repeatedly_ that I'd see someone down on the floor, and wanted to just, give them a hand, so they could take it and get up that way, without just, directly clicking on them, since that's a little bland. I've also wanted to just, offer my hand to someone so they could grab it, so that I could pull them alongside me, rather than just targeting one of their arms and ctrl-clicking them. I've had this idea for a _long_ time, and only just decided to do this today. Now, I know what you might say. "Golden, that's a lot of code for something this simple!" You're not wrong. _However_. I decided to go along and to give some more love to the `/datum/status_effect/offering` status effect and the offering-related alerts, to make them a lot more versatile and a lot less hardcoded. Hence the whole "refactoring" part of this. Of course, when I add something, I don't do it half-way. So, the way the emote works is much like the `*slap` emote, except that: - When you click on someone, it does the exact same as if you were offering the item to them, except that it's targeted (much like ctrl-shift-click). - If there's nobody directly adjacent to you, it won't do anything. - If there's at least one person lying down around you, you will offer them your help to get up. Should they take your hand and let you help them up, you will both receive a simple memory about being helped up (or helping up), as well as a 45-seconds-long small mood buff, because it feels nice to be on either end of such a friendly gesture. If they get up, they automatically get disqualified from being offered some help standing up, and likewise, if you lie down, that offer goes away as well. - If there's at least one person around you, you will instead extend your hand in their direction, for them to grab onto it. Should they do so, you will then grab them by their arms and pull them. I reworked the offering status effect to no longer have a hardcoded `can_hold_items()` check, so that kisses and the hand offering would no longer need you to have free hands to complete. The logic here is that you can still pull someone even with both hands filled, so I figured I'd leave it this way. Note: If anyone would like to give the item a better sprite, by all means, go ahead, that'd be amazing. I'm just not really a great spriter and couldn't be bothered to waste hours making a very _meh_ hand. ## Why It's Good For The Game It's fluff, and nice fluff at that. It makes it easier for people to be nice to one-another without having to necessarily spend so long writing up an emote that the person on the floor will already have gotten back up. I'm sure the MRP folks will like it, and I'm certain the HRP downstreams will love it too ;) ## Changelog 🆑 add: Added the *hand emote, which you can offer to someone standing up in order to give them the possibility to grab onto your hand and let you drag them away, or to someone lying down to help them back up, which always makes everyone involved a little happier! refactor: De-hardcoded and genericized a lot of the offering status effect and alert code, to make it require a lot less copy-paste to handle new cases. fix: Offering a kiss no longer requires the receiver to have free hands to accept said kiss! /🆑 |
||
|
|
fa7688d043 |
Save 0.6-0.7s of init time by splitting registering lists of signals into its own proc, and optimizing QDELETED (#71056)
- Makes QDELETED use isnull(x) instead of !x, giving about 0.2 to 0.25s of speed. - Make disposal constructs only update icon state rather than go through expensive overlay code. Unfortunately did not have much effect, but is something they should've been doing nonetheless. - Makes RegisterSignal only take signals directly as opposed to allocating a fresh list of signals. Very few consumers actually used this and it costs about 0.4s. Also I think this is just a bad API anyway and that separate procs are important `\bRegisterSignal\((.*)list\(` replaced with `RegisterSignals($1list(` |
||
|
|
4d6a8bc537 |
515 Compatibility (#71161)
Makes the code compatible with 515.1594+
Few simple changes and one very painful one.
Let's start with the easy:
* puts call behind `LIBCALL` define, so call_ext is properly used in 515
* Adds `NAMEOF_STATIC(_,X)` macro for nameof in static definitions since
src is now invalid there.
* Fixes tgui and devserver. From 515 onward the tmp3333{procid} cache
directory is not appened to base path in browser controls so we don't
check for it in base js and put the dev server dummy window file in
actual directory not the byond root.
* Renames the few things that had /final/ in typepath to ultimate since
final is a new keyword
And the very painful change:
`.proc/whatever` format is no longer valid, so we're replacing it with
new nameof() function. All this wrapped in three new macros.
`PROC_REF(X)`,`TYPE_PROC_REF(TYPE,X)`,`GLOBAL_PROC_REF(X)`. Global is
not actually necessary but if we get nameof that does not allow globals
it would be nice validation.
This is pretty unwieldy but there's no real alternative.
If you notice anything weird in the commits let me know because majority
was done with regex replace.
@tgstation/commit-access Since the .proc/stuff is pretty big change.
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
|