Commit Graph

1897 Commits

Author SHA1 Message Date
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
Cruix
79721a98ba [NO GBP] Fixed hair gradients on hair with Y offsets (#79230)
## About The Pull Request

Fixes #79125

## Changelog

🆑
fix: fixed hair gradients not applying correctly to huge afros
/🆑

---------

Co-authored-by: Cruix <discoveryian2@gmail.com>
2023-10-25 14:50:09 +02:00
san7890
a5f26ce473 Turns Holodeck Monkeys into actual Monkeys (#79068)
## About The Pull Request

Old holodeck monkeys weren't even a subtype of simple animal monkeys, so
this really just got swept under the floor in the sweeping monkey
species refactors. Anyways, let's just spin up a quick species datum+mob
subtype that will have all the traits we wanted from old holodeck
monkeys (no meat, no organs, etc.) but reaping all of the benefits of
modern monkeys (better AI, etc.)

## Why It's Good For The Game

One more refactor done, very simple too. l'm not the greatest at carbon
code so let me know if something is wack, but I'm fond of the way
everything turned out (especially since I don't have to spam seven
billion subtypes of every organ and bodypart). If you're concerned about
the cost keep in mind people can spam monkeys through cubes, having a
max of three more (that are virtually useless) via the holodeck will not
kill us.

Also the fact that slimes could eat holodeck monkeys irked me so I also
touched that up. I swore there was something for it in the code but I
was mistaken, it's codified now.

## Changelog

🆑
refactor: Holodeck monkeys have been moved to the same system as old
monkeys, and should retain the similar "ephermeal" behavior, while being
a whole lot smarter by leveraging new AI. Please report anything that is
completely wack about this.
balance: Slimes can't eat holodeck monkeys anymore, because apparently
they could and that is wack.
/🆑

again let me know if my carbon/bodyparts code sucks. it does the job
fwiw
2023-10-19 23:16:10 -04:00
MrMelbert
dcedf89c70 Fixes being able to punch yourself (#79033)
## About The Pull Request

Fixes #79031 

Fixes #79042

I forgot some logic here when making the human override. 
Not the cleanest way to do it but it'll suffice. 

## Changelog

🆑 Melbert
fix: You can punch yourself again
/🆑
2023-10-17 13:02:07 -06:00
MrMelbert
9664d24c13 Refactors UnarmedAttack so we don't have like 4 Unarmed Attack signals, kills two more snowflake species procs (#78991)
## About The Pull Request

- Deletes `spec_unarmedattack`
- Deletes `spec_unarmedattacked`
- Replaces `COMSIG_HUMAN_EARLY_UNARMED_ATTACK` with
`COMSIG_LIVING_EARLY_UNARMED_ATTACK`
- Replaces uses of `COMSIG_HUMAN_MELEE_UNARMED_ATTACK` with
`COMSIG_LIVING_EARLY_UNARMED_ATTACK`
- Fixes(?)(I've never seen this work) / Elementizes Monkey ability to
bite while handcuffed
- Monkey clever `attack paw` / `attack hand` thing is now handled the
same on the human level (via `resolve_unarmed_attack`)

## Why It's Good For The Game

Atomized from swing branch. I was really annoyed with these two signals,
this kinda unifies the behavior between living and human mobs (they were
already quite similar).

One thing of note is that this will make dis-coordinated humans use
`attack_paw` rather than `attack_hand`, so they'll bite people instead
of punching them. I'm not sure if this is what we want, if we wanna
tweak that before then I can by all means.

## Changelog

🆑 Melbert
refactor: Refactored unarmed attacking mechanisms, this means
dis-coordinated humans will now bite people like monkeys (like how
coordinated monkeys punch people like humans?)
refactor: Dis-coordinated humans smashing up machines now use their
hands, rather than their paws
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-15 22:25:19 -06:00
Cruix
f31532ed89 Added a larger afro hairstyle (#78709)
## About The Pull Request

It's exactly 6 months from April 1st, so this is a date for very serious
PRs only.

We've all seen that one tip at the beginning of the round:

![tipoftheround](https://github.com/tgstation/tgstation/assets/16478175/0d8d93a9-53c0-4983-b698-28d4656973fa)


So the afro must be really big, right? Having one must be a very large
sacrifice in the realm of pixel-based combat, right?

WRONG.

![oldAfro](https://github.com/tgstation/tgstation/assets/16478175/deba5f9d-c93b-49eb-adf3-de8b05233b45)
This is the largest afro currently available. Absolutely pathetic. It's
not even the largest hairstyle in terms of pixel volume.

Here's a bigger one.

![afros_comp](https://github.com/tgstation/tgstation/assets/16478175/d39b755e-8fb1-4a12-8089-80de3a2b7be6)

![Afros](https://github.com/tgstation/tgstation/assets/16478175/beaf307c-79a1-45c6-8d03-19ea856e8340)

The sprite overlaps the tile above by 6 pixels, which is noticeable, but
not enough to interfere significantly with gameplay (apart from having a
sacrificially larger hitbox).

![Afros2](https://github.com/tgstation/tgstation/assets/16478175/4069d3ff-c08f-44c6-8275-4421c8f820ee)

This could already be done by creating a new .dmi file with larger,
non-square pixel bounds, but that's a less than elegant solution.
Instead, added a y offset var to hair sprite accessory datums.

## Why It's Good For The Game

The self-expressive merits of having more hairstyles should be
self-evident, so I will make a mathematical argument here.

Everyone knows that the coolness of an afro is determined by its volume.
As a 2-D sprite, the closet equivalent we have is area. An afro is,
approximately, a circle, so the area can be calculated as πR^2, with R
being the maximum distance from the top of the head to the top of the
sprite bounding box.

The current largest afro has a height of 6 pixels. This new afro has a
height of 12 pixels. As a result, impressiveness increases by a factor
of 4:

```math
coolness_{new\ \ afro} \over coolness_{old\ \ afro}
```
```math
π12^2 \over π6^2
```
```math
12^2 \over 6^2
```
```math
144 \over 36
```
```math
4
```

This means that, for the intrusion of a mere 6 pixels into our northern
neighbor's bounding box, we get **quadruple** the coolness.

## Changelog

🆑
add: Added Afro (Huge) hairstyle
/🆑

---------

Co-authored-by: Cruix <discoveryian2@gmail.com>
2023-10-15 18:48:57 +02:00
GPeckman
ead6759782 Miscellaneous Robotic Limb Fixes (#78905)
## About The Pull Request

In PR #76817, the damage reduction for robotic limbs was changed from
being flat to being multiplicative in nature. This wasn't supposed to
have secondary mechanical effects on robot limbs, but as always a few
slipped by. This PR just cleans up a few of these unintended mechanical
changes.

First of all, the change made robotic limbs not fully immune to space
damage. They remained immune to damage from pressure but not damage from
temperature. Now people with only robotic limbs are immune to the
temperature damage and the moodlets caused by low or high temperature. I
have tested it, and it works for people who have all robotic limbs,
people who have some robotic limbs and some missing, and even the
extreme case of a nugget with H.A.R.S. who has nothing _but_ a robotic
chest.

Due to technical limitations (`apply_damage` doesn't have a
`required_bodytype` argument), people with some robotic limbs and some
organic will still take temperature damage on their robotic limbs.

Second of all, androids are once again immune to crit damage. Normally,
crit damage is just constant oxyloss, but this obviously doesn't work
for species that don't breath. Instead, those species take a small
amount of brute damage. Prior to the damage reduction change, this meant
that Androids were effectively immune to crit damage. Now they're immune
once again.

Finally, you can now cancel surgery on robotic limbs. I don't think this
bug was actually caused by the above PR, but I decided to fix it while I
was here.

Closes #77033.
## Why It's Good For The Game

The damage reduction change was explicitly not intended to make robotic
limbs not-spaceproof, so the first change is by definition a bugfix. As
far as I know, crit damage being brute for nobreath species is a much
more recent change than the existence of androids, so I think that also
qualifies as a bugfix.
## Changelog
🆑
fix: Having all augmented limbs will make you properly spaceproof once
again.
fix: Androids are immune to crit damage again.
fix: Surgery on robotic limbs can be canceled.
/🆑
2023-10-14 23:31:01 +01:00
Iamgoofball
c4bc03cced Allows spacemen to use age-appropriate drugs by making it so you can now huff N2O to get high. (#78809)
## About The Pull Request

Allows spacemen to use age-appropriate drugs by making it so you can now
huff N2O to get high.

## Why It's Good For The Game

please do not do whippets IRL

## Changelog

🆑
balance: Allows spacemen to use age-appropriate drugs by making it so
you can now huff N2O to get high.
/🆑
2023-10-14 14:45:09 -07:00
Jacquerel
f11570dd79 Dullahan Fixes (#78938)
## About The Pull Request

Let's see if these can be like 50% playable by Halloween

Fixes #70890 (mostly)
Also one half of #71020 but does not close it because they still cannot
hear audible messages

There was a list of issues in #70890 which are largely fixed by this,
but some of them were not _bugs_.
Anything which is simply an obvious consequence of "not having a head or
being able to wear anything on your head" isn't and cannot be fixed,
because this species doesn't have a head.
That means that all of these things are still true:
```
Dullahans have no radio
Can't get spaceproofed because without the helmet you still take pressure damage
Can't wear modsuits
Can't wear sunglasses or HUDs
Can't wear clown mask
```

The issue causing everything _else_ is that when we sever the head, we
remove the brain. Removing the brain removes the traits
`TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_CAN_STRIP`. Without these
three traits, Dullahans are blocked from several important actions.
Easy fix: Make these properties of the dullahan species independent of
whether they have a brain or not. Clearly they can do these things
without brains, on account of not having them.

Additionally I gave dullahans their own head subtype which preserves
internal organs, because their brains and eyes were decaying and giving
them brain trauma and blindness.

Finally, I changed a few things from checks in `spec_life` to signal
responses, because `spec_life` checks for "did I gain a head recently?"
are gross.

## Changelog

🆑
fix: Dullahans can read, strip people, and utilise tools.
fix: Dullahan brains and eyes will not decay while inside their living
severed head.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-12 21:15:23 +02:00
Bloop
d7e8928f0d Fixes a runtime in obj/item/organ/on_death() (#78882)
## About The Pull Request

Fixes the following runtime caught by CI.


![firefox_BCIl7d348X](https://github.com/tgstation/tgstation/assets/13398309/8ee2a657-7d25-4793-a5e5-d1e489107188)

`owner` can be null so we have to check for it just like we do before
calling `on_life()`.


e538550810/code/modules/mob/living/carbon/life.dm (L472-L473)

## Why It's Good For The Game

Less runtimes

## Changelog

🆑
fix: fixes a runtime in organ on_death()
/🆑
2023-10-10 12:45:00 -06:00
MrMelbert
5b4a6af64f Fixes some EMP'd cyborg bodypart runtimes (#78849)
## About The Pull Request

Remember friends, bodypart don't always have owners. 

Fixes some runtimes that occur if cyborg bodyparts were emp'd without an
owner.

## Changelog

🆑 Melbert
fix: Robotic bodyparts not attached to people are now properly affected
by EMPs.
/🆑
2023-10-09 11:56:44 -06:00
HWSensum
0275111cc2 Reviver Implant will actually revive people! (#78377)
## About The Pull Request

This PR will make reviver implant able to actually revive people.

## Why It's Good For The Game

Reviver implant been a mess for a long time. Only thing it had possible
is slightly heal you in crit, doing that very slowly.

With this PR reviver implant will actually revive you.

- You are not gonna be invincible, loosing a head or getting your organs
decayed beyond functional state will make revival impossible.
- This process will be slow, and even after revival you will have to
wait until you are get out of crit state.
- Being revived from dead will add an additional 10 minutes to implant
coldown.
2023-10-08 21:51:13 -05:00
Jacquerel
3ed187e86b Basic Mob Flesh Worm (#78744)
## About The Pull Request

Fixes #68614

Converts the Flesh Worm (Armsy) into a Basic Mob.
Most of its behaviour has been moved into a component which we can use
to make arbitrary mobs into linked lists of mobs.
To accomplish this I added a signal which is sent when you call any
`adjustXLoss` proc, let me know if my implementation is "calling the
same signal from several places" by a backdoor, I wanted to avoid
registering to 6 signals but I'll change it if I must.

While I was here I killed the unused "lesser" variant because we stopped
using it. Resultingly, Ascended Armsy doesn't need to distinguish itself
by inflating the sprite, so it doesn't. This means that now flesh worms
are using their sprites as intended to be displayed, but if people
really miss all of its segments being poorly scaled by the byond engine
then I guess I can restore it.

## Why It's Good For The Game


![dreamseeker_p8vOpZGXII](https://github.com/tgstation/tgstation/assets/7483112/3389d3a9-16cd-4e1e-938e-dfa18d0da0af)

## Changelog

🆑
refactor: Flesh Worms are now basic mobs. Please report any unexpected
behaviour.
sprite: Flesh Worms are a little bit slimmer.
/🆑
2023-10-05 13:20:16 -06:00
lizardqueenlexi
6bdf052a84 Converts cursed heart effect into a component. (#78554)
## About The Pull Request

Fixes #58401 
Fixes #58799
Fixes #58800

Converts the manual heart-beating effect of the cursed heart into a
component.

Behavior has mostly been maintained, but polished a bit as compared to
the original cursed heart. Most notably, the action for beating your
heart is now a cooldown action - providing a visual indicator of when
you can beat it again, rather than leaving you guessing. Some better
checks have also been put in place for edge cases such as having your
species changed.

Implementation inspired by the existing "manual blinking" and "manual
breathing" components. Currently only used by the cursed heart and the
(now majorly simplified) effect of corazargh.

My first component, so hopefully I didn't miss anything.
## Why It's Good For The Game

The cursed heart was kind of unusably bad - which may have been part of
the intent, but having to count in your head or spam-click the button is
just annoying. With a visual indicator of when you should beat your
heart, hopefully it will be slightly less awful for the cursed.

The real motivation here was that corazargh's implementation was kind of
a travesty - summoning a cursed heart inside of your body while it was
in your system, then restoring your old heart afterward. This was
error-prone as well as just being ridiculous. Making this effect a
component gets rid of these problems, and leaves space open for new uses
of manual heart beating if anyone feels like being cruel.
## Changelog
🆑
fix: Your heart will no longer be deleted if an admin heals you while
you have corazargh in your system.
refactor: The cursed heart has been streamlined a bit, and now gives you
a visual cooldown for when you can beat your heart again.
/🆑
2023-10-04 00:43:25 +02:00
Bloop
68b798efa0 A thorough audit of damage procs and specifically their use in on_mob_life() (with unit tests!) (#78657) 2023-10-03 04:01:32 -04:00
Tim
d4d5e8251c Fix organs having no DNA and become bloody when violently removed (#78519)
## About The Pull Request
Fixes #75585

Organs now spawn with DNA that can be scanned by a forensic scanner.
Robotic organs have no DNA and organic organs with no prior owner spawn
with synthetic DNA. If the syntenic DNA organ is inserted into someone,
the organ inherits the owners DNA. This override can only happen once
and only if the organ has never been used.

Any organ removed is covered in blood, unless it's surgically removed. I
had to give the `NO_BLOOD_ON_ITEM` to hearts since the icon was
glitching out with blood decals on it. It also appears that moth wings
(and maybe normal ones?) do not inherit blood decals naturally despite
being covered in blood. No idea why, but that's out of scope for this
PR.

## Why It's Good For The Game
Forensics scanning is now more robust. 

## Changelog
🆑
fix: Fix organs having no DNA and become bloody when violently removed. 
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-10-02 17:29:56 +01:00
Jacquerel
15efbf64a5 Grand Ritual Finale: An end to death (#78497)
## About The Pull Request

Adds a new Wizard Ritual Finale effect which makes everything immortal.
By this I mean, 10 seconds after death a ghostly image of them will
appear somewhere near where the corpse was and then 50 seconds after
that the mob will return to life at that location.
This applies to every mob, everywhere.
This is likely to cause a little bit of disruption to the rest of the
round, so you can only do it after at least 30 minutes have passed.
After that the crew will have to figure out how to deal with their new
gift of immortality. It will involve throwing people into chasms and
lava, probably.


![dreamseeker_7SwMsSrnt1](https://github.com/tgstation/tgstation/assets/7483112/5b794bcc-fcba-46b5-b228-e95aa685942d)
Here's a gif sped up for example purposes.

You can escape from the cycle of death and rebirth via suicide, purely
because it's pointless to try and force people to play the video game if
they don't want to.

Also I split all of these effects into their own files, the only new
code for those is in `immortality.dm`

shout out to Vekter for distracting Oranges while I posted this
wizard-related PR so I didn't get disapprovingly reacted for posting
magic shit (yet)

## Why It's Good For The Game

This might be _too_ much but I want to see what would happen.
It will allow us to simulate whether polite society can survive when
violence has no consequences.

## Changelog

🆑
add: Wizards who complete the grand ritual can now gift everyone with
eternal life
/🆑
2023-09-30 23:34:02 -04:00
nikothedude
2bdadebbad Moves gauze removal signals to gauze destroy, removing weird seep_gauze usages + misc improvements (#78570)
## About The Pull Request

Title. 
## Why It's Good For The Game
Gauze removal was handled by using seep_gauze(9999) instead of just
deleting it, which was really fucking weird??
 
This makes behavior more sensical and modular (you can remove gauze
without using seep_gauze now).
## Changelog
🆑
code: Gauze removal is now handled by the gauze's destroy instead of
seep_gauze
/🆑
2023-09-29 16:45:43 -04:00
MrMelbert
9e1c71f794 Reworks transformation sting to be temporarily in living mobs, forever in dead mobs (#78502)
## About The Pull Request

- Reworks transformation sting. 
- Transformation sting is now temporary, lasting 8 minutes (number not
final) in humans.
      - If used on a monkey, it lasts forever instead. 
- While the target mob is dead or in stasis, the duration will not
progress, making it functionally infinite until revived and taken off
stasis, where it will resume its timer where it left off.
   - Chemical cost reduced to 33
   - DNA cost reduced to 2

- Removes TRAIT_NO_TRANSFORMATION_STING, instead just checks for
TRAIT_NO_DNA_COPY
   - These were essentially the same traits, so I just combined the two

- Organizes some trait lists alphabetically

- Adds TRAIT_STASIS, to allow for reacting to mobs entering and exiting
stasis via COMSIGS
- Everything that checks IS_IN_STASIS now checks HAS_TRAIT TRAIT_STASIS,
which is probably more performant, so that's a bonus.

## Why It's Good For The Game

A lot of people don't like the current iteration of Transformation
Sting, me included

Right now it's only use is for a meme - you make the entire station into
felinids until you get lynched, and that's it.

It's not really a healthy ability for ling's current kit, so this pr
attempts to soft rework it to make it a bit more in line with how ling
should be acting - turning it into a source of short term confusion
between people, or using it on a body to cover your tracks.

This accomplish it two fold - One, it is now cheap enough to use twice
in rapid succession, allowing for quick on-the-spot "BE CONFUSED"
situations while you abscond. Two, as mentioned in the last paragraph,
you can poke a body of someone you murder to obfuscate the crime scene
and maybe help out in taking over someone's identity.

## Changelog

🆑 Melbert
balance: Transformation sting now lasts 8 minutes, down from permanent.
However, the effect is paused for dead and stasis mobs, making it
permanent SO LONG AS they stay dead or in stasis. The effect is also
permanent if used on a monkey.
balance: Transformation sting now costs 33 chemicals, down from 50. 
balance: Transformation sting now costs 2 dna points, down from 3. 
fix: Transformation sting works on monkeys again.
refactor: Refactored a bit of human randomization. 
/🆑
2023-09-28 13:47:39 -06:00
GPeckman
634ab94156 Adds an Admin Tool for the DNA Infuser (#78496)
## About The Pull Request

Adds some an vv admin tool for DNA Infusions. The tool will
automatically grant all of the relevant organs to the target.


![pic1](https://github.com/tgstation/tgstation/assets/21979502/e34548af-9648-4842-a089-02cffc9989cf)

![pic4](https://github.com/tgstation/tgstation/assets/21979502/1c0aa855-e284-4891-800e-717383425b76)

![pic3](https://github.com/tgstation/tgstation/assets/21979502/c955a35f-5835-4271-88cb-f1ab198cb8df)
## Why It's Good For The Game

It was already possible to do this with the organ manipulation tool, but
that's a lot slower and probably has issues when replacing brains. This
new tool will hopefully streamline the testing of new DNA infuser
entries.
## Changelog
🆑
admin: There is now a tool to apply a DNA Infuser entry to any human.
/🆑
2023-09-27 21:24:18 -04:00
Jacquerel
f861532d24 Basic Legion & Hivelord (#78624) 2023-09-27 18:41:07 -04:00