mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-15 18:14:22 +01:00
masterfixes
691 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> |
||
|
|
2680aafa3f | [MDB IGNORE] Lavaland Mineral Rework: Yapmining 2026 (#95682) | ||
|
|
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. /🆑 |
||
|
|
1ce02afed8 | Adds the pump-action grenade launcher and updates the existing break-action ballistic grenade launcher with a new sprite (#95244) | ||
|
|
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. /🆑 |
||
|
|
15932fd0ae |
Sanity checks the iconoclast's repeater (#94619)
## About The Pull Request Alternative to https://github.com/tgstation/tgstation/pull/94613 The iconoclast repeater, the handheld version, no longer fires two pellets but instead fires in a two round burst. The iconoclast repeater now charges two shots (one trigger pull) every crank, and the crank takes 0.4 seconds (letting you outpace your shot rate). However, you cannot charge the gun while moving. Reduces the damage of the repeater's shots. Now it does 15 lethal force. Since this is coming out in bursts of two, this means that it deals 30 lethal force in a single pull. https://github.com/tgstation/tgstation/pull/86867 removed the wielding requirement but didn't make the weapon heavy. I suspect this was an oversight so I'm treating it as a fix given the weapon visually appears to be held in two hands. Cleans up some repeat variables and nouns. ## Why It's Good For The Game The repeater has some pretty egregious statistics that put it pretty soundly above other improvised weapons, but also a lot of manufactured weapons as well. It has existing downsides, but they're not necessarily able to be felt because of other oversights to the weapon's design. This will make sure that the weaknesses are felt while still being a relatively useful weapon. Pointedly, the gun still kills people pretty fast if you're in line of fire, but actually pursuing someone while firing is going to be very difficult. It can still run down unarmored targets with the amount of shots in the gun, but it can't be used to go Rambo down the halls, wiping everyone out with your effective machine gun. ## Changelog 🆑 balance: The iconoclast repeater, the handheld version, no longer fires two pellets but instead fires in a two round burst. balance: The iconoclast repeater now charges two shots (one trigger pull) every crank, and the crank takes 0.4 seconds (letting you outpace your shot rate). However, you cannot charge the gun while moving. balance: Reduces the damage of the repeater's shots (both versions). Now it does 15 lethal force per shot. Since this is coming out in bursts of two, this means that it deals 30 lethal force in a single pull. fix: Laser musket type weapons are now heavy weapons. code: Cleans up some of the code and grammar on the repeater. /🆑 |
||
|
|
47606e453e |
Siege Warfare: Adds two new craftable emplaced guns, a bigger laser musket, and a new spear for crew-sided mining. (#94102)
<img width="517" height="305" alt="image" src="https://github.com/user-attachments/assets/e8cd8bcd-dd3c-4733-99fe-0cdfb9799182" /> So, been a while, hasn't it? This PR adds three things. First Up: The Ratvarian Repeater.  The Ratvarian repeater is a mounted gun made from bronze, stock parts, and some drinking glasses. it is the emplaced counterpart to the laser musket, as the pipe organ gun is to the crossbow. Being a laser musket derivative, this means it has the benefit of _infinite ammo._ However, this also means to reload it, you turn the crank on the back. My personal headcanon was it works via a spring mechanism not unlike a watch, so naturally, it turned into a clock-cult flavored weapon. Each individual volley per winding shoots 12 laser musket shots in bursts of two. https://github.com/user-attachments/assets/152c3ce8-3560-4c8a-b618-7f2d81fb75a0 However, this isnt the only thing it's capable of. If you prefer your weapons more iconoclastic, you can take a welder to the stand, and carry it around, for the ability to shoot two laser musket shots instead of one per trigger pull... with the price being a decreased movespeed, and the second shot having random spread. Also you cant redeploy the stand, because iconoclasm. Still, the power is there, if you desire it. Overall, the repeater is the "Expensive but reliable" option of the three craftable gun emplacements. It has the most work to get, but once you have it, theres no need for ammo. On the complete opposite side of the coin, we have the Improvised Ballista. https://github.com/user-attachments/assets/16262965-a860-4205-bc3e-eeb8ec593647 This thing is as cheap as it gets - taking iron and wire to make (plus tools), and fires the classic spears greytiders love for 80 damage. This sounds like a lot (and it is), but once the ballista has fired - that's it, and reloading a second spear takes a full six seconds. Of the four emplaced guns, it has the least damage per firing sequence, but has all that damage in one big projectile. The ballista overall is designed to be dirt cheap to make and generally useful, but requiring a lot of work to keep running. And lastly, we have the Giant-killer spear. <img width="417" height="287" alt="image" src="https://github.com/user-attachments/assets/613379aa-379c-40b3-b4fc-ccdaa5ea4678" /> Crafted from titanium, plasteel and seven knives, and then forged by throwing it into lava this monstrously oversized spear is designed to fight monstrously oversized... monsters. While only doing 21 damage when wielded, this damage is multiplied by 3.5 against lavaland fauna, dealing damage equal to a crusher mark detonation. However, despite the ease of use, it lacks the ability to mount trophies like the crusher, so is much more suited to killing basic enemies like legions or goliaths, rather than megafauna. (It still does decently versus them, but youre prone to just dying.) Additionally, due to lacking the requirements of mining access or lavaland monsters, it can be made by the crew at large, providing them a meaningful defense on lavaland/icemoon. It can also be loaded into the ballista, so you can, if you desire, show those ashwalkers how the dark ages were REALLY fought. <img width="202" height="236" alt="image" src="https://github.com/user-attachments/assets/d21a7275-3d9e-427b-ac14-fee080541fb5" /> This PR has been six months in the making, so it feels good to finally get it out. Why its good for the game: Similar logic to my previous improvised weapon prs; I feel the dichotomy of "High tech laser rifle" and "Gun made from stuff lying around" is an interesting one. Of the damage values, the only one that has the potential for a balance issue is the spear, but due to being basically a plastitanium spear that does better versus mining mobs, I don't forsee this becoming a weapon that you can arm an entire revolution with. ## Changelog 🆑 Webcomicartist add: Added the ratvarian repeater, a craftable emplaced crank laser weapon that can be carried by hand, themed after clock cult. add: Added the improvised ballista, the rebar crossbow's bigger brother, that fires spears. Huge damage, terrible fire rate. add: Added the giant-slayer spear, a spear made at a necropolis tendril that does extra damage to lavaland creatures. (Ballista compatible) image: added sprites for the above. qol: The pipe organ gun should be easier to light now. fix: Fixed Pipe Organ Gun firing sprites not always going back to normal after finishing firing. refactor: Mounted guns are now EVEN MORE flexible codewise, now supporting secondary ammo types. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
bfdb237612 | Spooky Scary Supreme Surgery (Rework) (#93697) | ||
|
|
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 |
||
|
|
0b0c5ea91e |
Unit test material checks are now performed on all crafting recipes by default. All stack recipes now transfer mats to the results (#92620)
## About The Pull Request Extends the part of the crafting unit test that ensures consistency between the total mats of the components of a recipe (or rather, the result of said recipe) and a generic instance of the same type as its result, previously only implemented on food recipes. ## Why It's Good For The Game This ensures a degree of consistency with the material composition of various objects in the game. I couldn't do it in the original PR as that one was too big already and it took months to get it merged, and have the relative bugs fixed. Currently a WIP as I slowly deal with the unit test reports. ## Changelog 🆑 refactor: Follow-up to the crafting/material refactor from months ago. All objects crafted with stacks now inherit their mat composition (not necessarily the effects and color) by default, while previously only a few things like chair, sinks and toilets did. Report any object looking or behaving weirdly as a result. fix: The material composition of ammo boxes is no longer a 1/10 of what it's supposed to be. It was a shitty hack to make it harder to recycle empty ammo boxes. Instead, they lose materials as they're emptied now. /🆑 |
||
|
|
3425cf03e5 |
Gun Muzzle Flash (2) (#94172)
## About The Pull Request Continues https://github.com/tgstation/tgstation/pull/81507 Adds a directional muzzle flash to all guns (excluding suppressors, toys, e-bow, etc). Changes color depending on the laser/projectile. If anything is missed, let me know. ## Why It's Good For The Game Realism Cool visuals Makes sense |
||
|
|
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! /🆑 |
||
|
|
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> |
||
|
|
71faa643bf | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-12 | ||
|
|
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. /🆑 |
||
|
|
b308ee9d78 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync | ||
|
|
e90c61a00b |
Lahti l39 (#92812)
## About The Pull Request A new admin only weapon to kill people. Scriptis told me he wanted this weapon upstream and mothblocks was like "sure whatever" see https://discord.com/channels/326822144233439242/326831214667235328/1410700500550291619 ## Why It's Good For The Game Lets admins hit people with a gun that shoots a really big bullet, its therapeutic <img width="270" height="148" alt="image" src="https://github.com/user-attachments/assets/020e2bc2-2d96-44eb-bafe-d34b82f71e93" /> <img width="205" height="150" alt="image" src="https://github.com/user-attachments/assets/2c550ca5-7d5c-4fe2-a483-c4b229a2c31f" /> IRL comparison taken from some guys YT video <img width="259" height="194" alt="image" src="https://github.com/user-attachments/assets/4a536c4d-15ad-4ba4-9137-c2d5e106445e" /> ## Changelog 3 new files and one dependent new sniper rifle which is worse than the other sniper rifle and one new lahti-l39 🆑 add: Added the Lahti-L39 rifle /🆑 |
||
|
|
9b282a850e | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync | ||
|
|
0918437d53 |
BORGENING! Borg changes and QOLs (#92303)
## About The Pull Request Adds a few new items and upgrades for different cyborg modules or reworks some of them. <p align="center"> <img width="608" height="199" alt="image" src="https://github.com/user-attachments/assets/ba44742f-984b-4988-af4d-e06cf66d3296" /> </p> pic unrelated :) ### Main changes: ### Medical model **Medical cyborg** gets chembag by default and a new bluespace syringe upgrade! <p align="center"> <img width="267" height="83" alt="image" src="https://github.com/user-attachments/assets/4636688f-a3bf-4db8-b0c7-75089aeb4f54" /> </p> ### Engineering model **Engineering cyborg** recieved a few new features. Now you can put your regular RPED inside of a cyborg, but mind that it has way less storage, than RPED upgrade from robotics. Robotics RPED upgrade were renamed into expanded RPED and now cost the same amount of material to produce it as BS RPED. <p align="center"> <img width="198" height="117" alt="image" src="https://github.com/user-attachments/assets/e614a9b0-41ad-4815-8eb6-f627c2bf77cc" /> </p> Worth to mention adding decal painter with own sprite (yes it uses cell instead of regular toner) <p align="center"> <img width="827" height="498" alt="image" src="https://github.com/user-attachments/assets/2eb36651-0ee2-4c9b-81ef-f8c3a96966a8" /> </p> <p align="left"> Circuit manipulator was renamed to engineering apparatus, as its can no longer hold only circuits. Additionally, it can also hold tubes/bulbs now. </p> ### Mining model **Mining cyborg** now has mesons removed and remade into a new toggle button, you dont need to use one of your modules just to be able to see through darkness of lavaland caves. <p align="center"> <img width="248" height="173" alt="image" src="https://github.com/user-attachments/assets/e85a00ec-f373-43d0-9ce9-7ec573029af3" /> </p> **Mining cyborg** got a new shield module. It helps you fighting lavaland fauna (..or annoying humans, if youre evil) in low pressure by absorbing 50% of incoming damage when activated. Takes some amount of your charge per absorbed hit. Example:  ## Why It's Good For The Game I feel big lack of some cyborg modules or even features. This PR is supposed to fix missing gap, aswell as rebalance some of existing models. ## Changelog 🆑 qol: Added new helpful modules, such as decal painter for engineering and chembag for medical borg. add: Added miner cyborg shield module. In lavaland (low) pressure, it protects you from 50% of incoming damage in exchange of your cell charge. add: Added BS syringe upgrade for medical cyborg. /🆑 |
||
|
|
4b4fa2d612 |
Sets the X-01 Multiphase to 12 lethal shots to match the energy gun (#92766)
## About The Pull Request What it says on the tin. If you saw a PR similar to this one. You didn't. ## Why It's Good For The Game It's really weird that the X-01 is, for whatever reason, inferior to the energy gun in terms of lethal capacity but not in terms of nonlethal capacity. I don't really get it, so let's put in two shots. ## Changelog 🆑 balance: The Multiphase X-01 has 12 lethal shots to match the capacity of the standard energy gun. /🆑 |
||
|
|
c9956892db |
Merge remote-tracking branch 'origin/master' into pupstream-08-19-keepsha
# Conflicts: # _maps/map_files/BoxStation/BoxStation.dmm # code/_globalvars/lists/flavor_misc.dm |
||
|
|
61031f6cfb |
Skyrat gun removal (#3697)
## About The Pull Request HackMD: https://hackmd.io/@Ssalty/r1wjAgSxll Ammo removals: IHDF Rubber (non-.38, non-shotgun, nukie ones stay since it'd require overrides. They were never purchasable to begin with.) Stardust Magnum Express .460 Rowland .457 Government MCR magazines .40 Sol Hornet's nest Gun removals: MCR's .457 revolver M4A5 .460 Rowland revolver CCK GP-7 R10 revolver Guns made inaccessible: NRI guns (including derringer, bobr, plasmas, Miecz) Sol35 (Tarkon, sol ERT, gateway, adminspawn) Sol40 (Tarkon, sol ERT, gateway, adminspawn) Trappiste caliber (wespe, some already adminspawn weapons) Turret adjustments: Twin Fang - 4.6x30mm, 2 Second burst delay (40 dmg every 2 seconds vs 30 dmg every 1.5 seconds (old)) Stinger - 4.6x30mm instead of .35, matching damage Colonist - .45 added instead of sol40, matching damage Hoplite - Same as above Armoury: Armoury spawned MCRs replaced with laser guns and energy guns SMG's and rifles with WT If there would be a case with two separate spawns of a WT, the other is gone. Breaching shell boxes do not spawn in the armoury (they were capable of 1 shotting a dark mauler I wish I was kidding) Lathe: 9mm stendo's, AP, HP, INC magazines not availible for print - the 9mm murphy magazine is. It fits in 9mm firing turrets and the murphy. ## Why It's Good For The Game Give me like a couple days and I'll fill this out. I doubt anyone who is already pro-skyrat-gun will change their mind but it's good to rationalize the decision regardless. Find this out as in lay it out on paper. EDIT 1: Adding the first part # Foreword This PR is a *draft*. That means a lot of things are subject to change, a lot of things can be disorganized and a lot of things will be done unoptimally. Going forwards, do keep in mind, the decision-making process behind "remove entirely" and "virtually remove" will not be dependant on us going forwards, as the decision on this matter requires maintainer input more than any other. Next, the delay. I simply am not a machine, neither are other people onboard this project. With different timezones, it was important to find what isn't working so I can relay it to people in working hours. Without further ado, ## The case of the ammo types and workbench The ammunitions workbench is a machine that provides ammunition into clips, refilling them. The ammunition workbench is also the source of a multitude of alternate ammunition types. It has with itself brought several issues that at least would warrant a rework or heavy adjustments: 1. Contraband ammunitions. There is no real reason that the entire security department, or even a single crewmember should be accessing phasic weapons in the form of printable ammotypes. The argument of "the pipegun having it" doesn't do it favours, as the way you get it is an 8% chance on crafting a junk round for a bulky gun and the only way to find out if you actually have it is checking each shell individually with a bandolier. 2. Complimentary with the removals. Most use cases for this machine are refilling the magazines you can order or get alongside your weapons. This collides with the protolathe, which sources most of our upstream-based ammunition instead. With the skyrat weapons gone, this machine becomes redundant. You may claim that it's still useful in saving on materials, where you would be right! However is it worth to have and maintain an entirely separate structure, with it's own mechanics, map placements, etc. to get a benefit equal to 1.6x more bang for the buck? At the end of the day, splitting ways of getting ammo across a single room for something so miniscule compared to the bloat it adds is pointless. # The weapons, why should they go, one by one. ### RomTech Flechette rifles Compared to a standard laser gun, which is in all means our baseline of ranged damage in ss13 - being the default armoury weapon, the default laser for turrets and default laser for mobs. Better yet, let's compare it to that and the default ballistic option that we have from TG. What turns out, is that not only is the romtech carbine faster at killing than the laser, but also rivals the WT with a split second of difference in ttk in the favour of the romtech. Let's assume it's human error and the WT is better TTK wise, just as an experiment. Clearly, there must be a tradeoff, somewhere, right? One that balances them all out to be equal weapons in the grand scale of things, contemporaries! Well, no, not really. Not even close. The carbine can be folded to fit in bags, that's one thing. The carbine has more ammo, that's another thing. Bursts are harder to dodge than series shots since they cover more perpendicular ground when attempting to dodge projectiles, as is staple for ss13 combat. Burst weapons are advantageous in applying more damage quicker, as you can see on the videos - and initial damage, an alpha strike, applies movement slowdown, ensuring future projectiles connect easier and the target cannot run. It might be a coincidence that the only /tg/ derived weapons that fire burst are adminspawn ERT or the Nukie weapons. But it doesn't end here, no, the RomTech's ammunition alone would warrant a complete overhaul if not a removal. **steel ball** <p> Takes 9 shots to stamcrit, deals mixed damage - further increasing the amount of slowdown applied, and not only is it MUCH faster at stamcritting than a disabler is, it also leaves the target with 70 damage. Over half their healthbar. Severely overtuned with little counterplay availible, alpha strike monster that is better at disabling than disablers and better at stopping people dead in their tracks than rifles, and if you look at our anti-stun, we have less than ever on antagonists with Adrenal implants gone, Adreanaline Glands reworked, etc, etc... </p> **Penetrator** NT's answer to armour! The penetrator has 60 AP and otherwise the same damage as the AP WT rifle. Meaning it's a straight upgrade. Meaning this weapon invalidates it's predecessor whilst being orderable roundstart, and not only that, but it can fully ignore elite modsuits on nukeops. Not every mechanic has to have a counter, there's no direct counter to someone healing after a fight, there is no direct counter to having multiple shots, and there shouldn't be a full nullification of armour for such a low cost. There shouldn't be one for a crew that can mass produce these, ever. **Magnesium** Arguably fine, 12 firestacks per shot is still quite insane for a lower chance of friendly fire compared to original incediary hot turfs, **Ripper** Steel ball, but even worse. They don't embed a single time, ***this embeds every time***. It takes several seconds to take out. Actually, let's compare this gun's bullets to ninja stars. - 2 times the embed chance at 200 vs 100 - 8 times the jostle chance at 80 vs 10 - Comparable fall chance, at 1 vs 0 - More pain stam pct, at 0.9 vs 0.8, meaning more stamina damage - More pain chance, at 70 vs 15 - Less pain modifier, at 2 vs 5 - Takes longer to take out, 5 seconds vs 3 - Jostling pain is the same ### One problem. There's three of those fired per burst, cannot be caught either. And the armour pen is the same. in conclusion, every aspect of this gun is unhealthy for the game, from it's gimmick, to it's execution, to it's stats, to it's ammo, to it's consistency, to it's firing mode, to it being able to be currently worn on sec belts along disablers - up to 4, if I remember correct. No reworks. It has to go. ## Proof Of Testing <details> <summary>Screenshots/Videos</summary> </details> ## Changelog 🆑 del: Removed breaching slugs from crew (not to be confused with frangible. These ones 1 shot mechs) del: Removed MCR, .457 revolver, .460 Rowland revolver, GP-7, R10 revolver, M4A5, and their associated ammo types. del: Removed ammunition types: IHDF, rubber variants excluding .38/shotgun/nukie, stardust, magnum, express, hornet's nest del: Made most NRI guns (Miecz, plasma pistol, plasma thrower, bobr, derringer) and Sol 35/40 (Tarkon, ERT, gateway, adminspawn) inaccessible to crew, kept for ERT/Gateway/Flavour/Admin reasons balance: Turrets which use a removed calibre have been adjusted into either that of the WT's, Ceres (still printable) or 9mm. balance: WT's replace missing sindanos across armouries, laser guns and eguns replace the missing MCR's. /🆑 --------- Co-authored-by: Artur Lang <24881678+Arturlang@users.noreply.github.com> |
||
|
|
17006b220f |
NT researchers make shocking breakthrough in flux anomalogics! Tesla Cannon Resprite / Resound (#92031)
## About The Pull Request  Resprites: Tesla Cannon Tesla Cannon crafting kit ### New SFX / VFX The tesla cannon now uses a new type of beam effect that randomly picks sprite variants for each segment instead of a tracer. This makes the arc look more dynamic and less distorted. Autofire guns can now choose to use a looping sound datum when firing.  #### Balance changes The tesla cannon must now have its stock unfolded before firing, this takes 1.5 seconds and makes the gun bulky. It is still normal sized when folded, and folding it is instant. ### Bug fixes Fixed a bug where looping_sound.stop() would fail to stop sounds. The tesla cannon is an incredibly powerfu ## Why It's Good For The Game ### My reasons for respriting The old sprite was not bad, by all means but I had a few gripes with it. * The old sprite does not incorporate the flux anomaly yellow colour. * The old sprite looks a bit much like a real, professionally produced sci-fi weapon, * The old sprite looks pretty small for such a ultra high dps full auto weapon. * The old inhand is quite indistinct for something that can game end you in like one second. ### My design I think that anomaly items should be very mad science coded and, since anomaly science is by definition a poorly studied field, they should look more like prototypes created by a scientist rather than something professionally made in a factory. ## Changelog 🆑 image: The tesla cannon has new sprites. image: The tesla parts kit has new sprites. image: The tesla cannon has a new shocking beam effect when firing. sound: The tesla cannon has new sounds. balance: The tesla cannon must now be unfolded to fire. fix: looping sounds now stop playing sounds when commaned to do so. /🆑 |
||
|
|
efb0e037e6 |
Splits ammo box multiload into a bitflag, adds a icon for .223, adds a desc for toy magazines (#92409)
## About The Pull Request Ammo box `multiload` var was changed into a bitflag covering `AMMO_BOX_MULTILOAD_IN`, and `AMMO_BOX_MULTILOAD_OUT`, respectively. By default, ammo boxes have both multiloading in and out, while magazines only have multiloading in, which means you can't use magazines as speedloaders, but you can still feed ammo into magazines quickly if you had, say, an ammo box for that magazine's caliber. Or... something. --- Also adds an icon state for .223 casings, which is just an edit of the old 7.62 casings to be shorter. <img width="403" height="89" alt="image" src="https://github.com/user-attachments/assets/b3206b94-c2b3-4b90-8162-b4c620bbe4cf" /> --- Also adds a description for toy gun magazines. ## Why It's Good For The Game Splitting ammo box multiload into "multiload in" and "multiload out" means you can't use an ammo box as a speedloader, which I thought was silly. Emergent gameplay, sure, but also silly. .223 having a unique icon instead of just looking like any other pistol casing is nice (read: pistol-caliber casings from a rifle round annoyed me). Toy gun magazine thing was for funsies at this point. ## Changelog 🆑 code: Ammo boxes' multiload variable is now a bitflag that determines if a magazine can be multiloaded into or out of. Ammo boxes can multiload in or out, while magazines can only multiload in. image: .223 ammo now has a distinct casing icon. fix: Foam force magazines now have a proper description. /🆑 --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> |
||
|
|
45e76d80fc |
NT researchers make shocking breakthrough in flux anomalogics! Tesla Cannon Resprite / Resound (#92031)
## About The Pull Request  Resprites: Tesla Cannon Tesla Cannon crafting kit ### New SFX / VFX The tesla cannon now uses a new type of beam effect that randomly picks sprite variants for each segment instead of a tracer. This makes the arc look more dynamic and less distorted. Autofire guns can now choose to use a looping sound datum when firing.  #### Balance changes The tesla cannon must now have its stock unfolded before firing, this takes 1.5 seconds and makes the gun bulky. It is still normal sized when folded, and folding it is instant. ### Bug fixes Fixed a bug where looping_sound.stop() would fail to stop sounds. The tesla cannon is an incredibly powerfu ## Why It's Good For The Game ### My reasons for respriting The old sprite was not bad, by all means but I had a few gripes with it. * The old sprite does not incorporate the flux anomaly yellow colour. * The old sprite looks a bit much like a real, professionally produced sci-fi weapon, * The old sprite looks pretty small for such a ultra high dps full auto weapon. * The old inhand is quite indistinct for something that can game end you in like one second. ### My design I think that anomaly items should be very mad science coded and, since anomaly science is by definition a poorly studied field, they should look more like prototypes created by a scientist rather than something professionally made in a factory. ## Changelog 🆑 image: The tesla cannon has new sprites. image: The tesla parts kit has new sprites. image: The tesla cannon has a new shocking beam effect when firing. sound: The tesla cannon has new sounds. balance: The tesla cannon must now be unfolded to fire. fix: looping sounds now stop playing sounds when commaned to do so. /🆑 |
||
|
|
8e350f1f86 |
Splits ammo box multiload into a bitflag, adds a icon for .223, adds a desc for toy magazines (#92409)
## About The Pull Request Ammo box `multiload` var was changed into a bitflag covering `AMMO_BOX_MULTILOAD_IN`, and `AMMO_BOX_MULTILOAD_OUT`, respectively. By default, ammo boxes have both multiloading in and out, while magazines only have multiloading in, which means you can't use magazines as speedloaders, but you can still feed ammo into magazines quickly if you had, say, an ammo box for that magazine's caliber. Or... something. --- Also adds an icon state for .223 casings, which is just an edit of the old 7.62 casings to be shorter. <img width="403" height="89" alt="image" src="https://github.com/user-attachments/assets/b3206b94-c2b3-4b90-8162-b4c620bbe4cf" /> --- Also adds a description for toy gun magazines. ## Why It's Good For The Game Splitting ammo box multiload into "multiload in" and "multiload out" means you can't use an ammo box as a speedloader, which I thought was silly. Emergent gameplay, sure, but also silly. .223 having a unique icon instead of just looking like any other pistol casing is nice (read: pistol-caliber casings from a rifle round annoyed me). Toy gun magazine thing was for funsies at this point. ## Changelog 🆑 code: Ammo boxes' multiload variable is now a bitflag that determines if a magazine can be multiloaded into or out of. Ammo boxes can multiload in or out, while magazines can only multiload in. image: .223 ammo now has a distinct casing icon. fix: Foam force magazines now have a proper description. /🆑 --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> |
||
|
|
6aa2ca1026 |
Fixes projectiles inheriting gun's pixel offsets when fired (#92166)
## About The Pull Request Gun itself was passed as source when fired, which resulted in its pixel offsets being inherited. Also we didn't move projectiles over turfs, so any offsets larger than 32 pixels resulted in projectiles steering to the side. ## Changelog 🆑 fix: Fixed projectiles inheriting gun's pixel offsets when fired /🆑 |
||
|
|
1d6cec00bc |
Healium bolts now heal people instead of damaging them. (#92137)
## About The Pull Request Fixes healium bolts ## Why It's Good For The Game Healium bolts are supposed to heal people ## Changelog 🆑 fix: Healium bolts now heal instead of dealing damage /🆑 |
||
|
|
8e6323a858 |
Fixes projectiles inheriting gun's pixel offsets when fired (#92166)
## About The Pull Request Gun itself was passed as source when fired, which resulted in its pixel offsets being inherited. Also we didn't move projectiles over turfs, so any offsets larger than 32 pixels resulted in projectiles steering to the side. ## Changelog 🆑 fix: Fixed projectiles inheriting gun's pixel offsets when fired /🆑 |
||
|
|
9ea010c060 |
Healium bolts now heal people instead of damaging them. (#92137)
## About The Pull Request Fixes healium bolts ## Why It's Good For The Game Healium bolts are supposed to heal people ## Changelog 🆑 fix: Healium bolts now heal instead of dealing damage /🆑 |
||
|
|
5573612a43 |
Adds .38 Flare, which is a lethal laser bullet casing available for printing with Advanced Beam Weaponry. Adjust ammo material values. (#91726)
## About The Pull Request  Adds the .38 Flare. It does 20 damage. This round highlights the target for 2 minutes, and projectiles hitting the target always hit the limb that the shooter was aiming at. Your shot has effectively perfect limb accuracy, no matter how far the bullet needs to travel. This also affects other projectiles hitting the target that aren't the .38 Flare. To indicate whether or not a round in a magazine is either lead or laser, I've borrowed the implementation of ammo overlays from the C-20r toy magazines Now each bullet in the speedloaders for .38 can be a distinct type visibly. Might be interesting if anyone wants to add additional unique appearances for some of the other .38 rounds. Reduces the overall cost of a lot of the ammunition in the sec and autolathe, such as loose bullets. Also reduces the material quantity within bullet casings. ## Why It's Good For The Game > .38 Flare By popular demand, I've come up with a new idea. And that idea...is an anti-bullet deviation tool. Most players are probably not conscious of bullet deviation. But if you're familiar with the mechanic, it's why sometimes your shots may hit into an arm or a leg even though you were aiming at the head. The way this works is that over the course of a bullets flight, it increases in inaccuracy and the pobability of drifting into a limb. From my last estimate, shooting somewhere around 5 tiles away will usually result in bullet drift. While affected by the flare shot, that does not happen. You shoot at the head, you hit the head. To put it into perspective; you could consider bullet deviation a form of damage loss (its a bit more complicated than this and there are instances where it is positive), and this projectile eliminates that problem for everyone shooting the target. > Ammo cost Some of these were pretty excessive for the cost, and a notable example of this include the .357 loose casings, .310 Surplus loose casings, and most shotgun shells. These should go down to roughly below 3/5th of a sheet of metal when printed from a fully upgraded lathe. Meanwhile, a single bullet casing was like a sheet of metal each, which didn't seem right to me. So they're now by default one fifth of a sheet of metal on recycle. ## Changelog 🆑 add: .38 Flare, a laser bullet! Available in both .38 speedloader and BR-38 magazine once Advanced Beam Weaponry is researched. add: .38 Flare highlights the target in an outline and makes sure your bullets never accidentally hit any limb except the one you are aiming at. Never accidentally hit someone in the arm when you were going for a headshot. balance: Reduces the printing costs of several ammunition types from the autolathe and security lathe. Reduces the overall material contents of said printed ammo/magazines. If you find a material dupe, let a coder know. /🆑 --------- Co-authored-by: projectkepler-RU <99981766+projectkepler-ru@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> |
||
|
|
8f15d0ea2c |
Adds .38 Flare, which is a lethal laser bullet casing available for printing with Advanced Beam Weaponry. Adjust ammo material values. (#91726)
## About The Pull Request  Adds the .38 Flare. It does 20 damage. This round highlights the target for 2 minutes, and projectiles hitting the target always hit the limb that the shooter was aiming at. Your shot has effectively perfect limb accuracy, no matter how far the bullet needs to travel. This also affects other projectiles hitting the target that aren't the .38 Flare. To indicate whether or not a round in a magazine is either lead or laser, I've borrowed the implementation of ammo overlays from the C-20r toy magazines Now each bullet in the speedloaders for .38 can be a distinct type visibly. Might be interesting if anyone wants to add additional unique appearances for some of the other .38 rounds. Reduces the overall cost of a lot of the ammunition in the sec and autolathe, such as loose bullets. Also reduces the material quantity within bullet casings. ## Why It's Good For The Game > .38 Flare By popular demand, I've come up with a new idea. And that idea...is an anti-bullet deviation tool. Most players are probably not conscious of bullet deviation. But if you're familiar with the mechanic, it's why sometimes your shots may hit into an arm or a leg even though you were aiming at the head. The way this works is that over the course of a bullets flight, it increases in inaccuracy and the pobability of drifting into a limb. From my last estimate, shooting somewhere around 5 tiles away will usually result in bullet drift. While affected by the flare shot, that does not happen. You shoot at the head, you hit the head. To put it into perspective; you could consider bullet deviation a form of damage loss (its a bit more complicated than this and there are instances where it is positive), and this projectile eliminates that problem for everyone shooting the target. > Ammo cost Some of these were pretty excessive for the cost, and a notable example of this include the .357 loose casings, .310 Surplus loose casings, and most shotgun shells. These should go down to roughly below 3/5th of a sheet of metal when printed from a fully upgraded lathe. Meanwhile, a single bullet casing was like a sheet of metal each, which didn't seem right to me. So they're now by default one fifth of a sheet of metal on recycle. ## Changelog 🆑 add: .38 Flare, a laser bullet! Available in both .38 speedloader and BR-38 magazine once Advanced Beam Weaponry is researched. add: .38 Flare highlights the target in an outline and makes sure your bullets never accidentally hit any limb except the one you are aiming at. Never accidentally hit someone in the arm when you were going for a headshot. balance: Reduces the printing costs of several ammunition types from the autolathe and security lathe. Reduces the overall material contents of said printed ammo/magazines. If you find a material dupe, let a coder know. /🆑 --------- Co-authored-by: projectkepler-RU <99981766+projectkepler-ru@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> |
||
|
|
3992434cb8 |
Healium bolts now embed and heal/knock out passively over time instead of being instant and unblockable (#91481)
## About The Pull Request Healium bolts now heal you for 5 of each damage per second for 6 seconds before falling out, while applying 2 seconds of drowsiness. If you have at least 5 seconds of drowsiness (after 4 seconds of processing, because we add 2 and it gets deducted by 1 afterwards) you get knocked out for 3 seconds (similarly to how it worked before, but with 1 additional second left of processing if you were only shot by one bolt, you end up knocked out for 4 seconds). It takes 1.5 seconds to rip one out, so you should be able to react to being shot by one unless the attacker follows it up with a melee distruption. Bolts that fall out restore their charges, but only one bolt at a time can be putting the target to sleep. https://github.com/user-attachments/assets/7936895e-f4dc-4bd6-847f-495c7f1202db Video is a bit outdated, delay before knockout been bumped by a second. ###### This is a commission for Ezel/Improvedname ## Why It's Good For The Game Healium bolts are an instant knockout that could be mass-produced to either instantly win fights, or thrown at medbay to quickly hit corpses by poking them over and over again as bolts didn't even embed, so players can instantly reload and shoot them again. It was either making them harder to produce, or reducing the effects, and former wouldn't solve the knockout issue. They also didn't care about block values, so even if you blocked or reflected one you'd still get knocked out. lol ## Changelog 🆑 balance: Healium bolts now heal and knock out overtime while being embedded instead of being instant. balance: Healium bolts dissolve after being embedded for 6 seconds and don't work on corpses fix: Healium bolts no longer ignore being blocked/parried/reflected /🆑 |
||
|
|
c108ef79ac |
Healium bolts now embed and heal/knock out passively over time instead of being instant and unblockable (#91481)
## About The Pull Request Healium bolts now heal you for 5 of each damage per second for 6 seconds before falling out, while applying 2 seconds of drowsiness. If you have at least 5 seconds of drowsiness (after 4 seconds of processing, because we add 2 and it gets deducted by 1 afterwards) you get knocked out for 3 seconds (similarly to how it worked before, but with 1 additional second left of processing if you were only shot by one bolt, you end up knocked out for 4 seconds). It takes 1.5 seconds to rip one out, so you should be able to react to being shot by one unless the attacker follows it up with a melee distruption. Bolts that fall out restore their charges, but only one bolt at a time can be putting the target to sleep. https://github.com/user-attachments/assets/7936895e-f4dc-4bd6-847f-495c7f1202db Video is a bit outdated, delay before knockout been bumped by a second. ###### This is a commission for Ezel/Improvedname ## Why It's Good For The Game Healium bolts are an instant knockout that could be mass-produced to either instantly win fights, or thrown at medbay to quickly hit corpses by poking them over and over again as bolts didn't even embed, so players can instantly reload and shoot them again. It was either making them harder to produce, or reducing the effects, and former wouldn't solve the knockout issue. They also didn't care about block values, so even if you blocked or reflected one you'd still get knocked out. lol ## Changelog 🆑 balance: Healium bolts now heal and knock out overtime while being embedded instead of being instant. balance: Healium bolts dissolve after being embedded for 6 seconds and don't work on corpses fix: Healium bolts no longer ignore being blocked/parried/reflected /🆑 |
||
|
|
690bfc04b4 |
Rebalances wound determination values, wounding escalation and wound armor to hopefully be less explosive (#91099)
This is a big one so please bear with me, wounds are complicated We've decreased the max contributed damage to wound rolls from 35 to 25. This results, after the exponent, a max possible wound roll of 1 to 91 before any modifiers (assuming the attack, after armor, is 25 or above). The minimum value to wound is still 5. Most wounds were contributing significant numbers per wound type to the potential for a new wound to occur. Getting wounded once meant you were getting wound a lot, but actually getting past that first wounding may be the tricky part. We have significantly reigned in the wound penalty that having a wound contributes, and instead utilize the series wound penalty to allow same type wounds to escalate themselves faster as a priority. Having wounds still makes you more wound vulnerable, just not to such an extreme degree. The priority here for what wounds matter most for contributing to overall wounding vulnerability is ``Infected BURNS > BURNS > SLASH|PIERCE > BLUNT.`` Wound armor, unlike all other kinds of armor, was used as a additive value to the wound roll modifiers rather than a multiplicative value. We have reworked how wound armor is determined by changing how wound modifiers are calculated. Firstly, we're passing our entire injury roll into the ``check_woundings_mod()`` proc, as we're not treating this as a proc that just adds values anymore. Secondly, bare wound bonus only applies if there is no potential wound protection from any source, as expected. But it comes last in the calculations. Thirdly, wound protection is applied to the injury roll last, after wound bonuses from the attack, wound bonuses from other wounds and wound bonuses from a disabled limb are applied. This does not include serial wound bonuses, which are determined outside of this proc. Wound protection comes from two sources. Clothing and limb wound resistance. Your chest and head have an amount of wound resistance so long as they are not mangled in any fashion. Being mangled means having either a hairline fracture or a weeping avulsion wound. Wound protection reduces the final injury roll by a percentage. Say our roll is 50, and we have effectively 50% wound protection. The final roll would be 25. ~~Most clothing have had their wound armor values changed. As a loose rule, I used the highest of melee or bomb armor, except where that value was 100, in which case I used the lowest instead. I'm basing this decision on how embeds are calculated, which is attack type agnostic.~~ ~~Some armor have inconsistent values because they are alternative armors to an existing armor type or are hyperspecialized armor. Ablative, bulletproof and security vests all share a value of 35, despite the former two not having decent melee or bomb armor.~~ ~~Some clothing missing wound armor that should have had them now have wound armor.~~ ~~This may need a bit of scrutiny in case one or two seem weirdly high. Some have maybe become too low. Its a bit hard to say.~~ I changed it to ``exposed_wound_bonus`` to better represent when it applies. You can be naked and still not be affected by this bonus if the limb has wound resistance. I'm not promising anything with this PR, but this is an attempt to sanity check the values on wounds so that we're not seeing what the data that determined the removal of beheading presented. An extreme over-representation of tier 3 wounds. ~~And, from that, maybe I can argue for beheadings coming back. That's my goal. I think beheadings happened so much because the numbers were in need of work.~~ Well okay I just wanna make wounds a bit more workable actually more than I want beheadings. Why is it that tier 3 wounds were so over-represented? Because wounds will often force more severe wounds of other types by merit of any wounds existing at all on a limb. Having **_a_** wound makes you more wound prone for any kind of wound, and not just making you more likely to suffer a more severe type of the same wound. The threshold mechanic was intended to simulate making a wound worse, but oddly just made a limb broadly more prone to getting worse from any kind of attack to such a degree that future wound rolls of different types were often going to start at the threshold necessary to be a tier 3 wound. Dismemberment, mind you, requires you to suffer a flesh wound while you have a bone wound of tier 2 or higher (with tier 3 giving a bonus to this). You can do this readily via just a sharp weapon, because having a mangled limb causes the wound to turn into a bone wound. Technically, this is meant to be less likely as the effective damage for this wound is halved. But the wound bonus from having a flesh wound was almost always significant enough to kick your new bone wound up to a tier 3. In other words; its not surprising that you saw so many beheadings, because the system wanted to behead you as fast as it possibly can thanks to all these escalating values. Wound armor was only applied as a flat reduction on the roll. The average for wound armor was 10. After receiving a single wound, you can expect wound rolls to reach upwards of 100, even if the actual damage roll was not particularly high, due to wound stacking bonuses form being wounded. This meant that wounds, if they happened, came thick and fast after the first, regardless of what your protection might be to wounds. It was just a matter of getting past the initial bump. This is why effects that forced wounds were so powerful. They basically made a given limb more prone to taking a wound without having to deal with the protection problem first. Finally, this is just a broad flaw with the system that is not its fault. It is actually a problem that isn't a problem. Most people in the game are not wearing helmets that protect their head. So most people are going to suffer from a higher proclivity of being wounded if people are aiming for the head. There is this...kind of cargo cult belief that aiming for the head means you do more damage, or can stun someone if you're lucky or what have you. It's entirely nonsense, but it has a grain of truth in that people rarely wear, or even have access too, headwear that provides wound protection or any protection at all. People have jumpsuits, which are universally wound protected, but that isn't true of the head. Look, the point is, they're not aiming at the head because it is usually less armored, its for other reasons but it just so happens to become true due to wounds and how wounds roll their type. To soften this issue, I've decided to treat wound resistance as armor until the limb suffers a tier 3 wound. This way, hits to the head MAY not necessarily escalate to tier 3 instantly as they would on live even from relatively low power weapons. Some weapons have very low force, but have extreme bare wound bonuses. This should be less likely after this change. I doubt this will necessarily make high damage high wound weapons like energy swords any less prone to cutting you clean open, but it might thanks to the reduction to contributed damage to the injury roll. The system is now _a bit more random_. 🆑 balance: Wounds do not make you as vulnerable to suffering wounds of all types as before. Instead, wounds make you more vulnerable to suffering worse versions of themselves as a priority. balance: Wound armor is now more impactful when protecting you from wounds when you have already been wounded. balance: Your head and chest are more difficult to wound until they have been mangled; either from suffering from a weeping avulsion or a hairline fracture. code: Changed the variable for bare_wound_bonus to exposed_wound_bonus to better explain what that variable is doing. /🆑 --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> |
||
|
|
da97c1a2b9 |
Enabling throw mode while ejecting casings has you catch them (except for when you don't) (#91645)
## About The Pull Request When racking a gun (e.g. pulling the slide on a pistol, racking a shotgun's pump, etc. etc), if you have throw mode enabled, you'll attempt to catch the ejected casing.  This can fail, though, which gives you a funny message under these circumstances: - Your hands are full.  - The casing was fired in the last 5 seconds, and you do not have the protection of hand required to remove a lightbulb.  You catch it if you have the lightbulb remover trait/skillchip, though.  - You try to catch it while clumsy (e.g. being a clown). To add insult to injury, trying to catch a hot casing has it burn you even if you're wearing gloves. Don't think about that too hard.  ## Why It's Good For The Game Changing shotgun ammo sucks less. Look cool to your friends while possibly wasting ammo. Feel like a doofus when you get the funny red text that says you dropped the casing because your hands were full. The possibilities are very limited but it seems like it'd be nice to not have to fumble for dropped casings all the time. (Now it's just most.) ## Changelog 🆑 qol: Having throw mode enabled while racking the slide on a gun has you catch the ejected casing. Unless your hands are full, your hands are unprotected and the casing is recently fired, or you are clumsy (e.g. a clown), in which case you drop the casing and look silly. /🆑 --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com> |
||
|
|
57624ca1e2 |
Rebalances wound determination values, wounding escalation and wound armor to hopefully be less explosive (#91099)
## About The Pull Request This is a big one so please bear with me, wounds are complicated ### Max Potential Wound Rolls We've decreased the max contributed damage to wound rolls from 35 to 25. This results, after the exponent, a max possible wound roll of 1 to 91 before any modifiers (assuming the attack, after armor, is 25 or above). The minimum value to wound is still 5. ### Wound Escalation Penalties Most wounds were contributing significant numbers per wound type to the potential for a new wound to occur. Getting wounded once meant you were getting wound a lot, but actually getting past that first wounding may be the tricky part. We have significantly reigned in the wound penalty that having a wound contributes, and instead utilize the series wound penalty to allow same type wounds to escalate themselves faster as a priority. Having wounds still makes you more wound vulnerable, just not to such an extreme degree. The priority here for what wounds matter most for contributing to overall wounding vulnerability is ``Infected BURNS > BURNS > SLASH|PIERCE > BLUNT.`` ### Wound Armor Wound armor, unlike all other kinds of armor, was used as a additive value to the wound roll modifiers rather than a multiplicative value. We have reworked how wound armor is determined by changing how wound modifiers are calculated. Firstly, we're passing our entire injury roll into the ``check_woundings_mod()`` proc, as we're not treating this as a proc that just adds values anymore. Secondly, bare wound bonus only applies if there is no potential wound protection from any source, as expected. But it comes last in the calculations. Thirdly, wound protection is applied to the injury roll last, after wound bonuses from the attack, wound bonuses from other wounds and wound bonuses from a disabled limb are applied. This does not include serial wound bonuses, which are determined outside of this proc. Wound protection comes from two sources. Clothing and limb wound resistance. Your chest and head have an amount of wound resistance so long as they are not mangled in any fashion. Being mangled means having either a hairline fracture or a weeping avulsion wound. Wound protection reduces the final injury roll by a percentage. Say our roll is 50, and we have effectively 50% wound protection. The final roll would be 25. ### ~~Wound Armor on Clothing~~ Reverted ~~Most clothing have had their wound armor values changed. As a loose rule, I used the highest of melee or bomb armor, except where that value was 100, in which case I used the lowest instead. I'm basing this decision on how embeds are calculated, which is attack type agnostic.~~ ~~Some armor have inconsistent values because they are alternative armors to an existing armor type or are hyperspecialized armor. Ablative, bulletproof and security vests all share a value of 35, despite the former two not having decent melee or bomb armor.~~ ~~Some clothing missing wound armor that should have had them now have wound armor.~~ ~~This may need a bit of scrutiny in case one or two seem weirdly high. Some have maybe become too low. Its a bit hard to say.~~ ### The ``bare_wound_bonus`` variable I changed it to ``exposed_wound_bonus`` to better represent when it applies. You can be naked and still not be affected by this bonus if the limb has wound resistance. ## Why It's Good For The Game I'm not promising anything with this PR, but this is an attempt to sanity check the values on wounds so that we're not seeing what the data that determined the removal of beheading presented. An extreme over-representation of tier 3 wounds. ~~And, from that, maybe I can argue for beheadings coming back. That's my goal. I think beheadings happened so much because the numbers were in need of work.~~ Well okay I just wanna make wounds a bit more workable actually more than I want beheadings. Why is it that tier 3 wounds were so over-represented? Because wounds will often force more severe wounds of other types by merit of any wounds existing at all on a limb. Having **_a_** wound makes you more wound prone for any kind of wound, and not just making you more likely to suffer a more severe type of the same wound. The threshold mechanic was intended to simulate making a wound worse, but oddly just made a limb broadly more prone to getting worse from any kind of attack to such a degree that future wound rolls of different types were often going to start at the threshold necessary to be a tier 3 wound. Dismemberment, mind you, requires you to suffer a flesh wound while you have a bone wound of tier 2 or higher (with tier 3 giving a bonus to this). You can do this readily via just a sharp weapon, because having a mangled limb causes the wound to turn into a bone wound. Technically, this is meant to be less likely as the effective damage for this wound is halved. But the wound bonus from having a flesh wound was almost always significant enough to kick your new bone wound up to a tier 3. In other words; its not surprising that you saw so many beheadings, because the system wanted to behead you as fast as it possibly can thanks to all these escalating values. Wound armor was only applied as a flat reduction on the roll. The average for wound armor was 10. After receiving a single wound, you can expect wound rolls to reach upwards of 100, even if the actual damage roll was not particularly high, due to wound stacking bonuses form being wounded. This meant that wounds, if they happened, came thick and fast after the first, regardless of what your protection might be to wounds. It was just a matter of getting past the initial bump. This is why effects that forced wounds were so powerful. They basically made a given limb more prone to taking a wound without having to deal with the protection problem first. Finally, this is just a broad flaw with the system that is not its fault. It is actually a problem that isn't a problem. Most people in the game are not wearing helmets that protect their head. So most people are going to suffer from a higher proclivity of being wounded if people are aiming for the head. There is this...kind of cargo cult belief that aiming for the head means you do more damage, or can stun someone if you're lucky or what have you. It's entirely nonsense, but it has a grain of truth in that people rarely wear, or even have access too, headwear that provides wound protection or any protection at all. People have jumpsuits, which are universally wound protected, but that isn't true of the head. Look, the point is, they're not aiming at the head because it is usually less armored, its for other reasons but it just so happens to become true due to wounds and how wounds roll their type. To soften this issue, I've decided to treat wound resistance as armor until the limb suffers a tier 3 wound. This way, hits to the head MAY not necessarily escalate to tier 3 instantly as they would on live even from relatively low power weapons. Some weapons have very low force, but have extreme bare wound bonuses. This should be less likely after this change. I doubt this will necessarily make high damage high wound weapons like energy swords any less prone to cutting you clean open, but it might thanks to the reduction to contributed damage to the injury roll. The system is now _a bit more random_. ## Changelog 🆑 balance: Wounds do not make you as vulnerable to suffering wounds of all types as before. Instead, wounds make you more vulnerable to suffering worse versions of themselves as a priority. balance: Wound armor is now more impactful when protecting you from wounds when you have already been wounded. balance: Your head and chest are more difficult to wound until they have been mangled; either from suffering from a weeping avulsion or a hairline fracture. code: Changed the variable for bare_wound_bonus to exposed_wound_bonus to better explain what that variable is doing. /🆑 --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> |
||
|
|
a02b3653e8 |
Enabling throw mode while ejecting casings has you catch them (except for when you don't) (#91645)
## About The Pull Request When racking a gun (e.g. pulling the slide on a pistol, racking a shotgun's pump, etc. etc), if you have throw mode enabled, you'll attempt to catch the ejected casing.  This can fail, though, which gives you a funny message under these circumstances: - Your hands are full.  - The casing was fired in the last 5 seconds, and you do not have the protection of hand required to remove a lightbulb.  You catch it if you have the lightbulb remover trait/skillchip, though.  - You try to catch it while clumsy (e.g. being a clown). To add insult to injury, trying to catch a hot casing has it burn you even if you're wearing gloves. Don't think about that too hard.  ## Why It's Good For The Game Changing shotgun ammo sucks less. Look cool to your friends while possibly wasting ammo. Feel like a doofus when you get the funny red text that says you dropped the casing because your hands were full. The possibilities are very limited but it seems like it'd be nice to not have to fumble for dropped casings all the time. (Now it's just most.) ## Changelog 🆑 qol: Having throw mode enabled while racking the slide on a gun has you catch the ejected casing. Unless your hands are full, your hands are unprotected and the casing is recently fired, or you are clumsy (e.g. a clown), in which case you drop the casing and look silly. /🆑 --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com> |
||
|
|
33395ff3bc |
S.W.A.T part 3 (#3534)
## About The Pull Request You're in my way, sir. Readds hybrid tasers. ## Why It's Good For The Game About four months ago, tasers were heavily reworked on TG. This made them work more like actual tasers. They do stamina damage over time, can be resisted against, and if someone else walks in the way it fucks everything up. You can also walk out of range. Here, I've readded them with some tweaks. For one, energy armor now applies. MOST vests have high energy armor, so they counter tasers pretty well. I've also made tasers take more energy to use. Before you say this is op, if you're running, this has a range of about...2 tiles? I really really encourage you to try this on your own local branch before forming an opinion. I think this is good for the game as it gives sec another nonlethal option. What you should know: Currently, unarmored, it takes 8-10 seconds of constant tasing to full stun someone. They will then be on the ground for about 3 seconds, before getting back up. Armored, this is even more, far more. All these numbers are subject to change, of course, but for now I'm intentionally making them pretty weak as we see how this affects balance. I've also talked to our resident antag main, Kyle, about this change to ensure that I'm not just doing this due to my sec bias. ## Proof Of Testing Works on my machine <details> <summary>Screenshots/Videos</summary> </details> ## Changelog 🆑 The spirit of secoffs long past add: Readds the golden bolt /🆑 --------- Co-authored-by: Ian Yanik <Iwantpornspam@gmail.com> Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com> |
||
|
|
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) /🆑 |
||
|
|
7f435407a5 |
DRAGnet; new sprite, new functionality (#90713)
## About The Pull Request  New sprites for the DRAGnet, coming alongside some functionaltiy changes. DRAGnets are now bulky, and do not fit in backpacks. They also cannot be dual-wielded. DRAGnet no longer have the trap snare functionality. You know, the infamous bola bullet. DRAGnets now have two functions; The first function is straight up a scatter disabler blast that does a total of 55 stamina damage point blank (it's like, 5 less than what it did before). The second function is a single bolt that, when it hits a living mob, dealing 30 damage and staggering it briefly slowing it down. It also places down a wide net of transportation fields around the target, much like the net functionality does on live (but that's attached to the scatter function, not the single bolt)  ### Misc Changes DRAGnets now cost more form cargo, at 3600 credits. (This barely matters for departmental orders) ## Why It's Good For The Game The sprite is ancient. Like nearing two decades old ancient. I believe the INTENTION was this thing  It didn't really work out that way.  Either way, the new sprite is cool and more unique in my opinion. Fitting its status as an energy weapon. As for balance changes; I've wanted to do this for a very long time but put it off a lot. I think this is about the most moderate approach I have. It otherwise functions pretty much as expected, maintaining the cool niche functionality while exorcising the problem bits; one-handed energy shotgun bit, and the bola shot bit. I think I've spent at least the last...four or so years hammering on about the horror that is this gun for balance? And even when it was seeing more widespread use from people who recognized how bullshit it really was, I didn't really want to get rid of the bit I actually quite liked, which was the teleportation field. I'm happy with this version. ## Changelog 🆑 NecromancerAnne (Code, Mild Sprite Edits) Michiyamenotehifunana (Sprites) image: Replaces the decrepit DRAGnet sprite with something newer and more interesting. balance: Completely reworks the DRAGnet. They are now bulky energy guns. balance: Snare is now a single shot bolt that deals 30 stamina force, staggers the target and lays out a net of teleportation fields that can transport anyone standing on them for too long to a DRAGnet beacon. balance: Net has been replaced with a scattershot disabler round. /🆑 |
||
|
|
1c3c50c9e9 |
DRAGnet; new sprite, new functionality (#90713)
## About The Pull Request  New sprites for the DRAGnet, coming alongside some functionaltiy changes. DRAGnets are now bulky, and do not fit in backpacks. They also cannot be dual-wielded. DRAGnet no longer have the trap snare functionality. You know, the infamous bola bullet. DRAGnets now have two functions; The first function is straight up a scatter disabler blast that does a total of 55 stamina damage point blank (it's like, 5 less than what it did before). The second function is a single bolt that, when it hits a living mob, dealing 30 damage and staggering it briefly slowing it down. It also places down a wide net of transportation fields around the target, much like the net functionality does on live (but that's attached to the scatter function, not the single bolt)  ### Misc Changes DRAGnets now cost more form cargo, at 3600 credits. (This barely matters for departmental orders) ## Why It's Good For The Game The sprite is ancient. Like nearing two decades old ancient. I believe the INTENTION was this thing  It didn't really work out that way.  Either way, the new sprite is cool and more unique in my opinion. Fitting its status as an energy weapon. As for balance changes; I've wanted to do this for a very long time but put it off a lot. I think this is about the most moderate approach I have. It otherwise functions pretty much as expected, maintaining the cool niche functionality while exorcising the problem bits; one-handed energy shotgun bit, and the bola shot bit. I think I've spent at least the last...four or so years hammering on about the horror that is this gun for balance? And even when it was seeing more widespread use from people who recognized how bullshit it really was, I didn't really want to get rid of the bit I actually quite liked, which was the teleportation field. I'm happy with this version. ## Changelog 🆑 NecromancerAnne (Code, Mild Sprite Edits) Michiyamenotehifunana (Sprites) image: Replaces the decrepit DRAGnet sprite with something newer and more interesting. balance: Completely reworks the DRAGnet. They are now bulky energy guns. balance: Snare is now a single shot bolt that deals 30 stamina force, staggers the target and lays out a net of teleportation fields that can transport anyone standing on them for too long to a DRAGnet beacon. balance: Net has been replaced with a scattershot disabler round. /🆑 |
||
|
|
11d82b7995 |
You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
People can now pet held mothroaches and pugs if they want to, or use items on them, hopefully without causing many issues. After all, it only took about a couple dozen lines of code to make... ...Oh, did the 527 files changed or the 850~ lines added/removed perhaps catch your eye? Made you wonder if I accidentally pushed the wrong branch? or skewed something up big time? Well, nuh uh. I just happen to be fed up with the melee attack chain still using stringized params instead of an array/list. It was frankly revolting to see how I'd have had to otherwise call `list2params` for what I'm trying to accomplish here, and make this PR another tessera to the immense stupidity of our attack chain procs calling `params2list` over and over and over instead of just using that one call instance from `ClickOn` as an argument. It's 2025, honey, wake up! I also tried to replace some of those single letter vars/args but there are just way too many of them. Improving old code. And I want to be able to pet mobroaches while holding them too. 🆑 qol: You can now interact with held mobs in more ways beside wearing them. /🆑 |
||
|
|
339616ae78 |
You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
## About The Pull Request People can now pet held mothroaches and pugs if they want to, or use items on them, hopefully without causing many issues. After all, it only took about a couple dozen lines of code to make... ...Oh, did the 527 files changed or the 850~ lines added/removed perhaps catch your eye? Made you wonder if I accidentally pushed the wrong branch? or skewed something up big time? Well, nuh uh. I just happen to be fed up with the melee attack chain still using stringized params instead of an array/list. It was frankly revolting to see how I'd have had to otherwise call `list2params` for what I'm trying to accomplish here, and make this PR another tessera to the immense stupidity of our attack chain procs calling `params2list` over and over and over instead of just using that one call instance from `ClickOn` as an argument. It's 2025, honey, wake up! I also tried to replace some of those single letter vars/args but there are just way too many of them. ## Why It's Good For The Game Improving old code. And I want to be able to pet mobroaches while holding them too. ## Changelog 🆑 qol: You can now interact with held mobs in more ways beside wearing them. /🆑 |
||
|
|
753d8e5ba4 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-04a |