## About The Pull Request
Fixes#52946
This has been broken ever since #44112 which apparently removed the proc
in this component which selected a target for performance reasons and
just... didn't replace it with anything else? So it's been bricked ever
since.
In order to restore the removed mouse tracking behaviour I implemented
the pattern used in scoped weapons and the kinesis module. As this was
the third thing I could find to use this code, I abstracted it out into
an object where most of the shared behaviour lives. I tested those
things too and they still seem to do what they used to.
Here it is in action:
https://user-images.githubusercontent.com/7483112/221954852-22244bb1-7c87-452d-a9b0-ebed81c4c1ef.mp4
Because this spell now applies a full screen overlay in order to
function, it's really begging for someone to make some touhou-style art
with cards and patterns around the edge of the screen while you are in
aiming mode, but I'm not going to be the one to make it.
I tidied this component up and refactored it as best I could while I was
reworking it to use a full screen overlay but I am... not totally
confident that it should be a component at all given that it keeps being
created and destroyed. But also it has worked that way for like four
years now, so who am I to say.
Oh yeah also the icon for this spell broke, so I fixed it.
## Why It's Good For The Game
Makes a reasonably terrible wizard spell marginally less bad.
Maybe now that this component works, some other things can use it?
If we make a fourth thing which follows your cursor it won't need to
copy/paste code around.
## Changelog
🆑
fix: Spell Cards from the Wizard spell will now home in somewhat on the
target nearest to your cursor.
fix: The Spell Cards spell now displays the correct icon instead of a
big red "error" text.
/🆑
## About The Pull Request
The Nar'Sie summon message will now only use the original name of the
ritual site area. You can no longer fake out the ritual announcement by
renaming the area with the CE blueprints.
The ritual site locator HUD popup now also uses the original area names,
to prevent the same issue from occurring.
## Why It's Good For The Game
Closes#73036.
## Changelog
🆑
fix: The cultist ritual site locator and Nar'Sie summon message will no
longer use area names modified by the CE's blueprints.
/🆑
## About The Pull Request
- Juggernaut and Rust Walker projectiles were subtyped off of magic,
which is `nodamage`.
- The juggernaut actually had a copy+paste error with their type
`on_hit` which caused none of their special effects on hit ("relative
patching catches this")
- Then I realized projectiles have this var `nodamage` which is, for all
intents and purposes, just `damage > 0`. it's not checked for pacifism,
it's just that. This is dumb. So very dumb, so I removed it.
- There are, however, a few situations which used it in a unique way,
such as the blast wave cannon. This is why I replaced it with a proc,
`is_hostile_projectile`, for certain situations to actually find out if
the projectile is damaging. Projectiles can override this on a per type
basis by default, damaging projectiles = hostile.
- This has a chance to break some things, but I ... kinda doubt it will.
Fixes#73756
## Why It's Good For The Game
Projectiles that act as they should, less dumb vars
## Changelog
🆑 Melbert
fix: Fixes Juggernaut / Rust Walker projectiles doing zero damage
fix: Fixes Juggernaut projectiles not doing bonus damage to nearby
structures
code: Removed projectile nodamage var, replaces it with just checking
for damage
/🆑
## About The Pull Request
This one is a little bit of a more abstract change than my last traitor
objective rebalancing PR.
The idea here is that I think that the objectives which have you
sabotage a frequently used machine (lathes or the ORM, but we can maybe
expand it to others following this?) are potentially pretty good but
limitations in how the objective are tracked mean that people go about
them in a boring way which rarely inconveniences anyone.
I have reworked these objectives so that you can choose to apply a
provided item to the machine over 10 seconds. The next interaction
following this (clicking on it, or in the case of the ORM loading any
ore into it) will cause the machine to explode, destroying itself and
lightly damaging people nearby (explosion damage is... variable, but
it's a light explosion so it won't instantly kill anyone).
There is a 0.5 second grace period between the bomb triggering and the
explosion actually happening, which players can use to perform some kind
of tactical reaction or simply to feel regret.
Here's a video:
https://www.youtube.com/watch?v=xNIaHsA9YFE
Trapped machines will intermittently beep, though at a volume which is
hard to detect from more than two tiles away, and can be defused by
using a screwdriver on the machine.
If you choose to do this then you will get a little bonus to TC and
reputation, but only if the trap is successfully sprung. This means that
sabotaging a machine in an empty department is unlikely to lead to quick
success.
You can also still do it with screwdriver and crowbar way if you are
boring but this means you will only get reputation and not any
telecrystals.
The two objectives to destroy a radio server or the research machine
remain as they were.
Also I refactored how we set which machines are targets for these
objectives so it doesn't iterate over every machine in the world every
time.
## Why It's Good For The Game
Traitor objectives (and antagonist objectives in general) should:
- Present you with a somewhat engaging task
- Encourage you to interact with at least one other player (at least by
"attempting to sneak past them")
- Move the state of the round forward in some way, usually by creating
inconvenience for at least one other person
Prior to this change you could, and people often did, complete this
objective by accessing a machine that you already _have_ access to,
using a screwdriver and crowbar on it, and then reassembling it.
This prompts interaction with nobody, and inconveniences nobody.
Following this change people will be encouraged to:
- Actually destroy the machine.
- Probably harm somebody.
- Potentially cause some collateral damage.
- Make loud sounds and flashing lights to delight people of all ages.
Even if you opt to set the device in a little-used department and then
blow yourself up, that will prompt you to go and interact with someone
in medbay and will also look pretty suspicious in a way that's much
harder to track with the previous objective.
Also I might reuse this component again in the future, you never know.
## Changelog
🆑 Jacquerel, sprite by J(Clearly Lying)
balance: Traitor objectives which ask you to destroy lathes or the ORM
provide an optional bonus if you _booby trap_ the machine using a
provided tool. This causes the machine to explode the next time it is
interacted with.
balance: Performing the objective without rigging the machine to explode
awards no TC, using it awards more TC than it did previously.
/🆑
## About The Pull Request
The original issue caused by #70037
Esword issue caused by #73716
Originally the transforming component did not override the inhand icon
state of the the item on its own (instead putting the onus on the item
itself if they wanted unique behavior). It was changed to always update
inhand icon state, most of which don't have one
I don't really like this fix, it should be explicit "I want inhand to
change" and not default, but this will work for now
Also the PR that fixed the Jaws issue didn't actually set the var they
created
Fixes#73805Fixes#73711 (Actually)
## Why It's Good For The Game
Invisible sword bad
## Changelog
🆑 Melbert
fix: Fixed a eswords, some tools, and some other misc. items from being
invisible while extended / active
fix: Teleshields and other misc items not extending in hand when active
fix: Switchblades click on extend again
fix: Pendrivers click on extend
/🆑
## About The Pull Request
The gist is that people thought that this was a boolean value, which was
fucked up. It's not a boolean value, it accepts anything between 0 and
2. So, let's re-arrange the checks and framework, give it some
descriptive defines, just so people know what the fuck "2" actually
does. `DOOR_DEFAULT_CHECKS` (0) does stuff normally,
`DOOR_FORCED_CHECKS` 1 typically just checking if we aren't emagged shut
or something (i suppose it could happen), and `DOOR_BYPASS_CHECKS` (2)
means that we just get the fucking door open if it isn't physically
sealed shut/open somehow.
I don't know if `forced` has ever _been_ a boolean, but for some reason
people thought it was.
I also enforced boolean returns instead of passing back null. This did
not matter for close() but i think it's silly to have a TRUE/null
dichotomy so that was also touched up.
## Why It's Good For The Game
Much better to read, less confusing, less stupid. It's been irritating
me for a while now, so let's just implement it now. Had to make a few
awkward concessions in order to fit this into the current code
framework, but it should be a lot nicer. I also shuffled the order of
some code around because certain placements didn't make any sense (early
returns not being in the right spot for an early return).
## Changelog
Nothing that should concern players.
## About The Pull Request
- Add Component was supposed to use a named arg, quick fix
- While testing the fix I noticed it doesn't properly remove the
appearance when the item is lost, cuts the overlay on failures
## Why It's Good For The Game
Mothblox said this broke things (it was making a weakref of a callback
on accident)
## Changelog
🆑 Melbert
fix: Luminsecent slime actions correctly update their appearance when
integrating or ejecting slime cores
/🆑
Refactored how eggs growing into chicks is implemented, and
how the number of chickens and chicks are tracked. It's now possible for
admins to make anything into an egg.
- Instead of the "fertility" of an egg being whether or not it's
processing (along with the ugliness of adding a variable to a item
defined in another file), fertile eggs are now implemented via
components.
- The number of chickens in the world, and the number of chicks hatched
from egg throwing are now global variables, rather than static variables
on the class.
I've tried very hard to keep these changes completely feature freeze
compatible, any variation in the old behaviour is non-intended (at this
point).
## About The Pull Request
This is quite literally the same behavior but faster, and also catches
improper arguments better than the old macro/proc approach.
Credit to Lohikar for writing the macro.
Port of https://github.com/DaedalusDock/daedalusdock/pull/196
Also, `world.ImmediateInvokeAsync()` never set a return value, so
expecting one was never valid behavior.
At MSO's request, the documentation of `spawn(-1)`:
As per the reference, calling `spawn()` with a negative value will
execute the spawned code until a blocking action (such as `sleep()`) is
encountered. Then, it will step outside of the spawned code, and
continue the proc. This is the same behavior as calling a `waitfor =
FALSE` proc. Specifically, under the hood, `spawn(-1)` creates a copy of
the callstack like `sleep()`, incase the spawned code is blocked and
needs to be rescheduled.
As an added bonus, `spawn(-1)` silences SHOULD_NOT_SLEEP errors, whereas
`waitfor = FALSE` does not.
## Why It's Good For The Game
ITS FREE FUCKING CPU TIME
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
## About The Pull Request
Adds a backend for sourced components. which was requested by @Fikou
Also cleans up a little bit of the AddComponent logic
## Why It's Good For The Game
Backend for fancy stuff and having a component from multiple sources
---------
Signed-off-by: GitHub <noreply@github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
## About The Pull Request
Quite a lot of mobs had faction defines as a string, which always has a
chance for error. For example, the clown mob spawner had their faction
written as "clown", when the official faction name was "clowns", and a
define existed for it anyways! This PR moves every single string based
factions over here. No references or special role factions. Hopefully I
didn't miss anything.
I also moved a global define used for picking your uplink provider's
flavour to the only file that used it, datum_traitor.dm, and renamed
them a bit to avoid confusion.
I have also noticed that the mimic faction was assigned to the petrified
player with += instead of |=. |= would ensure no duplicate factions, so
I have changed it.
Future improvement:
I have noticed that there is a lot of bloat with factions that contain
only one or two entries (examples: gnomes, floating eyeballs, penguins,
the pet lizards), and some always appear in pairs (vines and plants, the
rare exceptions being killer tomatoes and strange reagent spawned pine
trees), but trimming consolidating them is a matter for a different
time.
## Why It's Good For The Game
Makes assigning factions a bit less error prone.
I can finally remove the ```/// Later all mob factions will be moved
here and their current factions replaced with faction defines.```
comment. Later is NOW.
## Changelog
Nothing player facing
## About The Pull Request
The netherworld mob refactor PR added a component called `damage_buffs`
which... was both kind of a little bit pointless and also didn't do what
the name said it did.
This adds a new component which actually does what that component
promised to do, and does it more reliably.
The previous system had sort of odd behaviour where a Migo would start
moving faster as it took damage but _only_ if it took damage with an
identifiable mob, so damage from the environment or lava or an explosion
or anything else which doesn't come with someone to blame wouldn't
update the mob, and neither would its health going back _up_... until
someone punched it at which point anything it should have been doing
before then would suddenly update.
This adds a new component which simply listens to
`COMSIG_LIVING_HEALTH_UPDATE` instead of `COMSIG_ATOM_WAS_ATTACKED` and
then interpolates the provided maximum and minimum values smoothly based
on how close you are to a maximum or minimum health threshold.
This is slightly different from the original behaviour which didn't
necessarily have those things change linearly and only did it in
increments of 25%... but this is cleaner.
## Why It's Good For The Game
Fixes some odd behaviour with these mobs.
Hopefully makes the code both cleaner and more reusable in the future.
## Changelog
🆑
refactor: Migos, Creatures, and Blank Bodies use a new shared component
to update their stats which scales smoothly as they take damage rather
than in stages.
fix: Migos, Creatures and Blank Bodies will all update their stats when
taking or losing damage regardless of it was from an identifiable enemy.
/🆑
## About The Pull Request
While I was touching the Creature file for another PR (#73629) I noticed
that an identical proc was implemented here and on Statue.
I moved it into a component and managed to hook it into signals which
have return flags.
This required a bit of a refactor of their abilities too, but that was
for the best because one of them had a reimplementation of Jaunt which
could have just been a subtype of Jaunt, and none of their abilities had
icons.
I also made `spell` send `COMSIG_MOB_ABILITY_STARTED` in `PreActivate`
because it completely overrides the parent and doesn't do that as a
result.
## Why It's Good For The Game
I'll be honest this is mostly because I was looking at the code and
didn't like it, I don't think there were any bugs related to this but it
does reduce chat spam a little bit?
It should make this behaviour more maintainable and useful in the
future, as we're not copying and pasting multiple procs between
different files (for both this behaviour and jaunting).
## Changelog
🆑
refactor: The actions of Statues and Creatures which can't be used while
seen now share logic, and will not spam chat with feedback.
/🆑
## About The Pull Request
Went down a rabbit hole with touching the migo files... I noticed that
all of those mobs had a reference to `/datum/component/spawner` on them
which looked a bit off.
After investigation it seems like this component is breaking the
prinicple of using an ECS system by assigning a reference to itself on
every mob it creates? There doesn't seem to be a good reason to do that,
as we can just use signals.
This also doesn't work for basic mobs, because most of them don't _have_
this reference to assign to. If we don't want to add it to every basic
mob (and why would we?) it would make more and more converted mobs
invalid for spawners.
Also it means that it has never been valid to create a Monkey spawner,
which seems like a big oversight.
I replaced all of the parts dependent on telling the mob where it was
spawned from with signals.
Megafauna seemed to have a reasonable amount of code related to "not
straying a certain distance from what spawned them", but as far as I can
tell unless someone varedited one onto a map we have never had a spawner
which creates megafauna (nor would we want one? That would virtually
always cause it to respawn instantly after being killed).
## Why It's Good For The Game
Improves future maintainability
Brings implementation up to current standards.
Makes the code work the way I would have assumed it already worked in
the first place.
## Changelog
🆑
fix: Mob spawners will no longer break if instructed to spawn certain
kinds of basic mob, or monkeys.
/🆑
## About The Pull Request
Fixes: #73610
I've elevated the code that prevents you from grabbing the thing your
riding from the creature subtype to the main riding component. I cannot
think of any ridden vehicles that you should be able to grab while
riding so I don't think there is any issue in making this change,
although please advise me if this is not true.
## Why It's Good For The Game
Using a wheelchair for space traversal seems like a bug.
## Changelog
🆑
fix: You can no longer drive ridable vehicles without keys or in space.
/🆑
🆑 coiax
fix: A chef who is beheaded, and the head stitched on another body will
still see their food as their own.
/🆑
## Why It's Good For The Game
Having food ownership be based on the mind, rather than the mob, makes
it resilient to body-swap, mind-swap, podcloning (cloning!?),
situations. Because even though you may have been reduced to just a
head, that stew is still yours, you still made it.
## About The Pull Request
Fixes#73546
In #73481 I made the foolish assertion that it's never correct for
someone to eat something which isn't physically nearby.
I had of course forgotten that while Moths _think_ they can eat clothes,
what they are actually eating is the abstract concept of clothes if they
were edible, functionally nothing, which exists nowhere.
By moving the check to only run when you are trying to eat a turf
(conveniently, no clothing is also a turf... yet) I allow them to return
to their delusion.
Alternate fixes and why I didn't do them:
- Always allow people to eat food which is in nullspace. This feels
pretty gross.
- Put the abstract clothes food physically inside the clothes. I assume
this wasn't done because there's some scenarios where you would be able
to remove abstract clothes food from the clothes, so that's not
desirable.
- Move the food into the actual clothes object just before taking a bite
and then put it back in nullspace again. This is silly.
- Try to make moth clothes food work in a way which doesn't involve
creating an imaginary food item in the void. I don't want to do this.
## Why It's Good For The Game
It's funny to eat clothes I guess.
## Changelog
🆑
fix: Moths can eat clothes again.
/🆑
<!-- 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
[Fixes a bug where anything fully dark on the floor plane would mask the
lighting
plane](a1a03dc339)
I fucked it up boys, needed to take alpha into account here
[Fixes pais getting parallax on icebox because their location was
nested](81252e0f45)
God I hate this place (Note when I say get I mean they got the plane
master that controls it, not that they actually got it displayed. That
does appear to sometimes happen but I have no idea why)
[Fixes double flashlights not activating if enabled in
place](efb8b641ea)
[efb8b64](efb8b641ea)
cast_directional_light removes the lighting appearance, because it's
gonna modify it, but it turns out because appearances are static when
they're in like underlays/overlays, this could remove the WRONG UNDERLAY
This lead to double held flashlights just... not working until you
rotated. V stupid.
I've also had to move the flag set to make the overlay add in
cast_directional_light work. Depression
## Why It's Good For The Game
Closes#73535, closes#73517, closes#73518, and fixes part of #73471
<!-- 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. -->
🆑
fix: Fixes activating two flashlights without moving only turning on one
flashlight (until you move)
fix: Purely black things drawn on the floor (like carpets, those foam
dispensers, etc) will no longer cause things on top of them to be fully
masked in darkness
/🆑
<!-- 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. -->
## About The Pull Request
Fixes: #61449
Monster tackles (the top tackle result that automatically applies an
aggro-grab) now checks if the user is getting stamcrit from the stamina
damage that comes from launching the tackle. If not, it proceeds as
normal and applies the aggro-grab, but if it does stamcrit, the tackler
instead extra stamina damage/paralyze/knockdown in lieu of the autograb.
This resolves the issue with the aggro-grab slowdown applying
permanently, since that grab shouldn't have been possible to land in the
first place.
Fixes: #50888
I was lazy when I first implemented tackles, so if you tackled a target
with a range less than the gloves' min_distance (dolphin and rocket
gloves), it would simply launch you the min_distance range in the
nearest cardinal/diagonal direction. It now uses the angle you're
launching towards, which means you'll leap closer to where you actually
clicked on, and hopefully make rocket gloves slightly less suicidal.
Also I raised the amount of objects you can knock off a table with a
tackle from 12 to 18 because it's funny.
## Why It's Good For The Game
Tackles are more consistent and less buggy. Also you can shotgun more
shards of glass stacked on a table at people at once with rocket gloves.
## Changelog
🆑 Ryll/Shaps
fix: Landing a monster tackle that applies an auto aggro-grab while
stamcrit will no longer try applying an aggro-grab that leads to a
permanent slowdown to the user, and will instead just knock the target
down a bit harder.
fix: Launching dolphin and rocket glove tackles on targets at ranges
shorter than their minimum distance will be more accurate at targeting
where you clicked at, rather than locking you into the nearest
cardinal/diagonal direction.
balance: You can now knock more things off a table full of stuff by
tackling it than you could before.
/🆑
## About The Pull Request
Fixes#73115, don't you love telepathy?
Just adds a range check to the general "can I eat this now?" proc. I
couldn't think of any situation where you should be able to eat
something which isn't next to you.
I tested it and you can still feed people and eat food from your
inventory.
## Why It's Good For The Game
It's funny to be able to eat pizza floor with your brain but not
intended.
## Changelog
🆑
fix: You can no longer eat pizza floor tiles with your brain.
/🆑
## About The Pull Request
### Refactor
Turns all the behavior for the nuke disk raising lone op probability
when unsecured into a new component, the "Keep Me Secure" component. As
an example (and really, I made it to test that the component was
actually working), there is a new admin plush called the "whiny plushie"
that will change icon depending on whether it is secure or not. Useful!
### Examine
I also added an examine message. Will explain below
## Why It's Good For The Game
The examine message was really what this entire pr's purpose was really
for.
>
[Capsandi](https://tgstation13.org/phpBB/memberlist.php?mode=viewprofile&u=7767)
wrote:
[↑](https://tgstation13.org/phpBB/viewtopic.php?p=665827#p665827)Wed Feb
15, 2023 2:42 pm
Someone needs to pr some sort of indicator as to whether the disk is
'secure' or not so players who don't know about the niche lone op
mechanic won't make the same intuitive assumption (though swat has been
trolled for putting it in the safe before).
I agree with this for the same reasons I did #73016 so I'll restate the
point with it here: A piece of banning a captain recently was that they
didn't secure the disk, but there is no indication in game that the disk
has special condiitons that trigger lone op, just that it should be kept
safe (which yeah, nuke ops want it). I'd rather remove the ambiguity of
a captain knowing this mechanic or not for the sake of the game, a
single examine for it is harmless
I'm considering this administration, not a feature. If maints want me to
take it out and have this be refactor only, that's fine with me
## Changelog
🆑
refactor: Refactors how nuclear activation disk works. Shouldn't notice
a whole lot but if you do, it might be because of this.
admin: Disk now has an examine message for whether it's secure or not,
to make it less ambiguous for players.
/🆑
## About The Pull Request
Fixes#73439
Lightgeists use `heal_overall_damage` to heal, but despite the name that
actually only heals burn, brute, and stamina damage.
It will now prompt an error message if you try to heal someone who
doesn't have any of those damage types.
Simpler mobs can't take toxin or oxyloss damage so this has no effect on
spiders (the other user of this component).
Also during my conversion I forgot to set the lightgeist healing time to
0, so I did that too.
I thought about maybe changing this so that they _can_ heal toxin damage
but they've existed without being able to do it for so long that I don't
think it would be a "bug fix" at that point, I'll maybe adjust the
component behaviour further (to use `heal_ordered_damage` instead
probably) after this month. Until then I technically can't do it without
affecting Spider balance a little bit.
## Why It's Good For The Game
Makes it a _little_ clearer why someone's health doesn't increase when
they are clicked on.
Restores lost functionality.
## Changelog
🆑
fix: Lightgeists won't try to heal any damage which isn't burn or brute,
because they can't.
fix: Lightgeists don't need to perform an action bar in order to heal
someone, which was added by mistake.
/🆑
This builds on what #69790 did and improved the code even further.
Notable things:
- `Topic()` is a deprecated proc in our codebase (replaced with
Javascript tgui) so it makes sense to rename `canUseTopic` to
`can_perform_action` which is more straightforward in what it does.
- Positional and named arguments have been converted into a easier to
use `action_bitflag`
- The bitflags adds some new checks you can use like: `NEED_GRAVITY |
NEED_LITERACY | NEED_LIGHT` when you want to perform an action.
- Redundant, duplicate, or dead code has been removed.
- Fixes several runtimes where `canUseTopic` was being called without a
proper target (IV drips, gibber, food processor)
- Better documentation for the proc and bitflags with examples
Taking items from storages actually puts it on the floor and then in
your hands, which isnt really caught by movement signals. So deletes the
hyperspace component on item pickup
closes#72727🆑
fix: fixes taking items from inventories glitching out in hyperspace
/🆑
## About The Pull Request
Fixes#69507
Occasionally a mob would start processing itself as falling into a chasm
while already falling into a chasm. This would reset the "stored"
appearance data to the data from the end of the fall (where you are
invisible and size 0) and so just leave it in that state.
I couldn't find a way to replicate this reliably through gameplay but
spamming "get mob" worked.
I fixed it by just... not doing any of that stuff if you're already
falling into a chasm.
Also while unreported I noticed that `notransform` could get stuck on as
well, which it shouldn't do.
## Why It's Good For The Game
It's hard enough to rescue someone from a chasm, if their corpse is also
invisible and intangible afterwards then that's probably not ideal.
## Changelog
🆑
fix: Things dropped into a chasm should no longer occasionally become
invisible and intangible.
/🆑
## About The Pull Request
Fixes#70865
I kind of agree with the comments that it would be funny to canonise
_something else_ happening to dead ones once the alive ones evolve but
that would qualify as "a feature".
## Why It's Good For The Game
Even if it's pretty funny it's not really ideal for unbutchered mobs to
come back to life without warning at the 30 minute mark, and clearly not
intended.
## Changelog
🆑
fix: Bileworms which have been struck down but not butchered no longer
return in a more powerful form.
/🆑
## About The Pull Request
Mutanthands is now a component, which handles ensuring the mob always
has their mutant hands equipped to their right slots at all times.
Alternative to #73282Fixes#73034
## Why It's Good For The Game
Cleaner and more consistent code, Ensures mutant hand mobs always have
their correct hands.
## Changelog
🆑 Melbert
fix: It should be way harder to lose your special hands as a zombie or
shattered risen ghoul.
refactor: Refactored mutanthands for zombies and shattered risen.
/🆑
## About The Pull Request
Attempting to add a null to images (even in a list) is a runtime, which
in this case blocks off the rest of show_hud, breaking planemasters and
other shit
## Why It's Good For The Game
Closes#73387, closes#73364
## Changelog
🆑
fix: Equipping an fov item, disconnecting, waiting 6 minutes and
reconnecting will no longer break your game
/🆑
## About The Pull Request
It extracted the first index soulstone from the list and tried to
proc-call it.
But it's a list of weakrefs, so that doesn't work.
I just changed it to hard references. It didn't really need to be
weakrefs, since it owned it.
## Why It's Good For The Game
Useful items woo
## Changelog
🆑 Melbert
fix: The bastard sword can create constructs again. Just hit the shells
with it
/🆑
## About The Pull Request
This PR elementises two kinds of spider behaviour in preparation for
making them into Basic Mobs, which in turn will solve a bug with
Araneus.
This will probably conflict with my other PR but I'll deal with it.
The Nurse Spider and Flesh Spider healing abilities which were similar
but not _quite_ the same now share the same component.
Also Lightgeists because they also did this.
I'll be honest I think Flesh Spider would be better off with the
"Regenerator" component instead but that would be a balance change so I
can't do that right now.
The Tarantula "slower when not on webs" passive is also now an element.
This will make my third PR (to be opened when these two are merged)
easier.
Also I noticed we were using the same colour for spawning a particle in
a few places so I moved that hash into the colours define file.
ALSO while making this the linter identified that a shitload of procs
were passing `required_bodytype` to `heal_overall_damage` as if it was
`stamina` which probably caused some bugs. Don't know which though!
https://user-images.githubusercontent.com/7483112/217679050-b728ee98-3ba1-4663-bb6b-75295d5f9a6a.mp4
## Why It's Good For The Game
Reduces amount of duplicated code, making it easier to maintain.
Elements can be reused for other things later, like the infuser?
## Changelog
🆑
refactor: Spider healing abilities have been refactored to reuse the
same code rather than reimplement it across two different mobs, it
should work the same as it used to. This is also used by Lightgeists.
fix: Mob biotype on `heal_overall_damage` should be applied more
consistently. This might mean that some things which were previously
healing prosthetic limbs have stopped doing that.
/🆑
## About The Pull Request
QoL update for CTF to make the experience better and smoother.
## Why It's Good For The Game
The CTF experience is a bit unpolished in some areas such as important
information (shield charge, control point score) being obscured,
mandatory hand switching on spawning, and players messing with their
team by blocking the controller.
## Changelog
🆑
qol: CTF guns spawn in the default active hand
qol: CTF shields become transparent as they lose charge
qol: CTF King of the Hill scores are visible to players in-game
qol: CTF controllers can no longer be blocked by players standing on
them
/🆑
## About The Pull Request
If the glass was renamed by a player, don't override the name /
description in `update_name` and `update_desc`. Simple enough
Unfortunate side effect is changing the name but not the desc leaves the
desc as it is, but I don't think anyone would really care or notice. It
used to be like this anyways.
## Why It's Good For The Game
Aesthetics. Fixes#72890
## Changelog
🆑 Melbert
fix: Custom named drinks (with a pen) no longer reset after their glass
volume updates
/🆑
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/73240
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage ma
🆑 LT3
spellcheck: Gloves now mention modes, not intents
/🆑
## About The Pull Request
This PR refactors netherworld mobs into basic mobs as best as possible.
Also makes some of them run faster when they are getting damaged or deal
more damage. Now the mobs might be able to keep up a little with the
players.
## Why It's Good For The Game
Makes the mobs have better movement and more dynamic movement. Makes the
quality of these mobs better.
## Changelog
🆑
add: Added new damage buffs for netherworld mobs
refactor: Refactors netherworld mobs into basic mobs
/🆑
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/73144
## Why It's Good For The Game
It should explode when you say the codeword.
## Changelog
🆑 LT3
fix: Uplink failsafe explodes when its supposed to
/🆑
## About The Pull Request
Damn that's a long title.
Admin Verbs can be used in the verb bar with hyphens instead of spaces
again.
## Why It's Good For The Game
Admin muscle memory
## Changelog
## About The Pull Request
This PR makes some changes to how JPS is used in movement loops, as it
was causing a variety of issues:
- Fixed some code where JPS would fail because the path is still being
made. Instead, the movement loop will now wait.
- Reduced the subsystem wait for the pathfinder subsystem from 2 seconds
to 0.1 seconds. @LemonInTheDark told me that this is better, I'll update
this with a better explanation once I squeeze it out of him :D
- Allows you to provide an initial path to the movement loop, in case
you pre-calculated one while making a plan.
## Why It's Good For The Game
Makes working with JPS a bit easier when making AI.
---------
Co-authored-by: Capybara <Capybara@CapybaraMailingServices.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
This is a remake of #70242
Replaces all instances of ``do_mob`` and ``do_after_mob`` with
``do_after``.
## Why It's Good For The Game
All 3 of these are just copy pastes of eachother but some miss some
features (like do_after not checking for target loc change, which helps
towards fixing https://github.com/tgstation/tgstation/issues/66874
though it doesn't because mechs are setting ``do_after`` on the mob in
the mech) and signals only being used on ``do_after``.
## Changelog
🆑
fix: Mechs should now cancel out of drilling when they move.
/🆑
## About The Pull Request
adds a variable to huds containing all screen objects that should be
permanently there
fov stuff goes there now rather than not being kept on the screen at all
therefore fov no longer disappears
## Why It's Good For The Game
i must torture lemon.
## Changelog
🆑
fix: fixes fov removal f12 exploit
/🆑
If the consumed_object does not pass the isitem check, then it increases
the matter_increase by half of consumed_object.max_integrity, capped at
1000.
# WEBEDIT INFORMATION
This is indeed a webedit, but I tested the changes on local.
## About The Pull Request
If the atom is not an item, the matter power increase will be half of
the object's max integrity, up to a maximum of 1GeV (in case some object
has an absurd amount of integrity).
## Why It's Good For The Game
When a physical object gets consumed by the supermatter, people expect
it to do what it does for items, to give it trickled power over time.
It's confusing when it doesn't increase the power.
## Changelog
🆑
fix: Objects that are not items can increase supermatter power on
consumption.
/🆑
## About The Pull Request
[Adds support for pulling z offset context from an atom's
plane](9f215c5316)
This is needed to fix paper bins, since the object we plane set there
isn't actually on a z level.
Useful elsewhere too!
[Fixes compiler errors that came from asserting that plane spokesmen had
a plane
var](b830002443)
[Ensures lighting backdrops ALWAYS exist for each lighting
plane.](0e931169f7)
They can't float becuase we can see more then one plane at once yaknow?
[Fixes parallax going to shit if a mob moved zs without having a
client](244b2b25ba)
Issue lies with how is_outside_bounds just blocked any plane readding
It's possible for a client to not be connected during z moves, so we
need to account for them rejoining in show_to, instead of just blocking
any of our edge cases.
Fixing this involved having parallax override blocks for show_plane and
anything with the right critical flags ensuring mobs have JUST the right
PMs and relays.
It's duped logic but I'm unsure of how else to handle it and frankly
this stuff is just kinda depressing.
Might refactor later
[show_to can be called twice successfully with no hide_from
call.](092581a5c0)
Ensures no runtimes off the registers from this
## Why It's Good For The Game
Fixes#72543
Fixes lighting looking batshit on multiz. None reported this I cry into
the night.
## Changelog
🆑
fix: Fixes parallax showing up ABOVE the game if you moved z levels
while disconnected
/🆑
---------
Co-authored-by: Time-Green <timkoster1@hotmail.com>
## About The Pull Request
Over the years I've heard quite a few lizard players scratch their heads
in confusion due to the lack of gibs filling you up. I gave it a fairly
low value of 2 so people don't end up trying to power game it.
## Why It's Good For The Game
Adding an alternative use to gibs is always nice, at the moment it's
mostly just used for soap and cytology (Which barely anyone does.)
## Changelog
🆑
balance: Gibs now provide a small amount of nutriment.
/🆑
## About The Pull Request
`parent` is a reference to the datum parent of the component, but this
was assigning it to a string for some reason?
I just removed it. It doesn't seem to be doing anything anyways
~~I was going to make parent a private variable but too many things
access it for some weird reason. Kinda wack~~
## Why It's Good For The Game
Bad code
## Changelog
🆑 Melbert
fix: Maybe fixes some issues with spirit holding, particularly relating
to it being in-exorcism-able.
/🆑
## About The Pull Request
This buffs scythes, goats, and plantbgone vs PLANT biotypes:
- Scythes now deal x1.5 damage to venus flytraps (3 hits to kill)
- Scythes now target the flower bud vines
- Goats now target flower bud vines and deal 15 damage to PLANT biotypes
- Goats have a eating sound whenever they bite PLANT biotypes
- Plantbgone now does 2 dmg per unit to PLANT biotypes (10 dmg per
spray)
- Plantbgone now has a 75% chance to remove weeds and deals large damage
to flower buds
- Weed control crates now come with a pair of leather gloves
- Golems are immune to thorn effects
- Any kind of thick glove material will prevent thorn effects when
attacking
- Flower buds will now take x4 damage from fire and sharp weapons
(unless they have fire trait)
- Regular scythes are now a sharp object
Also this fixes a few runtimes with spacevines and nulls. The bane
element now accepts `mob_biotypes` bitflags as an argument.
## Why It's Good For The Game
Before my changes:
- Plant-b-gone was doing 0.4 dmg per unit to PLANT biotypes (2 dmg per
spray)
- Scythes took 5 hits to kill venus flytraps
- Goats only affected podpeople
- Flower bud vines were being ignored by weed killing code
- Plantbgone only had a 50% chance to remove weeds (and this was very
inconsistent due to RNG)
- Botanical gloves and thick gloves didn't protect from thorns
- Golems were getting pierced by thorns despite having pierce immunity
- Flower buds were not taking the x4 damage like they should have been
- Regular scythes were not a sharp object, but other scythes
(chaplain's, megafauna loot) were sharp
This makes the weed killer crate more effective since people were
complaining about it being worthless vs vines and flower buds. These
changes give people more options to respond to threats vs plants.
## Changelog
🆑
add: Add a pair of leather gloves to weed control crate
balance: Mobs with the PLANT biotypes (venus flytraps, pod people,
killer tomatoes) are now much weaker vs scythes, goats, and plantbgone.
balance: Plantbgone is now more effective at destroying weeds.
balance: Regular scythes are now a sharp object
fix: Fixed scythes, goats, and plantbgone not affecting flower bud
vines.
fix: Thick and botanical gloves not protecting from thorns
fix: Golems not having pierce immunity from thorns
fix: Runtime where vines tried to spread into null turf
fix: Runtime where null vines that were destroyed were trying to spread
to nearby turfs
soundadd: Add eat food sound when goats eat plants
code: Improved goat targeting code
code: The bane element now accepts `mob_biotypes` bitflags as an
argument.
/🆑