mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 09:05:11 +01:00
masterfixes
1130 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f601a6ddaf | Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 | ||
|
|
e68c1edad1 |
Streamlines Life() a little (#96215)
## About The Pull Request Main changes - `handle_mutations` is gone, DNA Injectors are now managed via a status effect - `handle_diseases` is gone, disease stages are just handled via life signal - `handle_bodyparts` is gone, it was unused and in the future any implementations should use a life signal - `spec_life` is gone, the main content of it is now in `human/Life`, most children implementations now use life signal, zombie tongues now handle zombie groans - Life signal was split in two (pre and active) Other changes - DNA injector code was cleaned up considerably - HARS now alerts admins when you inject someone else with it like Monkey - `COPY_DNA_SE` is no longer mistakenly unused (meaning stuff like transformation sting no longer copies "active mutations") ## Why It's Good For The Game Across the course of a full round we spend the same amount of time doing literally nothing in life as we spend on handling human breathing. Now in the context of a full round this is 8 seconds. Which in the grand scheme of things, not a whole lot, but if we can get a tiny performance gain from... not doing literally nothing (especially when we can do these things cleaner with signals) that's a win in my book ## Changelog 🆑 Melbert refactor: Refactored dna injectors (both the ones that change appearance and activate mutations), report any oddities with them like failing to revert your appearance or mutations not applying correctly code: Ever so slightly changed how diseases tick, report any oddities code: Ever so slightly changed how some species mechanics tick, like golems and slimes, report any oddities code: The code behind printing appearance modifying dna injectors from genetics has changed, report any oddities code: Some backend transformation sting code changed slightly, report any oddities code: Zombie "idle" groaning is now tied to the tongue rather than the species itself admin: Force-injecting someone with HARS give an admin alert, the same as force-injecting someone with Monkey fix: Several methods of copying DNA (including transformation sting) mistakenly copied "active mutations", this has been fixed /🆑 --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
df41230e71 |
[NO GBP] Makes junk food less punishing for virus cures (#96057)
## About The Pull Request Satiety/junkiness is a weird system that still isn't behaving kindly in the view of intended behavior. -150 is about a good value to make it so that even sniffing something from a vending machine does not immediately kill a positive virus, but trying to fill up from nothing to full at one will have you getting what you paid for. ## Why It's Good For The Game Intended behavior good. This would probably have been better to do with another scaling sort of thing, but honestly, the way satiety works right now, a -150 threshold in testing seems like it does the job fine. It increments or decrements towards 0 every tick. A bit more grace here is fine because if you do go overboard, you will get punished for it. Don't really consider this a balance thing, more a patch for unintended fuckery that yet lingers on around this whole system and only really emerged as unintuitive annoyance. Edit because it needs to be said: I'm asking this to be considered a fix because on top of the fix I did last time, which corrected the basic problem of viruses continuing to self-cure even if you met the conditions to keep them, those conditions were not appropriately set with due consideration for just how the values shake out in play. Any smallest amount of negative satiety was still too punishing for what we're aiming for. ## Changelog 🆑 fix: A single space twinkie no longer cures a virus or makes it harder to get rid of one. /🆑 |
||
|
|
21b4095dfd |
[MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026 fixes https://github.com/Bubberstation/Bubberstation/issues/5549 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com> Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com> Co-authored-by: loganuk <fakeemail123@aol.com> Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com> Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com> Co-authored-by: Lucy <lucy@absolucy.moe> Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com> Co-authored-by: Isratosh <Isratosh@hotmail.com> Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com> Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com> Co-authored-by: Alexander V. <volas@ya.ru> Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com> Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Tim <timothymtorres@gmail.com> Co-authored-by: Iamgoofball <iamgoofball@gmail.com> Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com> Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com> Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com> Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com> Co-authored-by: Josh <josh.adam.powell@gmail.com> Co-authored-by: Josh Powell <josh.powell@softwire.com> Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com> Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com> Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com> Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com> |
||
|
|
cc06c01c4e |
[NO GBP] Fixes passive positive virus healing. (#95954)
## About The Pull Request Fixes the passive positive virus healing behavior I fucked up about two years ago in the process of reworking virology. Basically, if you had even one single tick of time spent malnourished or at lower than 0 satiety, you started to accumulate recovery_prob. If recovery_prob was anything other than 0, you'd be rolling to get rid of your virus, eventually getting to a point where, by virtue of the scaling, it was gonna happen. This change just makes sure that - if we aren't currently rocking spaceacillin, - if we aren't eating a ton of junk food and recovering (negative satiety trends towards 0, a good binge will put you at about -150,) - if we aren't starving (less than 150 nutrition,) our positive viruses are not going to have a recovery_prob and so are not going to self-cure. They will still accumulate peaked_cycles and so, if you constantly dip into and out of time spent malnourished, on antibiotics, or whatever, they're going to eventually cure faster when allowed. But if you maintain yourself, they should actually be rock solid now. ## Why It's Good For The Game Intended behavior that I somehow missed in the tests and tweaks and then fell out from really ever investigating why it didn't work. You weren't supposed to be fucked out of having the positive virus work from even one slightest brush with the negative circumstances. That totally undercut both the predictability and value of smart maintenance as player behavior. ## Changelog 🆑 fix: positive viruses no longer self-cure when not having spaceacillin or meeting the nutrition/satiety requirements. /🆑 |
||
|
|
b9dfbcaca3 | Adds more SeCrEt ChEmS (#95952) | ||
|
|
e98cb75c57 |
Refactor gasmix mole change into a proc (#95327)
## About The Pull Request Refactor the majority of the current gasmix mole change use cases into a proc called adjust_gas which simply adds the designated mole count of the species into the gas mix while also handling asserting the gas and garbage_collect() I also added adjust_multiple_gases and convert_gas() for modifying multiple gases and within a gasmix ## Why It's Good For The Game Lemon wanted this to be done as part of the air group refactor ## Changelog 🆑 refactor: refactored majority of gas_mix mole change into adjust_gas() proc /🆑 |
||
|
|
039a0a8180 |
Wizard Wand blind box & wand bandolier (#95563)
## About The Pull Request  This PR adds 16 more wands to the game, try and guess what they all do! I finished coding this PR 6 weeks ago but it turns out I had to sprite 16 wands after that before I could PR it. <details> **Wand of Animation**- It's like the Staff of Animation but doesn't recharge itself, obviously. **Rod of Babel**- Grants victims a new random spoken language and then removes all of their other languages. **Shearing Rod**- It renders you bald. If you are covering your hair with a helmet, it pops the helmet off (possibly its most useful effect). If you're already bald, your bald head will shine brightly and blind nearby people. **Party Wand**- Fires projectiles that are incredibly alcoholic. Two of them will destroy the livers of most targets and kill them (although it gives them a good leadup time to get that fixed before dying of alcohol toxicity), so try one at a time if you're just there to have fun. **Wand of Ice**- Freezes people temporarily, making them really cold and unable to move. It also spawns slippery ice on impacted tiles. **Wand of Chaos**- Forces targets to hallucinate from a curated list of hallucinations. It looks and is named sort of like the Staff of Chaos just in the hopes that people are more likely to believe that the wizard did actually just instantly kill them, set them on fire, or turn them into a demon. Even if it doesn't, a lot of these cause you to stop moving or be temporarily knocked down or in some other way disoriented. **Lifting Rod**- Removes gravity from a target for two minutes, which funcionally immobilises them if they're in the middle of a room or you can use on yourself to cross big pits. **Rod of Compassion**- Heals you and your target a little bit, and also gives you both Pacifism for 30 seconds. This gives you time to talk out your problems, or deliver a monologue. **Wand of Snacking**- Turns things into pizza. If fired at a mob, will put some pizza in their hands and force them to start eating it. Unlikely to be deadly, but it might spawn mouldy pizza, a food they are allergic to, ethereal battery acid pizza, or pizza which dismembers you. **Pestilent Wand**- Confers a transmissible plague which causes you to periodically cough out vermin of various degrees of danger and hostility depending on disease level, treated via traditional methods of exorcism. **Wand of Pratfalls**- Slips and pies the target as well as creating small amounts of lube foam. **Wand of Rebellion**- Removes a limb from the target, then animates that limb. Stop hitting yourself. **Rod of Repulsion**- Throws things you shoot away from you. **Switching Rod**- Swap places with the hit atom, as with the spell Swap. **Restraining Rod**- Summons a tentacle from the ground to grasp the target, immobilising them for 20 seconds or until someone helps them. **Wand of Zapping**- Briefly locks up the target's nerves with lightning (it's secretly a classic ss13 taser). </details> They are available to wizards via the new option "Wand Assortment (Bargain Bin)" which only costs a single spellbook point, but gives you an assortment of 6 wands picked at random from this list of new wands and some of the existing ones. If you buy two or more sets of wands (and are wearing the wand belt from the first one) then instead of spawning wands in a belt it will spawn them in a bandolier, which fits into your backpack or can be worn on a suit slot. Wand bandoliers in a suit slot will automatically replace an empty wand you try to fire with a wand that still has ammo in it. Several of these wands' projectiles are now also possibilities from firing the Staff of Chaos (making it more chaotic) and some of them also have their own Magicarp types. Also I made it so that if you animate an animating weapon then it focuses on animating more things instead of shooting its animating bolts at mobs that are already animate. I could do this for more specialty wands too at some point (door wand projectiles don't exactly hurt anyone) but if I do that it'll probably be in a different PR. ## Why It's Good For The Game A good number of these wands come from a downstream antagonist that's essentially a lower-threat wizard. I thought these were all fun or funny effects to have in the game upstream but also not ones that people would typically want to buy as a dedicated spell (or alternately, that would be pretty good as a dedicated spell but quite boring), so instead they're limited use spells that you get in bulk for cheap. I didn't think we'd really want to bulk up the spellbook with several different kinds of themed bundle though (and frankly, they don't share themes), so it's a blind box instead. The bandolier was added to compensate people for buying random wands multiple times, so they can have more of a wand-based playstyle. Now you can spend all of your points on 60 wands (maybe more if you take the gambling trait...) and be a sort of wizard cowboy, or split them among your apprentices, or just leave them everywhere like candy and see whether the crew fuck things up for themselves with their new power I guess. ## Changelog 🆑 add: Adds 16 more wizard wands to the game, which wizards can buy cheaply but randomly, or are available via Summon Magic. add: If a wizard buys more than one set of wands they will receive a "Wand Bandolier" holster which fits in the backpack or, if worn in the suit slot, will automatically exchange an expended wand for a full one. balance: Staffs (and wands) of animation that are animated will try to animate other objects instead of firing at living mobs, which are already animated. balance: Animating a wand of nothing will turn it into a wand of animation (and animate it). balance: The staff of chaos can now do more things. balance: Magicarp now additionally come in Babbling, Frigid, Quantum, and Weightless varieties. Collect them all! /🆑 |
||
|
|
ed54499828 |
[MDB Ignore] Medical larp: Adds the IDC-27 as an analog to the SDSM-35 for viruses (#95465)
## About The Pull Request Continues the work of #94761 by adding an analog for virus references It contains a majority of viruses - including some that are not-quite-viruses like parrot possession Some are excluded, some are combined into others It also contains all advanced virus symptoms <img width="859" height="509" alt="image" src="https://github.com/user-attachments/assets/c73f56c0-5a11-4643-9a97-1e2a06ade0c1" /> Other changes - Refactored the SDSM to have use a generic "PaginatedBook" component for reuse - Adjusted flavor of all of the diseases - Flu / Spanish Flu and Cold / Cold 9 now properly act as antibodies for one another as implied by cure text ## Why It's Good For The Game Refer to #94761 : De-wikification and larp. This one is a reference to the IDC-11. ## Changelog 🆑 Melbert refactor: Refactored the SDSM-35 to allow for new books of similar styles, report any oddities with it. fix: Fixes the broken image(s) in the SDSM-35. add: Adds the IDC-27 in Medbay, the CMO's office, Virology, and possibly the Library. It's a reference book to all viruses you may experience, similar to the SDSM-35. add: Several diseases/viruses received minor flavor adjustments, primarily to cure text, agent, description, and form. add: Getting cured of the Flu provides immunity to Spanish Flu (and visa versa) as implied in cure text. add: Getting cured of a Cold provides immunity to Cold-9 (and visa versa) as implied in cure text. /🆑 --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> |
||
|
|
da64374423 |
Reverts "Add prosthetic limb" surgery to involve targeting limbs, rather than targeting chest. (Adds stumps) (#95252)
## About The Pull Request - The `prosthetic replacement` surgical operation has been reverted to be closer to how it used to work: The operation is done targeting the limb that's missing The change was made out of necessity, as surgical state was tied to limbs - you had to operate on the chest to re-attach limbs because there was no limb to operate on. To circumvent that, I have done the unthinkable of adding stumps when you are dismembered. - Missing limbs are now represented as an invisible, un-removable, un-interactable limb. Making this change was not as difficult as originally anticipated, and (at least surface level) seems to have broken very little. Surprisingly little had to change to make this work. Direct accesses to `mob.bodyparts` was changed to `mob.get_bodyparts()` with an optional `include_stumps` argument. Similarly, `get_bodypart()` had an optional `include_stumps` added. This means we ultimately barely needed to change anything, and in fact, some loops/checks were able to be streamlined. ## Why It's Good For The Game - As mentioned, this change was out of necessity and was easily the least intuitive part of the broader changes. Reverting it back to how it used to work should make it far easier for people to pick up on, and means we can cut out a bunch of bespoke instruction sets that I had to include. - The addition of stumps also adds a ton of future potential - code wise it allows for stuff like better damage tracking (we can transfer damage between limb <-> stump rather than limb <-> chest), and feature we can do "fun" stuff like have stumps bleed on dismemberment that you can bandage. ## Changelog 🆑 Melbert del: "Add prosthetic limb" surgical operation has been reverted to be a bit closer to how it used to work - you operate on the missing limb / limb stump, rather than on the chest. refactor: Missing limbs are now represented as limb stumps. In practice this should change nothing (for now), as no features were rewritten to make use of these besides surgery. Please report any oddities with missing limbs, however. /🆑 |
||
|
|
00ccf0c6b5 |
Merge remote-tracking branch 'tgstation/master' into upstream-feb12-2026
# Conflicts: # .github/CODEOWNERS # .github/workflows/compile_changelogs.yml # .github/workflows/stale.yml # SQL/database_changelog.md # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # code/__DEFINES/atom_hud.dm # code/__DEFINES/inventory.dm # code/__DEFINES/mobs.dm # code/__DEFINES/species_clothing_paths.dm # code/__DEFINES/subsystems.dm # code/__DEFINES/surgery.dm # code/__HELPERS/global_lists.dm # code/_globalvars/lists/maintenance_loot.dm # code/_globalvars/traits/_traits.dm # code/controllers/subsystem/minor_mapping.dm # code/controllers/subsystem/processing/quirks.dm # code/controllers/subsystem/shuttle.dm # code/datums/components/palette.dm # code/datums/components/surgery_initiator.dm # code/datums/diseases/advance/advance.dm # code/datums/hud.dm # code/datums/mood.dm # code/datums/mutations/chameleon.dm # code/datums/quirks/negative_quirks/nyctophobia.dm # code/datums/status_effects/debuffs/debuffs.dm # code/datums/status_effects/debuffs/drunk.dm # code/datums/status_effects/debuffs/slime/slime_leech.dm # code/datums/weather/weather.dm # code/game/data_huds.dm # code/game/objects/items.dm # code/game/objects/items/devices/scanners/health_analyzer.dm # code/game/objects/items/frog_statue.dm # code/game/objects/items/rcd/RLD.dm # code/game/objects/items/robot/items/hypo.dm # code/game/objects/items/stacks/medical.dm # code/game/objects/items/stacks/wrap.dm # code/game/objects/items/storage/garment.dm # code/game/objects/items/tools/medical/defib.dm # code/game/objects/items/weaponry.dm # code/game/objects/items/weaponry/melee/misc.dm # code/game/objects/structures/crates_lockers/closets/secure/security.dm # code/game/objects/structures/curtains.dm # code/game/objects/structures/dresser.dm # code/game/objects/structures/girders.dm # code/game/objects/structures/maintenance.dm # code/game/objects/structures/mirror.dm # code/modules/admin/greyscale_modify_menu.dm # code/modules/admin/verbs/light_debug.dm # code/modules/antagonists/ashwalker/ashwalker.dm # code/modules/antagonists/heretic/knowledge/starting_lore.dm # code/modules/antagonists/ninja/ninjaDrainAct.dm # code/modules/art/paintings.dm # code/modules/client/preferences.dm # code/modules/client/verbs/ooc.dm # code/modules/clothing/head/wig.dm # code/modules/events/disease_outbreak.dm # code/modules/holodeck/holo_effect.dm # code/modules/jobs/job_types/head_of_security.dm # code/modules/jobs/job_types/security_officer.dm # code/modules/library/skill_learning/generic_skillchips/point.dm # code/modules/mining/lavaland/ash_flora.dm # code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm # code/modules/mob/dead/new_player/new_player.dm # code/modules/mob/living/basic/guardian/guardian.dm # code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm # code/modules/mob/living/carbon/carbon.dm # code/modules/mob/living/carbon/human/human.dm # code/modules/mob/living/carbon/human/human_defines.dm # code/modules/mob/living/carbon/life.dm # code/modules/mob/living/living.dm # code/modules/mob/living/living_defines.dm # code/modules/mob/mob.dm # code/modules/mob_spawn/ghost_roles/mining_roles.dm # code/modules/mod/mod_control.dm # code/modules/mod/modules/modules_general.dm # code/modules/modular_computers/computers/item/computer_ui.dm # code/modules/paperwork/paper.dm # code/modules/paperwork/paperbin.dm # code/modules/power/lighting/light.dm # code/modules/projectiles/guns/energy/kinetic_accelerator.dm # code/modules/projectiles/projectile.dm # code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm # code/modules/reagents/chemistry/reagents/food_reagents.dm # code/modules/reagents/chemistry/reagents/other_reagents.dm # code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm # code/modules/research/xenobiology/crossbreeding/_clothing.dm # code/modules/research/xenobiology/crossbreeding/prismatic.dm # code/modules/surgery/advanced/brainwashing.dm # code/modules/surgery/advanced/lobotomy.dm # code/modules/surgery/amputation.dm # code/modules/surgery/blood_filter.dm # code/modules/surgery/bodyparts/_bodyparts.dm # code/modules/surgery/brain_surgery.dm # code/modules/surgery/cavity_implant.dm # code/modules/surgery/coronary_bypass.dm # code/modules/surgery/gastrectomy.dm # code/modules/surgery/healing.dm # code/modules/surgery/limb_augmentation.dm # code/modules/surgery/organ_manipulation.dm # code/modules/surgery/revival.dm # code/modules/surgery/sleeper_protocol.dm # code/modules/surgery/surgery_helpers.dm # code/modules/surgery/surgery_step.dm # code/modules/unit_tests/_unit_tests.dm # code/modules/unit_tests/designs.dm # code/modules/unit_tests/icon_state_worn.dm # code/modules/unit_tests/screenshots/screenshot_antag_icons_cultist.png # code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png # code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png # code/modules/unit_tests/screenshots/screenshot_husk_body.png # code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png # icons/map_icons/clothing/head/_head.dmi # icons/map_icons/clothing/shoes.dmi # icons/map_icons/items/_item.dmi # icons/mob/huds/hud.dmi # icons/mob/inhands/64x64_lefthand.dmi # icons/mob/inhands/64x64_righthand.dmi # icons/obj/machines/computer.dmi # tgui/packages/tgui/interfaces/OperatingComputer.jsx # tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx # tgui/packages/tgui/interfaces/PreferencesMenu/types.ts # tgui/packages/tgui/interfaces/SurgeryInitiator.tsx # tools/icon_cutter/check.py |
||
|
|
b1e6830ec5 |
Benificial viruses self curing fix (#95017)
## About The Pull Request TIL that calling has_reagent with null returns "stomach lining". Also the other sleeping check uses the same criteria as the first one. Also I have no idea why there's a super old commit stuck in this PR. Maybe fixes #94873 ## Why It's Good For The Game bugfix ## Changelog 🆑 fix: viruses should maybe probably not cure themselves /🆑 --------- Co-authored-by: Fghj240 <fakeemail@notrealemail.com> |
||
|
|
8e63bdd337 |
Moves disfiguration to be handled by the head instead of the mob itself (#94948)
## About The Pull Request TRAIT_DISFIGURED and physical disfiguration are now handled by the head bodypart rather than being on the mob itself. This is mostly for internal purposes, but it does mean that: - Players can now perform plastic surgery on torn off heads. - Disfigured mobs' heads keep their face hidden, and when attached to a different body won't magically get repaired and vice versa, attaching a new head to a disfigured corpse no longer disfigures it. - Robotic (and other non-huskable) heads no longer become disfigured from husking - Also in the rare case of grafting a head torn off from a husk onto another body, they no longer permanently turn into an Unknown. (lol) ## Why It's Good For The Game Saner code, we generally want limb-specific behaviors to be on limbs themselves and not on the mob. Also yeah that one weird edge case. ~~Husks are next on the chopping block~~ ## Changelog 🆑 qol: Plastic surgery can now be done on detached heads. refactor: Refactored how disfiguration is handled to be stored on head's side fix: Robotic (and other non-huskable) heads no longer become disfigured from husking fix: Attaching a head from a husk to a different body no longer permanently turns them into an Unknown. /🆑 |
||
|
|
a02b823822 |
Fixes Radioactive Resonance symptom not updating host health (#94977)
## About The Pull Request Fixes #94975 by making the radheal symptom correctly update the host's health after healing. There's not really much else to say. 🆑 fix: Viruses that heal their hosts through radiation no longer cause phantom pain. /🆑 |
||
|
|
5ed2539038 |
Advanced disease cures are symptom based (#94352)
Co-authored-by: Fghj240 <fakeemail@notrealemail.com> |
||
|
|
92287c384e |
If you have immunodeficiency you do not cure diseases on your own (#94877)
## About The Pull Request You no longer have natural recovery if you have immunodeficiency. ## Why It's Good For The Game Makes you actually need to seek medical assistance when you get sick with immunodeficiency. Right even with a weak immune system you still cure yourself. ## Changelog 🆑 balance: people with immunodeficiency no longer can cure themselves automatically /🆑 |
||
|
|
7c5ef1cfb8 |
Removes unused parameter times_fired from mob procs (#94590)
## About The Pull Request What it says on the tin. `times_fired` is the most unused parameter in all mob procs. I say most because there were just 2 cases where it was used - handling breathing - handling heartbeat Besides these 2 cases this parameter did nothing in every proc. Removing it does 2 things - Makes those procs more readable as it now has 1 less parameter that was documented poorly and did nothing - Makes those procs slightly faster as we are passing 1 less variable to its parameter call stack It can easily be substituted with `SSmobs.times_fired` which was its original value anyways ## Changelog 🆑 code: removes an unused parameter `times_fired` from mob life procs. Making them function slightly faster /🆑 |
||
|
|
6e9f2ccfc0 |
Merge remote-tracking branch 'tgstation/master' into upstream-12-15
# Conflicts: # .github/workflows/compile_all_maps.yml # .github/workflows/run_integration_tests.yml # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # code/_onclick/hud/credits.dm # code/controllers/subsystem/networks/id_access.dm # code/datums/diseases/advance/advance.dm # code/datums/diseases/advance/symptoms/heal.dm # code/game/machinery/doors/door.dm # code/game/objects/structures/crates_lockers/closets/secure/medical.dm # code/game/objects/structures/crates_lockers/closets/secure/security.dm # code/modules/antagonists/malf_ai/malf_ai_modules.dm # code/modules/jobs/job_types/_job.dm # code/modules/loadout/categories/accessories.dm # code/modules/loadout/loadout_helpers.dm # code/modules/loadout/loadout_items.dm # code/modules/loadout/loadout_preference.dm # code/modules/mob/living/silicon/robot/robot_defense.dm # code/modules/mod/mod_theme.dm # code/modules/projectiles/ammunition/energy/laser.dm # code/modules/reagents/reagent_containers/cups/drinks.dm # code/modules/shuttle/mobile_port/variants/supply.dm # code/modules/surgery/organs/internal/eyes/_eyes.dm # code/modules/unit_tests/screenshots/screenshot_antag_icons_heretic.png # icons/hud/screen_full.dmi |
||
|
|
809cef8ae9 |
Makes tuberculosis message only tell you to take off your clothes if you have clothes on (#94379)
## About The Pull Request The clothes-referencing messages within tuberculosis's heating up symptom are only chosen if the person effected has a jumpsuit on ## Why It's Good For The Game closes #94350 ## Changelog 🆑 spellcheck: Tuberculosis no longer tells naked people to get naked /🆑 |
||
|
|
c3edf46e04 |
Healing virus symptom stuff (#94085)
## About The Pull Request This PR touches up a lot of the healing virus symptom code, removing single letter vars and simplifying stuff and the like. It also makes a couple of small changes. - Healing symptoms can heal robotic and golem body parts if the virus has inorganic biology - Regen coma now activates at damage equal to 70% of your max health instead of just 70, and the passive messages come after taking damage equal to 30% of your max health instead of just 30. - Regen coma checks a second time for TRAIT_NOSOFTCRIT when the coma activates, so if you inject a penthrite pen within 6 seconds after getting the warning you'll avoid the coma. - Toxolysis food scales with the amount of chems purged. If you only have 0.1 unit of a chem in you you won't get fed as much from it. As a result, if you have the doubled purging stat threshold you can feed yourself twice as much. ## Why It's Good For The Game Code cleanup is nice, regen coma shouldn't be taking you out early while you've still got some fight left, and I don't think it's supposed to coma you if you're on penthrite when it happens. <img width="945" height="431" alt="image" src="https://github.com/user-attachments/assets/425e8e1b-61d9-4eca-a413-1470ba9752cc" /> This was actually the original intention of regen coma checking for nosoftcrit, it just didn't make it in. [Original PR](https://github.com/tgstation/tgstation/pull/89072) Toxolysis food scaling just makes logical sense. Otherwise you can take a chem patch microdose and become super fat super fast. Doubled food is fair if you're purging twice as much reagents. Also currently if you have regen coma and really damaged robotic limbs you'll just keep going into a coma over and over again forever because it can't heal your robotic limbs. This can still happen (and should probably be changed) but at least there'll be a way to circumvent it. ## Changelog 🆑 balance: Regenerative Coma activation thresholds scales with your max hp balance: Regenerative Coma can be canceled by gaining nosoftcrit before it activates balance: Toxolysis food scales with the amount of reagents purged /🆑 --------- Co-authored-by: Fghj240 <fakeemail@notrealemail.com> |
||
|
|
baf3837ae8 |
Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29
# Conflicts: # _maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm # _maps/RandomRuins/SpaceRuins/garbagetruck2.dmm # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # _maps/map_files/tramstation/tramstation.dmm # code/_onclick/hud/new_player.dm # code/datums/components/squashable.dm # code/datums/diseases/advance/symptoms/heal.dm # code/datums/diseases/chronic_illness.dm # code/datums/status_effects/buffs.dm # code/datums/status_effects/debuffs/drunk.dm # code/datums/status_effects/debuffs/stamcrit.dm # code/game/machinery/computer/crew.dm # code/game/objects/items/devices/scanners/health_analyzer.dm # code/game/objects/items/wall_mounted.dm # code/game/turfs/closed/indestructible.dm # code/modules/admin/view_variables/filterrific.dm # code/modules/antagonists/heretic/influences.dm # code/modules/cargo/orderconsole.dm # code/modules/client/preferences.dm # code/modules/events/space_vines/vine_mutations.dm # code/modules/mob/dead/new_player/new_player.dm # code/modules/mob/living/carbon/human/death.dm # code/modules/mob/living/carbon/human/species_types/jellypeople.dm # code/modules/mob/living/damage_procs.dm # code/modules/mob/living/living.dm # code/modules/mob_spawn/ghost_roles/mining_roles.dm # code/modules/mob_spawn/mob_spawn.dm # code/modules/projectiles/ammunition/energy/laser.dm # code/modules/projectiles/guns/ballistic/launchers.dm # code/modules/projectiles/guns/energy/laser.dm # code/modules/reagents/chemistry/machinery/chem_dispenser.dm # code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm # code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm # code/modules/reagents/chemistry/reagents/medicine_reagents.dm # code/modules/surgery/healing.dm # code/modules/unit_tests/designs.dm # icons/mob/inhands/items_lefthand.dmi # icons/mob/inhands/items_righthand.dmi # tgui/packages/tgui/interfaces/ChemDispenser.tsx |
||
|
|
1d274696e6 |
Radioactive Resonance grammar (#94203)
## About The Pull Request closes #94197 ## Why It's Good For The Game glorious days of cellular damage are over ## Changelog 🆑 spellcheck: Removed cellular damage mention from Radioactive Resonance virus description. /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
67a4574ab2 |
Pandemic machine QOL (#94176)
## About The Pull Request You can swap beakers in a pandemic and the overall virus severity is now displayed as a stat. ## Why It's Good For The Game more convenient ## Changelog 🆑 qol: you can swap beakers in a pandemic qol: pandemics now display overall virus severity admin: virus logs now include severity along with other stats /🆑 --------- Co-authored-by: Fghj240 <fakeemail@notrealemail.com> |
||
|
|
7a3ad79506 |
All camelCase (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use snake_case. UNDERSCORES RULE! (#94111)
## About The Pull Request It's just a partial cleanup of anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md) code from /tg/'s ancient history. I compiled & tested with my helpful assistant and damage is still working. <img width="1920" height="1040" alt="image" src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3" /> I'll upload the .cs script I used to do it shortly. ## Why It's Good For The Game Just minor code cleanup. Script used is located at https://metek.tech/camelTo-Snake.7z EDIT 11/23/25: Updated the script to use multithreading and sequential scan so it works a hell of a lot faster ``` /* // Copyright 2025 Joshua 'Joan Metekillot' Kidder This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. // */ using System.Text.RegularExpressions; class Program { static async Task Main(string[] args) { var readFile = new FileStreamOptions { Access = FileAccess.Read, Share = FileShare.ReadWrite, Options = FileOptions.Asynchronous | FileOptions.SequentialScan }; FileStreamOptions writeFile = new FileStreamOptions { Share = FileShare.ReadWrite, Access = FileAccess.ReadWrite, Mode = FileMode.Truncate, Options = FileOptions.Asynchronous }; RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled; Dictionary<string, int> changedProcs = new(); string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*"; Regex camelCaseProcRegex = new(regexPattern, regexOptions); string snakeify(Match matchingRegex) { var vals = matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray(); var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower(); string logString = $"{vals[0]} => {newVal}"; if (changedProcs.TryGetValue(logString, out int value)) { changedProcs[logString] = value + 1; } else { changedProcs.Add(logString, 1); } return newVal; } var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>(); // uses default ParallelOptions // https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) => { var reader = new StreamReader(filePath, readFile); string oldContent = await reader.ReadToEndAsync(); string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify)); if (oldContent != newContent) { var writer = new StreamWriter(filePath, writeFile); await writer.WriteAsync(newContent); await writer.DisposeAsync(); } reader.Dispose(); }); var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList(); foreach (var pair in logToList) { Console.WriteLine($"{pair.Key}: {pair.Value} locations"); } } } ``` ## Changelog 🆑 Bisar code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use snake_case, in-line with the STYLE guide. Underscores rule! /🆑 |
||
|
|
1cb9fd7687 |
2 new virus symptoms (#93943)
## About The Pull Request This PR adds 2 new virus symptoms for virology: Anticoagulant and Thermoregulation. Yes the names are really long I dunno what else to call them. Anticoagulant is a stealth oriented level 7 negative virus symptom that makes the host bleed more and with high enough stats also increases their susceptibility to recieving bleeding wounds. Thermoregulation is a level 5 positive virus symptom that regulates your body temperature based on your species. Anticoagulant isn't really good for a death virus but the idea is that it's really stealthy so you can put it in a stealth virus and then grab a bleeding weapon and do a lot of damage with it. ## Why It's Good For The Game New content. ## Changelog 🆑 add: Added 2 new virus symptoms /🆑 --------- Co-authored-by: Fghj240 <fakeemail@notrealemail.com> Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com> |
||
|
|
c7cb0674cc |
Preliminary blood refactor (#93854)
## About The Pull Request Moves all blood handling into procs and adds ways to easily hook into basically every basic blood behavior. This PR is not meant to fix every single case of janky blood logic in the game. The main point and motivation of this PR is to add hooks for blood behaviors. This allows for way more flexibility with blood code. I am not going to fix our 3000 instances of single-letter vars, wacky blood transfers, etc. This is just the groundwork for future PRs to build off of, and by itself, should do very little to change blood behavior. I also added a rigorous set of unit tests for verifying that all of the basic blood volume procs work correctly. ## Why It's Good For The Game Previously, blood was handled via directly reading/writing [var/blood_volume]. This was INCREDIBLY inconsistent and there was no way to hook into it. This PR makes blood handling way more consistent, which is great for all sorts of features. |
||
|
|
e28e9fbdba | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-23-10-2025 | ||
|
|
ca2cc70322 |
Organ damage refactor/cleanup (#93436)
## About The Pull Request So, my original goal was just a refactor for the emissive overlays of eyes, as a way to implement the specular emissive introduced by smartkar some time ago, but somehow I found myself dragged into a bigger refactor or cleanup of organ damage, thresholds, failures. One of the main problem was that there were no procs called when a organ suffered enough damage to fail or when recovering from failure. It'd just enable or disable a bitflag, leaving it up to subtypes to decide how to tackle organ failure their own ways: diverse, funky and sometimes incompatible. More often than not relying on their very own "update_thingamajig" kinda procs that run whenever the organ takes damage, rather than just when the threshold is reached (low, high, failure. There are however a couple organs with their own quirky thresholds, I let those slide). There's also a bit of old code, especially for ears, with the `AdjustEarDamage` and temporary deafness both predating the framework for organ damage as far as I know. It really needed a coat of fresh paint. Oh, there were also more than a handful of organs that still heavily relied on some ORGAN_TRAIT source instead of the `organ_traits` list and the two add/remove procs `add_organ_trait` or `remove_organ_trait`. This include organs that lose or gain specific traits when failing et viceversa. ~~Lastly, felinids (and the halloween ghost species) having reflective eyes. It's just a nod to the tapetum lucidum that animals with night vision often have (including cats), which is why their eyes are a bit brighter in the dark. Felinids however, do not have night vision (nor do ghosts). This is merely cosmetic.~~ Cut out for the time being due to issues with the specular emissive... ## Why It's Good For The Game Refactoring / cleaning up old organ code. ## Changelog 🆑 refactor: Refactored organ damage code a little. Hopefully there won't be issues (otherwise report them). /🆑 |
||
|
|
5e629dff04 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync | ||
|
|
c69d5afa19 |
Dormant DNA activator fix (#93167)
## About The Pull Request 1. Literally didn't pass the mutation to mutate 2. This used to use `easy_random_mutate`, so it should set scrambled for parity ## Changelog 🆑 Melbert fix: Fixes dormant DNA activator /🆑 |
||
|
|
9b282a850e | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync | ||
|
|
72580ce0bb |
Adds Various Classic Cocktails (#92955)
## About The Pull Request TL;DR: "What do you mean we didn't have an old fashioned in the game before?" This adds a bunch of different classic cocktails to the game that I always felt were rather odd holes in the lineup of drinks that bartenders could make, as well as a few less classic ones 'cause why not. Adds thirteen new alcoholic drinks and one non alcoholic one. Mechanically relevant drinks include the Blue Blazer and Hot Toddy which warm you up like coffee, Bitters and Soda which settles upset stomachs, and the Suffering Bastard which, in it's role as a hangover cure, calms nausea, prevents headaches, and very slowly heals brain damage, giving a way to heal chip brain damage that doesn't require chemistry or surgery. Full list here: https://hackmd.io/@0lHAWBNkSXixU4v6xxYS_w/SkjlmIbsgx <img width="439" height="435" alt="drinks" src="https://github.com/user-attachments/assets/406ca285-63af-49d4-b0e8-176edb251291" /> PS This is basically my first real project and also my first time spriting for anything, so I would really appreciate any advice or reccomendations. ## Why It's Good For The Game More variety for service is always nice, but also many of these drinks are extremely commonly ordered in real world bars. Adding them here fills some weird gaps in the bar's line up, allows people to order more drinks that they personally like, and decreases the amount of awkward interactions in which people order a drink that they're familiar with and then get confused when a partender somehow can't give them an daiquiri despite having everything to make it. ## Changelog 🆑 add: You can now make 15 new classic (and some less classic) cocktails. Includes old standards like the Old Fashioned, Daiquiri, Ramos Gin Fizz, and more! /🆑 |
||
|
|
7c0973ccf4 |
Refactors names and voices / potted plants no longer conceal voice (just appearance) / honorifics show on examine (#92781)
## About The Pull Request Closes #92778 Closes #86829 <img width="347" height="39" alt="image" src="https://github.com/user-attachments/assets/c50bd1ff-8c00-47a7-a31a-617fae2adc5b" /> 1. Splits `TRAIT_UNKNOWN` into `TRAIT_UNKNOWN_APPEARANCE` and `TRAIT_UNKNOWN_VOICE` 2. Renames some stuff like `getvoice` and `getspecialvoice` 3. Gets rid some crummy signals around `get_visible_name` and `get_voice` 4. Heads now apply the disfigured trait when relevant (rather than snowflake checking for damage amount) 5. Ling voice refactored into using special voice (it was only used by a viro symptom anyways; I don't anticipate this overlap being problematic) 6. Mask voice changer refactored into a trait ## Why It's Good For The Game Potted plants shouldn't have magical voice concealing powers - especially not over radio, but not over in person either. It's a damn plant So I addressed this by refactoring our face and voice system. Overall things should be a lot cleaner and easier to use. ## Changelog 🆑 Melbert refactor: Refactored a lot of code relating to human face and voice, ie, what shows up in examine and in say. Report anything odd when examining people, with ID cards, when talking over radio, or when disguised refcator: Refactored how you get disfigured when your head's super damaged refactor: Refactored ling mimic voice and traitor voice changer del: Potted plants no longer hide voice. They still hide appearance, though qol: Honorifics now show in examine / in world, rather than only when speaking. /🆑 |
||
|
|
ee99d0e5b0 |
Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request Revival of https://github.com/tgstation/tgstation/pull/79691 A while back, I made this PR, but lost motivation after diving too deep into the code soup of can_breathe and related procs. Now, I have removed those parts, and have simplified that part of the code to the point I think it's ready for review. Many reviews from the previous PR have been addressed in this PR. <hr> <details> <summary>Details</summary> Asthma is a 4 point negative quirk that emulates real life asthma. It works by slowly decreasing the amount of pressure each breath you take receives, until your lungs completely seal, ensuring death if you dont get oxyloss meds/windpipe surgery. Inflammation (the tracker for intensity) increases whenever you breathe smoke, use a cigarette, metabolize histimine, or suffer an asthma attack. Asthma attacks have a low chance of happening every second, starting 10 minutes after you spawn and with a 20-30 grace period between attacks. They are "diseases" that cant be outright cured by albuterol, only put into remission. They increase inflammation at varying rates depending on their severity, with extreme asthma attacks being a immediate threat to your life while mild ones might not even cause inflammation. The response to these is always the same - use your inhaler before you start choking. Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded with albuterol, which I will get to later. Albuterol is a new medicine thats a little tricky to make but still doable. It can be efficiently created with inverse convermol, or transmutated from salbutamol and convermol. The opposite is true, with albuterol able to be turned into salbutamol. Two canisters are available in chemvends. Upon use, it increases the virtual pressure of all breaths taken by 40%. This allows for you to breathe in lower pressure environments, as well as enhancing the effects of things like healium. It's OD causes your diaphram to spasm, causing sporadic losebreath and forced breathing. Inhalers are a fancy new reagent application apparatus that uses the INHALE reagent bitflag. Inhalers themselves are rather unremarkable, they are merely the method of using inhaler canisters (they also have a rotary display approximating the uses left in a canister - just like real life inhalers). Inhaler canisters are the reagent containers, and are generally low capacity. They can only be used in a inhaler, and contain aerosolized chemicals. Inhaler canisters and inhalers are unlocked from chemical synthesis, and are printable for cheap from a medlathe. In order to use a inhaler, one must uncover the mouth of a carbon and wait a few seconds (its faster if its a self-application) before a small amount of the reagents are delivered via the INHALE bitflag. This only works on things currently breathing - if theyre dead, have no lungs, or just, arent breathing - it will fail. This includes asthmatics with 100% inflammation. </details> <img width="181" height="74" alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521" src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e" /> <img width="1465" height="202" alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963" src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667" /> Sprites are not mine; they are from swanni and I can NOT sprite for the life of me ## Why It's Good For The Game 1. Asthma is just cool. One of my favorite features on bay was the fact lung damage required you to turn up the pressure on your O2 tank to survive, and this does precisely that. 2. Its always fun to add new ways to interact with atmos as a player that arent grossly broken, and I fail to see how a 40% increase of gas intake will really affect balance too badly. 3. Inhalers are badass. ## Changelog 🆑 add: Asthma quirk, based on IRL asthma add: Inhalers, a new reagent administering method that uses INHALE add: Albuterol, a new reagent that increases the amount of gas you inhale by 40% balance: Inverse convermol now forms once the reaction is done, not on metabolize /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> # Conflicts: # code/datums/quirks/negative_quirks/allergic.dm # code/game/objects/items/devices/scanners/health_analyzer.dm |
||
|
|
fadbf16e1b |
Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request Revival of https://github.com/tgstation/tgstation/pull/79691 A while back, I made this PR, but lost motivation after diving too deep into the code soup of can_breathe and related procs. Now, I have removed those parts, and have simplified that part of the code to the point I think it's ready for review. Many reviews from the previous PR have been addressed in this PR. <hr> <details> <summary>Details</summary> Asthma is a 4 point negative quirk that emulates real life asthma. It works by slowly decreasing the amount of pressure each breath you take receives, until your lungs completely seal, ensuring death if you dont get oxyloss meds/windpipe surgery. Inflammation (the tracker for intensity) increases whenever you breathe smoke, use a cigarette, metabolize histimine, or suffer an asthma attack. Asthma attacks have a low chance of happening every second, starting 10 minutes after you spawn and with a 20-30 grace period between attacks. They are "diseases" that cant be outright cured by albuterol, only put into remission. They increase inflammation at varying rates depending on their severity, with extreme asthma attacks being a immediate threat to your life while mild ones might not even cause inflammation. The response to these is always the same - use your inhaler before you start choking. Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded with albuterol, which I will get to later. Albuterol is a new medicine thats a little tricky to make but still doable. It can be efficiently created with inverse convermol, or transmutated from salbutamol and convermol. The opposite is true, with albuterol able to be turned into salbutamol. Two canisters are available in chemvends. Upon use, it increases the virtual pressure of all breaths taken by 40%. This allows for you to breathe in lower pressure environments, as well as enhancing the effects of things like healium. It's OD causes your diaphram to spasm, causing sporadic losebreath and forced breathing. Inhalers are a fancy new reagent application apparatus that uses the INHALE reagent bitflag. Inhalers themselves are rather unremarkable, they are merely the method of using inhaler canisters (they also have a rotary display approximating the uses left in a canister - just like real life inhalers). Inhaler canisters are the reagent containers, and are generally low capacity. They can only be used in a inhaler, and contain aerosolized chemicals. Inhaler canisters and inhalers are unlocked from chemical synthesis, and are printable for cheap from a medlathe. In order to use a inhaler, one must uncover the mouth of a carbon and wait a few seconds (its faster if its a self-application) before a small amount of the reagents are delivered via the INHALE bitflag. This only works on things currently breathing - if theyre dead, have no lungs, or just, arent breathing - it will fail. This includes asthmatics with 100% inflammation. </details> <img width="181" height="74" alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521" src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e" /> <img width="1465" height="202" alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963" src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667" /> Sprites are not mine; they are from swanni and I can NOT sprite for the life of me ## Why It's Good For The Game 1. Asthma is just cool. One of my favorite features on bay was the fact lung damage required you to turn up the pressure on your O2 tank to survive, and this does precisely that. 2. Its always fun to add new ways to interact with atmos as a player that arent grossly broken, and I fail to see how a 40% increase of gas intake will really affect balance too badly. 3. Inhalers are badass. ## Changelog 🆑 add: Asthma quirk, based on IRL asthma add: Inhalers, a new reagent administering method that uses INHALE add: Albuterol, a new reagent that increases the amount of gas you inhale by 40% balance: Inverse convermol now forms once the reaction is done, not on metabolize /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
45cc222314 |
Allows blocking language speech and comprehension separately (#91884)
## About The Pull Request There was a PR I wanted to make, but one of the features I wanted the addition to have was for an affected mob to only speak aphasic, but understand whatever languages they'd normally be able to understand. This, in turn, required refactoring language holders to separately block language speech and comprehension. This change, I decided, would be good to split into its own PR. ## Why It's Good For The Game Allows more fine-grained control over what languages an atom is blocked from speaking or understanding. This will be useful for future PRs or admin events. ## Changelog no player-facing changes |
||
|
|
aac161bce9 |
Allows blocking language speech and comprehension separately (#91884)
## About The Pull Request There was a PR I wanted to make, but one of the features I wanted the addition to have was for an affected mob to only speak aphasic, but understand whatever languages they'd normally be able to understand. This, in turn, required refactoring language holders to separately block language speech and comprehension. This change, I decided, would be good to split into its own PR. ## Why It's Good For The Game Allows more fine-grained control over what languages an atom is blocked from speaking or understanding. This will be useful for future PRs or admin events. ## Changelog no player-facing changes |
||
|
|
75e7ef6def |
Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
This PR aims to clean or bring up to date portions of code about dna, the dna console and mutations. This includes taking care of or removing some of the awful choices like the pratically useless `datum/mutation/human` pathing, or the class variable, in favor of using sources to avoid potential issues with extraneous sources of a mutation. The files changed are over a hundred just because I removed the `datum/mutation/human` path, but the actual bulk of the code is mainly shared between the datum/dna.dm, _mutations.dm and dna_console.dm. Mutation shitcode is hurting my future plans for infusions a little. Also it's a much needed refactor. Drafted 'till I'm sure it works without issues. 🆑 refactor: Refactored mutation code backend. Report any issue. /🆑 |
||
|
|
14fb86e3e8 |
Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
## About The Pull Request This PR aims to clean or bring up to date portions of code about dna, the dna console and mutations. This includes taking care of or removing some of the awful choices like the pratically useless `datum/mutation/human` pathing, or the class variable, in favor of using sources to avoid potential issues with extraneous sources of a mutation. The files changed are over a hundred just because I removed the `datum/mutation/human` path, but the actual bulk of the code is mainly shared between the datum/dna.dm, _mutations.dm and dna_console.dm. ## Why It's Good For The Game Mutation shitcode is hurting my future plans for infusions a little. Also it's a much needed refactor. Drafted 'till I'm sure it works without issues. ## Changelog 🆑 refactor: Refactored mutation code backend. Report any issue. /🆑 |
||
|
|
e6ca30d009 |
Immunodeficiency Quirk 2: Localhost Boogaloo (#90937)
## About The Pull Request Adds a new quirk, (-10 cost) called Immunodeficiency, and a new inverse chem of spaceacillin, sepsisillin. Both cause the same effect. (Well, the quirk version is permanent obviously) When affected by either of these, viruses will progress faster and you will catch them more easily, burns will necrotize faster and be harder to sanitize, and alien embryos will gestate more quickly. These effects can be mitigated with spaceacillin, but even while under the effects of spaceacillin, you'll only be about on par with or slightly worse than a normal person, as opposed to the blanket protection that spaceacillin normally provides. Owners of the quirk will be provided with a bottle of 3 low dose (1 minute duration) spaceacillin pills to mitigate their condition, and a sterile medical mask(the noninternals kind) for style and flavor. ## Why It's Good For The Game More unique quirk options = good. Reasons to actually ask RP and chemists for things = good. More inverse chems = good. Also, the sepsisillin was too good an inverse name and effect to resist. Sepsisillin also has some interesting use cases. Example: Need a guy dead and work in medical? you could just stab him, or... you offer him a coffee. Inside said coffee is 10u of sepsisillin and the deadliest blood transmitted virus (to minimize collateral damage) you can cook up. Watch as he drinks said coffee, feels fine, and then 2 minutes later suddenly starts attempting to un-dock from his lungs. ## Testing Images: Spawns with mask and pills:   Monkeyhuman with Fungal TB after 1 minute.  Monkeyhuman with Fungal TB and Immunodeficiency after 1 minute.  ## Changelog 🆑 add: Adds new immunodeficiency negative quirk, and sepsisillin, the inverse of spaceacillin. Both have an immune system weakening effect, mitigate-able with spaceacillin. /🆑 --------- Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake> |
||
|
|
54ea5b5333 |
Immunodeficiency Quirk 2: Localhost Boogaloo (#90937)
## About The Pull Request Adds a new quirk, (-10 cost) called Immunodeficiency, and a new inverse chem of spaceacillin, sepsisillin. Both cause the same effect. (Well, the quirk version is permanent obviously) When affected by either of these, viruses will progress faster and you will catch them more easily, burns will necrotize faster and be harder to sanitize, and alien embryos will gestate more quickly. These effects can be mitigated with spaceacillin, but even while under the effects of spaceacillin, you'll only be about on par with or slightly worse than a normal person, as opposed to the blanket protection that spaceacillin normally provides. Owners of the quirk will be provided with a bottle of 3 low dose (1 minute duration) spaceacillin pills to mitigate their condition, and a sterile medical mask(the noninternals kind) for style and flavor. ## Why It's Good For The Game More unique quirk options = good. Reasons to actually ask RP and chemists for things = good. More inverse chems = good. Also, the sepsisillin was too good an inverse name and effect to resist. Sepsisillin also has some interesting use cases. Example: Need a guy dead and work in medical? you could just stab him, or... you offer him a coffee. Inside said coffee is 10u of sepsisillin and the deadliest blood transmitted virus (to minimize collateral damage) you can cook up. Watch as he drinks said coffee, feels fine, and then 2 minutes later suddenly starts attempting to un-dock from his lungs. ## Testing Images: Spawns with mask and pills:   Monkeyhuman with Fungal TB after 1 minute.  Monkeyhuman with Fungal TB and Immunodeficiency after 1 minute.  ## Changelog 🆑 add: Adds new immunodeficiency negative quirk, and sepsisillin, the inverse of spaceacillin. Both have an immune system weakening effect, mitigate-able with spaceacillin. /🆑 --------- Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake> |
||
|
|
fba21682b1 |
Heart Attacks are More Violent, and You Can Defib People Repeatedly to Fix Them Like in a Medical Daytime TV Show Drama (#89775)
## About The Pull Request This overhauls nearly all aspects related to heart attacks, making them more urgent and threatening. It also enables the use of defibrillators for quicker, less invasive treatment of heart attacks. They are now a status effect instead of a virus, with a fixed countdown of about two and a half minutes before full stoppage. As this timer counts down, symptoms steadily escalate from audio cues to suffocation and dizziness. Through treatment, the countdown can be wound back and eventually cured (or you can just swap the heart like usual. Boring!!). ### Treatment Replacing the heart is no longer the *only* option for treatment. Now, heart attacks can be cured with the use of a defib. Each shock will rewind the countdown (and symptoms) heavily, curing it after 2-4 zaps in quick succession. In lieu of a defib, most other shock sources will work, albeit much less effectively. So, if you're in security and *really* don't feel like going to medical, you can just have your fellow officers taze you back to health!  The emergency penthrite given after the attack has a new icon/message, and is slightly less forgiving. You can still use it to shock yourself back to life, still being a very risky move. The heart attack doesn't manifest on medical HUDs immediately. It only appears after the victim has reached stage 3 for the first time. At stage 3, it's pretty apparent to both the victim and anyone around that they're having a heart attack anyways, but until then it will be on the victim to identify symptoms. Heart attacks will always be reported on health analyzer scans, shown as the organ failing due to a myocardial infarction and a tooltip suggesting defibs/other shocks to treat it. This also adds two tips, for secoffs and medics, on how to treat a heart attack. Defibs also now use up charge for restarting a stopped heart, instead of only when reviving a corpse. ## Why It's Good For The Game Making heart attacks more of a threat gives way more weight to something people should be afraid of, but aren't. Heart attacks fail to emulate anything resembling a heart attack, to the point that it is lame and dissapointing. They're an annoyance and a trip to the surgery room for anyone familiar enough with the game. This iteration may be more dangerous, but it's also more *exciting* (and can be treated faster). Broadening the ways to treat a heart attack, or just stave off symptoms, gives an amount of player agency over this threat. It may be more urgent, but it doesn't mean it has to be a trip to medbay every time. You can look for other ways to get zapped (security will help if asked, I promise) or sandbox up your own solution. Also, treating heart attacks with defib shocks just makes sense. Why do we have to trash the whole heart? Usually after a heart attack it still has like, a year or so of juice left before it quits for good. More threatening heart attacks also further incentivize synthetic hearts and working out, or any other clever ways of shielding oneself from an attack (in case you're paranoid like that). And lastly, the whole reason I started with this PR in the first place -- I think it is a bit odd having heart attacks be handled as *diseases* in the code. Status effects make more sense. ## Changelog 🆑 Rhials balance: Heart attacks are now more violent and urgent. If you can hear your own heartbeat and are short of breath, you should probably see a doctor. balance: Heart attacks can now be treated and eventually cured with repeated defibrillation shocks. balance: Heart attacks can now be treated and eventually cured with repeated shocks from other sources. /🆑 |
||
|
|
7ac40b7141 | Drinking alcohol cures severe anxiety (#90599) | ||
|
|
aada9a56d2 | Drinking alcohol cures severe anxiety (#90599) | ||
|
|
753d8e5ba4 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-04a | ||
|
|
3db49f75cb |
Heart Attacks are More Violent, and You Can Defib People Repeatedly to Fix Them Like in a Medical Daytime TV Show Drama (#89775)
## About The Pull Request This overhauls nearly all aspects related to heart attacks, making them more urgent and threatening. It also enables the use of defibrillators for quicker, less invasive treatment of heart attacks. They are now a status effect instead of a virus, with a fixed countdown of about two and a half minutes before full stoppage. As this timer counts down, symptoms steadily escalate from audio cues to suffocation and dizziness. Through treatment, the countdown can be wound back and eventually cured (or you can just swap the heart like usual. Boring!!). ### Treatment Replacing the heart is no longer the *only* option for treatment. Now, heart attacks can be cured with the use of a defib. Each shock will rewind the countdown (and symptoms) heavily, curing it after 2-4 zaps in quick succession. In lieu of a defib, most other shock sources will work, albeit much less effectively. So, if you're in security and *really* don't feel like going to medical, you can just have your fellow officers taze you back to health!  The emergency penthrite given after the attack has a new icon/message, and is slightly less forgiving. You can still use it to shock yourself back to life, still being a very risky move. The heart attack doesn't manifest on medical HUDs immediately. It only appears after the victim has reached stage 3 for the first time. At stage 3, it's pretty apparent to both the victim and anyone around that they're having a heart attack anyways, but until then it will be on the victim to identify symptoms. Heart attacks will always be reported on health analyzer scans, shown as the organ failing due to a myocardial infarction and a tooltip suggesting defibs/other shocks to treat it. This also adds two tips, for secoffs and medics, on how to treat a heart attack. Defibs also now use up charge for restarting a stopped heart, instead of only when reviving a corpse. ## Why It's Good For The Game Making heart attacks more of a threat gives way more weight to something people should be afraid of, but aren't. Heart attacks fail to emulate anything resembling a heart attack, to the point that it is lame and dissapointing. They're an annoyance and a trip to the surgery room for anyone familiar enough with the game. This iteration may be more dangerous, but it's also more *exciting* (and can be treated faster). Broadening the ways to treat a heart attack, or just stave off symptoms, gives an amount of player agency over this threat. It may be more urgent, but it doesn't mean it has to be a trip to medbay every time. You can look for other ways to get zapped (security will help if asked, I promise) or sandbox up your own solution. Also, treating heart attacks with defib shocks just makes sense. Why do we have to trash the whole heart? Usually after a heart attack it still has like, a year or so of juice left before it quits for good. More threatening heart attacks also further incentivize synthetic hearts and working out, or any other clever ways of shielding oneself from an attack (in case you're paranoid like that). And lastly, the whole reason I started with this PR in the first place -- I think it is a bit odd having heart attacks be handled as *diseases* in the code. Status effects make more sense. ## Changelog 🆑 Rhials balance: Heart attacks are now more violent and urgent. If you can hear your own heartbeat and are short of breath, you should probably see a doctor. balance: Heart attacks can now be treated and eventually cured with repeated defibrillation shocks. balance: Heart attacks can now be treated and eventually cured with repeated shocks from other sources. /🆑 |
||
|
|
9b1578cdfb |
Makes the floor diseases into basic diseases, rather than advanced diseases. (#90115)
## About The Pull Request One of the more recent incidents involving viral outbreaks utilized these viruses to easily produce a ton of advanced, mutated diseases out of the floor diseases. You can get some details here: https://github.com/tgstation/tgstation/issues/90054 These diseases have bespoke behaviours, yet are capable of being mutated. It doesn't really make much sense for them to be advanced diseases because of their unique behaviour. Given it starts with a flag that indicates that it is meant to not spread, but ,obviously, mutating it causes it to become contagious anyway, we've just made them basic viruses with some of the relevant parts of the symptoms they were using added in. ## Why It's Good For The Game It makes it too easy to get an advanced virus with which to mutate. Which results in...well, a Urgathoan/Nurgle Incident waiting to happen. Don't drink spoiled milk, kids. Or do if you're based. ## Changelog 🆑 code: Changes floor diseases from advanced diseases into basic diseases. Should mostly function the same, except you can't mutate them. /🆑 |
||
|
|
b9c803a9d8 |
Base implementation of /datum/persistent_client (#89449)
Converts `/datum/player_details` into `/datum/persistent_client`. Persistent Clients persist across connections. The only time a mob's persistent client will change is if the ckey it's bound to logs into a different mob, or the mob is deleted (duh). Also adds PossessByPlayer() so that transfering mob control is cleaner and makes more immediate sense if you don't know byond-fu. Clients are an abstract representation of a connection that can be dropped at almost any moment so putting things that should be stable to access at any time onto an undying object is ideal. This allows for future expansions like abstracting away client.screen and managing everything cleanly. |
||
|
|
f5e1466305 |
Reverts projectile sneezing :( (#89292)
## About The Pull Request Reverts #83361 ## Why It's Good For The Game I PR'd the original with the intent of making disease battling more engaging by adding warnings and sneeze dodging, but this was rejected and instead we got a very awkward middle ground where no one is happy and the original PR didnt accomplish what it set out to accomplish. You can't dodge the sneeze because it's a shotgun spread and invisible :/. The sneeze catchers are even somewhat buggy and the sneeze warning leads to extra chat clutter |
||
|
|
a0e862d575 |
Base implementation of /datum/persistent_client (#89449)
## About The Pull Request Converts `/datum/player_details` into `/datum/persistent_client`. Persistent Clients persist across connections. The only time a mob's persistent client will change is if the ckey it's bound to logs into a different mob, or the mob is deleted (duh). Also adds PossessByPlayer() so that transfering mob control is cleaner and makes more immediate sense if you don't know byond-fu. ## Why It's Good For The Game Clients are an abstract representation of a connection that can be dropped at almost any moment so putting things that should be stable to access at any time onto an undying object is ideal. This allows for future expansions like abstracting away client.screen and managing everything cleanly. |