mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-15 10:04:30 +01:00
masterfixes
1271 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f601a6ddaf | Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 | ||
|
|
2275e1958e |
Adds deep lore to some pistols, and partially rewrites the baton lore. Repaths some items. (#96056)
## About The Pull Request Moves the deep lore proc to the parent for guns. Adds deep lore to some of the pistols. Rewrites the deep lore for the stun baton and contractor baton. Repaths the Liberator pistol to a more sensible path name. Rechambers the Regal Condor to .45, because I was today years old when I learned that the Tiger Cooperative are _[radical Christian extremists](https://github.com/tgstation/common_core/blob/cf1edb9f770e7d3c38ca894e951ab5ac50395a47/Governments%20and%20Organisations/Corporations/The%20Syndicate/The%20Syndicate.md?plain=1#L73)_. I just thought they were nutso about changelings, I didn't know they also think they're God's ubermensch. Anyway, that freak who started the cult would chamber their relic pistol in .45 and you know it. ## Why It's Good For The Game I love dumping large amounts of text into the code base that will rarely, if ever, be noticed by the player. It's also the means by which I can summon forth my good friend Hatterhat to contribute to this codebase. Like a carrot on a stick. If I post enough, one day he'll PR flashforge mines like he promised me. |
||
|
|
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> |
||
|
|
45a5980443 |
Tele-Port: Ports Telepathy changes from NovaSector (#5531)
## About The Pull Request This ports changes from https://github.com/NovaSector/NovaSector/pull/6016 and https://github.com/NovaSector/NovaSector/pull/6398. - The quirk no longer automatically applies the Genetics power to the quirk user. Prior to this PR, communication was mostly anonymized and only _not_ so when one possessed the gene. This presented a clear downgrade for individuals who had the genetic variant over the quirk variant. With this PR, communication through the quirk is not anonymous, but adding the gene on top of the quirk will allow a user to upgrade it into being anonymous. - Every time someone uses the quirk everyone else (in sight) will see where their attention is sent. This does not add a visual cue besides the warning in the chat, so it's still somewhat discrete. - Added a new quirk, Psionic Dampener. This blocks most forms of telepathic communication. - Telepathy was made multiline for readability. ## Why It's Good For The Game Currently, Telepathy as a quirk has a discrepancy where non-synths receive the mutation Telepathy, while synths receive a different version. The mechanical differences of these created a problem where, depending on who was using it, this either did or did not anonymize the identity of the caster. Additionally, these changes allow the quirk holder who seeks the genetic variant in-round to properly receive the benefits of such. Other changes allow people to opt-out of receiving telepathic messages, in order to avoid negative interactions from those who abuse it. Multiline telepathy is a desirable feature for the sake of proof reading. ## Proof Of Testing <img width="654" height="279" alt="image" src="https://github.com/user-attachments/assets/056f4d52-5365-4b5f-a422-40791c5e568d" /> ## Changelog 🆑 add: Added a new quirk Psionic Dampener, affecting telepathy from quirks, genetics, slimes, xenomorphs, revenants and so on. balance: Telepathy (Quirk) no longer automatically gives the gene. qol: The telepathic communication power granted by the quirk or the genetic power is only anonymous if the caster has the mutation, not the target. qol: Telepathy (Quirk) now shows when the user uses the power and on whom, but not the contents of the message. qol: Telepathy is now multiline. /🆑 |
||
|
|
9e92c0aa3d | Reverts "Merges ghosts into spirits & a rework", but removes ghosts from Pride's mirror. (#95779) | ||
|
|
7763db34a1 |
Basic beepskies and some ED209 additions (#95783)
## About The Pull Request this PR refactors beepskies and ED209s into basic mobs. ive also added a few features for the ed209 because i cant keep my hands to myself: ED bots can now wear hats! a few hats give them some new unique dialogue. Putting a cowboy's hat on an ED will have it acting like a town Sherrif EDs are now rideable when emagged. theyll still be shooting people while ridden. youll also have the ability to charge at people full throttle running them over ive also added a new Nukie variant, purchasable from the uplink. These versions come fitted with an LMG and will patrol the station and shoot all walks of life. If emagged, theyll blow up people with (weaker) rockets (im still working on balancing this). they are rideable but i highly suggest against it; youll be caught in the crossfire. (i understand if ud prefer i atomize this feature) ## Why It's Good For The Game gives some personality to EDs, as well as updating all these bots to the cool new ai system ## Changelog 🆑 refactor: beepskies, and ed209s have been refactored. please report any bugs add: ed209s can now wear hats! some hats give them new dialogue add: emagged ed209s are now rideable! add: added evil versions of the ed209s to the syndie uplink /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
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! /🆑 |
||
|
|
9a5e91836f |
Guards against shapechanging while being deleted (#95442)
## About The Pull Request Tin. If you shapechange while being deleted, such as if your bitrunning avatar is dying, you get runtimes which interrupt the process and bug your mob permanently. <img width="2035" height="697" alt="image" src="https://github.com/user-attachments/assets/ebe7b502-bec5-44f9-bf5f-398e81c82dbb" /> For shapechanging, it creates a cascade of issues where you runtime midway through the mind transfer, making the shapechange incomplete and leaving the caster in a permadead state. Which is very bad. ## Why It's Good For The Game Fixes a gnarly bug |
||
|
|
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. /🆑 |
||
|
|
0a61cce996 |
Refactor revenant abilities / they now indicate if they are unlocked (#95380)
## About The Pull Request Refactors Revenant abilities into a component Revenant abilities now indicate if they are locked <img width="419" height="185" alt="image" src="https://github.com/user-attachments/assets/7223f025-d99c-4c09-883b-b53f29947c36" /> <img width="337" height="97" alt="image" src="https://github.com/user-attachments/assets/321bf64f-df57-4da5-9951-a2795637cea3" /> They also more accurately update if they are un/usable (ie, if you enter a wall, they turn red.) Also, Revenants are no longer affected by gravity. They already weren't affected by gravity (as far as I could tell) this just prevents them from getting the no-grav alert. ## Why It's Good For The Game - Not all future Revenant abilities need to be an AOE spell - It makes them easier to parse at a glance (what powers you have / don't have / can use) ## Changelog 🆑 Melbert qol: Revenant abilities indicate if they are locked, and better indicate if they are currently usable qol: Revenants are no longer alerted that they have no gravity (they always have gravity) refactor: Refactored Revenant abilities, report any oddities with them. /🆑 |
||
|
|
cd002246ab | Fixes ghost poll alerts missing backgrounds (#95363) | ||
|
|
9a87ffeb6f | Removes Spells tab (#95293) | ||
|
|
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 |
||
|
|
f58b8511f0 |
Refactors effect_system (#94999)
## About The Pull Request This PR refactors ``effect_system``s to be a bit easier to use by getting rid of ``set_up``, allowing ``attach()`` to be chained into ``start()`` and refactoring most direct system usages in our code to use helper procs. ``set_up`` was unnecessary and only existed to allow ``New``'s behavior to be fully overriden, which is not required if we split sparks/lightning/steam into a new ``/datum/effect_system/basic`` subtype which houses the effect spreading behavior. This allows us to roll all logic from ``set_up`` into ``New`` and cut down on code complexity. Chaining setup as ``system.attach(src).start()`` also helps a bit in case no helper method exists I've added ``do_chem_smoke`` and ``do_foam`` helpers, which respectively allow chemical smoke or foam to be spawned easily without having to manually create effect datums and reagent holders. Also turns out we've had some nonfunctional effect systems which either never set themselves up, or never started, so I fixed those while I was at it (mostly by moving them to aforementioned helper procs) ## Why It's Good For The Game Cleaner code, makes it significantly easier for users to work with. Also most of our effect system usage was copypasta which was passing booleans as numbers, while perfectly fine helper procs existed in our code. ## Changelog 🆑 refactor: Refactored sparks, foam, smoke, and other miscellaneous effect systems. refactor: Vapes now have consistent rigging with cigs using the new system. fix: Fixed some effects never working. /🆑 |
||
|
|
4a58cdcc44 |
Gets rid of ignored_factions (#94972)
## About The Pull Request Tin, this is redundant now that faction has been moved to the atom. Also fixes a misc runtime that can occur if someone clicks an ashwalker egg before team datums are created ## Why It's Good For The Game Updates code ## Changelog Not player-facing |
||
|
|
dcc7b82fb9 |
Suiciding shouldn't usually delete your items (#94935)
## About The Pull Request Fixes #94662 Makes the remaining suicides I could find that gib or dust preserve items, as generally suicide should be a personal decision that people aren't using to spitefully deny traitor objectives or whatever. ALSO I changed tadpole suicide to just make a big hole in your chest instead of gib you because, unlike a space carp, I don't think a tadpole growing into a single regularly sized frog is going to cause your body to burst into pieces. The thing about "good first issues" is unfortunately we do also still want them to get fixed at some point, and people were mentioning that "suicide drill to delete items" had actually happened in real rounds. ## Changelog :cl:se balance: Killing yourself with a tadpole now only bursts your chest open and not your entire body, and frankly even that is pretty impressive work for a single frog to manage. fix: Killing yourself in various other ways that gib or dust you will no longer delete the items you were wearing, consistent with most of the other ways of killing yourself that gib or dust you. /🆑 |
||
|
|
68153c2333 | Refactors faction lists to use getters and setters and be cached (#94490) | ||
|
|
c7e4e90004 |
Adds a new antag, the Blood Worm (#93787)
## LTS Document Check this document before making any significant future changes to blood worms, please. https://hackmd.io/@RikuTheKiller/H1AHQSKNZx ## About The Pull Request THIS PR SHOULD ABSOLUTELY BE TM'D FIRST Blood worms are a new progression antag. When the event runs, 2 candidates are picked from ghosts and spawned in as blood worm hatchlings, which then have to grow up, do a couple objectives and take over the station. Hatchlings are weak outside of a host, while juveniles can stand their own reasonably well. Adults have high offensive power and can only be dealt with using the right gear or a lot of luck and robustness. They're meant to be a moment of glory for achieving maximum progression and they can bootstrap the next hatchlings by gathering corpses before cocooning. Each growth stage requires 30 seconds in a cocoon, which can only be created after consuming a lot of blood. There's a falloff curve on a per-blood-type basis, meaning you can't drain the same person over and over again to reach adulthood. The medbay freezer is a priority target for the blood worms and can get one of them to the juvenile stage if fully ransacked. It takes 500 blood to mature from hatchling to juvenile, and 1500 blood to mature from juvenile to adult. You can only get up to 1000 blood from synthetic sources like monkeys, and consuming synthetic blood is 30% less efficient. Blood worms can also examine living targets to see how much blood a target has, and how much growth the blood worm would gain for consuming that blood. Blood worms spawn in vents and have night vision for maneuvering in maintenance. Hatchlings can ventcrawl, while juveniles can move around by breaking things. Optionally, you can take over a host with a lot of access like the Captain to go basically anywhere, especially if nobody knows you killed the captain. Behind the scenes, host-taking kicks the host's original mind to a backseat mob. This needs the most testing in practice, but it's confirmed that it returns the host's mind back to their body, at least in testing. All mob, ability and action sprites are made by INFRARED_BARON. Legal rights were transferred to me after I paid for the commission. Note, I've been working on this massive PR for quite a while, so documenting every small change is really hard! Apologies for anything I've missed. There's a lot. Final note, admins can spawn these by either: A. Trigger the midround event via the dynamic-panel verb, under the Rulesets tab. B. Giving someone the Blood Worm antag datum via the Traitor Panel in the Player Panel for the target player. This will transform their mob into a valid Blood Worm, with all of the associated objectives and such. ### Active Abilities 1. Leech Blood (No Host) - Lets the blood worm drain blood from living targets and reagent containers. Uses an aggressive grab to restrain living targets until leeching is over, which takes around a second to initiate. Causes oxyloss during the leeching. NPC monkeys can't escape from this and it floors targets as well. 2. Spit Blood (Both) - Multi-function ability, lets the blood worm fire ranged corrosive blood spit at targets, melt restraints on their hosts by right-clicking, and as an adult, shoot a burst of blood spit at a target by right-clicking. Note of the right-click abilities, shooting bursts can't be done while in a host. (to avoid unfair stealth kills) Shooting a burst has a much longer cooldown than shooting normally. All spit types cost blood to use. 3. Invade Corpse (No Host) - Lets the blood worm take a host for themselves, consuming all of the host's blood and in essence, "becoming" the host. Any bloodloss inflicted on the host is taken as damage to the blood worm, and the blood worm retains its weakness to fire even in this state. Burn damage itself no longer has any extra damage, though. 4. Leave Host (Host) - Title, literally just leaves the host after a delay. Notably works even while the host is moving, dead, incapacitated or otherwise fucked up in any way, shape or form. 5. Inject Blood (Host) - Lets the blood worm heal its host. The potency of this increases as the worm grows up, but so does the cooldown and blood consumption. This works on organ damage, injuries, etc. 6. Mature (No Host) - Makes the blood worm enter a cocoon for 30 seconds, emerging as the next growth stage. Requires an increasing amount of consumed blood / growth as the blood worm uses it. 7. Reproduce (No Host, Adult Only) - Makes the blood worm enter a cocoon for 30 seconds, with 4 hatchlings emerging out of it, including the original blood worm, now reverted back into a hatchling as well. 8. Revive Host (Host) - If the host is in a viable state to be revived, revives them after an animation sequence plays out. ### Passive Abilities 1. Space Immunity - Blood worms are immune to the cold, low pressures and a lack of oxygen. Only the immunity to a lack of oxygen carries on to hosts from this. 2. Organ Insertion - Blood worms can insert organs into their hosts by right-clicking on them with the organ in-hand. This mainly exists to deal with hosts that lack organs, and avoids the gotcha where an adult blood worm ends up gutting their host by hitting them too hard, as they can simply fix it on the spot. 3. Life Support - Blood worm hosts don't need a heart, lungs or a liver to survive. Lungs are useful for speaking, and a liver is necessary to process reagents. 4. Regeneration - Blood worms slowly heal over time. This is nowhere near enough to overcome bleeding or heat damage, since it's 0.3 hp/s for a hatchling, 0.4 hp/s for a juvenile and 0.5 hp/s for an adult. 5. Night Vision - Blood worms can see in the dark. This doesn't extend to hosts. 6. Ventcrawling - Hatchling blood worms can ventcrawl. 7. Doorcrawling - Hatchling and juvenile blood worms can slide under doors. Doing so takes 3 seconds for a hatchling and 5 seconds for a juvenile. 8. HUD - Blood worms can tell how much blood targets have at a glance, via a blood HUD bar exclusive to them. They can also tell apart other blood worm hosts from normal people via an antag HUD. There's also an examine message they can use on living targets for even more info. ### Weaknesses 1. Heat and Fire - Blood worms quickly die to heat, their bodies are flammable and their blood will burn up if their host's core temperature is too high. The main counter to this is getting a host with flame-resistant gear. 2. Bleeding - While in a host, bleeding wounds will directly damage the blood worm itself. How much a host needs to bleed before the worm dies depends on their growth stage. Blood worm hosts keep bleeding even while dead, so just keep hitting them and they'll die. Blood worms automatically leave their hosts when they hit 10% health or lower, and their hosts bleed 50% faster than normal people. 3. Stuns - Blood worms have no way of dealing with a stunned host other than getting out. They can deal with any restraints by melting them, though. 4. Testing - Security can order a blood worm testing crate from cargo, either for a 20 minute cooldown via the security cargo interface console, or for 10000 credits via the supply console. It contains 4 single-use testers that hurt a bit when applied, but are instant to use and 100% accurate. The stopgap is that they're really fucking expensive and only work once per item. ### Screenshot <img width="280" height="132" alt="image" src="https://github.com/user-attachments/assets/00d22361-997e-4347-a0bf-aa240de40727" /> ## Why It's Good For The Game Antagonist variety, mainly. This is basically Cortical Borers 2: Electric Boogaloo. Currently, we lack any antagonists with mind control abilities. That really sucks! I've also gotten a lot of positive feedback about the antagonist while working on it. This antagonist also has great potential for roleplay, as they can take over hosts, surprise attack people by getting out of a dead corpse, talk to each other using Wormspeak, etc. I think we're also itching for variety on "pest" antagonists. Right now we just have spiders and xenos. Everybody knows these two, so why not mix it up a bit? And as for balance? Blood worms are relatively easy to dispatch when you know their weaknesses, which are extremely clear. Bleeding for hosts, fire for either one, lasers for the worms themselves. As long as you get the host in crit and keep hitting, you've pretty much won, and they can't keep spamming Inject Blood forever since they'll quickly run out of blood to use. ## Changelog 🆑 add: Added a new heavy roundstart/midround antagonist, the Blood Worm. Credit to INFRARED_BARON for the sprites! fix: Removing traits based on a source no longer causes issues with trait signals. fix: High-priority effects no longer double-trigger due to subsystem issues. fix: Weighted averaging in reagent merging code has been band-aid fixed. It's not the best, but it works. /🆑 |
||
|
|
b942cec267 |
Audit dismemberment to make sure we don't forget it might fail (#94808)
## About The Pull Request Fixes #94778 There are a bunch of places where we dismember a limb (or head) and then do something with it assuming that we actually dismembered it, but that isn't actually true. Many of these places then move your not-actually-dismembered head somewhere else. If you have an unremovable limb (such as if you have TRAIT_NODISMEMBER) this means that it actually gets removed anyway because it's physically moved somewhere else. In all of these cases, if we failed to dismember the limb we should just leave it alone. I left anything where after dismembering the limb it immediately deletes it in though because those are generally supposed to be invariably fatal. ## Changelog 🆑 fix: Chainsaws can't behead people with unremovable heads. fix: You can only put your own head on a spear or into a box if it is possible to remove your head. fix: Heretic rifts can only remove your arms if your arms can be removed. fix: Paperwork can only cut off your head if your head can be cut off. fix: Smite being reflected can only blow off your arm if your arm can be removed. /🆑 |
||
|
|
190904b5bb |
Polymorph belt plays nicely with mob evolution (#94723)
## About The Pull Request Fixes #82319 Fixes #94129 If your mob type changes while you are transformed via the polymorph belt, it will transfer the polymorph status to the new mob. This means that turning into a Bileworm after Bileworms have evolved will no longer ghost you, and instead you will just keep playing as a vileworm. Additionally it means if you copy a chick, spiderling, juvenile lobster, and walk around as one of those for long enough to grow up, it will seamlessly move you over. Or if you turn into a mouse and a nearby regal rat uses their riot ability it will transform you into a rat, etc. If you change back into a human and then change back into your mob you will return to the original state though. I decided to put this on a new subtype of the status effect rather than the base type because I think it's more of a programming issue if this happens for an ability with a fixed transform type (and we wouldn't want to mutate the possible shapes list in that case), so in those cases we should keep the existing behaviour of just untransforming you. Additionally, I made the evolutionary leap component always wait a minimum of three seconds instead of being instant before transforming a mob. This means that other things have time to register signals and react to the transformation, so you should never be deleted by bileworm evolution any more. ## Why It's Good For The Game This fixes a few long-standing bugs and seems more fun than untransforming you. ## Changelog 🆑 fix: If you use the polymorph belt to turn into a mob which transforms into another mob, it won't ghost you or kick you out upon transformation. /🆑 |
||
|
|
4d7b9be4a2 |
Fix a variety of grammar errors (#94707)
* Fix uncapitalized sentences, lack of "the", and singular/plural mixup when inserting items into lathes * Conform some job descriptions to the pattern used by the majority: bitrunner, chemist, coroner, janitor, RD, shaft miner * Remove extra colon from "Open Special Role Information" action buttons * Uncapitalize "no alerts" / "systems nominal" messages in atmos and station alert consoles * Fix incorrect feedback when wrenching down a freezer/heater with its panel open * Fix "Thank you for restocking the station!" appearing in the wrong place in the cargo export summary * Fix "pizza boxs" on cargo manifests * Fix mid-sentence capital "The" when: * Examining walls with mounted items * Inserting parts into machine frames * Fix "Pete's the udder" * Fix double-"the" and stringified datum typepath when scooping reagents * Fix missing spaces in door remote descriptions * Fix uncapitalized "Nanotrasen" in emergency respone drone ghost role poll * Fix double-space in canister opening admin log * Fix missing "the" when casting bear-form spell * Fix "auxiliry" in NebulaStation airlocks * Add `check_grep.sh` rules against "maintainance", "maintainence", and "maintenence" * Fix "maintainance" in NebulaStation airlocks, TCG cards, and in examines of netpod, byteforge, quantum server * Fix "maintainence" in examines of autolathe, flatpacker, cryo cell, ore silo, floodlight, power storage unit, turbine, chromatography machine, ChemMaster, all-in-one grinder, smoke machine, R&D machines, vending machines * Fix "maintenence" in Sulaco ruin terminal * Add missing periods to: * "That's X." examine block header * steal objective explanation text * atmospheric shield generator examine * autolathe examine * telescreen examine * accidentally stepping on a mousetrap * netpod examine * byteforge examine * hat/mask visor toggling * bizza box stack examine * ChemMaster 3000 examine * floodlight examine * power storage unit examine * ChemMaster interact messages * disposal bin animal eject message * techfab examine * vending machine examine * flatpacker examine * Fix name capitalization/propriety of: * big manipulator * DeForest first aid station * Christmas tree * Thunderdome plaque * commission plaque * chalkboard coffee menu * experimental destructive scanner * scanner array * prison cube * RaptorDex * atmospheric shield generator * high-performance liquid chromatography machine * all-in-one grinder * keycard authentication device * Fix plurality of: * fake stairs * HUDs * restaurant and bar seating * Fix misc grammar/typos in: * recharging station description * worm description * surgery tray description * access failure message of restaurant portal * mysterious pillar description * Pennywise painting description * floodlight examine * power storage unit examine * flatpacker examine * Remove extra newline from "Debug Z-Levels" verb |
||
|
|
3192b54797 |
Retypes headgear from /obj/item/clothing to /obj/item (#94473)
## About The Pull Request Headgear hasn't been restricted to clothing for a long while, and some code that attempts to treat it as such will runtime whenever you wear a pet on your head. God bless astype(). ## Changelog 🆑 code: Retyped headgear from /obj/item/clothing to /obj/item, fixing some runtimes in the process /🆑 |
||
|
|
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 |
||
|
|
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! /🆑 |
||
|
|
aaddc314d0 |
removes double antimagic_flags definition from mindswap (#94073)
## About The Pull Request 'twas defined twice ## Why It's Good For The Game 'twas weird |
||
|
|
d76d2f5438 |
Laser Gun Update: Deep Lore, Gun Variety, Pew Pew (#93520)
## About The Pull Request Updates the laser gun into four proper subtypes: Standard, Pistol, Rifle and Carbine. <img width="229" height="210" alt="image" src="https://github.com/user-attachments/assets/12c03076-8ebf-4d87-8c98-6a8cce6821db" /> Current sprites are pending a palette change. **Standard:** Functions as you would expect. Same as ever. **Pistol**: Lower charge, 20 force, normal sized, recharges faster. **Carbine**: 15 force, 26 mag, two round burst. Projectiles flight slightly faster. Cannot dual-wield. **Rifle**: 20 force. 40 mag. Two round burst. EMP resistant (not immune). Projectiles fly slightly faster. Cannot dual-wield (not that you need to). All but the rifle can be sourced from cargo. You can also buy the sovl version of the laser gun if you're especially nostalgic. ### Armory Changes The Armory now can potentially spawn either pistols, carbines or standard. The weighting leans closer to spawning carbines and standard as opposed to pistols. ### Lore Dump The laser line of weapons now all have lore. That rich, deep lore that every game needs and is totally not important at all to the meat and potatoes of the game. I'm paid by the hour ($0.00) ### Code Tidying Lasers are old and a total mess code-wise so we've tidied up while we're here. ## Why It's Good For The Game Variety is the spice of life and also some of these weapons could have used a face lift. Especially the laser carbine. Both functionaltiy wise and appearance wise. A bit of randomness in the armory means some rounds might have unique outcomes compared to others. Sometimes, items in cargo don't see particularly much use, so peppering in a few random potential deviations can maybe nudge people to utilize variant gear on future rounds. I'm obsessed with writing too much information. I blame Hatterhat. ## Changelog 🆑 add: Three variants of the laser gun; Carbine (replacing the existing one), Pistol and Rifle! Find it (possibly) in your armory today! balance: The armory laser guns might be different variants of the laser gun, rather than always being the standard. The standard is the same as ever, even if it looks different. add: If you care, the sovl version is available as a goodie. And in the hands of pirates... spellcheck: Lore! LORE FOR LASER GUNS! LOOOORE! Examine laser guns closely and you might learn more about them. balance: The new set of laser guns come with brand new sprites. /🆑 --------- Co-authored-by: StaringGasMask <62149527+Exester509@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. |
||
|
|
71faa643bf | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-12 | ||
|
|
288c3a606a |
Adds self-message to clown pockets spell, calls post_created() (#93885)
## About The Pull Request Adds self-message to the clown pockets spell that lets you pull out clown items from nowhere. Also, calls `post_created()` in `/datum/action/cooldown/spell/conjure_item`, which it wasn't before. ## Why It's Good For The Game I don't like seeing my own name in the chatbox from my own actions. `post_created()` currently is useless. It's still useless, cause it's only for this spell, but its a lesser degree of uselessness. ## Changelog 🆑 spellcheck: Adds self-message to clown pockets spell /🆑 |
||
|
|
8ee1cd2474 |
Makes EMP logs less bad (#93841)
## About The Pull Request closes #93805 ## Why It's Good For The Game we actually have almost no emp logging at all lol, not even emp chem reaction, so you barely can track potential griefer? ## Changelog 🆑 admin: EMP logs are improved, additionally chemical EMP reactions are now logged. /🆑 |
||
|
|
337ab7f2c3 |
Refactors status effects to be based on subsystem ticks, among a few other minor status effect fixes/refactors (#93694)
## About The Pull Request Refactors status effects to track their durations and tick intervals using counters. In effect, [var/duration] now directly refers to how many deciseconds are left on the status effect. I've also moved the old [var/tick_interval] [world.time] implementation to a tick-based [var/time_until_next_tick] counter. There are a couple, less noteworthy changes in here as well. The main one is that there was an unused bit of bloat code for setting tick intervals based on a random lower and upper threshold, but that can be done in tick() now so it's completely redundant, and I thus removed it entirely. That makes parts of [proc/process] much easier to read. I added/modified some unit tests (which I expect to fail) to verify that [var/duration] and [var/tick_interval] are both multiples of the subsystem wait assigned to the status effect. If the programmer wants a duration of 2.5 seconds, they expect it to work that way, but it won't because SSfastprocess only ticks once every 0.2 seconds, which 2.5 is not a multiple of. This becomes way more apparent when a status effect is set to use SSprocessing. The final, perhaps most important unit test I've added, is one that verifies that the overall tick count and overall accumulated [seconds_between_ticks] are equal to "[var/duration] / [var/tick_interval]" and "[var/duration]" respectively. ## Why It's Good For The Game The main thing this PR fixes is timing inconsistencies. Before this PR, durations and tick intervals were tracked using world.time, while the [proc/tick] call timing was dependent on the wait time of the subsystem the status effect was processing on. Thing is, SSfastprocess and SSprocessing rarely run completely in one tick during real gameplay. This led to a continuous desync where status effects were consistently inconsistent in their overall tick count. This is a big problem as [seconds_between_ticks] is constant and thus doesn't account for this difference in tick count. As an example, Changeling's Fleshmend has a duration of 10 seconds, a tick interval of 1 second and a healing rate of 4 brute per tick. Previously, if the server was lagging even slightly and it only ticked 8 times over the course of 10 seconds, you would heal 32 health rather than the 40 that a full Fleshmend would give you. The total effect potency of a status effect being reliant on server lag is incredibly stupid, especially for status effects that have an associated cost. (like the aforementioned Fleshmend) As for the refactors, they make status effect code easier to read and debug. Unit tests also make verifying things are working as intended much easier. ## Changelog 🆑 fix: Status effects now tick consistently, with Fleshmend and such giving a consistent total healing amount. Report any oddities. refactor: Status effect code is now easier to read and makes more sense. Again, report any oddities, the changes are major. /🆑 |
||
|
|
d0ca474789 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-05 | ||
|
|
999bde8f84 |
Most screen alerts now fit the player's hud style. (#93493)
## About The Pull Request Most screen alerts that use the midnight hud style no longer have the button baked in their icon. Other screen alerts with their own background or shape (robot and mech alerts, atmos, heretic buffs or debuffs etc.) are not affected. Also updated a couple sprites but didn't spend too much time on them. Mostly reusing existing assets. Montage of how the alerts look on threee different hud styles (Operative, Trasen-Knox, Detective, ALSO I FIXED THE BUCKLED ALERT ALREADY): <img width="293" height="323" alt="image" src="https://github.com/user-attachments/assets/3a2b972b-aa5a-4c27-a454-c8c39acf6e20" /> It looks only a smidge iffy on the syndicate since the top and bottom borders aren't layered over all the overlays, but it isn't something to worry about in this PR. ## Why It's Good For The Game Screen alerts always had the midnight hud button baked in their icon states (now overlays), which completely disregard the player's hud setting, much unlike action alerts buttons. Melbert has also said that it'd be nice if the code for action buttons could also be used in screen alerts and viceversa, to slim things down. That's obviously not what I'm doing today, but having most of the screen alerts already without the baked background will surely help if we ever pursue that objective. ## Changelog 🆑 refactor: Refactored screen alerts a little. Most should now fit the player's hud style. Report any issue. imageadd: A few screen alerts have been polished/updated a little. /🆑 |
||
|
|
d14e538393 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-15-10-2025 | ||
|
|
0800c75540 |
Artifically spawned mobs have a vastly reduced penalty for death moodlet (#93348)
## About The Pull Request Closes #93285 Mood event from the death of a mob spawned "artificially" is 75% weaker, lasts 80% the duration, and don't compound An artificial monkey's death will now result - -8 * 0.25 * 0.5 = floor(1) = 1 strength moodlet for the average crew member - ...Lasting 30 seconds (unless refreshed) - -8 * 0.25 * 1.5 = floor(3) = 3 strength moodlet for animal friends - ...Lasting 1.5 minutes (unless refreshed) - -8 * 0.25 = floor(2) = 2 strength moodlet for compassionate crew members - ...Lasting 1 minute (unless refreshed) Artifical spawning includes - Moneky Cube - Xenobiology Console - "Life" reaction - Summoned rats - Spawner grenades - Cult ghosts Lemmie know if I'm missing any obvious spawns ## Why It's Good For The Game While funny it was not my intention to have Xenobiology / Genetics / Virology nuke your mood. ## Changelog 🆑 Melbert balance: Death of artifical mobs (such as monkey cube monkeys) result in a 75% weaker, 80% shorter moodlet that does not compound with more deaths. /🆑 |
||
|
|
5e629dff04 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync | ||
|
|
cb37ca225f |
Updates summon guns / gun mystery box list (#93062)
## About The Pull Request Updates the guns that the event can spawn. Mystery boxes use the same list. List now contains all lethal guns currently in the game, besides cosmetic/downgraded variants of other guns (some exceptions made if the variants are cool/iconic), craftable guns, and unique heist targets. Some of the newer guns weren't added to this list and now they're there. This means the sci portal guns are gone, gimmick guns are gone, if you get a gun from this you can immediately use it to harm someone as intended. Medbeam stays as the sole "dud" gun. Tasers and disablers stay in the list because they are used in the same way as lethal guns. You can shoot someone with them until they fall over. That counts, IMO. List now uses the unrestricted guns, for those with firing pins. This ensures non nukies can actually use them out of the box. Having to source a firing pin to make the gun that magically appeared in your hands actually work sucked, and went against the theme of the event. Alphabetises the list too. ## Why It's Good For The Game Event did dumb stuff like giving people non-guns or guns they couldn't use. List was also dated so some of the new cool guns weren't spawned. ## Changelog 🆑 fix: Summon Guns event will no longer spawn guns with restricted firing pins. fix: Summon Guns event will now only spawn guns that are intended to harm people (except the medbeam) balance: Added more guns to the Summon Guns event. /🆑 |
||
|
|
9b282a850e | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync | ||
|
|
d2f34e33be |
moves abstract_type up to datum, spawners wont spawn them (#92909)
## About The Pull Request moves all implementations (im aware of) for "Im a parent type dont spawn me please" to the datum layer to standardized behavior adds a standerized proc for filtering out "bad" items that we dont want spawning. applies to it the subtype vendor, gifts, and a new spawner and mystery box for a random gun (neither playerfacing) "port" of https://github.com/shiptest-ss13/Shiptest/pull/4621 https://github.com/user-attachments/assets/22f6f0b2-b44e-411a-b3dc-6b97dc0287aa small warning: I dont have EVERY abstract type defined right now but, ive done a good enough job for now. Im tired of data entry rn ## Why It's Good For The Game standardizing behavior. Might be a micro hit to performance however having this lets us not rely on icon state to determine whether something is a parent type and makes it much easier to tell something is a parent type (could be applied further to things like admin spawning menus and things like that). need feedback on if this is actually good for the game. ## Changelog 🆑 add: Soda cans show up in the silver slime drink table. add: Examine tag for items that are not mean to show up ingame. refactor: Standardizes how gifts rule out abstract types. fix: gifts no longer check if something has an inhand, massively expanding the list of potential items. /🆑 |
||
|
|
d5be02ecee |
Mob ckey sanity check now respects insano aghost code (#91517)
## About The Pull Request I HATE THIS PLACE DUDE, aghosting sets your ckey/key to your normal ckey/ckey but with @ prefixed. hhhhhhhhh. |
||
|
|
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. /🆑 |
||
|
|
7c0ce5435a |
Gibs you leave are now based on your biotype/chest bodypart, improves gibber VFX (#91421)
## About The Pull Request * When gibbing mobs, spawned gib type is now based on mob's biotypes if they're not a carbon, or their chest (or first) bodypart if they are, rather than requiring a proc override for every single mob. This means that a few robotic mobs no longer drop meaty gibs, and that gibbing androids now produces cyborg gibs instead of a meaty surprise, plus they should no longer runtime when trying to gib a robot. Gibs also are now spawned around the gibber and streak outwards instead of magically teleporting a few tiles away, for some visual flair. * Fixed meat not overriding blood DNA on blood_walk component which made xeno and lizard meat leave behind orange trails instead of proper lime/dark green blood colors (due to them keeping human meat DNA). * Brightened up the gibber blood overlay I've missed, so it should be consistent with old blood colors now. * Also cleaned up the gibspawner code. ## Why It's Good For The Game Biotype/chest changes should make devs lives easier and gameplay a bit more consistent, and streaking just makes the process look slightly better. ## Changelog 🆑 add: Androids and fully augmented humans now drop robotic gibs instead of meat add: Improved gibber VFX fix: Fixed gibber overlays being darker than intended fix: Fixed xenomorph and lizard meat leaving orange trails behind code: Improved gibs and gibspawner code /🆑 |
||
|
|
c8701aa056 |
Mob ckey sanity check now respects insano aghost code (#91517)
## About The Pull Request I HATE THIS PLACE DUDE, aghosting sets your ckey/key to your normal ckey/ckey but with @ prefixed. hhhhhhhhh. |
||
|
|
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. /🆑 |
||
|
|
eb69c087f1 |
Gibs you leave are now based on your biotype/chest bodypart, improves gibber VFX (#91421)
## About The Pull Request * When gibbing mobs, spawned gib type is now based on mob's biotypes if they're not a carbon, or their chest (or first) bodypart if they are, rather than requiring a proc override for every single mob. This means that a few robotic mobs no longer drop meaty gibs, and that gibbing androids now produces cyborg gibs instead of a meaty surprise, plus they should no longer runtime when trying to gib a robot. Gibs also are now spawned around the gibber and streak outwards instead of magically teleporting a few tiles away, for some visual flair. * Fixed meat not overriding blood DNA on blood_walk component which made xeno and lizard meat leave behind orange trails instead of proper lime/dark green blood colors (due to them keeping human meat DNA). * Brightened up the gibber blood overlay I've missed, so it should be consistent with old blood colors now. * Also cleaned up the gibspawner code. ## Why It's Good For The Game Biotype/chest changes should make devs lives easier and gameplay a bit more consistent, and streaking just makes the process look slightly better. ## Changelog 🆑 add: Androids and fully augmented humans now drop robotic gibs instead of meat add: Improved gibber VFX fix: Fixed gibber overlays being darker than intended fix: Fixed xenomorph and lizard meat leaving orange trails behind code: Improved gibs and gibspawner code /🆑 |
||
|
|
d841c9df40 |
[MDB IGNORE] Blood Refactor Chapter 2: Collector's Edition (#91054)
Refactors most of blood handling code untouched by #90593 and completely rewrites all blood decals, components and reagents. - Blood types now have behavioral flags which allow them to control where they leave decals/DNA/viruses. Oil no longer transfers DNA and viruses with it, while podpeople water-blood doesn't leave visible decals on turfs and items, but still can be picked up by DNA scanners. - Multiple blood types have received unique handling - liquid electricity blood now glows in the dark, oil trails are flammable and lube ones are slippery. Oil blood can be restored with fuel, lube with silicon and slime with stable plasma (as normal plasma already passively regenerates their blood), instead of everything using iron. Saline solution only supplements on iron-based blood and won't do anything to help with bloodloss for species who rely on different blood types. (Roundstart this applies only to Ethereals) - All blood logic has been moved away from the blood reagent itself into a blood element that is assigned to the blood reagent by default, and to any reagent that's drawn from a mob as their "blood" (in ``transfer_blood_to``). This means that blood you draw from lizards will be green and have lizard's blood description instead of mentioning red blood cells, Ethereal "blood" will actually contain their DNA and genes, etc. - Refactored all blood decals. Blood states are no more, everything is now handled via blood DNA. Credits to MrMelbert and Maplestation, as a significant amount of code has been taken from https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his followup PRs. Oil and xenomorph splatters are now subtypes of blood, blood drying is now animated, blood trails now curve and can be diagonal. - Rewrote bloodysoles and bloody_spreader components, credits to Melbert again for the former, while latter now makes more sense with its interactions. Bloody soles no longer share blood DNA with your hands. - Ported Melbert's bloody footprint sprites and bot-blood-spreading functionality. - Removed all species-side reagent interactions, instead they're handled by said species' livers. (This previously included exotic blood handling, thus the removal) - Slightly optimized human rendering by removing inbetween overlay holders for clothing when they're not needed. - Blood-transmitted diseases will now get added to many more decals than before. - Cleaned up and partially refactored replica pods, fixed an issue where monkeys/manipulators were unable to harvest mindless pods. - Exotic bloodtype on species now automatically assigns their blood reagent, without the need to assign them separately. - Clown mobs now bleed (with colorful reagent instead of blood during april fools), and so do vatbeasts (lizard blood) - Implemented generic procs for handling bleeding checks, all sorts of scanners now also correctly call your blood for what it is. - Podpeople's guts are now lime-green like their organs, instead of being weirdly greyish like their water-blood. (Their bleeding overlays are still grey, as they're bleeding water) - Slimepeople now can bleed. Their jelly is pale purple in color, but their wound overlays copy their body color. - Injecting/spraying/splashing/etc mob with a reagent preserves its data, so you could theoretically recycle fine wines from someone's bloodstream - Fixed burdened chaplain's sect never actually giving a blessing when applying effects, and giving a blessing when nothing can be healed. Inverted check strikes again. - Closes #91039 A lot of blood here has dried, visually the blood colors are almost exactly the same as before either of the blood refactors.   |
||
|
|
b4061f1800 |
[MDB IGNORE] Blood Refactor Chapter 2: Collector's Edition (#91054)
## About The Pull Request Refactors most of blood handling code untouched by #90593 and completely rewrites all blood decals, components and reagents. - Blood types now have behavioral flags which allow them to control where they leave decals/DNA/viruses. Oil no longer transfers DNA and viruses with it, while podpeople water-blood doesn't leave visible decals on turfs and items, but still can be picked up by DNA scanners. - Multiple blood types have received unique handling - liquid electricity blood now glows in the dark, oil trails are flammable and lube ones are slippery. Oil blood can be restored with fuel, lube with silicon and slime with stable plasma (as normal plasma already passively regenerates their blood), instead of everything using iron. Saline solution only supplements on iron-based blood and won't do anything to help with bloodloss for species who rely on different blood types. (Roundstart this applies only to Ethereals) - All blood logic has been moved away from the blood reagent itself into a blood element that is assigned to the blood reagent by default, and to any reagent that's drawn from a mob as their "blood" (in ``transfer_blood_to``). This means that blood you draw from lizards will be green and have lizard's blood description instead of mentioning red blood cells, Ethereal "blood" will actually contain their DNA and genes, etc. - Refactored all blood decals. Blood states are no more, everything is now handled via blood DNA. Credits to MrMelbert and Maplestation, as a significant amount of code has been taken from https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his followup PRs. Oil and xenomorph splatters are now subtypes of blood, blood drying is now animated, blood trails now curve and can be diagonal. - Rewrote bloodysoles and bloody_spreader components, credits to Melbert again for the former, while latter now makes more sense with its interactions. Bloody soles no longer share blood DNA with your hands. - Ported Melbert's bloody footprint sprites and bot-blood-spreading functionality. - Removed all species-side reagent interactions, instead they're handled by said species' livers. (This previously included exotic blood handling, thus the removal) - Slightly optimized human rendering by removing inbetween overlay holders for clothing when they're not needed. - Blood-transmitted diseases will now get added to many more decals than before. - Cleaned up and partially refactored replica pods, fixed an issue where monkeys/manipulators were unable to harvest mindless pods. - Exotic bloodtype on species now automatically assigns their blood reagent, without the need to assign them separately. - Clown mobs now bleed (with colorful reagent instead of blood during april fools), and so do vatbeasts (lizard blood) - Implemented generic procs for handling bleeding checks, all sorts of scanners now also correctly call your blood for what it is. - Podpeople's guts are now lime-green like their organs, instead of being weirdly greyish like their water-blood. (Their bleeding overlays are still grey, as they're bleeding water) - Slimepeople now can bleed. Their jelly is pale purple in color, but their wound overlays copy their body color. - Injecting/spraying/splashing/etc mob with a reagent preserves its data, so you could theoretically recycle fine wines from someone's bloodstream - Fixed burdened chaplain's sect never actually giving a blessing when applying effects, and giving a blessing when nothing can be healed. Inverted check strikes again. - Closes #91039 #### Examples A lot of blood here has dried, visually the blood colors are almost exactly the same as before either of the blood refactors.   |
||
|
|
bc2215667f |
Re-refactors batons / Refactors attack chain force modifiers (#90809)
Melee attack chain now has a list passed along with it, `attack_modifiers`, which you can stick force modifiers to change the resulting attack This is basically a soft implementation of damage packets until a more definitive pr, but one that only applies to item attack chain, and not unarmed attacks. This change was done to facilitate a baton refactor - batons no longer hack together their own attack chain, and are now integrated straight into the real attack chain. This refactor itself was done because batons don't send any attack signals, which has been annoying in the past (for swing combat). 🆑 Melbert refactor: Batons have been refactored again. Baton stuns now properly count as an attack, when before it was a nothing. Report any oddities, particularly in regards to harmbatonning vs normal batonning. refactor: The method of adjusting item damage mid-attack has been refactored - some affected items include the Nullblade and knives. Report any strange happenings with damage numbers. refactor: A few objects have been moved to the new interaction chain - records consoles, mawed crucible, alien weeds and space vines, hedges, restaurant portals, and some mobs - to name a few. fix: Spears only deal bonus damage against secure lockers, not all closet types (including crates) /🆑 |
||
|
|
5261efb67f |
Re-refactors batons / Refactors attack chain force modifiers (#90809)
## About The Pull Request Melee attack chain now has a list passed along with it, `attack_modifiers`, which you can stick force modifiers to change the resulting attack This is basically a soft implementation of damage packets until a more definitive pr, but one that only applies to item attack chain, and not unarmed attacks. This change was done to facilitate a baton refactor - batons no longer hack together their own attack chain, and are now integrated straight into the real attack chain. This refactor itself was done because batons don't send any attack signals, which has been annoying in the past (for swing combat). ## Changelog 🆑 Melbert refactor: Batons have been refactored again. Baton stuns now properly count as an attack, when before it was a nothing. Report any oddities, particularly in regards to harmbatonning vs normal batonning. refactor: The method of adjusting item damage mid-attack has been refactored - some affected items include the Nullblade and knives. Report any strange happenings with damage numbers. refactor: A few objects have been moved to the new interaction chain - records consoles, mawed crucible, alien weeds and space vines, hedges, restaurant portals, and some mobs - to name a few. fix: Spears only deal bonus damage against secure lockers, not all closet types (including crates) /🆑 |
||
|
|
275bec6196 |
Summon Cheese sometimes has a different invocation (#91053)
## About The Pull Request When created, each instance of Summon Cheese has a 50% chance of its invocation being changed to use the actual ref string for `/obj/item/food/cheese/wheel`, instead of Skyrim's item id for cheese wheels. ## Why It's Good For The Game The invocation for Summon Cheese is itself a reference to a debug feature from another video game. Why not add an extra layer of meta-humor by occasionally using the actual ref string for the summoned object's typepath in the invocation? ## Changelog 🆑 spellcheck: The invocation for Summon Cheese is sometimes more representative of the realities of life aboard the station. /🆑 |