<!-- 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
Refactors ai datum examines to use noticable organ elements.
## Why It's Good For The Game
This preserves the original examine on monkeys and allows future
examines to be dependent on the state of the species, so the examines
are less generic. But if you want generic, it's supported!
## 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. -->
🆑
refactor: Monkey AI descriptions of "primal eyes" no longer show if the
monkey is missing eyes.
/🆑
<!-- 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. -->
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#72677 and also converted the "Wumborian Fugu" mob to a basic mob
rather than a simple one.
I will be totally honest: I didn't need to do that in order to fix the
bug. I just didn't like looking at the rest of the code in that file.
Also I have some kind of sickness which makes me do this.
This ended up being one of those "see something related and fix it as
well" ones so there's a couple of only tangentially related changes in
here. If you want me to split it up I will but I think this one is
_probably_ fine because the wide-ranging changes are pretty simple ones?
So what this PR does is:
- Refactors simple mob into basic mob.
- Cleans up its really ugly ability to work in a hopefully nicer way.
- A one line fix to the linked issue above.
- Modifies the default cooldown on `basic_melee_attack` and
`attack_obstructions` to be a widely used cooldown rather than a random
value used by no mob that we have.
- Renamed behaviour "try_mob_ability" to "targeted_mob_ability" and
added a new AI behaviour called "use_mob_ability", the difference
between the two being that the former requires a target and the latter
does not. I... don't actually use this because I realised after adding
it that I still want a target for this mob, but someone will need it
eventually.
- Change everywhere that is passing references to abilities to actions
to pass weak references instead.
- Adds an element to handle "spawn this stuff when a related mob dies".
- Found a few places where people were setting `environment_smash ` as
if it did anything (including me) and replaced them with the proper
ai_controller implementation instead, updated the comment to make it
clearer although that won't prevent copy/paste errors.
- Registered to the "movement speed updated" signal to ensure that basic
mobs actually notice that you have applied a movement speed modifier.
## Why It's Good For The Game
Fixes a linked issue.
Refactors some code which made me sad whenever I saw it.
Restores some mob behaviour which nobody noticed was missing, but was.
Fixes some apparently unreliable code I added in a recent PR reliant on
basic mobs using movespeed modifiers.
Adds element we will definitely need again in the future.
## Changelog
🆑
fix: The Fugu Gland can once more be used on Ian, Carp, Giant Spiders,
or other basic mobs.
fix: Syndicate mobs will once again attack windows to try to reach you,
and space ruin spiders won't.
fix: Netherworld-themed mobs will correctly adjust their speed as they
take damage.
refactor: Made the Wumborian Fugu into a basic mob, which should act
largely the same way but may have slightly different speed and reaction
times.
/🆑
## About The Pull Request
- Corrects severity thresholds for med/harmful/dangerous
- Removes tier 1 cures from cure pool
- Dangerous/Biohazard disease correctly show up on HUD at spawn
- RNG actually listens to what severity the symptoms are supposed to be
- Fixes various symptoms that were in the wrong severity list
- Disease is now assigned illness name based on its highest severity
component
- Converts old code to snake_case
## Why It's Good For The Game
Disease Outbreak works as expected, both on random spawn or admin custom
disease creation. Ensures that diseases that are harmful or potential
for quick spread are visible to scanners and HUDs.
## Changelog
🆑 LT3
code: Disease Outbreak: Disease max severity replaced with requested
severity
code: Disease Outbreak: Generated disease now includes symptom based
name
code: Disease Outbreak: Disease name is now included in the station
announcement
code: Disease Outbreak: Now in snake case
balance: Disease Outbreak: Tier 1 cures removed from pool
fix: Disease Outbreak: Dangerous/Biohazard diseases are now visible
fix: Disease Outbreak: Event setup generates the correct severity
fix: Disease Outbreak: Various potential symptoms were in the wrong
symptom pool
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## 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
spawnDebris was being overridden by almost every type of window, I've
set up some new vars for it to pull shard and its debris decal from so
spawnDebris only needed to be set up once (+ once more for paper windows
which are unique).
Fixes an issue with reinforced plasma glass windows dropping regular
glass when broken.
Fixes an oversight where tram windows were dropping only 1 rod instead
of 2 and dropping glass sheets instead of shards.
Cleans up tram window code a bunch.
## Why It's Good For The Game
Fixes several issues, cleans up code and cuts down on a lot of repeat
code.
## Changelog
🆑
fix: Reinforced plasma windows will now drop plasma glass instead of
regular glass when broken.
fix: Tram windows drop the correct number of rods and a shard when
broken instead of a sheet.
code: Removed a ton of duplicate vars in tram window code and
re-organize the file slightly.
refactor: spawnDebris has been un-hardcoded and all (but one) override
of it has been removed.
/🆑
## 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
Keen eyes will notice time stop is intended to have a radius of 2
3c0013dfa5/code/modules/spells/spell_types/self/stop_time.dm (L14-L17)
This implies it's supposed to be a 5x5 - radius of 2
Back when it was originally coded, it was a 5x5
f2abe13f51
(scroll down a bit, and you will see `orange(2)`. This is a 5x5.)
So where did it become a 3x3? I can't find a single PR nerfing it, and
the radius is still 2 as it always has been
The answer: Here, in 2017 it was refactored to use fields
#30858
Fields track their inner fields and edge fields separately, but it used
the same radius as before, so it quietly shrunk by 1 tile as the outer
edge was no longer counted as frozen, and I guess no one noticed? or
cared? I don't know??
So I updated advanced fields to have a "mode" that tracks edge fields as
field turfs.
While I was here, I fixed some other issues with timestop. A runtime
when movelooping mobs were time stopped, sign languagers (emote mute).
And while I was "while I was here", Gravity aura had a similar issue,
causing the grav gen's aura to never work. That was fixed as well
## Why It's Good For The Game
This caused an hour long search over a 5 year old bug
## Changelog
🆑 Melbert
fix: Fixed a FIVE YEAR OLD issue causing Time Stop to be a 3x3 instead
of a 5x5. Really.
fix: The gravity generator correctly gives "forced gravity" to all
adjacent mobs
fix: Fixed some runtimes with Time Stop, and other miscellaneous issues
/🆑
# Don't merge this without leading the headmins know so they can update
the server configs
### For headmins:
The following roles need to be updated:
- "Obsession" -> `/datum/antagonist/obessed`
- "Heretic" -> `/datum/antagonist/heretic` (Though this one will still
work, change it to message them on spawn)
- "Headslug Changeling" -> `/datum/antagonist/changeling/headslug`
- "Pyroclastic Anomaly Slime" -> `/datum/antagonist/pyro_slime` (Though
this one will still work, technically, change it to message them on
spawn)
## About The Pull Request
So, we have this whole system in the code to allow all mob typepaths,
species typepaths, and even antag datum typepaths to have a set policy
But we like, don't use it? For some reason we rather set a million
`get_policy` calls than use this. They're all stuck in the policy verb
and not sent to the player in any obvious.
(Also, it's super fragile, which I hate. Change the typepath and the
policy silently fails. Maybe someone can change that afterwards)
This PR updates that. All antag datums will check in `on_gain` for
policy to show to the player if there's any.
It doesn't solve the entire issue. Mob policy and species policy is not
conveyed to the player in any way BESIDES the policy verb which no one
uses. So people have no idea that it's a thing. But it helps a bit.
## Why It's Good For The Game
Better ways to convey to players how they should be playing.
Also Valentines day, because... it's crazy.
## Changelog
🆑 Melbert
config: Policy.json config got updated. The following values need to be
updated:
config: "Obsession" -> /datum/antagonist/obessed
config: "Heretic" -> /datum/antagonist/heretic
config: "Headslug Changeling" -> /datum/antagonist/changeling/headslug
config: "Pyroclastic Anomaly Slime" -> /datum/antagonist/pyro_slime
config: ALL antags in the policy.json file will now get notified of any
existing policy set by the admin team, rather than only a handful.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
## 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
This PR converts giant spiders into basic mobs and resultingly fixes
#37793
They _should_ have the same behaviour as their simple mob versions
although I can't verify that their movement speeds are _exactly_ the
same. It should at least be pretty close.
A quirk of spiders is that they had a pretty large `move_to_delay` which
made them slow in the hands of AI (because it would just pause for ages
between taking steps) and faster in the hands of players, and they often
appear in both forms so I had to implement this as a speed modifier
based on player control.
Additionally this is the first basic mob which can be set on fire.
This is currently implemented as a var on `mob/living/basic` but I know
there was some annoyance at adding the environment tolerances as vars on
there so if desired I can try and extract it out, I'm just not sure how
easy it will be.
Something else I noticed is that spiders seem to take stamina damage
from bug spray... but stamina damage does nothing to either simple _or_
basic mobs. I have left it in for now in case I am missing something,
and rebalancing it to do something else would be more like a balance
change.
Oh also I killed the `mob/basic/retaliate` folder because that isn't a
classification that needs to exist or makes sense.
## Why It's Good For The Game
We don't want to use simple mobs any more.
Sergeant Araneus can finally actually be a spider, instead of being a
bat.
## Changelog
🆑
refactor: Spider code has been refactored and AI-controlled spiders may
have slightly different movement or reaction times.
fix: Basic mobs can now be slowed when they take stamina damage, however
currently only spiders actually _can_ take stamina damage.
fix: Spiders should now more reliably disable their AI when controlled
by a player.
fix: Araneus is no longer considered to be a bat and so cannot fly.
fix: Araneus is no longer considered to be a bat and so is no longer
frightening to people who are scared of the supernatural.
/🆑
## About The Pull Request
What is says in the title. Adds a probability to emote to ensure that
chat spam is kept to a minimum
## Why It's Good For The Game
If somehow you get a really emote heavy virus spread amongst enough
people, the thing that will threaten you more than the virus is the
massive latency this chat spam produces. Hopefully this keeps that spam
to a minimum without affecting the mechanics of the virus.
## Changelog
🆑
qol: Limits the amount of emotes being passed to chat by viruses.
/🆑
---------
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
## About The Pull Request
See title
## Why It's Good For The Game
Messed up one of the armor procs; it changed the given values but never
carried over existing values.
So you would end up with an armor of that one specific value and nothing
else.
This wasn't actually used anywhere other than mecha, lava burning, and
sentient viruses, so the issue isn't that bad.
It's still an issue however.
## Changelog
🆑
fix: Mechs no longer have zero armor when built.
/🆑
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.
## About The Pull Request
So right now you have the *blush and *cry emote which apply an overlay
to you after emoting. They both do the same thing but have different
code for it. This has been refactored using the new bodypart_overlays.
An emote visual can be defined with a
/datum/bodypart_overlay/simple/emote subtype. Running an emote can then
apply this overlay to the user and delete it after a duration. The drunk
mood event also uses one of these overlays now to apply the blush
effect. The emote overlays use images instead of mutable_appearances so
they should be able to support animations that only play once.
Also the crying visual now appears even if you are eyeless. This
restriction didn't make much sense in the first place because the tear
ducts aren't in the eyes. Emote overlays are attached to bodyparts. If
you emote without the required bodypart the overlay won't be added. And
if the bodypart is dismembered _after_ emoting, the overlay will stay on
the dismembered bodypart. Once emote duration runs out it disappears
from the bodypart. You can't re-emote to reset the duration because the
bodypart isn't attached to you anymore.
Oh and also I put the blush and tears sprites in a new file.
## Why It's Good For The Game
- Makes it easier and less scary to add new visuals for emotes.
- Takes blush and cry overlay code out of eye and head code.
- Emote sprites are easier to find.
- human_face.dmi becomes ever so slightly less clogged.
## Changelog
🆑
refactor: refactored *blush and *cry emote visuals into
bodypart_overlays
del: lack of eyes will no longer prevent the *cry emote overlay from
displaying
/🆑
## 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
Fixes#73237
So, this seems to be an interaction between targetting and the flag
`AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION`.
When a mob starts the melee attack action it sets up its attack target
as its movement target.
Once it is in range of its movement target then it starts running
attacks on its attack target.
If a mob puts a target into crit then it ceases to be a valid target.
If `AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` is set on a behaviour then it
will continue to plan and run other actions.
The targetting action will notice that our current attack target is
invalid and retarget it _between_ executions of the attack action.
The attack action _doesn't_ call setup again at this point, so it does
not set the new target as its movement target.
The attack action executes, is still next to the current movement
target, so continue to attack the attack target even though that target
has changed.
Result: Carp can attack you from the other side of a room if they have
first empowered themselves by consuming the soul of your coworker.
There's a few fixes for this but none of them seem... precisely clean. I
have gone with the one which I think is most "robust" in that it should
fix this case in all future scenarios, but it has its own downsides.
That is: Whenever the targetting action acquires a new target it will
manually cancel all further queued actions, which forces everything
following to call setup again.
The obvious downside here is that this means that the AI will acquire a
target and not immediately act on it within the same processing loop. It
will now have to wait until its turn comes around again to do anything
with a newly acquired target, making them slightly slower to react to
things based on how often the subsystem is acting.
This might be beneficial to players in some ways in that it gives you a
moment of grace to react to an AI acquiring you as a target which was
present in simple mobs and not basic mobs but probably we do just want
them to act as responsively as possible.
Alternate ideas were:
- Validate the target and range again in the `perform` action. I didn't
go with this because it feels like it _should_ be redundant with the
controller validating the distance to the movement target already, is
much more fragile and easy to miss on an extended or new action, and
would need to be done individually in all actions which require a
movement target.
- I could replace `CancelActions()` here with a new proc which cancels
actions and then instantly reruns this mob's behaviour selection and
runs the new list of actions. That sounds a little bit scary to me, and
might risk a loop?
- Refactor movement target to be more tightly controlled by actions and
not a property of the AI controller at all. This would be some work,
reduce future possibilities (we have some flags to preserve movement
target between actions which are just... not currently used) and might
not actually solve the bug anyway.
- Investigate `AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` and figure out if
there is some way to ensure it calls setup at an appropriate time. I
cannot figure out how this would be possible, because the trigger is
essentially "an arbitrary blackboard key has changed value" and the
result would probably have the same downside as the current
implementation anyway. Being able to change blackboard keys while
executing other actions is kind of the point of
`AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` really.
- Remove `AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION` from the attack
behaviour. This would fix it for attacks but potentially remain for
other future actions. It would mean that behaviour which relies on this
(such as carp fleeing, I think? I don't remember precisely why it's on
there only that we wanted to be able to change our minds and stop
attacking without coding that specifically into `perform`) would have to
be adjusted to add more checks to the attack action, and might result in
an eventual proliferation of specific attack actions which exist only to
track specific circumstances to interrupt the attack loop, which doesn't
seem ideal.
If you have any better ideas than this or those listed let me know.
## Why It's Good For The Game
When you give a mob the "basic melee attack" behaviour you really expect
that to mean that it will attack things that are next to it.
## Changelog
🆑
fix: Hostile Basic Mobs such as carp, rats, and moonicorns will no
longer gain the power to bite anyone they can see regardless of distance
and intervening obstacles upon defeating their first target in combat.
/🆑
## About The Pull Request

