mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-13 03:02:38 +00:00
47dc38fee2bc12d80070d7bd2c6a73f1f914ce1d
2903 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
357799c8a5 |
Removes Orbit Polling Component, SSpolling improvement (#81748)
When I made SSpolling, jlsnow gave me his blessing to delete the orbit polling component [where you orbit something for 20 seconds before it chooses a ghost from the orbiters] It's only used in a few places like soulstones replacing jobbanned/inactive players, etc. Also upgraded SSpolling; you can now place a little icon on the sides in the chat message, chat message looks a lot nicer, the alert pic and the jump target don't have to be the same anymore, and I made it be able to pre-pick candidates since 90% of the use cases would just want 1 candidate Also prints to chat who the chosen one was Also made slime intelligence potions ask the user for a reason, which will be displayed in the alert poll |
||
|
|
977799a2e7 |
A red spy has entered the base: Adds Spies, a roundstart antagonist inspired by Goonstation's Spy-Thief (#81231)
# Disclaimer: No Goon code was referenced or used in the making of this PR ## About The Pull Request [Design Document (Read this for more information)](https://hackmd.io/@L9JPMsZhRO2wI25rNI6GYg/rkYKM9Yc6) This PR adds Spies as a new roundstart antagonist type, inspired by Spy-Thiefs from Goonstation. Spies are tasked with stealing various objects around the station, from insulated gloves to the black box, from the clown's left leg to the bridge's communications console. For every item stolen, the Spy is rewarded with a random item from the Syndicate Uplink, plus some items uniquely available to the Spy. Stolen items are then shipped off and sold on the Black Market Uplink, allowing the crew - or maybe some other evil-doers - to get their hands on them.  More ideas for theft items and bounties are welcome. ## Why It's Good For The Game See the design document for more information. In short: Adds a solo antagonist which has less impact than your Traitors and Heretics, but more impact than Paradox Clones and Thieves. In other words: On the same tier as old traitors. Seeks to embrace the sandbox aspect of antagonists more by having no precise greentext objective, and instead some suggestions for chaos you can embark in. Have fun with it! ## Changelog 🆑 Melbert add: Spies may now roam the halls of Space Station 13. Watch your belongings closely. /🆑 |
||
|
|
935008995b | Fixes the M-90GL saying that it takes 5.56 when it actually takes .223. (Shush this is the same bullet) (#81716) | ||
|
|
e8e8238154 |
Fixes bows not loosening their strings once fired (#81724)
## About The Pull Request So, there's this one place that could have just called `clear_chambered` because it does the exact same operations, but didn't. Here's `gun/ballistic/proc/clear_chambered()`: |
||
|
|
70651816c2 |
Fixes complex lights not handling moving well, renames lighting defines (#81423)
## About The Pull Request [Fixes static lights not moving]( |
||
|
|
12afcb911e |
Comprehensive cleanup of storage datum, replaces the weakrefs with just refs (because they were managed already) (#81120)
## About The Pull Request
- Large amount of storage datum cleanup.
- Documentation.
- Maybe more consistent use of parent vs real_location.
- Removes the weakrefs, replaces it with just references.
- These were already managed references anyways so why bother?
- Removes a bunch of arguments no one used and would ever used so only
the most useful args are left.
- Some bugfixes.
## Why It's Good For The Game
Aiming to make storage easier to work with. The whole intent of this was
to bugfix the whole "weight class" thing that keeps popping up but I had
to do this first.
## Changelog
🆑 Melbert
fix: When placing an item into storage (such as backpacks), all nearby
mobs now get a message, rather than just the first mob.
fix: TGC decks of cards should act a bit less odd when looking inside.
refactor: Refactored a bit of storage, cleaned up a fair bit of its
code. Let me know if you notice anything funky about storage (like
backpacks).
/🆑
|
||
|
|
002051a3d5 |
ArcMining Pr Beta: Version 1.2 (#78524)
This one's not like the last one, so much so that I'm not even going to outsource the PR description to a robot this time! Basically, **You should read the PR body before assuming that everything is the same as last time. It's not.** ## Video Summary Click the link below to see a video summary of the main features of this pull request. https://youtu.be/Aho2omR0mjY?feature=shared ## About The Pull Request This pull request serves as a large rework of minerals produced by mining, and by extension mining itself. I'll try and list each change and it's associated nuance here. ### Ore Vents The biggest addition to the game with ArcMining is **Ore Vents**. Ore vents spawn as a ruin on the map, placing a randomized ore vent onto map generation. Ore vents spawn in 3 different sizes, **Small, Medium, and Large**. These vents will pick from a pool of materials they can generate, and will hang out across the map. A player can use a mining scanner to discover an ore vent, granting a small quantity of **mining points** to begin with. Once scanned, ore vents will show what minerals that ore vent will generate after they're fully tapped. Scanning the vent again will trigger the extraction process. A small drone will fly down, called the NODE drone, and buckle onto the vent. Your job during wave defense is to protect the drone and to defeat waves of randomly spawning mobs (dependent on if you're on lavaland or on icebox). The quantity, duration, and time between waves is scaled to the size of the vent you're protecting. Starting by scanning and protecting lower tier vents earlier in the shift is a safer bet than doing a large vent in the first few minutes. The drone has 500 health, and can take a good few hits, but leaving it alone will cause it to meet an unfortunate end quite quickly. Cooperation can be your best asset, as mining with allies can greatly help with wave defense, and mineral points are granted to anyone who helps with defending the ore vent equally (So 500 * size tier, regardless of how much help you receive). Once complete, the ore vent will have a mining machine constructed on top of it, and will start to dredge up **Boulders** from the earth automatically. More on boulders later. Ore vents can be located based on your mining scanner, and will provide an appropriate audio cue based on if the ore vent has been discovered or not, and once processed will no longer alert you to it's presence. **Each station comes with a free vent that produces exclusively iron and glass, free of charge.** This is to help with shifts where the station may not have shaft miners to produce minerals, and to provide the station with a baseline amount of minerals where none may exist otherwise. ### Mineral Generation Mineral generation has been completely reworked. Previously, Mineral Generation had a flat 13% spawn rate in-game. Once minerals spawned, they would also have a chance to propagate their minerals to nearby tiles, resulting in a rather massive pool of minerals that could spawn throughout lavaland on the whole. This tweaks that, by making minerals in walls spawn based on their proximity to ore vents on maps that use cave generation. Both the probability, and quantity of ores spawning in walls is scaled based on distance, with ore vents looking like large caches of ores found in walls. This makes following ores found in walls and checking their quantity of minerals spawned a good indicator of how close you are to a nearby vent in-round. This means you can collect some points form both discovering ore vents first, as well as collecting their surrounding ores, turn those in for mining points, and then trading them in for gear upgrades to more effectively take on ore vents. As a result of tweaking the balance of this, the total amount of ores spawned in walls overall has been decreased. However, by making more of the process time based, we still result in a mostly balanced finished product. ### Boulder Processing On station, there are now three new machines. These are the BRM, the Refinery, and the Smelter. - The BRM acts as a teleporter. Instead of needing to carry boulders back to the station, you can activate the BRM, and it will automatically pick boulders to teleport back to itself. You can use this to teleport boulders dredged up from lavaland onto the station for processing. **The BRM will only lock on to boulders that are resting on an ore vent.** Moving boulders back by hand will mean you'll have to haul it back by hand. - The refinery processes the non-metallic materials out of boulders. This process sends the materials straight to the ORM, and collects mining points from the ores smelted in the machine. Swiping with an ID card lets you withdraw those points for your own personal account, but remember that these points are for your whole team to share from. The **Mining points obtained from this process is only 75% of the amount an equivalent amount of ores would provide.** - The smelter works nearly identically, however the smelter produces metallic materials out of boulders instead. - Once a boulder has had all of it's materials extracted, it's broken down and deleted from the line. Otherwise, the boulder is spat out for the next machine to process it (either the refinery or smelter). - Once there's no minerals left in a boulder of any type, the refinery or smelter will break the boulder down. - Boulders **do not stack onto tiles with each other**, so they'll block each other when pulled or when moving on a conveyor belt. Boulders can also be processed by hand. Using a mining tool on a boulder with right click will allow you to break down a boulder into it's composite ores, but limits you to a maximum of 10 ore per boulder, where the full amount can be extracted using the proper processing machines. Also, processing by hand does deal small amounts of stamina damage over time, do breaking a full large boulder can be particularly taxing. Additional Boulder Processing Machines can be built, with the BRM board being obtained from the Protolathe, while the Smelter and Refinery boards being obtainable from the Autolathe instead. A _boulder processing beacon_ can also be obtained from the mining points vendor as a reward to assist with boulder processing. Boulder processing beacons can be used to spawn in a new BRM, refinery, and smelter on the tile the user is standing on, however **you'll still need to link them to the ORM**! All three machines can be upgraded with Stock Parts, allowing for **more boulders to be processed at a time**. It does not, however, increase the amount of minerals received from boulders, or points earned. ### Mining Borg Tweaks Mining borgs have been given some minor adjustments to compensate for the changes to mining. Their mineral scanner, which now has an active component to gameplay, is now a module as opposed to built into the mob. This module allows for the same ability to discover and start waves of monsters to fight. Mining modules will find that their PKA now has a total of 90% mod capacity as compared to the 80% they had before, to allow for more robust defense of ore vents. In addition, all borgs and AIs can interact with the BRM for boulder collection. ### Mining Mech Tweaks Mining Mechs have had their utility tweaked as a result of these changes as well. Mineral scanners to be used on mining mechs now have a larger radius by comparison to their handheld cousins. Similarly, it now has an active scanning button, which will actively discovery nearby ore vents. To begin wave defense, you will need to hop out and scan a second time however, so that you can properly accept the risks of drawing a horde of bloodthirsty wildlife towards you and your companions. Mechs can also manually process boulders, similar to mining tools using their drill. ### Golem Tweaks Golems, being more gentle and less aggressive than humans, while being made out of LITERAL ROCKS, have a greater need to secure access to ores and minerals to eat. As such, they have adapted to be able to do two new things: - Golems may now right click ore vents to be able to manually haul a boulder out of the vent. This costs a hefty amount of stamina, but it allows for golems to avoid combat during regular gameplay. - Golems may now left click a boulder with an open hand in order to manually process a boulder like a pickaxe. While not faster, it is consistent and prevents golems from starving if they have access to a vent, but no ores, somehow. ### Gulag Tweaks The labor camp, being a camp for rehabilitation and ~~excessive manual labor~~ has been tweaked. Boulders now replace the random minerals located on their island, and to acquire their prizes inside, much be excavated and then broken out of the rock. Now YOU TOO can excavate minerals and become a true mineral hero by working your way to freedom. ### Mining Point Changes As a result of fewer mining points being available across the map due to the new ore spawning mechanics, and the shift in how and when ores will be coming in, almost every progress based mining point cost has been reduced by around 10-20%. Many numbers are still subject to change at present, but the idea is that core progress unlocks should be made a bit more available earlier in the round before players can start to solo or duo larger or more difficult ore vents, after which they'll be rolling in ores. ### Rarities Every once in awhile, an unusual boulder will get hauled up from the mineral rich depths of lavaland. These **Artifact boulders** can occasionally produce rare items, but for now they've mostly just been pulling up **Strange objects** for science. Nanotrasen Natural Sciences department will reward you extra points to be collected by boulder processing machines for successfully extracting one. In the future, this opens up a passive reward space that mining can reward to the station, like providing cytology DNA samples, ancient seeds, or other artifacts. ### Misc notes - Boulders can be stored in all varieties of ore boxes (ground, mech) should you choose, however as mentioned it's best to leave them where they spawn and teleport them to the station for convenience. - Maps that are not subject to cave generation will find that they are largely untouched in terms of mineral balance. - Future or existing ruins can now be tweaked to have a mineral balance cost, as the ore vent ruin does. This will allow us to spawn in more interesting ruins for pre-made combat challenges. - There are unique ore vents that spawn across the map, that will summon a boss mob relevant to that map. If the boss mob is defeated, that vent will spawn large boulders pulling from every possible ore type that can spawn. Not for the faint of heart! - Similarly, the number of ore vents and mineral budget is now adjustable in the cave generation procs, so maps may spawn with more or less ore vents as desired for balance. - Artifact boulders opens up a LOT of room for possible future content like archaeology, xenoarch, artisci, and other design spaces! - Megafauna STILL SPAWN ON THE MAP. They just happen to spawn in addition to boss ore vents. - **I'll add more to this as I get asked questions and remember things, this is a huge PR and I'm confident I've missed at least something** ## Why It's Good For The Game I outlined a lot of this in #78040, so I'll try and keep this relatively snappy this time, while noting that I've made some concessions to make the whole system a lot more playable while not trying to break out design decisions that are at the end of the day, better for the game and the overall resource balance in round. Minerals are a very poorly balanced system, and have been since their inception many years ago. We heavily rely on mineral balance in round, and yet we've really only balanced it by introducing so much supply that there's no equivalent exchange for materials that doesn't just heavily flood the exchanged material. For example, items printed from materials that are otherwise considered "rare" on master exist in such quantities and they'll never practically run out in our allotted 90 minute time slot design. This PR adjusts how ores spawn to a point where we can minimize the amount of ores that need to exist on the map for mining to be able to progress, while still providing enough resources for the station that it covers the needs of the station adequately. Miners will need to be more strategic about what resources they've collected, and be able to make decisions about which vents are worth the risk of attempting to fight, how to prepare for a wave defense, and when to head back up for upgrades, while finally giving them at least some kind of incentive to work together and use different equipment. Resonators make cleaning up the caves around vent easy, sandbags set up easy defenses for your vent, mechs can serve as a wider range radar while mining, all while still providing a new gameplay loop to mining. By limiting the amount of ores that can enter the round from the massive, massive amounts that were coming into the round beforehand (see #78346 ), we can make ore processing more meaningful by adding more gameplay to the processing of minerals. I have some plans for that, however this PR already got bloated really REALLY badly due to scope creep and the number of intersecting systems that rammed into each other to make this PR possible. So that'll be next. Plus, as I've mentioned, we open up places for ore processing to find fossils, relics, and other things that can implemented down the line. Overall, I don't expect this PR to save or kill ore balance, but we gain a LOT more control over it through the use of our mining defines attached to this PR, and at the end of the day, that's a great place to start off of. ## Changelog 🆑 add: Added ore vents. Scanning them with mining scanners shows what minerals they contain. Scan again to fight off a horde of beasts as your drone assistant excavates the vent, so the ore vent will produce mineral boulders! bal: Ores that spawn in walls now spawn based on their proximity to ore vents, with their chance to spawn and their minerals contained scaling from low to high. add: Added the BRM, Refinery, and Smelter. These pieces of equipment are used to process ore boulders into minerals for the station. Stock Part upgrades allow more boulders to be processed at one time. They collect mining points as well, to be redeemed with an ID card swipe. add: Boulders are teleported to the station via the BRM if left untouched. Boulders can also be cracked open for a reduced amount of ore using pickaxes or golems hands. add: All stations come equipt with a pre-excavated ore vent, which produces a basic supply of iron and glass only. Scan other vents for your critical resources! add: Look there's a shit ton of changes on mining, for more detail check out the Pull Request: https://github.com/tgstation/tgstation/pull/78524. sound: New sounds and noises for your high octane factorio-like gameplay! image: All new boulder sprites for the new minerals and rocks added to the mining gameplay loop, as well as mining machines! image: Overlays appear over vents when scanned to let you know their contents at a glance when actively scanned with any mining scanners. /🆑 --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
aa9caef0ed |
Fishing hook and reel line tweaks (also qol for the fish bounties) (#80599)
## About The Pull Request This PR includes a series of small changes and additions to hooks and reel lines, as well as the aforementioned bounties. My objective here is to make the (base) hook and reel line feel more useful. Ditto with a few other things. Here's the list of changes: - Almost all fishing rods come with a hook and reel line pre-installed. The rod from the fishing toolbox comes with separate hook and reel line. - Without a hook, you cannot fish. Without a reel line, the cast range is reduced (from 5 to 3). - Fishing with a reel line installed provides a mild boon to completion speed by default. - The sinewy reel line (craftable from lavaland mobs) can now be used to fish on lava / liquid plasma, but it's a bit stiff and gives a mild malus to completion speed. - Unlike other hooks, the rescue and jawed hooks now allow you to cast a line and reel in living mobs too, not only items. They even get a status alert they can click to un-snag themselves, or move away far enough to achieve the same effect. - Master fishing rod buffed. It now comes with a flexible reel line and weighted hook pre-installed, and can be cast further than other rods. - On top of that, the jawed hook will slow down living mobs snagged by it and is a bit harder to remove. - when casting a line, it will now show the icon of the current hook as projectile, not a generic one. - Reeling now correctly checks movement resistance and anchorage. - Reeling an object (or a mob) now plays a sound. Ditto for installing/removing slotted items. - A few balloon alert feedbacks. - Minor code improvements. - The jawed hook should look a smidge sharper. - reel lines are now small items. ## Why It's Good For The Game The base hook and reel line didn't do anything begin with, and you would do just fine without them. In the end it's just a bit unintuitive for them not to be a requirement. Beside that, it makes sense for the rescue hook to be able to snag mobs, so they may as well be used to drag people out of lava or liquid plasma. As for the jawed hook, it always felt to me a bit underwhelming and a bit of a filler I had cooked up on the moment. It really could have some 'tactical' utility in virtue of being one of those niche black market items. ## Changelog 🆑 add: Most fishing rods come with a hook and line preinstalled. Fishing toolboxes come with separate reel and lines as usual. balance: Fishing hooks are now required to fish. balance: Without a reel line, the range of fishing rods is reduced by two tiles. Conversely, having one installed gives a mild buff to the minigame completion speed. balance: The craftable sinewy reel line can now be used to fish on lava or liquid plasma, but it's a bit harder to use. balance: The rare-to-find-in-maintenance master fishing rod now comes with a flexible line and weighted hook preinstalled, and has better range than other rods. balance: Fishing reel lines are now small enough to fit pockets. add: The rescue and jawed hook can now snag and reel in mobs, not only items. The jawed hook also slows down when applied, a la beartrap. qol: Fish bounties now accept filled (stasis) fish cases. qol: Several balloon alerts for fishing rod interactions. fix: Reeling in items (and mobs) now respects movement resistance and anchorage. fix: Fixed the fishing rod equipment UI being too small to fit its components. sound: Reeling in something now plays a sound. /🆑 |
||
|
|
fc0a1f4068 |
Removes timeout_mod arg from add_mood_effect (#80964)
## About The Pull Request Partial Revert of https://github.com/tgstation/tgstation/pull/80800 Assuming every num passed in the parameters of `add_mood_effect` is a `timeout_mod` is incorrect, because there can be mood events that take a numeric arg which is not meant to be multiplied against the timeout. This leads to the same issue as multiplying it with strings essentially (in one case, shown below, this results in a negative duration of a timer).   Plus having a keyword arg that may or may not actually be what the keyword arg claims to be is really confusing and bad. Instead here's what I propose: passing in an instantiated mood datum itself, which has been modified, and copying the timeout from it before discarding it. It is not as clean as I'd prefer either, but at least it's logically sound and the intent is clear, and it's the best I can think of short of a major refactor of the entire system for this one small thing which is only being used by food quality.  ## Why It's Good For The Game Clearer, less smelly code. ## Changelog 🆑 code: removed the timeout_mod arg from add_mood_event, which was only used for one thing and causes more issues than it's worth /🆑 |
||
|
|
27386bffe8 |
fixes a bunch of moodlets potentially lasting forever (less band-aidy) (#80800)
## About The Pull Request In a previous PR (https://github.com/tgstation/tgstation/pull/79661), I noted that a lot of moodlets tended to have their timeouts break because it was passing their names and whatnot as a parameter, that gets fed into the timeout modifier parameter, causing the timeout multiplier to break, because BYOND type-agnosticism means that it can multiply a number (timeout_mod) by text (a name or some other object), resulting in 0 - which makes a moodlet permanent. This is probably not intended. This fixes that in two ways: - Adding a `1` to potentially applicable moodlets (searched for with a regex of `.add_mood_event(.*, .*,)`) just to make sure the timeout doesn't get multiplied out weirdly. - Making the add_mood_event thing CRASH() if the timeout_mod is bad. If someone else wants to come up with a solution better than this, please do. ## Why It's Good For The Game Maybe having your arm permanently fall asleep after getting it reattached sucks, moodlet-wise. (Being stuck with permanent positive/negative moodlets is probably not intended.) ## Changelog 🆑 fix: Moodlets with parameters/effects e.g. limb reattachment moodlets should probably disappear more appropriately. /🆑 --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> |
||
|
|
ca8c742882 |
Correctly offsets bayonets on pipeguns (#80805)
## About The Pull Request Changes the offset for pipegun bayonets to align with the gun properly. Fixes #79607 ## Why It's Good For The Game Floating bayonets are ugly ## Changelog 🆑 fix: Pipeguns no longer have floating bayonets /🆑 |
||
|
|
d05ca07891 |
Stop misfiring from re-iterating and looping through every munition in the mag like that doesn't make much sense. (#80796)
## About The Pull Request So, the misfiring proc (`blow_up`) can trigger even when the shot is aimed at oneself, which is what the proc does. It also tries to loop through every loaded projetile in the magazine when you only need the chambered round, which is the one we're going to fire anyway. It's... just plain dumb and can freeze your game for a fair bit. ## Why It's Good For The Game  ## Changelog 🆑 fix: Fixed misfiring for firearms like tinkered detective revolvers. /🆑 |
||
|
|
2356262a57 |
fixes the eZ-13 MK2 heavy pulse rifle (#80791)
## About The Pull Request i just added a return idk what the issue was https://github.com/tgstation/tgstation/assets/70376633/935f7869-d78c-4392-a7e5-bcfd780ddb3b ## Why It's Good For The Game fixes #80170 ## Changelog 🆑 fix: the eZ-13 MK2 heavy pulse rifle does damage again /🆑 |
||
|
|
8e75c930c1 |
Fixes every instance of 'kenetic' in the codebase (#80782)
## About The Pull Request There were several instances of this being misspelled as 'kenetic' rather than kinetic. This fixes that. ## Why It's Good For The Game oughe ## Changelog 🆑 spellcheck: Corrects every misspelled 'kenetic' in the codebase. /🆑 |
||
|
|
566c353d63 |
fix a hard delete in basic statues (#80696)
## About The Pull Request if the creator of the statue got deleted, it might cause a hard delete. also i noticed this variable wasnt being used so i removed it and instead directly added the ref of the creator to the mob's faction list. also i noticed the proc that was setting it had alot of nested typechecks so i split it into child procs ## Why It's Good For The Game fixes a hard delete ## Changelog not player facing |
||
|
|
908d6f1a2b |
Better Ghost Selection (#80283)
## About The Pull Request Revived my old PR https://github.com/tgstation/tgstation/pull/68901 Replaces the annoying tgui alert popup "Do you want to be X? | Yes | No | Never for this round" that is hard to read and steals window focus, with a nice clean alert in the top right that counts down. If it's the same event/mob they stack with 2x, 3x, etc. It also shows how many candidates/ghosts are signed up. The poll alerts have screentips too, they countdown and show if you're signed up, how many people are signed up, if you chose "never for this round" (which is cancelable) ## Why It's Good For The Game  Way easier to see what role is available, you get a nice pic of the role and get it's name in big text, you can cancel "never for this round", and you can cancel signing up for a role before the timer is up ## Changelog 🆑 refactor: Ghost roles now offer ghosts a clickable poll button. Ghosts can select a role, deselect it, alt-click it for "Never For This Round", can cancel "Never", can see the countdown, and can see how many other people are signed up for the role poll. /🆑 |
||
|
|
f03084c1ca |
FOV is Dead (Long Live FOV) (#80062)
## About The Pull Request FOV as it is currently implemented is incompatible* with wallening. I'm doin wallening, so we gotta redo things here. The issue is the masking of mobs. Wallening relies on sidemap (layering based off physical position), which only works on things on the same plane (because planes are basically sheets we render down onto) So rather then masking mobs, let's reuse the masking idea from old fov, and use it to cut out a bit of the game render plane, and blur/over-saturate the bit that's masked out. My hope is this makes things visible in light, but not as much in darkness, alongside making more vivid shit more easily seen (just like real life) Here's some videos, what follows after is the commits I care about (since I had to rip a bunch of planes to nothing, so the files changed tab might be a bit of a mess) Oh also I had to remove the darkness pref since the darkness is doing a lot of the heavy lifting now. I'm sorry. Edit: NEW FOV SPRITES! Thanks dongle your aviator glasses will guide us to a better future. https://github.com/tgstation/tgstation/assets/58055496/afa9eeb8-8b7b-4364-b0c0-7ac8070b5609 https://github.com/tgstation/tgstation/assets/58055496/0eff040c-8bf1-47e4-a4f3-dac56fb2ccc8 ## Commits I Care About [Implements something like fov, but without the planes as layers hell]( |
||
|
|
8d77b1be89 |
Balance changes to swords, energy shields and modsuit shields. (#80072)
## About The Pull Request ### Sword Weaponry Mundane sword weapons of all sorts do not block ``LEAP_ATTACK`` attacks whatsoever. These attacks include tackles, xeno tackles and bodythrows. Energy swords and double energy swords only gain 25% block probability against such attacks. ### Double Energy Sword No longer grants outright energy projectile immunity while employed. Instead, it just has a high probability of reflecting (the typical 75% to block any other attack). So, very solid defense against energy projectiles, but not immunity. Against non-reflectable projectiles, like ballistics or nanite bullets, the desword only has 50% block, similar to an energy sword. To compensate for the loss of defensive power, we'll make it all the more rewarding for getting on top of someone with the sword by giving it 40 force while active. And also it costs 13 TC. ### Combat Energy Shield This also lost outright energy projectile immunity, but gained the standard blocking power of shields on top of the ability to reflect energy projectiles when they block them. This significantly increases the shields potential effectiveness while no longer pigeonholing the shield to only energy weapons. (This makes them exceptionally good against tackles and body throws, by the by). Deathsquads still have the perfect deflection energy shield so that they can continue to spam pulse shots with impunity. ### MODsuit Shield Module Only has one charge instead of three, but it recharges in half the time. This is no longer such a perfect defense, and does somewhat need you to be thinking about how you're utilizing the shield rather than not thinking about defense at all by barreling forward under three potential hits worth of protection. Also much cheaper, at almost half price of 8 TC. Because of how cheap it is (and how much it still is necessary to keep you alive), I've put it into the core equipment box (which brings the price up to 22 TC. As a reminder, this is not meant to be at any discount, and is more aimed towards teaching newer players which items contribute towards success. If you don't want all the times within, don't buy this box, just buy what you want separately.) ## Why It's Good For The Game This is a doozy of an explanation, I hope you're ready for it under the spoiler. <details> With my tackling and bodythrow prs, numerous people expressed exasperation at the fact that these two tools may have been keeping some outlier antagonist gear from becoming too easy to steamroll with if you already knew what you were doing. My intent was to create consistent rules and behaviours that both A) did not rely on bugs to keep the balance of power from tipping one way or the other, and B) was at least consistent or had consistent rules established. This PR is tackling overperforming gear combinations for already competent nukies that may have, over time, crept out of control, and applying some consistency to the rules around similar equipment. AND also deals with quite possibly the most braindead element of game design we've tolerated for about a decade, and half a decade after it was necessary to maintain that decision. Part of the culprit of this issue is that, specifically in regards to nukies, crew can't use the vast majority of their weapons effectively against them. This largely is because this antagonist can gain immunities to those types of equipment. And that is rapidly increasing as we move closer towards outright ballistic removal. I don't think the game is made healthier by everyone on the station having to fight armed mercenaries with spears, and doesn't make much thematic sense either. More so, most greener players probably just don't know this is how it works, and so surprise Pikachu when their lasers bounce off nukies harmlessly. (This bit reminds me of the problem of new players using disablers against simple mobs) But of course, that isn't the only part of the problem. The other half is due to being able to be layered on a much more broad defensive tool in the form of the MODsuit Shield Module, whose three charges could render the mindful nukie near untouchable if they're pairing it with some other layered defense, such as a desword. Notice that this doesn't really address armor. The culprit is negation, and not mitigation, and we should be sparing in how easily we hand out outright effect negation simply because it isn't super obvious to a new player why it happened, and how to resolve it. At the very least, we should look to find ways to add options for players to overcome these problems. Especially with teamwork. Energy projectile immunity made sense while there floated around an energy projectile that ostensibly would down you in a single shot. Nukies ALSO had projectile weapons that worked much the same (c-20r stun bullets, taser shot bulldogs, etc.), so it was predominantly tit-for-tat. These immunity granting equipment pieces forced crew members to get shotguns and ballistic guns to fight these dangers; something more available at the time. We've exercised large bits and pieces of this from the game a long time ago, but we still have some remnants convinced we're still in a taser-rich, ballistic available environment. We need to move the games languishing tools into the modern era and re-established their place in the game. Namely, the double-energy sword and the combat energy shield are almost entirely unchanged besides refactors for the last decade or so, even while the game around them have changed. They've been a continuous sore point for me in all my time developing and a constant nagging issue. I want to deal with it now. MODsuit Shield Module is just kind of really good and only made stronger the more defenses you have. It's good to have a defense like this, but I think it is too brain dead. With only one charge, it will save you from a lost joust here and there, but it won't make it as simple as running right at every problem you encounter and eating a volley of attacks while you kill someone with impunity. **With regards to traitors**, since they also get double-energy swords; I'm open to suggestions if this is hitting them far too hard, but I'm not terribly concerned using this weapon for a few reasons. **Firstly**, I think their presence amongst the crew make it a much better weapon for tots than nukies (in isolation) simply because they can find ways to exploit it via tools they gather from the station. It is a force multiplier. Traitors also have a much bigger element of surprise usually. **Secondly**, round-start traitors typically grow to be a bit stronger over time, but I don't foresee many waiting to pay for the double-energy sword unless they're already flush with TC. So if a traitor is in a position after they've unlocked access to it to buy one of these, they are probably doing pretty okay for themselves. </details> ### TL;DR Defense stacking and attack immunities are not particularly healthy things to both design around, or experience in-game. They are kind of just relics of the past made only sorer once I ripped off a few bandaids. This is a source of a number of symptomatic issues in the game, so let's fix that and make it easier on all of us going forward. Much of the way these things worked operated on extremely outdated design considerations. It doesn't make sense for them to work like this today, and only makes things harder by keeping the status quo. ## Changelog 🆑 balance: Mundane sword-like and medieval weapons are not able to block tackles, xenomorph tackles and body throws. balance: The double-energy sword and energy sword have trouble blocking physical projectiles, body throws and tackles. balance: The double-energy sword also no longer has guaranteed energy projectile deflection; only doing so on a successful block (75% chance to block). balance: But it does have 40 force now, so it is more lethal a weapon. Traitors can purchase the sword for only 13 TC (down from 16 TC). balance: The combat energy shield (The one you hold) now functions as a normal shield (it used to only protect you against energy projectiles and nothing else). It loses guaranteed energy projectile deflection, but still reflects the projectile so on a block. feature: Death commandos continue to have their energy shields deflect all incoming energy projectiles. Because who cares about deathsquads being balanced? balance: The MODsuit shield module only has one charge, but recharges every 10 seconds. It also costs 8 TC (down from 15). It is also now in the Core Gear beginner box (bringing the total price up to 22 TC). /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
16bdcf409c |
"Security Implant" rework, prisoner management console updates (#79882)
## About The Pull Request For the vernacular purposes of the following PR body -- "Security Implant" refers to the existing subset of implants given, by security, to captured prisoners and such as a punitive, controlling measure. This includes the chemical, tracking, and maybe exile implants. This revamps the functionality of how "security" implants are displayed on huds, prisoner management console implant controls/readouts, and their instrumentality. It was also, ultimately, an attempt at nerfing the tracking implant that spiralled far out of control. Rather than only displaying chemical on the right and tracking on the left, all implants with the "security implant" flag will be trackable on SecHuds. A maximum of two can be implanted at once. This is both due to technical limitations, but also conveniently provides security a limit to consider when choosing implants. Implants now also occupy their HUD slot based on the order they were implanted in, rather than always occupying the same spot. Neat!  From two (three if you count the exile implant), there are now five security implants. _The tracker implant has been split into two of these implants._ <details> <summary>Summary of the implants, functions, changes:</summary> <br> - **Tracker (Red)** -- No longer grants teleporter beacon. Tracking radius has been increased from 20 to 35 tiles. The Prisoner Management Console will now list the area the prisoner is occupying as well. Disables after the implantee is dead for 10 minutes. - **Chemical (Blue)** -- No mechanical changes. The implant pad readout has been modified slightly. - **Exile (Green)** -- In addition to past functionality, station shuttle controls (public, mining, etc.) will be unresponsive for the implantee. Flimsy, but more effective than a stern warning not to come back from lavaland. - **Beacon (Yellow)** -- Implantee becomes a teleporter beacon. The prisoner console will report if their currently occupied area is hazardous or not, so half of the security team doesn't blindly teleport into space or lava. Disables after the implantee is dead for 10 minutes. Available from Cargo. - **Teleport Blocker (Deep Blue, not shown)** -- Prevents the implantee from being teleported. Ever wanted to keep a wizard or cultist in a cell? This is where you can start. Available from Cargo, expensive and scarce. Each of the implants has some application that would benefit security if used on a captured criminal. Their usefulness may overlap in some places, but the overall range of control these implants give security is broadened. </details> The implant control console has also been given a small facelift. Certain implants provide more useful readouts that can help officers locate, control, or capture an implantee, rewarding cooperation between officers. It has also been totally converted into TGUI by @MrMelbert. Kickass! Also, You can now remotely destroy implants, either to relieve criminals from their punishment or to make room for a different implant. Wardens should keep hold of their ID and remember to log out, since a motivated convict could use it to shed their implants!  Everything made in this PR _should_ be scaleable enough to allow for new security implant types to be implemented with relative ease. The teleport-blocker implant was a last minute attempt to prove it to myself. I had a few more ideas for implants in my head, but figured this PR was already getting big and ugly enough. That is all for another day. I truly apologize if there's anything I've missed in here. I did a lot of this over a long period of time and kind of just... sat on it for a while. If there's any confusing our unexplained changes, feel free to point them out and I'll try to give an explanation. ## Why It's Good For The Game The goal of this PR is to give a bit more depth to security's armory implants. The intent is to present a choice in what implants are given (rather than just tracker and maybe chem if you're feeling spiteful), and to make them more useful as punitive/monitoring tools. The tracker implant needed a nerf (and probably still does regardless of this PR's success). It's never used for tracking since the teleporter beacon is much more direct (+ gives a virtually free attack opportunity), and the tracking range was incredibly subpar. I'd rather not take toys away from security, but having the best option not be roundstart gear feels like a fair compromise. Warden content. Wardens have more gear to budget for and use at their own (or the HOSes) discretion. The changes to the prisoner console allow them to coordinate with officers to get good value out of the implants they've chosen for an implantee. Gives antagonists an alternate way to get de-implanted, without external help, that can only be granted at the fault of security. Wardens who dish out implants must keep an eye on the people carrying them! ## Changelog 🆑 Rhials, MrMelbert add: The Tracker implant has had its teleport beacon functionality migrated to the new (cargo accessible) Beacon implant. add: Teleport Blocker security implant, that prevents the implantee from teleporting by any means. Purchasable from cargo. add: Security implants may now be harmlessly self-destructed at the Prisoner Management Console. balance: The Tracker implant tracking radius has increased from 20 to 35 tiles. The Prisoner Management Console will track and display the area the implantee is in as well. balance: The exile implant now prevents implantees from operating shuttle controls. code: Various code improvements and removal of unused vars in the Prisoner Management Console code: The HUD slots for chem/tracking implants have been converted to display any implant with the IMPLANT_TYPE_SECURITY flag and an associated sprite. spellcheck: Modifies various implant pad readouts, removing false information and rewriting some sections. /🆑 --------- Co-authored-by: MrMelbert <kmelbert4@gmail.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
71a1fee2f1 |
Explodes device.dmi (#80025)
## About The Pull Request I woke up today and thought 'what would be easy thing to do today so I can say I've done something?'. Then I remembered I saw several gangtool usages the time I split radio up, and I could remedy those. 7 hours later, device.dmi is split in a folder of its own, and I've also given unique sprites to door remotes and landing desginators. ## Why It's Good For The Game The device.dmi was kind of a mess. ## Changelog 🆑 /🆑 |
||
|
|
1e76fd70b4 |
Attack chain refactoring: Broadening tool_act into item_interact, moving some item interactions to... atom/item_interact / item/interact_with_atom (#79968)
## About The Pull Request Implements half of this (with some minor changes):  The ultimate goal of this is to split our attack chain in two: - One for non-combat item interactions - Health analyzer scanning - using tools on stuff - surgery - Niche other interactions - One for combat attacking - Item hit thing, item deal damage. - Special effects on attack would go here. This PR begins this by broadining tool act into item interact. Item interact is a catch-all proc ran at the beginning of attack chain, before `pre_attack` and such, that handles the first part of the chain. This allows us to easily catch item interaction and cancel the attack part of the chain by using deliberate bitflag return values, rather than `TRUE` / `FALSE`*. *Because right now, `TRUE` = `cancel attack`, no matter what, which is unclear to people. Instead of moving as much as possible to the new proc in this PR, I started by doing some easy, obvious things. More things can be moved in the future, or technically they don't even need to move in a lot of cases. ## Changelog 🆑 Melbert refactor: Refactored some methods of items interacting with other objects or mobs, such as surgery and health analzyers. Report if anything seems wrong /🆑 |
||
|
|
0ba166f8b9 |
Fixes issues on guns with BOLT_TYPE_LOCKING (#80154)
## About The Pull Request Bolt-actions no longer open their bolt aftering firing their last shot. All BOLT_TYPE_LOCKING weapons, including semi automatics, no longer open their bolt after dryfiring Fixes #75452 Fixes #79128 ## Why It's Good For The Game Fixes unintended and confusing gun behavior ## Changelog 🆑 fix: Bolt action rifles no longer open their bolt when firing their last bullet. /🆑 --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
5f305ca5f7 |
Removes an exploit that can farm Russian revolver moodlets, adds Russian revolvers to the contraband section of games vendors (#80159)
## About The Pull Request Fixes https://github.com/tgstation/tgstation/issues/80158 by making curses block you from playing Russian roulette regardless of whether or not there's a live bullet in your Russian revolver's chamber. A Russian revolver has been added to the contraband section of each Good Clean Fun vendor. ## Why It's Good For The Game The bug is incredibly funny, but ~~I want GBP~~ probably should be fixed. There's no actual way to get (more) Russian revolvers outside of the mapstart ones, and that can be a bit stifling to gimmicks that involve them. And Russian roulette IS a game. Like the roundstart ones, you could unload these vendor revolvers for .357 bullets, but you can already just print .357 bullets from a hacked autolathe directly, so I don't think that's an issue. ## Changelog 🆑 ATHATH fix: Spacemen can no longer use curses to cheat at Russian roulette by selectively blocking attempts to shoot themselves. add: A Russian revolver has been added to the contraband section of each Good Clean Fun vendor. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
274eb2a52e |
Removes Clone Damage (#80109)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request Does what it says on the tin. We don't have any "special" sources of clone damage left in the game, most of them are rather trivial so I bunched them together into this PR. Notable things removed: - Clonexadone, because its entire thing was centered around clone damage - Decloner gun, it's also centered around cloning damage, I couldn't think of a replacement mechanic and nobody uses it anyways - Everything else already dealt clone damage as a side (rainbow knife deals a random damage type for example), so these sources were removed <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game Consider the four sources of normal damage that you can get: Brute, Burn, Toxins and Oxygen. These four horsemen of the apocalypse are very well put together and it's no surprise that they are in the game, as you can fit any way of damaging a mob into them. Getting beaten to death by a security officer? Brute damage. Running around on fire? Burn damage. Poisoned or irradiated? Toxin damage. Suffocating in space? Brute, burn and oxygen damage. Technically there's also stamina damage but that's its own ballpark and it also makes sense why we have a damage number for it. Picture this now: We have this cool mechanic called "clone pods" where you can magically revive dead people with absolute ease. We don't want it to be for free though, it comes at a cost. This cost is clone damage, and it serves to restrain people from abusing cloning. Fast forward time a bit and cloning is now removed from the game. What stays with us is a damage number that is intrinsically tied to the context of a removed feature. It was a good idea that we had it for that feature at the time, but now it just sits there. It's the odd one out from all the other damage types. You can easily explain why your blade dealt brute damage, but how are you going to fit clone damage into any context without also becoming extremely specific? My point is: **clone damage is conceptually a flawed mechanic because it is too specific**. That is the major issue why no one uses it, and why that makes it unworthy of being a damage stat. Don't take my word for it though, because a while ago we only had a handful of sources for this damage type in the game. And in most of the rounds where you saw this damage, it came from only one department. It's not worthwhile to keep it around as a damage number. People also didn't know what to do with this damage type, so we currently have two ways of healing clone damage: Cryotubes as a roundstart way of healing clone damage and Rezadone, which instantly sets your clone damage to 0 on the first tick. As a medical doctor, when was the last time you saw someone come in with clone damage and thought to yourself, "Oh, this person has clone damage, I cannot wait to heal them!" ? Now we have replacements for these clone damage sources. Slimes? Slime status effect that deals brute instead of clone. Cosmic heretics? Random organ damage, because their mechanics are already pretty fleshed out. Decloning virus? The virus operated as a "ticking timebomb" which used cloning damage as the timer, so it has been reworked to not use clone damage. What remains after all this is now a basically unused damage type. Every specific situation that used clone damage is now relying on another damage type. Now it's time to put clone damage to rest once and for all. Sure, you can technically add some form of cellular degradation in the future, but it shouldn't be a damage number. The idea of your cells being degraded is a cool concept, don't get me wrong, but make it a status effect or maybe even a wound for that matter. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 del: Removed clone damage. del: Removed the decloner gun. del: Removed clonexadone. /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> |
||
|
|
7f7688b60a |
Demotes the "electrical conductivity" flag from flags_1 to obj_flags (#80033)
## About The Pull Request
Code to handle this flag only ever existed on the `/obj` sublevel, so
there's no need for it to be on the `/atom` level `flags_1`. There was
probably a point in time in which mobs or turfs conducted electricity
but there's zero code for it anymore so we truly just live in a society
now.
## Why It's Good For The Game
Frees up a slot on `flags_1` (which is really nice actually), proper
scoping of certain bitflag stuff, etc.
## Changelog
Not relevant to players.
I may have screwed something up, will be doing a few passes on this
myself to ensure all the search and replaces went alright but we should
be good™️
|
||
|
|
39d9c45b4a |
Meat Hook Rework (Accidental Features) (#80002)
## About The Pull Request Or, how I tried to kill `/datum/forced_movement` but got absolutely clonged. Actually, I did kill `/datum/forced_movement`. It was only used in one spot so I just went ahead and cooked it into a special utility datum that should only be used in one spot. We can optimize the code later or something, but I like the way it is right now (pretty much status quo without the potential of someone using a depreciated framework). Alright, there were also like 3 `TODO`s (4 if you count the move loop comment (which is ehhhh)). I naively tried to tackle them a very hard way, but then I just realized I could use the fancy new datum I cooked up and wow they're all solved now. The hook looks so fucking good now. * The code is overall more streamlined, with all of the post-projectile work being handled by a special datum (I wanted it to be handled by the hook but the timings were all based on SSFastprocess so datum it is). Forced movement is killed but we just salvaged whatever we needed from it. * More traits to ensure we don't cheese in a way we're not supposed to * A very sexy chain will spawn when you drag your kill in (this wasn't there before but I fixeded it :3) * The firer will actually get grounded when they try and shoot the chain out. They get grounded for 0.25 seconds unless they hit something. I don't know how the timing is but I think it's fair. * We also add a unique suicide act, because I noticed we did the "magical" one previously, which big-league sucked. * More traits to ensure less cheese! I like how nice it is now. ## Why It's Good For The Game The meat hook really makes you _feel_ like Roadhog from Overwatch. Resolves a bunch of old TODOs while getting rid of a completely obsolete framework in a really neat way. I don't typically like mixing balances and refactors but these TODOs were getting crusty man i just wanted to get them out of the way ## Changelog 🆑 balance: The Meat Hook will now "ground" you whenever you fire it out at someone. You get a very small immobilization every time you fire, which "upgrades" to a full immobilization whenever you actually hit an atom and start to drag it in. fix: A chain should now show up as you drag in something with the meat hooks. fix: Meat hooks should no longer play the "magical gun" suicide if you were to use it, but instead do their own unique thing. /🆑 |
||
|
|
837ddf7d00 |
Standing on structures such as crates, tables and bed will now look like it. (#79797)
## About The Pull Request From the creator of 'cosmetic' elements such as footstep_override and immerse... I've made an element called elevation that nudges mobs a few pixels up while standing on things like tables, crates and beds. Screenshots of many clones of the same character standing on different objects:  ## Why It's Good For The Game It makes it look like the mob is actually standing on an elevated surface. ## Changelog 🆑 add: Standing on structures such as crates, tables and bed will now look like it. /🆑 |
||
|
|
ba2b6487c6 |
Converts russian revolvers use of initial to the new :: operator (#79948)
What the title says... 515 is cool this is a cool operator |
||
|
|
08f82d5250 |
(NO GBP) Revert "Stops rebar crossbow crashing dreamseeker when fired at point blank. (NO GBP) (#79803)" (#79885)
## About The Pull Request #79803 was opened *after* I had opened my own PR (#79587) that more directly fixed the problem the former was opened to address. It got merged before mine did. ## Why It's Good For The Game It's safe to take off the metaphorical bandaid that the first mentioned PR was. ## Changelog 🆑 fix: Rebar crossbow bolts are now reuseable again, without risking crashing clients when fired at point-blank range. /🆑 |
||
|
|
376781879c |
Different pen types have unique behavior when used in foam darts. (#79587)
## About The Pull Request This PR makes the following changes: - Refactors inserting items into foam darts into a component on items that can be inserted into darts - Adds the aforementioned component to pens - Provides an inspection tip for how to modify a foam dart - Gives different pen types specific behavior when used in a foam dart Pens typically give a foam dart 5 brute and 50% embed chance (affected by falloff). The following types of pens give the specified properties (usually directly derived from the pen's stats and additional functions): - Red pen (and four-color pen set to red): Slightly faster dart - Captain's fountain pen: Slightly faster dart, and 75% base embed chance - Sleepypen: Tries to inject its reagents into the hit mob, but doesn't penetrate thick clothing like syringe guns do - Energy Dagger: 35 brute, 100% base embed chance, and slightly faster dart - Survival Pen: Mines rocks on impact - Fine Tip Pen (if someone somehow manages to get one): 100 bare wound bonus and 9000 demolition modifier ## Why It's Good For The Game Expands the emergent gameplay possibilities of using pens in foam darts. While there are balance risks involved with traitors being able to buy the equivalent of reusable 45u syringe shots and 35 brute bullets, you are not likely to get your pen back once it hits its target, unless you somehow have the recall spell and have bound the pen to it. There are probably more TC-efficient ways to achieve comparable projectile weaponry, but foam dart guns have an air of subtlety to them... at least until your skin is pierced by a pointy writing implement that may also be something more deadly. If maintainers still have balance concerns, please let me know. ## Changelog 🆑 add: Certain types of pens now function like you expect they would when inserted into a foam dart qol: Examining a foam dart closely will show you how to modify it, or what it is modified with /🆑 |
||
|
|
c1ed62915b |
Adds UPSIDE_DOWN movetype for negative gravity / makes Atrocinator affected by less things (#79785)
## About The Pull Request Fixes #79764 I was going to tackle this issue by slamming `TRAIT_NO_SLIP_ALL` on Atrocinator users and calling it a day, but like, that didn't feel proper. So I thought hey, we could just give them the flying movetype, even though they technically aren't flying it means they're unaffected by things that flying would make you unaffected by. Nope, this means the mob technically "negates gravity", so no falling and no feetsteps. Let's try floating - this give us feetsteps but no falling upwards. So instead of going back to square one, with `TRAIT_NO_SLIP_ALL`, I decided to go for the more complex route of just adding a movetype. Hence, move type `UPSIDE_DOWN`. This covers situations where a mob would be "floating" above the ground, but still walking. ...Negative gravity. This means overall the Atrociator acts more as you'd expect - you don't slip on ice, you don't trigger bear traps or mouse traps, you can walk over railings, unaffected by conveyor belts, etc. ## Why It's Good For The Game Makes the Atrocinator a lot more consistent with how you'd expect for it to work. Admittedly it is a bit niche use of movetypes, but it can possibly be expanded to more things in the future, who knows? I applied it to mobs on meat spikes (even though they don't move), just for proof of concept. ## Changelog 🆑 Melbert fix: Atrocinating mobs will now behave more as you'd expect. Meaning they don't slip on wet patches, can't trigger bear traps / landmines / mouse traps, ignore conveyors, and can walk over tables and railings. fix: Floating mobs are unaffected by conveyor belts, acid (on the ground), glass tables fix: Floating mobs won't squish stuff like roaches anymore fix: Fixes bear traps triggering on floating / flying mobs /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
f4535255c0 |
Nukes radio.dmi, adds inhands for somewhat relevant items. (#79792)
## About The Pull Request Third /icon/ cleansing splinter 1. Comments on commits say all it does pretty much.  ## Why It's Good For The Game Inhand for walkietalkie was requested in the project, gets rid of some usecases of old 'gangtool', headset splitoff requested by Fazzie. Inhands reflecting the items they are supposed to represent is nice. ## Changelog 🆑 image: Following now have unique item sprites: syndicate war declaration radio, curator and chief beacon's, chaplain beacon. image: Following now have unique inhand sprites: radio, export scanner, walkie-talkie, syndicate war declaration radio, curator and chief beacon's, chaplain beacon. /🆑 |
||
|
|
6a77a2962a |
Makes the SC/FISHER a bit better - more range/accessibility/pacifist-usability (#79835)
## About The Pull Request - SC/FISHER is now pacifist-usable. - SC/FISHER black-market availability prob up to 75, from 50. - SC/FISHER range bumped from 14 to 21. ## Why It's Good For The Game The SC/FISHER does no damage (except against ethereals, where it does a grand total of 3 per shot), which I think is negligible but can be removed if it's that bad to allow pacifists a gimmick method of murdering another guy, so I think pacifists should be allowed to use it. The range buff and black-market availability are just because I felt like it, since I don't think it's available enough, especially for a doohickey whose sole purpose is "break lightbulbs". ## Changelog 🆑 balance: The SC/FISHER disruptor pistol is now more likely to show up in black market uplinks. balance: The SC/FISHER now has more range (21 tiles up from 14), and is usable by pacifists. /🆑 --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> |
||
|
|
e4029ed9cd |
More code compression for reagent holder (#79796)
## About The Pull Request Part 2 of #79686 where we trim down the size of `holder.dm` even further and in the process give some procs more advanced features as they get merged with their counterparts. **1. Removes & merges `get_multiple_reagent_amounts()` proc with `get_reagent_amount()`** The proc `get_multiple_reagent_amounts()` was only used by bio generator and 1 other item with its only use being finding the sum of all reagents present in the list returned by `typesof(datum/reagent/consumable/nutrient)`. Currently the approach is very inefficient because. - `typesof()` is an expensive call which returns a long list of reagents - `get_multiple_reagent_amounts()` would then use 2 nested for loops. One to loop over every reagent in this holder & another inner for loop to loop over every reagent returned by `typesof()` operator so the time complexity of this proc is overall multiplicative which in lamen terms means "Bad" We can replicate the same behaviour of `typesof()` by using the `type2parent()` proc and 1 more direct type check to get the exact same behaviour but with much faster results, therefore reducing overall code **2. Removes & merges `get_reagent()` proc with `has_reagent()`** The proc `has_reagent()` is way more advanced than `get_reagent()` with arguments requesting for a specific amount, metabolization and now even has a new argument i.e. `chemical flag`. `has_reagent()` has always returned the reagent reference directly and not a simple TRUE/FALSE so it is a perfect replacement for `get_reagent()`, therefore reducing overall code **3. Removes & merges `has_chemical_flag()` proc with `has_reagent()`** The proc `has_reagent()` can now look for a specific reagent with a specific chemical flag as well as mentioned above thus it can replace `has_chemical_flag()` therefore reducing overall code ## Changelog 🆑 code: Removes & merges `get_multiple_reagent_amounts()` proc with `get_reagent_amount()` inside reagent holder code: Removes & merges `get_reagent()` proc with `has_reagent()` inside reagent holder code: Removes & merges `has_chemical_flag()` proc with `has_reagent()` inside reagent holder refactor: Reagent holder code has been further compressed. Report bugs on github /🆑 |
||
|
|
bbe440b3d6 |
More standardization for ghost notifications (READY) (#79596)
## About The Pull Request I'm still not satisfied with how ghost notifications work. This gives every notification with a source (99% of all notifications, in other words) a link to jump/orbit. Currently, notifications with "play" interactions would only get the interact link, so jumping to the source was pretty annoying. It removes posting the entire message in the alert tooltip, as some got pretty lengthy and it didn't seem to fit. To replace this, they will always use headers After:    NOTIFY_JUMP and NOTIFY_ORBIT have been merged, since the only difference seems to be whether it's a turf. The result shaves off some redundant lines of code, since most-every usage of notify_ghosts uses NOTIFY_ORBIT. ## Why It's Good For The Game More standardization for the ghost notification system. Adds a few alert headers that never had them. All in all, makes it easier for creators to throw alerts at ghosts ## Changelog 🆑 qol: Nearly every ghost alert should now feature a "VIEW" button, even those with click interaction. del: Ghost alerts no longer show the entire message in the tooltip, instead have been replaced with titles. /🆑 |
||
|
|
9112509abd |
Stops rebar crossbow crashing dreamseeker when fired at point blank. (NO GBP) (#79803)
## About The Pull Request Simply put, due to how "caseless" is an element added to the ammo when it hits something, but ammo is qdeleted upon hitting someone. If shot point blank without combat mode (for some reason) it tries to add caseless to an ammo that no longer exists. For some reason, the result of this is to just fucking crash DS instead of aborting the adding of the element. The ammo isnt reusable anymore, but I'll take that over crashing. ## Why It's Good For The Game Removes a game-breaking bug. I hate gun ammo code so much. ## Changelog 🆑 fix: Stopped a DS crash when shooting a rebar crossbow in specific circumstances. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
130b3dfa64 |
Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)
## About The Pull Request More code improvements for reagent holder. As you can see it removes a lot more code than it adds so code savings are significant. This does not touch on any floating point arithmetic, all that is behind us, this focuses on removing redundant procs and merging existing procs to achieve the same functionality so if you do see any changes in reagent related behaviour it's not intentional and should be reported as a bug here. The following code changes can be summarized into points. **1. Removes procs `get_master_reagent_id()` & `get_master_reagent_name()`** Both of these procs have the exact same functionality as `get_master_reagent()` with the only exception of returning a different value. Instead we can just call `get_master_reagent()` directly and infer the name & type of it ourselves rather than creating a wrapper proc to do it for us, therefore reducing overall code **2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`** The proc `remove_all_type()` is highly inefficient, it first uses a for loop to look for the reagent to remove & then it again calls `remove_reagent()` on the reagent once it has found it. We can just embed this functionality directly into `remove_reagent()` by simply adding an additional parameter `include_subtypes`. This way the operation is faster, and we reduce the code to get the job done. Also now `remove_reagent()` will return the total volume of reagents removed rather that a simple TRUE/FALSE **3. Removes & Merges `trans_id_to()` proc into `trans_to()`** Both these procs have the same job of transferring either a single reagent or all reagents. `trans_id_to()` is a scaled down version of `trans_to()` because - It does not have any `method` var. This means if you want to transfer a single reagent to a mob/organ or any other object it does not have the functionality to expose the target to that transferred reagent. - It does not have a `multiplier` var to scale reagent volumes - It does not have code to deal with organs or stop reactions i.e. it does not have the `no_react` var. We can overcome all these short comings by simply adding an extra var `target_id` to specify what specific reagent to transfer therefore attaining the same functionality while keeping the benefits of `trans_to()` proc therefore reducing overall code **4. Lowers plumbing reaction chamber tick usage for balancing ph.** Rather than invoking a while loop to balance ph it's much easier for the player to simply make the reaction chamber wait for e.g. add a reagent that will never come. This will make the chamber wait therefore giving the reaction chamber ample time to correctly balance the ph and then remove that reagent from the list therefore getting correct ph levels. No need to create code hacks when the player can do it themselves so the while loop has been removed ## Changelog 🆑 code: removed redundant procs `get_master_reagent_id()` & `get_master_reagent_name()` code: merged `remove_all_type()` proc with `remove_reagent()` now this proc can perform both functions. `remove_reagent()` now returns the total volume of reagents removed rather than a simple TRUE/FALSE. code: merged `trans_id_to()` proc with `trans_to()` now this proc can perform both functions refactor: plumbing reaction chamber will now use only a single tick to balance ph of a solution making it less efficient but more faster. Just make the reaction chamber wait for longer periods of time to accurately balance ph refactor: reagent holder code has been condensed. Report any bugs on GitHub /🆑 |
||
|
|
7f0536bb93 |
Makes Telekinesis + Russian Revolver Interaction more fair (#79740)
## About The Pull Request Fixes #77238 Basically, you were able to just spam kill people with the russian revolver if you had telekinesis, which isn't really fair. Now, after taking a leaflet out of the the discussion in that issue report, you can still pull off the same party trick... once... Basically, let's just say that when you focus on firing the gun in your mind... you're also pointing it directly at your mind (your brain (your skull (you instantly die))). This occurs even if the projectile doesn't actually touch you (because that would be hellish to account for) but you're the one who's playing russian roulette man You still get to do some collateral damage because that's still a very funny interaction but you only get to do it once per life. I don't know if people will be happy to revive you after you "shoot" them. Also, the way it's coded means that you can still leave the revolver on the table and fire it at your foot or something, or just use it normally, as a telekinesis user. This _only_ applies to distance-based firings. ## Why It's Good For The Game The russian revolver is specifically coded to prevent you from damaging other people, and this was a pretty silly way to sidestep that based on the checks. Instead, let's make it so that you can still do this admittedly funny interaction, but with enough reason to not do it (the reason being that you'll always get fucking blatted). ## Changelog 🆑 balance: After a string of unfortunate incidents, persons with telekinesis have been strongly warned against playing Russian Roulette, as they tend to hyperfixate on the gun a bit too much and end up firing it directly at their head. /🆑 |
||
|
|
e1b958c41f |
Removes final remnants of 'targetted' (#79626)
## About The Pull Request Finishing what https://github.com/tgstation/tgstation/pull/79513/ started, removes 'targetted' typo from code. Also updates the basic mob guide with the new updated var names. ## Why It's Good For The Game Typos bad. Accurate guides good. ## Changelog 🆑 code: gets rid of the rest of the instances of 'targetted' typo from code /🆑 |
||
|
|
d47c5149d5 |
Emergency hotfix for engi crossbow [NO GBP] (#79606)
Hadnt added these commits when the PR got merged due to not expecting it oops ## Why It's Good For The Game See above, used to make my last pr actually function as intended. ## Changelog 🆑 fix: fixed engi crossbow being able to be used onehanded + ability to craft with sci inducers /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
ba076e94bc |
Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant (#78777)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request  Engi now has access to a Half Life 2 Inspired rebar crossbow! Made of rods, wire, and an inducer, it shoots sharpened iron rods at a high velocity. High damage and good embed chance, but requires you to reload every shot which requires you to stand still for three seconds to pull the string back. You can also Use a wrench on it to force it to store more rods (read: more than one), but risks it exploding and shooting you instead. The syndicate variant, avaliable to traitor engis, can fire three rounds before needing a reload, and features a scope and better armor piercing ammpo, but costs 10TC. I see it as a sidegrade to the revolver - quieter and has much more widespread ammuniton, but holds less ammo and doesnt have the same burst stopping power. And, to those concerned about the balance of a non-traitor with this item - the AP ammo can only be made by the traitor who bought it, and anyone else has to use normal ammo. GUN STAT JUNK Normal one has 60% embed chance and does 40 damage (against unarmored targetd), but requires you to wait at least 3 seconds not moving to pull the string back. Good alpha strike but not sustainable in a long fight. Its akin to a pipegun. Lacks any AP qualities besides piercing a jumpsuit, because any wound chance it has is due to a bare skin bonus. Generally not a great weapon to fight sec with. Syndie version is generally the above but better. Takes less to pull the string back, slightly higher damage, better fire rate, etc. Doesnt fare well against any armor thats equivalent to sec gear or better due to most having low (relatively) AP and wound chance, but good bare wound bonus. STATS TLDR: Its good against unarmored chumps and greyshirts but anyone in armor that protects against bullets will kick your teeth in. Also, Ammo is crafted from an iron rod. I wanted to have it just fire rods as is, but theyre stacked items which you cant define projectiles or ammo from. ## Why It's Good For The Game I've always felt engi, for as big of a department as it is, is lacking in the "fun weapons" area. Sci has mechs and xenobio, med has chem nades and syringe guns, and cargo has anything the QM will buy - but other than the flamer and shocked doors, engi doesnt have much. Thats why I made this pr. it was originally just a traitor item, as they lacked many traitor items in their shop, but I felt like a worse, bootleg version would suit them. ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 add: Enginenering rebar crossbows + tot kit add: Added a bunch of ammos and crafting junk to make the ammo exist image: added icond for all the above /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
3c7005a37c |
Converts some notify_ghosts args to bitflags, multilines all notify_ghosts calls (#79320)
## About The Pull Request This helps clean up my favorite helper proc in the whole codebase, `notify_ghosts()`. The notify_suiciders, ignore_mapload, and flashwindow args are GONE. They have been replaced with the notify_flags bitflag argument. This was intended to make deadchat announcements a bitflag argument too, but those got reverted right before I originally wanted to submit this PR. The on-screen popup now shows the notification body when you hover it with your mouse again. The format is now `[notify_ghosts message] -- [click action (orbit/jump/play)]` Every single `notify_ghosts()` call has been changed to multiline format and has been given trailing commas. Pretty! ## Why It's Good For The Game Cleans up a proc that is very popular and going through a lot of changes at the time. Allows for further flexibility when this proc inevitably gets tweaked or improved. 12 -> 10 args is an improvement, and it doesn't impact the helper's flexibility at all. ## Changelog 🆑 Rhials code: The notify_ghosts proc has been cleaned up. Please report any abnormal changes in deadchat notification behavior. qol: The on-screen deadchat popups now contain the notification blurb when hovered with your mouse again. /🆑 |
||
|
|
cd523561f7 |
[NO GBP] Buckshot no longer instantly deletes itself except when used pointblank. Oops (#79392)
## About The Pull Request This was causing lethal shotgun shells with no stamina damage to instantly delete. Oops. ## Why It's Good For The Game I broke it and fucked up MrrFish' op round and definitely not because I OWNED HIM WITH A BEEPSKY STUN ### BITCH ## Changelog 🆑 fix: Lethal ballistic pellet-based shotgun shells no longer instantly delete. /🆑 |
||
|
|
15e2aa056d |
[NO GBP]Fixes tesla zaps. (#79398)
## About The Pull Request Closes #79297 Closes #79312 Due to the new cutoff parameter being added to tesla_zap() (from #78310), and most callers used positional arguments instead of keywords, the zap flags was getting fed the shocked_targets list and maybe other junk. This caused a bunch of unusual phenomena. This is fixed by using keyword arguments. Tesla zaps that use the grid were significantly weaker in terms of damage than they're supposed to be. This was a byproduct of trying to convert everything to joules and removing unnecessary power multipliers. This is fixed by reverting the damage scaling and zap power of zap sources that aren't based on grid. Technically this will cause the zaps from other sources to have less power, but these tend to not be able to put power on grid, so this wouldn't have any change other than what a grounding rod displays. Doesn't really matter. Logs machine explosions from zap_act. Not the most helpful log (would take a lot of effort to add an extra parameter to pass the source), but better than nothing. Probably other stuff I did, lol. ## Why It's Good For The Game Stops zap fuckery. Admins can now find the explosions when a 9GeV engine decides to go haywire or whatever. ## Changelog 🆑 fix: Fixes tesla zaps being weird. admin: Logs explosions from explosive zaps. /🆑 |
||
|
|
3e74d1ee8e |
Gives the Revolvers on the Nuke Ops uplink Syndicate Firing Pins (#79327)
## About The Pull Request gives revolvers on the nukie uplink syndie firing pins ## Why It's Good For The Game Every other firearm on the nukie uplink has a syndie firing pin. ## Changelog 🆑 fix: The Syndicate Revolver now has a Syndicate Firing Pin on the Nuke Ops uplink. /🆑 |
||
|
|
0df843231f |
Practice Carbine Dual Wielding Fix (#79359)
## About The Pull Request When I added laser carbines, I made it impossible to dual wield them because it could allow you to shoot normal lasers far faster than intended (#72705). Someone else later added practice laser carbines, and decided to allow dual wielding with them. This predictably led to the exact same problem, so now they can't be dual wielded. Closes #79331. ## Changelog 🆑 fix: Practice laser carbines can no longer be used to rapidly fire regular laser guns. /🆑 |
||
|
|
1d2bc709bb |
Fix dsiabler / laser impact effects (#79252)
## About The Pull Request Fixes #79250 Simply restores the check for brute damage type up a level before going into blood splatters / sparks. Not a perfect fix, as this means brute projectiles are unable to have unique impact effects, but as we have no brute projectiles with impact effects currently (~~outside of a CTF projectile I think?~~ Just kidding all bullets are supposed to have an effect but it uses the blood splatter instead. Project for another day?) it suffices. ## Changelog 🆑 Melbert fix: Disablers and Lasers now show their on-impact effects on hit mobs again. /🆑 |
||
|
|
2fc83bc449 |
mag check - examining magazines now tells you what's the next/ready round (#79258)
## About The Pull Request joke pr name: Mag Drills (Elite) - Examining an ammo box (incl. magazines) now tells you the top-loaded/next round in the magazine, so if you have a bunch of mislabeled/unlabeled magazines you can figure out which one is your regular bullets and your Not So Regular bullets. - Also, adds a variable `casing_phrasing` which is used instead of just "rounds" or "shells" in little, relevant text bits (e.g. moving bullets in/out of magazines). ## Why It's Good For The Game - Ammo Box Examines: I think it's probably a good thing to be able to check what bullets are in what box/magazine without having to pull them out. - The casing phrasing thing was just for something that bugged me. I should probably extend that out to the guns, too, but after a certain point it's just something that only a small subset of people will notice. ## Changelog 🆑 qol: Examining an ammo box (incl. magazines) now tells you the top loaded round, so if you have different ammo types in different magazines, you can at least try to figure out which one is which. spellcheck: Ammo boxes (incl. magazines) can now be set to use different phrasing for their ammunition (e.g. cartridges, shells, etc. instead of just mixing "rounds" and "shells"). /🆑 --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> |
||
|
|
9ff9e4b9a8 |
Scatter laser shells now use the scatter laser beam, and makes them significantly easier to make. Projectiles can now have damage falloff. (#78927)
## About The Pull Request Allows for damage falloff to apply to more than just shotgun pellets. Now any projectile can have a damage falloff defined. Scatter Laser shells no longer use the minigun beams to determine their damage. Instead they use the actually defined scatter laser beams. Those beams do 7.5 damage per pellet, times by 6 pellets. Scatter laser beams now have damage falloff, a separately defined (positive) wounding power from normal beams, and wound falloff. Scatter laser shells can be printed from security protolathes once you have weapon tech. Scatter laser shells _may_ be damaged by EMPs based on severity. The result is that it fires a practically useless volley of laser fire. They cause a honk sound when they hit, so you know when you've shot one of these. ## Why It's Good For The Game Well, we want shotguns universally to not be defined by their damage output (especially extreme damage output) but by niche. What does the scatter laser shell currently occupy as a niche? The single highest damage output of any projectile weapon in direct damage. The thing we don't want of shotguns, and it is reigning champion of all guns. Okay, that's a bit misleading, because obviously it is competing with the likes of .50 BMG which does 70 damage outright and dismembers limbs, potentially doing upwards of 90 damage if it does, and also hard stuns people. Obviously _that_ is technically a stronger bullet. But not for raw damage, because the scatter laser does 90 damage out the gate, barring any potential wounding that might occur which increases the damage multiplicatively. No gimmicks, no extra procs, nothing. It's just 15 force lasers (with no damage dropoff) split between 6 beams. And the reason for this is because this shell has been nerfed once prior by making it not fire 6 normal laser shots into someone. That was 120 damage at the time, 120 to 90 was...I guess a nerf during the taser era. Depends on how you viewed it. Buckshot was doing like 80 at the time, believe me it was a wild period. But anyway, when we did the whole damage rearrangement over the course of the laser few years, every other shell got touched except this one for some reason. Even pulse slugs lost 10 damage while this was still sitting on 90 force point blank. So what is the new niche? Well, it's laser buckshot. That's not a niche but crew don't get buckshot, so this is their buckshot. It wounds real good. Real goddamn good. And its is a laser. It fits the aesthetic, obviously. Okay, thanks. ## Changelog 🆑 balance: Scatter laser shells actually utilize the _real_ scatter laser beam. This comes with damage changes. And wounding power. feature: EMPs can potentially damage scatter laser shells. refactor: All projectiles can now have damage falloff defined. Yay. balance: Scatter laser shells can be printed when weapons technology is researched. /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
df776f4ffc |
fixes thermal pistols doing literally nothing on impact (#79175)
## About The Pull Request Fixes https://github.com/tgstation/tgstation/issues/79167 ## Why It's Good For The Game refactors sometimes overlook things ## Changelog 🆑 fix: The nanites inside of thermal pistols are once again angry, and aggressively want to burn/puncture people. /🆑 |