Commit Graph

1917 Commits

Author SHA1 Message Date
Mothblocks
448b213fec Remove eye surgery fluff line (#80565)
## About The Pull Request
Removes a side effect in can_start which MUST be pure. This causes the
surgery tgui to spam this message. It's pointless because you can't do
the surgery to begin with if this returns false, so you only ever see
this where you shouldn't.

## Changelog

🆑
fix: Fixed the surgery menu spamming chat messages when on the eyes
section of a player with no eyes.
/🆑
2023-12-26 19:02:18 +01:00
MrMelbert
d5d74fd9b5 Fix heartbeat continuing for a while on revival (#80561)
## About The Pull Request

- If you are defibbed (into hard crit), your heartbeat will be
`BEAT_FAST`
- If you are healed fast enough from hard crit, such that you do not
life tick while in soft crit, you skip `BEAT_SLOW`
- If you skip `BEAT_SLOW`, it never stops the heartbeat

This PR fixes this issue by checking `if not in crit, and heartbeat
sound is playing -> stop sound`.

## Changelog

🆑 Melbert
fix: Fixed some occasions in which heartbeat SFX will continue on
revival for longer than expected
/🆑
2023-12-26 03:19:30 +01:00
SyncIt21
fe25dce035 More optimizations for reagent code (#80529)
## About The Pull Request

1. Removed offsetting reagent volumes by the quantization/rounding
constants before comparing values. Not required since the final total
volume is rounded inside the reagent holder anyway.
2. Removed excessive calls to the hottest proc in reagent code i.e.
`update_total()` per reaction step. Speeds up reactions even more.
3. Removed rounding of volumes (like in liver, pyrotechnics, overheated
reactions) where the volume is already rounded inside the holder.
4. Avoid calling `handle_reactions()` if the holder is already reacting
when adding new reagents.

## Changelog
🆑
code: removed excess calls to `update_total()` making reaction code
slightly faster.
code: removed excessive use of chemical constants (quantisation &
rounding constants) in places where they were not needed i.e. plumbing
buffer, reaction chamber, pyrotechnics & the liver.
/🆑
2023-12-24 23:58:01 +01:00
lizardqueenlexi
c340a60506 Lizard spines no longer "float" on characters without lizard tails. (#80456)
## About The Pull Request

Fixes #69658.

As the title says, this PR resolves the issue where lizard spines always
have a "tail" portion even if there isn't actually a tail for them to be
on. This has been done via two steps:

1. Spine icons have been separated into "spine" and "tailspine" icon
states, for those on the back and those on the tail, respectively.
2. Tailspines now have their own, separate bodypart overlay, which is
added by the tail if the owner has spines. This bodypart overlay appears
if both a tail and spines are present, and is removed if this ceases to
be true.


![image](https://github.com/tgstation/tgstation/assets/105025397/6f62340e-3ca8-48b5-97e4-5f80712abbcd)

This image displays the results of this change. From left to right, it
shows:

1. A lizard with both a tail and spines.
2. A lizard with spines but not a tail (specifically, one where the tail
was removed).
3. A lizard with a tail but not spines (specifically, one where the
spines were removed).
4. A lizard with the "short" tail style, which does not fit the shape of
tail spines and thus doesn't have them.
5. A lizard with a felinid tail surgically attached, which also does not
receiver tail spines.

Which tails will successfully render tail spines is now handled by a
"spine_key" define in the tail sprite datum. Currently, such a key only
exists for the standard lizard tail shape, but should anyone wish to
sprite spines for other sorts of tails, it is now a simple matter to do
so.

Relatedly, handling for tail spines has been moved to the base tail
object, rather than lizard tails in particular. This functionally
changes nothing, but may make life easier for downstreams that want to
add spines to tails that are not explicitly _lizard_ tails.

Finally, this PR also fixes a bug introduced in #79687, which made
bodypart overlays not update at the right time when external organs are
inserted or removed. Specifically, bodyparts were redrawn _before_ the
overlays were added or removed, meaning they would not update until
something else forced a redraw. This is no longer the case.
## Why It's Good For The Game

"Floating" lizard spines are incredibly ugly visually, and a major
obstacle to adding lizard tails that are not of the "standard" shape. In
addition to cases where a lizard loses their tail mid-round, this also
allows tailless or short-tailed lizards to actually use one of lizards'
main customization options without looking like a total buffoon.

The extensibility, as stated before, may be nice for downstreams that
wish to place spines on more tails, and may even be useful here if
someone wishes to sprite spines for the "short" tail style.

Also makes the code nicer, as the tail/spine wagging interaction
previously relied on a very ugly two-way link between the two organs
that has been rendered unnecessary by the tail handling everything.

Finally, it's good to fix a bug that completely destroyed the usability
of feature manipulation surgery.
## Changelog
🆑
fix: Feature manipulation surgery will now properly update the patient's
appearance.
refactor: The tail portion of lizard spines will no longer draw on
people who do not have a tail.
/🆑
2023-12-21 18:52:58 +01:00
Diamond_
c444c19438 Fixes runtime from cyber implants (#80429)
## About The Pull Request

Adds an unregister signal that was missing 
## Why It's Good For The Game

Runtimes from changing implant bad.
## Changelog
🆑
fix: Fixes runtime from augments not unregistering a signal.
/🆑
2023-12-18 15:53:32 -08:00
Time-Green
950bedecc4 Fixes monkeys eating your organs while still inside you (#80416)
Fixes #80367, #80372 (hopefully)

🆑
fix: Monkeys will no longer eat your organs while they're still inside
of you
/🆑
2023-12-18 16:11:13 +01:00
Diamond_
eda9114359 Refactors reviver code (#80386)
## About The Pull Request

Cleans up reviver code to overall make it simpler and properly implement
the cooldown that it said it had in the code but never really had.
Additionally, stops the reviver trying to revive someone that isn't in a
revivable state, which fixes
https://github.com/tgstation/tgstation/issues/80371. Wasn't sure how
long to make the delay but I figured just a 5 second delay after the
first heal proc should be fine. About the same as what the original
cooldown was from being paired to the heal proc's second iteration.
## Why It's Good For The Game

Changes variables and checks used by the reviver to make sure it
functions properly with the cooldown that seemed to be intended in the
code. Additionally, prevents the reviver from infinitely defibbing a
non-revivable corpse.
## Changelog
🆑
fix: Reviver no longer attempts to revive impossible to defib mobs.
refactor: Cleaned up unnecessary variables and re-arraigned code to have
it perform altogether in one tick. Additionally added a proper cooldown
to revivers.
/🆑
2023-12-17 20:57:15 +00:00
Time-Green
3ed292efab Fixes AIize and borgize (#80393)
Fixes #80314 

Fixes these two admin procs. I have no idea what posessed the coder of
AIize, they were just deleting every bodypart prior to qdelling the
mob??

🆑
fix: Fixes AIize and borgize gibbing you
/🆑
2023-12-17 17:33:54 +01:00
Jacquerel
13cd42f761 Last Resort can be used while dead (#80352)
## About The Pull Request

This PR allows Last Resort to be used while dead, in crit, or during
your reviving stasis.
Additionally it increases the stun duration applied to bystanders from 2
to 4 seconds.
The confusion applied to bystanders has been increased from 3 to 12
seconds.

Additionally it fixes a runtime which was being triggered by Last Resort
where a body part was being passed into the argument for
`bodypart_remove` which expected to be passed a human, not a limb.

## Why It's Good For The Game

Last Resort is a rarely-used ability which makes you very vulnerable and
requires you to find (or create) a corpse as a fairly fragile mob in
order to return to the round (it's a last resort in other words). It
also costs 20 chemicals, which means you need to have saved those to do
this instead of Regenerative Coma or Fleshmend.

Because it was only usable while _alive_ (not even when in crit) it was
also actually quite difficult to trigger because it requires two inputs
(there's a confirmation box about whether you are sure you want to gib
yourself) during a narrow window (where you know you are going to lose a
fight, but haven't been knocked unconscious yet). Being usable while in
crit or dead means it can now be activated during the relatively common
scenario where you are dead, handcuffed, and being dragged towards a
machine which will destroy your body without first needing to wait for
regenerative coma to complete _and_ to regenerate an additional 20
chemicals.
This likely makes changelings potentially stickier and harder to
permanently remove, to which I think: good, they're too _easy_ to deal
with at the moment and seeing them get reborn due to careless corpse
disposal is fun.

Additionally I have _slightly_ increased the duration of the stun and
disorient applied to onlookers. Previously it applied a two second stun
(and a 3 second confusion, 2 seconds of which was spent stunned),
however the headslug only spawns after a one second delay. This makes
its chance of escaping essentially nil, even if the corpse bursts
directly on top of an air vent.
With a slightly longer stun there is some chance that it will escape,
though there is still a reasonable chance that if there's more than one
person around, they will manage to catch you before you crawl into a
vent.

## Changelog

🆑
balance: Last Resort can now be used while unconscious or dead.
balance: Last Resort stuns bystanders for slightly longer.
/🆑
2023-12-17 01:11:56 +01:00
Singul0
71da2041b9 [NO-GBP] Fixes Advanced Plastic Surgery free to use roundstart (#80295)
## About The Pull Request
Fixes #80266

![ah-eto-bleh-anime](https://github.com/tgstation/tgstation/assets/127663818/e1701596-709c-4c95-8476-9d6db8e1d8ea)
## Why It's Good For The Game
Should have debugged that
## Changelog
🆑
fix: Advanced Plastic Surgery is now unavailable shiftstart
/🆑
2023-12-14 16:51:41 +01:00
Watermelon914
b386d332c1 Reworks morgue trays. Freezers and morgue trays now have their own internal air. Organs no longer take damage when below freezing temperatures. (#80219)
## About The Pull Request
Morgue trays will now appear green if there's a revivable person within
the morgue tray with a key/ghost attached. They will make periodic beeps
every minute, which can be turned off.

Morgue trays and freezers now have an internal gasmix which
automatically cools down to -60 celsius degrees. As a result of this,
organs will not take damage when temperatures are below 0 celsius
degrees.
If an organ is within a carbon, it will take from the carbon's body
temperature instead of the external temperature. This means that if they
are covered in insulating wear, organs can still take damage if in a
freezer or morgue since their body temperature won't decrease
immediately.

## Why It's Good For The Game
Morgue trays are in a somewhat bad place with how they require you to
stay in your body if you are revivable so that they appear green. This
changes that. They're also supposed to preserve organs but they fail at
doing that, so organ preservation has been overhauled completely to be
more interesting.

## Changelog
🆑
balance: Organs can now be preserved by putting them in freezing
temperatures.
balance: Morgue trays and freezers will now cool down the contents
placed inside of them.
balance: Morgue trays will now properly display if someone stored within
them is revivable and make periodic beeps every minute.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2023-12-12 22:17:03 +01:00
Time-Green
54ab1e3936 Organ movement refactor *Un-nullspaces your organs* (#79687)
<!-- 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. -->

closes #53931, #70916, #53931

## About The Pull Request

Organs were previously stored in nullspace. Now they are stored in their
prospective bodyparts. Bodyparts are now stored in the mob.

I've also had to refactor a lot of code concerning organ movement.
Previously, organs were only moved into bodyparts once the bodyparts
were removed. To accomodate this change, two major distinctions have
been made:

**Bodypart removal/insertion**
Called only when an organ is taken out of a bodypart. Bodypart overlays,
damage modifiers or other changes that should affect a bodypart itself
goes here.

**Mob insertion/removal**
Called when an organ is removed from a mob. This can either be directly,
by taking the organ out of a mob, or by removing the bodypart that
contains the organ. This lets you add and remove organ effects safely
without having to worry about the bodypart.

Now that we controle the movement of bodyparts and organs, we can fuck
around with them more. Summoning someones head or chest or heart will
actually kill them now (and quite violently I must say (chest summoning
gibs lol)).


https://github.com/tgstation/tgstation/assets/7501474/5efc9dd3-cfd5-4ce4-b70f-d0d74894626e

I´ve also added a unit test that violently tears apart and reconstructs
a person in different ways to see if they get put toghether the right
way

This will definitely need a testmerge. I've done a lot of testing to
make sure interactions work, but more niche stuff or my own incompetence
can always slip through.

## Why It's Good For The Game

<!-- 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. -->

A lot of organ work is quite restricted. You can't C4 someones heart,
you cant summon their organs and a lot of exceptions have to be made to
keep organs in nullspace. This lets organs (and bodyparts) play more
nicely with the rest of the game. This also makes it a lot easier to
move away from extorgans since a lot of their unique movement code has
been removed and or generalized.

I don't like making PRs of this size (I'm so sorry reviewers), but I was
in a unique position to replace the entire system in a way I couldn't
have done conveniently in multiple PRs

## 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: Your organs are now inside your body. Please report any issues
with bodypart and organ movement, including exotic organ, on github and
scream at me
fix: Cases of unexpected organ movement, such as teleporting bodyparts
and organs with spells, now invokes a proper reaction (usually violent
death)
runtime: Fixes HARS runtiming on activation/deactivation
fix: Fixes lag when species swapping
/🆑

<!-- 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. -->
2023-12-09 17:50:46 +00:00
YesterdaysPromise
71a1fee2f1 Explodes device.dmi (#80025)
## About The Pull Request

I woke up today and thought 'what would be easy thing to do today so I
can say I've done something?'. Then I remembered I saw several gangtool
usages the time I split radio up, and I could remedy those. 7 hours
later, device.dmi is split in a folder of its own, and I've also given
unique sprites to door remotes and landing desginators.


## Why It's Good For The Game

The device.dmi was kind of a mess.

## Changelog

🆑
/🆑
2023-12-09 13:31:50 +01:00
Fikou
fe8fae8a13 fixes punished sect instant transformation from changing species (#80174)
## About The Pull Request
so for some fucking reason the signal for removing a limb doesnt send
whether or not its a special removal (which it does for adding)
and for another fucking reason the proc whether or not an organ should
matter for burden is NEVER CALLED
fixes #76163

also i think i fucked something up with echolocation. i should make it a
subsystem. i couldnt reproduce the bugs that i had but i had those bugs
when i was on a byond version without breakpoints so rip. a few days ago
an admin tried it on live and it made an infinite amount of images. i
tried it a few days later and it didnt happen? i have no fuckin clue

## Why It's Good For The Game
AHHHHHHHHHH!!!!!!!!!

## Changelog
🆑
fix: fixes punished sect giving you burden for stuff like changing
species
/🆑
2023-12-08 18:39:24 +01:00
distributivgesetz
f7cb0f8018 Rename notify_ghost_cloning to notify_revival (#80096)
<!-- 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

Renames 
- `/mob/proc/notify_ghost_cloning` to `/mob/proc/notify_revival`
- `/mob/dead/observer/proc/notify_cloning` to
`/mob/dead/observer/proc/send_revival_notification`
- `/atom/movable/screen/alert/notify_cloning` to
`/atom/movable/screen/alert/revival`.

I could have found a way to merge both procs together but default
parameters keep me up at night.

<!-- 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

Conciseness, code that is named after a removed feature is silly.

<!-- 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. -->

nothing playerfacing

<!-- 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. -->
2023-12-05 02:24:18 -05:00
distributivgesetz
274eb2a52e Removes Clone Damage (#80109)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

Does what it says on the tin. We don't have any "special" sources of
clone damage left in the game, most of them are rather trivial so I
bunched them together into this PR.

Notable things removed:
- Clonexadone, because its entire thing was centered around clone damage
- Decloner gun, it's also centered around cloning damage, I couldn't
think of a replacement mechanic and nobody uses it anyways
- Everything else already dealt clone damage as a side (rainbow knife
deals a random damage type for example), so these sources were removed

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game

Consider the four sources of normal damage that you can get: Brute,
Burn, Toxins and Oxygen. These four horsemen of the apocalypse are very
well put together and it's no surprise that they are in the game, as you
can fit any way of damaging a mob into them. Getting beaten to death by
a security officer? Brute damage. Running around on fire? Burn damage.
Poisoned or irradiated? Toxin damage. Suffocating in space? Brute, burn
and oxygen damage. Technically there's also stamina damage but that's
its own ballpark and it also makes sense why we have a damage number for
it.

Picture this now: We have this cool mechanic called "clone pods" where
you can magically revive dead people with absolute ease. We don't want
it to be for free though, it comes at a cost. This cost is clone damage,
and it serves to restrain people from abusing cloning.

Fast forward time a bit and cloning is now removed from the game. What
stays with us is a damage number that is intrinsically tied to the
context of a removed feature. It was a good idea that we had it for that
feature at the time, but now it just sits there. It's the odd one out
from all the other damage types. You can easily explain why your blade
dealt brute damage, but how are you going to fit clone damage into any
context without also becoming extremely specific?

My point is: **clone damage is conceptually a flawed mechanic because it
is too specific**. That is the major issue why no one uses it, and why
that makes it unworthy of being a damage stat.
Don't take my word for it though, because a while ago we only had a
handful of sources for this damage type in the game. And in most of the
rounds where you saw this damage, it came from only one department. It's
not worthwhile to keep it around as a damage number. People also didn't
know what to do with this damage type, so we currently have two ways of
healing clone damage: Cryotubes as a roundstart way of healing clone
damage and Rezadone, which instantly sets your clone damage to 0 on the
first tick. As a medical doctor, when was the last time you saw someone
come in with clone damage and thought to yourself, "Oh, this person has
clone damage, I cannot wait to heal them!" ?

Now we have replacements for these clone damage sources. Slimes? Slime
status effect that deals brute instead of clone. Cosmic heretics? Random
organ damage, because their mechanics are already pretty fleshed out.
Decloning virus? The virus operated as a "ticking timebomb" which used
cloning damage as the timer, so it has been reworked to not use clone
damage. What remains after all this is now a basically unused damage
type. Every specific situation that used clone damage is now relying on
another damage type. Now it's time to put clone damage to rest once and
for all.

Sure, you can technically add some form of cellular degradation in the
future, but it shouldn't be a damage number. The idea of your cells
being degraded is a cool concept, don't get me wrong, but make it a
status effect or maybe even a wound for that matter.

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
del: Removed clone damage.
del: Removed the decloner gun.
del: Removed clonexadone.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2023-12-04 14:42:43 -08:00
distributivgesetz
f8b41f9442 Changes occurrences of recieve in code to receive (#80065)
## About The Pull Request

I've stumbled across this enough to finally go through the entire
codebase and fix it. I left out changelogs simply because rewriting
history logs is bad.
## Why It's Good For The Game

I find it pretty annoying because I stumble across words that are
misspelled for a few seconds, and I'm likely not the only one who feels
like this. Less spelling mistakes in code are better.
## Changelog
🆑
spellcheck: Occurrences of "recieve" has been changed to "receive".
/🆑
2023-12-02 14:50:57 -07:00
san7890
7f7688b60a Demotes the "electrical conductivity" flag from flags_1 to obj_flags (#80033)
## About The Pull Request

Code to handle this flag only ever existed on the `/obj` sublevel, so
there's no need for it to be on the `/atom` level `flags_1`. There was
probably a point in time in which mobs or turfs conducted electricity
but there's zero code for it anymore so we truly just live in a society
now.
## Why It's Good For The Game

Frees up a slot on `flags_1` (which is really nice actually), proper
scoping of certain bitflag stuff, etc.
## Changelog
Not relevant to players.

I may have screwed something up, will be doing a few passes on this
myself to ensure all the search and replaces went alright but we should
be good™️
2023-12-01 21:43:46 -05:00
LemonInTheDark
96f19b962a Removes some done todos (and ones that I think are dumb) (#80017)
## About The Pull Request

Most of these are mine that I just forgot about, only one I think anyone
cares about is the one in mobs.dm about making delta time match
subsystem yielding, but I think it's a bad idea so it's gone

Oh also, replaces an old comment of mine with an actual explanation
(it's about the icon cache and shit)
2023-12-01 00:58:13 +01:00
Thlumyn
ac7f41a416 Slimepeople Can Get Wings from Strange Elixirs (#80019)
## About The Pull Request

Adds slime wings. The slime wings look similar to dragon wings, but are
a bit more transparent throughout, especially in the middle part of the
wing membranes, and have some drippiness to the bottom (though thats
harder to see on darker slimes)


![image](https://github.com/tgstation/tgstation/assets/102194057/f19d6d09-c475-40d2-af68-8521fec3f9ba)

![image](https://github.com/tgstation/tgstation/assets/102194057/7a8fc450-9011-46d4-ba1b-acd836e51b25)
## Why It's Good For The Game

If even flies and skeletons can get wings - why not slimes? Especially
since xenobiologists which often end up as slimepeople can make the
flight potion via xenobiology.
## Changelog
🆑
add: Slimepeople can now get wings from flight potions.
/🆑
2023-12-01 00:12:07 +01:00
MGOOOOOO
c00f7d53a3 The Inversenning : Superior Healing Medications (#79342)
Introducing new inverse reagents for existing superior healing
medications! This push includes...

**Benzoic Acid** : Inverse of Salicylic Acid. Robust fertilizer that
provides a decent range of benefits for plant life.

**Oxymetholone** : Inverse of Oxandrolone. Anabolic steroid that
promotes the growth of muscle during and after exercise.

**Bamethan** : Inverse of Salbutamol. Blood thinner that drastically
increases the chance of receiving bleeding wounds.

**Pendetide** : Inverse of Pentetic Acid. An unusual bioradioactive drug
that purges basic radiation healing chems. Also increases the severity
of radiation poisoning.

**Hyoscyamine** : Inverse of Atropine. Heals heart and stomach damage,
and slowly removes minor toxin damage.

**Ammoniated Sludge** : Inverse of Ammoniated Mercury. A ghastly looking
mess of mercury by-product which causes bursts of manic hysteria.

**Inreziniver** : Inverse of Rezadone. Makes the user horribly afraid of
all things related to carps.

This is an effort to add more variety to the existing inverse reagent
system within chemistry. Not only should this variety serve to provide
additional options for a Chemist to experiment with, they should also
broaden the possibilities for already existing strategies.
2023-11-28 14:53:09 +00:00
itseasytosee
5dcdb6ca9c Stagger bugfix + pummeling grammar (#79977)
## About The Pull Request
Small bugfix which properly upgrades the difficultly of breaking out of
a passive grab to that of an aggressive grab if staggered and stamina
damaged. Punching someone while grappled gives unique damage text based
on the limb used.
## Why It's Good For The Game
Bugfix. More user feedback.
## Changelog
🆑 itseasytosee
fix: staggered targets now have the correct chance for escaping
grapples.
spellcheck: changed attack verb for punching a grappled target
/🆑
2023-11-28 14:47:10 +01:00
wesoda25
31c164c9a8 Dismemberment moodlet now properly clears for regenerated limbs (#79822)
## About The Pull Request

That's a mouthful. Upon being resurrected by a crystal, dismembered
ethereals now lose the dismemberment negative moodlet. Fixes: #79812

## Changelog
🆑
fix: the dismemberment moodlet will now properly clear for ethereals who
regrew a limb in their resurrection crystals
/🆑

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-11-26 01:24:11 -08:00
Profakos
4b4ada0339 Slime type datum, and cleans up slime related code (#79852)
## About The Pull Request

I have decided to help out with basic mobbing slimes, and found out,
that this code is ancient and crusty. So I have decided to refactor and
tweak things bit but but, until the moment I will hit AI related stuff.

I might have gone a bit overboard, and performed a melange of fixes. I
have done the following in order:

- Slime colour, core type and mutation list are now held by a single
`slime_type datum`. This means the slime's core is no longer spawned
using text operations on the slime's colour, and the slime's mutation is
no longer a single large switch statement that returns an exactly four
element length array. Icons are still based on the slime's colour
define, but that is now more changeable.
- Autodocced all the slime procs and vars I could find, while also
renamed them to be more descriptive. Also made Booleans actual booleans.
Also added code to confused code segments. For example, did you know
that slimes would forgive all its stacks of Feeling Very Attack Right
Now, if it has exactly one level of Discipline? I didn't, and I almost
turned the 1 in the check into a TRUE before I had a second look.
- Added defines to the slime hunger checks
- Cleaned up a lot of single letter vars in all code that referenced the
now changed variables.
- Large amount of if-chain pyramids have been turned into early returns.
More readable.
- Made the xenobiology camera shortcuts and actions always do the same
thing, though the action buttons still loop through all of the conents.
In addition, after seeing a comment lamenting about varied load orders,
I have made autolinking the monkey recycler is now done in
LateInitialize, which didn't exist when it was made.
- I have included an UpdatePath that changes the colours of premapped
slimes, but I did not do anything for the other values.
- I noticed slimes were unable to attack pacifist humans, due to trait
checking the human instead of the attacking slime. This has been fixed.
- The slime scanner has an examine block, and it now describes your
slimes' "mutation attempt chance", instead of like, performing math in
case the slime's current colour is one of the mutations, or hiding it if
it has none. This value is needed to breed rainbow slimes.

This has been an extremely large scrubbing. I am willing to try rip it
up into smaller chunks, even if most of it is just single letter vars
and if pyramids.

## Why It's Good For The Game

If code is more readable and expandable, it will aid in further
refactors.

## Changelog

🆑
refactor: Slimes's colour, core type and mutation list is now held in a
slime type datum
code: Slime's variables have been documented, and renamed a bit to add
clarity. Please report bugs that might stem from renaming.
fix: Slimes are not longer prevented from attacking pacifist humans.
qol: Slime scans now display the actual amount of genetic instability,
instead of hiding it if a slime doesn't mutate further, or tweaking it
if it might mutate back into itself. This will make it easier to parse
which slime to breed further to get a rainbow slime.
/🆑
2023-11-25 18:10:55 +00:00
necromanceranne
84cb29b23e [READY] The Cyberbrawlening: Augment your Unarmed Strikes for Maximum Damage (#79705)
## About The Pull Request

Robotics can print Advanced cybernetic arms and legs. These limbs have a
higher max health (though contribute the exact same amount to core
health as normal limbs), higher unarmed damage and higher unarmed
effectiveness than organic limbs.

In addition, Strongarm implants now respect the unarmed potential of the
limb it occupies. This means you can potentially get much higher damage
output if your arm would be capable of higher potential damage and armor
penetration. They also do additional stamina damage (1.5x punch damage)
so that you can capitalize better on unarmed combinations.

Surplus Prosthetic limbs now contribute a total of 250% of their carried
damage against overall health. With only 20 max HP, that means at full
damage, the user suffers 50 damage per limb. They also have terrible
unarmed values.

Cleans up exofabricators a touch and creates some defines for limb
values.

New Sprites 


![image](https://github.com/tgstation/tgstation/assets/40847847/96855c64-e5d4-4bfc-a508-a33a704ce3a6)

![advanced limbs
2](https://github.com/tgstation/tgstation/assets/40847847/ac8cf765-7904-4191-a79c-5b38ccf895b5)

## Why It's Good For The Game

I really want to encourage people to get involved in unarmed combat, so
I want to include some potential ways to seek out improving your unarmed
combat ability. One possibility should be robotics!

Currently, Strongarm implants are....possibly worse than unarmed
attacks? To solve that slightly, they now utilize the attacking limb's
unarmed potential as bonuses to the damage dealt as well as penetrative
power. I don't have a perfect solution for this at the moment, but at
least anyone utilizing this implant isn't unintentionally harming their
unarmed combat potency...too much.

Surplus Limbs are, once again, extremely good at taking damage and have
almost no actual negatives at the moment. I tried to resolve this in
https://github.com/tgstation/tgstation/pull/71739, but the code changes
I added have since become obsolete once again, leaving us once again
with surplus limbs acting as a health _boost_ rather than a health
_malus_. This fixes that issue once and for all, and if you have these
limbs, they're going to fucking _suck_.

## Changelog
🆑
add: The battle against Maint Khan's forces rages on in the periphery
stations of the Spinward Sector. And with it, a new breed of unarmed
warrior has emerged; the cybernetic martial artist. Nanotrasen, rather
than quell the minor maintenance civil war brewing in their sector, have
chosen to exploit this conflict to push their weapons and cybernetics
research to new heights!
add: Advanced cybernetic arms can be printed at the Robotics
exofabricator once researched. They are unlocked by researching the
Advanced Robotics Research node.
add: Advanced cybernetic arms are more durable than standard limbs, and
also have higher unarmed potential.
balance: Strongarm implants now utilize the attacking limb's unarmed
potential to determine damage and potential armor penetration. It also
does additional stamina damage (1.5x punch damage)
balance: Surplus prosthetic limbs contribute more of their carried
damage to overall health (AKA they make you actively more vulnerable to
damage), and deal less damage with unarmed attacks. Take Quadruple
Amputee at your own risk.
/🆑
2023-11-20 02:43:57 +00:00
Jeremiah
bbe440b3d6 More standardization for ghost notifications (READY) (#79596)
## About The Pull Request
I'm still not satisfied with how ghost notifications work. This gives
every notification with a source (99% of all notifications, in other
words) a link to jump/orbit. Currently, notifications with "play"
interactions would only get the interact link, so jumping to the source
was pretty annoying.

It removes posting the entire message in the alert tooltip, as some got
pretty lengthy and it didn't seem to fit. To replace this, they will
always use headers

After:


![image](https://github.com/tgstation/tgstation/assets/42397676/debfce52-3627-4a43-8663-33d61d893161)


![image](https://github.com/tgstation/tgstation/assets/42397676/01f299ae-dc6a-45f8-a97a-cb2c815088b2)


![image](https://github.com/tgstation/tgstation/assets/42397676/99567376-063e-458e-af2a-2dd4306747cc)

NOTIFY_JUMP and NOTIFY_ORBIT have been merged, since the only difference
seems to be whether it's a turf. The result shaves off some redundant
lines of code, since most-every usage of notify_ghosts uses
NOTIFY_ORBIT.
## Why It's Good For The Game
More standardization for the ghost notification system. Adds a few alert
headers that never had them. All in all, makes it easier for creators to
throw alerts at ghosts
## Changelog
🆑
qol: Nearly every ghost alert should now feature a "VIEW" button, even
those with click interaction.
del: Ghost alerts no longer show the entire message in the tooltip,
instead have been replaced with titles.
/🆑
2023-11-19 05:13:25 +01:00
Bloop
3f63a7133f Fixes bug with high luminosity eyes, & fixes eyes being on the wrong side of the head! (#79760) 2023-11-18 19:17:00 -08:00
MrMelbert
365e50bbce Mob attackedby / check_block refactor, plus some minor cleanup of attack_x procs (#79563)
## About The Pull Request

- Deletes `spec_attacked_by`
- Elements simple/basic mob attack threshold
- There was a skeleton mob that "mimics armor" but didn't use the actual
mimicing armor thing we have, so I changed that.
- Moves `check_shields` down to the living level, renames it to
`check_block`
 - Martial art blocking is now signalized (only CQC uses it anyways) 
- Cleaned up a bit of `attack_x` procs, but not a lot. Should have an
entire PR dedicated to this .... mess.
 - Deprecates `/obj/item/melee`

## Why It's Good For The Game

Second verse, same as the first. 

- Less bad species related procs. 
- Largely brings a lot of code in line, making combat more consistent
across types.
- Makes it a lot easier to add new code relating to blocking or taking
damage.

## Changelog

🆑 Melbert
refactor: Refactored another large chuck of attack code, primarily
involving melee item attacks and non-human mob attacks. Report if you
see anything weird
fix: Pacifists clicking on simple robots or silicons no longer causes
sparks
fix: Blocked thrown batons are now properly... blocked
/🆑
2023-11-17 19:57:51 -07:00
Shroopy
bc78411eac Adds a toggle action to implant HUDs (#79777)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request
Adds an action for all implanted HUDs to toggle them on and off. The
default state is on, and the state is toggled appropriately when the
implant is added or removed. This is done by using hud.hide_from and
hud.show_to.
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
Quality of life change for roleplay situations where the HUD is usless
clutter.
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
qol: Implanted HUDs can now be toggled on and off with an action.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-17 19:49:47 -07:00
SyncIt21
130b3dfa64 Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)
## About The Pull Request
More code improvements for reagent holder. As you can see it removes a
lot more code than it adds so code savings are significant. This does
not touch on any floating point arithmetic, all that is behind us, this
focuses on removing redundant procs and merging existing procs to
achieve the same functionality so if you do see any changes in reagent
related behaviour it's not intentional and should be reported as a bug
here.

The following code changes can be summarized into points.

**1. Removes procs `get_master_reagent_id()` &
`get_master_reagent_name()`**
Both of these procs have the exact same functionality as
`get_master_reagent()` with the only exception of returning a different
value. Instead we can just call `get_master_reagent()` directly and
infer the name & type of it ourselves rather than creating a wrapper
proc to do it for us, therefore reducing overall code

**2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`**
The proc `remove_all_type()` is highly inefficient, it first uses a for
loop to look for the reagent to remove & then it again calls
`remove_reagent()` on the reagent once it has found it. We can just
embed this functionality directly into `remove_reagent()` by simply
adding an additional parameter `include_subtypes`. This way the
operation is faster, and we reduce the code to get the job done. Also
now `remove_reagent()` will return the total volume of reagents removed
rather that a simple TRUE/FALSE

**3. Removes & Merges `trans_id_to()` proc into `trans_to()`**
Both these procs have the same job of transferring either a single
reagent or all reagents. `trans_id_to()` is a scaled down version of
`trans_to()` because
- It does not have any `method` var. This means if you want to transfer
a single reagent to a mob/organ or any other object it does not have the
functionality to expose the target to that transferred reagent.
- It does not have a `multiplier` var to scale reagent volumes
- It does not have code to deal with organs or stop reactions i.e. it
does not have the `no_react` var.

We can overcome all these short comings by simply adding an extra var
`target_id` to specify what specific reagent to transfer therefore
attaining the same functionality while keeping the benefits of
`trans_to()` proc therefore reducing overall code

**4. Lowers plumbing reaction chamber tick usage for balancing ph.**
Rather than invoking a while loop to balance ph it's much easier for the
player to simply make the reaction chamber wait for e.g. add a reagent
that will never come. This will make the chamber wait therefore giving
the reaction chamber ample time to correctly balance the ph and then
remove that reagent from the list therefore getting correct ph levels.
No need to create code hacks when the player can do it themselves  so
the while loop has been removed

## Changelog
🆑
code: removed redundant procs `get_master_reagent_id()` &
`get_master_reagent_name()`
code: merged `remove_all_type()` proc with `remove_reagent()` now this
proc can perform both functions. `remove_reagent()` now returns the
total volume of reagents removed rather than a simple TRUE/FALSE.
code: merged `trans_id_to()` proc with `trans_to()` now this proc can
perform both functions
refactor: plumbing reaction chamber will now use only a single tick to
balance ph of a solution making it less efficient but more faster. Just
make the reaction chamber wait for longer periods of time to accurately
balance ph
refactor: reagent holder code has been condensed. Report any bugs on
GitHub
/🆑
2023-11-16 21:44:48 +01:00
thegrb93
6e92697d61 Fixes lizard tail wagging graphics (#79723)
## About The Pull Request

Fix tail not getting paired with spines

## Why It's Good For The Game

Fixes: #74611
Fixes: #73230

## Changelog
🆑 falconignite
fix: Lizard tail wagging graphics
/🆑
2023-11-15 19:50:05 +01:00
MrMelbert
c15a73ed50 Heart code cleanup (#79602)
## About The Pull Request

General clean up of heart code. 

- Use `Stop` and `Restart` in `set_heart_attack`
- Use `SEND_SOUND()` rather than `playsound_local` for heartbeats
- Use `update_icon_blocker`
- Correctly ensures ethereal hearts get their overlay
   - Adds heartbeat animation to ethereal hearts

## Changelog

🆑 Melbert
code: General heart code cleanup.
fix: Heartbeat sound effects are no longer sourced to the exact tile you
fell into crit at
fix: Abductors glands are less likely to become invisible or look wrong
fix: Ethereal hearts are less likely to become invisible or look wrong,
and now properly spawn with their shine overlay
image: Adds heartbeat animation to beating Ethereal Hearts
/🆑
2023-11-14 16:37:42 -07:00
DBGit42
c99dc5b21b Fixes species/tongue-based speech modification altering sign language (#79685)
## About The Pull Request
The second part of [PR
#79677](https://github.com/tgstation/tgstation/pull/79677). It works
standalone, but is better in tandem.

This PR seeks to correct Signers from having a species/tongue-based
speech modification while signing, i.e. no 'Sss'.

Being drunk still affects Signer speech - this is fine for me,
2023-11-13 19:00:09 +00:00
Likteer
ca21b4ba00 Green Beer has an overdose effect now. It will permeate your skin. (#79537)
Green beer now has an overdose effect, stolen from spraytan.
## About The Pull Request
<details>
<summary>Healthy human specimen</summary>


![obraz](https://github.com/tgstation/tgstation/assets/68878861/3ab271df-f9d4-4ae8-a24e-b395e0766787)
</details>

<details>
<summary>What green beer already does to your body</summary>


![obraz](https://github.com/tgstation/tgstation/assets/68878861/0af4d240-bc33-4467-8a3e-b2ccccb13ee7)
</details>

The **Immediate Effects** are temporary.
As the first green moment stretches into long months, 
however - as years become long, regret-filled decades,
Green Beer reveals it's **True Power**:
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>

![obraz](https://github.com/tgstation/tgstation/assets/68878861/3dad666f-2bfc-41d5-ab01-2426991b507f)
## Why It's Good For The Game
Spray tan overdose is one of the most creative in the game.

Consuming green beer currently tints your whole sprite green.

While that is cool 
(because this effect has been moved from crayon powder to a plant from
cargo, that doesn't see much use)

I thought it would've looked better and made more sense if it applied to
your skin specifically.
So I've turned it into an overdose effect, based on spray tan.
## Changelog

🆑
add: Green Beer has an overdose effect now. It will permeate your skin.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-13 01:39:58 +01:00
DATAxPUNGED
c63831a8a5 Fixes an oversight in the examine message for a carbon with an empty golem stomach. (#79657)
## About The Pull Request

Noticed on a round recently where the warden got the golem stomach that
the message read as "He are as still as a statue!"
Turns out that the "are" wasn't setup in our pronoun system properly. I
think this wasn't noticed before because golems don't have a gender,
maybe?
## Why It's Good For The Game

Grammatical errors? bad!
## Changelog
:cl:DATA_
spellcheck: The examine message for a carbon with an empty golem stomach
now properly matches said carbon's gender.
/🆑
2023-11-12 10:21:21 +01:00
nikothedude
b71bf5dd4b The unbonening (Removes BIO_JOINTED and BIO_BONE from snail and slime bodyparts) (#79622)
## About The Pull Request

Title.

The consequences: 

Slimes can no longer receive dislocations. This is a minor buff.
Snails can no longer receive blunt wounds, period. A blessing and a
curse - while you cant break your arm, theres no bone to prevent swords
from slashing through, meaning you are very easy to dismember. 2 hits
from an esword can dismember an arm.
## Why It's Good For The Game

1. Snails are invertebrates, and it doesn't really make much sense why
they have bones.
2. I dont even know why I gave slimes joints. Theyre literally slime,
arguabl teven MORE invertebrate than a snail.
## Changelog
🆑
balance: Snails no longer receive blunt wounds, meaning sharp weapons
can dismember them more easily
balance: Slimes can no longer receive dislocations
/🆑
2023-11-10 15:07:08 +01:00
necromanceranne
1a9043d797 The Brawlening: Unarmed fighting interactions for shoving, grabbing and nonlethal takedowns (not martial arts) (#79362)
## About The Pull Request

I've tweaked some elements of unarmed fighting to give it additional
interactions between the various components, bridging them into a more
coherent system and focusing more strongly as tool for disabling
opponents nonlethally.

### Shoving

Shoving guarantees that unarmed attacks will land while knocked
off-balance (AKA when slowed by a shove).

Being off-balance means that you can be knocked down from a punch if you
have taken enough brute and stamina damage combined (at least above 40).

Being off-balance makes you vulnerable to grabs while you have a
moderate amount of stamina damage (30 damage), forcing you to have to
resist even passive grabs. This pairs _exceptionally_ well with
tackling.

### Grappling

Grappling someone makes your unarmed attacks penetrate armor based on a
new limb value called ``unarmed_effectiveness``. This is something
shared by kicking.

### Unarmed Attacks in General

``unarmed_effectiveness`` has also taken over the functionality of
``unarmed_stun_threshold``, as well as accuracy calculations. Human
equivalent limbs (pretty much all of them except mushrooms and golems)
have a value of 10.

Now, ``unarmed_effectiveness`` determines how accurately a given limb
makes unarmed attacks. Unarmed attacks have a base inaccuracy of 20%,
with effectiveness acting as a reduction to this value. (so for humans,
that's 20% - 10% before any value changes from brute and stamina
damage). It is also capped at 75% miss chance, just to avoid those weird
instances of two brawling fighters being incapable of finishing each
other off at a certain amount of damage and it being real awkward, like
it does currently.

It also determines the base probability of landing a knockdown punch.
For humans, this is 10%.

For the most part, these two particular changes are roughly equivalent
to the current values, just handled in a way that is more
straightforward to understand from a code perspective.

In addition to the above, human equivalent limbs have higher damage
floors for unarmed attacks. Arms deal 5-10 damage, while legs deal 7-15
damage. In addition, kicks also deal stamina damage, like punches do.

### Minor Mentions

Golems and Mushroom People (who don't even use their limbs for their
unarmed strikes because mushroom people start with a martial art) have
very accurate punches, and their punches penetrate quite a bit of armor
when they are entitled to that. They also have a high knockdown
probability. This is partially because they previously already _had_
these features due to the wonky math at play, but also because this is
their big thing they are good at.

Carp mutation also got a big win out of this as well. If and when you
actually manage to get that to work and matter.

## Why It's Good For The Game

My favorite thing in this game is the robustness of unarmed fighting.
It's the part of the game that actually acknowledges the sandbox and
environmental interaction in a big way. The only problem with the
unarmed combat is that it is a bit disjointed, and often much weaker
than using even the most pathetic weapon you can get your hands on
unless you're using the stun loops available. Those loops get a bit
boring, even if they're mostly all environmental (except for the lucky
neckgrab finish). Giving more options generally means that even when not
in an ideal position, you still have _some_ options.

It also has some internal inconsistencies in design even in the same
proc, like accuracy calculations and knockdowns, as well as weird splits
in damage. So I decided to resolve that.

Now, every part of unarmed fighting has some relevance in the other
parts. Predominantly, it is heavily favoured towards dealing stamina
damage, making unarmed combat very favourable as a nonlethal method of
taking someone down, which is something we currently lack considerably.
While people may still opt to simply beat someone into actual crit
rather than stop at stamina crit, the possibility is actually entirely
available and supported now. No just banking on a lucky neckgrab after a
shove.

Paying attention to damage dealt and thinking intelligently about how
you apply combinations of effects allows even someone on the significant
back foot an opportunity for a comeback if they know what they're doing
against even armed opponents.

Separating accuracy and knockdown effectiveness from damage allows for
more consistent design and readability, but also preventing weirdness
ike tighter damage spreads increasing knockdown probabilities as well as
increasing accuracy without the coder knowing why. This also lets us
make unarmed attacks just that little bit stronger. Since unarmed
attacks require more complicated combinations to work, I think this
won't make them stronger than weapons necessarily, but it will make for
more interesting swung fights.

## Changelog
🆑
add: With the flood of Chi within the Spinward Sector receding, various
masters of The Tunnel Arts, colloquially known as 'Maint-fu Masters',
have started to refine the basics of their martial techniques. New forms
have started to develop within Spacestation 13's hidden maintenance
dojos.
add: Someone shoved off-balance makes them vulnerable to more guaranteed
unarmed strikes, knockdowns from a successful punch, and more difficult
to escape grabs.
add: Grabbing someone (as well as kicking them while they're on the
floor) makes them more vulnerable to taking unarmed attack damage, even
if they have armor.
balance: Unarmed strikes made with human-equivalent limbs have higher
damage floors, meaning you overall do more damage on average while not
increasing the overall damage potential. It's more consistent!
refactor: Significantly changed how punching accuracy and knockdowns are
calculated.
balance: Golem and mushroom limbs are a lot more effective at punching
as a result of these various changes. As they should be.
/🆑
2023-11-08 23:46:51 +00:00
SyncIt21
4f23fa137f Reagent machinery code maintainence (#79395)
## About The Pull Request
1. Replaces all usages of `GLOB.chemical_name_list` with
`GLOB.name2reagent` both of these are lists that store the names of
reagents mapped to their respective typepath so the first list was
redundant. Also now `GLOB.name2reagent` has its names sorted
alphabetically & white space between words and their case preserved.
This means that
    - The search button for finding reagents in the chem dispenser
    - Adding reagents to the plumbing reaction chamber
    - Adding reagents to plumbing chem filter
    - Adding whitelist reagents to blood filter 
    
Now **won't** display a list like this(searched for Strong Acid Buffer,
notice all space and case between words are lost)
![Screenshot
(317)](https://github.com/tgstation/tgstation/assets/110812394/2f58693d-4a03-4cb4-bf26-007a4d0a2870)
But **will** instead display this(searched for Strong Acid Buffer,
notice all space and case between words are preserved)
![Screenshot
(343)](https://github.com/tgstation/tgstation/assets/110812394/606185b8-d572-443e-bdc1-82c5e21c1386)
    Making these names much more readable.

2. In searching for all use cases of `GLOB.name2reagent` i found it was
used by 2 significant machines, the chem dispenser & portable chem
dispenser. So i took the time to clean up their code(auto doc vars, make
lists static etc etc.) and converted their UI to typescript.

3. Slightly improves performance of plumbing reagent chamber. Makes
lesser loops & hopefully gets better results

## Changelog
🆑
qol: machines/devices that ask you to pick a reagent name from an input
list have their names sorted alphabetically & preserves white space
between words making them more readable.
qol: improves performance of plumbing reaction chamber furthur
code: cleaned up code for portable chem mixer & chem dispenser.
converted their ui to typescript
/🆑
2023-11-08 20:25:02 +00:00
AnturK
e154bffeb1 Fixes deleted organs trying to get infected from the owner (#79562)
If the organ owner had any diseases, it would try to add infective
component to organs getting deleted.


https://github.com/tgstation/tgstation/actions/runs/6767142734/job/18389309833#step:10:1345
(For example monkey tails when their chest gets removed )
2023-11-07 11:54:10 -07:00
Bloop
f158947a17 Makes tails stop wagging in death (#79511)
## About The Pull Request

What it says on the tin. Tails would keep wagging after the mob died. It
would also not update the sprite if the `stop_after` option was used, so
I fixed that too. Not a commonly seen thing except downstream, but
nevertheless!

edit: I also noticed some improperly ordered parameters and fixed those.
Did you know that the way it was set up, tails would actually _start
wagging_ after they got `Remove()`d? It wouldn't do anything because
they're no longer on the mob, but still...

unsettling

## Why It's Good For The Game

Removes the super cursed tails.

## Changelog

🆑
fix: tails will no longer keep wagging even in death
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-11-05 23:32:24 -07:00
Jacquerel
1189b22dc2 Golems cannot turn into Plasmamen (#79249)
## About The Pull Request

Fixes #79155 
Also cleans up the code in plasma river "lava" a bit

The plasma river code was a little crusty and confusing and made some
interesting decisions.
To start with it would do _two_ burn damage per tick to people entering
it.
Then _15 toxic and 25 more burn damage_ to specifically humans?
This seems... unintended? So now it does the same amount of damage
equally to anyone regardless of if they are human or not.

In terms of the "turning dead people into dead plasmamen" behaviour we
will now:
- Not attempt to transform any limbs which cannot be dismembered, with
the assumption that those aren't meant to be replaceable.
- Not attempt to transform anyone with the undismemberable trait, with
the assumption that their body is supposed to be immutable.
- Not attempt to transform anyone with the new "don't transform me,
plasma river" trait which replaces an explicit species check for being
an android or plasmaman (already).

I also simply made golems immune to the plasma river _anyway_, because
people expect them to be able to wade into lava and the fact that this
is "cold lava" probably shouldn't impede that.

I also made golems unable to become husks because... none of the three
occasions where this could happen really apply and also if they get
husked they turn into gross-looking humans instead of golems until
fixed, which is weird.

Finally I did some more fucking around with husking because it's
visually weird.
I added a new flag to bodyparts (applied to robotic and skeletal parts)
which means that they will never be replaced with a husk icon. It might
be preferable to instead make custom husk sprites for these limbs? But
half of them are on species which cannot be husked in the first place so
this would only appear when they are transplanted onto a species which
can.

## Changelog

🆑
fix: The plasma river is about as deadly for animals as it is for
humans.
fix: Golems can now wade in the plasma river unscathed.
fix: Undismemberable limbs will no longer be dismembered by the plasma
river.
balance: Golems and plasmamen cannot become husked.
image: Robotic and Skeletal parts will remain distinct while the rest of
the body is husked.
/🆑
2023-11-05 22:30:09 -07:00
Rhials
3c7005a37c Converts some notify_ghosts args to bitflags, multilines all notify_ghosts calls (#79320)
## About The Pull Request

This helps clean up my favorite helper proc in the whole codebase,
`notify_ghosts()`.

The notify_suiciders, ignore_mapload, and flashwindow args are GONE.
They have been replaced with the notify_flags bitflag argument. This was
intended to make deadchat announcements a bitflag argument too, but
those got reverted right before I originally wanted to submit this PR.

The on-screen popup now shows the notification body when you hover it
with your mouse again. The format is now `[notify_ghosts message] --
[click action (orbit/jump/play)]`

Every single `notify_ghosts()` call has been changed to multiline format
and has been given trailing commas. Pretty!
## Why It's Good For The Game

Cleans up a proc that is very popular and going through a lot of changes
at the time.

Allows for further flexibility when this proc inevitably gets tweaked or
improved. 12 -> 10 args is an improvement, and it doesn't impact the
helper's flexibility at all.
## Changelog
🆑 Rhials
code: The notify_ghosts proc has been cleaned up. Please report any
abnormal changes in deadchat notification behavior.
qol: The on-screen deadchat popups now contain the notification blurb
when hovered with your mouse again.
/🆑
2023-11-05 15:26:50 -08:00
MrMelbert
236fe3e39c Fix autosurgeons not respecting implant time (#79404)
## About The Pull Request

Fixes autosurgeons not respecting the passed implant time in
`use_autosurgeon`.

Fixes some spans on autosurgeons. 

I noticed it working on a downstream. 

## Changelog

This will have 0 effect on /tg/, as the only occurrence of passing an
`implant_time`, passed 8 seconds.

No, this will not make self-use autosurgery take time.
2023-11-02 15:27:13 +00:00
GPeckman
5d3fe6e0cb Moves Flightpotion wings from species datum to chest bodypart, other flightpotion tweaks (#79360)
## About The Pull Request

Flightpotion wings have for a long time been on the species datum,
rather than being tied to a specific bodypart. This means that, for
example, a lizard who had all of their bodyparts turned human due to a
freak bioscrambler accident would still get lizard flightpotion wings,
not the human ones. Now its based solely on what chest bodypart you
have. A human chest means angel wings, a lizard chest means dragon
wings, a skeletal chest means skeletal wings, etcetera.

All flightpotion wings can now be ground up to get the flightpotion
back. If a lizard (or rather, someone with a lizard chest) mugs a human
and surgically steals their angel wings, then the lizard can now
actually get cool dragon wings instead of being stuck with lame angel
wings.

## Why It's Good For The Game

Moving species-level behavior to bodypart/organ level has been a general
design goal for some time now, and it just makes sense to tie the
flightpotion to the chest.

Being able to grind wings up to get the flight potion back is nice for
allowing people to get different wing variants and can lead to
interesting IC interactions in much the same way that lizard wine can.

## Changelog
🆑
refactor: The wings you get from a flight potion (if any) are now
determined by your chest bodypart, not your species.
qol: Functional wings can now be ground up to get the flight potion
back, if you want to get a different wing variant.
/🆑
2023-10-31 19:16:53 +00:00
Pickle-Coding
15e2aa056d [NO GBP]Fixes tesla zaps. (#79398)
## About The Pull Request
Closes #79297 
Closes #79312 

Due to the new cutoff parameter being added to tesla_zap() (from
#78310), and most callers used positional arguments instead of keywords,
the zap flags was getting fed the shocked_targets list and maybe other
junk. This caused a bunch of unusual phenomena. This is fixed by using
keyword arguments.

Tesla zaps that use the grid were significantly weaker in terms of
damage than they're supposed to be. This was a byproduct of trying to
convert everything to joules and removing unnecessary power multipliers.
This is fixed by reverting the damage scaling and zap power of zap
sources that aren't based on grid. Technically this will cause the zaps
from other sources to have less power, but these tend to not be able to
put power on grid, so this wouldn't have any change other than what a
grounding rod displays. Doesn't really matter.

Logs machine explosions from zap_act. Not the most helpful log (would
take a lot of effort to add an extra parameter to pass the source), but
better than nothing.

Probably other stuff I did, lol.
## Why It's Good For The Game
Stops zap fuckery. Admins can now find the explosions when a 9GeV engine
decides to go haywire or whatever.
## Changelog
🆑
fix: Fixes tesla zaps being weird.
admin: Logs explosions from explosive zaps.
/🆑
2023-10-31 17:10:15 +00:00
jimmyl
d31c21ff1b new space ruin, the biological research outpost (#79149)
## About The Pull Request

![2023-10-21 18 02
39](https://github.com/tgstation/tgstation/assets/70376633/5829e939-3b04-465f-a186-095ceb360bba)

adds this ruin to space ruin pool
this is a shady (as NT always is) bioresearch outpost that got fucked up
by an experiment
this has like some puzzle aspect to it since you gotta find keycards and
shit and press buttons to unlock shield gates
this ends with you fighting a heart which if you defeat, destroys the
blockade that prevents you from entering the outpost vault

also you can no longer literally just cut indestructible grilles or
unanchor indestructible windows

### new puzzle elements or something idk
variant of pressure plate that you cannot remove and it sends a puzzle
signal
cooler red puzzle doors that look very foreboding or something idk
theyre for this ruin
also puzzle blockades, which are indestructible dense objects that are
destroyed if they receive a puzzle signal
and also buttons and keycard pads for puzzles


https://github.com/tgstation/tgstation/assets/70376633/c98807ec-1e7b-49c4-a757-cdbb76a1b566



https://github.com/tgstation/tgstation/assets/70376633/9d5d9dd1-5868-44e6-a978-5ea57b30c298

stuff that throws electric shocks in a pattern, ignores insuls and only
knocks down, and no you cannot just run past


https://github.com/tgstation/tgstation/assets/70376633/5772917c-a963-48a4-a743-b0f610801d25

### enemies
living floor, it can only attack stuff on top of it and it attacks until
the victim is dead
it is invincible to all but a crowbar, and it cannot move, and it
remains hidden until a victim is in range


https://github.com/tgstation/tgstation/assets/70376633/aa1d54f6-b259-4e58-9d44-e393d2131acf

living flesh, it can replace your limbs with itself
the conditions for that are; the limb must have 20 or more brute, victim
must be alive and dismemberable, the limb may not be torso or head, or
the limb may not be living flesh
alternatively it can replace a missing limb
these are all checked with every attack
they have 20 hp
the limbs in question will sometimes act up, while passively draining
nutrition, arms will randomly start pulling nearby stuff, legs may step
randomly
limbs when detached, turn into mobs and reactivate AI 2 seconds later.
if the host is shocked, all living flesh limbs will detach, or if the
host dies they will also do that


https://github.com/tgstation/tgstation/assets/70376633/765cc99e-c800-4efb-aabe-d68817bbd7ae



## Why It's Good For The Game

ruin variety is cool i think
also the other things i added should be useful for other mappers for
bitrunning or whatever

also bug bad for that one fix
## Changelog
🆑
add: living floor, living flesh, and other stuff for the bioresearch
outpost ruin
add: bioresearch outpost ruin
fix: you may not defeat indestructible grilles and windows with mere
tools
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-10-31 08:15:42 +13:00
GPeckman
5f923b097f Light-Eaten objects can no longer emit light after being turned off and then back on (#79240)
## About The Pull Request

#67676 described a bug where PDAs can apparently emit a small amount of
light after being affected by the light eater. As it turns out, the bug
is even worse than that. It doesn't work for just PDAs, it works for
basically any light source that can be turned off and on. Even
flashlights. In the following pictures, a flashlight has been
light-eaten and then turned off and on again:


![fine](https://github.com/tgstation/tgstation/assets/21979502/e880c3a8-4ae9-4b6c-8ee9-27dacdbb23ab)

Observe how the nightmare jaunt is available, as it should be. However,
one step closer to the flashlight:

![not
fine](https://github.com/tgstation/tgstation/assets/21979502/b35014d4-71e8-49cf-b0f6-479cdf2ba3fc)

The nightmare jaunt can no longer be used, because the flashlight is
still emitting light.

This PR just fixes that behavior. Light-eaten objects will now be
totally dark again, even after being power cycled. Closes #67676.
## Why It's Good For The Game

Bugs bad.
## Changelog
🆑
fix: Light-Eaten objects can no longer emit light after being turned off
and then back on.
code: Flashlights now use light_on instead of defining their own
variable. Please report buggy behavior.
/🆑
2023-10-28 23:49:13 -04:00
MrMelbert
5bf6d09903 Cuts the number of apply_damage copypaste procs from 3(.5) to 1, fixing a few bugs along the way (#79207)
## About The Pull Request

- `apply_damage` is now uniform, handled, in a single place. At the
living level.
- Fixes people being held at gunpoint from being unable to flinch from
taking damage.
- Fixes a few signals (explodable, glass jaw) of apply damage maybe
potentially not having effects if the passed hit zone was a bodypart and
not a def zone.
- Fixes regenerator component always halting regeneration no matter what
damage taken.
- Fixes pressure damage being unaffected by `brute_mod` despite what
documentation claims.
- Signalizes the `check_species_weakness` proc on species. 

## Why It's Good For The Game

The copy+paste of this proc made it awful, awful to maintain or add
features to. And also made it very bug prone.

This just takes a step forward in making sustaining damage a lot more
consistent, not only across all mobs, but across all methods of...
taking damage. Unarmed attacks, hulk, item attacks, etc.

## Changelog

🆑 Melbert
fix: People held at gunpoint can now flinch when being hit. 
fix: Regenerating mobs no longer stop regenerating no matter hit with
what.
fix: Pressure damage is now properly modified by a mob's brute damage
modifier.
fix: Fixes some occasions which some effects (glass jaw, explodable worn
items) won't respond to hits.
refactor: Refactored core code related to mobs sustaining damage. 
/🆑
2023-10-27 18:55:30 +00:00
Jacquerel
0d5f9907a2 Shapechange health transfer tweaks (#79009)
## About The Pull Request

Fixes #78721
This PR does a handful of things behind the scenes to increase the
consistency of shapechange health tracking.

First of all we adjust the order of operations taken when you restore
the original body. The implementation as-was would remove the status
effect midway through and null a bunch of variables we tried to continue
using. This would result in several runtimes and code failing to run,
with the upshot that untransforming upon death would leave the caster
completely alive, with the corpse of its transformed shape at its feet.
Oops.

Additionally while testing this I realised that transferring the damagew
as also kind of fucked.
We wouldn't bother to do it at _all_ if you died, which is a shame, so I
made it simply heal you instead of reviving you so we can always do it.
Then as noted in the linked issue, we were applying all transferred
damage to a single limb, which could exceed the health of the limb and
remove damage. Now we spread it around the body.

Finally, applying damage to a human using the "force" flag would often
actually apply less damage to their _health_ than expected. This is
because arms and legs contribute only 75% of their damage taken to a
mob's overall health.
Now instead of reading `health` we read `total damage` which ignores the
limb damage modifier.

The end result of this is that if you transform into a corgi, take 50%
of your health, and transform back then you will have 50% of your health
as a human.
Previously the result would be that you'd have ~63%, then transforming
into a corgi would leave you with ~63% of a corgi's health, then
transforming back into a human would leave you at about 71%... and so on
and so forth. Now it doesn't do that.

## Changelog

🆑
fix: Dying when using (most) shapeshift spells will now kill you rather
than having you pop out of the corpse of your previous form.
fix: Damage will now be accurately carried between forms rather than
being slightly reduced upon each transformation.
/🆑
2023-10-26 01:30:53 +00:00
Cruix
f145e23945 Fixed hair gradients not applying properly on dismembered heads (#79231)
## About The Pull Request

Previously on dismembered heads, the overlay for hair and facial hair
gradients would be rendered based on the dir var of the head object,
while the rest of the sprites would always render facing south. Now the
overlays are rendered facing south as well.

## Changelog

🆑
fix: fixed hair gradients not applying properly on dismembered heads.
/🆑

Co-authored-by: Cruix <discoveryian2@gmail.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-10-25 18:44:07 +00:00