* Move some job related achievements into the job achievement category (#78092)
## About The Pull Request
Read title, this only affects the UI and not the database as far as I am
aware
## Why It's Good For The Game
The jobs category is painfully empty, only being home to four
achievements total. Meanwhile we have a ton of achievements inside the
miscellaneous category, a lot of which are not miscellaneous
achievements at all. Right now I just wanna focus on moving around
achievements from existing category to existing category though. This
improves achievement category spread overall by a small but necessary
amount.
## Changelog
🆑 distributivgesetz
code: Moved some job-related achievements from the misc category to the
jobs category.
/🆑
* Move some job related achievements into the job achievement category
---------
Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
* Nerfs Confusion symptom for diseases (#77991)
## About The Pull Request
Removed the threshold for confusion symptom that adds illiteracy to the
disease.
Clamps confusion symptom's confusion to a maximum of 30 seconds.
Confusion as a debuff no longer guarantees random movement if you're
resting.
## Why It's Good For The Game
> Removed the threshold for confusion symptom that adds illiteracy to
the disease.
This virus makes you unable to actually treat yourself when cured, which
is frankly bonkers. Viruses are too virulent and it's rare that a doctor
actually gets to a biosuit in time to inoculate themselves, and if they
forget internals they're screwed anyways. People should be able to fix
their own got damn disease, this is asinine.
> Clamps confusion symptom's confusion to a maximum of 30 seconds.
The lack of clamping literally makes this symptom send your confusion
level to the fucking atmosphere, you can easily get upwards of 5 minutes
of confusion left because it doesn't clamp, adds 16 seconds per
activation, which is made even worse by the fact that confusion gets
stronger the more duration confusion has on you.
> Confusion as a debuff no longer guarantees random movement if you're
resting.
This remedies the last bit by not making it a literal guarantee that you
can't move in any direction after...... *3* triggers of confusion. It
should be obvious to anyone how absurd this is.
Honestly, it's plain as day that the only reason any of this ended up
like it is because of poor coding and oversights. This is just bringing
things down to their designed level.
## Changelog
🆑
del: Removed the threshold for confusion symptom that adds illiteracy to
the disease.
balance: Clamps confusion symptom's confusion to a maximum of 30
seconds.
qol: Confusion as a debuff no longer guarantees random movement if
you're resting.
/🆑
* Nerfs Confusion symptom for diseases
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
* Replaces Ascended Blade Heretic stun imminuty with a stun absorption effect (it's not as cool as it sounds) (#78060)
## About The Pull Request
Instead of being completely immune to stuns after ascension, blade
heretics now have a stun absorption. This is the effect that His Grace
and the Bastard Sword use.
It functions similarly, in that it stops you from being hardstunned, but
the difference it is they are only immune to a limited amount of stuns
for a limited amount of time before it recharges.
Currently that number is 45 seconds of stuns, with a 2 minute recharge,
meaning if you take more than 45 seconds of stun effects you will stop
being immune.
Bear in mind this still provides full immunity to being stamcrit*, as
stam doesn't contribute towards "seconds stunned" number.
*Unless you used all 45 seconds of stun immunity then you will no longer
be immune until you recharge.
Also to compensate, I gave them a slightly modifier protecting against
knockdowns.
## Why It's Good For The Game
I forgot Stun Absorptions were a thing entirely when making this even
though I refactored the darn things.
Anyways, the reason why I'm doing this is that Stun Absorptions are just
a slightly more fair, less overt way of providing stun immunity, and I
think it fits the theme more.
You're supposed to be a master duelist, but being able to take on a
dozen people at once is not entirely intended (even though this is the
ascension, I know). Stun Absorptions lend better to that, since you run
out of stun juice eventually before you have to pull back.
Though ultimately this doesn't change very much, as we use very few
hardstuns now-a-days:
- A flashbang will contribute about 10 seconds of stun time
- A flash is similar to a flashbang
- Bodythrows and tackles are less than 5 seconds
- Beepsky, 10 seconds
- Stamcrit, 0 seconds, but you are still slowed by stamina damage
- A banana peel, default is roughly 6 seconds. <-- (This is why I gave
them a knockdown modifier)
However it does mean you can't really tank an AI stun turret all day.
That's Rust's thing. Go play Rust Heretic.
## Changelog
🆑 Melbert
balance: Ascended Blade Heretics no longer have blanket stun immunity,
they now have 45 seconds of stun absorption that recharges after 2
minutes - think His Grace. This doesn't affect stamcrit (still immune to
that) (assuming you haven't consumed all of your immunity charge) but
does affect hard CC such as slips, flashbangs, or beepsky.
balance: Ascended Blade Heretics now have a 0.75 modifier to incoming
knockdowns.
/🆑
* Replaces Ascended Blade Heretic stun imminuty with a stun absorption effect (it's not as cool as it sounds)
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* fix basic ranged mobs not chasing the victims (#78073)
## About The Pull Request
if the victim is outside the shooting distance the mob will go through
an endless cycle of finding the target and deleting the target instead
of chasing them
## Why It's Good For The Game
fix basic ranged mobs not chasing the targets
## Changelog
🆑
fix: basic ranged mobs will now chase victims
/🆑
* fix basic ranged mobs not chasing the victims
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Fix bastard sword not getting duration passed to its callback (#78056)
## About The Pull Request
The cult bastard sword has a callback called on spin, that gives you
some buffs and effects based on the duration of the spin
33c9ffa6c8/code/modules/antagonists/cult/cult_bastard_sword.dm (L46-L62)
But... it didn't pass a duration.
So now it does.
## Why It's Good For The Game
Lol infinite stun absorption
## Changelog
🆑 Melbert
fix: Fix bastard sword granting infinite stun immunity
/🆑
* Fix bastard sword not getting duration passed to its callback
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Funny clown internals (#77963)
# About The Pull Request
This PR changes the internals that spawn inside the clown's survival box
for a new one with a rainbow sprite, higher O2 volume (same as the engi
ones) and a secondary gas on top of O2 to make things more interesting
for the clowns.
The gas options are:
BZ, which just adds hallucinations for the clown, without the brain
damage effect as it is in low percentages.
N2O will make the clown giggle and laugh, without the sleep.
Helium will give the clown a "funny voice".
These tanks are also added to the mail list of clown fans and the clown
costume crate at cargo.
And codersprites, I can polish them later if people think it is pixel
soup, I'm not happy with them that much, but making this looks good
might be above my paygrade...
<details><summary>Pics here</summary>
<p>


</p>
</details>
## Why It's Good For The Game
The main goal I have with this is to add more uses for Atmos Content to
other players in a flavorful way.
Atmos is not something the crew interacts in a positive way often and I
want to change that.
These tanks are something quite minor but flavorful IMO, also will make
people know Helium fucking exists...
The tanks *shouldn't* change much of the clown's round in a negative
way, and the default O2 internals are in every hallway's locker so even
if they don't want to deal with the hallucinations it is not a big deal
to dodge them.
## Changelog
🆑 Guillaume Prata
add: New funny internals for the clowns to spawn with. They come with O2
and a secondary gas between 3 options: BZ, Helium and N2O. Talk with a
"different tone" with Helium, giggle and laugh "uncontrollably" while
under the minor effects of N2O or have "fun" hallucinations while under
the minor effects of BZ.
balance: To not cut on how long the clown's O2 internals last due to the
mixed gases, the funny internals have 50% more gas volume, same as
engineers' internals.
/🆑
---------
Co-authored-by: CRITAWAKETS <sebastienracicot@ hotmail.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Funny clown internals
---------
Co-authored-by: GuillaumePrata <55374212+GuillaumePrata@users.noreply.github.com>
Co-authored-by: CRITAWAKETS <sebastienracicot@ hotmail.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Renames the ex interdyne pirate shuttle (#78024)
## About The Pull Request
I saw #76676 has staled out and wasn't reopened with the required
changes, so I have done it myself, and renamed the map and the
template's suffix.
## Why It's Good For The Game
Now linux hosts can also experience being raided by angry pharmacists
from space.
## Changelog
🆑
fix: Ex-Interdyne pirates can now successfully spawn on case sensitive
host systems, such as Linux
/🆑
* Renames the ex interdyne pirate shuttle
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Adds links to additional help documents on hackmd to the GAGS readme (#78027)
Just some additional links in the readme for coders and spriters, no
player facing changes. I'll update the guides themselves more as I see
what information people need or issues they have.
* Adds links to additional help documents on hackmd to the GAGS readme
---------
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* 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>
* megafauna no longer gib/dust you
---------
Co-authored-by: 1393F <59183821+1393F@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Cursed Slot Machine Fixes (#77989)
<!-- 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
A lot of these were stuff I did in response to reviews but apparently
didn't test extremely thoroughly. My bad.
* The proc for checking if the machine is in use is split out into its
own thing for clarity, and for potential reuse.
* The signal is no longer fucked up so you can actually get more than
one curse out of the slot machine as intended.
* Admin heals (and admin heals only) can remove the status effect. This
is just in case someone fucks up a variable when running an event and
wants to quickly heal some people while they varedit it to actually be a
proper event.
* Some nice code stuff while I was there, we don't need to be
typecasting to human anymore so it's nice to fix that.
<!-- 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
Fixes are good.
<!-- 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: The Cursed Slot Machine should now actually give you more than one
pull.
/🆑
<!-- 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. -->
* Cursed Slot Machine Fixes
---------
Co-authored-by: san7890 <the@san7890.com>
* Added sounds for unlocking achievements. (#77968)
## About The Pull Request
Unlocking an achievement now plays a sound. Which sound is played
depends on the associated preference of the player, found in the Sound
category of the game preferences UI.
The current options are a [glockenspiel
ping](https://freesound.org/people/FunWithSound/sounds/456965/), a
[beeps jingle](https://freesound.org/people/Eponn/sounds/619838/) and a
["tada!"
fanfare](https://freesound.org/people/plasterbrain/sounds/397355/), with
the obvious fourth option to not play a sound at all.
All sounds are from Freesound and are public domain. As such,
attributions are not required. The sounds have been also converted to
.OGG mono 44.1 Khz in accordance to the standards.
## Why It's Good For The Game
Enhancing the player feedback for unlocking an achievement with
choosable sounds.
## Changelog
🆑
sound: Unlocking an achievement now plays a sound by default. You can
change it in the Sound category of the game preferences.
/🆑
* Added sounds for unlocking achievements.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* [NO GBP]Refactors how sheets are ejected from mat container (#77945)
## About The Pull Request
As #77936 pointed out an infinite while loop occurs in the recycler.
This was caused due to my recent mat changes as follows.
When the recycler eats up an item. If it found any material inside, it
would attempt to eject any sheets formed from it over here
ed71735fb3/code/game/machinery/recycler.dm (L199)
Inside this proc i first create the sheets in `null space` why is
explained in the comment
ed71735fb3/code/datums/components/material/material_container.dm (L599-L600)
After doing logging & stuff i then would move the sheets back into its
target turf so it could get merged again
ed71735fb3/code/datums/components/material/material_container.dm (L607-L608)
Unfortunately this would trigger `COMSIG_ATOM_ENTERED` signal which the
recycler is hooked onto. The recycler would then eat the newly ejected
sheets again, which would cause more sheets to be ejected, which would
again trigger the signal `COMSIG_ATOM_ENTERED` and you have your
infinite loop.
I did this because i had no clue how to stop the stack from merging when
it got spawned and this was a poor solution, so upon examining the code
i found there is a var to specifically stops stacks from merging
ed71735fb3/code/game/objects/items/stacks/stack.dm (L81)
Yup there is specific param called `merge=TRUE` which allows you to
explicitly stop stacks from merging. I now use this var and manually
merge stacks afterwards without calling `forceMove()` so it doesn't
trigger the recycler anymore which caused the infinite loops.
## Why It's good for the game
Writing checks to see if an object came from null space is weird. It
makes the code difficult to reason with as such situations never happen.
Now it makes sense for an atom to be moved "into" null space for e.g.
when it gets deleted but for an atom to "return back from it" never
happens and you shouldn't be bothered with figuring out how that
happened.
## Changelog
🆑
refactor: sheets are merged in a better way when ejected from machines &
material related stuff
/🆑
* [NO GBP]Refactors how sheets are ejected from mat container
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Progress bars & cleaning particles will centre on the tile occupied by large icon objects (#77940)
## About The Pull Request
Do_after bars always draw based on the top-left corner of the targetted
atom, for atoms with sprites that are larger than 32x32 this gives them
a weird offset instead of being centred, which bugs me.
I have tried my best to figure out a way to reverse this which does not
interfere with atoms which use pixel_x/pixel_y to visually appear to be
on a different tile.
## Why It's Good For The Game
Before:

he hates how you missed him completely 😦
After:

now you're cleaning his feet 🙂
## Changelog
🆑
image: progress bars and cleaning particles are now centered on the tile
occupied by the target, if it is a big sprite
/🆑
* Progress bars & cleaning particles will centre on the tile occupied by large icon objects
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* fixes lavaland megafauna spawn rates (#77977)
## About The Pull Request
fixes megafauna spawn rates by making them ignore the presence of other
mobs when deciding their ability to spawn
closestgstation/tgstation#77835
## Why It's Good For The Game
megafauna jumpscare
## Changelog
🆑
fix: Ash drakes, colossi, and Bubblegum spawn on Lavaland more often; a
sharp increase from the previous bugged amount of "basically never".
/🆑
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>
* fixes lavaland megafauna spawn rates
---------
Co-authored-by: Hatterhat <31829017+Hatterhat@users.noreply.github.com>
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>
* Syndicate mobs no longer drop """unspent""" shells (#77971)
## About The Pull Request
Fixes: #76815
The shells the basic syndicate mobs were dropping were not actually
unspent, but they were not updating their description. They do that now.
## Why It's Good For The Game
small bugfix
## Changelog
🆑 Seven
fix: Syndicate ranged mobs (and probably other basic mobs) properly
update their shell's description to show they are spent.
/🆑
* Syndicate mobs no longer drop """unspent""" shells
---------
Co-authored-by: Lufferly <40921881+Lufferly@users.noreply.github.com>
* Fixes some heretic bugs (?) (#77611)
## About The Pull Request
Items worn on a void cloak's suit storage are no longer visible on the
stripping menu.
Heretic influences protect the turf below them from leaving scannable fingerprints.
* Fixes some heretic bugs (?)
---------
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
* The Curse Of The Slot Machine - Now Clone-less
* The copy paste really needs to be gutted to the essentials
* Update burns.dm
---------
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Makes it easier to place tiles on multi-z holes (#77935)
## About The Pull Request
Adds the "open space click handler" to tile stacks, which makes it so
you don't have to pixel hunt for a turf on the BELOW z level in order to
fix a hole.
This exists on rods and rpds since they're often used to fix holes.
But wasn't added to tiles when they were made to be able to fix holes
directly, without rods.
Additionally, closes#77540 by having the open space click handler loop
up z levels so that it works if you're clicking on items from multiple z
levels away.
## Why It's Good For The Game
The current behavior can be very frustrating to work around, and appears
to not be intended.
## Changelog
🆑
fix: Made it easier to place tiles on multi z level holes
/🆑
* Makes it easier to place tiles on multi-z holes
---------
Co-authored-by: FlufflesTheDog <piecopresident@gmail.com>
* Adds an achievement for saving a cascading SM from the final countdown. (#77900)
## About The Pull Request
Adds the "All Within Theoretical Limits" achievement. You get the
achievement for standing inside the engine room at the time where the SM
crystal heals from 0% health (when the crystal says "Crystalline
hyperstructure returning to safe operating parameters. Harmonic
frequency restored within emergency bounds. Anti-resonance filter
initiated"), and waiting until the SM heals to at least 25% health.
## Why It's Good For The Game
This rewards engineers who stay behind and try to save the engine even
in the most dire circumstances.
## Changelog
🆑 distributivgesetz
add: Add an achievement for saving a cascading engine from the final
countdown.
/🆑
* Adds an achievement for saving a cascading SM from the final countdown.
---------
Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
* Fixes greyscale colors not updating when changing their colors via VV, and fixes some issues with accessories (#77806)
## About The Pull Request
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/23214
This fixes a few bugs and cleans up code a bit:
1) Greyscale colors that were changed via the VV modify greyscale menu
will now update the mob's worn clothing accordingly. It wasn't doing
this before. Accessories in particular needed a bit of extra work to
update in this way because it wasn't coded with this case in mind.
2) Accessories will call `equipped()` and `dropped()` when they get
added/removed. This will fix issues like item flags being incorrectly
set, action bars not being added, etc.
3) Accessories will now be returned by `get_all_gear()`. This will
probably fix a few issues I'm not aware of.
## Why It's Good For The Game
<details><summary>Works</summary>

</details>
<details><summary>get_all_gear()</summary>

</details>
<details><summary>get_equipped_items()</summary>

</details>
<details><summary>item_flags get set now, hopefully preventing future
issues related to that</summary>

</details>
## Changelog
🆑
fix: greyscale colors will now update on the mob when modifying them via
the VV menu
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Fixes greyscale colors not updating when changing their colors via VV, and fixes some issues with accessories
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Achievements now show how many people have unlocked them. (#77083)
## About The Pull Request
Checking the achievements UI now shows a line below the Unlocked/Locked
status for normal achievements, informing the user of how many players
have unlocked said achievement. It also contains a tooltip; within it is
a percentile comparison with the most unlocked achievement.
Beside that, I've added a check in the achievement unit test to
ascertain that all award categories are actually present in the UI, and
as well moved all `ui_data` to `static_ui_date` considering it is not
the sort of interface that has to be constantly updated like an air
alarm or an APC.
Here's a screenshot of the UI, with the tooltip where my cursor would be
(the hot damn! achievement was var-edited of course):

## Why It's Good For The Game
This should provide some fundamental statistics for achievements, from
which contributors and players can deduct the rarity and bragging
rights.
## Changelog
🆑
qol: The Achievements UI now shows how many people have unlocked a given
achievement.
fix: The "Skills" Category for achievements should no longer be hidden.
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
Co-authored-by: Jordie0608 <4343468+Jordie0608@ users.noreply.github.com>
* Achievements now show how many people have unlocked them.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
Co-authored-by: Jordie0608 <4343468+Jordie0608@ users.noreply.github.com>
* Fixes Define Sanity (#77845)
## About The Pull Request
Hey there,
This was broken in an update from #74573
(3902973978), the RegEx was only catching
a fraction of the cases it was meant to be.
This is what we were finding on 74573 version of the RegEx:

This is what we should be finding for all of the cases that
`define_sanity` will need to check for:

This is what was broken as a consequence:

As stated in the introductory PR #74333
(ccef887efe), it's not the end of the
world if we miss unmanaged local defines, but it's still useful to have
this as a maintainability tool to ensure that everything remains as
clean as it possibly can. I wish we could do the whole matching method
like the aforementioned PR supposed could happen, but it simply doesn't
appear to work the way we want it to.
## Changelog
Nothing player facing.
I tried to experiment with `UNLINT()` but I got absolutely ganked by
getting the regex to work, so the fix for the FA Icon file may not be
super duper great unfortunately. Let me know if you have a showstopper
idea, this is just a stopguard so this PR can get merged and I don't
have to keep talking about unmanaged local defines while reviewing PRs.
* Fixes Define Sanity
---------
Co-authored-by: san7890 <the@san7890.com>
* Fixes a bunch of callbacks that were being qdeleted, and code cleanup (#77904)
## About The Pull Request

Continuing the work of
https://github.com/tgstation/tgstation/pull/77850.
it started with finding one that was being missed and causing a
runtime...then I noticed a whole lot more. While I was doing this I
found callbacks that weren't being nulled in `Destroy()`, so I added
that wherever I found these spots as well as some general code cleanup.
There were a lot more of these than I initially hoped to encounter so
I'm labeling it as a refactor.
## Why It's Good For The Game
Fixes lots of runtimes, improves code resiliency.
## Changelog
🆑
refactor: fixed a bunch of instances of callbacks being qdeleted and
cleaned up related code
/🆑
* Fixes a bunch of callbacks that were being qdeleted, and code cleanup
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Replaces the decloning virus clone damage with a status effect (#77824)
## About The Pull Request
Simply replaces the decloning virus's dependency on clone loss with a
status effect that operates on a strike system, very similar to how it
was handled with clone damage. The strikes are reversed if you have
mutadone in your blood, eventually removing the status effect entirely.
If the virus is cured, the status effect is also removed.
Additionally, the decloning virus was not curable before. The cure hints
suggested this shouldn't be the case, so I added it back again.
## Why It's Good For The Game
Explanation from #77569:
> Clone damage is a damage type that shouldn't exist anymore, it's a
relic left from the era of cloning and it's so specific of a damage type
that it rarely gets used as a result. It really should be a type of
affliction (wound etc) instead of its own damage counter.
What's changed since then is that I don't think clone damage should not
exist at all anymore. It only affects one department and a few odd
situations anyways.
This PR should actually change very little about the virus, as it works
with the same numbers as it did before, and since cloneloss healing is
just as easy to come by as taking mutadone is.
## Changelog
🆑 distributivgesetz
add: Replaces decloning clone damage with a strike system that you can
replenish with Mutadone.
fix: The decloning virus is curable with rezadone again.
/🆑
* Replaces the decloning virus clone damage with a status effect
---------
Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
* fixes regal rats not running away (#77888)
## About The Pull Request
fixes the regal rat not running away from whoever attacked him. also
adds a new pet command behavior which makes the king's minions drop
whatever they are doing and defend their king from whoever has attacked
him.
## Why It's Good For The Game
the rats now behave right
## Changelog
🆑
fix: regal rats now run away from whoever attacked them
add: new pet behavior which makes pets defend their owners if they got
attacked
/🆑
* fixes regal rats not running away
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Roundend reporting now has a section for achievements earned during the round (#77861)
## About The Pull Request
The roundend report now has a section dedicated to achievements earned.
It will report the ckey/identity of the player, the earned achievement,
and where it was earned.

## Why It's Good For The Game
Adds some more fun stuff to the roundend report, and contributes to the
recent uptick in achievement-related PRs.
## Changelog
🆑 Rhials
add: The roundend report will now read out any achievements ("cheevos"
as you may know them) earned by players over the course of the round.
/🆑
* Roundend reporting now has a section for achievements earned during the round
---------
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
* Adds error on qdeling callback, fixes errors this causes (#77850)
## About The Pull Request
You shouldn't ever qdel a callback. If you don't want to own it free
your ref (remove it from a list/set it to null). When all refs are
cleared it'll get cleaned up by byond itself
* Adds error on qdeling callback, fixes errors this causes
* Update cell_component.dm
* Update acid.dm
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Implements byond_status() for harddel hunting (#77818)
## About The Pull Request
In addition, improves dump_harddel_deets usage to hopefully hit in unit
testing
byond_status() will dump as a part of find_references(). While I'd like
to expand that if we ever get a proper version, this is good for how we
have things setup rn.
* Implements byond_status() for harddel hunting
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Adds a check grep for using `src` as a trait source rather that `REF(src)` (#77836)
## About The Pull Request
Using `src` as a trait source is an error and can often lead to
hard-deletes
If you wish to tie a source to a certain datum, it is common to use
`REF(src)` instead.
Ideally, we would lint or test for any use of a reference rather than a
string in use in trait sources, but that's a bit harder to setup.
Currently (from what I can see) the *only* erroneous use of references
as sources are via `src`, so it being the most common error, I see it
fine to lint for it.
## Changelog
Nothing player facing.
* Adds a check grep for using `src` as a trait source rather that `REF(src)`
* Update style.dm
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Adds a new full hair gradient, smoothes out the split gradients a tad. (#77769)
* Adds a new full hair gradient, smoothes out the split gradients a tad.
---------
Co-authored-by: DATAxPUNGED <44149906+DATA-xPUNGED@users.noreply.github.com>
* Very quick wound code improvement (#77814)
## About The Pull Request
Replaces four hardcoded `locate(wound) in wounds` with a proc and 1
loop.
## Why It's Good For The Game
Why iterate over a loop four times when you can iterate once?
## Changelog
🆑 Melbert
code: Cleans up limb wound examine text code a tad.
/🆑
* Very quick wound code improvement
* Modular update
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Fix sleep status effect not processing (#77637)
## About The Pull Request
Some fixes in #77219 brought up some weirdness with the sleep status
effect. Healium would perma-sleep people, and sleeping in general lost
the ability to heal minor wounds.
## Why It's Good For The Game
Fix bugs, wow healium is abusable right now
* Fix sleep status effect not processing
---------
Co-authored-by: FlufflesTheDog <piecopresident@gmail.com>
* General code maintenance for Mat container related stuff (#77671)
1. Removes `/obj/machinery/ore_silo/proc/remote_attackby()`. This proc
calls `datum/component/material_container/user_insert()` anyway which
performs all the checks necessary for inserting stuff into the ore silo
and `/obj/machinery/ore_silo/proc/remote_attackby()` was just repeating
its code & checks. So now inserting into the ore silo is directly
handled by the mat container without this proxy proc making the
operation slightly faster
2. Removed silo `attackby` code. Same operations can be done via
`screwdriver_act` & `crowbar_act` procs much cleaner
3. The ore silo now hooks onto signals
`COMSIG_MATCONTAINER_ITEM_CONSUMED` and
`COMSIG_MATCONTAINER_SHEETS_RETRIVED` and logs into silo when they are
triggered. This means when you insert/eject sheets from the silo the
connected machine performing the operation no longer has to do the
logging manually thus the proc `silo_log` has been removed from a lot of
places ,reducing overall code size
4. A lot of stuff that use materials from the ore silo follow this
pattern.
i.e. They first use the materials from the silo and then log it via
`silo_log` proc. This code pattern is repeated in a lot of places so
let's just merge these 2 lines with some extra sanity checks into a
single proc inside `remote_materials` itself. That's what was done and
the number of places where you log manually into the silo has been
removed further reducing code size everywhere.
5. Added auto doc & cleaned up some procs
Since logging is now done by the ore silo directly, we need a way to
pass the machine that is inserting items into the silo to the signal
handlers of the ore silo [via the `context` var]. So other code changes
elsewhere is because of this var
* General code maintenance for Mat container related stuff
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Mining mob tweaks (#77763)
## About The Pull Request
~~I wanted to do this after #77700 (wow cool numbers) but nobody has
merged it yet despite how simple it is so i'll just hope they don't
conflict.~~ Thanks san
I'm fucking about with mining mobs with the intention of making them
more interesting but not necessarily towards making mining _harder_, but
some of these changes unquestionably have done so.
These changes are mostly in response to feedback about Watchers who are
definitely significantly more threatening than previously, although some
of this is user error.
- Watchers are annoying when traversing lavaland because they use their
ability on you instantly upon acquiring a target, if you are trying to
escape other fauna this quickly becomes deadly.
- A lot of players don't really realise what the overwatch ability is
actually doing and so just complain about getting machine gunned.
- If you _do_ react properly to the ability it still makes fighting them
take a lot longer than it used to.
- The "look away" icon is hard to see in the dark sometimes
To ammeliorate these factors I have:
- Reduced watcher health by ~20%
- Display an alerted graphic over the head of the watcher every time you
trigger the overwatch.
- Multiple watchers now won't overwatch you at the same time (this made
the "penalty" volley essentially become instant death)
- The "look away" icon is rendered above the lighting plane so you can
always see it
- Added a new component which tracks how long a mob has had a specific
target.
- - Watchers will now only Overwatch you if they've seen you for at
least 5 seconds (usually they'll try and shoot at you twice before
this).
- - Goliaths will only tentacle you if they've seen you for at least 3
seconds.
If overwatch is still problematic after this I guess I can just nerf it
to not track movement at all and only respond to attacks.
## Why It's Good For The Game
I don't want to discourage miners from "actually mining" by having them
get sniped just for walking around and the added time-to-kill on these
guys could make clearing tendrils more tedious too.
## Changelog
🆑
balance: Watchers have less health
balance: You can't be overwatched by several watchers at a time
balance: Watchers won't overwatch you instantly upon seeing you
balance: Goliaths won't launch tentacles at you instantly upon seeing
you
/🆑
* Mining mob tweaks
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>