mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-13 02:03:33 +01:00
ba5c112a86bb2845df830df81d59cd54ca8ac99f
43584 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
(
|
||
|
|
83f3b7fe95 |
[MIRROR] Fixes escape menu spacing (#27484)
* Fixes escape menu spacing (#82875) ## About The Pull Request Long station names clip into the start menu buttons  This fixes it  ## Why It's Good For The Game UI bug ## Changelog 🆑 fix: Fixes clipping in the ESC menu between buttons and long station names. /🆑 * Fixes escape menu spacing --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> |
||
|
|
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> |
||
|
|
8e53457041 |
[MIRROR] immortal heart attack fix (#27382)
* immortal heart attack fix (#82738) ## About The Pull Request cybernetic hearts no longer permanently break when you die, as they would try to restart after you get revived but then the proc to stop the heart attack would get early returned because the heart is immune to heart attacks ## Why It's Good For The Game having to explode to revive because of surplus heart seems like a bug ## Changelog 🆑 fix: being revived with a cyber-heart now properly restarts the cyber heart /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> * immortal heart attack fix --------- Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> |
||
|
|
edafca7ae0 |
[MIRROR] Fixes cooling and anti-disruption RCD upgrades being unavialble for ancient protolathes (#27378)
* Fixes cooling and anti-disruption RCD upgrades being unavialble for ancient protolathes (#82719) ## About The Pull Request Makes this upgrades available for ghostroles and such  ## Why It's Good For The Game Having ability to use RCD faster iskinda good ## Changelog 🆑 fix: cooling and anti-disruption RCD upgrades can now be printed in ancient protolathes /🆑 * Fixes cooling and anti-disruption RCD upgrades being unavialble for ancient protolathes --------- Co-authored-by: Iajret <8430839+Iajret@users.noreply.github.com> |
||
|
|
67f53d57c5 |
[MIRROR] Being deafnened by flashbangs / explosions now makes you shout while deaf, also very minor ear refactor (#27367)
* Being deafnened by flashbangs / explosions now makes you shout while deaf, also very minor ear refactor (#82703) ## About The Pull Request - If you sustain temporary deafness from a flashbang or explosion, and are not naturally deaf (quirk, genetics, earmuffs) your text is forced into shout mode.  - Minor ear refactor. - Ear deafness no longer updates in life, now when taking ear damage - Damage multiplier no longer applies to both healing and damage, making this a felinid nerf I guess? ## Why It's Good For The Game I always found it a bit funny (funny bad) when someone's deaf from a bomb, and they calmly walk to medbay, and say `I'm deaf. Inacusiate please?` Now they will say `I'M DEAF! INACUSIATE PLEASE?!` which is funny (funny good) It also gives a visual (audible?) tell that someone's actually deaf. Which may be handy in diagnosing people in medbay at a glance. ## Changelog 🆑 Melbert add: Being deafnened from a loud sound (flashbang, explosions) will now force people not naturally deaf to shout add: Ear damage multiplier now only applies to taking damage, not healing damage, meaning Felinids (who take 2x the ear damage) will no longer heal ear damage 2x faster. refactor: Ears have been refactored slightly, ear deafness should now update more snappily /🆑 --------- Co-authored-by: san7890 <the@ san7890.com> * Being deafnened by flashbangs / explosions now makes you shout while deaf, also very minor ear refactor --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: san7890 <the@ san7890.com> |
||
|
|
a3411c60fa |
[MIRROR] brimbeams are a hidden do after (#27460)
* brimbeams are a hidden do after (#82856) * brimbeams are a hidden do after --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> |
||
|
|
9603a2a889 |
[MIRROR] Fixes some rando failures off the ignore list of projectiles (#27456)
* Fixes some rando failures off the ignore list of projectiles (#82855) * Fixes some rando failures off the ignore list of projectiles --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> |
||
|
|
7de8048537 |
[MIRROR] Tuberculosis makes you cough more, Nicotine Withdrawal makes you cough less (#27449)
* Tuberculosis makes you cough more, Nicotine Withdrawal makes you cough less (#82827) ## About The Pull Request - Tuberculosis makes you cough more, and is no longer restricted to stage two - Nicotine Addiction Withdrawal makes you cough less often - Medicine Addiction Withdrawal makes you cough less often but now carries across all stages ## Why It's Good For The Game Nicotine Addiction currently makes you cough 10x more often than Tuberculosis, the lung disease. Kinda nonsensical right? This makes smoking a single cigar (which instantly makes you addicted because lol) pretty insufferable to be around, and while this makes sense OOC it's a roleplaying game and being actively avoided in a roleplaying game is not fun So tweaking the values should make it a bit more sensible Initial values looked like `TB: 1% chance per second` vs `Nicotine: 10% chance per second` 🥴 ## Changelog 🆑 Melbert qol: Tuberculosis makes you cough more qol: Nicotine Addiciton makes you cough less qol: Medicine Addiction maybe makes you cough more, maybe makes you cough less /🆑 * Tuberculosis makes you cough more, Nicotine Withdrawal makes you cough less --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
c7822065b3 |
[MIRROR] grappling gun (#27354)
* grappling gun (#82209) ## About The Pull Request adds a new weapon to mining, the grapple gun. this weapon is a new fun way to traverse lavaland, it lets u grapple onto things and ziplines u towards them. https://github.com/tgstation/tgstation/assets/138636438/5e935776-1482-4994-bcc7-e1ca7fcf33dc while its less practical than things like the spinning mining modsuit module, or xenobio wings, its still very fun to use. u can also use this as a weapon against mobs! (like batman) the zipline will launch u towards the mob, doing some damage to them and launching them back https://github.com/tgstation/tgstation/assets/138636438/3bf77fe5-4ed1-4153-8673-a0786ecee98f ## Why It's Good For The Game adds a new fun harmless way to travel through mining biomes ## Changelog 🆑 add: miners can now purchase grapple guns /🆑 * grappling gun --------- Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> |
||
|
|
fe3d2aae10 |
[MIRROR] fixes bots having all access (#27337)
* fixes bots having all access (#82678) ## About The Pull Request a recent change to silicon access meant all bots, simple and basic had all access from roundstart ## Why It's Good For The Game fixes bots having all access Fixes https://github.com/tgstation/tgstation/issues/82671 ## Changelog 🆑 fix: basic bots no longer start with all access /🆑 * fixes bots having all access --------- Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.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> |
||
|
|
8f2f418c7b |
[MIRROR] Fixes plasma flower modsuit cores having an extremely small amount of power (#27468)
* Fixes plasma flower modsuit cores having an extremely small amount of power (#82842) ## About The Pull Request The var was still using the old values. ## Why It's Good For The Game 15 kj instantly depletes your power supply upon taking a step. Oof. ## Changelog 🆑 fix: The plasma flower modsuit core now actually contains a reasonable quantity of power. /🆑 * Fixes plasma flower modsuit cores having an extremely small amount of power --------- Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> |
||
|
|
a603583284 |
[MIRROR] Removes the stun from longfall modules activating. (#27452)
* Removes the stun from longfall modules activating. (#82824) ## About The Pull Request What it says on the tin. When you fall with the longfall module active, you do not get stunned. If you fall from more than one z-level, however, you will be staggered from the fall, with a length based on the number of levels fallen. ## Why It's Good For The Game I noticed that while using these as a felinid that I actually was stunned utilizing them. dropping the equipment I was carrying and being rooted in place for a bit. And I thought to myself 'wait, hang on, by taking this thing out, out I'm actually WAY better off than if I kept them in, what gives?' They just got powercreeped, unfortunately. Freerunner and being a catgirl is stronger than this very niche module, because they're equipment independent and also not a hard stun (I know faceplanting with freerunner is still a bit of a stun, but you can still move and potentially avoid losing equipment by falling while prone). And maybe it functions a lot stronger in situations where those two traits just don't apply (or apply in a very negative fashion in the case of felinids), I don't see why they shouldn't be superior to those traits. You have to have a modsuit, and you need to be on a map that makes use of multi-z. And additionally be in gravity. Typically, I would think equipment benefits should be stronger than innate/roundstart features. Most of the time, it is easier and more beneficial to be in constant flight while using a modsuit than to prepare for longfalling. So let's just make it better overall. I don't know how many people would even use it, but I know I will and I love tossing myself into the void below. ## Changelog 🆑 balance: Longfall modules no logner stun you when they activate. balance: Falling from a height greater than one z-level while using the longfall module will still stagger you. /🆑 * Removes the stun from longfall modules activating. --------- Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> |
||
|
|
eb92fee542 |
[MIRROR] Fix playing card memory (#27448)
* Fix playing card memory (#82834) ## About The Pull Request `/datum/memory/playing_cards` accepts a list of other players, which it uses to format into an english list. But where it is applied, it takes a list of players, formats it into an english list, and passes it in. Oops. Also fixed some verbage for how the memories look in-story-form. ## Changelog 🆑 Melbert fix: Playing Cards memory now reads better /🆑 * Fix playing card memory --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
ed7474654c |
[MIRROR] Adds an achievement for pushing a boulder up a hill (#27443)
* Adds an achievement for pushing a boulder up a hill (#82813) ## About The Pull Request Credit to Melbert for this idea. Adds a new achievement awarded for carrying a boulder from Lavaland to the Centcom Rescue Wing (via the Escape Shuttle). If the boulder ever leaves your hands you will not gain the achievement. If the boulder is not outside on Lavaland when you pick it up you will not gain the achievement. If you arrive at the Rescue Ship (via pod) you will not gain the achievement. If you drop the boulder If the shuttle is hijacked and you do not arrive at Centcom you will not gain the achievement (perhaps try hitting the hijacker with the boulder you are not allowed to drop?). If you arrive at Centcom via the Escape Shuttle but fail to exit the shuttle holding the boulder (for instance, because a max cap bomb is detonated next to you one second after the shuttle arrives) you will not gain the achievement. As the achievement is rewarded after the round-end report is generated, you also will not be represented on the round-end report. This is a personal struggle. Also carrying a boulder slows you down. Dragging it already did, so I'm not sure why carrying one did not. It feels like an oversight, and just makes sense. People rarely have any particular need to manually carry them anywhere so this should be fine, right? 🙂 ## Why It's Good For The Game Making players do pointless and weird bullshit is the reason to have an achievement system. It's a social experiment. I think that it is funny. ## Changelog 🆑 Jacquerel and Melbert add: A new achievement for moving a boulder from one place to another, at great effort. balance: Hauling a boulder around makes you move slower, as it does when dragging it. /🆑 * Adds an achievement for pushing a boulder up a hill --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
4802d30857 |
[MIRROR] Fix: Makes the rebar crossbow's bowstring loosen after firing (#27467)
* Fix: Makes the rebar crossbow's bowstring loosen after firing (#82830) ## About The Pull Request As it stands, after the rebar crossbow fires, it must be used inhand twice, once to loosen the bowstring, and a second time with a do_after to pull it back. Not only does this make no sense as the bowstring is what launches the projectile, but I actually had no idea it was even happening, until I got it pointed out on discord. ## Why It's Good For The Game The main reason is that the crossbow shooting a rod without moving the bowstring just looks weird, but also given the first inhand use doesn't have a delay, it also doesn't really serve any purpose. ## Changelog 🆑 fix: The rebar crossbows now properly loosen their bowstring upon firing. /🆑 * Fix: Makes the rebar crossbow's bowstring loosen after firing --------- Co-authored-by: KingkumaArt <69398298+KingkumaArt@users.noreply.github.com> |
||
|
|
08d9f59838 |
[NO GBP] Slime AI fixes + prerequisites (newest mirror: makes slimes not idle) (#27470)
* Reworks targeting behavior to fall back onto proximity monitors. Refactors ai cooldowns a bit (#82640) ## About The Pull Request Nother bit ripped out of #79498 [Implements a get_cooldown() proc to get around dumb manual overrides and empower me to optimize the findtarget logic](https://github.com/tgstation/tgstation/commit/7047d294dd2675b7e38db2424d6d79c52f21783a) [Adds modify_cooldown, uses it to optimize find_potential_targets further](https://github.com/tgstation/tgstation/commit/4ebc8cedcefaa57a1c3d1afbbb485baa6fae0a4f) No sense running the behavior if we're just waiting on its output, so let's run it once a minute just in case, then push an update instantly if we find something [Optimizes connect_range and promxity_monitors](https://github.com/tgstation/tgstation/commit/bcf7d7c5b371e46c02aa9039d4ccd4715b999400) We know what turfs exist before and after a move We can use this information to prevent trying to update turfs we don't care about. This is important because post these changes mobs with fields will be moving a lot more, so it's gotta be cheap [Implements a special kind of field to handle ai targeting](https://github.com/tgstation/tgstation/commit/80b63b3445778eb2c75fc2f8f61aca07ed482b1f) If we run targeting and don't like, find anything, we should setup a field that listens for things coming near us and then handle those things as we find them. This incurs a slight startup cost but saves so much time on the churn of constant costs Note: We should also work to figure out a way to avoid waking ais if none is near them/they aren't doing anything interesting We don't need to do that immediately this acts as somewhat of a stopgap (and would be good regardless) but it is worth keeping in mind) ## IMPORTANT I am unsure whether this is worth it anymore since #82539 was merged. As I say it was done as a stopgap because ais didn't know how to idle. If not I'll rip er out and we'll keep the other refactoring/optimizations. ## Why It's Good For The Game Cleaner basic ai code, maybe? faster basic ai code, for sure faster proximity monitors (significantly) * ai controllers use cell trackers to know when to idle (#82691) ## About The Pull Request this makes ai controllers use cell trackers and signals to determine when to idle ## Why It's Good For The Game might be better than looping over all clients for every controller ## Changelog 🆑 code: The way mobs idle has been refactored, please report any issues with non-reactive mobs /🆑 * makes slimes not idle (#82742) ## About The Pull Request slimes should still be able to do their everyday routine without needing to be watched over ## Why It's Good For The Game makes xenobiologist's lives easier ## Changelog 🆑 qol: slimes will stay active without needing any one to watch over /🆑 --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> |
||
|
|
2429a2821a |
[MIRROR] Fixes AI lag by re-adding idle mode to all AI that was lost with the simple mob to basic mob conversion. (#27296)
Fixes AI lag by re-adding idle mode to all AI that was lost with the simple mob to basic mob conversion. Co-authored-by: Iamgoofball <iamgoofball@gmail.com> Co-authored-by: Waterpig <wtryoutube@seznam.cz> |
||
|
|
144c94d11e |
[MIRROR] Bioscrambler Anomaly chases you (#27295)
* Bioscrambler Anomaly chases you (#82555) ## About The Pull Request I heard reports that people just ignore the bioscrambler anomaly because basically you just don't go into that room any more and depending on where it spawned, that's no big deal. That won't do. Now the Bioscrambler will be attracted to the nearest sign of advanced thinking life (read: nearest humanoid mob controlled by a player) and will very slowly pursue them, travelling through walls and obstacles in order to do so. Also if it decides to target you, you will get a foreboding psychic warning like with the dark matteor, because I think it's funny for dire warnings to have multiple obscuring sources. The Bioscrambler can be blocked with containment fields if you want to make an overly-elaborate pen for it. To accomplish this I refactored containment fields a little bit to apply turf traits instead of making four different `locate()` checks for different objects. Those files smell bad. Oh also I moved the dullahan organs to the Bioscrambler blacklist because they runtimed while I was testing it (see also: my other incoming PRs) and I can't see any other reasonable way to fix it (they expect to be in an abstract body zone...) ## Why It's Good For The Game Anomalies are generally meant to be problems that you deal with or face some kind of consequence. Because the Bioscrambler isn't a timed anomaly with a dramatic detonation effect, being spawned in a poorly-trafficked area could simply mean that it isn't a problem to anyone. Now it will make sure that it is a problem for someone until someone gets rid of it. I thought this solution was funnier than making it do something zany if you leave it alone for 3 minutes. ## Changelog 🆑 balance: The Bioscrambler will now actively attempt to get closer to living targets rather than chilling in a closet nobody goes into (unless you trap it in a containment field). balance: Because it can now travel through walls, the Bioscrambler will no longer transform you THROUGH walls. /🆑 * Anomaly Releaser logging and fixes (#82684) ## About The Pull Request I literally do not think I have heard of anyone using this extremely niche space ruin item a single time. _**However**_ if they did it wasn't logged, so now it is. Additionally I found a bunch of bugs while testing it: - You could queue inputs on a bunch of cores and activate all of them at once because it didn't check if had been expended by a concurrent do_after. - It made normally immobile anomalies mobile. - I broke immobility in general in a recent PR, but also it's redundant with a different var I added. I fixed all of these. ## Why It's Good For The Game For the one round that will happen in tg history where someone reactivates a Vortex Anomaly Core on the escape shuttle, it should log who did it. ## Changelog 🆑 admin: Reactivating an anomaly core via the anomaly releaser is now logged. fix: Fixes various bugs related to dimensional/spectral anomalies moving when they should not. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
a9ff046352 |
Administrator Cherrypick (#27405)
* Admin Verb Datums MkIII | Now with functional command bar (#82511) * Modular stuffs * Put some admin jump verbs back into the context menu | sorts area jump list again (#82647) ## About The Pull Request See title. ## Why It's Good For The Game Some admins wanted all the jump verbs back, aswell as making them not AGhost you. Also make the Jump To Area verb use a sorted list again * Hey what if admins were allowed to use the player panel (#82682) Re-adds the player panel verb to the verb panel. * Controller Overview UI (#82739) * Fixes a minor spelling mistake on the admin panel/verb list (#82747) ## About The Pull Request Corrects `inisimin` to `invisimin`. This addresses #82728, but only fixes one of the two issues mentioned ## Why It's Good For The Game -1 spelling mistake ## Changelog 🆑 spellcheck: 'inisimin' verb corrected to 'invisimin' /🆑 * Player Panel-age (#82757) * Admin Forced Mob Rename and Preference Update (#82715) --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> Co-authored-by: chel <64568243+iliyaxox@users.noreply.github.com> |
||
|
|
8b02b8360c |
simple research (#26806)
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> |
||
|
|
7d0d702ec7 |
[MIRROR] Fixes SS13.register_signal throwing unclear errors when called on deleted datums (#27293)
* Cleans up the SS13_base lua file and adds a new lua file for easily handling multiple signals on different objects. (#82458) ## About The Pull Request Cleaned up the SS13.register_signal and SS13.unregister_signal, removing the weird list shifting. Also adds a new lua file that can be included for the use of registering different signals on various datums and being able to clear them all in 1 function. Removed the make_easy_clear_function option when registering a signal via lua because I don't think it's used by anyone and it lacks any sort of versatility. Users can just create their own function for clearing signals from a datum. Also updates the documentation for HARDDELETES.md as COMSIG_PARENT_QDELETING was renamed to COMSIG_QDELETING ## Why It's Good For The Game New handler file makes registering signals in batches a lot easier if you want to clear them in one go without clearing unrelated callbacks on the same datum. The list shifting in SS13.register_signal had pretty significant performance problems, so removing that will make registering and unregistering signals faster. ## Changelog 🆑 admin: LUA - Adds a new library called handler_group. Include it in your files by doing require('handler_group') /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> * Fixes SS13.register_signal throwing unclear errors when called on deleted datums (#82597) ## About The Pull Request See title ## Why It's Good For The Game More descriptive error message ## Changelog 🆑 fix: LUA: Registering a signal on a deleted datum will throw a more descriptive error message. /🆑 --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> --------- Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> |
||
|
|
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> |
||
|
|
75b5e48ce1 |
[MIRROR] Removes avatar earpiece [no gbp] (#27360)
* Removes avatar earpiece [no gbp] (#82609) ## About The Pull Request There's no comms in the digital plane anyway so this is only stopping them from exploiting binary comms ## Why It's Good For The Game Exploit fix Fixes #82604 ## Changelog 🆑 fix: Bit avatars no longer have access to free binary comms with the AI outfit /🆑 * Removes avatar earpiece [no gbp] --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> |
||
|
|
0a0aa64d8a |
[MIRROR] Fixes netpod href exploit (#27365)
* Fixes netpod href exploit (#82698) ## About The Pull Request Can't have fits in detroit ## Why It's Good For The Game Fixes #81616 ## Changelog 🆑 fix: Netpods have had their security against exploits increased. /🆑 --------- Co-authored-by: Kapu1178 <75460809+Kapu1178@ users.noreply.github.com> * Fixes netpod href exploit --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Kapu1178 <75460809+Kapu1178@ users.noreply.github.com> |
||
|
|
fc7514e804 |
[MIRROR] Added on_surgical_insertion() and signals, to match on_surgical_removal (#27242)
* Added on_surgical_insertion() and signals, to match on_surgical_removal (#82486) ## About The Pull Request We have a proc for the effects of removing organs surgically -- currently only used for surplus organs blowing up -- so I added a matching proc for inserting them surgically. It also comes with its own signal, though there are no registrations. ## Why It's Good For The Game Orderly code with matching insertion and removal verbs. Maybe we could use this for lings, or traitors emagging cybernetics organs that make them do something zany? * Added on_surgical_insertion() and signals, to match on_surgical_removal --------- Co-authored-by: Joshua Kidder <49173900+Metekillot@users.noreply.github.com> |
||
|
|
553e8f5af8 |
[MIRROR] [NO GBP] Post-round blob zombies no longer offer themselves to ghosts (#27241)
* [NO GBP] Post-round blob zombies no longer offer themselves to ghosts (#82542) ## About The Pull Request This should properly fix the post-blob-win audio/notif spam for real this time. I wanted to preserve the effect as much as possible, so they just don't poll for ghosts when the round is already over. ## Why It's Good For The Game Closes #80998 for real this time. ## Changelog 🆑 Rhials fix: The tide of post-round blob zombies when a blob wins will no longer break the speakers in your headset. /🆑 * [NO GBP] Post-round blob zombies no longer offer themselves to ghosts --------- Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> |
||
|
|
4e3ae84c26 |
[MIRROR] slaughter/laughter demon roundend report consume count + you cant bodyslam yourself (#27226)
* slaughter/laughter demon roundend report consume count + you cant bodyslam yourself (#82481) ## About The Pull Request you cant bodyslam yourself as a slaughter/laughter demon also  also moved antag datum stuff to mind init which means easier spawning ## Why It's Good For The Game i wanted to brag in OOC about my supreme robust killcount but then i realized theres no way to verify this also hurting yourself is stupid ## Changelog 🆑 qol: slaughter/laughter demons have a cooler round end report qol: you may not bodyslam yourself as a demon code: slaughter and laughter demons are given their antag datum when their mind initializes /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> * slaughter/laughter demon roundend report consume count + you cant bodyslam yourself --------- Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> |
||
|
|
ab91adf5d0 |
[MIRROR] [no gbp] you may no longer get nullspaced by deathmatch (#27238)
* [no gbp] you may no longer get nullspaced by deathmatch (#82502) ## About The Pull Request you may no longer start loading a map that is already being loaded by another lobby thats like a bad idea if you put some thought into the implications ## Why It's Good For The Game closes #82466 closes #82460 ## Changelog 🆑 fix: deathmatch can no longer occassionally send people to nullspace /🆑 * [no gbp] you may no longer get nullspaced by deathmatch --------- Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> |
||
|
|
ae0b756b68 |
[MIRROR] Fixes some grammar on vorpal scythe execute (#27237)
* Fixes some grammar on vorpal scythe execute (#82509) ## About The Pull Request Easy PR on the tin, we were calling "the [src]" in a number of places on the vorpal scythe execute causing it to say "the the vorpal scythe" ## Why It's Good For The Game 5 second grammar fix basically ## Changelog 🆑 fix: Vorpal Scythe execute messages now read correctly. /🆑 * Fixes some grammar on vorpal scythe execute --------- Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> |
||
|
|
bdeae03878 |
[MIRROR] Makes radiaton and bomb good helmets have the FOV effect...... its not my fault (#27259)
* Makes radiaton and bomb good helmets have the FOV effect...... its not my fault (#82366) ## About The Pull Request Fixes Radiation hood having normal vision Closes #80917  ## Why It's Good For The Game It isnt but it must be done in order to remove github issues ## Changelog 🆑 fix: Fixes Radiation Hood not having FOV blockage /🆑 * Makes radiaton and bomb good helmets have the FOV effect...... its not my fault --------- Co-authored-by: Hoolny <84478872+SethLafuente@users.noreply.github.com> |
||
|
|
f42efee94f |
[MIRROR] Ody sleeper new UI (#27254)
* Ody sleeper new UI (#82513) ## About The Pull Request Removes the old reagent manager menu, and replaces it with a modern tsx one. Old:  New:  +Candy Stripes:  ## Why It's Good For The Game Old menu doesn't look good. Fixes some issues old menu had. ## Changelog 🆑 fix: fixes ody sleeper UI not updating to new chems to inject. fix: fixes ody sleeper not telling user why they can't pick up a person. code: gives a common method for giving reagent list data to .tsx /🆑 --------- Co-authored-by: san7890 <the@ san7890.com> * Ody sleeper new UI --------- Co-authored-by: Bilbo367 <163439532+Bilbo367@users.noreply.github.com> Co-authored-by: san7890 <the@ san7890.com> |
||
|
|
28a1ca3903 |
[MIRROR] Mech mob deletion fix (#27243)
* Mech mob deletion fix (#82415) ## About The Pull Request If the occupant of a mech has their mob changed -- mutation, polymorph, admin fuckery -- or if a mob somehow enters a mech without becoming an occupant -- the above, or a chestburster in said mech pilot -- then they don't get added to the occupants, only the contents. All contents are hard-deleted if a mech is destroyed. This fixes that, and ejects any mobs inside mechs who are technically inside the mech but not an occupant. ## Why It's Good For The Game Fixes #82395 and any similar case ## Changelog Being inside a mech when it's destroyed should no longer delete you, even if you ended up in that mech in an odd way. 🆑 Bisar fix: Mechs will no longer delete their living non-occupant contents when destroyed. /🆑 * Mech mob deletion fix --------- Co-authored-by: Joshua Kidder <49173900+Metekillot@users.noreply.github.com> |
||
|
|
f44daf1e44 |
[MIRROR] Medipens cant be deepfried anymore (#27336)
* Medipens cant be deepfried anymore (#82676) ## About The Pull Request Saltshakers and IV drips have special checks that allows edible things through, and deepfrying medipens turns them edible, therefore opening the exploit that you can deepfry a medipen to drain and inject chemcials into it. This sucks, and I don't want to get rid of this cool feature for everyone else, so I'm just gonna go the cheap way and blacklist medipens from being deepfried at all. It's too much of a hassle and I don't want to have to constantly bug smash new ways to inject/drain from edible foods just so medipens can't be exploited as an instant piercing chem transfer. ## Why It's Good For The Game Explained in the about me already, this is lame! Closes https://github.com/tgstation/tgstation/issues/82631, closes https://github.com/tgstation/tgstation/issues/79178 ## Changelog 🆑 fix: Medipens can no longer be deepfried, closing an exploit that allowed people to drain/inject chems into it with saltshakers and IV drips. /🆑 * Medipens cant be deepfried anymore --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
b24198bb7d |
[MIRROR] Face scarf ui toggle button works again (#27340)
* Face scarf ui toggle button works again (#82617) ## About The Pull Request - Fixes #82534 have to override `attackself()` to work ## Changelog 🆑 fix: facescarf ui toggle button works again /🆑 * Face scarf ui toggle button works again --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.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. |
||
|
|
a277231393 |
Power system updates 1 (#27358)
* zappy bois * power system updates * Update apc_defines.dm |
||
|
|
461745346c |
[MIRROR] Throws gangtools into a bottomless pit (#26992)
* Throws gangtools into a bottomless pit (#82145) ## About The Pull Request Resprites everything that used to use the old gangtool sprites (door remotes, augment choice beacon, landing zone designators, and nuke op borg spawners.)  - Added a new non-gangtool generic choice beacon, and a specific S.E.L.F. one. - Door remotes are now fancy garage door openers. - Landing designators have cannibalised the cell phone sprites from the less old version of gang. - Nuke op borg spawners use the same walkie talkie as other reinforcements Door remotes now have individual sprites for each mode, so you can see the mode at a glance. ## Why It's Good For The Game Having a range of very different items sharing the same old sprites is pretty confusing, better to have them all be unique and up to date. ## Changelog 🆑 image: Everything that used the old gangtool sprites (door remotes, landing field designators, some choice beacons, windicate borg reinforcements) has been resprited. image: Door remotes now visibly show their current mode. /🆑 * Oh yeah * I'm dum * Oh wow * placeholder for now * Bam? * pls --------- Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com> Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com> Co-authored-by: Waterpig <wtryoutube@seznam.cz> Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com> |
||
|
|
ca2caae240 |
[MIRROR] makes broken chameleon kit items immune to being EMP'd to unbreak them (#27217)
* makes broken chameleon kit items immune to being EMP'd to unbreak them (#82495) ## About The Pull Request Broken chameleon kits can be EMP'd to un-break them. This fixes that and makes them permanently broken. ## Why It's Good For The Game Patching a possible exploit Fixes #82454 ## Changelog Broken chameleon kits can't be unbroken by an EMP. 🆑 fix: Broken chameleon kits can't be unbroken by an EMP. /🆑 * makes broken chameleon kit items immune to being EMP'd to unbreak them --------- Co-authored-by: Joshua Kidder <49173900+Metekillot@users.noreply.github.com> Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com> |
||
|
|
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> |
||
|
|
01ce81895c |
[MIRROR] Fix captive xeno roundend report runtime (#27211)
* Fix captive xeno roundend report runtime (#82490) ## About The Pull Request `check_captivity` accepts a mob, not a mind  Which leads me to believe this always returned `null` and always failed. But checking further and this proc does not return a truthy or falsy value at all, meaning even if this runtime didn't happen, it still wouldn't function correctly. So I made it check for `CAPTIVE_XENO_PASS`. ## Changelog 🆑 Melbert fix: Captive Xeno end round report should make a tad more sense /🆑 * Fix captive xeno roundend report runtime --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
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
(
|
||
|
|
cffc95893f |
[MIRROR] Baisc Bot "Commission Emote" Tweak (#27265)
* Baisc Bot "Commission Emote" Tweak (#82549) ## About The Pull Request 1. Simple bots use Manual Emotes like Basic Bots 2. Re-ups the CD for emoting to commission bots to 60 seconds, as it was originally with Simple Bots 3. Punctuates the manual emotes 4. Deletes the fist bump message ## Why It's Good For The Game 1. Consistency. 2. These messages get a little... a lot spammy when walking around the halls, especially if Robotics has made a few additional bots. The original implementation had a CD of 60 seconds, which the AI behavior halved. Upping it back up for consistency + less spam. 3. Looks a little less shoddy. 4. It's a cute message, but it's completely out of character for what the bots are supposed to be "doing". They're "saluting" their "commissioned officer", not meeting up with the bros. Also they don't have fists! I understand saluting with their "robot appendage" but they don't punch people! ## Changelog 🆑 Melbert qol: Basic Bots will use their "salute" emotes less often. del: Basic bot fists. /🆑 * Baisc Bot "Commission Emote" Tweak --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
e617437145 |
[MIRROR] Atmos Tech Clothing QOL and Advanced Extinguisher Tweak (#27261)
* Atmos Tech Clothing QOL and Advanced Extinguisher Tweak (#82462) Changes Advanced Extinguisher capacity to 100u foam Adds the ability for atmos technicians to store extinguishers in the suit storage slot on atmospherics overalls ## About The Pull Request Allows for atmos technicians to store extinguishers on their shiftstart overalls without using backpack space or wearing the atmos firesuit, and helps set the Advanced Extinguisher apart from the regular ones in every cabinet. ## Why It's Good For The Game QOL change for atmos technicians via a minor change to their shiftstart overalls, giving them the ability to actually act as firefighters better by actually carrying an extinguisher on them without wasting backpack space. It also just makes more sense than them NOT being able to. Also makes the advanced extinguisher slightly more useful to help encourage techs to carry it with them instead of just sprinting for the closest conventional extinguisher when a fire breaks out. ## Changelog 🆑 qol: Atmospherics Overalls now can store fire extinguishers in the suit storage slot balance: Increased Advanced Extinguisher capacity to 100u /🆑 * Atmos Tech Clothing QOL and Advanced Extinguisher Tweak --------- Co-authored-by: Boviro <99471923+Boviro@users.noreply.github.com> |
||
|
|
96d9ba45f2 |
[MIRROR] Coffee machines carry over reagents from the beans (#27267)
* Coffee machines carry over reagents from the beans (#82519) ## About The Pull Request I can't believe that this wasn't included in the original PR #70991. From now on, if there might be any unusual substances inside coffee beans, their reagents will be carried over to the coffee made by the machine. This is one of those niche unused mechanics that no one knows about but the coders hope to see one day in a intricate plot situation. <sub><sup>please please please I hope so much for someone to use this</sup></sub> Obviously a indispensable gampleay feature. https://github.com/tgstation/tgstation/assets/57324037/e3c243d7-03fd-47bc-9bdb-fac50c5bba0b ## Why It's Good For The Game Provides the coffee machine with features that it should have had fromm the beginning. ## Changelog 🆑 add: Coffee machines can now carry over reagents from the beans to the coffee (surely no one will inject poison into them) /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@ users.noreply.github.com> * Coffee machines carry over reagents from the beans --------- Co-authored-by: disappointedButNotSuprised <57324037+disappointedButNotSuprised@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@ users.noreply.github.com> |
||
|
|
e39865b584 |
[MIRROR] Fixes a typo in the cargo console. (#27288)
* Fixes a typo in the cargo console. (#82578) ## About The Pull Request Fixes a typo in one of the items descriptions. ## Why It's Good For The Game Fixes player facing typo. ## Changelog 🆑 spellcheck: Fixes a typo in the cargo console. /🆑 --------- Co-authored-by: Jeremiah <42397676+jlsnow301@ users.noreply.github.com> * Fixes a typo in the cargo console. --------- Co-authored-by: Da Cool Boss <142358580+DaCoolBoss@users.noreply.github.com> Co-authored-by: Jeremiah <42397676+jlsnow301@ users.noreply.github.com> |
||
|
|
5fb9483568 |
[MIRROR] Improves banned antag replacement logs (#27292)
* Improves banned antag replacement logs (#82545) Just so you don't have to dive deep in the logs to find these. --------- Co-authored-by: Fikou <23585223+Fikou@ users.noreply.github.com> * Improves banned antag replacement logs --------- Co-authored-by: AnturK <AnturK@users.noreply.github.com> Co-authored-by: Fikou <23585223+Fikou@ users.noreply.github.com> |
||
|
|
75c50405c9 |
[MIRROR] Fix a few vendor restocking bugs (#27330)
* Fix a few vendor restocking bugs (#82603) ## About The Pull Request So while working on fixing standard RPEDs working at all, I noticed they weren't displaying parts when used on a vendor. Looking into it, it seemed to be because the vendors just called `display_parts(user)` on its own: https://github.com/tgstation/tgstation/blob/1780fcef62e0413da65375a37f7c8030a0371419/code/modules/vending/_vending.dm#L1151 While other machinery would wrap it in a `to_chat(...)` call. https://github.com/tgstation/tgstation/blob/1780fcef62e0413da65375a37f7c8030a0371419/code/game/machinery/_machinery.dm#L971 So, we do that too! But then, during further testing, I noticed it wasn't actually restocking. Ever. Even though it's calling the `restock(...)` proc with the same inputs as you would do manually- oh. _oh._ https://github.com/tgstation/tgstation/blob/1780fcef62e0413da65375a37f7c8030a0371419/code/modules/vending/_vending.dm#L1152-L1154 It's checking the replacer for whether it's a refill canister, and not the contents of it. Has been doing this for about 8 months, apparently. No wonder it wasn't working. Great! This should work, right? One more round of testing! Aaaaand it doesn't actually pay out any credits when restocking this way. That's because it's *specifically* coded on `attackby(...)`. https://github.com/tgstation/tgstation/blob/1780fcef62e0413da65375a37f7c8030a0371419/code/modules/vending/_vending.dm#L707-L715 Alright, well, we move this to a new `post_restock(...)` proc, and call this whenever we're done doing restocks. ```dm /obj/machinery/vending/proc/post_restock(mob/living/user, restocked) if(!restocked) to_chat(user, span_warning("There's nothing to restock!")) return to_chat(user, span_notice("You loaded [restocked] items in [src][credits_contained > 0 ? ", and are rewarded [credits_contained] credits." : "."]")) var/datum/bank_account/cargo_account = SSeconomy.get_dep_account(ACCOUNT_CAR) cargo_account.adjust_money(round(credits_contained * 0.5), "Vending: Restock") var/obj/item/holochip/payday = new(src, credits_contained) try_put_in_hand(payday, user) ``` This is separate from the `restock(...)`, so we can call it when we're _done_ restocking and need a message, rather than sending one for each canister in our RPED. We can't just break the loop on the first fitting canister, because the items we need might be spread over multiple partially full canisters. Third round of testing anyone? Oh hey infinite money glitch. It seems like we never actually reset the `credits_contained` var after paying out with it. Soooo we just append this to our `post_restock(...)` proc, and be done with it. ```dm /obj/machinery/vending/proc/post_restock(mob/living/user, restocked) (...) try_put_in_hand(payday, user) credits_contained = 0 ``` At this point, I felt it better we also reorganized the vendor `exchange_parts(...)` to only have one `display_parts(...)` call and an early return if we can't exchange parts. Any further issues I could find I felt were outside of the scope, and better off atomized into a separate pr. ## Why It's Good For The Game Fixes RPEDs not working with vendors at all. Fixes RPEDs not displaying vendor parts. Fixes restocking vendors with an RPED not giving credits. Fixes vendors not resetting their contained credits when restocked. ## Changelog 🆑 fix: RPEDs can be used on vendors again. Note that only bluespace RPEDs can carry vendor refills as of writing. fix: RPEDs can display vendor parts again. fix: Restocking vendors gives credits whether done manually or by RPEDs. fix: Vendors reset their contained credits when restocked. /🆑 --------- Co-authored-by: san7890 <the@ san7890.com> * Fix a few vendor restocking bugs --------- Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: san7890 <the@ san7890.com> |