mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-02 12:36:39 +01:00
ba5c112a86bb2845df830df81d59cd54ca8ac99f
5000 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ba5c112a86 |
Huge Mirror fixes (#27488)
* Fixes incorrect operator usage in mecha code (#82570)
## About The Pull Request
I completely screwed up and told the original PR author of #82415
(
|
||
|
|
91946bbab6 |
Cherry-pick of all NO DESTRUCTION (#27477)
* [NO GBP] Patches & renaming for `NO_DECONSTRUCTION` flag (#82547) ## About The Pull Request 1. Renames `NO_DECONSTRUCTION` -> `NO_DEBRIS_AFTER_DECONSTRUCTION`. As the name suggests when the object is deconstructed it won't drop any items/debris. After my last refactor for this flag it now serves a new purpose so its name has been changed to match that 2. Fixes objects that are now using `NO_DECONSTRUCTION` incorrectly. Some of these changes include - Removing the flag in objects where there are no means to deconstruct them (e.g. jukebox, hydroponics soil, flora etc) - Replacing the flags old purpose by overriding its tool procs so that it regains its old behaviour(e.g. You once again cannot deconstruct ctf reinforced tables, survival pods, indestructible windows etc) ## Changelog 🆑 code: renamed `NO_DECONSTRUCTION` to `NO_DEBRIS_AFTER_DECONSTRUCTION` so its name matches its intended purpose fix: fixes some items that incorrectly used `NO_DECONSTRUCTION` prior to its refactor, meaning makes some objects non deconstructable again /🆑 * NO DESTRUCTION * Linter fix * Fixes standard RPEDs not working on machines (#82528) ## About The Pull Request Previously, `exchange_parts(...)` would cancel if both the `NO_DECONSTRUCTION` flag was set and you couldn't use your part replacer from a distance. https://github.com/tgstation/tgstation/blob/1583cf0cc968cd9f5da2398035feb8d70d58bcf2/code/game/machinery/_machinery.dm#L958-L959 Our recent removal of `NO_DECONSTRUCTION`, however, has left this to _only_ be the latter. https://github.com/tgstation/tgstation/blob/f0ed4ba4ce6b114509c10ee2f36ab0af6d7c81d2/code/game/machinery/_machinery.dm#L956-L957 Buuuuut this makes it unconditionally cancel for normal RPEDs, instead of only blocking them if `NO_DECONSTRUCTION` was set. As `NO_DECONSTRUCTION` is very much no longer relevant for this purpose, we simply remove the ranged RPED check altogether. This fixes our issue. ## Why It's Good For The Game Fixes #82525. ## Changelog 🆑 fix: Standard RPEDs work on machines again. /🆑 * Machinery Destroy() side effect clean up (#82659) ## About The Pull Request I have combed over implementations of `Destroy()` for `obj/machinery`, and noticed quite a few was spawning items or playing sounds. **Slot machines**: Moved payout to on_deconstruction() **Windoors**: Break sound moved to on_deconstruction(). I have also slightly cleaned up Destroy(), the windoor calls air_update_turf directly, as that proc already retrieves the turf it is on. **Atmospheric pipe**: Releases air and deconstructs meter objects on_deconstruction(). **Portable atmospheric devices**: Drop hyper noblium crystal on on_destruction(). **Pump, Scrubbers**: Releases air on_deconstruction(). **PACMAN power generator**: Spawns dropped fuel on_deconstruction(). **Runic vendor**: Moved vanishing effects to on_deconstruction(). I did not change Destroy side effects in the following instances: - side effects are critical for the round (e.g. doomsday device, nuke, blackbox recorder dropping the tape, gulag item reclaimer [less critical but still]) - might spawn messages and noises, but moving them to on_deconstruct would put linked items into an unusable state if deleted directly (e.g. express order console, cyborg lockdown console, tram paired sensors) - would potentially delete mobs we don't want deleted (e.g. disposals, slime camera console) Out of 220 Destroy defines, I found only 8 side effects that could not be moved to other procs, so `machinery\Destroy()` has almost always been used properly! I really hope `structure` will be as well made. Other changes: - Stasis beds had a completely empty destroy, removed - Mass drivers had two destroy procs, merged ## Why It's Good For The Game The Destroy() proc should only contain reference clean ups, barring edge cases that would harm playability. ## Changelog Nothing player facing. * Fix linter * icon fix * icon fix again --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: Profakos <profakos@gmail.com> |
||
|
|
7aa6664021 |
Mirror (#27453)
* Fix Conflicts * Change COGBAR_ANIMATION_TIME to seconds and not deciseconds (#82530) Most people should not be using this define * New Battle Arcade (#81810) Remakes Battle Arcade from just about the ground up, with exceptions taken for emagged stuff since I didn't really want to touch its behavior. The Battle Arcade now has stages that players can go through, unlocking a stage by beating 2 enemies and the boss of the previous one, but this must all be done in a row. You can choose to take a break between each battle and there's a good chance you'll sleep just fine but there's also a chance it can go wrong either through an ambush or robbery. The Inn lets you restore everything for 15 gold and you can buy a sword and armor, each level you unlock is a new sword and armor pair you can buy that's better than the last, it's 30 gold each but scales up as you progress through levels. They are really worth getting so it's best to try to not lose your money early in. The battle system is nearly the same as how it was before but I removed the poor combo system that plagued the old arcade as one big knowledge lock, now it's more just turn based. The game is built on permadeath so dying means you restart from the beginning, but if you are going to lose you can try to escape instead which costs you half of your gold. Getting to higher levels increases the difficulty of enemies but also increases the gaming exp rewards which could make this a better way to get exp if you can get good at it. Gaming EXP is used to increase chances of counterattacking but doesn't give any extra health to the player. I also removed the exploit of being able to screwdriver arcade cabinets because people would do that if they thought they were on the verge of losing to bypass the effects of loss. I instead replaced it with a new interaction that the Curator's display case key can be used to reset arcade cabinets (there's several keys on the chain so it made sense to me), which I added solely because I thought Curators would be the type of person to have run an actual arcade. This is some gameplay https://github.com/tgstation/tgstation/assets/53777086/499083f5-75cc-43b5-b457-017a012beede As a misc sidenote, I also split up the arcade file just like how Orion Trail was before, just for neat code organization. The Inn keeper is straight up just a photo of my localhost dude, he's not a player reference or anything it's not my actual character. I also have no idea how well balanced this is cause I suck at it lol. Battle Arcade is one of 3 last machines in my hackmd here to turn into TGUI https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view I've always thought the current version of battle arcade is quite lame and lacks any progression, like Orion Trail I thought that since I was moving this to TGUI, it would also be a perfect opportunity to revamp it and try to improve on where it failed before, especially since the alternative (NTOS Arcade) is also lame as hell and is even lamer than HTML battle arcade (spam mana, then spam health, then just spam attack, rinse and repeat). This will hopefully be more entertaining and give players sense that they are getting through a series of tasks rather than doing one same one again and again. 🆑 JohnFulpWillard, Zeek the Rat add: Battle Arcade has been completely overhauled in a new progression system, this time using TGUI. add: The Curator's keys can now reset arcade cabinets. balance: You now need to be literate to play arcade games, except for Mediborg's Amputation Adventure. fix: You can no longer screwdriver emagged arcade consoles. Accept your fate. fix: Silicons can no longer play Mediborg's Amputation Adventure. /🆑 --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> * Change setting item weight class to a setter to patch some weight class related shenanigans (#82494) ## About The Pull Request Fixes #81052 Fixes #58008 Setting weight class of items is now done via `update_weight_class`. I updated as many occurrences of manually setting `w_class` as I could find but I may have missed some. Let me know if you know of any I missed. This is done to allow datums to react to an item having its weight class changed. Humans and atom storage are two such datums which now react to having an item in its contents change weight class, to allow it to expel items that grow to a weight class beyond what is normally allowed. ## Changelog 🆑 Melbert fix: You can't fit items which are normally too large for a storage by fitting it in the storage when it is small, then growing it to a larger size. /🆑 * Material datum color update, plus touching up some material items (knight armor, tiles) (#82500) ## About The Pull Request Tries to bring the material datum colors in closer approximation to the stacks they're attached too. I literally used the colors on the stacks. some might need to be lighter or darker, but for the most part they'll look...closer to their actual material hues.  I've also tweaked the sprites of both the tile object and the actual material tile turf to give it the right shading.  In addition to the tiles, I've also updated the knight armor and helmet to look closer to the much higher quality plate armor already in the game. ## Why It's Good For The Game It bothered me that the material datum coloring was inconsistent with the actual colors used for the material stacks. When they were updated, and even before they were updated, material datum stuff just never looked _right_. I wanted to change that so that it looks just right. I did not like the old material knight armor whatsoever. It was a dithered mess, and seemed to already use parts of the standard plate armor but with all the actual shading removed or replaced with the wrong colors. This fixes that so that the armor is actually readable for what it is. ## Changelog 🆑 image: Updates the colors of various material datum to bring them closer in-line with their actual material stacks image: Improves the sprites for the material knight armor and helmet. /🆑 * LateInitialize is not allowed to call parent anymore (#82540) ## About The Pull Request I've seen a few cases in the past where LateInitialize is done cause of the init return value being set to do so for no real reason, I thought I should try to avoid that by ensuring LateInitialize isn't ever called without overriding. This fixes a ton of machine's LateInitialize not calling parent (mechpad, door buttons, message monitor, a lot of tram machines, abductor console, holodeck computer & disposal bin), avoiding having to set itself up to be connected to power. If they were intended to not connect to power, they should be using ``NO_POWER_USE`` instead. Also removes a ton of returns to LateInit when it's already getting it from parent regardless (many cases of that in machine code). ## Why It's Good For The Game I think this is better for coding standard reasons as well as just making sure we're not calling this proc on things that does absolutely nothing with them. A machine not using power can be seen evidently not using power with ``NO_POWER_USE``, not so much if it's LateInitialize not calling parent. ## Changelog 🆑 fix: Mech pads, door buttons, message monitors, tram machines, abductor consoles & holodeck computers now use power. /🆑 * Fix table top deconstruction (#82508) ## About The Pull Request Edited: updated changelog, read comments for changes in implementation details So previously, tables would let you use a wrench to fully deconstruct them, or a screwdriver to take off only their top. This, however, broke in two different ways in #82280, when their deconstruction logic got changed. First off, deconstructed tables would only drop the materials for their top and not their frame. For this, the primary culprit seems to be on line 307: https://github.com/tgstation/tgstation/blob/c34d56a45b0461f5e0fad3cc75e81580c3357119/code/game/objects/structures/tables_racks.dm#L300-L307 Where `new framestack(target_turf, framestackamount)` accidentally got an extra indent, and ended up in the less common half of the if-else chain. Just moving this outside of the if-else chain again fixes it. Secondly, tables had their own special deconstruction logic, which got 'standardized'. Issue. This was special to accommodate for having two different deconstruction logics: full or top only. With `deconstruct(...)` no longer being overridable, I feel it's awkward to attempt to proxy that information to the new `atom_deconstruct(...)` So we introduce a new method, `deconstruct_top`, for the screwdriver to use, which handles deconstructing only the top. ```dm /obj/structure/table/proc/deconstruct_top() var/obj/table_frame = new frame(loc) if(obj_flags & NO_DECONSTRUCTION) table_frame.obj_flags |= NO_DECONSTRUCTION else // Mimic deconstruction logic, only drop our materials without NO_DECONSTRUCTION var/turf/target_turf = get_turf(src) drop_top_mats(target_turf) qdel(src) ``` Mimicking the `NO_DECONSTRUCTION` logic of normal deconstruction, and copying over the flag onto its frames if need be. This fixes screwdriver deconstruction. ## Why It's Good For The Game Fixes #82503. We can now deconstruct the table top separately again, AND get the right materials back too. ## Changelog 🆑 00-Steven, SyncIt21 fix: Wrench table deconstruction gives the right materials again. fix: Screwdriver table deconstruction only deconstructs the top again. /🆑 * [NO GBP] Reagent grinders display reagents on examination (#82535) ## About The Pull Request - Fixes #82531 Somehow omitted this during the general maintenance thing ## Changelog 🆑 fix: Reagent grinders display reagents of its beaker on examination /🆑 * Monkeys now use height offset (and monkey tail works) (#81598) This PR adds the ability for monkeys to wear any jumpsuit in the game, and adds support for them to wear things like coats, gloves, and shoes (though this cannot be obtained in-game and is solely achieved through admins, which I also improved a bit upon by adding a defined bitfield for no equip flags). This reverts a lot of changes from https://github.com/tgstation/tgstation/pull/73325 - We no longer check height from limbs and such to bring sprites down, instead monkeys now work more similarly to humans, so the entire PR was made irrelevant, and I didn't really want to leave around dead code for the sake of having a human with longer legs. I've now also added support for Dwarfism, which makes monkeys look even smaller. Very minor change but at least now the mutation doesn't feel like it does literally nothing to monkeys (since they can already walk over tables). Here's a few examples of how it can appear in game (purely for demonstration, as it is currently intentionally made impossible to obtain in-game, though if someone wants to change that post-this PR now that support is added, feel free): Tails have been broken for a while now, the only reason you see them in-game is because they are baked into the monkey sprites. This fixes that, which means humans can now get monkey tails implanted into them (hell yeah) and monkeys can have their tails removed (also hell yeah) * Gets [weird] with (spies) by adding protect and deuteragonist-flavored objectives. (#82447) ## About The Pull Request What are their goals? Why are they doing this? gets weird with Spy objectives - namely by adding a lot more ways spies might be asked to affect various targets around the station. the first of these is by several flavors of Protecting targets (these do NOT print a success at roundend in keeping with Spy design:) - Protect (get a humanoid target off alive) - Protect Nonhuman (get an entity off alive) - Jailbreak (make sure a humanoid target escapes free) - Detain (make sure a humanoid target gets taken out arrested) the second of this is by a new escape condition: - Exile (get off-station or off the Z-level by the end of the shift - sometimes it's not just pods, you need to fuck off to space to win.) the third is through a massive increase in the number of possible: - objective templates - departments to target (Command + Service added) - specific locations to target - general classes of objects to target (medicines, floor tiles, critical infrastructure, etc.) - efforts to target (such as meals, mechs, public supplies) - ways to leave (you can be asked to abscond from the scene of your crimes?) ## Why It's Good For The Game More goofy and weird prompts to do more interesting things with Spies. One thing I think we're sorely missing in our lineup is antagonists that can act a bit more as deuteragonists - very possibly helping the crew under certain conditions and frustrating the Hell out of them in others. Since there's no way to check their objectives, and they get their gear/progression through stealing shit, they're still very much an antagonist and exist under the suspicion of doing bad... but, just going by their objectives, introducing more varied (and in some cases even benign) goals for them creates suggestions pointing to a lot more varied and interesting stories if people choose to run with it. * Adds anosmia quirk (#82206) ## About The Pull Request Adds anosmia quirk. Anosmia, also known as smell blindness, is the loss of the ability to detect one or more smells. I tried to find all smells action and (most likely) update all of them, unfortunately I can't change descriptions for this quirk. ## Why It's Good For The Game Some characters will be able to not feel smells That affect: * Gases feelings and alerts (CO2, Plasma, miasm) - you don't feel them * Bakery and cooking * Changeling ability to feel other changelings by smell * Some unimportant spans * Explosions Part I - Directional Explosions (#82429) ## About The Pull Request Adds the ability for explosions to be directional. This is achieved by adding an angle check to `prepare_explosion_turfs()` to drop any turfs outside the cone of the explosion. If the arc covers a full 360 degrees, as is the default, it will accept all the turfs without performing the angle check. Uses this functionality to rework both rocket launcher backblast and X4 explosions. Rocket launcher backblast has been changed from a shotgun of indendiary bullets to a directional explosion of similar length. X4 now uses a directional explosion to "ensure user safety". Apparently the old method of moving the explosion one tile away didn't even work, as it blew up `target` before trying to check its density for the directional behaviour. https://youtu.be/Mzdt7d7Le2Y ## Why It's Good For The Game Directional explosions - Useful functionality for a range of potential use cases, which can be implemented with minimal extra processing cost (Worst case scenario being very large directional explosions) Backblast - Looks way cooler than a bunch of projectiles, and should be significantly more functional in high-lag situations where projectile code tends to get fucky X4 - More predictable for players wanting to use it as a breaching charge, you can actually stand near the charge and not have to worry about being hoist upon your own petard. ## Changelog 🆑 add: Added support for directional explosions. add: Rocket launcher backblast is now 271% more explosive, check your six for friendlies! add: X4 charges now explode in a cone away from the user when placed on a sufficiently solid object. fix: X4 charges will now behave correctly when placed on dense atoms (note: don't try to read a variable from an atom you just blew up) /🆑 * Add balloon alerts to plunging (#82559) ## About The Pull Request Makes all plunging actions (pretty much anything using `plunger_act`) have a visible balloon alert. ## Why It's Good For The Game Makes sense that others would easily notice you plunging the shit out of something. Also, more people might finally learn that you can plunge the vent clogs instead of welding them. ## Changelog 🆑 qol: Added balloon alerts whenever you start plunging something (i.e ) /🆑 * Fixes spurious runtime on Icemoon caused by turf calling unimplemented LateInitialize() (#82572) ## About The Pull Request As of https://github.com/tgstation/tgstation/pull/82540 this runtime was happening,  `/turf/open/openspace/icemoon/` can be changed to `/turf/open/misc/asteroid/snow/icemoon/do_not_chasm` before `Initialize()` returns, which resulted in it `INITIALIZE_HINT_LATELOAD` getting returned on a turf that does not have an implementation of that proc. This should fix that. ## Why It's Good For The Game Fixes CI error * Blueprints tgui (#82565) Blueprints now use a TGUI panel instead of the old HTML one. Also did general code improvement and maintaining to blueprints in general and also destroyed the ``areaeditor`` level, repathing it to just 'blueprints'. Also adds a sound when you look at structural data cause why not Video demonstration: https://github.com/tgstation/tgstation/assets/53777086/861773fd-3d57-472d-bc94-d67b0d4f1dbd The 4 blueprint types:  Another HTML menu dead underground. This is more responsive and doesn't require constant updating to see which area you're in, feels less OOC (instead of saying "the blueprints say", just say it, you ARE the blueprints). Like, come on  Look at all this wasted space  🆑 refactor: Blueprints now use TGUI. qol: Blueprints can now be used while lying down. /🆑 * General maintenance for chem master (#82002) **1. Qol** - Adds screen tips & examines for screwdriver, wrench, crowbar & beaker insertion, removal & replacing actions - Analyzing reagents is now a client side feature & not a back end mode, meaning one person can see details of a reagent while the other can print stuff and do other operations so it's a non blocking operation. This also means 2 players can see information of 2 different reagents in their own screens, With that the overlay for analysis mode has been removed - You cannot do any tool acts on machines while printing. Balloon alerts will be displayed warning you of that. - The preferred container for the master reagent in the beaker is now showed in both condiment & chem master. It can be enabled/disabled via a CheckBox **2. Code Improvements** - Removed defines like `TARGET_BEAKER` , `TARGET_BEAKER` etc. ther functionality is implemented as params in the `transfer_reagent()` proc directly - Removed all variables relating to analyzing reagents like `reagent_analysis_mode`, `has_container_suggestion` etc. all memory savings - `printable_containers` now stores static values that can be shared across many chem masters - Updates only overlays and not the whole icon during operations for efficiency **3. Fixes** - You can hit the chem master with the screwdriver, wrench, crowbar & beaker when in combat mode - You cannot insert hologram items into the chem master - Deconstructing a condiment master will give you the circuit board already pre-programmed with that option selected so you don't need to use a screwdriver to re program it - `printing_amount` is now the maximum number of containers that can be printed at a time. Presently this number with upgraded parts would print out empty containers especially for patches. This is because `volume_per_item` does not take into consideration this var. Also this var would not give control to the player on exactly how many containers to print as whatever amount the player entered would be multiplied with this value producing a lot of waste & worse empty containers. Now this var determines exactly how many containers you can print and is imposed on the client side UI as well **4. Refactors (UI performance)** - Beaker data is compressed into a single entity & sent to the UI. This is set to null if no beaker is loaded thus saving data sent - Reuses Beaker props from chem synthesizer to reduce code - reagent REF replaced with direct type converted to text and later converted with `text2path()` cause its much faster 🆑 qol: Adds screen tips & examines for screwdriver, wrench, crowbar & beaker insertion, removal & replacing actions qol: Analyzing reagents no longer blocks other players from doing other operations. Multiple players can analyze different reagents on the same machine qol: You cannot do any tool acts on the machine while printing to prevent any side effects. qol: The preferred container for the master reagent in the beaker is now showed in both condiment & chem master. The feature can be enabled/disabled via a check box code: removed defines for reagent transfer, vars for reagent analyzis to save memory. Autodoc for other vars & procs fix: You can hit the chem master with tools like screwdriver, crowbar, wrench & beaker in combat mode fix: You cannot insert hologram items into the chem master fix: Deconstructing a condiment master will give you the circuit board already pre-programmed with that option fix: You now print the exact amount of containers requested even with upgraded parts without creating empty containers. Max printable containers is 13 with tier 4 parts able to print 50 containers. refactor: Optimized client side UI code & chem master as a whole. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Wraps `lowertext()` to ensure proper stringification. (#82442) Fixes #82440 This PR just creates a new macro, `LOWER_TEXT()` (yes the irony is not lost on me) to wrap around all calls of `lowertext()` and ensure that whatever we input into that proc will be stringified using the `"[]"` (or `tostring()` for the nerds) operator. very simple. I also added a linter to enforce this (and prevent all forms of regression) because I think that machines should do the menial work and we shouldn't expect maintainers to remember this, let me know if you disagree. if there is a time when it should be opted out for some reason, the linter does respect it if you wrap your input with the `UNLINT()` function. * Clowns can now make balloon... toys. And also mallets and hats. (#82288) <!-- 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. --> Clowns will now start with a box of 24 random long balloons and a skillchip in their noggin allowing them to create balloon animals by combining two of them of different colour together. Owners of the skillchip also gain access to crafting recepies of balloon mallets, vests, helmets and tophats, all created from long balloons. A crate of long balloons, with a box of balloons inside, can be bought at cargo, in case the clown runs out. I might edit this once I wake up, its 3 in the morning right now. Oh also, resprited how balloons look in inventory.  Balloon animals funny. Silly features are my favourite kind of features, and this one's open-ended too. Someone on the coder chat recommended someone would do it that one time, here it goes. <!-- 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: Added long balloon box to the clown's starting inventory, and a skill-chip of long lost honk-motherian knowledge to their brain. add: Added long balloons. Consequently, added balloon animals to make from such balloons. Also, balloon top hat, vest, helmet, and a mallet. Don't ask about the mallet. add: A long balloons box harvested fresh from the farms on the clown planet will be able to be shipped in a crate to the cargo department near you! add: As per requests; water balloons can now be printed at service lathe, and entertainment modsuit can now blow long balloons! image: Balloons will now have an unique sprite when in the inventory, compared when to on the ground. /🆑 <!-- 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: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: Jacquerel <hnevard@gmail.com> * Quick spellcheck 'steall' (#82560) ## About The Pull Request https://github.com/tgstation/tgstation/pull/82447 quick followup to this, caught it while glancing through the code. * Fix * merge conflicts * Revert "Monkeys now use height offset (and monkey tail works) (#81598)" This reverts commit 5cfdc5972d16c6b509220e8874a927696249d36a. * fix * Fixed lateinitialize * This should cut it * Oh right * There? * Damn, here? * There * [NO GBP] Fixes spurious runtime caused by icemoon (again) (#82582) ## About The Pull Request https://github.com/tgstation/tgstation/pull/82572 I tried to fix this but there was an unaccounted race condition which just caused a separate runtime...  Since the type is being changed mid-execution `replacement_turf` will become out of scope. My bad--this should fix it now for good. --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Higgin <cdonny11@yahoo.com> Co-authored-by: NeonNik2245 <106491639+NeonNik2245@users.noreply.github.com> Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com> Co-authored-by: Lucy <lucy@absolucy.moe> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: YesterdaysPromise <122572637+YesterdaysPromise@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
5da39ab9ee |
Hypospray and ICSpawning ports (#27279)
* Hypospray Port The fancy new GAG enabled hyposprays. * [MIRROR] ICSpawning Module: Quirks, Loadout, and BST RPED buff Ports CliffracerX's work which allows quirks and/or loadout items when using the ICSpawning (ctrl+clicking a ghost) * oops got rid of that accidental absolute nested path thingy. (I think) |
||
|
|
20c0599ce6 |
Some more mirrors again (#27366)
* Ports additional Felinid ears from Orbstation (#82066) Adds 5 new ear options from Orbstation, originally PRed in lizardqueenlexi/orbstation#360. Sprites by @Or-Fi-S. Big:  Coeurl (FFXIV Miqo'te style):  Fold:  Lynx:  Round:  Also makes it so the code guarantees that custom ears on a felinid actually count as felinid ears and not human ones, as the code wasn't checking properly when preferences were applied. There's probably a cleaner, more permanent way to do this and a refactor is needed somewhere down the line (man that sprite accessories file is getting long huh) but I'll leave that to a more competent coder. More customization options are good also Cobby said I could  🆑 add: Added 5 new Felinid ear options, ported from Orbstation! (Sprites by Or-Fi-S) /🆑 --------- Co-authored-by: _0Steven <jaydondegenerschool@gmail.com> * Standardizes object deconstruction throughout the codebase. (#82280) When it comes to deconstructing an object we have `proc/deconstruct()` & `NO_DECONSTRUCT` Lets talk about the flag first. **Problems with `NO_DECONSTRUCTION`** I know what the comment says on what it should do https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/__DEFINES/obj_flags.dm#L18 But everywhere people have decided to give their own meaning/definition to this flag. Here are some examples on how this flag is used **1. Make the object just disappear(not drop anything) when deconstructed** This is by far the largest use case everywhere. If an object is deconstructed(either via tools or smashed apart) then if it has this flag it should not drop any of its contents but just disappear. You have seen this code pattern used everywhere https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/machinery/constructable_frame.dm#L26-L31 This behaviour is then leveraged by 2 important components. When an object is frozen, if it is deconstructed it should just disappear without leaving any traces behind https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/datums/elements/frozen.dm#L66-L67 By hologram objects. Obviously if you destroy an hologram nothing real should drop out https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/modules/holodeck/computer.dm#L301-L304 And there are other use cases as well but we won't go into them as they aren't as significant as these. **2. To stop an object from being wrenched ??** Yeah this one is weird. Like why? I understand in some instances (chair, table, rack etc) a wrench can be used to deconstruct a object so using the flag there to stop it from happening makes sense but why can't we even anchor an object just because of this flag? https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/objects/objs.dm#L368-L369 This is one of those instances where somebody just decided this behaviour for their own convenience just like the above example with no explanation as to why **3. To stop using tools to deconstruct the object** This was the original intent of the flag but it is enforced in few places far & between. One example is when deconstructing the a machine via crowbar. https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/machinery/_machinery.dm#L811 But machines are a special dual use case for this flag. Because if you look at its deconstruct proc the flag also prevents the machine from spawning a frame. https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/machinery/_machinery.dm#L820-L822 How can 1 flag serve 2 purposes within the same type? **4. Simply forget to check for this flag altogether** Yup if you find this flag not doing its job for some objects don't be surprised. People & sometimes even maintainers just forget that it even exists https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/objects/items/piggy_bank.dm#L66-L67 **Solution** These are the main examples i found. As you can see the same flag can perform 2 different functions within the same type and do something else in a different object & in some instances don't even work cause people just forget, etc. In order to bring consistency to this flag we need to move it to the atom level where it means the same thing everywhere. Where in the atom you may ask? .Well, I'll just post what MrMelbert said in https://github.com/tgstation/tgstation/pull/81656#discussion_r1503086862 > ...Ideally the .deconstruct call would handle NO_DECONSTRUCTION handling as it wants, Yup that's the ideal case now. This flag is checked directly in `deconstruct()`. Now like i said we want to give a universal definition to this flag and as you have seen from my examples it is used in 3 cases 1) Make an object disappear(doesn't dropping anything) when deconstructed 2) Stop it from being wrenched 3) Stop it from being deconstructed via tools We can't enforce points 2 & 3 inside `deconstruct()` which leaves us with only case 1) i.e. make the object disappear. And that's what i have done. Therefore after more than a decade or since this flag got introduced `NO_DECONSTRUCT` now has a new definition as of 2024 _"Make an object disappear(don't dropping anything) when deconstructed either via tools or forcefully smashed apart"_ Now i very well understand this will open up bugs in places where cases 2 & 3 are required but its worth it. In fact they could even be qol changes for all we know so who knows it might even benefit us but for now we need to give a universal definition to this flag to bring some consistency & that's what this PR does. **Problem with deconstruct()** This proc actually sends out a signal which is currently used by the material container but could be used by other objects later on. https://github.com/tgstation/tgstation/blob/3e84c3e6dad33c831ac259f52f2f023680e4899b/code/game/objects/obj_defense.dm#L160 So objects that override this proc should call its parent. Sadly that isn't the case in many instances like such https://github.com/tgstation/tgstation/blob/3e84c3e6dad33c831ac259f52f2f023680e4899b/code/game/machinery/deployable.dm#L20-L23 Instead of `return ..()` which would delete the object & send the signal it deletes the object directly thus the signal never gets sent. **Solution** Make this proc non overridable. For objects to add their own custom deconstruction behaviour a new proc has been introduced `atom_deconstruct()` Subtypes should now override this proc to handle object deconstruction. If objects have certain important stuff inside them (like mobs in machines for example) they want to drop by handling `NO_DECONSTRUCT` flag in a more carefully customized way they can do this by overriding `handle_deconstruct()` which by default delegates to `atom_deconstruct()` if the `NO_DECONSTRUCT` flag is absent. This proc will allow you to handle the flag in a more customized way if you ever need to. 1) I'm goanna post the full comment from MrMelbert https://github.com/tgstation/tgstation/pull/81656#discussion_r1503086862 > ...Ideally the .deconstruct call would handle NO_DECONSTRUCTION handling as it wants, but there's a shocking lack of consistency around NO_DECONSTRUCTION, where some objects treat it as "allow deconstruction, but make it drop no parts" and others simply "disallow deconstruction at all" This PR now makes `NO_DECONSTRUCTION` handled by `deconstruct()` & gives this flag the consistency it deserves. Not to mention as shown in case 4 there are objects that simply forgot to check for this flag. Now it applies for those missing instances as well. 2) No more copying pasting the most overused code pattern in this code base history `if(obj_flags & NO_DECONSTRUCTION)`. Just makes code cleaner everywhere 3) All objects now send the `COMSIG_OBJ_DECONSTRUCT` signal on object deconstruction which is now available for use should you need it 🆑 refactor: refactors how objects are deconstructed in relation to the `NO_DECONSTRUCTION` flag. Certain objects & machinery may display different tool interactions & behaviours when destroyed/deconstructed. Report these changes if you feel like they are bugs /🆑 --------- Co-authored-by: san7890 <the@san7890.com> * Makes attempting to refresh the logs not just throw a runtime error (#82432) ## About The Pull Request Really all this seems to be is a mismatch between the tgui and dm side of the menu. https://github.com/tgstation/tgstation/blob/3c71b14df0957749f31fb2e678130daf4cfb3250/tgui/packages/tgui/interfaces/LogViewer.tsx#L71 https://github.com/tgstation/tgstation/blob/3c71b14df0957749f31fb2e678130daf4cfb3250/code/modules/logging/log_holder.dm#L110-L113 Making these line up by renaming `re-render` to `refresh` seems to make it work just fine, and not just throw an error. ## Why It's Good For The Game Life tends to be better when refreshing to see new runtimes doesn't just add its own lovely little runtimes.   And then not show them til you re-open the window cause it doesn't refresh. ## Changelog 🆑 admin: Refresh button on the View Round Logs menu actually works, instead of just adding a runtime to the logs (and not updating them). /🆑 * Creates a "busy" animation for players (#82416) Little indicator above a player when they're currently doing something. <details> <summary>vids</summary> Perspective: You are the moth  Hides under runechat  </details> Todo: - [x] Feedback? - [x] Sneaky params so it doesn't spoil your stealth run - [x] Possible refactor - [x] Probably missed some "sneaky" actions - [x] coggers <details> <summary>sound on:</summary> https://github.com/tgstation/tgstation/assets/42397676/ad71c567-0202-4158-ba50-c2946375f988 </details> 🆑 jlsnow301, infraredbaron add: Added a new UI element over players that are interacting, building, etc. /🆑 --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> * New operative reinforcement option: Intelligence Overwatch Agent (#82307) ## About The Pull Request Introducing a new Nuclear Operative reinforcement option: The Overwatch Intelligence Agent. Equipped with multi-hudglasses, they have an advanced camera console, station alerts, and bodycams of every operative! If something can be known, they will know about it. They can also remotely pilot your ship. Finally, everyone can ride in the Steel Rain without getting stuck on the station! This role spawns in the formerly unused outpost just north of the nukie base. With a few shelves of supplies and some tools in the back room, they can set up their workplace however they like. This also gives them something to work on while they wait for the operatives to gear up.  As you can see, it's rather cramped and the lights are quite dim in the backroom. Set it up however you like, this is how I did mine:  Total price? 12 TC per agent. It might get a bit cramped, but you could buy a second to make sure the first guy doesn't get lonely! This turned into a 30-commit ugly because the bodycams were originally meant to be accomplished via a refactoring of the spyglass kit. Big mistake that made me shelve the project -- until Melbert's simple bodycam component conveniently did exactly what I needed in a much simpler way. ## Why It's Good For The Game Having a "guy in the chair" for your kickass murder operator squad enables more brainy strategizing, and is thematically sound. Also, nukies have the opportunity to bring in another player to participate in the fun! ## Changelog 🆑 Rhials add: Nuclear Operatives now purchase an Intelligence Agent, who can watch cameras and bodycams, move the shuttle, and provide radio support. Only 12 Telecrystals! /🆑 * re-adds list of components for admins to remove (#82461) ## About The Pull Request The list of components on a mob when admins try to remove one didn't actually show them, now it does.  ## Why It's Good For The Game Messing with components/elements on mobs are such a pain, in this case was broken entirely.  ## Changelog 🆑 admin: Removing components button now lists components to remove /🆑 * Reboots the CNS Rebooter Implant. (#82441) ## About The Pull Request The CNS Rebooter Implant will now pull you out of stuns and stamcrit, while granting you a few seconds of stun immunity, comes with a 60 seconds cooldown ## Why It's Good For The Game The CNS Rebooter Implant is a strong candidate for the absolute worst implant in the game, it caps your stuns at 4 seconds (which is plenty of time to get murdered) and does nothing to prevent stamina damage, for something accessible in one of the latest research nodes and in the nukie uplink it should perform better than it does now. Besides, the game is in dire need for more tools to keep the stun meta at bay, and this is a good place to start. This PR makes it so the rebooter will bail you out stamcrit every 60 seconds, along with giving you a few seconds of immunity to run away or get a couple of hits in. ## Changelog 🆑 balance: CNS Rebooter Implant will now pull you out of stamcrit and grant you a few seconds of stun immunity /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Fix "Aheal" for ears deafness (#82448) ## About The Pull Request Make the admin button "Aheal" and Magic Wand of Healing (resurrection) actually full heal carbon's Ears. File _ears.dm contains timer variable "deaf" that should be updated to 0 after complete healing. But I think this must be properly code-refactored because looks like it's just duplicates(?) standart variable "damage" for organ type. ## Why It's Good For The Game Aheal - means FULLY HEAL. ## Changelog 🆑 fix: aheal now properly heals ears deafness /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Medipens can't have reagents removed from them anymore. (#82451) ## About The Pull Request This will be needed for https://github.com/tgstation/tgstation/pull/82449 because this removes the machine's ability to make infinite chems. Basically in https://github.com/tgstation/tgstation/pull/29139 they removed medipen's ability to have reagents injected into them, but never removed the ability to take reagents out. You could take a syringe, remove all chemicals from a medipen, put the main ingredient in a medipen refiller, then refill. You could do this right now on live servers with an epipen for infinite formaldehyde. This doesn't affect the hypospray. ## Why It's Good For The Game Removes a way of infinitely making reagents with a medipen refiller and also removes a dumb mechanic. You could take all chemicals out of an EHMS autoinjector, which removes the visual and feedback tell to the target that they've been injected, and even with 0 chemicals they get the disease anyways. You could buy medipens as a miner, take the chemicals out, and put them in a syringe or pill that you can inject yourself instantly with. You can take otherwise hard-to-get chemicals like fungal TB's 2-use cure injector, and make 40 cure pills instead. ## Changelog 🆑 fix: You can no longer take chemicals out of medipens with a syringe. /🆑 * Search string in catalogs in char prefs (#82423) * actually just removes stamina damage and knockdown from punches (#82400) removes punch knockdowns and stamina damage from them knockdown punches were also around the time disarm could just hardstun you to RNG this is dumb so we remove that also watermelon supposedly wanted to remove stamina damage from punches so idk about that anyway so this is a problem because you could be randomly floored by sheer luck through thick plates of metal and is overall not a very fun thing to play against especially with northstar gloves resolves unfun RNG by removing knockdowns and does something watermelon wanted by removing stam damage from it 🆑 balance: punches no longer knock down or deal stamina damage /🆑 * Fix slime `check_item_passthrough` effect (#82484) ## About The Pull Request This proc expects a user but is not passed one. ## Changelog 🆑 Melbert fix: Items will properly pass through slime on occasion /🆑 * Basic mobs now use z-level turnoff instead of simple (#82469) ## About The Pull Request On one compile of MetaStation, I saw that there's 45 basic mobs on the station, 256 on lavaland (the number growing from tendrils), and 59 in all other z levels combined. While we do expect Lavaland to be visited every round, at least it won't be running during the times when no one is there, but even more importantly, space exploration is something not done every round, so we don't have any reason to waste our resources on AIs that will never be interacted with. Simple animals had an easy solution to this: If no one is on the Z level, their AI turns off If someone is on the Z level, they are idle unless needed. The last simple animals that exists right now are bots, megafauna, geese, gondolas, and some minor ones like mimic, zombie, dark wizard, soulscythe, etc. Point is, we're very much nearly done going through all simple animals, so this code is being wasted just to ensure things like cleanbots won't work if no one is on the z level, something I doubt happens often, so I took their code and made it work for basic mobs instead. I could've done both but I thought it would look very bad, and maybe this is a good incentivize to get more basic mob conversions. There's one major change here and it's that we're missing the "Idle" mode, some basic mobs like the Lavaland village seems to be made with intent that they'll be running even if players aren't around, so this sets up a future PR that makes idle AI easier to add, and I want to make sure those cases are taken into account. ## Why It's Good For The Game We don't need to always be processing these basic mobs, and sets us in the future to hopefully also implement idle AIs. ## Changelog 🆑 balance: Basic mob AIs with no mobs on the Z level now stop. /🆑 --------- Co-authored-by: san7890 <the@san7890.com> * adds preferences to transhumanist (#82435) ## About The Pull Request You may remember this, that's because I accidentally deleted it before while trying to change things. Anyways! Adds drop-down selections and new options to transhumanist. also fixes a minor typo Previously, you could choose your replaced limb by taking prosthetic limb, setting what you want changed, and then switching to transhumanist, since they used the same preference previously. ## Why It's Good For The Game Transhumanist felt strange because it was hypothetically a voluntary operation, but the augmentation clinic just spun the wheel on what you got replaced. From a role-playing perspective, being unable to choose is uninteresting and confusing. Also it always says your limb being was being replaced with a robotic arm and that annoyed me. Now that you are able to select your replacement part, I've added two new options, the robotic voice box, good for a more prominent change then a limb that will be hidden for most of a round, and flashlight eyes, for when you are truly committed to being rushed directly to robotics seeing the bright future ahead of humanity! ## Changelog 🆑 add: Transhumanist now allows you to select your augmentation add: Transhumanist can now provide a robotic voice box, or flashlight eyes spellcheck: Transhumanist's roundstart text has been re-written to not be wrong /🆑 --------- Co-authored-by: san7890 <the@san7890.com> * Watcher wreaths; Normal and Icewing varieties (#82457) Adds Watcher Wreaths. An item that makes it look like you have a slightly floating thorn crown that you can make from some of their material parts (and the icewing crusher trophy for the icewing variant). The wreath has emissives. They don't do anything mechanically, they're just for show.    I really like the whole thing with turning lavaland monsters into trophies and cosmetics. Going down and coming back up looking like someone who just crawled through a horror movie and took some souvenirs is great. Stuff like the trophy accessories, bone and drake armor and many of the various lavaland items have this quality, and it always amuses me when a tech sees a dressed up miner and just goes 'holy shit, where did you get that'? Drip is the ultimate reward for playing miner. Nobody can tell me otherwise. this is the endgame every miner craves. And I crave a goddamn crown made from the broken remains of my enemies. 🆑 add: Watcher wreaths. Made from the mangled remains of a watcher, now a handsome accessory for you to wear a few inches behind your head. Comes in Normal and Icewing variants. add: Some bounties for the two variants of watcher wreaths. /🆑 * CHEAP_HYPOTENUSE() no longer makes the differences between the coordinates absolute. (#82468) ## About The Pull Request CHEAP_HYPOTENUSE() no longer absolutes the differences between the coordinates. ## Why It's Good For The Game It gets squared so it doesn't need to be done. * Neutered symptoms no longer activate (#82467) ## About The Pull Request Stops activation of all neutered symptoms in a advanced disease. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/68944 ## Changelog 🆑 fix: Narcolepsy is no longer activated while neutered. /🆑 * Fixes the color matrix editor (#82478) ## About The Pull Request It was sending back stringified numbers as inputs. This came from a typescript cleanup pr from sync (#82000) and was ultimately caused by a... I think misunderstanding of how the color list works (#67967) ## Why It's Good For The Game Works like a charm now, which is good cause I use it a lot ## Changelog 🆑 fix: The color matrix editor now works properly again /🆑 * Hats no longer cover mouths (#82498) * Fixes banned/days remaining preferences display for non-dynamic ruleset antagonists. (#82506) * Reverts reversion: tgui will 516 or else (#82527) ## About The Pull Request Context: #82522 Apparently you cant just stuff the byond helper functions into an external js file, but if you do, byond won't even let you know its a problem until the servers crash and you have to run `bin/clean` just to unbork your entire repo This reimplements the changes from #82473 without: - moving the byond helper functions externally - causing a tooltip render issue in panel ## Why It's Good For The Game 516 prep (again this time) * Final Objective: Battle Royale (#82258) ## About The Pull Request Adds a new final objective option with a classic premise; the forced battle to the death. The concept is that the Syndicate will provide you with an implanter tool you can use on an arbitrary number of crew members. Once you have at least 6 (though there is no ceiling) you can activate the implants to start the Battle Royale and broadcast the perspectives of everyone you implanted live to the entertainment monitor. After activation these implants cause you to explode upon death. If at the end of 10 minutes, more than one person remains unexploded then all of the remaining implants will detonate simultaneously. Additionally, one of the station's departments (Medbay, Cargo, Science, or Engineering) will be chosen as the arena. If after 5 minutes pass you're not within that department (or if you leave it after that time has passed) then you will be killed. The Syndicate plan on both using the recorded footage to study Nanotrasen technology, and also to sell it as an underground blood sport, and so have employed a pirate broadcasting station to provide colour commentary. The implantation is silent, however it requires you and your target to be adjacent and stood still for one and a half seconds. Once implanted, it will occasionally itch and eventually signal to the implantee that something is up, so once you start implanting someone you're on a soft timer until you are given away. You can also implant yourself if you want to do that for some reason. Removing an implant from someone has a 70% chance of setting it off instantly, but it _is_ possible. If the implant is exposed to EMP, this value is randomised between 0 and 100%. You could also try doing surgery while the patient is wearing a bomb suit or something, that puzzle is for you to solve and I'm not going to tell you the answers. I'm sure you'll think of ones I haven't. ## Why It's Good For The Game Adds a somewhat more down-to-earth but still hopefully exciting and threatening option which should let people mess around with the sandbox. The mutual death element provides some roleplaying prompts; nothing actually _forces_ you to fight apart from fear of death and it may be possible to find other ways to survive, or perform some kind of solidarity behaviour with your fellow contestants. Maybe you'll try that but one of your fellow contestants just wants to be the last survivor anyway. Maybe you'll pretend you're setting up some kind of mutual survivorship thing in order to make sure you're the sole survivor. Gives some people to watch on the bar TV channel. The crew apparently love playing Deathmatch while dead so we might as well enable doing it while alive. Also I'm going to follow this up with a separate PR to remove the Space Dragon objective and it felt like it'd be a good idea to do one out one in ## Changelog 🆑 add: Adds a new Final Objective where you force your fellow crew to fight to the death on pain of... death. /🆑 --------- Co-authored-by: _0Steven <jaydondegenerschool@gmail.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: EnterTheJake <102721711+EnterTheJake@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Artemchik542 <32270644+Artemchik542@users.noreply.github.com> Co-authored-by: Yaroslav Nurkov <78199449+AnywayFarus@users.noreply.github.com> Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> Co-authored-by: Skeleton-In-Disguise <49223093+Skeleton-In-Disguise@users.noreply.github.com> Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com> Co-authored-by: Bilbo367 <163439532+Bilbo367@users.noreply.github.com> Co-authored-by: FlufflesTheDog <piecopresident@gmail.com> Co-authored-by: AnturK <AnturK@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
f37a93f76b |
Teshari Specific Ports from Nova Sector (#27223)
* Teshari Specific Port This ports 4 Teshari specific PRs from Nova to Skyrat. * Hypospray Port The fancy new GAG enabled hyposprays. * Revert "Hypospray Port" This reverts commit b60a482e916ed5683424f64d0eefd9c8dcdd1a48. |
||
|
|
42f6f57dc0 |
[MIRROR] Replaces even more deciseconds with SECONDS (#27205)
Replaces even more deciseconds with SECONDS Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Waterpig <wtryoutube@seznam.cz> |
||
|
|
c72d1dcf48 |
[MIRROR] Replaces a number of deciseconds into SECONDS (#27188)
* Replaces a number of deciseconds into SECONDS * blep --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Waterpig <wtryoutube@seznam.cz> Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com> |
||
|
|
2b60c77e55 |
Yet another mirror batch (#27314)
* A skub-related station trait. Reduced weight of annoyingly frequent neutral traits. (#81388)
## About The Pull Request
This PR introduces a new station trait that lets people choose if they
want to be pro-skub or anti-skub (or neither, really). It works the same
lobby buttons that job-related station traits also use. Depending on
whether you chose to be pro or anti skub, you'll spawn in with a special
box that contains the (bulky) skub and a pro-skub shirt, or an anti-skub
shirt. EDIT: Both also receive a number of stickers to propagate their
causes.
Kudos to @Fikou for coding the lobby buttons to be accessible by any
station trait rather than only job-related ones when you made the
Cargorilla station trait.
Another thing this PR also halves the exaggerated weight of low-cost
traits such as scarves, wallets and glitched PDAs, which I clearly
underestimated.
## Why It's Good For The Game
We've learned that low-cost, high weight traits are a bit of a design
mistake, because they tend to tip the scales toward themselves over and
over and over, leveling the diverseness of the feature and therefore
making it shallow and boring.
Beside, I've been thinking of the popular [skub comic
strip](https://pbfcomics.com/comics/skub/) lately.
## Changelog
🆑
add: Added a Skub-related station trait. You can now choose if you want
to be pro-skub or anti-skub, complete of shirt and stickers. Please
don't shank each other over it.
balance: Halved the weight of station traits such as scarves, wallets
and glitched PDAs.
/🆑
* Fix some slime species subtypes not having burn resistance (#82164)
## About The Pull Request
All slime species limb subtypes now inherent from the parent `/jelly`
subtype, giving them all their proper burn resistance.
## Changelog
🆑 Melbert
fix: Slimepeople and Luminescents are now 50% burn resistant like
Stargazers
/🆑
* There we go
* FIX: Makes Hatsune mi-go a (friendly) gold slime mob (#82251)
## About The Pull Request:
The hatsune mi-go is now a friendly gold slime mob. This means it won't
try and kill you. It also now doesn't make your ears hurt, and drops a
keyboard synth on death (you monster.)

## Why It's Good For The Game
So in making my resprited mi-go and subsequent speedmerge, I failed to
realize that there are only 10 possible migo spawnpoints - 5 in snowdin
gateway, 3 on ceres whiteship, and 2 on kilo whiteship. This means at
most eight can exist on anyround, with a decent likelyhood of 0. This,
combined with the fact the hatsune migo is banned from spawning outside
of roundstart locations, along with the fact people seem to love the
thing, made it feel _too_ rare, even for a shiny mob. You still have to
roll the random odds with the life chem or friendly gold slime pools,
but you should actually see them outside of two mutually exclusive space
ruins and a gateway now. Also, they don't try and kill you now, because
it would have been wrong to add a hostile creature to the friendly pool.
🆑
fix: Hatsune mi-go now is a friendly gold slime mob, and doesn't hurt
your ears.
add: Hatsune mi-go drops a keyboard synth on death (you monster.)
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* [THE QUIRKENING] Adds customization options to Organ Prosthetic, Junkie, Smoker, and Alcoholic! (#82051)
## About The Pull Request
Lets people pick:
- The shitty organ they spawn with (still has the restrictions of not
being possible to get heart when you are a plasmamen, for example)
- Their favorite alcohol to blackout with
- Their favorite brand of cigs
- Their favorite brand of drugs!
A lot of the code was taken from a downstream, made by @Floofies, i
already had my own implementation but it was buggy and not nearly as
clean, then i was made aware of theirs.
## Why It's Good For The Game
Character Customization is good and fun and lets people have more choice
in their roleplay.
## Changelog
🆑
add: Prosthetic organ users are now allowed to pick what they want to
start with.
add: Junkie of all kinds, including smokers and alcoholics, are also
able to pick their favorite type.
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* [NO GBP] Fixes the "Drop Pod: Syndies" deathmatch modifier. (#82216)
## About The Pull Request
I've had false memories of `pick_weight` working with assoc-value-less
lists.
## Why It's Good For The Game
This will fix an issue with deathmatch modifiers.
## Changelog
🆑
fix: Fixed the "Drop Pod: Syndies" deathmatch modifier.
/🆑
* Fix robocontrol access runtime (#82242)
## About The Pull Request

`check_access` expects an item, such as an ID card, to... check access.
Not a mob.
We can circumvent this entirely by using `allowed`.
But this has an averse effect in that `allowed` will only check the
user's ID, not the ID in the mod PC.
So we need to run a separate check of `check_access` for the computer ID
card.
## Changelog
🆑 Melbert
fix: Robocontrol should work better.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
* Adds a photobooth (#82105)
## About The Pull Request
Adds a photobooth machine to the HoP line which can be used to update
your security records photo.
It updates the records of the person's name, which means hiding your
identity and wearing an ID will let you change other people's photos. If
you aren't hiding your identity and are wearing someone else's ID, it
won't update at all because it will be unable to find your record.
There's 2 variants of this machine, one at the HoP line that's tied
behind Law Office access (so Lawyers have an extra thing they can help
out with if no one's available, but maybe it would be better behind
Library access since Curators are our "photographer" role?), and the
Security one that requires Security access.
The Security one has a special feature that it adds a height chart
behind the player.

This machine is used by either right-clicking on it or by pressing a
button, so the HoP can do it remotely from their line (except on Tram
where it's in the library), and after a few delays it'll update your
records automatically to how you look like.
Emagging the machine will remove its access restrictions but every time
it updates your photos it will spam camera flashing and blind you.
Sprites
Open

Closed

Security version on the left, has a red tint on it

Video demonstration (old sprites):
https://github.com/tgstation/tgstation/assets/53777086/a2e59f08-2d58-4f5b-b081-e137c7606d35
## Why It's Good For The Game
Current security records has no way to change your photo ID, something
that was a feature before it was moved to TGUI. The only alternative is
to fully delete your record and make a new one with a photo and the same
name, but this shares a major issue with the HTML UI: You're immediately
sold out by the fact you have a background. No matter how well you try
to cover your tracks, any security officer looking at records will see
you are the only photo on the manifest that has a background and even a
camera in your hand, which makes it impossible to get away with it
unless security essentially takes pity on you.
This opens up the ability to fully mask yourself in records, finally.
This is also better even for non antagonists because you can now
properly update your photos to match what you look like in the event of
an appearance change or even just a job change, which makes it a benefit
for HoPs who likes to keep records as up-to-date as possible.
## Changelog
🆑 JohnFulpWillard, Twox
add: Added a new photobooth machine to the HoP's line.
fix: Things checking for access now checks your off hand, too.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Converts slimes to basic mobs (#82176)
After months of preparation, and further months of work, I am finally
done. Please bear with me, as this is a massive refactor, but I have
already atomized everything I could. This is now ready for review.
General
- The hilbert hotel slimes are now a subtype instead of a varedit.
- The `use_mob_ability` subtree now also accepts non cooldown abilities.
If set_behaviours is set up properly, mobs won't keep continously
triggering it as if it were a 0 second cooldown action. The alternative
would have been turning the slime abilities into cooldown abilities.
- Wrestling off a slime now signs up to the `COMSIG_ATOM_ATTACK_HAND`
signal, instead of being part of attack_hand.
- Adds datum/ai_controller/controller as a fourth, optional argument to
`/datum/ai_behavior/find_hunt_target/valid_dinner()` to make it possible
to access blackboard keys.
- Slimes no longer attack windows if they would accidentally move into
them (when the conditions are met), since random walk behaviour ignores
tiles they can't go in. It was also not worth to keep. Did you know this
was the sole override of `ObjBump()`?
- Examine was made less snowflaky/bespoke. Also added a new element:
`/datum/element/basic_health_examine`, which is a simple bespoke element
that prints out a custom message based on how damaged the basic mob it
is attached to is.
- Slimes only perform knockdown instead of paralysis, as they can attack
more often now, and paralysis is not that fun.
- LAssailant has been removed due being archaic code. To befriend a
slime, you have to spawn a monkey with the slime console, or feed them a
sheet of plasma. Simple grabbing the monkey or stuffing them in
disposals do not work anymore. Slime console spawned monkeys will have a
visible status effect, with pheromones coming off them to make this
clearer.
Actions
- Feeding, reproduction and evolution is no longer a verb.
- Slime feeding is no longer an action button. You have to use right
click, or as previously, mousedrop. Slimes can always unbuckle from mobs
they are attached to.
Hunger
- Instead randomly changing the starvation and max nutrition values
while growing up, evolution costs 200 nutrion. This makes the code more
readable, and behaviour more predictable, while still giving the
intended time between evolving and splitting. As a result, I could also
turn these into defines.
- Added a component that handles doing an effect over time while buckled
to a mob, until the mob dies or you get unbuckled.
- Slimes gained nutrition is no longer randomly multiplied by the damage
config value, but rather gain nutrition equal to twice the damage dealt.
You'll have to eat one monkey to evolve, just as before.
- Slimes do not heal passively. They only heal from eating. It was a
rather miniscule value that did not have much effect.
- Slimes generate electricity from hunger threshold, instead of the
random amount of hunger threshold + 100.
Environment
- Slimes take 15 damage from cold every second, instead of using a
complex formula (that also decreased the damage up to a point?).
- Slimes still heal from burn damage, but this is now set on the damage
coefficient list.
- Slimes instead of getting stunned by the cold, freeze in an ice cube.
BZ instead of setting them unconscious, calls the stasis status effect,
allowing you to safely stash your hungry slimes for later. They also no
longer slow down from the cold, as they are already slowed down by the
damage they get. Conversely they no longer get a speed up from a random
amount of temperature. I could be convinced to readd this either as part
of the basic sensitive component, or a similar one.
AI
- Removed the attacked_stacks system. Slimes will just perform regular
retaliation if you hit them in a harmful manner.
- Slimes now use the pet orders component. They will interrupt their
feeding when given a command by their master.
- Slimes have their own subtrees. I tried to replicate as much as I
could from the old code, dividing ancient code artifacts and intentional
stuff, so there might be some weirdness.
- Slime speech has been almost fully reduced to basic blorbing, as you
can not even understand them anymore, and most of them require the slime
to loop through all of their surroundings.
- Discipline does not have stacks either. Disciplined baby slimes have a
chance to clear their attack and hunt blackboard keys. All slimes will
stop feeding on the target otherwise.
- Since discipline is not a stack, rabidity instead gets removed at a
10% chance per disciplining.
- Slimes faces are a bit more randomly picked now.
- We want to convert all simple animals to basic mobs. Old slime code
was also very strange, and had some systems that have been replicated by
components.
- Slimes fully paralyzing you is not fun at all. Knockdown should give
you a fighting chance when a slime would like to eat you.
- Slimes slow down from the heavy damage they get from the cold, so I
don't think they need extra slowdown, nor do they need to speed up from
warmth, as they are already fast.
- Slimes turning into an icecube instead of becoming paralyzed from the
cold is more fun for the slimes, as they can break out for a few
moments. It is also funny.
- Slimes entering proper stasis from BZ is not just a visual indicator
of a slime that is safe to approach, but also keeps the slimes's hunger
value in check, allowing it to not starve while stopped. They can also
look around and blorble, instead of staring at a black screen, if player
controlled.
- The attack_stack and discipline_stack behaviours were rather
overcomplicated, and the xenobio mains I talked with didn't even know it
was a thing, so I argue it needed simplification.
- The bespoke friendship system of slimes was also too complicated.
Slimes slowly gained levels of trust, and at certain levels commands
costed friendship, and other levels, they did not. The binary friend/not
friend system that everything else in the game uses is much more
sensible.
- Using right click for feeding is much more sensible than using an
action, and then picking someone from a dropdown.
- Slime speech was very soulful but not only did it loop through
everything in sight, you couldn't even understand it unless you spoke
slime. Maybe it can be readded later in a different form.
- Slime's passive healing was miniscule, and having them rely on feeding
is more interesting.
also
fixes #81463
🆑
refactor: Slimes are now basic mobs. Please report any strange
behaviours!
balance: Slimes only stun you for two seconds when they shock you, the
rest of the duration is a knockdown.
balance: Slimes are not stunned from the cold, but rather, get frozen in
a freon icecube. BZ also puts them in complete stasis, instead of making
them unconscious. Their speed is likewise unchanged by temperatures.
balance: Slimes do not passively heal, they instead rely on feeding.
fix: Slimes can use the buckling screen alert to unbuckle and stop
feeding, along with clicking on the mob they are riding
/🆑
* Oh, right.
* Fixes AI verb Jump To Network (#70016)
* check for camera loc to not be a silicon
* check for z=0 instead
* Update code/modules/mob/living/silicon/ai/ai.dm
Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
* evil touch
* redundancy
Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
* Removes camera assembly structures (#81656)
Removes the camera assembly structure middleman between the camera
wallframe and camera machine. All its behavior has been instead moved to
the camera, and I've tried to keep as much of the behavior the same as
before.
This also fixes the issue that camera assemblies had where, upon the
construction being finished, it would move itself into the newly
finished camera machine, therefore taking itself off a wall, therefore
deconstructing itself. This resulted in 2 piece of iron being in each
camera machine (except roundstart ones), and because camera machines
rely on the assembly inside of them for upgrades and such, upgrading
didn't work at all.
I've also made camera nets use defines (not in map) so it's easier to
find a list of them all, and tried to add autodoc comments to nearly
every var in camera code.
Removes copy paste and spaghetti code between structure and machine
camera, thus making it easier to work around with.
Closes https://github.com/tgstation/tgstation/issues/79019
🆑
fix: Cameras built in-round can be upgraded again.
fix: Deconstructing cameras now more consistently return to you the
upgrades inside of the camera.
fix: RD's telescreen can now properly see Ordnance cameras again.
fix: [Deltastation] Library art gallery no longer has an invisible
camera.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
* [MDB Ignore] Combines Cargobus consoles with Dept. Order Consoles, freeing all departments of 1 whole tile of space (#82210)
## About The Pull Request
- Departmental orders are now an NTOS app
- To download, they require `ACCESS_COMMAND`.
- To use, they require one access from the department.
- This means you cannot order things from not-your-department unless you
have an ID.
- When newly downloading the app, it will prompt a head of staff to
insert an ID, to determine which department to be linked to.
- Changes chat room overlay from the kind that AI uploads use to a new
icon.
- Minor refactors to department order in general.


## Why It's Good For The Game
These two computers are surprising waste spacers for two things which
are tied together.
So why not combine them?
The lesser used cargobus chat is still there, and departmental orders
are front and center.
This gives mappers a ton more leeway when mapping departments out and is
overall less clutter.
## Changelog
🆑 Melbert
qol: Cargobus chat console and Departmental Order console are now
combined into one.
qol: Mod PCs active on the "chat client" apps no longer look like AI
uploads (and now have their own sprite)
refactor: Departmental order consoles were refactored a bit, report any
oddities.
/🆑
* This should cut it.
* Was it really just skub?
* [No GBP] Fixes slow slime feed (#82284)
## About The Pull Request
Slimes were supposed to gain the same amount of nutrition as the damage
they dealt while feeding. However, I have accidentally multiplied this
again by `seconds_between_ticks` a second time. This meant that locally
slimes fed normally, but on the server they got about the third
nutrition they were supposed to, probably due to having more ticks per
second then my machine. This PR fixes that.
Also raised the nutrition gained by slimes by 20%, after careful
testing, one monkey wasn't always enough.
## Why It's Good For The Game
Fixes #82283
## Changelog
🆑
fix: Slimes now feed faster, and should only need one monkey to reach
their next lifestage.
/🆑
* [No GBP] Fixes a slime speed config and ai controller null error in slime nutrition handling (#82330)
## About The Pull Request
Someone has linked the runtimes logs of round 226376 to show off a
runtime, and I took a look, and found some unrelated runtimes in slime
code.
- The config file for slime slowdown was still using the simple_animal
path. This has been fixed.
- Somehow, a grey slime has lost its AI controller, and when it got
hungry, it runtimed. For now, a coalesce operator has been put in place.
Later, an investigation is needed to figure out where did its AI
controller go.
## Why It's Good For The Game
Runtimes bad.
## Changelog
🆑
fix: Slime properly load their slowdown values from the config files.
fix: Slimes who lose their AI controller will no longer runtime when
they get hungry.
/🆑
* [No GBP] Slime stasis fixes (#82304)
## About The Pull Request
`handle_environment` is never called when the target was in stasis, so
slimes stayed in stasis forever. This PR fixes that, albeit in an ugly
way.
It also makes slimes actually not get hungry while in stasis.
## Why It's Good For The Game
Fixes #82300
I also claimed slimes can be safely kept in stasis, but I didn't
actually put a stasis check before handle_nutrition. This is fixed now.
## Changelog
🆑
fix: Slimes stop being in stasis when taken out of a BZ filled
environment
fix: Slimes no longer become hungry while in stasis
/🆑
* Add a unit test to check that maploaded simple/basic mobs are in an environment they can survive in. (#82180)
I've recently noticed that the maploaded penguins from the snowdin away
mission were dying from unsafe atmos/temperature. This sparked the idea
of making a (focus only) unit test that would prevent this sort of
issues from happening.
This PR also implements the usage of the `atmos_requirements` and
`body_temp_sensitive` elements for simple animals too, cutting down the
copypaste.
More unit tests to make sure things are done correctly.
🆑
fix: Made sure that mapped critters (i.e. penguins on the snow cabin
away mission) can survive in the environment they're spawned in.
/🆑
* This all is going to suck.
* A step further
* Is this hell over?
* I hope it is.
* Autosort I suppose
* This should cut it for VoidRaptor
* And Blueshift
* Revert "Autosort I suppose"
This reverts commit 9100de67c30514fc25db3ba29df81d1b0ac54e24.
* Dear god, the chicken.
* I fucking hate mapping
* fixes gas analyzers (#82278)
## About The Pull Request
#82180 accidentally messed up air analyzers being able to read or send
readouts to the chat.
## Why It's Good For The Game
air analyzer good
## Changelog
🆑
fix: air analyzers work again
/🆑
* [NO GBP]Grind & juice fixes (#82272)
- Fixes #82266. Anything that has reagents can be either grinded or
juiced
- If something doesn't have reagents but has grind results it can still
be grinded but not juiced
🆑
fix: anything that has reagents can be either grinded or juiced
fix: stuff that does not have reagents but has grind results can still
be grinded but not juiced
/🆑
* Birdshot Engineering Retrofitting (#81840)
Warning: Nanotrasen Confidential Proprietary Information (NCPI) must
only be accessed and viewed within a Nanotrasen Virtual Environment
(NVE, vNTOS-3). Employees in violation of this information ordnance will
have their wages A) garnished, and B) sent to a labour camp up to a
maximum of ten (10y) years. Questions regarding policies related to NCPI
should be directed towards departmental heads or your sector Central
Command Information Authority (CCIA) personnel.
## About The Pull Request
Credentials Confirmed
The Birdshot Engineering Revitalization Plan (formerly proposal
Blindfold, now BERP) is a procurement effort to address growing
maintenance liabilities and costs on the Skitter-MDR Class Orbital
Station located in the Spinward Stellar Cluster (SSC, Sector 28-7b).
Over the course of the previous year, ongoing analysis data has provided
vital feedback since the station was once again brought into operation
after 17 years of abandonment; and using this data, 4 options were
outlined for the Blindfold Proposal.
1) Abandonment - No Cost. Operations on Birdshot will cease. 28-7b
operations will be moderately impacted.
2) Procurement - Medium Cost. Replace offending station sections
completely with low-cost, working alternatives. Operational gains in
28-7b expected.
3) Do Nothing - No Cost. Moderate long-term impacts to operations in
28-7b.
4) >>>_Was removed_
Option 2 was selected for BERP. Procurement efforts identified 3
solutions and later narrowed it down to 1. Following the selection
process architects were brought in to draft up low-impact refits to the
designated hulk. 5 selections made it past initial drafting, with 3
ultimately being selected for engineering board review. Penultimately
draft proposal 3 was selected for the project and now awaits engineering
certification. The draft plan is provided on the next page:

Following board certification, implementation of the plan will be
commenced by 28-7b Nanotrasen Enigneering Corps. (NECs). Construction
time-frame pending Project Foremans review.
## Why It's Good For The Game
Birdshot Engineering is where this whole station began. Back then,
things were going to look closer to Birdboat Station, but that became
looser and more ill-defined as progress was made on the overall station.
While I was satisfied of the decrepit feel of Birdshot Enigneering
initially, I knew that at some point, it would require modification to
better play into Birdshots strengths.
I've had a long laundry list of a roadmap that I've wanted to implement
since the station was added, and this was the top item. Tier Zero.
Problema Numero Uno. You get the idea. This has been a year of drafting,
redrafting, and redrafting everything until it fit Birdshot right. With
this, we're nearly there. I see this being the definitive Engineering
Department for this station for quite some time to come. However, this
is still a draft and some elements are subject to change as I begin to
work out some of the more minor kinks in the draft such as pipe
locations and transit tubes.
Presently Atmospherics is completely rebuilt from the bottom up. There
is more space, enough to do projects, but you'll have to tear down some
windows and walls to gain it. Nothing ventured, nothing gained. You also
have most of the gas distro line outside. I'm a firm believer in
enabling whatever antics ANY lunatic may have. Atmos techs can rest
assured that outside lines are completely reconfigurable (and powered)
enabling some... unique project prospects. You also gained an inside HFR
and Spare burn chamber. Enjoy.
The Engineering Common Areas are now inside the department proper
instead of the satellite treatment in the original implementation.
Security gets an actual outpost and engineers now have a proper office
to file engineering documentation. They say that office colleagues can
form tight bonds so let's see whose is stronger: Purples or Yellows?
The Supermatter Engine is more of an upgrade over the previous model
(Leaky SM is here to stay so deal with it). The room is larger with less
rock, allowing some manner of greater customization, but I believe
engineers will be more than happy to find that they now have a Burn
Chamber of their own. I have zero clue of what they'll do with it, but I
think any enterprising CE will be able to create something that even god
should fear.
Finally we have maint improvements. Nothing really to see here though
maybe there's the beginning of something for the future if you care to
speculate. I couldn't really keep the meandering maint of the previous
rock, so instead we now have some pseudo dead-ends. It's all connected
by transit tubes to the north (not shown) so you can slowly get around
if you will it. Of course there's plenty of cut-throughs,
not-so-finished sections, and opportunity for those who need it. Caution
to the blind, this whole rock is spicy.
Overall I'm happy with this and want to open it up in Draft Mode for
initial thoughts. I have a rough timeline on finishing this that
stretches out to the weekend, so the earlier comments are, the more
likely I'll be able to MAYBE do something about it. Thanks for the
patience and hopefully this is a doozy of an update for all our players.
Previous Engineering Provided for Point of Reference:

closes #75590
## Changelog
🆑
qol: Wholesale Revamp of Birdshots Engineering Department
fix: Some Birdshot Amtospherics Concerns
fix: Some Birdshot Engine Concerns
/🆑
* Bumps `dependencies.sh` to 515.1633 Stable (#82138)
## About The Pull Request
Two reasons for this.
1. It's the stable branch, so let's move it up. This PR will detect any
issues that we might have with the latest 515.1633 as far as the
codebase is concerned (the servers have been running 1633 for at least a
week now).
2. ~~I'm fucking sick of seeing the Lua Scripting Notice in CI even
though it was fixed a few days ago in #82074
(
|
||
|
|
45929ffb14 |
[MIRROR] [NO GBP] Fix letting you actually beat up racks with objects. (oops) (#27092)
* [NO GBP] Fix letting you actually beat up racks with objects. (oops) (#82277) ## About The Pull Request I misjudged `item_interaction` as being a non-combat mode only proc. https://github.com/tgstation/tgstation/blob/593f1eaee33d0016b473bd799e2b3beddd977304/code/game/atom/atom_tool_acts.dm#L2-L12 Which today I realized, well, it clearly isn't. With my changes, racks don't let you beat them with an object even though you're in combat mode. Anyhow, this pr just makes it so it doesn't continue to the item placing part when in combat mode. ## Why It's Good For The Game Fixes an issue I caused, not letting you attack racks with objects. ## Changelog 🆑 fix: You can actually hit racks with objects when in combat mode again. Importantly, painting them with spraycans like that works again. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> * [NO GBP] Fix letting you actually beat up racks with objects. (oops) --------- Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> |
||
|
|
dbed3285c2 |
[MIRROR] Adds a persistent piggy bank to the vault. (#26890)
* [no gbp] sentience potion reason set via alt-click (#82049) ## About The Pull Request Fixes https://github.com/tgstation/tgstation/issues/82047 You set the reason for sentience potion via alt clicking potion ## Changelog 🆑 qol: Sentience potion reason is set via alt-click /🆑 --------- Co-authored-by: san7890 <the@san7890.com> * Adds a persistent piggy bank to the vault. (#81900) ## About The Pull Request This PR adds a **persistent** piggy bank to the station vault that, while it can hold up to 3300 credits carried between shifts. However, you can only insert up to 1600 (on top of the 50 creds it auto-generates) each shift, so it does take a small, itsy bitsy of patience to fill it to the brim. ## Why It's Good For The Game I put some effort coding persistent piggy banks when making the cafeteria PR for the museum away mission a while ago (which apparently isn't enabled yet because the key holders forgot to ig). It'd be a shame of all the existing code were only used for a single persistent piggy bank. * Piggers --------- Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
1fe673c71c |
[MIRROR] Brings the captain's safe off the wall, safes now save their contents (#26922)
* Brings the captain's safe off the wall, safes now save their contents (#81762) ## About The Pull Request I originally was gonna make the captain's spare ID safe float in the air if the wall under it was taken down, but it looked poor and was going against the vision for wall items (and go against the wallening) so my alternative proposition is this, taking the safe off the wall. It's now a golden safe (like the one in the vault) but is interacted the exact same, it's now just a thing on the floor rather than being on a wall. I'm not a spriter so I didn't give it a custom icon but if anyone wants to they can feel free to add one, just a golden version of the regular safe felt kinda eh. I also added a wallframe version of the secure safe for when it is taken down. It will conserve its contents and be permanently locked until put back up. This doesn't apply to the new captain safe since it isn't a wall item. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/80588 Prevents people from cheesing the spare and/or it being too easy to destroy. ## Changelog 🆑 fix: The captain's safe is no longer on the wall, therefore cannot be cheesed by breaking the wall it sits on. fix: Tearing down a wall that a safe is on now drops the safe with its contents, rather than dropping the contents onto the floor. The safe's contents cannot be interacted with while it's not on a wall. /🆑 * Brings the captain's safe off the wall, safes now save their contents * Kilostatiooon --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
37bc259bb0 |
[MIRROR] Refactor removing unused defines. (#26998)
* Refactor removing unused defines. (#82115) Refactors a lot of the unused defines. Refactors a lot of the unused defines. Nothing player facing --------- Co-authored-by: san7890 <the@san7890.com> * Oh well. I hope this works fine. --------- Co-authored-by: Bilbo367 <163439532+Bilbo367@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
3c39e2b15e |
[MIRROR] Removes remove_any from the game (#26930)
* Removes remove_any from the game (#82020) ## About The Pull Request Okay, so, turns out smoke machines, cigarettes, vapes and all sorts of things intentionally unmix your mixes. Why? For chaotic effects. Well sadly it just deletes chems from mixes and makes them completely useless. It also tends to have very little effect on deathmixes and moreso just gimps you ability to use them for healing. This is pretty bad, especially for machines like the smoke machine that are specifically intended for chemists. This PR entirely removes all uses of remove_any as well as the proc itself from the game. It's just bad. ## Why It's Good For The Game As it turns out, the game intentionally gimping your chem mixes just to fuck with you is bad. Especially when it's both obscure and not really all that fun for gameplay. ## Changelog 🆑 balance: Smoke Machines, Showers, Vapes, etc will no longer arbitrarily delete a random amount of the chems they are processing /🆑 * Removes remove_any from the game * Update shower.dm * a * remove a --------- Co-authored-by: RikuTheKiller <88713943+RikuTheKiller@users.noreply.github.com> Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com> Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com> |
||
|
|
e816ae0593 |
[MIRROR] Deconstruct Wooden/Cardboard Crates Without Welder (#27004)
* Deconstruct Wooden/Cardboard Crates Without Welder (#82108) ## About The Pull Request Wooden crates are now deconstructed with a crowbar. Cardboard crates are now deconstructed with wirecutters. The context tips for deconstruction are determined by the required tool now. ## Why It's Good For The Game It doesn't make sense to deconstruct those crate types with a welder, they would just burn. The logic for different cutting tool types was already in there, and mentioned in a comment, but the variable was not assigned to the sub types; I also changed the context tip to use that instead of checking the held item for welder behavior. ## Changelog 🆑 add: Crowbars/wirecutters now deconstruct wooden/cardboard crates/boxes /🆑 * Deconstruct Wooden/Cardboard Crates Without Welder --------- Co-authored-by: Sable <102194057+Thlumyn@users.noreply.github.com> |
||
|
|
031e483e4d |
[MIRROR] New station trait job: Human AI (#26823)
* New station trait job: Human AI (#81681) This PR does many things, I'll try to explain the basic/background stuff to the main thing first: 1. Adds a new remote that allows a human to function like an AI. It controls a fly that will fly around the station slowly, and when it reaches a machine then the person can interact with it as if they were an AI. This required changing a lot of silicon/AI checks with one that also checks for this remote, and some messing with shared ui state. 2. Moves req_access from the obj and bot to ``/atom/movable`` which lets it be shared between the two, no more copy-paste and one side lacking features/checks/signals the other has. 3. Adds a check for AI config for AI-related station traits, which was lacking prior Now for the good part... Adds a new station trait that replaces the AI with a Human. This person is equipped with an AI headset (including Binary), an advanced camera console, an omni door wand, the machine controller, and their laws. They are immune to the SAT's turrets (even if set to target borgs) and are slow outside of the SAT, mimicing the actions of the AI. They interact with the world through their advanced camera console, which allows them to do most AI stuff needed, and the holopad they can connect to without having to ring first (like Command can). They are given a paper with the laws they must follow, but since they are human they are able to bend it. Cyborgs that run the default lawset are "slaved" to them via an unremovable law 0, so the Human AI can bend the laws if they really need to (for their own survival n such), and make the cyborgs obey their commands above laws, but in general this shouldn't be a frequent occurrence. This does take into account the unique AI trait, so it's not guaranteed Asimov. When this station trait rolls, all Intellicards, AI uploads, and AI core boards are destroyed and are unresearchable. They can be spawned by admins in-game if necessary. Maybe in the future we can also exclude Oldstation from this but I haven't really decided. Extra perks: Human AI spawns with a Robotic voicebox (unless they are a body purist) and teleport blocking implant, so they can't use teleporters to bypass their on-station slowdown. They also have an infinite laser pointer that can be used to blind through their camera console. This is unfortunately nerfed from the recent borg balance PR that removed its stun. This was meant to be the alternative to no longer being able to permanently lock borgs down like AIs can (or more than one, for that matter). They aren't affected by Roburgers, Acid, and Fuel's toxicity. Bots salute them like they do Beepsky (which is now a trait) They spawn with SyndEye to replace the AI's tracking ability They do not have a bank account The machine remote has a little fly in it that flies to the machines it is pointed to, working as the arms and legs of the Human AI. It scans the machine and punches in the action the AI does, and is how the AI accesses basically anything. This fly slowly moves from one machine to the next, and can be recalled with Alt Click. It works on machines and bots. https://github.com/tgstation/tgstation/assets/53777086/e16509f8-8bed-42b5-9fbf-7e37165a11e8 I've seen a funny screenshot one day of a person replacing the AI by using a bunch of door remotes, camera console, crew monitoring console, and a few other things. I've been thinking about that for a few years and really wanted to make it official if not easier to make possible, because it is an incredibly funny interaction. This makes it a reality, and while they aren't as powerful as regular AIs, I think it makes for better and funnier in-game moments. With the same weight as Cargorilla (1), I hope this wouldn't be rolling too often and ruin rounds, but instead show off the different capabilities that Humans and AIs can do, to do the job of an AI. You win some you lose some. 🆑 JohnFulpWillard, Tattax add: Adds a new station trait job: The Human AI. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Oh right * so this works * whoooops --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com> |
||
|
|
eb2bc00b7e |
[MIRROR] Rack sounds pr turned rack code refactor (#27028)
* Rack sounds pr turned rack code refactor (#81973) ## About The Pull Request ### Alternate title: "Label Hoarding PR" You ever just want to add sounds to a thing and then end up just refactoring half of the damn thing? Yeah. Anyhow. So in rough chronological order! ### Putting items in racks actually plays the sounds Picking things up from racks plays their pickup sound, but putting them on them doesn't. Just dropping it or putting it on tables does make the right sounds. This seems to be because of a `silent` parameter in `transferItemToLoc` that's set by tables but not racks. ```dm (/code/game/objects/structures/tables_racks.dm, line 273) if(user.transferItemToLoc(I, drop_location(), silent = FALSE)) (/code/game/objects/structures/tables_racks.dm, line 867) if(user.transferItemToLoc(W, drop_location())) ``` Adding this makes it work just fine. ```dm (/code/game/objects/structures/tables_racks.dm, line 867) if(user.transferItemToLoc(W, drop_location(), silent = FALSE)) ``` ### Attackby single letter parameters, 1 instead of TRUE Then, I noticed `attackby` just returns `1` to mean true after calling `transferItemToLoc`, when we just have the more readable `TRUE`. Similarly it uses a single letter parameter `W`, which on its own is already unreadable, but is also mismatched with the parent proc using `attacking_item`. ```dm (/code/game/objects/structures/tables_racks.dm, line 859-868) /obj/structure/rack/attackby(obj/item/W, mob/living/user, params) var/list/modifiers = params2list(params) if (W.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION) && LAZYACCESS(modifiers, RIGHT_CLICK)) W.play_tool_sound(src) deconstruct(TRUE) return if(user.combat_mode) return ..() if(user.transferItemToLoc(W, drop_location())) return 1 (/code/_onclick/item_attack.dm, line 133-136) /atom/proc/attackby(obj/item/attacking_item, mob/user, params) if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACKBY, attacking_item, user, params) & COMPONENT_NO_AFTERATTACK) return TRUE return FALSE ``` So we change it `1` to `TRUE` and `W` to `attacking_item` to make it more readable! ### Don't let them try to put Abstract items While looking over the table code, though, I also noticed it has a check for the `ABSTRACT` item flag when placing items. Having tested this, we add this too for consistency and to avoid awkward situations down the line. ```dm (/code/game/objects/structures/tables_racks.dm, line 272-273) if(!user.combat_mode && !(I.item_flags & ABSTRACT)) if(user.transferItemToLoc(I, drop_location(), silent = FALSE)) (/code/game/objects/structures/tables_racks.dm, line 859-868) /obj/structure/rack/attackby(obj/item/attacking_item mob/living/user, params) var/list/modifiers = params2list(params) if (attacking_item.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION) && LAZYACCESS(modifiers, RIGHT_CLICK)) attacking_item.play_tool_sound(src) deconstruct(TRUE) return if(user.combat_mode || attacking_item.item_flags & ABSTRACT) return ..() if(user.transferItemToLoc(W, drop_location())) return TRUE ``` ### Split off rack structure attackby wrenching into wrench_act procs But that's still kind of bad! But wait, we have procs for wrenching actions, so it should really be in there. So we move this to its own proc. ```dm (/code/game/objects/structures/tables_racks.dm, line 850-855) /obj/structure/rack/wrench_act_secondary(mob/living/user, obj/item/tool) if(obj_flags & NO_DECONSTRUCTION) return FALSE tool.play_tool_sound(src) deconstruct(TRUE) return ITEM_INTERACT_SUCCESS (/code/game/objects/structures/tables_racks.dm, line 857-861) /obj/structure/rack/attackby(obj/item/attacking_item mob/living/user, params) if(user.combat_mode || attacking_item.item_flags & ABSTRACT) return ..() if(user.transferItemToLoc(W, drop_location())) return TRUE ``` ### Split off rack item attackby wrenching into wrench_act procs, include sounds But the _item_ can also be deconstructed, and sure enough, it does the same thing. ```dm (/code/game/objects/structures/tables_racks.dm, line 920-925) /obj/item/rack_parts/attackby(obj/item/W, mob/user, params) if (W.tool_behaviour == TOOL_WRENCH) new /obj/item/stack/sheet/iron(user.loc) qdel(src) else . = ..() ``` So we give this the same treatment, and include a `deconstruct` method rather than just having it be separate. We also play the tool sound for consistency with deconstructing the rack structure. ```dm (/code/game/objects/structures/tables_racks.dm, line 948-953) /obj/item/rack_parts/wrench_act(mob/living/user, obj/item/tool) if(obj_flags & NO_DECONSTRUCTION) return FALSE tool.play_tool_sound(src) deconstruct(TRUE) return ITEM_INTERACT_SUCCESS (/code/game/objects/structures/tables_racks.dm, line 955-958) /obj/item/rack_parts/deconstruct(disassembled = TRUE) if(!(obj_flags & NO_DECONSTRUCTION)) new /obj/item/stack/sheet/iron(drop_location()) return ..() ``` Note: this makes it so it only deconstructs rack items on left click. I think that's perfectly fine. ### Ancient code removal Now we get to the fun part! Ancient code. When removing the single letter parameters from `attackby` previously, I thought I might as well remove other such instances while we're at it. This gets us to `MouseDrop_T`. ```dm (/code/game/objects/structures/tables_racks.dm, line 850-857) /obj/structure/rack/MouseDrop_T(obj/O, mob/user) . = ..() if ((!( isitem(O) ) || user.get_active_held_item() != O)) return if(!user.dropItemToGround(O)) return if(O.loc != src.loc) step(O, get_dir(O, src)) ``` What the fuck? Right so, this lets us click-drag-drop an item onto the rack, but only for our active item. And it just drops it and steps it in the right direction. So we just, we just kill it. We just kill it. You can just click on the rack to do functionally the exact same thing, so we just kill it. It's blocking us from dumping storage item contents, so just. We Just Kill It. We Just Fucking Kill It. ### Combat mode kicking Anyhow! With that out of the way, we move to the finishing touches: usage context and kicking! While writing up context I was reminded that currently clicking on a rack with an empty hand would just, kick it, regardless of combat mode. ```dm (/code/game/objects/structures/tables_racks.dm, line 873-882) /obj/structure/rack/attack_hand(mob/living/user, list/modifiers) . = ..() if(.) return if(user.body_position == LYING_DOWN || user.usable_legs < 2) return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message(span_danger("[user] kicks [src]."), null, null, COMBAT_MESSAGE_RANGE) take_damage(rand(4,8), BRUTE, MELEE, 1) ``` This is awkward, misclick a few times and you've kicked it back into item form. So we make it only kick it while in combat mode to avoid this. ```dm (/code/game/objects/structures/tables_racks.dm, line 880-889) /obj/structure/rack/attack_hand(mob/living/user, list/modifiers) (...) if(!user.combat_mode || user.body_position == LYING_DOWN || user.usable_legs < 2) return (...) ``` ### Usage context Then finally! Usage context! This part's easy, just copying over the logic from tables and making it show deconstruct context for the rack structure and item and construction context for the item. ```dm (/code/game/objects/structures/tables_racks.dm, line 840-851) /obj/structure/rack/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) . = ..() if(isnull(held_item)) return NONE if(!(obj_flags & NO_DECONSTRUCTION)) if(held_item.tool_behaviour == TOOL_WRENCH) context[SCREENTIP_CONTEXT_RMB] = "Deconstruct" . = CONTEXTUAL_SCREENTIP_SET return . || NONE (/code/game/objects/structures/tables_racks.dm, line 931-946) /obj/item/rack_parts/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) . = ..() if(isnull(held_item)) return NONE if(held_item == src) context[SCREENTIP_CONTEXT_LMB] = "Construct Rack" . = CONTEXTUAL_SCREENTIP_SET if(!(obj_flags & NO_DECONSTRUCTION)) if(held_item.tool_behaviour == TOOL_WRENCH) context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" . = CONTEXTUAL_SCREENTIP_SET return . || NONE ``` And then don't forget to register said context. ```dm (/code/game/objects/structures/tables_racks.dm, line 834-838) /obj/structure/rack/Initialize(mapload) . = ..() AddElement(/datum/element/climbable) AddElement(/datum/element/elevation, pixel_shift = 12) register_context() (/code/game/objects/structures/tables_racks.dm, line 927-929) /obj/item/rack_parts/Initialize(mapload) . = ..() register_context() ``` And that's all! Now please remind me not to be _this_ comprehensive again. Not for something that's less than thirty lines, at least. Thanks. ## Why It's Good For The Game Doing this in chronological order. First off, it's wonky that putting say a toolbox on a table or the ground makes sound but putting it in a rack is perfectly silent, especially when taking it from the rack isn't. This makes it consistent with tables. Returning TRUE is more readable than returning 1. Single letter parameters are awful for readability, _especially_ when inconsistent with the parent parameters. This resolves those. It shouldn't let you attempt to place items tagged with `ABSTRACT`, as you shouldn't be able to place those. This makes it consistent with tables. We have procs for wrench actions, better to use those than implementing your own wrench checks in `attackby`. This makes it do so. It's just nice to have a deconstruction sound, so this makes deconstructing the item also play the sound of the used tool. The ancient rack code we're removing is entirely just a more awkward way of doing what we can already do without it, it only let you drag your active item onto them, _but you can just click_. It was awkwardly implemented, and blocked anything from doing its own click-drag onto surface thing like say storage dumping contents. Usage context is just nice to have. This adds context for deconstructing to the rack structure and for deconstructing and constructing to the rack item. ## Changelog 🆑 refactor: Touched most of the code for racks. It should function almost entirely the same save for what's noted here, please report any issues. code: Wrenching moved to wrenching procs. Side-effect, rack items are only deconstructed on left-click sound: Items that have sounds make them when placed on racks, much like when placed on tables. sound: Rack items now make a sound upon deconstructing them. fix: Racks no longer let you attempt to place abstract items like the slap hand or water tank spray nozzles on them. qol: Clicking on a rack no longer kicks the shit out of it if you don't actually have combat mode on. qol: Racks and rack items have hover tooltip usage context. del: Killed ancient rack code for dragging your active item onto a rack. Just click it does the same thing. This allows you to actually dump items onto racks, though currently disorderly. /🆑 * Rack sounds pr turned rack code refactor --------- Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> |
||
|
|
251908062c |
[MIRROR] Gold and Silver crate now reflects NT corporate greed (#27019)
* Gold and Silver crate now reflects NT corporate greed (#82170) ## About The Pull Request The gold and silver crates desc now accurately reflects NT corporate greed ## Why It's Good For The Game More lore correct crate ## Changelog 🆑 qol: Gold and silver crates now accurately reflects NT's greed /🆑 * Gold and Silver crate now reflects NT corporate greed --------- Co-authored-by: FinancialGoose <92416224+TheBoondock@users.noreply.github.com> |
||
|
|
4fb4a50167 |
[MIRROR] A red spy has entered the base: Adds Spies, a roundstart antagonist inspired by Goonstation's Spy-Thief (#26711)
* A red spy has entered the base: Adds Spies, a roundstart antagonist inspired by Goonstation's Spy-Thief * Update code/__DEFINES/role_preferences.dm * Update code/__DEFINES/role_preferences.dm * closet fix * I am stupid * fix effects * there we go * is this the end? * ugh * please stop --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com> Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com> Co-authored-by: jjpark-kb <mccorvey.norman@gmail.com> |
||
|
|
d8151eaaa8 |
[MIRROR] Adds a shower drain fluff item (#26949)
* Adds a shower drain fluff item (#82071) ## About The Pull Request Turns the varedited fluff item into its own item so it no longer has a varedited icon & icon state. ## Why It's Good For The Game We're varediting this fluff item 17 times on current tg master and it's pretty bad. Varediting icon/icon state in maps should be discouraged and hopefully banned later, it's not hard to make a subtype of an item so we should be able to expect mappers to do that rather than this. ## Changelog Nothing player-facing. * Adds a shower drain fluff item --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
2a355aeed2 |
[MIRROR] Ice cream now gives a chilling food effect (plus small food haste buff) (#26914)
* Ice cream now gives a chilling food effect (plus small food haste buff) (#81719) ## About The Pull Request We have a `crafted_food_buff` in the code meant for specific food buffs (and perhaps one day, debuffs) that has gone unused ever since it was created during the 'Foodening' PR. Anyway, yeah, this PR takes the fire step to implement it with ice cream and other frozen treats. Frozen treats (all food found in the `food/frozen.dm` file) have it by default. Other ice cream holders such as waffles cones (and now regular waffles too!) can aquire it when filled with ice cream. Using the ice cream vat also adds the 'Chef Made' trait now, which is required for food effects to happen. Also very slight food effect refactor. There's no need to have five different alert screen objects when only have to switch icon states. This PR also adds an action speed modifier to the generic 'haste' food effect. I'm confident the original creator would have done that too, but action speed modifiers aren't as well-known. ## Why It's Good For The Game People tend to make one feature, call it a day and then move on to the next. Food effects are nice, however they're barely implemented, and I don't like food being all the same-ish in the end. ## Changelog 🆑 add: Ice cream and frozen treats now have a chilling effect. add: You can add a scoop of ice cream on waffles. balance: added an action speed modifier to the generic food haste effect (you do things, and not just run, an itsy bitsy faster) /🆑 * Ice cream now gives a chilling food effect (plus small food haste buff) --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
7374ff4ca2 |
[MIRROR] Training in heavy gravity gives you more experience points (#26920)
* Training in heavy gravity gives you more experience points (#81990) ## About The Pull Request If you use exercise equipment in an area with unusually high gravity, you will get tired faster but will also earn a greater amount of fitness experience points. As far as I am aware the only particularly reliable way for regular crew to gain access to high gravity is the bone-crushing strength (and radiation?) of the gravity generator, but you could also use gravitational anomalies or gravitational holoparasites for this if they are available. Conversely, if you lift weights when there's no gravity it won't cost you any stamina at all! ## Why It's Good For The Game I'll be honest this is a largely pointless and trivial change which interacts with a similarly useless system, but I thought it would be a cute interaction. Training by wearing heavily weighted clothing or in an area where gravity is increased are _somewhat_ common tropes in fiction (I have no idea if people do this in real life) and I think our players would appreciate the incredibly niche circumstances where they can benefit from this. I also think if even one round features someone building a gym in the gravity generator room and encouraging people to get buff while it crushes them into paste then this was a good addition. ## Changelog 🆑 balance: If you work out under heavier-than-earth gravity, you will get gains faster. /🆑 * Training in heavy gravity gives you more experience points --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
b42d49c174 |
[MIRROR] Adds logging to SSore_generation on subsystem initialize (#26891)
* Adds logging to SSore_generation on subsystem initialize (#81488) This PR adds a new logging category and a logging message specific to SSore_generation's initialize, logging the number of vents of each size, as well as the number of random and proximity based ore spawns due to cave generation and map generation. Currently drafted as I could use some feedback as to why I'm not seeing the logger.log() messages not appearing on any of the current in-game log files 👍 Useful for data logging to determine how many of each type of ore is spawned on the map, for the purposes of determining how much ore is being spawned manually over the automatic amounts based on the vents, with the quantity of ores spawning being a product of the ore vent sizes being logged as well. * Adds logging to SSore_generation on subsystem initialize --------- Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> |
||
|
|
d53ced4e8d |
[MIRROR] Ore vent fixes to spawning multiple megafauna. (#26862)
* Ore vent fixes to spawning multiple megafauna. (#81935) ## About The Pull Request Ore vents can now no longer be scanned multiple times to spawn multiple nodes, nor can they be used to duplicate lavaland bosses. Vents now call for a `can_interact` check, as well as against the cooldown timer, which has been moved a bit in the order of operations in order to check things correctly when there's possibly multiple prompts open for starting the defense waves. Additionally, boss waves actually do what they're supposed to do, and don't spawn in a node drone on boss summoning, but instead summon the drone afterwards, which sets up the vent, then takes off visually. This is reflected in the tgui alert before starting waves. ## Why It's Good For The Game Fixes #81817. Improves visual clarity when doing boss vents so that players don't get the wrong idea that they need to protect the drone as well when fighting bosses. ## Changelog 🆑 fix: Ore vents have to be scanned while standing next to them. fix: Menacing ore vents now correctly only spawn in a node drone after the boss is defeated, instead of before. /🆑 * Ore vent fixes to spawning multiple megafauna. --------- Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> |
||
|
|
3b134f2e85 |
Missingmirrors (#26743)
* [NO GBP] Extremely tiny stupid nitpick changes to the smoking room ruin (#81767) ## About The Pull Request Ok so this just does some really really tiny changes to the smoking room of the smoking room ruin. I added this way back during march mapness and have always wanted to touch up this last area. These are basically just touch-ups that are two years too late because they felt so insignificant and small that making an entire PR to change them felt excessive. I still feel that way but I'm also a perfectionist and this would linger in my head until the day I die. Anyways, there should be slightly less awkwardly placed spawners, decals blocked from view. You also have to walk past the smoky remains to reach the second special lighter, instead of the first. That's it, that's everything. You don't even get screenshots here. Sorry. ## Why It's Good For The Game I have an obsession with revisiting and completing old, unfinished work. ## Changelog 🆑 Rhials fix: Some tiny tiny changes to the smoking room ruin to make it a little less ugly. /🆑 * Tram tile/bench fixes (#81798) ## About The Pull Request - Tram benches can be rebuilt after deconstruction - Tram tiles build the correct amount inhand - Tram tiles available in the engineering protolathe with other items - Tram tiles create the right stack type when pulled up - Tram tiles have inhand/obj icons for both types ## Changelog 🆑 LT3 fix: Tram floor tiles constructed inhand provides 4 instead of 1 fix: Tram floor tiles provide correct stack item when pulled up image: Tram floor tiles have their own inhand icons qol: Tram floor tiles available in the engineering protolathe fix: You can reconstruct deconstructed tram benches /🆑 * Tram icon cleanup (#81797) ## About The Pull Request - Deletes an unused tram_wall.dmi - Renames tram frame to tram girder - Tram girder looks like girder, not lattice  ## Why It's Good For The Game More straightforward for players. Since it acts like a girder, it should look like a girder not a lattice. ## Changelog 🆑 LT3 image: Tram frame is now tram girder, because it acts like one /🆑 * Autotucking On Map Load (#81782) ## About The Pull Request Doesn't really do much currently but without it wallening beds look fuckin DUMB Plus I think this better matches what is intended ## Why It's Good For The Game  --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> * Makes Ethereal Charging Loop Just About Everywhere (#81775) ## About The Pull Request Basically, For APCs.  For recharging APCs.  For recharging from cells. The Ethereal offscreen was blue, you'll just have to trust me that this was a color-coded PR.  ## Why It's Good For The Game It's kind of CBT as-is right now to have to click this stuff over and over, especially when light tubes have it that much more convenient than everything else. I figure some while loops would make the situation better for them. ## Changelog 🆑 qol: Ethereal charging now loops when they're charging (from) APCs or from power cells! /🆑 * 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 /🆑 * Makes Medbay surgery on Metastation a bit more inline with other maps (#81786) ## About The Pull Request Makes it so paramedics can't access the surgery theater in Metastation ## Why It's Good For The Game Paramedics can't access surgery on the other maps, and can't use the front door to the surgery theater, They shouldn't have access to it through maints ## Changelog 🆑 fix: Makes Metastation surgery access more consistent with other maps /🆑 --------- Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: Nerevar <12636964+Nerev4r@users.noreply.github.com> Co-authored-by: ViktorKoL <44502667+ViktorKoL@users.noreply.github.com> Co-authored-by: starrm4nn <139372157+starrm4nn@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
95029e839a |
[MIRROR] Curtains behave like curtains should, by not being a wall (#26811)
* Curtains behave like curtains should, by not being a wall (#81843) ## About The Pull Request This has bothered more for far too long that curtains suddenly become solid objects instead of, well, behaving like curtains in any form do and just bend out of your way. They function the same from an opacity POV but i just removed the density toggle so they'll always allow passthrough.   ## Why It's Good For The Game You can have your privacy and have realistic curtains ## Changelog :cl:Zergspower qol: Curtains and shower curtains are no longer solid objects that defy common sense /🆑 * Curtains behave like curtains should, by not being a wall --------- Co-authored-by: Zergspower <Griffinj88@yahoo.com> |
||
|
|
2dc0bd272a |
[MIRROR] fix ore vents spawning the wrong wolves and remove simple wolves (#26791)
* fix ore vents spawning the wrong wolves and remove simple wolves (#81864) ## About The Pull Request wolves got refactored but the ore vents were still spawning the old versions, this fixes it and removes the old wolves from the code ## Why It's Good For The Game fixes ore vents spawning old wolves ## Changelog 🆑 fix: fixes ore vent spawned wolves being untammable /🆑 * fix ore vents spawning the wrong wolves and remove simple wolves --------- Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> |
||
|
|
2eac95b7a1 |
[MIRROR] Adds a small cafeteria behind the right wing shutters of the museum. (#26766)
* Adds a small cafeteria behind the right wing shutters of the museum. (#81465) ## About The Pull Request I was thinking to contribute something to the new away mission map to make it better. Mapping and all takes too much time for me, so I could do little. Though it comes with its own unique gimmicks. To reach the cafeteria, one has to complete a couple puzzles. The first set is opened by inputing the correct PIN on the password panel beside it. There're several clues to help you guess this fairly easy puzzle, in the form of several number graffitis, a scrapped piece of paper full of numbers, and a board filled with colored dots also found just beside the panel. The second one is opened by a keycard, and is generally lazier. To find it, you'll need to do a bit of (toilet) searching. As for the unique things this PR adds: - A fire extinguisher... that actually contains welding fuel - A (dirt-cheap) hotdog vending machine* - A completely ornamental maneki-neko (that's the name of the luck-bringing, paw-waving cat figurine) - A piggy bank that carries money between rounds. It has a cap of 10k credits worth of holochips, cash and coins, which is pretty high, but I'm confident people will just destroy it for its contents the moment they find it. His name is Pigston Swinelord VI. - More, totally legit and not actually fake bombable walls :^) *By the by, you can also find it during the national hotdog day. Screenshots of the new location:   ## Why It's Good For The Game You know how most away missions are not that special at all? Yeah, @ mc-oofert set an example of a pretty decent one actually, if not a tad small. I thought it could use a touch of another mind actually contributing to it too, because it deserves it. Also, this sets the basis for other persistent piggy banks. I don't think they should all have that 10k cap like this one, perhaps 1k is enough. Beside, the code that mothblocks did for json database datum is pretty good, so there is not a whole lot of shitcode here. ## Changelog 🆑 add: Added a cafeteria to the museum away mission, with a few special things to it. To reach it, you'll have to complete a couple puzzles however. map: The museum away mission now has a couple restrooms. add: Hotdog vending machines may spawn during the National Hot Dog Day. /🆑 * Adds a small cafeteria behind the right wing shutters of the museum. --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
32c9fdd55f |
[MIRROR] Lockers and crates shake when someone is trying to break out of them (#26764)
* Lockers and crates shake when someone is trying to break out of them (#81801) ## About The Pull Request Makes lockers and crates do a little shake when someone is trying to resist out of them. https://github.com/tgstation/tgstation/assets/40921881/94703c79-a22c-43e6-ac31-8621173a0953 ## Why It's Good For The Game A little bit of visual flair, lets players know if someone is trying to get out of a locker. ## Changelog 🆑 Seven add: Lockers and crates now shake when someone is attempting to resist out of them. /🆑 --------- Co-authored-by: san7890 <the@ san7890.com> * Lockers and crates shake when someone is trying to break out of them --------- Co-authored-by: Lufferly <40921881+Lufferly@users.noreply.github.com> Co-authored-by: san7890 <the@ san7890.com> |
||
|
|
427b465e5c |
[MIRROR] Logs holosign swatting. (#26690)
* Logs holosign swatting. (#81733) Logs holosign swatting. ## About The Pull Request Logs holosign swatting. ## Why It's Good For The Game Closes #81729 ## Changelog 🆑 admin: Logs holosign swatting. /🆑 * Logs holosign swatting. --------- Co-authored-by: Pickle-Coding <58013024+Pickle-Coding@users.noreply.github.com> |
||
|
|
a4b6b05149 |
[MIRROR] fixes inability to create material airlocks (#26684)
* fixes inability to create material airlocks (#81711) ## About The Pull Request Fixes https://github.com/tgstation/tgstation/issues/81710 runtime due to parent proc not returning the airlock also added an update_appearance() ## Changelog 🆑 fix: You can build material airlocks again /🆑 * fixes inability to create material airlocks --------- Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com> |
||
|
|
3e649b511a |
[MIRROR] Grilles dont break by just walking into them under any circumstances (#26678)
* Grilles dont break by just walking into them under any circumstances (#81594) ## About The Pull Request you can no longer just walk into a grille to destroy it rather fast also single letter variable cleanup from that proc ## Why It's Good For The Game this is a bug and bugs are bad ## Changelog 🆑 fix: Grilles dont break by just walking into them under any circumstances /🆑 * Grilles dont break by just walking into them under any circumstances --------- Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> |
||
|
|
290a97d05e |
[MIRROR] You can do more things while floored (#26643)
* You can do more things while floored (#81641) ## About The Pull Request While on the floor, you can: - Use the UIs of Atmos machinery (except thermomachine and bluespace gas vendor), Holopads, Crayons (spray cans too), radios, and Disposal bins - Close extinguisher cabinets with Right-Click - Click and drag yourself onto a photocopier to climb onto it. I also changed all instances of ``ui_status`` to have all the args it's being passed, I was messing with it a bit but it's gonna be for a later PR. ## Why It's Good For The Game It's an extra layer of harmless realism, also nice QoL for people who do not have functional legs and do not have a wheelchair. ## Changelog 🆑 qol: You can use atmos machines, holopads, crayons, spray cans, and disposal bins while floored. fix: You can close extinguisher cabinets while floored. fix: You can climb onto a photocopier from the floor. /🆑 * You can do more things while floored --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
6aef9d5203 |
[MIRROR] [MDB Ignore] Converts random bedsheets to spawners + 3 bedsheets I made long time ago. (#26518)
* [MDB Ignore] Converts random bedsheets to spawners + 3 bedsheets I made long time ago. (#81435) * Aaand modular * wuh * idk how I missed these * geez --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
1523ba2828 |
[MIRROR] Removes some easily accessible sources of Mythril (#26600)
* Removes some easily accessible sources of Mythril (#81595) ## About The Pull Request - Deletes Mythril coins from random spawners, redestributes its weight where relevant - Deletes Mythril Sheets from icebox fishing, replaces it with Runite, which is far less harmful (literally just a strong material) ## Why It's Good For The Game Mythil's not supposed to be easily player available Literally the first coin I spawned in testing was summoning, the most gamebreaking one. Also see this for more information https://github.com/tgstation/tgstation/pull/75199#issuecomment-1537836361  With 2 sheets you can farm any prefix you want by combining and splitting sheets. Nope! ## Changelog 🆑 Melbert del: Deletes Mythril Coins from random coin spawners del: Replaces Mythril sheets in icebox vent fishing with Runite sheets /🆑 --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com> * Removes some easily accessible sources of Mythril --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com> |
||
|
|
677afadade |
[MIRROR] General maintenance for all things boulder related. (#26557)
* General maintenance for all things boulder related. (#81358) ## About The Pull Request **1. Qol** - Adds screen tips & examines for screwdriver & crowbar acts on BRM, Refinery & Smelter - Adds examines to display number of boulders stored inside a refinery & maximum number of boulders it can hold. Right click screentip to remove boulders - Adds examines to display maximum number of boulders than can be teleported by a BRM & screentips for interacting with wires - More audio & visual feedback for refinery processing. If a boulder requires multiple steps you will get a balloon alert saying "crushing" for refineries & "smelting" for smelters along with a sound per process tick(which is every 2 seconds so no need for cooldown) giving you a better idea of what's happening in the pipeline - BRM now will display all lights when the "Automatic boulder retrieval" is on & turn off the lights when disabled along with examines giving you a visual indicator of its state **2. Code Improvements** - Splits types of boulders into its own file `boulder_types.dm` for easy maintainability - Moves beacon for refinery machines into its own file `boulder_processing/beacon.dm` for easy maintainability - Moves the cooldown for processing a boulder `processing_cooldown` into the refinery machine itself. Since 100's of boulders can be created per round this var can take up memory quickly so by moving them into the refinery machine it gives us some savings - Compressed & merged procs such as `create_mineral_contents()` , `flavour_boulder()` etc with the vent code. These procs were only used by the vent 1 time & by merging the code we removed if conditions to check if a parent vent was passed or not(since now that's always the case). Helped in removing boilder plate code **3. Fixes** - **Fixes vents always spawning "Small size boulders" & not medium, nor large boulders.** Once a vent generates a boulder it calls `flavour_boulder()` https://github.com/tgstation/tgstation/blob/084f56938c0169aeeee0b5f41453f31d072f3f67/code/game/objects/structures/lavaland/ore_vent.dm#L385 however this proc also accepts 2 more params `size` which would always default to `BOULDER_SIZE_SMALL` and `is_artifact` which is simply unused in the proc https://github.com/tgstation/tgstation/blob/fb83617ff94d6294b0d48c8c6c57488237508d11/code/modules/mining/boulder_processing/boulder.dm#L219 Therefore vents would always generate small boulders giving us no varity. Now the boulder size is set depending on the vent size & durability for each boulder is set to a random value between 2 & the boulder max size giving us the flavour we actually wanted - **Fixes "Expanded Gulag boulders" using "normal gulag material list" when setting its custom materials.** If you look at the `add_gulag_minerals()` proc it always picks from the `gulag_minerals` list & accepts no params https://github.com/tgstation/tgstation/blob/fb83617ff94d6294b0d48c8c6c57488237508d11/code/modules/mining/boulder_processing/boulder.dm#L235-L236 So when we try to pass params to this proc which in reality doesn't accept any we were wasting our time doing this https://github.com/tgstation/tgstation/blob/fb83617ff94d6294b0d48c8c6c57488237508d11/code/modules/mining/boulder_processing/boulder.dm#L274 And for our case `expanded_gulag_minerals` list was simply unused because our proc doesn't care about it and it went back to just using `gulag_minerals` list thus ignoring our list https://github.com/tgstation/tgstation/blob/fb83617ff94d6294b0d48c8c6c57488237508d11/code/modules/mining/boulder_processing/boulder.dm#L282 As i said in the "Code Improvement` section when i moved boulder types into it's own unique file this was fixed & now expanded gulag boulders actually has a chance to spawn with bluespace crystals inside them - **Fixes manual tapping of ore vents by hand not using a cooldown** `produce_boulder()` accepts a cooldown var for when you need to manually tap the vent by hand. https://github.com/tgstation/tgstation/blob/e8b5b52d54a60b651d72e610cfb35a237aef6efe/code/game/objects/structures/lavaland/ore_vent.dm#L374 This var was always set to FALSE because we never passed `TRUE` into it. Not once here https://github.com/tgstation/tgstation/blob/e8b5b52d54a60b651d72e610cfb35a237aef6efe/code/game/objects/structures/lavaland/ore_vent.dm#L124 Nor here https://github.com/tgstation/tgstation/blob/e8b5b52d54a60b651d72e610cfb35a237aef6efe/code/game/objects/structures/lavaland/ore_vent.dm#L131 Now we just pass `TRUE` so tapping these vents by hand have a cooldown - **Fixes BRM off icon state never being used** When the room ran out of power it would still look on. Now we use that state correctly - **Fixes Automatic Boulder Retrieval by the BRM not actually being automatic** You must have noticed that once you do "Right click" and wait for all the boulders it can teleport (determined by `boulder_processing_max`) to be teleported it stops permanently after that. Even if more boulders get generated it won't do anything, You have to again "Right click" & retoggle automatic boulder retrieval on again, thus forcing someone to stand there & monitor the BRM Now once you set Automatic Boulder Retrieval on you can leave & forget. It will teleport boulders as & when available thus enabling automation properly. - **Fixes boulders ejected from refineries via right click from getting teleported back into the machines loc** Fixes https://github.com/tgstation/tgstation/pull/78524#issuecomment-1911666995. The problem is refinery machines & the BRM keep track of all the boulders that entered into it via the `boulders_contained` list. Now we directly check `contents` for boulders so we don't have to maintain 2 seperate lists to keep track of boulders. It also now uses `processed_by` var of boulders to ensure refinerries don't retake in the same boulder it just processed. Not sure where exactly the problem got fixed but implementing these 2 measures fixed it regardless. - **Fixes boulders with 0 durability[a.k.a steps] from getting ejected out** Fixes https://github.com/tgstation/tgstation/pull/78524#issuecomment-1914551952. So inside `process()` we constantly decrease the durability of the boulder till it becomes 0. https://github.com/tgstation/tgstation/blob/0a496f180c627b9de26d3982d775cbf323fbc459/code/modules/mining/boulder_processing/_boulder_processing.dm#L159 When it reaches 0 it calls `breakdown_boulder()` https://github.com/tgstation/tgstation/blob/0a496f180c627b9de26d3982d775cbf323fbc459/code/modules/mining/boulder_processing/_boulder_processing.dm#L164-L165 This proc has a chance to reject the boulder if it could not process any materials https://github.com/tgstation/tgstation/blob/0a496f180c627b9de26d3982d775cbf323fbc459/code/modules/mining/boulder_processing/_boulder_processing.dm#L219-L222 **"Without resetting its durability"** over here https://github.com/tgstation/tgstation/blob/0a496f180c627b9de26d3982d775cbf323fbc459/code/modules/mining/boulder_processing/_boulder_processing.dm#L241 So it ends up rejecting a "0" or worse -1 durability boulder. Now we set the durability in `remove_boulder()` so regardless of what circumstances the boulder is ejected it always gets a positive durability - **Fixes BRM & Refinery from rapidly spitting out boulders in their loc which causes lag in the long terms** Fixes #81404. Basically even if there is 1 boulder sitting at a BRM's loc or an refineries loc. Operations are haulted i.e. the BRM will not teleport any more boulders & the refinery will keep their already processed boulders inside till their locs are cleared from boulders. This prevents large number of boulders from pilling up in long rounds - **[Priority : High] Fixes refineries incorrectly removing materials from processed boulders** Fixes #81109. This bug is quite serious because it can't literarily affect any random item with custom materials in game. This one line of code over here can break the entire material economy as we know it https://github.com/tgstation/tgstation/blob/0a496f180c627b9de26d3982d775cbf323fbc459/code/modules/mining/boulder_processing/_boulder_processing.dm#L217 **"DONT DO THIS"**. The `custom_materials` list is a **"read only"** list & if you ever want to change it call the `set_custom_materials()` proc with your new values but do not edit this list manually as it is done here. All lists related to materials are cached by the `SSmaterials` subsystem. List values are cached & shared across multiple objects so when you edit those values like here, you might end up effecting an item/multiple items in some random corner of the map that shares this list. This also causes boulders with empty list of materials to get spawned at random so yeah again plzz don't do this **4. Refactors** - Repathes `obj/machinery/boulder_processing/brm` -> just `obj/machinery/brm`. Even though semantically it looks nice that the brm is a subtype of `obj/machinery/boulder_processing` from a code & operation perspective they have 0 similarities. 1) The BRM does not accept boulders feed into it from a conveyer belt unlike a refinery but instead picks boulders from `SSore` subsystem & put it on the conveyer belt. This means procs for accepting boulders such `CanAllowThrough()`, `breakdown_boulder()`, `accept_boulder()` etc have no use in the BRM. Their just code clutter at this point 2) The BRM overrides `process()` & does not call its parent proc making that code wasted 3) It has no use for silo materials & mining points making those vars go to waste With so much wasted code its better to just let go off all of it & just make it a basic instance of `obj/machinery` making maintainence easy - BRM now teleports boulders in a batch (batch size determined by `boulders_processing_max` max value from upgraded parts is 7) with a boulder appearing every 1.5 seconds rather than spawning all at once. After a batch is processed it has a cooldown of 3 seconds before repeating the process if automatic boulder retrieval is on. This stops the conveyer belt from getting crowded with boulders and makes the refining process more efficient. With this BRM wires are removed because only it had only 1 wire responsible for toggling boulder retrieval but now since this process is automatic, we have true control over the timing of boulders spawned & don't want to leave it in the hands of players ## Changelog 🆑 qol: adds examines & screentips for crowbar, screwdriver acts to BRM & refinery machines qol: adds examines about the number of boulders stored & processed to BRM & refinery machines qol: BRM now has its lights turn on/off depending on wether automatic boulder retrieval is on/off for visual clarity along with examines qol: refinery machines now display ballon alerts & plays sounds more frequently when processing boulders for better feedback fix: vents now spawn boulders of all sizes & not just small ones fix: expanded gulag boulders now have correct materials in them. fix: manual tapping of vents now has a cooldown applied as intended. fix: BRM has its light turned off when area power goes off fix: boulders ejected from refineries by hand no longer teleport all over the place occasionally. fix: refineries no longer eject boulders with 0 durability fix: Boulders & refineries no longer pile up on top of BRM's & refineries in long rounds. Their locs have to be clear of boulders before they spit out more boulders to prevent a large pile of boulders from causing lag fix: sheets ejected from lathes no longer get rejected when inserted back which could happen at random, no more boulders with empty materials code: splits boulder types into its own file along with other items code: merges & autodocs procs, vars related to boulders refactor: repaths BRM to a simpler subtype refactor: BRM now spawns boulders in batches(batch size can be increased with upgraded parts) with a boulder appearing every second. After a batch is processed a 3 second cooldown is applied to stop the conveyer belt from clogging up, With this BRM wires are removed as there is no need for timers to be attached to wires which intefers without our batch processing timings. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> * [NO GBP]Some BRM Fixes (#81551) ## About The Pull Request - The time from which the boulder is picked to when it's teleported onto the conveyer belt is 1.5 seconds. During that time the boulder could get deleted due to many factors and we lose our materials. No one like's that that so now both steps are combined into 1 proc so we no longer loose boulders during teleportation. - Batch processing cooldown was not working when `boulder_processing_max` is > 1. Now it does ## Changelog 🆑 fix: boulders are no longer lost when teleported by the BRM fix: batch processing cooldown works when teleporting multiple boulders /🆑 * Path replacements in maps --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
9d53f7ae52 |
[MIRROR] Adds tram throwing mobs through glass windows (#26559)
Adds tram throwing mobs through glass windows (#81284) ## About The Pull Request - Adds a PASSWINDOW flag so that you can throw mobs through window panes, smashing them - Being thrown into the tram window by event only (not player thrown) has a chance to break through the window - Reduced throw range of tram emergency stop ## Why It's Good For The Game Sometimes you don't want them to bounce off the window when they hit, rather comically fly through it. ## Changelog 🆑 LT3 add: The tram has been equipped with enhanced safety glass to reduce the severity of crew injuries /🆑 Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> |
||
|
|
806f038524 |
[MIRROR] Refactors how machines are deconstructed (#26466)
* Refactors how machines are deconstructed (#81291) ## About The Pull Request This refactors how machines are deconstructed in the following ways - You can no longer override `obj/machinery/deconstruct()`. If you want customized behaviour then override `on_deconstruction()` instead. This comes with the added benifit of no longer needing to check for the `NO_DECONSTRUCTION` flag because the machine base proc does that for us & if it finds that flag it won't proceed to call `on_deconstruction()` meaning no machine will have a chance to spawn anything which is the current behaviour. This is required to make #81290 work for all machines at least so that machine can send the `COMSIG_OBJ_DECONSTRUCT` signal without subtypes overriding & forgetting to call the parent proc - `dump_contents()` only gets called when the machine is deconstructed not destroyed thus not leaving behind any of its contents inside. Fixes https://github.com/tgstation/tgstation/pull/81290#issuecomment-1925752583 ## Changelog 🆑 fix: machines that should not drop contents when deleted no longer do. refactor: refactors how machines are deconstructed. report bugs on github. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> * Refactors how machines are deconstructed * is this it? --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
a7b1ecb585 |
[MIRROR] museum away mission (#26463)
museum away mission (#81208) adds a new gateway map, the Nanotrasen Museum it is filled with """"Mannequins"""" and Common Core lore im not putting the preview here because you really should explore it yourself but if youre that curious i think the Checks tab in mapdiffbot would have it this gateway map contains no combat unless you count falling into chasms because you did not carry a light or going into the boarded room with no loot or any incentive with obvious signs that there is the sole enemy on the map in there the loot is the lore ok thanks also makes mines detonate if theyre detonated by a non-mob im pretty sure this couldnt have been intentional trams stop chasms and also the relevant items <details> <summary>on second thought if you want spoilers check this</summary>  </details> more gateway maps = good 🆑 add: nanotrasen museum gateway map /🆑 --------- Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
59a23a6be0 |
[MIRROR] Adds a proper skeletal rack subtype (#26544)
* Adds a proper skeletal rack subtype (#81484) ## About The Pull Request This is mapped in a few places and I thought it would be better to have a subtype of rack to use rather than varediting the icon and state. ## Why It's Good For The Game The less varedited icons the better imo, it's way easier to ensure icons aren't fucked up this way and easier to fix too. ## Changelog No player-facing changes. * Adds a proper skeletal rack subtype --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
7bb2f5055e |
[MIRROR] 81182 81367 81399 (#26492)
* Implements rgb2num, uses it to replace all our manual rgb reading. Redoes HSV management (#81182) [Converts all manual extraction of rbg with rgb2num. It's just better](https://github.com/tgstation/tgstation/commit/ae798eabd5aa94dd577169553905d3efd7a7136d) [Yanks out old HSV management, replaces it with list stuff](https://github.com/tgstation/tgstation/commit/4997e86051d6388e495524dccba1f3258a47bb48) There's this old lummy era clunky code that passed HSV as text We can now cleanly replace it with passing hsv as lists from a rgb2hsv proc So let's just do that. Also, cleans up spraytan code (and ethereal lighting) Code better * Refactors fire overlays once again to make it not get stuck so often (#81367) Maybe finally fixes #77701 A big reason why this kept happening is because fire uses standing overlays. But fire isn't managed by mobs anymore. Meaning in some situations, fire can cease to exist but the overlay can still be on the mob. So it gets stuck. So like, why use standing overlays anymore? We can just hook `update_overlays` signal. Isn't that neat. 🆑 Melbert refactor: Fire effects get added to mobs in a different way now. Maybe it will get stuck less. Report any oddities. /🆑 * Fix Flaky Failure From Fire (#81399) ## About The Pull Request Closes #81396 , Closes #81391 , Closes #81403, Closes #81402 I don't know why but I thought this proc was only called once, when the mob entered the turf. That was silly. And going back at it, I'm not entirely sure why I tied `TRAIT_NO_EXTINGUISH` to the element anyways, rather than the lava like it originally was. While going back over this, I cleaned up the proc a bit. ## Changelog Not necessary * There we go? * Bruh moment --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
d4867029fc |
[MIRROR] Fixes funky closet type (#26469)
* Fixes funky closet type (#81389) ## About The Pull Request `secure/closet` -> `secure_closet`. Changes nothing besides making the mapped in closet use the right name. ## Changelog 🆑 Melbert fix: Lavaland Beech Bartender's clothing storage is named the right thing now /🆑 * Fixes funky closet type --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
2145283a68 |
[MIRROR] [Fix] Visually closing fakewalls when in fact they shouldn't be closed (#26431)
* [Fix] Visually closing fakewalls when in fact they shouldn't be closed (#81353) ## About The Pull Request Moves update_appearance() proc further after checking if it can be closed. It was possible to stand inside an open falsewall, try to close it only for it to "close" visually and don't change any properties. ## Why It's Good For The Game Less bugs is good. No more fake-closed falsewalls. ## Changelog 🆑 fix: Now falsewalls visually don't close when they shouldn't. /🆑 * [Fix] Visually closing fakewalls when in fact they shouldn't be closed --------- Co-authored-by: larentoun <31931237+larentoun@users.noreply.github.com> |
||
|
|
bca65962e5 |
[MIRROR] You can now move and talk through statues and mannequins (#26414)
You can now move and talk through statues and mannequins (#81188) ## About The Pull Request I recently played a game where I rotated my skeleton model while rotating my own character at the same time and it being in sync gave me the realization on how cool it would be if the Coroner was able to simply control the skeleton body. I find skeleton displays very funny and I want to see more funny things happen with them, so I thought this would be a good place to start, with the benefits that it also works on mannequins and statues too so they aren't left out. Basically, while it is unanchored, if you have a statue/mannequin grabbed, it will change its direction as you do, and speak the same words you do. Your own messages can only be heard if the person is directly next to you, revealing that it was you talking through it all along. I was originally gonna add this to the simple rotation component but moved off when I decided to add talking through it, I left in the code improvements I made to the component though since it is one of the oldest components and hasn't been touched in a while. Video demonstration (before I added the person also talking, just ignore that missing) https://github.com/tgstation/tgstation/assets/53777086/27242fc3-9649-418d-95cb-b31619319e97 While fixing the Toilet bong's rotation stuff I noticed a lot of it wasn't up to proper code standards so I went over it and fixed issues I had with it. It now doesn't give text saying you found something nasty to species that still likes mice (like flypeople), and fixed its update appearance to match the codebase standard set by the introduction of ``update_appearance`` many years ago. ## Why It's Good For The Game It's a funny small idea I had and got inspired to add, it's a niche mechanic that I think fits the aesthetic I am going for with Coroner and also give a funny interaction with the human-like inanimate objects. ## Changelog 🆑 fix: Species that can eat mice don't get disgusted from seeing one in the toilet bong. add: Grabbing an unwrenched statue/mannequin/skeleton model will now move its direction as you move yours, and you can talk through it. /🆑 Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
e0e9b72eb2 |
[MIRROR] toilet bong altclick sanity (#26377)
toilet bong altclick sanity (#81263) ## About The Pull Request i still dont know what they meant by sanity checks but this should be it ## Why It's Good For The Game bug or something bad ## Changelog 🆑 fix: you may no longer altclick unanchored toiletbongs from any range in any condition to rotate them /🆑 Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> |
||
|
|
138d1324b8 |
[MIRROR] Comprehensive cleanup of storage datum, replaces the weakrefs with just refs (because they were managed already) (#26357)
* Comprehensive cleanup of storage datum, replaces the weakrefs with just refs (because they were managed already) * fixes --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: jjpark-kb <mccorvey.norman@gmail.com> |
||
|
|
602ac52e9d |
[MIRROR] Fixes ore vents spawning without ores on icebox, sets up map specific ore configurations (#26375)
* Fixes ore vents spawning without ores on icebox, sets up map specific ore configurations (#81103) ## About The Pull Request In short, we used a static list previously within the ore_generation subsystem that held the amount of each ore that we expected a single map to uniformly need. We held this number constant, since we were spawning 15 vents per map. **Pros:** This worked flawlessly for Lavaland since 15 vents on a single Z level makes it pretty densely packed map with a good amount of map-based ore spawns, and it worked consistently. **Cons:** 15 vents did not work well on Icebox however, even when split so that the majority of the ores were spawning on the lower levels, players did not feel like icebox spawned nearly enough ores and reported the map spawning empty. **Result:** As a result, we adjusted the ratio, so that we spawned vastly more ores on the lower levels, now up to 4 vents on the upper level, and 21 vents on the lower level. However, as we were still using the ore distribution list based on lavaland, icebox vents were quickly running out of ores to distribute between them, resulting in empty vents -> which produced empty boulders -> which not only don't really let you process them properly, but also just result in a metric ton of runtimes. Icebox now has it's own list of ore distributions. These distributions are now moved to a set of global lists as opposed to being saved on the subsystem as a static list, which will make going and setting up new ore distribution lists very very easy. Additionally, we've moved the setting and getting of those ore_distributions over to the seedRuins proc, so that we're actually setting the list of ores right before we actually place them to make sure that the order that it's set is roughly as it's needed, while still setting the list at the same time the map-appropriate ruin placements are dropped in. **Plus some misc cleanup fixes:** `var/list/ore_vent_sizes` in SSore_generation wasn't being treated as a similar budget list as `ore_vent_minerals`, since it `pick()`s off it's own static size list. Which is honestly fine for this five seconds, I can handle that later while we make sure the rest of the code code is stable. In the meantime, I've just tweak it so that it's easy to see at a glance how many of each random vent has spawned into the map. Tweaked the description to not include anything about chemical processing, as I'm planning on hitting on that in a part 2 PR that I'll be picking back up after the freeze. ## Why It's Good For The Game Cleans up the code a bit, but primarily fixes ores not spawning on icebox as they should. Should fix #81058. Improves description to not mention mechanics that aren't in game. Also, cleans up a piece of code that currently isn't serving much of a purpose. ## Changelog 🆑 fix: Icebox should have it's ore distribution and it's ore vents fixed, so that vents should now produce ore. spellcheck: Boulder processing machines now don't mention things they don't do. /🆑 * Fixes ore vents spawning without ores on icebox, sets up map specific ore configurations --------- Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> |
||
|
|
fcc938bac0 |
[MIRROR] Adds Climbing to a Bunch of Old Stuff (#26347)
* Adds Climbing to a Bunch of Old Stuff (#81283) ## About The Pull Request What it says. a lot of old atmospherics stuff and a few other unintuitive things lacked climbability sometimes leading to stupid situations where you could get stuck or their use as inappropriate obstacles. Canisters, pumps/scrubbers, welding/water/foam tanks, heaters, and racks can now be climbed.    ## Why It's Good For The Game i remember when tables were a kit you could carry, immediately assemble, and then use to two-click table somebody to kill them. somehow this seems overdue. ## Changelog 🆑 qol: portable air pumps, scrubbers, heaters, canisters, liquid tanks, and racks are now climbable. /🆑 * Adds Climbing to a Bunch of Old Stuff --------- Co-authored-by: Higgin <cdonny11@yahoo.com> |
||
|
|
8e7ec57fd2 |
[MIRROR] Kicks Martial Arts out of the attack chain (yippee), makes it use signals, plus a large clean up of existing martial arts (#26328)
Kicks Martial Arts out of the attack chain (yippee), makes it use signals, plus a large clean up of existing martial arts (#81097) - Kicks Martial Arts out of the attack chain. - All Martial Arts attacks are now handled via unarmed attack or grab signals - This means all martial arts are now technically on the living level, allowing any mob that can unarmed attack to martial arts. Sort of. YMMV. - All martial arts block checking is now handled by the arts themselves, meaning you can selectively decide for a martial arts strike to not be blocked. Maybe good for the future. - A comprehensive cleanup of all existing martial arts. Improving var names, code, adding some missing animation calls, etc. Fixes #74829 Untangles the mess that is martial arts, making it a lot easier to work with the attack chain and making it overall a ton more consistent. 🆑 Melbert refactor: Big martial arts refactor, they should now overall act a ton more consistent. Also technically any mob can do martial arts. Let me know if something is funky. /🆑 --------- Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
463dae851d |
[MIRROR] Fix Ore Vent's well being on improper plane (#26311)
* Fix Ore Vent's well being on improper plane (#81181) ## About The Pull Request Removed explicit plane set to `GAME_PLANE` and `ABOVE_MOB_LAYER` thus fixing issue when well was drawn on improper plane, possibly the ghost one. ## Why It's Good For The Game This PR fixes a visual bug.  ## Changelog 🆑 fix: fixed ore vent's well being drawn over ash storm. /🆑 * Fix Ore Vent's well being on improper plane --------- Co-authored-by: Interception&? <137328283+intercepti0n@users.noreply.github.com> |