Changes the really goofy old lux shuttle to a cooler layout with some
additions to make it a luxury and not just
"anti-poor-people protection + food"
Shuttle was made bigger to make it less cramped for the luxury class,
pool was moved to its own room, added an arcade
and a bar corner, has real lasers to shoot poors with (20c each shot),
has fire extinguishers now
Adds a new preopen variant of hardened shutters
Adds a paywall pin subtype for the luxury shuttle, and a laser gun
subtype
Made emag-only at a price of 10000 credits
## Why It's Good For The Game
The old luxury shuttle looked REALLY awful with its pool, was pretty
cramped even in the luxury section and BARELY resembled a luxury..
This luxury shuttle provides luxuries such as a less poorly designed
pool, more space for legs, arcade, to make it resemble a luxury unlike
the old one
## Changelog
🆑
add: Luxury Shuttle is now bigger, and less ugly! Poor people still get
it rough though...
/🆑
## 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
i was fucking around with brain traumas on a downstream and noticed they
had similar issues to quirks so i decided to continue work from #73116

(search in VSC for span class = 'notice')
its going to be a bit of a thing to get all of these but this is a
decent chunk i think
there was only one annoying/tough file.
imaginary_friend.dm had class = 'game say' and class = 'emote' both of
which after some testing did not seem like they did anything. ill try to
keep that in mind in other files if i continue to do this but i either
omitted them because they didnt have any formatting or, in the case of
emote, turned it into name, which i think is what you'd want those
messages to look like.
there were also a few small spelling errors that i fixed
## Why It's Good For The Game
more consistent and stops people from copying brain trauma formatting
wrong
## Changelog
they should all work the same
---------
Co-authored-by: san7890 <the@san7890.com>
## 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
We've got a few space related things that are busted, and shuttle
movement is slow.
I'd like to try to improve these things, if just a bit.
Long list of only tenuously related topics. Sorry for the shotgun blast
#### [Fixes lazyloaded stuff having bad
space](d4de176a63)
We need to handle area transferring in maploading code under niche
cases, and we also need to actually init reservation spaces we create.
It's also redundant and potentially dupe creating to do area lighting
handling in changeturf, because it gets touched in turf init anyway. Old
me is stupid.
#### [Adds some doc comments, yeets
ssmappping/transit](269717145d)
We had a reserved space for just shuttles to use, except it wasn't for
just shuttles.
So in theory if the space got clogged with other shit, the shuttles
could have nowhere to actually use.
It's better to just have the two groups share real estate. More sane
### The "Starlight is Slow" Block
#### [Starlight optimization part one (don't check config for each
individual turf you check for
activity)](7312a314be)
#### [Starlight optimization part two (infer
context)](be94c422ed)
Starlight was causing each space turf to cause itself and its neighbor
to constantly recheck if they had starlight off changeturf.
The exact same effect can be had by taking advantage of some
pre-existing information, namely if the space turf is gaining or losing
a source of starlight.
Essentially, instead of telling a turf to check all adjacent turfs to
see if it's got starlight, we tell the turf if WE are a source of
starlight, or if we might be taking something away from it.
There's a bit of wasted cpu here but not much, if it's worth doing a
register signal pattern for clearing depends on the case we're working
with.
Being intelligent about this makes things much faster, something in the
neighborhood of 4 to 3 fold.
I've also made openspace's starlight work better, cause the old pattern
was a bit silly.
### Changeturf is Annoying (Microops)
#### [Micro ops changeturf and turf deletion a
bit](386b3ab7fc)
Don't do work if the thing you're working on doesn't exist, don't check
every adjacent turf for firelocks on turf change (just have thefirelocks
manage that), don't check all atoms on the turf for decals on turf
change, similar.
Also moves visibility changes from camera code into changeturf, to avoid
unneeded work.
Needs some extra work to optimize the guts for this path but I can do
that!
#### [Micros camera vis
changes](ebab69e9ea)
We should only update vis when our opacity changes.
In addition, we don't need all the camera handling fluff if we only want
to update our turf's static groups.
Also micros a camera net helper to be less crap for non multiz maps
#### [Micros some open space atmos cases, alongside avoiding a for(null)
in opacity
handling](72ae07ba1d)
#### [Ensures space_lit tiles never accidentially inherit lighting
objects](a99ff2265a)
S dumb, and leads to space turfs having two sources of lighting, which
looks wrong.
This was invisible when their lighting was fullbright, but it sucks now.
### Misc Stuff
#### [Cleans up stat tracking a bit to avoid
collisions](40fb8f21e2)
#### [Cleans up a turf helper to not be
stupid](bf4ee67100)
WHY ARE YOU USING THE RANGED TURF HELPER IF YOU GO ONE TILE
#### [Moves transit turf signal cleanup to destroy, I named this proc
wrong](c85c2cfc86)
I'm sorry @Time-Green
#### [Adds better transit caching to
shuttles](35e85334c4)
Adds a max reserved transit size to the shuttle subsystem, to keep
things in bounds.
In addition, adds a soft cap under which existing transit space will get
hold onto, to make repeated non escape/arrive shuttle movements faster
Hopefully this makes common shuttle moves less bad.
## Why It's Good For The Game
Speed
## About The Pull Request
This morning a man presented me with a mission

