mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-02-02 12:29:36 +00:00
f34174414d2dc4fd35fa4e4100eadff00d05846a
91 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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]( |
||
|
|
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. --> |
||
|
|
81dc670e3f |
Sign Language action now properly updates its background when toggled (#80052)
## About The Pull Request Changes two lines in `sign_language.dm` such that it actually updates its background when toggled, rather than only when forced to update by some other signal. ## Why It's Good For The Game The Sign Language action has a visual distinction for whether it's active or not, but it did not update this properly when toggled. This fixes that problem. ## Changelog 🆑 fix: Sign Language action properly toggles between an active/inactive background again. /🆑 |
||
|
|
365e50bbce |
Mob attackedby / check_block refactor, plus some minor cleanup of attack_x procs (#79563)
## About The Pull Request - Deletes `spec_attacked_by` - Elements simple/basic mob attack threshold - There was a skeleton mob that "mimics armor" but didn't use the actual mimicing armor thing we have, so I changed that. - Moves `check_shields` down to the living level, renames it to `check_block` - Martial art blocking is now signalized (only CQC uses it anyways) - Cleaned up a bit of `attack_x` procs, but not a lot. Should have an entire PR dedicated to this .... mess. - Deprecates `/obj/item/melee` ## Why It's Good For The Game Second verse, same as the first. - Less bad species related procs. - Largely brings a lot of code in line, making combat more consistent across types. - Makes it a lot easier to add new code relating to blocking or taking damage. ## Changelog 🆑 Melbert refactor: Refactored another large chuck of attack code, primarily involving melee item attacks and non-human mob attacks. Report if you see anything weird fix: Pacifists clicking on simple robots or silicons no longer causes sparks fix: Blocked thrown batons are now properly... blocked /🆑 |
||
|
|
bc78411eac |
Adds a toggle action to implant HUDs (#79777)
<!-- 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 Adds an action for all implanted HUDs to toggle them on and off. The default state is on, and the state is toggled appropriately when the implant is added or removed. This is done by using hud.hide_from and hud.show_to. <!-- 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 Quality of life change for roleplay situations where the HUD is usless clutter. <!-- 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. --> 🆑 qol: Implanted HUDs can now be toggled on and off with an action. /🆑 <!-- 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> |
||
|
|
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 /🆑 |
||
|
|
1a204ec4eb |
Fix split personality commune being unusable I think (#79631)
## About The Pull Request Likely fixes #79586 and likely fixes #78081 . Split persons's loc is their parent mob, so they were being disallowed from casting due to not being loc's in a turf. Further testing required ## Changelog 🆑 Melbert fix: Split persons can talk to their host once again /🆑 |
||
|
|
a1e46c5d31 |
Basic Guardians/Holoparasites (#79473)
## About The Pull Request Fixes #79485 Fixes #77552 Converts Guardians (aka Holoparasites) into Basic Mobs. Changes a bunch of their behaviours into actions or components which we can reuse. Replaces some verbs it would give to you and hide in the status panel with action buttons that you may be able to find more quickly. They _**should**_ work basically like they did before but a bit smoother. It is not unlikely that I made some changes by accident or just by changing framework though. My one creative touch was adding random name suggestions. The Wizard federation have a convention of naming their arcane spirit guardians by combining a colour and a major arcana of the tarot. The Syndicate of course won't truck with any of that mystical claptrap and for their codenames use the much more sensible construction of a colour and a gamepiece. This lets you be randomly assigned such creative names as "Sparkling Hermit", "Bloody Queen", "Blue World", or "Purple Diamond". You can of course still ignore this entirely and type "The Brapmaster" into the box if so desired. I made _one_ other intentional change, which is to swap to Mothblocks' nice leash component instead of instantly teleporting guardians back to you when they are pulled out of the edge of their range. They should now be "dragged" along behind you until they can't path, at which point they will teleport. This should make the experience a bit less disorienting, you have the recall button if you _want_ to instantly catch up. This is unfortunately a bumper-sized PR because it did not seem plausible to not do all of it at once, but I can make a project branch for atomisation if people think this is too much of a pain in the ass to review. Other changes: - Some refactoring to how the charge action works so I could individually override "what you can hit" and "what happens when you hit" instead of those being the same proc - Lightning Guardian damage chain is now a component - Explosive Guardian explosive trap is now a component - Added even more arguments to the Healing Touch component to allow it to heal tox/oxy damage and require a specific click modifier - Life Link component which implements the Guardian behaviour of using another mob as your health bar - Moved some stuff about deciding what guardians look and are described like into a theming datum - Added a generic proc which can return whether your mob is meant to apply some kind of damage multiplier to a certain damage type. It's not perfect because I couldn't figure out how ot cram limb modifiers in there, which is where most of it is on carbons. Oh well. - Riders of vehicles now inherit all movement traits of those vehicles, so riding a charging holoparasite will let you cross chasms. Also works if you piggyback someone with wings, probably. ## Changelog 🆑 refactor: Guardians/Powerminers/Holoparasites now use the basic mob framework. Please report any unexpected changes or behaviour. qol: The verbs used to communicate with, recall, or banish your Guardian are now action buttons. balance: If (as a Guardian) your host moves slightly out of range you will now be dragged back into range if possible, rather than being instantly teleported to them. balance: Protectors now have a shorter leash range rather than a longer one, in order to more easily take advantage of their ability to drag their charge out of danger. balance: Ranged Guardians can now hold down the mouse button to fire automatically. balance: People riding vehicles or other mobs now inherit all of their movement traits, so riding a flying mob (or vehicle, if we have any of those) will allow you to cross chasms and lava safely. /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
0d5f9907a2 |
Shapechange health transfer tweaks (#79009)
## About The Pull Request Fixes #78721 This PR does a handful of things behind the scenes to increase the consistency of shapechange health tracking. First of all we adjust the order of operations taken when you restore the original body. The implementation as-was would remove the status effect midway through and null a bunch of variables we tried to continue using. This would result in several runtimes and code failing to run, with the upshot that untransforming upon death would leave the caster completely alive, with the corpse of its transformed shape at its feet. Oops. Additionally while testing this I realised that transferring the damagew as also kind of fucked. We wouldn't bother to do it at _all_ if you died, which is a shame, so I made it simply heal you instead of reviving you so we can always do it. Then as noted in the linked issue, we were applying all transferred damage to a single limb, which could exceed the health of the limb and remove damage. Now we spread it around the body. Finally, applying damage to a human using the "force" flag would often actually apply less damage to their _health_ than expected. This is because arms and legs contribute only 75% of their damage taken to a mob's overall health. Now instead of reading `health` we read `total damage` which ignores the limb damage modifier. The end result of this is that if you transform into a corgi, take 50% of your health, and transform back then you will have 50% of your health as a human. Previously the result would be that you'd have ~63%, then transforming into a corgi would leave you with ~63% of a corgi's health, then transforming back into a human would leave you at about 71%... and so on and so forth. Now it doesn't do that. ## Changelog 🆑 fix: Dying when using (most) shapeshift spells will now kill you rather than having you pop out of the corpse of your previous form. fix: Damage will now be accurately carried between forms rather than being slightly reduced upon each transformation. /🆑 |
||
|
|
cf5c1fa08c | Basic Space Dragon (#78979) | ||
|
|
15efbf64a5 |
Grand Ritual Finale: An end to death (#78497)
## About The Pull Request Adds a new Wizard Ritual Finale effect which makes everything immortal. By this I mean, 10 seconds after death a ghostly image of them will appear somewhere near where the corpse was and then 50 seconds after that the mob will return to life at that location. This applies to every mob, everywhere. This is likely to cause a little bit of disruption to the rest of the round, so you can only do it after at least 30 minutes have passed. After that the crew will have to figure out how to deal with their new gift of immortality. It will involve throwing people into chasms and lava, probably.  Here's a gif sped up for example purposes. You can escape from the cycle of death and rebirth via suicide, purely because it's pointless to try and force people to play the video game if they don't want to. Also I split all of these effects into their own files, the only new code for those is in `immortality.dm` shout out to Vekter for distracting Oranges while I posted this wizard-related PR so I didn't get disapprovingly reacted for posting magic shit (yet) ## Why It's Good For The Game This might be _too_ much but I want to see what would happen. It will allow us to simulate whether polite society can survive when violence has no consequences. ## Changelog 🆑 add: Wizards who complete the grand ritual can now gift everyone with eternal life /🆑 |
||
|
|
7d7f55ee53 |
Heretic Ascension Tweaks (#78472)
## About The Pull Request Some changes to Cosmic and Knock heretic ascensions, in response to feedback. - Cosmic Heretics can no longer control their summon while jaunted. - Additionally the death link element the Star Gazer used... wouldn't work if there was more than one cosmic heretic. I refactored it into a component, so that it would. Frankly there are probably a lot of _other_ abilities which shouldn't be usable while jaunted but are, but I have been burned in the past by adding defaults which were applied too widely so we'll leave it case-by-case for now. - The Knock rift can no longer summon Flesh Worms of any kind. - But it _can_ summon fire sharks (we really need to reflavour these...) and any future "basic mob" heretic mobs (or ones which are converted). - Additionally the rift can't be clicked by ghosts while it's polling ghosts automatically because that would create funky empty-minded mobs. - Finally it goes away when the heretic dies. ## Why It's Good For The Game For Cosmic Heretics, controlling the Star Gazer in conjunction with Space Jaunt essentially meant that the heretic was playing an RTS as an invincible observer with an invulnerable unit, now they have to actually be present and killable in order to sic The Beast on you. For Knock Heretics, Minor Flesh Worms are a proof of concept which was never meant to be used except by admins. They're _barely_ weaker than a normal flesh worm, extraordinarily tanky, delete walls, and generally devalue the Flesh path ascension. Vanishing upon heretic death is because every _other_ ascension is at least theoretically stoppable except this one. Now this one is too. It's still _very hard_ to kill the heretic because every _10 seconds_ they can transform into a heretic mob which acts as an extra health pool. ## Changelog 🆑 fix: If two cosmic heretics ascend in the same round, their star gazer survival will be linked to each individual heretic and not shared by just one of them. fix: You can't click the Knock heretic portal to join as a mob while already signed up to become a mob. balance: Cosmic heretics can't order the Star Gazer around while jaunting. balance: The Knock Heretic portal cannot summon Flesh Worms, but can summon Fire Sharks. balance: The Knock Heretic portal will disperse if its creator is killed. /🆑 |
||
|
|
88c3f4bfa4 |
bitrunning hotfix 2 [NO GBP] (#78633)
Bitrunning releated fixes --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> |
||
|
|
9e8f8371e8 |
Fixes lobstrosities becoming unmovable when killed during their charge windup (#78533)
## About The Pull Request Hooks `charge_end()` on charger's death signal and shuffles the proc a bit to accord for a non-moveloop source. This lets the charger to properly unregister signals for its charge movement effects and unblocks its movement via `actively_moving` var (which would be blocked in `on_move()`). ## Changelog 🆑 fix: fixed lobstrosities becoming unmovable when killed during their charge windup /🆑 |
||
|
|
00236a1e20 |
Colossus' Titan's Finale ability has a 0.5 seconds delay before starting the attack (#78171)
## About The Pull Request ided pls nerf ## Why It's Good For The Game This motherfucker is horrid to fight with a crusher because the first attack that he does in this action is a shotgun blast, which you just eat with your face and die. The only reasonable way to trigger this attack is with a ranged weapon or with a hiero's trophy, the former being antithetical to the challenge/playstyle that is crusher mining and the latter being wildly uncontrollable. Half a second should be ample time to dodge out of harm's way before server-lagging touhou begins. ## Changelog 🆑 balance: colossus' near-death attack now starts after a 0.5 seconds delay /🆑 |
||
|
|
2734dbfd37 |
Fixes implanted legion cores being available for use when dead/unconscious (#78042)
## About The Pull Request Ever since #70546 implanted legion cores have become available for use when the user is unconscious/dead, which was not the case before — it was using an organ action, which checks for `AB_CHECK_CONSCIOUS` #### cores before #70546 |
||
|
|
4fec8b5e88 |
megafauna no longer gib/dust you (#77731)
## About The Pull Request megafauna now gut you instead of gibbing or dusting colossus bolts still dust to prevent bodychair cheese ## Why It's Good For The Game shaft miners are already hard to recover(or impossible in the case of dusting), having to go through lavaland and likely near the megafauna itself. This should still be punishing enough for losing to a megafauna as it removes their heart, lungs and liver from their body while still leaving it intact, just easier to recover. ## Changelog 🆑 balance: megafauna will now gut instead of dusting or gibbing /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
e02595078c |
Adds a Heresy phobia, fixes some typos in heretic code, places the stargazer and fire shark under heretic_summon (#77306)
## About The Pull Request Instead of a supernatural phobia, sacrificed people will now get a HERESY phobia, which specifically targets heretic stuff, instead of all of magic. Other heretics, however, do not get this, but instead get knowledge points sapped from them, as their mind is ruined in a different way than normal people. This comes with different flavour text and a harsher but shorter lasting mood debuff. Also fixes some "knowlege" code typos and places the star gazer and fire shark all in under heretic_summon ## Why It's Good For The Game Heretics, Wizards, Chaplains and Cultists will now be able to keep playing the game after getting sacrificed without overdosing on psicodine, while still retaining the phobia's original design purpose. placing the fire shark and star gazer under the same type also is useful as they share a lot of values. typos bad. ## Changelog 🆑 add: Sacrificed heretic targets will now receive a phobia of heresy instead of a phobia of the supernatural. Sacrificed heretics will not get this phobia, but will lose knowledge points instead. /🆑 Huge thanks to Helg2 for doing the original PR and helping me with this one, couldn't be done without them --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com> |
||
|
|
04d4e001f1 |
Don't sleep in ability.Activate() when breathing fire (#77673)
## About The Pull Request
The global proc `dragon_fire_line` sleeps, and was being called inside
`ability.Activate`
This made the CI fail on a different PR because the mob stopped existing
between activating the ability and triggering its cooldown, which should
not regularly be possible.
The ice whelp refactor author noticed this when using it in a loop but I
guess didn't think about the other implications 😅
## Why It's Good For The Game
Fixes a bug.
## Changelog
Not player facing
|
||
|
|
b77c1c85ea |
MODLink System (+ NWTLMM) (#77639)
## About The Pull Request A pact made with `@Kapu1178` Small changes you should not care about: RD MODsuit outfit (admin only) no longer has a beret that blocks the activation of the suit The beret used by death squad officers no longer is blocked from being put on a hat stabilizer module Admins can now Shear matrices of objects in Modify Transform Multitool buffers have been a little refactored to use a setter proc that saves them from causing hard dels Cooler stuff: A revival and remake of [Nobody Wants To Learn Matrix Math](https://github.com/tgstation/tgstation/pull/59103), this time with additional tooling for quick matrix calculations.  The MODLink system, available through every MODsuit and MODLink scryers (a neck item obtainable from advanced modsuit research or charliestation) Let's you make a holographic call with any other MODLink user, where you can chat in realtime and see what's up with em   ## Why It's Good For The Game Adds a fun way for the crew to communicate with each other that can be done in real-time with relative privacy compared to radio. ## Changelog 🆑 Fikou, Armhulen, Sheets (+rep for Mothblocks and Potato) fix: RD MODsuit outfit (admin only) no longer has a beret that blocks the activation of the suit fix: The beret used by death squad officers no longer is blocked from being put on a hat stabilizer module admin: Admins can now Shear matrices of objects in Modify Transform admin: Admins now have access to Test Matrices in the VV dropdown, an all-in-one tool for editing transforms. add: MODLink system, available through scryers (from RnD and Charlie Station) and through MODsuits. Lets you call people with holographs! /🆑 |
||
|
|
bae1aef3b4 |
Refactors Regal Rats into Basic Mobs (more titles edition) (#77681)
## About The Pull Request I literally can't focus on anything nowadays, so I just did this to break a never-ending chain of distress. Anyways, regal rats! These fellas are mostly player controlled, but did have _some_ AI capabilities (mainly tied to their actions), so that was incorporated too. Everything should work as-expected (as well as look a shitload cleaner). Instead of doing weird and awful conditional signals being sent out, I made the `COMSIG_REGAL_RAT_INTERACT` (not the actual name) have a return value so we can always rely on that working whenever we have that signal registered on something we attack. I also cleaned up pretty much every proc related to regal rats, gave them AIs to reflect their kingly nature (and action capabilities (as well as move the action to `mob_cooldown`)). Since I thought they needed it, Regal Rats now get a special moniker! This is stuff like "the Big Cheese" and what-not, like actual regents in history. That's nice. ## Why It's Good For The Game Two more off the list. Much better code to read. Way smarter rats with spawning their army as part of a retaliatory assault (war). More sovl with better regal rat names. The list goes on. ## Changelog 🆑 refactor: Regal Rats have been refactored into basic mobs. They should be a bit smarter and retain their docility (until attacked, in which case you should prepare to get rekt by summoned rats), and properly flee when they can instead of just sit there as you beat them to death. The framework for them interacting with stuff (i.e. opening doors while slobbering on food) is a bit more unified too, now. They also have cooler names too! /🆑 FYI: Beyond a few code touchups, I haven't touched the actions at all. I do not believe myself to be enthusiastic about fixing anything involving the actions code as of this moment so that this PR is more overbloated unless it's unbelievably stupid or easy to fix. |
||
|
|
40a6126ae7 |
Fixes Xeno Sentinel's Sneak Action Icon + Additional Sneak QoL (#77543)
## About The Pull Request This PR fixes the xenomorph sentinel's Sneak ability having an error icon as opposed to the intended appearance. This PR also adds a smooth alpha transition to Sneak as opposed to setting the alpha immediately. Having your alpha drop to its sneak value takes 0.5 seconds, which is fast enough that it really shouldn't matter. This PR also changes sneak's chat message alert to a balloon alert. ## Why It's Good For The Game The icon thing is a bugfix, which is always good. The alpha transitioning instead of being immediately set looks much better in my opinion, I think most would agree on that front. Balloon alerts are our preferred option as opposed to chat alerts now, so its also a good thing to change. ## Changelog 🆑 qol: Xenomorph Sentinel and Ambusher Spider's sneak ability now has a transition to a lower alpha as opposed to being immediate. qol: The sneak ability now uses balloon alerts as opposed to chat alerts. fix: Fixed the Xenomorph Sentinel's Sneak ability icon being an error. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
ed51898942 |
Replaces Big Mob Tiny Sprites With Togglable Clientside Transparency For Big Mobs (#77361)
## About The Pull Request This PR replaces the tiny mob sprite abilities for our large mobs with a Toggle Seethrough ability. What this does when enabled is make yourself transparent on your own client and makes you unable to click yourself. With this, any sort of overlays that get added look correct while in your tiny mob form and you can still appreciate your large size without giving up the ability to click on targets that would be hiding underneath your sprite.   In total, this ability is granted to all the mobs who had tiny sprites: - Xenomorph Queen - Space Dragon - Megafauna (not that players ever get access to these normally, but it might be nice for admins) Along with all this, I've also gone and expanded the mobs who get access to the Seethrough ability to mobs that are large but didn't have a mini-sprite. This includes: - Jungle giants (leaper and mega arachnid) - Tree mob - Festivus pole mob - Lavaland elites - Xenomorph Praetorian - Wumborian Fugu On top of all this, any simple/basic mob given a fugu gland also automatically gains this ability. This solution also fixes all the overlays bugs that tiny mob sprites introduced to the game, most notably the xenomorph queen overlays being screwy when in small form and space dragon's overlays being completely disabled for everyone if he was in small form. The only issue with this currently is that clicking on any overlays from your mob will let you still click on yourself, though this issue is pretty negligible. ## Why It's Good For The Game Tiny mob sprite abilities clashed very hard with our overlay system, leading to a lot of buggy and unintended behavior. This replacement works a lot more smoothly with overlays and also requires much less setup to give it to a mob than tiny sprites did. I would also imagine it helps keep the fantasy of being a big monster alive by letting you still see yourself being a big monster without it getting in your way when trying to attack things. ## Changelog 🆑 del: Removed tiny mob sprite abilities for large mobs add: Add a Self Seethrough ability, given to most large mobs and all mobs affected by a fugu gland fix: Space Dragon's overlay will no longer vanish at times --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
72174845f5 |
Basic Watchers & Basilisks (#77630)
## About The Pull Request This one is a double feature because Watchers and Basilisks share the same typepath. You might see a couple more of those. As is tradition I decided to fuck with them rather than just port them. Here's what's up. **Basilisks**   - Have a new soulless sprite which looks less like a living blue hedge. - Walk at you and shoot you while you are not in range (just like before). - Become supercharged if they become "heated" by lava, lasers, or temperature weapons. This was a feature they also previously had but they would never encounter lava, so now it also works if you use the wrong gun on them. - Lose their supercharge if you cool them down. - Otherwise pretty normal mobs. **Watchers** https://www.youtube.com/watch?v=kOq_Bf78k5A Here's a traditional video of me intentionally getting hit by mechanics (trust me its definitely on purpose) - They glow emmissively a little bit so you can see them from further away. - Their eyes light up about 0.5 seconds before they are able to shoot at you. - No longer melee attack, instead try to stay out of melee. - Will occasionally put you into "Overwatch", meaning they will shoot you rapidly if you move or act while they're staring at you for a brief time period (after which you become immune for 12 seconds, and during which other watchers will play fair and stop shooting at you). - If they start taking damage they will also start using their "Gaze" attack, look away or suffer some kind of negative effect! - - Normal watcher gaze flashes and confuses you. - - Magmawing watcher gaze obviously burns (and briefly stuns) you. - - Icewing watcher gaze freezes you and throws you backwards. - Magnetically attract and eat diamonds. They also used to do this, but just if they happened to coincidentally walk past some. **Other accompanying changes** All basic mobs will now adopt the "stop gliding" trait if they get slowed down too much. I moved behaviour for "fire a projectile from this atom" into a helper proc because I was using it in three places and I will probably use it in more places. There are probably other places in the existing code which could be using this. I think I made the basic mob melee attack forecast default a little more forgiving, they were fucking me up too much and I am the playtester. ## Why It's Good For The Game Another one off the list. New tricks for old dogs. Framework for making mobs with ranged attacks "fairer" (you can see when they are ready to shoot you). More (hopefully) versatile AI behaviours which we will reuse later (I hope I'm not duplicating one someone already made). If our players "enjoy" them enough we can give more mobs "don't look at me" mechanics. Removes some soul sprites. ## Changelog 🆑 refactor: Basilisks and Watchers now use the basic mob framework. Please bug report any unusual behaviour. sprite: Basilisks have new sprites. add: Basilisks will go into a frenzy if heated by energy weapons or temperature beams as well as by lava. add: Watcher eyes will be illuminated briefly when they are ready to fire at you. add: Watchers can now briefly put you into "Overwatch" and penalise you for moving while they can see you. add: Wounded watchers will occasionally punish players who look at them. balance: Unusual watcher variants are more likely to appear. /🆑 |
||
|
|
15c3cd2c97 |
basic ice whelps (#77493)
## About The Pull Request i have refactored ice whelps into basic mobs. They are now the artistic sort as theyll mark their territory by seeking out icy rocks and carve out statues of theirselves using their claws to serve as a warning to players/animals that this is dragon turf and theyll also go out of their way to burn any trees in vicinity just for the hell of it. they are now gruesome cannibals if they find a corpse of one of their kin near them theyll go eat it for nurishment. AS for combat, they have a new ability which allows them to release fire in all directions however theyll only use this ability once their enraged meter is full. to make it fair ive given them a new component which allows them to telegraph abilities and only do them after a delay so players can react in time for it. ## Why It's Good For The Game basic mob refactor ## Changelog 🆑 refactor: ice whelps have been refactored to basic mobs add: ice whelps have a new dangerous ability which theyll use once their enraged meter is full /🆑 |
||
|
|
31f1924324 |
Refactors Morphs into Basic Mobs (there is now a swag action for morphification) (#77503)
## About The Pull Request I was bored, so did this. Probably one of the neatest refactors I've done, sorry if there's some oddities because I was experimenting with some other stuff in this so just tell me to clean them up whenever I can. Anyways, morphs are basic mobs now. We are able to easily refactor the whole "eat items and corpses" stuff in the basic mob framework, but the whole "morph into objects and people" turned out to be a bit trickier. That was easily rectified with a datum mob cooldown action and copy-pasting the old code into that code, as well as doing some nice stuff with traits and signals to ensure the one-way communication from the action to the mob. Old Morph AI didn't seem to be existant whatsoever, they inappropriately leveraged some old procs and I have no idea how to make it work with new AI. They DEFINITELY don't spawn outside of admin interference/ the event anymore, and will always be controlled by a player, so this shouldn't be too bad of an issue. I gave them something to seem alive just in case though, but I think adding legitimate prop-hunt AI would be such a laborious task that I am unwilling to do it in this PR. ## Why It's Good For The Game If admins want to add the ability for Ian to assume the form of the HoP, they can do that now! The datum action cooldown is quite nice for simple and basic mobs... but it is currently not compatible with carbons. That is not within scope for this PR, but I am dwelling on ways to extend it to carbon but they all sound really awfully bad. Also morphs are smarter, and we tick another simple animal in need of refactoring off the list. ## Changelog 🆑 refactor: Morphs are now basic mobs with a nice new ability to help you change forms rather than the old shift-click method, much more intuitive. admin: With the morph rework comes a new ability you can add to mobs, "Assume Form". Feel free to add that to any simple or basic mob for le funnies as Runtime turns into a pen or something. /🆑 ~~Does anyone know if there's a (sane) way to alias a cooldown action as a keypress? I can't think of a good way to retain the old shift-click functionality, because that does feel _kinda_ nice, but I think it can be lived without.~~ I added it. Kinda fugly but whatever. |
||
|
|
8957eb763c |
Spider Evolution - Young Spiders [Ready] (#76692)
## About The Pull Request This pr adds a young spiders that appear between spiderlings and adult spiders. Now spiders have a stage where they are squishy but can also spin webs and do some other things early depending on the spider type. Spiderling stage takes 40 seconds and young spider stage take 1 minute, ealier for spiderling this was 1 minute. Also adds a new wizard spider sprite and makes the spider form usable. Gives Wizard Spider version has better immunity against fire since it can kill a wizard very fast it they are not paying attention. Makes tangle spider get more health but makes the self-healing worse. This is done because spider is a team antag except for the flesh (changeling spider), making it so solo-playing as tangle is less encouraged. Scout spiderling gets thermal vision also. It cannot communicate, but it can already start scouting now. Viper deals bonus damage when an enemy is on low health. Toxins don't kill humans anymore, and since the viper spider only deals 5 damage now it deals more so it can actually take down enemies at low health. They also have a little more health since they always die very fast. Viper can also change between a defensive/slow mode with more armor or a offensive/speed mode with less armor. Nurse spider heals for 25 instead of 20, since 25 is one laser shot, it makes more sense for the nurse spider to be able to heal that amount. Flesh spider grows faster since they are a solo antag and spawn killing isn't cool. Tarantula spider can now tear down walls by clicking them instead of needing to use their charge attack. They can also build wall webs and passage webs. Their damage coeffs also got the regular burn factor for spider so their health also increased a bit.   ## Why It's Good For The Game Now there is a smooth transition between the tiny spiderling and the bigger spider stage. This will promote people to help the hive at an earlier stage while not being too powerful yet. It is also realistic and adds extra flavor to the spider antag. The other balance changes are improvements to the game. ## Changelog 🆑 add: Young Spiders that appear between spiderlings and adult spiders. balance: Wizard Spider version has better immunity against temp damage and can lay webs faster. balance: Tangle Spider sucks more with self-healing but has more health. balance: Scout spiderling gets thermal vision. balance: Viper deals bonus damage when an enemy is below 20% health. /🆑 |
||
|
|
444f1b5bc0 |
make the hive bot a basic bot (#77274)
## About The Pull Request i make the hivebot a basic bot also the old hivebot simple bot he was chaneged apperence when he finded a target so i maked a new element to allowed this behavier so now when the basic finded a target he apperence can also changed and this elememt can be gived to another basic monsters so they can changed apperence when they found a target. i give him new behaviers now the hivebot will look for ech other and when he finded ech other they will comunicated with binyary messages and now the mechanic hivebot he will go to look for broked machines so he can repair him ## Why It's Good For The Game the hivebot is a basic and he have a better behaver ## Changelog 🆑 refactor: the hivebot is now a basic please report any bugs /🆑 --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> |
||
|
|
ddfdc70d73 |
Basic Lobstrosity (#77253)
## About The Pull Request I'm slowly chipping away at mining mobs. These ones also got some new sprites because the old ones were a bit weird except when facing South.  Arctic Lobstrosities are now hairy to give them a little more visual distinction from Lavaland ones. In terms of behaviour, they're now a little faster and can charge you from further away. They will _only_ attack players who are incapacitated in some way (primarily from being hit by their charge, but could be from a Goliath or something too) and will otherwise keep their distance until they can charge again. They move slower for a short duration after charging though, so you have time to slap them a bit. If a Lobstrosity downs you then it will try to snip off one of your arms, then retreat in order to eat it. Obviously nobody likes losing an arm, but this does give you an opportunity to get away while it is distracted? Funnily enough the way our health system works means that sometimes losing that arm actually takes you out of soft crit so you can stumble back to the station for a replacement (or try to wrestle yours back?) All of these things are achievable also by a player if you make one sapient, they will pull arms off mobs they attack which are in crit and can eat arms if they see them lying around if they want. I added an element to let you dismember people with your bare hands, maybe someone evil can use it to add a beheading attack some day. Here's a video of their new behaviours: https://www.youtube.com/watch?v=9eKxsH7hD7Q ## Why It's Good For The Game Gives mobs more character. Reduces our list of frozen simple mobs. Replaces some ugly side sprites. Medbay enrichment? ## Changelog 🆑 refactor: Lobstrosities are now basic mobs and have different AI behaviour. Please report anything which seems like it shouldn't be happening. add: Lobstrosities will now only opportunistically attack things they have knocked over with their charge, and are otherwise timid. add: Lobstrosities are hungry for fingers and will steal one of your arms if they defeat you in combat, although this gives you time to crawl away. sprite: New sprites for Lobstrosities. /🆑 |
||
|
|
88f259980b |
The Leaning Update (and Density Refractor) (#76704)
## About The Pull Request WHAT HAS CHANGED MECHANICALLY You can now lean up against walls. https://github.com/tgstation/tgstation/assets/55666666/bf81b7b5-6cab-4fc3-9887-075351511505 To lean against a wall, simply face opposite to it and drag your sprite onto it. Doing so makes you non-dense, just like if you were laying down. This means people can walk through you, but you are still susceptible to melee and ranged attacks. Leaning up against a wall also mitigates your FOV loss by 30 degrees, as you can have a better look at your surrounding when you put more of your surroundings infront of you. Because it seemed thematic to lean up against the wall while smoking and then flick a cigarette away, cigarettes will now say they where "flicked" instead of thrown when you toss them, I also took the time to add a bit of variation into the throw text. A few bugs where you could become non dense and then run straight through people has been patched. NOT PLAYER FACING So basically I've implemented a system that keeps effects that manage a mob's density consistent with eachother. An example of some of the situations that could occur Effect A would render a spaceman undense and turn the player dense again once it was concluded Effect B would render a spaceman undense and then after a timer revert the spaceman to whatever state the spaceman was in before effect B started. Thus if you enabled effect A and then Effect B, setting your previous state of denseness to undense, and then concluded effect A, when Effect B would finish it would put you back into the state of density you were in when you started. This would render the spaceman permanently undense. To solve this, the system has been updated so that all instances of density adjustment to mobs are handled by traits from unique sources (with the exception undensity gained by laying down due to its prevalence.) All effects that handle density will no longer step on each others toes and can now be rain simultaneously without fear. ## Why It's Good For The Game Leaning is cool. Bugs are bad. ## Changelog 🆑 itseasytosee add: You can now lean against walls! Simply turn your back to the wall and clickdrag yourself onto it. fix: There should no longer be any instances of spacemen being able to run straight through eachother as if they weren't even there. spellcheck: Added more variance to item throwing text. refactor: Mob density has been refactored /🆑 |
||
|
|
fb10121022 |
Icons folder cleaning wave two (#76788)
## About The Pull Request Further continous organizing and cleaning the Icons folder. There are still some minior nitpicks left to do, but I reached my daily sanity expenses limit again, and the faster these get in the less issues for both me and others later. Also cleans some mess I caused by my blindness last PR. ## Why It's Good For The Game Saner spriters = better sprites |
||
|
|
a373b4cb08 |
Icon folder cleaning wave one (#76703)
## About The Pull Request Due to a mental breakdown caused by unfathomable abomination that is icons folder, I swore to myself to one day clean it. Today is kind of that day. Been at it for around 6, you gotta understand I need a rest. I tracked most changes in descriptions of commits if you are looking for details. ## Why It's Good For The Game Saner spriters make better sprites. And also, just helps keep track of things. ## Changelog 🆑 image: added sprites for different variants of scrolls. image: modified couple posters with ghost pixels. /🆑 --------- Co-authored-by: OrionTheFox <76465278+OrionTheFox@users.noreply.github.com> |
||
|
|
8c1e35e1c0 |
Refactors mind language holders into non-existent, fixes new languages being deleted on species swap + tests (#76612)
## About The Pull Request This PR refactors mind language holders into non-existence As a result, `update_atom_languages` is no longer necessary Mind-bound languages are transferred via `/mind/proc/transfer_to` Species changing no longer deletes and re-creates the mob's language holder, allowing them to keep any languages they have. Species languages are sourced from `LANGUAGE_SPECIES` now, meaning they are removed when they change species. If the mob is not a human with a species datum, these are effectively just atom level languages. Makes a bunch of unit tests to ensure language transfer over certain events works as intended ## Why It's Good For The Game Mobs with minds having two independent language holders results in a good few bugs, and simply doesn't make sense when we have sources (`LANGUAGE_MIND`). Instead of tracking two language holders, we can simply use sources better and only track one. This means that the language holder you start with is your language holder, period. It doesn't get deleted or re-instantiated or whatever. ## Changelog 🆑 Melbert refactor: Refactored language holders, making species changes not delete all of your known languages /🆑 |
||
|
|
25cfa0c03d |
Maptext 2023 tweaks 3 (#76552)
## About The Pull Request Hopefully the last set of changes in this demonstration of the [Goldilocks principle](https://en.wikipedia.org/wiki/Goldilocks_principle). Some more font changes, the big (hah) one being the context tooltips again. - Context tooltips smaller main line, more compact sublines. - Improves documentation on the usage of the macros. - Removes incorrect comment I added earlier in tgstation.dme - Adds black outlines as default in the macros. - Icon sized letters (Dwarf Fortress, credits). - Deathrattle and other actions reduced spacing. - Aligned cooldowns/countdowns. <details> <summary>Screenshots</summary>        </details> ## Changelog 🆑 LT3 image: More maptext and font tweaks spellcheck: Context tooltips too small, too big... just right? /🆑 --------- Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> |
||
|
|
2b6f93d521 |
Maptext 2023 tweaks [NO GBP] (#76397)
## About The Pull Request - In PR https://github.com/tgstation/tgstation/pull/76356 missed a few bits of maptext around, such as shuttle signs and the supermatter. Small text adjustments/fixes here. - Large amount of feedback about the context tooltips. Increases size, lightens default color as to not be too imposing. 🆑 LT3 qol: Context tooltip size increased fix: Fixed remnants of old maptext code on various things /🆑 |
||
|
|
03c964ac45 |
Reworks Duffel Bags (Zippers) (#76313)
## About The Pull Request Reworks duffel bags in line with oranges proposed plan.  Basically, instead of just making you slower all the time, they make you slower while you have them open, but give you the same speed while they're closed. As a trade off, opening and closing them takes time, 2.1 seconds (matches the sound) and 0.5 respectively. https://github.com/tgstation/tgstation/assets/58055496/555d2cd0-038e-4b0b-a693-0c66dac16f5b [Adds support for limiting extra storage, uses it to make syndie stuff cool]( |
||
|
|
09b7510d28 |
Fix colossus finale firing like 100 fewer projectiles than it should be (#76202)
## About The Pull Request  ## Changelog 🆑 Melbert fix: The colossus's finale attack is now 100x more lethal, because it was firing 100x fewer projectiles than intended /🆑 |
||
|
|
43f1a52223 |
Removes some boilerplate from transforming component (#75998)
## About The Pull Request Removes some boilerplate from transforming component, uses traits in a similar way to the two-handed component Also fixes #74955 (If it's still broken?) ## Why It's Good For The Game Makes it a bit cleaner to work with. Cause I wanna do something with this in the future maybe. ## Changelog 🆑 Melbert fix: Fixed e-cutlasses and bananium swords having invisible inhands code: Removed boilerplate from transforming component /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
b5975bd915 |
Unit tests now catch decals in walls/space (#75189)
## About The Pull Request Unit tests will now fail if there's a decal in a wall or open space turf. Open space turf could be limiting to mappers but I don't think it makes sense for decals (like dirt, glass shards, etc) to be floating around in space in the exact same spot. If there's a decal you want to put in space, decals have a ``turf_loc_check`` var that will bypass this. **Important note: This is not changing existing behavior. Decals already delete themselves when they spawn in these incorrect locations, we're just avoiding them from spawning in the first place.** ### Changes I made - Ash flora are now lava immune, rivers spawn after flora does, so I decided that it would be easiest (and more flavorful) to have them be lava-immune rather than to not have them spawn at all. - Decals can now be spawned in non-turf locations. This is currently done by mail, which can give you bones as part of the mail. Currently it will just delete itself instead. - Trading Card button is now on the same tile as their display, which now uses an offset. Before it would spawn it on the tile next to it, which could be a wall in some instances. - Mirrors now have floating movement type. They ARE floating since they're attached to the wall, and it prevents them from burning up due to lava in the Pride ruin. - I also added a broken mirror subtype because I thought the icon_state check was terrible. - Bubblegum called ``DestroySurroundings`` several times on the same thing, I hopefully fixed some of that. Their charge ability also registered ``COMSIG_MOB_STATCHANGE`` despite ``/datum/action`` doing it by default, so I fixed that too. ## Why It's Good For The Game Decals in walls is already a bad idea, but currently all it does is delete it on Initialize. It would be better if we ensured they wouldn't spawn in the first place. ## Changelog 🆑 fix: Lava will no longer burn 6 of the mirrors in pride ruin fix: Lava will no longer burn plants that spawn in them. /🆑 |
||
|
|
ae5a4f955d |
Pulls apart the vestiges of components still hanging onto signals (#75914)
## About The Pull Request Signals were initially only usable with component listeners, which while no longer the case has lead to outdated documentation, names, and a similar location in code. This pr pulls the two apart. Partially because mso thinks we should, but also because they really aren't directly linked anymore, and having them in this midstate just confuses people. [Renames comp_lookup to listen_lookup, since that's what it does]( |
||
|
|
419dd2b754 |
Spider Infestation Balance Rebalance Expansion Part 1 (#75204)
## About The Pull Request https://hackmd.io/dxhPOOdRRKW7siqPbpfmYQ?view The HackMD goes in-depth into what this PR is about ## Content ### Ambush Spider   ### Scout Spider    ## Tangle    ### Spiderlings    ## Why It's Good For The Game Currently, spiders have plenty of issues that make them a very 2d mentional antag they kill,die, and respawn which is boring and leads to a bunch of balance issues for their current design this PR both fixes the current issues spiders have and adds more depth into the antag. ## Changelog 🆑 add: Added 3 new spider types add: Added more spider abilities balance: Rebalanced spiders fix: Fixes spiderlings having density /🆑 --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
61795ee325 |
Cosmic Ascension Balance Patch (#74715)
## About The Pull Request Now the stargazer does more damage to people in the area and prioritizes mobs attacking them instead of random circuit bots 7 tiles away. It will also slowly heal you. Makes some abilities create more carpet fields when ascending. Increases combo times when ascending. Also makes the Star Gazer die only when the owner dies. Star Gazer will explode when it does die. Star Gazer has a damage aura that does heal the owner. ## Why It's Good For The Game I have seen a lot of people complaining that the cosmic ascension isn't good and not worth getting so I thought I would make it a little better. ## Changelog 🆑 balance: Star Gazer now explodes when it dies. balance: Star Gazer will only die when the owner dies. balance: Star Gazer will attack the most recent enemy that attacked him when on autopilot. balance: Star Gazer has an aura that slowly damages people and heals the owner. balance: Cosmic Ascension now buffs some spells. /🆑 |
||
|
|
f3f274de5c |
refactors poles and trees into basic mobs (#74812)
## About The Pull Request refactors poles and trees into basic mobs. If trees now see you holding a chainsaw, hatchet, or some wood they will get angry and knock you out for longer. Poles will run around giving some of their charge to APCs they find along the way. i did them both in this PR coz poles were a subtype of trees. ## Why It's Good For The Game refactor ## Changelog 🆑 refactor: refactors trees into basic mobs refactor: refactors poles into basic mobs add: If trees now see you holding a chainsaw, hatchet, or some wood they will get angry and knock you out for longer add: Poles will run around giving some of their charge to APCs they find along the way fix: cells charged by the pole will now have their icon correctly updated to reflect their charge /🆑 --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
9e11f73136 |
Lavaland Monster Sprite Update (#74299)
Updates most Lavaland mob sprites, merges some icon files and adjusts the pathing. ## About The Pull Request Updates Most Lavaland Mob Sprites with work provided by Sheets. Merges, splits, and moves a few icon files and icons to adjust for the new icons. Repaths the dmi locations and pixel shifts for the adjusted sprites. Examples:    ## Why It's Good For The Game Better quality sprites are better to look at. Putting sprites that are the same type in the same file is much saner. ## Changelog 🆑 imageadd: added new lavaland sprites, moved some sprites to a new location, adjusted pixel shift for the updated sprites, adjusted the name of some sprites. /🆑 --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> |
||
|
|
ccef887efe |
Lints Against Unmanaged Local Defines (#74333)
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW RATHER THAN AFTER THE FACT. ## About The Pull Request Hey there, This took a while to do, but here's the gist: Python file now regexes every file in `/code` except for those that have some valid reason to be tacking on more global defines. Some of those reasons are simply just that I don't have the time right now (doing what you see in this PR took a few hours) to refactor and parse what should belong and what should be thrown out. For the time being though, this PR will at least _halt_ people making the mistake of not `#undef`ing any files they `#define` "locally", or within the scope of a file. Most people forget to do this and this leads to a lot of mess later on due to how many variables can be unmanaged on the global level. I've made this mistake, you've made this mistake, it's a common thing. Let's automatically check for it so it can be fixed no-stress. Scenarios this PR corrects: * Forgetting to undef a define but undeffing others. * Not undeffing any defines in your file. * Earmarking a define as a "file local" define, but not defining it. * Having a define be a "file local" define, but having it be used elsewhere. * Having a "local" define not even be in the file that it only shows up in. * Having a completely unused define* (* I kept some of these because they seemed important... Others were junked.) ## Why It's Good For The Game If you wanna use it across multiple files, no reason to not make it a global define (maybe there's a few reasons but let's assume that this is the 95% case). Let me know if you don't like how I re-arranged some of the defines and how you'd rather see it be implemented, and I'd be happy to do that. This was mostly just "eh does it need it or not" sorta stuff. I used a pretty cool way to detect if we should use the standardized GitHub "error" output, you can see the results of that here https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792 ## Changelog Nothing that really concerns players. (I fixed up all this stuff using vscode, no regexes beyond what you see in the python script. sorry downstreams) |
||
|
|
bf6f81a9b5 |
Implements AddTraits and RemoveTraits procs for adding/removing multiple traits + swag unit test (#74037)
On the tin, doing it like this means we can reduce our overall line fingerprint whenever we have to add two or more traits from the same source on the same target. Especially helps when we get to the 4+ range of traits, a breath of fresh air even. Doesn't mean we have to do for loops, as that's already handled within the define as well. I replaced some of the checks with `length()` checks, let me know if I should switch it over to something else (maybe `islist()`)? We stack_trace whenever we're not passed a list reference on purpose, and sometimes var/lists are null by default (or just empty, making this redundant). ## Why It's Good For The Game I commonly feel the urge to write "use `AddTraits()`" or something in reviews, then am sad when I remember it doesn't exist. I will no longer be sad. Can ensure a lot more trait safety as well by using static lists- when both ADD_TRAIT_LIST and REMOVE_TRAIT_LIST re-use the same list, you are confident (from a static point of view) that everything that you want to be adding/removing works. I may have missed a few things where this could be used, but both macros implemented in this PR still use the same framework that was being used in the last four years- so stuff won't break if left untouched. Just a nifty new tool for developers. also fixed up some code in the area, numerous bugs were found and exploded |
||
|
|
296ca23aa1 |
Most actions cannot be used while incapacitated (#73513)
## About The Pull Request Fixes #39775 The `TRAIT_INCAPACITATED` trait is intended to block you from acting but does not inherently block actions. Actions only check for "conscious", "has available hands", "immobile", or "lying down". Most actions still _can't_ be used while incapacitated. This is because most actions are spells, most spells have invocations, and you can't talk while you are incapacitated. This is silly. I have resolved this by adding a new flag which blocks actions while incapacitated. This is somewhat redundant with "conscious" because most sources of that also make you incapacitated but not _always_, you might want the specificity. I have tried to be discerning about where this flag is applied, it is not in all cases (for instance you can still swallow implanted pills while incapacitated and such), but it's not only possible but I can't really avoid implementing this without it being a balance change in _some_ cases, Actions this effects are things such as: Xenomorph Tail Sweep, Lesser Magic Missile (cult constucts), Heretic Shadow Cloak, the Smoke spell in general, Conjuring (but not firing) Infinite Guns, Mime spells Times when these actions will no longer be available but were previously are such times as when the mob is: Stamina Crit, Stunned, Paralysis, and Time Stopped. ## Why It's Good For The Game The incapacitated trait is applied by effects which should block acting but still permits several actions which logically would be prevented. This fortunately hasn't come up too often due to the high ratio of actions with invocations, but it feels bad to stun someone and then have them still able to perform an action they logically wouldn't be able to take while stunned. This is especially egregious in the case of Time Stop (the only way to stun a lot of the mobs effected by this) but that's a rare pick on a rare antagonist and would also rarely be used on these mobs, so a bit of an edge case. ## Changelog 🆑 fix: Many spell-like abilities which could be stunned, paralysed, or frozen in time now cannot be. /🆑 |
||
|
|
4599842d7c |
Makes Shake() proc work (#73480)
## About The Pull Request Fixes #72321 Fixes #70388 The shake proc didn't work and hasn't for ages. I remember it having worked at some point, but it was quite a long time ago. I cannot guarantee that the end result here is the same as it was, the reason here being that I have no idea how this proc ever worked in the first place. My limited understanding of the `animate` proc implies that the previous implementation as written would never have acted as you would expect it to, but clearly at some time in the past it did work. A mystery. As a result of the previous, possibly because the proc never _did_ work as expected and just did something which looked vaguely correct most of the time, both the default values and the values people were passing into this proc were completely ridiculous. Why would anyone ever want to pixel shift an object with a range of _15_ pixels in all directions? That's half a full tile! And why would you want it to do this for 25 seconds? So I also changed the values being passed in, because you really want pretty small numbers passed into here most of the time. Here's a video of everything that vibrates: https://www.youtube.com/watch?v=Q0hoqmaXkKA The exception is the v8 engine. I left this alone because it seems to try and start shaking while in your hands, which doesn't work, and I don't know how to fix that. This has potentially _also_ never worked. ## Why It's Good For The Game Now you can see intended visual indicators for: - Lobstrosities charging. - Beepsky being EMPed. - The Savannah Ivanov preparing to jump. - The DNA infuser putting someone through the spin cycle. - The mystery box admin item I had no previous idea even existed (fun animations on this one). - Anything else which wants to use this proc to create vibrating objects in the future. ## Changelog 🆑 fix: Lobstrosities and Tarantulas will once more vibrate to let you know they're about to charge at you. fix: The Savannah Ivanov will once more vibrate to let you know it's about to jump into the air. fix: The DNA infuser will now vibrate to let people know that it's busy blending someone with a dead animal. /🆑 |
||
|
|
ab307032ed |
Nightvision Rework (In the name of color) (#73094)
## About The Pull Request Relies on #72886 for some render relay expansion I use for light_mask stuff. Hello bestie! Night vision pissed me off, so I've come to burn this place to the ground. Two sections to discuss here. First we'll talk about see_in_dark and why I hate it, second we'll discuss the lighting plane and how we brighten it, plus introducing color to the party. ### `see_in_dark` and why it kinda sucks https://www.byond.com/docs/ref/#/mob/var/see_in_dark See in dark lets us control how far away from us a turf can be before we hide it/its contents if it's dark (not got luminosity set) We currently set it semi inconsistently to provide nightvision to mobs. The trouble is stuff that produces light != stuff that sets luminosity. The worst case of this can be seen by walking out of escape on icebox, where you'll see this  Snow draws above the lighting plane, so the snow will intermittently draw, depending on see_in_dark and the luminosity from tracking lights. This would in theory be solvable by modifying the area, but the same problem applies across many things in the codebase. As things currently stand, to be emissive you NEED to have a light on your tile. People are bad at this, and honestly it's a bit much to expect of them. An emissive overlay on a canister shouldn't need an element or something and a list on turfs to manage it. This gets worse when you factor in the patterns I'm using to avoid drawing lights above nothing, which leads to lights that should show, but are misoffset because their parent pixel offsets. It's silly. We do it so we can have things like mesons without just handing out night vision, but even there the effect of just hiding objects and mobs looks baddddddd when moving. It's always bothered me. I'll complain about mesons more later, but really just like, they're too bright as it is. I'm proposing here that rather then manually hiding stuff based off distance from the player, we can instead show/hide using just the lighting plane. This means things like mesons are gonna get dimmer, but that's fine because they suck. It does have some side effects, things like view() on mobs won't hide stuff in darkness, but that's fine because none actually thinks about view like that, I think. Oh and I added a case to prevent examining stuff that's in darkness, and not right next to you when you don't have enough nightvision, to match the old behavior `see_in_dark` gave us. Now I'd like to go on a mild tangent about color, please bare with me ### Color and why `lighting_alpha` REALLY sucks You ever walk around with mesons on when there's a fire going, or an ethereal or firelocks down. You notice how there isn't really much color to our lights? Doesn't that suck? It's because the way we go about brighting lighting is by making everything on the lighting plane transparent. This is fine for brightening things, but it ends up looking kinda crummy in the end and leads to really washed out colors that should be bright. Playing engineer or miner gets fucking depressing. The central idea of this pr, that everything else falls out of, is instead of making the plane more transparent, we can use color matrixes to make things AT LEAST x bright. https://www.byond.com/docs/ref/#/{notes}/color-matrix Brief recap for color matrixes, fully expanded they're a set of 20 different values in a list Units generally scale 0-1 as multipliers, though since it's multiplication in order to make an rgb(1,1,1) pixel fullbright you would need to use 255s. A "unit matrix" for color looks like this: ``` list(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 ) ``` The first four rows are how much each r, g, b and a impact r, g, b and well a. So a first row of `(1, 0, 0, 0)` means 1 unit of r results in 1 unit of r. and 0 units of green, blue and alpha, and so on. A first row of `(0, 1, 0, 0)` would make 1 red component into 1 green component, and leave red, blue and alpha alone, shifting any red of whatever it's applied to a green. Using these we can essentially color transform our world. It's a fun tool. But there's more. That last row there doesn't take a variable input like the others. Instead, it ADDS some fraction of 255 to red, green, blue and alpha. So a fifth row of `(1, 0, 0, 0)` would make every pixel as red as it could possibly be. This is what we're going to exploit here. You see all these values accept negative multipliers, so we can lower colors down instead of raising them up! The key idea is using color matrix filters https://www.byond.com/docs/ref/#/{notes}/filters/color to chain these operations together. Pulling alllll the way back, we want to brighten darkness without affecting brighter colors. Lower rgb values are darker, higher ones are brighter. This relationship isn't really linear because of suffering reasons, but it's good enough for this. Let's try chaining some matrixes on the lighting plane, which is bright where fullbright, and dark where dark. Take a list like this ``` list(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -0.2, -0.2, -0.2, 0 ) ``` That would darken the lighting a bit, but negative values will get rounded to 0 A subsequent raising by the same amount ``` list(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0.2, 0.2, 0.2, 0 ) ``` Will essentially threshold our brightness at that value. This ensures we aren't washing out colors when we make things brighter, while leaving higher values unaffected since they basically just had a constant subtracted and then readded. ### But wait, there's more You may have noticed, we gain access to individual color components here. This means not only can we darken and lighten by thresholds, we can COLOR those thresholds. ``` list(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0.1, 0.2, 0.1, 0 ) ``` Something like the above, if applied with its inverse, would tint the darkness green. The delta between the different scalars will determine how vivid the color is, and the actual value will impact the brightness. Something that's always bothered me about nightvision is it's just greyscale for the most part, there isn't any color to it. There was an old idea of coloring the game plane to match their lenses, but if you've ever played with the colorblind quirk you know that gets headachey really fast. So instead of that, lets color just the darkness that these glasses produce. It provides some reminder that you're wearing them, instead of just being something you forget about while playing, and provides a reason to use flashlights and such since they can give you a clearer, less tinted view of things while retaining the ability to look around things. I've so far applied this pattern to JUST headwear for humans (also those mining wisps) I'm planning on furthering it to mobs that use nightvision, but I wanted to get this up cause I don't wanna pr it the day before the freeze. Mesons are green, sec night vision is red, thermals orange, etc. I think the effect this gives is really really nice. I've tuned most things to work for the station, though mesons works for lavaland for obvious reasons. I've tuned things significantly darker then we have them set currently, since I really hate flat lighting and this system suffers when interacting with it. My goal with these is to give you a rough idea of what's around you, without a good eye for detail. That's the difference between say, mesons, and night vision. One helps you see outlines, the other gives you detail and prevents missing someone in the darkness. It's hard to balance this precisely because of different colored backgrounds (looking at you icebox) More can be done on this front in future but I'm quite happy with things as of now ### **EDIT** I have since expanded to all uses of nightvision, coloring most all of them. Along the way I turned some toggleable nightvision into just one level. Fullbright sucks, and I'd rather just have one "good" value. I've kept it for a few cases, mostly eyes you rip out of mobs. Impacted mobs are nightmares, aliens, zombies, revenants, states and sort of stands. I've done a pass on all mobs and items that impact nightvision and added what I thought was the right level of color to them. This includes stuff like blobs and shuttle control consoles As with glasses much of this was around reducing vision, though I kept it stronger here, since many of these mobs rely on it for engaging with the game <details> <summary> Technical Changes </summary> #### Adds filter proc (the ones that act like templates) support to filter transitions. Found this when testing this pr, seemed silly. #### Makes our emissive mask mask all light instead This avoids dumbass overlay lighting lighting up wallmounts. We switch modes if some turfflags are set, to accomplish the same thing with more overhead, and support showing things through the darkness. Also fixes a bug where you'd only get one fullscreen object per mob, so opening and closing a submap would take it away Also also fixes the lighting backdrop not actually spanning the screen. It doesn't actually do anything anymore because of the fullscreen light we have, but just in case that's unsued. Needs cleanup in future. #### Moves openspace to its own plane that doesn't draw, maxing its color with a sprite This is to support the above We relay this plane to lighting mask so openspace can like, have lighting #### Changes our definition of nightvision to the light cutoff of night vision goggles and such Side affect of removing see_in_dark. This logic is a bit weak atm, needs some work. #### Removes the nightvision spell It's a dupe of the nightvision action button, and newly redundant since I've removed all uses of it #### Cleans up existing plane master critical defines, ensures trasnparent won't render These sucked Also transparent stuff should never render, if it does you'll get white blobs which suck </details> ## Why It's Good For The Game Videos! (Github doesn't like using a summary here I'm sorry) <details> Demonstration of ghost lighting, and color https://user-images.githubusercontent.com/58055496/215693983-99e00f9e-7214-4cf4-a76a-6e669a8a1103.mp4 Engi-glass mesons and walking in maint (Potentially overtuned, yellow is hard) https://user-images.githubusercontent.com/58055496/215695978-26e7dc45-28aa-4285-ae95-62ea3d79860f.mp4 Diagnostic nightvision goggles and see_in_dark not hiding emissives https://user-images.githubusercontent.com/58055496/215692233-115b4094-1099-4393-9e94-db2088d834f3.mp4 Sec nightvision (I just think it looks neat) https://user-images.githubusercontent.com/58055496/215692269-bc08335e-0223-49c3-9faf-d2d7b22fe2d2.mp4 Medical nightvision goggles and other colors https://user-images.githubusercontent.com/58055496/215692286-0ba3de6a-b1d5-4aed-a6eb-c32794ea45da.mp4 Miner mesons and mobs hiding in lavaland (This is basically the darkest possible environment) https://user-images.githubusercontent.com/58055496/215696327-26958b69-0e1c-4412-9298-4e9e68b3df68.mp4 Thermal goggles and coloring displayed mobs https://user-images.githubusercontent.com/58055496/215692710-d2b101f3-7922-498c-918c-9b528d181430.mp4 </details> I think it's pretty, and see_in_dark sucks butt. ## 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: The darkness that glasses and hud goggles that impact your nightvision (think mesons, nightvision goggles, etc) lighten is now tinted to match the glasses. S pretty IMO, and hopefully it helps with forgetting you're wearing X. balance: Nightvision is darker. I think bright looks bad, and things like mesons do way too much balance: Mesons (and mobs in general) no longer have a static distance you can see stuff in the dark. If a tile is lit, you can now see it. fix: Nightvision no longer dims colored lights, instead simply thresholding off bits of darkness that are dimmer then some level. /🆑 |
||
|
|
728a0f1b91 |
Grand Ritual: Alternate Wizard objective (Wizard Events II) (#72918)
Adds an alternate greentext objective for Wizards known as the "Grand Ritual". This was initially the gimmick of a different wizard-related antagonist downstream. I didn't get permission to port it, so I'm attaching it to regular Wizards instead. Wizards will spawn in with a new Grand Ritual button next to their antagonist info button. Pressing it will pinpoint them towards their next Ritual Location (a randomly chosen region of the space station). Once within that location, pressing it will summon a magic circle and obliterate any dense objects which are in the way. This also puts the ability on a two minute cooldown. Clicking on the magic circle with an empty hand will begin a three-stage invocation to gather magical power. You can interrupt this invocation at any time and will resume from the last stage you completed (if you finished two stages you only need to do one more). Once you complete a ritual, a random event will be triggered based on how many rituals you have performed so far. These tend to be ones which annoy the crew in some manner, and Wizard Events are included in the list. Additionally, something weird will usually happen to the room you are in. Then you are assigned a new location and can toddle off to do it again. Once you have done this three times, you will be picked up by the station's sensors every time you start a subsequent ritual and should expect annoyed company to come investigate. Once you have done this six times, you can finally spend all of that accumulated power on the seventh Grand Finale ritual. Completing this grants you victory at the end of the round and will have a larger, flashier effect which you can pick from a list of options, think of it like a wizard equivalent of a Traitor Final Objective or Heretic Ascension. After that you can still keep doing rituals if you want to pester the crew further by summoning more random events, you've already "won" at this point so now it's your job to make them want to go home. I think it'd be more fun to just find out what the Finale ritual can do by seeing it happen but maintainers will probably want a list of its precise capabilities, so here it is: Currently completing a ritual also has a chance to create Heretic Reality Tears (of both varieties, available for Heretics to eat and visible to crew) as a kind of cross-antagonist interaction which seemed to make sense to me but if this seems thematically or mechanically inappropriate it's easy to strip out. |