mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 00:55:20 +01:00
mayfools
225 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d25c6201f4 |
Standerdizing currency symbols Part 2 (#94259)
## About The Pull Request Converts almost all non-constant, non-tgui usages of all variantions of "credit" and "cr" Everything seems in order, tested most the currencies. <img width="905" height="119" alt="image" src="https://github.com/user-attachments/assets/3fa005a7-a114-426c-9646-b81f68bc2dec" /> <img width="255" height="128" alt="image" src="https://github.com/user-attachments/assets/14c83b54-4fd9-4bee-838f-5b1c03939d9a" /> ## Why It's Good For The Game Same justification as https://github.com/tgstation/tgstation/pull/94128 Just easier to mantain/adjust the grammer/names of our money ## Changelog 🆑 spellcheck: minor cleanup on some usecases of "credits" /🆑 |
||
|
|
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. /🆑 |
||
|
|
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! /🆑 |
||
|
|
1c6c506936 | Raptor Rework - Ranching and Companionship (#93564) | ||
|
|
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. |
||
|
|
a28575aa82 |
[NO GBP] Fixing more issues with sand (you can make sand walls again, also ghost glass sheets?) (#93215)
## About The Pull Request Apparently wall construction code is snowflaked and indented as fuck (and the same goes for door assemblies). I'm not bothering refactoring everything with them, only to reduce the indentation, changing a couple vars and overall making it easier to work with them later. This includes wall construction not being hardcoded to sheets but include the possibility to use other kind of stacks as well (if you don't count the snowflake interaction with iron rods). In layman's terms, this means you can make walls made out of sand (distinct from sandstone) again. Also I've done some small changes to the materials storage, so that it can eject ores too if the material doesn't have a sheet type. Also, I've been told there may be issues with broken, uninteractable (probably not properly initialized) glass sheets beside the ORM. I'm not 100% sure about the deets, but it may have something to do with spawning the glass on the same turf the ORM is listening to, when smelting sand, causing some race conditions, so let's spawn it in nullspace ## Why It's Good For The Game While I'm sure there may be more elegant solutions (just take a look at the wall and door construction code, they both use text2path oh god!), I'm just here to make things a lil' cleaner and be done with issues with the fact that sand is made of sand. ## Changelog 🆑 fix: You can once again make sand walls. fix: Deconstructing an autolathe with sand in it should now drop sand. /🆑 |
||
|
|
79da15581c | The Roulette Refinement Reconfiguration. Poker Chips, Bugs fixed. Coins redeemable, Payouts animated and Bag expanded., (#92905) | ||
|
|
bd1f7911ee |
[NO GBP] Fixing issues with sand (#93006)
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> |
||
|
|
5d6982bb08 |
ORM's smelt ores correctly when inserted by hand/bag (#92991)
## About The Pull Request - Fixes #92989 ## Changelog 🆑 fix: ORM's smelt ores correctly when inserted by hand/bag /🆑 |
||
|
|
c274677cfd |
glass ore (aka sand) is now actually made of sand (#92889)
## About The Pull Request sand blocks existed for the only purpose of making sand available as a material. However, the only method to get them was pretty whimsical and the existence of the feature wasn't really conveyed to the player, which involves rinsing regular sand in a sink... and before you ask, we also have sandstone, which can be crafted just by using the sand in hands, no water involved. In fact, the sand blocks use the same sprites for regular sandstone, except they have no recipes associated to them, nothing! Nada! Let's address the elephant in the room: We already have sand, however said sand already has the glass material attached to it even before being smelted, so if you put sand into the Autolathe, you get glass, yay. Sand blocks really only existed to make up for the shortcoming of whoever coded the sand material at the time. But enough ranting. As the title says, sand is now made of sand, sand blocks are kill. I've been careful enough to give the ORM the ability to smelt gathered sand into glass beforehand, so miners won't curse me for making them _actually_ use the smelter for once, "I will rather die to a goliath than have anything to do with that". However, this still means you cannot shove sand directly into lathes and expect glass out of it. Get a welder. ## Why It's Good For The Game ## Changelog 🆑 balance: sand is now made of sand and not glass. Get a welder if you plan to shove it into a protolathe. del: Removed now useless sand blocks. /🆑 |
||
|
|
aebc419282 | Resprites all mineral overlays (from mining scanners) (#92725) | ||
|
|
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) /🆑 |
||
|
|
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. /🆑 |
||
|
|
d3d3a12540 |
The big fix for pixel_x and pixel_y use cases. (#90124)
## About The Pull Request 516 requires float layered overlays to be using pixel_w and pixel_z instead of pixel_x and pixel_y respectively, unless we want visual/layering errors. This makes sense, as w,z are for visual effects only. Sadly seems we were not entirely consistent in this, and many things seem to have been using x,y incorrectly. This hopefully fixes that, and thus also fixes layering issues. Complete 1:1 compatibility not guaranteed. I did the lazy way suggested to me by SmArtKar to speed it up (Runtiming inside apply_overlays), and this is still included in the PR to flash out possible issues in a TM (Plus I will need someone to grep the runtimes for me after the TM period to make sure nothing was missed). After this is done I'll remove all these extra checks. Lints will probably be failing for a bit, got to wait for [this update](https://github.com/SpaceManiac/SpacemanDMM/commit/4b77cd487d0a7b6a069df20356b701af5b20489d) to them to make it into release. Or just unlint the lines, though that's probably gonna produce code debt ## Why It's Good For The Game Fixes this massive 516 mess, hopefully. closes #90281 ## Changelog 🆑 refactor: Changed many of our use cases for pixel_x and pixel_y correctly into pixel_w and pixel_z, fixing layering issues in the process. /🆑 --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: SmArtKar <master.of.bagets@gmail.com> |
||
|
|
1b80a34506 |
You can now craft multi-dimensional payloads with dimensional anomalies (#89701)
## About The Pull Request Remember the overpriced, rare bomb core from the black market, the one you can use to convert an area to pizza or plasma? Looking back, I think I should've made it craftable with a dimensional anomaly rather than simply lock it to the back market, that was a real shame to its potential. Another thing, the power of the crafted dimensional bomb core varies with the strength of the gibtonite and if the grenade casings used are of large or advance release variants or not. Using low power gibtonite (deactivated too hastily) results in a radius of 11 (not counting the epicenter) tiles, roughly 70% of what you would get from the blackmarket core (17 tiles). Using a medium power gibtonite results in a radius of 13, or 82% of 17. Using two advanced/large grenades results in a radius of 15, 88% of 17. Using high power gibtonite results in a radius equal to the bm standard. Using both high power gibtonite and advanced/large grenades results in a radius of 19, for a 11.5% increase from 17. This is done so that using the anomaly to its fullest requires some steps beside the refined core itself, kinda in line with other anomaly tech but without filling the techweb with more clutter. ## Why It's Good For The Game This gives an use to the dimensional anomaly core beside the reactive armor and bounties. If it ever becomes problematic, it can be easily tuned later. ## Changelog 🆑 add: You can now craft multi-dimensional payloads with dimensional anomalies. /🆑 --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> |
||
|
|
9d6f164501 |
You can now try to fish random products out of vending machines with a fishing rod and a few bucks. (#88290)
## About The Pull Request You can now use a fishing rod to fish random vending products from vending machines, using holochips, coins and spacecash as bait. The value of the money used as bait will positively influence the chance of getting the pricier vending items, while using less than the minimum paycheck (25 credits) will increase the minigame difficulty and carries an additional, small risk of getting a dud or even hurling the vending machine in your direction. This also warranted a slight refactor of how vending product prices are set. ## Why It's Good For The Game Expands the list of things you can do with a fishing rod. Like for the organ manipulation fishing PR. This is not about getting fish, but the unconventional things we can do along the way. Now tested, it works. ## Changelog 🆑 add: You can now try to fish random products out of vending machines with a fishing rod and a few bucks. fix: Fixing the 1000 cr holochip loot from exploration drones. /🆑 |
||
|
|
bbb7a41743 |
Guncode Agony 4: The Great Projectile Purge (#87740)
## About The Pull Request ~~Kept you waitin huh!~~ The projectile refactor is finally here, 4 years later. This PR (almost) completely rewrites projectile logic to be more maintainable and performant. ### Key changes: * Instead of moving by a fixed amount of pixels, potentially skipping tile corners and being performance-heavy, projectiles now use raymarching in order to teleport through tiles and only visually animate themselves. This allows us to do custom per-projectile animations and makes the code much more reliable, sane and maintainable. You (did not) serve us well, pixel_move. * Speed variable now measures how many tiles (if SSprojectiles has default values) a projectile passes in a tick instead of being a magical Kevinz Unit™️ coefficient. pixel_speed_multiplier has been retired because it never had a right to exist in the first place. __This means that downstreams will need to set all of their custom projectiles' speed values to ``pixel_speed_multiplier / speed``__ in order to prevent projectiles from inverting their speed. * Hitscans no longer operate with spartial vectors and instead only store key points in which the projectile impacted something or changed its angle. This should similarly make the code much easier to work with, as well as fixing some visual jank due to incorrect calculations. * Projectiles only delete themselves the ***next*** tick after impacting something or reaching their maximum range. Doing so allows them to finish their impact animation and hide themselves between ticks via animation chains. This means that projectiles no longer disappear ~a tile before hitting their target, and that we can finally make impact markers be consistent with where the projectile actually landed instead of being entirely random. <details> <summary>Here is an example of how this affects our slowest-moving projectile: Magic Missiles.</summary> Before: https://github.com/user-attachments/assets/06b3a980-4701-4aeb-aa3e-e21cd056020e After: https://github.com/user-attachments/assets/abe8ed5c-4b81-4120-8d2f-cf16ff5be915 </details> <details> <summary>And here is a much faster, and currently jankier, disabler SMG.</summary> Before: https://github.com/user-attachments/assets/2d84aef1-0c83-44ef-a698-8ec716587348 After: https://github.com/user-attachments/assets/2e7c1336-f611-404f-b3ff-87433398d238 </details> ### But how will this affect the ~~trout population~~ gameplay? Beyond improved visuals, smoother movement and a few minor bugfixes, this should not have a major gameplay impact. If something changed its behavior in an unexpected way or started looking odd, please make an issue report. Projectile impacts should now be consistent with their visual position, so hitting and dodging shots should be slightly easier and more intuitive. This PR should be testmerged extensively due to the amount of changes it brings and considerable difficulty in reviewing them. Please contact me to ensure its good to merge. Closes #71822 Closes #78547 Closes #78871 Closes #83901 Closes #87802 Closes #88073 ## Why It's Good For The Game Our core projectile code is an ungodly abomination that nobody except me, Kapu and Potato dared to poke in the past months (potentially longer). It is laggy, overcomplicated and absolutely unmaintaineable - while a lot of decisions made sense 4 years ago when we were attempting to introduce pixel movement, nowadays they are only acting as major roadblocks for any contributor who is attempting to make projectile behavior that differs from normal in any way. Huge thanks to Kapu and Potato (Lemon) on the discord for providing insights, ideas and advice throughout the past months regarding potential improvements to projectile code, almost all of which made it in. ## Changelog 🆑 qol: Projectiles now visually impact their targets instead of disappearing about a tile short of it. fix: Fixed multiple minor issues with projectile behavior refactor: Completely rewrote almost all of our projectile code - if anything broke or started looking/behaving oddly, make an issue report! /🆑 |
||
|
|
cdebe98a17 |
refactoring how materials effects are added to atoms (#86901)
## About The Pull Request I'm "cooking" the materials system a bit, specifically the code responsible for applying and removing effects. My goal is to move most of the code to the objects-side, split it in smaller procs that can be more easily overriden or called for object-specific modifiers and effects, while also revamping things all around to better support items made from multiple materials (the cleric mace will most likely be one in this PR, with the handle and tip made of different materials). PR NO LONGER WIP, TESTED AND ALL, CLERIC MACES CAN NOW BE MADE OF TWO MATERIALS. ## Why It's Good For The Game One of the nastiest flaws with the materials system is that it's just unfeasable to have items made of multiple mats (with effects enabled) right now, as they easily tend to override each other, where some of the modifiers and effects should only be applied the main material. Beside, the system's starting to show signs of its time, from the several type checks used to apply different effects, the one letter variables to the the material flags that are still being passed down as arguments when you can access them from the atom/source arg anyway. It would be disonhest of me if I went ahead and coded material fishing rods or whatever fish fuckery with materials without ensuring it won't further the technical debt the feature currently has. ## Changelog 🆑 refactor: Refactored materials code. report any issue. add: Cleric maces (The autolathe-printable weapon design from outer space) can now be made of two different materials. balance: Buffed cleric maces a little. fix: toolboxes' stats are now affected by materials again. /🆑 --------- Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> |
||
|
|
91baa94ac5 |
event based incapicated and able_to_run (#86031)
## About The Pull Request this is a revival of #82635 . i got permission from potato to reopen this, he did almost all the work. i only just solved the conflicts and fixed all the bugs that were preventing the original from being merged (but it should be TMed first) ## Why It's Good For The Game slightly improves the performance of basic mob AI ## Changelog 🆑 LemonInTheDark refactor: able_to_run and incapacitated have been refactored to be event based /🆑 --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: ZephyrTFA <matthew@tfaluc.com> |
||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
fec946e9c0 |
/Icon/ Folder cleansing crusade part, I think 4; post-wallening clean-up. (#85823)
Hello everybuddy, your number three rated coder-failure here to clean up some mess. This PR accomplishes some of the more major structural clean up changes I wanted to do with /obj/ folder, but decided to wait on until wallening gets merged, and so, time has come. Several things to still be done, although I know these cleaning PR's are quite a load, so will wait for this one to get done with first. ## Why It's Good For The Game Saner spriters, better sprites, less annoyance. Also deleted a whole load of redundancy this time around, a lot of sprites which existed simultaniously in two places now got exit their quantum superposition. |
||
|
|
aebeed5c96 |
Ore ore ore ore ore... sounds. (#85738)
## About The Pull Request Closes https://github.com/tgstation/tgstation/issues/85615 #### Applied to: - all ore subtypes, except bluespace polycrystals - Sandstone blocks ### Video: https://github.com/user-attachments/assets/7fdd322a-4f57-4df7-bd72-e6400382b58b ## Why It's Good For The Game immersion. ## Changelog 🆑 grungussuss sound: ore and sandstone blocks have their own sound /🆑 |
||
|
|
5f80128fa9 |
Corrects 200+ instances of "it's" where it should've been "its" instead (#85169)
## About The Pull Request it's - conjunction of "it" and "is" its - possessive form of "it" grammar is hard, and there were a lot of places where "it's" was used where it shouldn't have been. i went and painstakingly searched the entire repository for these instances, spending a few hours on it. i completely ignored the changelog archive, and i may have missed some outliers. most player-facing ones should be corrected, though ## Why It's Good For The Game proper grammar is good ## Changelog 🆑 spellcheck: Numerous instances of "it's" have been properly replaced with "its" /🆑 |
||
|
|
920cd7459d |
Neutralised anomalies respect the core limit (#83964)
## About The Pull Request This PR changes it so that if you refine an anomaly by neutralising it, it respects the same limit on number of anomaly cores as refining one you bought from Cargo. If it would produce an illegal core, it will create a mostly useless inert core which you can sell at cargo for 80% of the price of buying a raw core. ## Why It's Good For The Game https://hackmd.io/@tgstation/r1tzxpwPL This was a requirement in the original design doc which just never made it into the game. We want to be able to control how many cores of each type can possibly exist in a round, as this is what allows them to have the "these items can be really busted" allowance. ## Changelog 🆑 fix: Neutralising an anomaly cannot produce more anomaly cores than are supposed to exist in a single round /🆑 |
||
|
|
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 /🆑 |
||
|
|
e54ecf4b10 |
Fix crafting bypassing checks (#82833)
## About The Pull Request Backport from https://github.com/tgstation/TerraGov-Marine-Corps/pull/15701 Fixes crafting bypassing checks. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/82826 ## Changelog 🆑 fix: You can no longer bypass construction restrictions via the crafting menu /🆑 |
||
|
|
9723b4b317 |
Replaces even more deciseconds with SECONDS (#82438)
## About The Pull Request
Using these search regexes:
Ending in 0:
`addtimer\((.*),\s?(\d{1,3})0\b\)`
replacement:
`addtimer($1, $2 SECONDS)`
Two digit ending in odd:
`addtimer\((.*), (\d)([1-9])\)$`
replacement:
`addtimer($1, $2.$3 SECONDS)`
Single digit ending odd:
`addtimer\((.*), ([1-9])\)$`
replacement:
`addtimer($1, 0.$2 SECONDS)`
## Why It's Good For The Game
Code readability
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
|
||
|
|
d6319d2b87 |
Lots of description changes and grammar fixes for heretics (#81761)
## About The Pull Request Changes a lot of text. Apart from grammar fixes, here are the notable changes: - Ash jaunt description just said it is a "short range jaunt" without explaining what exactly a jaunt is. I believe it is better to describe without comparing to another spell the player may not have experience with. - Cosmic grasp now explains what the deal is with star marks and cosmic fields. It is still possible to crosspath into a star mark spell, skipping this description, but I assume a player like that is experienced enough to know what the star mark does anyway... - The knowledge for ash spirits no longer refers to them as "Ash Men" - "Ash Spirit" is the mob's actual name. If you think "Ash Man" is a better name, I can change it around so that the mob gets renamed that instead. - Removes the lines from paradoxical curio's description about causing brain damage on examination - many heretic items cause adverse effects to heathens who try to interact with them, and there is never a need to clutter the description with them. - Changes the eldritch coin description, because the old one was, in my opinion, awkward. I changed it to be more inline with the other items' descriptions, and to not tell non-heretics what its purpose is. If you liked the old one better, I can revert this change. ## Why It's Good For The Game Grammar good. Accurate descriptions good. ## Changelog 🆑 fix: made some heretic descriptions more accurate spellcheck: improved english of the heretical eldritch patrons /🆑 |
||
|
|
7f7688b60a |
Demotes the "electrical conductivity" flag from flags_1 to obj_flags (#80033)
## About The Pull Request
Code to handle this flag only ever existed on the `/obj` sublevel, so
there's no need for it to be on the `/atom` level `flags_1`. There was
probably a point in time in which mobs or turfs conducted electricity
but there's zero code for it anymore so we truly just live in a society
now.
## Why It's Good For The Game
Frees up a slot on `flags_1` (which is really nice actually), proper
scoping of certain bitflag stuff, etc.
## Changelog
Not relevant to players.
I may have screwed something up, will be doing a few passes on this
myself to ensure all the search and replaces went alright but we should
be good™️
|
||
|
|
3e7eb56041 |
fixes gibtonite bomb (#79038)
## About The Pull Request https://github.com/tgstation/tgstation/assets/70376633/8d15d7c9-51c2-4aeb-b1c6-4386168947da i made it work slightly better too so also this was in the code since like 2015 but it probably got broken sometime also 10 second detonation timer is pretty harmless anyway so ## Why It's Good For The Game bug bad fyi this was added in 2015 https://github.com/tgstation/tgstation/pull/8587 ## Changelog 🆑 fix: making assembly activated bombs works again /🆑 |
||
|
|
e8d12b29fe |
Removes all spawn locations of the awakened plush except the bus ruin (#78559)
It's supposed to be a coderbus easter egg, stop putting it elsewhere. I want it to stay rare enough that it confuses people when it makes it to the station. The secure closet had it on the loot table and due to how that's coded it has to have something replace the slot (or rework the loot spawning code there) so I put a live bomb in the slot instead. 🆑 ninjanomnom del: An easter egg plushie that was spawning where it shouldn't has been brought back home. add: The secure closet can now spawn live gibtonite, enjoy your free bomb. /🆑 |
||
|
|
2d34c7433a |
New Mech UI and equipment refactor (#77221)
 ## About The Pull Request Made a new UI and refactored some mech code in the process. Fixes #66048 Fixes #77051 Fixes #65958 ??? if it was broken Fixes #73051 - see details below Fixes other undocumented things, see changelog. ## Why It's Good For The Game The UI was too bulky and Mechs were too complex for no reason. Now they follow some general rules shared between other SS13 machinery, and there is less magic happening under the hood. ## Detailed Changes ### New Mech UI, Air Tank and Radio as separate modules Previous UI for comparison: <img alt="9SScrXAOjy" src="https://github.com/tgstation/tgstation/assets/3625094/904e3d07-e7d7-4d3a-a062-93e0e35b4b66"> Previously mechs came with radio pre-installed and air canisters magically pre-filled with air even when you build one in fab. Radio and Air Tanks are now both utility modules that are optional to install. Gas RCS thrusters still require Air Tank module to operate. This made the Mechs more barebones when built, giving you only the basic functionality. <img alt="5SDMlXTJxv" src="https://github.com/tgstation/tgstation/assets/3625094/b9364230-49ac-416b-aa70-e851fbf2050e"> To compensate this change, all mechs got two extra utility module slots. All other modules got new UI. And ore box now shows the list of ores inside. <img alt="SRX5FjvsHA" src="https://github.com/tgstation/tgstation/assets/3625094/cbe2e98d-1cd4-4667-8dae-2f9227b4b265"> ### Mounted Radio Works as a normal radio, but with subspace transmission. Available from the basic mech research node and can be printed in fab. ### Cabin Sealing To compensate for the lack of air tank by default, mechs with enclosed cabin (e.g. all except Ripley) got an ability to toggle cabin exposure to the outside air. Exiting the mech makes cabin air automatically exposed. When you seal the cabin, it traps some of the outside air inside the cabin and you can breathe with this air to perform a short space trips. But the oxygen will run out quickly and CO2 will build up. Sealing the cabin in space will make the cabin filled with vacuum, and it will stay there until you return to air environment and unseal the cabin, letting the breathable air to enter. There are temperature and pressure sensors that turn yellow/red when the corresponding warning thresholds are reached. You could also use personal internals in combination with cabin sealing for long space travels, so Air Tank is completely optional now and mostly needed when you need RCS thruster. ### RCS thrusters They are now available earlier in tech tree and consume reasonable amount of air (5 times more than human jetpacks), and they don't work without Mounted Air Tank, unless it's an Ion thruster variant. ### Mounted Air Tank Available from the basic mech research node and can be printed in fab. Built model comes empty, and syndicate mechs come with one full of oxygen. <img alt="GrFDrH5Hwe" src="https://github.com/tgstation/tgstation/assets/3625094/b677b705-bda0-4c8c-96c7-d32bf7bf9f28"> Can be switched to pressurize or not pressurize the cabin. Releases gas only when the cabin is sealed shut. Starts releasing automatically, but can be toggled to not release if you want to use it just as a portable canister. Cabin pressure can now be configured in the module UI instead of Maintenance UI. Can be attached to a pipe network when the mech is parked above a connection port. Comes with a pump that works similarly to the portable pump. It lets you vent the air tank contents outside, or suck air from the room to fill the air tank. Intended to provide an ability to fill the air tank without the need to bother with pipes. Also has gas sensors that display gas mix data of the tank and the cabin (when sealed). ### Stock part changes All mechs now require a servo motor and they reduce mech movement power consumption instead of scanning module. Scanning modules are optional for mech operation (still required to build) and the lack of one disables the following UI elements: - Display of mech integrity (you can still see the alerts or examine the mech to get rough idea) - Display of mech status on internal damage (and you can't repair what you can't diagnose) The rating of scanning module doesn't have any effect as of now. Cargo mech comes without it roundstart. <img alt="2vDtt99oqb" src="https://github.com/tgstation/tgstation/assets/3625094/147144ca-824e-4501-acf5-6ee104f309e7"> Capacitors now also reduce light power usage and raise the overclocking temperature thresholds (see below). ### Maintenance Maintenance UI removed, and its logic migrated to other places. Access modification now managed inside the mech, and anyone who can control the mech, can adjust the access in the same way as they can set DNA key. To open the maintenance panel you just need a screwdriver. It is instant when the mech is empty and it has a 5 second delay when there is an occupant to avoid in-combat hacking and part removal. It will alert the occupant that someone is trying to tinker with their mech.  Once the panel is open, you can see the part ratings:  With open panel you can hack the mech wires (roboticists can now see them): <img alt="mj205G2qDa" src="https://github.com/tgstation/tgstation/assets/3625094/44cea0d1-44b4-4b50-b1d3-a97c0056bab3"> There are wires for: - Enabling/Disabling ID and DNA locks - Toggling mech lights - Toggling mech circuits malfunction (battery drain, sparks) - Toggling mech equipment malfunction (to repair after EMP or cause EMP-like effect, disarming mech) - 3 dud wires that do nothing The hacker may be shocked if the mech power cell allows. When the panel is open and the user has access to the mech, they can remove parts with a crowbar: <img alt="jR40gyTWtJ" src="https://github.com/tgstation/tgstation/assets/3625094/b573f5b9-b8ea-412e-b3e0-c872e01e0c23"> Hitting the mech with an ID from outside now toggles the ID Lock on/off if the ID has sufficient access. ### Power consumption and overclocking Rebalanced mech power consumption. T4 parts were not working in Syndicate Mechs, as their effect was not calculated until you manipulate parts manually. Constructed mechs with t1 parts even had their energy drain reduced with upgrade to t1. Now all mechs apply their base step power usage correctly don't ignore the stock parts. Servo tier now reduces base power consumption by 0% at t1, 50% at t2, 33% at t3 and 25% at t4 Capacitor tier now reduces base power consumption of mele attacks, phasing and light by the same amounts. Gygax leg actuators overload replaced with mech overclocking. Any mech can be overclocked by hacking wires, but only Gygax has a button for toggling it from the Cabin. Now there is an overclock coefficient. 1.5 for Gygax and other mechs, 2 for Dark Gygax. When overclocked, mechs moves N times faster, but consumes N times more power.  While overclocked, mech heats up every second, regardless of movement, and starts receiving internal and integrity damage after a certain temperature threshold. The chance is 0% at the threshold, and 100% at thresholds * 2. The roll happens every tick. Capacitor upgrades this threshold, letting you overclock safely for longer periods.  When you stop overclock, the temperature goes back down. ### Other changes and fixes Concealed weapon bay now doesn't show up when you examine the mech, so it's actually concealed now. New radio module can properly change its frequency, as it didn't work for previous radio. Launcher type weapons were ignoring cooldowns and power usage, so you could spam explosive banana peals, while they should have a 2 second cooldown: <img alt="q5GjUsHwGr" src="https://github.com/tgstation/tgstation/assets/3625094/d102725d-e9e1-4588-9d6c-b9e38b7a6535"> Now this is fixed and all launcher type weapons properly use power and have their cooldowns working. And now they have the kickback effect working (when it pushes you in the opposite direction in zero gravity on throw). Thermoregulator now heats/cools considering heat capacity instead of adding/reducing flat 10 degrees. So you can heat up cabin air quicker if the pressure is low. There were some other sloppy mistakes in mech code, like some functions returning too early, blocking other functionality unintentionally. Fixed these and made some other minor changes and improvements. ## Changelog 🆑 refactor: Refactored Mech UI refactor: Refactored mech radio into a utility module, adding extra slot to all mechs refactor: Refactored mech air tank into a utility module with an air pump, adding extra slot to all mechs refactor: Refactored mech cabin air - there is now a button to seal or unseal cabin to make it airtight or exchanging gases with the environment refactor: Removed mech maintenance UI Access is set in mech UI, and parts are ejected with a crowbar add: Mech now has wires and can be hacked qol: Roboticists now can see MOD suit and mech wires add: Mechs now require servo motor stock part and it affects movement power usage instead of scanning module add: Scanning module absence doesnt block mech movement and hides some UI data instead. Big Bess starts without one. qol: Hitting mech with ID card now toggles ID lock on/off if the card has required access fix: Fixed concealed weapon bay not being concealed on mech examine fix: Fixed mech radio not changing frequency fix: Fixed mech launcher type weapons ignoring specified cooldown fix: Fixed mech launcher type weapons not using specified power amount fix: Fixed mech temperature regulator ignoring gas heat capacity fix: Fixed mech stopping processing other things while not heating internal air fix: Fixed mech being able to leave transit tube in transit fix: Fixed mech internal damage flags working incorrectly fix: Fixed Gygax leg overloading being useless fix: Fixed mechs ignoring their stock parts on creation. Syndicate mechs now stronger against lasers and consume less energy on move. Upgrading from tier 1 to tier 2 doesn't make mech consume MORE energy than before the upgrade. balance: Rebalanced mech energy drain with part upgrades. Base energy drain reduced by 50%, 33%, 25% with upgrades and applies to movement (Servo rating), phasing, punching, light (Capacitor rating). balance: Hydraulic clamp now can force open airlocks balance: Made mech RCS pack consume reasonable amount of gas code: Fixed some other minor bugs and made some minor changes in the mech code /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Sealed101 <cool.bullseye@yandex.ru> Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
07d34fedde | Fixes gibtonite explosions producing flames and flashes (#77344) | ||
|
|
e1762455f0 |
[no gbp] Goliaths make less mess (#77141)
## About The Pull Request In an earlier PR I made Goliaths dig when they are bored. I still like this behaviour as an ambient thing for them to do, but the consequence is that after 30 minutes there were huge piles of sand all over lavaland. While convenient for actually having miners bring glass back to the station, it was an eyesore and too much. To resolve this I have made two changes: - Goliaths dig 1/3 as often as they did before. - Sand (and snow) which are left outside during a storm gets blown away if it's not inside someone's inventory. Together these prevent the accumulation of hundreds of piles of sand. ## Why It's Good For The Game Fixes an unintended consequence of my actions. ## Changelog 🆑 add: Uncollected sand and snow will be blown away by the wind when storms happen (but don't worry, storms also allow those turfs to be freshly dug up again). /🆑 |
||
|
|
c0e46fabf7 |
Standardize Welder Fuel Usage (#76021)
Remove welder fuel usage from all actions except attacking and leaving it on most welder tasks require a minimum of 1u of fuel, some longer tasks require a minimum of 2 or 3u welders now drain 1u every 5 seconds they're active ## About The Pull Request Prior to this PR welder fuel usage was random, a lot of tasks didn't use any welder fuel and welders were basically near infinite so long as you didn't use them for combat, it took 26 seconds of activity to drain 1u of fuel, that means an emergency welder alone could run for 5 minutes straight before needing a refuel After this PR all welders will drain 1u every 5 seconds instead of every 26 seconds, but welding objects won't require extra fuel anymore, making the fuel usage much more consistent. resolves #55018 ## Why It's Good For The Game Actually makes fuel tanks useful and relevant without making it obnoxious to do repetitive quick tasks like turn rods into plates, there's actually a reason to upgrade off the emergency welder now since it lasts 50 seconds rather than 5 minutes ## Changelog 🆑 qol: Welders now have a more consistent fuel usage /🆑 |
||
|
|
830d2e50b4 |
Fixes some stupid airlock sleeps (#75961)
## About The Pull Request [A common problem with explosions is an overabundance of sleeping](https://github.com/tgstation/tgstation/commit/6499077a09469ff401c224c0510bc184c663b118) In an attempt to solve this issue, let's not continue to sleep and do work in door closing if the door is already deleted (This is caused by firelocks activating due to other adjacent objects deleting, triggering an atmos update, and closing the firelocks before they get bombed. I don't have a elegant way of resolving that core problem, so let's just minimize the impact) [Nukes a stupid sleep loop in airlock code](https://github.com/tgstation/tgstation/commit/5b16360520526d6f5aa3b511049456b74f33f430) When an airlock was depowered, it would enter a sleep loop, decrementing its delay by 1 second every well, one second, so long as it had the right wires flipped This is very stupid Instead, let's use signals off wire changes and a combo of timer and remaining time var to do this with JUST a timer Most of the changes here are just swapping over wires to a setter to make signal registration work\ ## Why It's Good For The Game Less sleeping around explosions means less dropped ticks after a bomb goes off. Good just in general Also this excises dumb boomer code and adds some hooks for other devs to use (we should use wires more man) |
||
|
|
142164187d |
Fixes coin values (#76066)
## About The Pull Request This brings coins values back from being severely undervalued after #75437. Coins are supposed to be made of and worth 400 units of mats, but the numbers weren't updated and so they were made of significantly less than that. ## Why It's Good For The Game Brings coins back to what they're supposed to be worth. ## Changelog 🆑 fix: After destroying unfathomable quantities of excess coins, their value is back to what it's supposed to be! /🆑 |
||
|
|
bf880f553a |
Makes industrial gold and regenerative gold spawn random coins. Also adds chococoin to coin spawner. (#75199)
<!-- 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 So they just had list from 6 coins and not random picking of coins, so now its random. It will also spawn chococoin because it's a coin too. But won't spawn `coin/gold/debug` because it's debug and eldritch coin because comxy asked about it. Added chococoin to `/obj/effect/spawner/random/entertainment/coin` and holdables list of wallet. <!-- 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 Random is funny. <!-- 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. --> 🆑 add: Indusrial Gold and Regenerative Gold extracts now spawn random coins and not just list of 6 coins. But no mythril as it has miserable chance to have summoning effect which have even more miserable chance to spawn something dangerous and not just mice. add: Chococoin now has a chance to spawn wherever the coins are used to spawn (wallets, greed ruins, deltastation bar) /🆑 <!-- 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. --> --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> |
||
|
|
1a918a2e14 |
Golem Rework (#74197)
This PR implements this design document: https://hackmd.io/@Y6uzGFDGSXKRaWDNicSiEg/BkRr176st Put briefly, this will remove every existing golem subtype and consolidate golems into a single species with cool new sprites. NOT implemented from that PR is the ability to eat Telecrystals, I couldn't come up with an appropriate visual that can stack with the existing ones, but that should be a reasonably trivial add for a future artist & developer. New Golems have a food-based mechanic where their hunger decays pretty quickly and can only be replenished by eating minerals. They start moving slower as they get hungrier, until eventually they become completely immobilised and need to be rescued. Eating different kinds of minerals will visually change your sprite and give you a special effect in a similar way to old golems, but temporary. While transformed, you can't eat any other kind of mineral which would transform you (but can still consume glass). To see the full list of effects, look at the hackmd above. In service of these sprites working I have refactored the `species/offset_features` feature by killing it and delegating that responsibility to limbs instead. Rather than applying an offset to items due to your species, it is due to your weird head or arms. This makes overall more sense to me, but it inflates the code changes in this PR somewhat. It doesn't make a lot of sense to atomise unfortunately because that code also seemed to be entirely unused until I tried to use it in this PR, so you wouldn't be able to tell if my changes broke anything. I might make a downstream sad by doing this. All of the actual numbers in this PR are made up and only loosely tested, it will need some testmerges to gather feedback about whether it sucks or not. Other relevant changes: I reworked how bioscrambling works based off bodypart bodytypes, to automatically exclude golem limbs in either direction. There's really no way to have those work on humans or vice versa. Organs still fly though. |
||
|
|
1b5c0489a4 |
ex_act() will work on basic mobs again (lol) + Unit Test (#74953)
basically ex_act's implementation on basic mobs would call parent and then react to it's value, this is presumably to do the first check about space vine mutations and whatever. the problem is that the `/mob/living` implementation would itself also call parent, and that would always return null because `/atom/proc/ex_act` doesn't have a set return value. So, this simply would _always_ early return, with ex_act presumably *never* working on basic mobs for at least four months now. I decided to then change up the return values for pretty much all implementations of `ex_act()` since there was no rhyme or reason to returning null/FALSE/TRUE, and documenting why it's like that. Just to make sure I wasn't breaking anything doing this (at least on base implementations), I wrote a unit test for all of the three major physical types in game (objs, mobs, turfs) because i am a paranoid fuckar. we should be good to go now though. ## Why It's Good For The Game i noticed this because placing c4's on sargeant araneus wouldn't actually damage it whatsoever. now it actually does the stated 30 damage, but araneus has like 250 health so it doesn't actually matter in the long run. whatever at least it does the damn 30 now. also adds a unit test for this specific case as well as a range of other cases to ensure this stuff doesn't silently break in this way anymore |
||
|
|
f2fd69a49a |
Minerals have been refactored so costs and minerals in items are now in terms of mineral defines. (#75052)
Ladies, Gentlemen, Gamers. You're probably wondering why I've called you all here (through the automatic reviewer request system). So, mineral balance! Mineral balance is less a balance and more of a nervous white dude juggling spinning plates on a high-wire on his first day. The fact it hasn't failed after going on this long is a miracle in and of itself. This PR does not change mineral balance. What this does is moves over every individual cost, both in crafting recipes attached to an object over to a define based system. We have 3 defines: `sheet_material_amount=2000` . Stock standard mineral sheet. This being our central mineral unit, this is used for all costs 2000+. `half_sheet_material_amount=1000` . Same as above, but using iron rods as our inbetween for costs of 1000-1999. `small_material_amount=100` . This hits 1-999. This covers... a startlingly large amount of the codebase. It's feast or famine out here in terms of mineral costs as a result, items are either sheets upon sheets, or some fraction of small mats. Shout out to riot darts for being the worst material cost in the game. I will not elaborate. Regardless, this has no functional change, but it sets the groundwork for making future changes to material costs much, MUCH easier, and moves over to a single, standardized set of units to help enforce coding standards on new items, and will bring up lots of uncomfortable balance questions down the line. For now though, this serves as some rough boundaries on how items costs are related, and will make adjusting these values easier going forward. Except for foam darts. I did round up foam darts. Adjusting mineral balance on the macro scale will be as simple as changing the aforementioned mineral defines, where the alternative is a rats nest of magic number defines. ~~No seriously, 11.25 iron for a foam dart are you kidding me what is the POINT WHY NOT JUST MAKE IT 11~~ Items individual numbers have not been adjusted yet, but we can standardize how the conversation can be held and actually GET SOMEWHERE on material balance as opposed to throwing our hands up or ignoring it for another 10 years. |
||
|
|
5965a156c0 |
You can now move dirt (#75028)
## About The Pull Request Changed the recipe for dirt piles from 3 sandstone bricks to 3 sand. And made the dirt pile drop these 3 sand on deconstruction instead of just disappearing.  Also fixed hydrotrays resetting their water and nutriments on construction. ## Why It's Good For The Game You could accidentally click on the wrong mouse button and loose your dirt pile instead of uprooting a plant. And it didn't make sense why you would need to turn sand into bricks before making a pile out of it. ## Changelog 🆑 qol: Dirt pile is crafted from sand instead of sandstone and drops it on deconstruction fix: You can't have free water and nutriments by rebuilding hydrotray /🆑 |
||
|
|
ac5236a251 |
Refactors sheet crafting to better support directional construction (#74572)
## About The Pull Request https://github.com/tgstation/tgstation/blob/0426f7ddbaa91439c7278189101f5db9c7f2ed95/code/game/objects/items/stacks/stack.dm#L449 Ok, but can we not? This PR refactors sheet crafting to generalize all the cases that were previously locked behind grille/window type checks and such. In their stead there are bitflags that can be set to achieve certain behaviors. All the behavior from before should be preserved, but now it can be extended to other items. E.g. if you want a railing that can be crafted underneath directional windows, or an item that behaves like a grille does--it's just a matter of setting the right obj_flags for it now. This makes it very simple and painless to add new recipes that use directional crafting! It's all modular now. <details><summary>Details</summary> --- ### What I've done: -Eliminated all the type checks, instead it will now be handled by object flags and recipe vars, making for a much more configurable system. -Added two new obj_flags: `BLOCKS_CONSTRUCTION_DIR` and `IGNORE_DENSITY`. -Additionally, I renamed the existing flag `NO_BUILD` to `BLOCKS_CONSTRUCTION`. -Changes the proc `valid_window_location` to `valid_build_direction`, and makes it work for things other than windows. -Removed a deprecated `window_checks` var from the stack_recipe datum. -Added three more vars to the stack_recipe datum: `check_direction` and `check_density`, `is_fulltile` -Decoupled `on_solid_ground` from the object density check. Now you can set those separately, allowing you to make recipes that forbid/allow building things over other things while in space. --- ### What the new flags do: `BLOCKS_CONSTRUCTION` works as before---prevents objects from being built on the object. I felt that the previous name was not descriptive enough, you should know exactly what it does just from looking at the name. _example: dna scanner_ `BLOCKS_CONSTRUCTION_DIR` -- setting this on an object will prevent objects from being built on it when their directions are the same. _example: directional windows, windoors, railings_ `IGNORE_DENSITY` -- setting this on an object will cause its density to be ignored when performing the construction density check. This could have other potential uses as well in the future. _example: grilles, directional windows, tables_ These three flags cover all the bases for the types of items that are currently craftable, so there is no more need for any type checking or weird snowflake window checks. Simply set the appropriate flag and it'll work as you would expect. --- ### What the recipe vars do: `check_direction` tells the recipe to check if there's something in that direction with the `BLOCKS_CONSTRUCTION_DIR` flag set. `check_density` tells the recipe to run the density check when set. This is true by default. There are very few items in the game that currently have this set to false--namely grilles. Setting this to false will make it so that the object can be constructed regardless of what is in that tile (unless `one_per_turf` is also set, which will make it so that you can't craft the same thing twice in the same turf). `is_fulltile` is used for fulltile windows, but it doesn't necessarily have to be--you can give this to any recipe and it will adopt the same properties as that of the fulltile window. Basically they have a special case where they shouldn't be able to be built over directional constructions, where normally things would be able to be. Setting this makes check_direction true as well. --- ### In summary: Sheet crafting still works just as it did before. But the backend of it has gotten a glow up and will be able to more easily support new behaviors. </details> ## Why It's Good For The Game This makes the crafting system much more flexible to add recipes to, and will prevent bad code practices of stacking more conditionals down the line whenever someone wants to add an item that behaves like grilles or directional windows in how they are constructed. It had to be done. Those window checks were a mess. ## Changelog 🆑 qol: added fifty stack versions of remaining glass sheet stacks for ease of debugging refactor: refactored sheet crafting to better support directional constructions that aren't windows /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
73ba9046df |
[Ready] New Cosmic Heretic Path DLC (#73915)
## About The Pull Request This PR adds a new Cosmic Heretic.      Main Paths: - Eternal Gate: Opens up the Path of Cosmos to you. Allows you to transmute a sheet of plasma and a knife into an Cosmic Blade. You can only create two at a time. - Grasp of Cosmos: Your Mansus Grasp will give people a star mark (cosmic ring) and create a cosmic field where you stand. - Cosmic Runes: Grants you Cosmic Runes, a spell that creates two runes linked with eachother for easy teleportation. Only the entity activating the rune will get transported, and it can be used by anyone without a star mark. - Mark of Cosmos: Your Mansus Grasp now applies the Mark of Cosmos. The mark is triggered from an attack with your Cosmic Blade. When triggered, the victim transport back to the Cosmic Diamond, which is the location your mark was applied to them. After getting transported they will be paralyzed for 2 seconds. - Star Touch: Grants you Star Touch, a spell that will give people a star mark (cosmic ring) and create a cosmic field where you stand. People that already have a star mark will be forced to sleep for 4 seconds. When the victim is hit it also creates a beam that deals a bit of fire damage and damages the cells. The beam lasts a minute, until the beam is obstructed or until a new target has been found. Can remove Cosmig Runes and teleport you to your Star Gazer when used in hand. - Star Blast: Fires a projectile that moves very slowly and create a cosmic field on impact. Anyone hit by the projectile will recieve burn damage, a knockdown and a star mark. - Cosmic Blade: our blade now deals damage to peoples cells through cosmic radiation. - Cosmic Expansion: Grants you Cosmic Expansion, a spell that creates a 3x3 area of cosmic fields around you. Nearby beings will also receive a star mark. - Creators's Gift: The ascension ritual of the Path of Cosmos. Bring 3 corpses with bluespacedust in their body to a transmutation rune to complete the ritual. When completed, you become the owner of a Star Gazer. You will be able to command the Star Gazer with Alt+click. You can also give it commands through speech. The Star Gazer is a strong mob that can even break down reinforced walls. Star Touch can now teleport you to your Star Gazer when Star Touch is used in hand." Side Paths: - Ash-Cosmic: Fire Fish: Allows you to transmute a pool of ash, eyes, and a sheet of plasma into a Fire Shark. Fire Sharks are fast and strong in groups, but are bad at combat. - Ash-Cosmic: Curse of The Stars: Allows you to transmute a bluespace crystal, a pool of ash, and a liver to cast a Curse of The Stars on a crew member. While cursed, the victim will recieve a star mark that lasts for at least 3 minutes. This star mark makes it so that the crew member cannot enter cosmic carpet fields. The victim will also recieve a cosmic carpet trail for at least 3 minutes. - Ash-Cosmic: Eldritch Coin: Allows you to transmute a sheet of plasma, a diamond and eyes to create an Eldritch Coin. The coin will heals when landing on heads and damages when landing on tails. The coin will heal for more, but only for heretics. Extra ability information: - Star Mark: This is a status effect that prevents people from walking into cosmic fields. - Cosmig Fields: Only block entities marked with a star mark, projectiles or throwing items will still work. Lasts only 30 seconds and 5 seconds for the Cosmig Trail trait. Some things I wanted to mention: - Why the Star Gazer is balanced: It has 3000 health and can kill people pretty fast, but at the same time, anyone can space the Star Gazer and lead it away from the heretic if they do not pay attention. - The Cosmic Heretics balancing has been carefully considered. It is relatively weak in group situations but strong in one to one combat. - Balance changes can also be made after the PR gets merged need be, or it can be test merged first. ## Why It's Good For The Game New heretic path means more choice and a different play style. ## Changelog 🆑 add: Adds new Cosmic Heretic. soundadd: Adds Cosmic Heretic sounds. imageadd: Adds Cosmic Heretic sprites. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
ccef887efe |
Lints Against Unmanaged Local Defines (#74333)
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW RATHER THAN AFTER THE FACT. ## About The Pull Request Hey there, This took a while to do, but here's the gist: Python file now regexes every file in `/code` except for those that have some valid reason to be tacking on more global defines. Some of those reasons are simply just that I don't have the time right now (doing what you see in this PR took a few hours) to refactor and parse what should belong and what should be thrown out. For the time being though, this PR will at least _halt_ people making the mistake of not `#undef`ing any files they `#define` "locally", or within the scope of a file. Most people forget to do this and this leads to a lot of mess later on due to how many variables can be unmanaged on the global level. I've made this mistake, you've made this mistake, it's a common thing. Let's automatically check for it so it can be fixed no-stress. Scenarios this PR corrects: * Forgetting to undef a define but undeffing others. * Not undeffing any defines in your file. * Earmarking a define as a "file local" define, but not defining it. * Having a define be a "file local" define, but having it be used elsewhere. * Having a "local" define not even be in the file that it only shows up in. * Having a completely unused define* (* I kept some of these because they seemed important... Others were junked.) ## Why It's Good For The Game If you wanna use it across multiple files, no reason to not make it a global define (maybe there's a few reasons but let's assume that this is the 95% case). Let me know if you don't like how I re-arranged some of the defines and how you'd rather see it be implemented, and I'd be happy to do that. This was mostly just "eh does it need it or not" sorta stuff. I used a pretty cool way to detect if we should use the standardized GitHub "error" output, you can see the results of that here https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792 ## Changelog Nothing that really concerns players. (I fixed up all this stuff using vscode, no regexes beyond what you see in the python script. sorry downstreams) |
||
|
|
b702ebd0e2 |
TGC rulebook added to the card battle arena and fixes a bug with holographic TGC coins (#72595)
## About The Pull Request The coins spawned by the TGC holodeck arena had monetary value and could be used as an infinite source of income, they've been replaced with a worthless subtype. Also a small QoL change since I've seen people looking for it ICly but I've added a rulebook to the holodeck so people can access the wiki page directly. ## Why It's Good For The Game Infinite money exploit bad and I've watched multiple people go hunting for a non-existent rulebook. ## Changelog 🆑 qol: Rulebook for TGC has been added to the TGC arena. fix: Holographic TGC coins are no longer legal tender and cannot be inserted into your ID. /🆑 |
||
|
|
0d4b56435b |
Converts drowsy and eye blur to status effects, striking yet another two carbon level status vars (#71950)
## About The Pull Request You know the deal by now. - Drowsiness is now tracked via status effect. - Eye blue is now tracked via status effect. In converting these over, cleaned up a bit of code relating to some other effects. Attempts to unify behavior between some of them, namely certain biotypes or mob types shouldn't be experiencing certain effects. ## Why It's Good For The Game More stuff moved to status effects, slightly more cleaner and better to work with code. Allows for all mobs that can sleep to be able to get drowsy, too. ## Changelog 🆑 Melbert refactor: Drowsiness and Blurred Eyes are now tracked via status effect. /🆑 |
||
|
|
0818d6ae4c |
Crafting/Cooking menu update (#71779)
## About The Pull Request Updated crafting menu, adding a lot of new functions and recipes that were not in the crafting menu before. <img alt="cult" src="https://user-images.githubusercontent.com/3625094/206009533-aec3a1dd-cbe5-45eb-8515-1b75fabb65c5.PNG"> <img alt="nH77dLyyGx" src="https://user-images.githubusercontent.com/3625094/206009786-b6706f70-0599-40bf-b051-8f499de43abd.png">  https://user-images.githubusercontent.com/3625094/206009841-738e4a03-0660-45b7-8d83-15eeb6501967.mp4 ## Why It's Good For The Game It is easier to use, and it has a lot of recipes that were spread throughout the game, some of which weren't even on the wiki. Crafting and cooking now count about 1200 recipes in total, including conditionally available ones. ## Changelog 🆑 qol: Rewrote the crafting/cooking menu UI qol: Split crafting and cooking menus in two different menus qol: Crafting is no longer blocking the entire UI, only the "Make" buttons are disabled qol: Added stack crafting recipes to the crafting menu qol: Added cooking recipes that were absent in the crafting menu before (tool recipes, machine recipes, reactions) qol: Added option to search recipes by title qol: Added option to filter recipes by required materials/ingredients qol: Added food types to the cooking menu, highlighting diet of your species (liked, disliked foods) qol: Added total nutrition value of the result to the cooking menu qol: Added option to filter cooking recipes by the food type of the resulting food qol: Added "Can make" category that lists all currently craftable recipes throughout all categories refactor: changed categories and reshuffled some items in them code: Reagents now have default container to get an icon from the reagent datum code: Objects now have `desc_controls` var for OOC information about mouse controls that are visible on examine, but not in the description fix: Fixed alignment on many food icons fix: Fixed missing icon for beef stroganoff /🆑 Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com> |
||
|
|
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>
|
||
|
|
ad5debaaa1 |
Add investigate_deaths (#71112)
## About The Pull Request Adds INVESTIGATE_DEATHS, an investigate category intended to better show causes of death.   Also makes suicide_act take a `mob/living` as an argument instead of a `mob`, and some minor style improvements since apparently I hate atomicity. ## Why It's Good For The Game Inspired by a mysterious death and dusting. More logging and leads for admins investigating deaths. Also fixes #59028 ## Changelog 🆑 Tattle admin: added investigate deaths to shed some more light on unusual demises, dustings, and gibbings /🆑 Co-authored-by: tattle <article.disaster@gmail.com> |