I realised that I can achieve this in merely _three_ pull requests.
...because I'm leaving one that adds new AI until after feature freeze
february.
This one pulls all of the ability code out of the giant spider mob file
and spruces it up a bit in preparation for making them into basic mobs.
It removes an ancient "todo" about merging the spider and genetics web
abilities by, doing that.
Spider abilities no longer extend from a shared and reasonably pointless
"innate" root ability and also don't require their owners to be spiders
to work properly any more.
Also while I was in there I fixed a bug where the "set directive"
ability did not actually pass that into the antag datum of a new spider
unless they logged out and back in.
## Why It's Good For The Game
Code should smell nicer now.
Removes an essentially duplicated ability.
Clears up some chat log spam which didn't need to be in there.
You can actually set an objective for spiders you create as a spider
brood mother.
I guess you can make spiders-man as an admin by giving spider abilities
to other mobs.
## Changelog
🆑
refactor: Tidied up spider ability code, they should all work the same,
but please report if they do not.
refactor: Spiders and Geneticists now use the same ability to make webs
rather than two virtually-identical ones, which should also perform just
as it did before this change.
fix: Setting a directive as a Spider Midwife should properly pass and
announce itself to new spiders.
/🆑
## About The Pull Request
Recently, the copy_dna proc was changed to immediately transform the
species of the DNA's holder. However, DNA does not always have a holder,
for example, the stored DNA's of changeling. Due to this, it had a null
exception runtime, leaving the stored DNA as a default human, including
your original. This PR fixes that.
This also fixes stabilized green slime extracts, due to the same error,
you turned human when you dropped them.
Curing Space Retrovirus probably also had this issue, I couldn't test
that one.
## Why It's Good For The Game
Fixes#73242
## Changelog
🆑
fix: swapping to a stored DNA no longer forces you to be human instead
of the species stored in the DNA
/🆑
## About The Pull Request
Adds a second detonation wire onto payload bombs, bringing the total
number of wires to 6.
## Why It's Good For The Game
As it stands, there are two wires capable of neutralizing the bomb in
most circumstances and one detonation wire. Unbolting a bomb from the
floor and spacing it is as effective a solution to a bomb as defusing it
until the explosion is imminent (You can tell by the lack of defusals
which are performed once the bomb can be moved). Even unbolting it with
10 seconds to spare gives the crew a great deal of control over where
the explosion occurs. This itself isn't an issue because shoving a bomb
out into space and hearing it explode off screen is pretty badass.
The issue is that with 2 wires capable of more or less defusing the bomb
and 1 which causes the explosion, you have a 2/3 chance to save the day
while blindly cutting wires. A second wire brings these odds to a
thrilling 50/50!
The proceed wire used to detonate the bomb when cut but will now disable
the examinable countdown timer, leaving only the beeping to indicate how
close the bomb is to exploding. This is reset once the defusal wire is
cut.
## Changelog
🆑
balance: There's a second detonation wire on payload bombs now.
balance: Cutting the proceed wire no longer detonates the bomb but
instead deactivates the countdown timer on examine. This is reset once
the bomb is defused
/🆑
## About The Pull Request
When you drag and drop a belt to another storage item it transfers all
its contents but retains its overlays. This PR calls update appearance
at the end of storage to storage transfers so this shouldn't occur
again.
## Why It's Good For The Game
Bug fix, belts appearing to have things on them which they don't is bad.
## Changelog
🆑
fix: Transferring objects from a belt to another storage object now
removes those objects from the belts visuals.
/🆑
🆑 ShizCalev
fix: Fixed some duplicated and incorrect messages being presented when
infected with a virus that has the spontaneous combustion symptom.
/🆑
## 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
PR to replace https://github.com/tgstation/tgstation/pull/73001
Revamps the Disease Outbreak: Advanced random event to be more
consistent in actually generating random diseases.
This generates random viruses based on rolling severity, symptoms, and
transmissibility separately and ensures the virus created through RNG is
valid and transmissible.
Revamps menu for admin spawned DO:A events. Custom outbreak with manual
symptom selection is available in the Secrets panel.
Parameters for generating the viruses can be tweaked using the defines
in the event file.
## Why It's Good For The Game
Current DO:A code has a tendency to generate viruses that aren't
actually transmissible, be it through choosing too many symptoms or
having a transmissibility that's too low to allow spread.
## Changelog
🆑 LT3
refactor: Rewrite of random event Disease Outbreak: Advanced. Listen to
those level 7 biohazard warnings!
admin: Fully customizable build-your-own virus is available in the admin
Secrets panel, for those people you really hate
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
The linters in #73202 revealed to me that `heal_overall_damage` was
overridden wrong in `carbon` and left out an argument, meaning that
plausibly some places that didn't provide an argument for `stamina`
probably had an off-by-one error with args and wouldn't apply them
properly.
I fixed that in that PR because it was using it. Then I noticed that the
same problem exists in `take_overall_damage` so I am fixing that too.
I don't know if this was linked to any actual bugs, but it might cause
some. They'd be hard to spot because it'd be for stuff like "a
shadowperson with a prosthetic takes damage to their prosthetic if not
in darkness" and probably nobody would even get into that situation let
alone notice to report it.
## Why It's Good For The Game
We want arguments to do what they are supposed to do.
## Changelog
🆑
fix: Biotypes will be more consistently applied when taking damage, pod
and shadowperson prosthetic limbs won't be corroded due to light levels.
fix: Podperson and Wooden Golem prosthetic limbs won't be corroded by
having a hungry tummy.
/🆑
## About The Pull Request
When an arm holding an activated Rod of Asclepius is cut off, the arm
grows back with the rod held in it. However, due to an oversight, the
arm that grows back is always the "default" color - the albino skintone
for humans/felinids, and grey for everyone else. This PR makes the
regenerated arm have the proper skintone instead.
## Why It's Good For The Game
There's no good reason that a magical doctoring rod should drain all
color from your arm, probably.
## Changelog
🆑
fix: Corrected the skintone on arms grown back by the Rod of Asclepius
/🆑
## About The Pull Request
Replaces some decisecond things in martial art code with time defines
## Why It's Good For The Game
Improves code readability
## Changelog
🆑
code: Replaces some decisecond things in martial art code with time
defines
/🆑
## 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
Fixes three bugs related to burn wounds and medical gauze:
- Septic limbs could still heal slowly in stasis, despite the intention
being for the limb to be totally lost
- Limbs undergoing sepsis did not apply the intended cerebral paralysis
trauma
- Medical gauze can be re-applied immediately to no effect
## Why It's Good For The Game
Restores the original intent of these mechanics. Burn wounds will be
more predictable, as a septic wound can no longer be healed through any
means except cryo. Medical gauze now makes more sense and stops you from
blowing a whole stack for no effect.
## Changelog
🆑
fix: burn wounds going septic now properly paralyze the limb
fix: septic burn wounds no longer heal on stasis
fix: gauze now properly stops you from re-wrapping limbs that already
have fresh gauze
/🆑
## 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.
/🆑