Commit Graph

15025 Commits

Author SHA1 Message Date
san7890
bcf10b33ca Fixes Dead Lingering Ghost-Control Mobs (#79615)
## About The Pull Request

Fixes #79008

This is the same method bots use (though a bit more extravagant)- the
component is meant to delete itself when a user assumes control but it
had no cases for deleting itself on the user's death. This component
already has so many args that I don't particularly feel like adding
another one for `qdel_ourselves_on_mob_death` or whatever so let's just
repeat the pattern we already have going on for the time being.
## Why It's Good For The Game

Fixes bug.
## Changelog
🆑
fix: Gorillas and Regal Rats will no longer show up in the ghost-control
menu if they died without anyone ever taking control of them.
/🆑
2023-11-14 12:02:35 +13:00
DBGit42
325388f839 Allows Signers to send COMSIG_MOB_SAY (#79677)
## About The Pull Request
By removing a conditional statement which prevented signers from sending
a `COMSIG_MOB_SAY` signal (for some reason), this PR fixes a few things
in one go:

- Sign language once again prints a notice that the signer raises or
lowers their eyebrows for exclamations and questions respectively.
- Tonal indicators (sign/typing icons that depict eyebrows raising or
lowering) are also working again.
- RuneChat is now punctuated the same as the chat box for Signers.

This PR is now atomic thanks to @MrMelbert.
2023-11-13 18:59:29 +00:00
larentoun
f718be700a Gunpoint now blocks bumps, adds examine text and can be broken by shoving (#79564)
## About The Pull Request
Lesser version of https://github.com/tgstation/tgstation/pull/75226

Changes a few things with bumping which could lead to cheesing a charged
shot if the shooter has an ally to bump the target. Also adds examine
text to know what's happening.
Also shoving now can be used to break gunpoint, since having immovable
mobs can be troublesome in some situations

## Why It's Good For The Game
Grabs from the target no longer counter gunpoint;
Accidental or cheesy bumps are removed;
Shoves and pulls can be used in a teamplay to break gunpoint

## Changelog
🆑
qol: Gunpoint: Examining the target will show who is holding them at
gunpoint
qol: Gunpoint: Examining the shooter will show who they are holding at
gunpoint
balance: Gunpoint: If the target tries to grab, they will trigger the
shot
balance: Gunpoint: If the target or the shooter are shoved, it will
cancel the gunpoint
balance: Gunpoint: If the target is pulled, it will cancel the gunpoint
balance: Both the target and the shooter can't be bumped anymore to
avoid cheesing charged shot or removing the gunpoint by just moving
around
fix: Clicking the alert button of the shooter will now correctly remove
gunpoint
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-13 15:10:15 +00:00
Ben10Omintrix
7a44f10993 basic gutlunchers and ashwalker ranching (#79508)
## About The Pull Request
this pr transforms gutlunchers into basic mobs and gives them a small
ranch that ashwalkers can manage. gutlunches come in various colors and
sizes! female gutlunches will come in different shades of red and males
will come in shades of blue. the child born will have a mix of his
parent's colors.
![the
farm](https://github.com/tgstation/tgstation/assets/138636438/41fdb1ed-e567-4c8d-bb83-b296f878c862)
female gutlunches can make various healing milk and medicine from its
udder. but it will need to consume ores before it can start making milk,
u can either feed it by hand or u can put ores in the wooden trough and
they will go eat from it whenever they get hungry. feeding it gold or
bluespace ore will improve the healing quality of the milk for a short
while

![trough](https://github.com/tgstation/tgstation/assets/138636438/b9c84d18-fdd8-476b-b779-bdfe49dd7e88)
the male gutlunchers are obedient pets. their stats vary from one
another in speed, attack and health. a male gutlunchers stats will
depend on the stats of his parents, the higher his parent's stats are
the better chances he has at rolling higher stats. so u can selectively
breed them to make sure they have the best stats possible. they will
listen to all ur commands and can mine walls or attack enemies if given
the command. also i wanted the farm to have wood fences so i added them
to the game, they cost 5 wood planks to make



## Why It's Good For The Game
refactors gutlunches into basic mobs. also i turned breeding into a
component so it can be applied to all animals and created a breed
command, pets that have this command and the component will go breed
with a partner u point at.

## Changelog
🆑
refactor: gutlunches have been refactored into basic mobs. please report
any bugs
add: ashwalkers have a small ranch they can manage
fix: wall tearer compnent wont runtime when interacting with mineral
walls
/🆑
2023-11-13 01:20:19 -07:00
GPeckman
67ad491337 Malf AI Zeroth Law Fix (#79604)
## About The Pull Request

This one is a little bit complicated, and needs some background on how
silicon laws work for synced borgs. Generally speaking, a synced borg's
laws should always be equivalent to the laws of the AI they're synced
to. Unsyncing a borg does not in and of itself change a borgs laws. If
an AI has the reporter lawsuit + 3 freeform laws, and you unsync a borg
from that AI, the borg will still have reporter + 3 freeform laws for
its own laws.

This applies even to the zeroth law that borgs get due to being synced
to a malf AI. Currently, a borg will retain this law even if it is
unsynced from the malf AI. However, there's an issue with this. Per a
[recent policy
thread](https://tgstation13.org/phpBB/viewtopic.php?f=33&t=35128), borgs
that have been unsynced from a malf AI are no longer antagonists, even
though the malf law 0 currently remains. This is very confusing and
likely to lead to bans due to players mistakenly believing themselves to
still be antagonists. To rectify this, this PR just makes the zeroth law
get automatically removed when a borg is unsynced from a malf AI. I
tested this extensively to ensure that it should not affect the emag law
0 or the onehuman law board.

I also improved and fixed the feedback when attempting and failing to
apply a law board directly to a cyborg. Previously, the feedback was
both broken (it attempted to play an emote that doesn't exist) and the
feedback was the same for both emagged borgs and borgs that were already
synced to an AI. Based on the comments, this was intended to prevent
"metagaming." However, this was pretty much unnecessary. Simply
unlocking a borg's panel will already tell you if it's been emagged or
not, and if you have a borg's panel open to apply law boards directly,
then you can easily just check the wires and see for yourself whether
the borg is actually synced or not. Now the feedback actually works and
is different for synced and emagged borgs.
## Why It's Good For The Game

For the zeroth law fix, players should not be at risk of being misled by
their own laws. If borgs unsynced from a malf AI are not supposed to be
antagonists, then they should not have a law 0 that only antagonists
have.

Regarding the law board tweak, the old code was nonfunctional in every
way. The code didn't give feedback properly, and obfuscating the
feedback was totally unnecessary, as there are far easier ways to tell
if a borg has been emagged than by trying to upload laws to it. I
checked blame out of curiosity, and the old code is literally 9 years
old.
## Changelog
🆑
qol: Fixed/improved feedback when failing to apply a direct law change
to a cyborg.
fix: Borgs who are unsynced from a malf AI now lose the zeroth law as
intended.
/🆑
2023-11-13 01:35:28 +01:00
LemonInTheDark
3223d2a3fb Lemon fixes ci (#79384)
## About The Pull Request

Sets up moveloops to better catch issues with duplicated loops

Letting people modify the timer var AND have it track what bucket we're
in was a bad idea.
So instead let's store the queued time separate. Also makes
allowed_to_move return true/false instead of flags

This fixed? the null loop issue locally, I honestly have no damn idea
why. I'm gonna be working on the rest of ci here, left trackers so if it
pops up between now and merge I'll know what the issue is.

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
2023-11-12 09:25:59 +00:00
necromanceranne
01a566d5ec [NO GBP} Makes it so that punch miss chance can actually go above 20% (#79611)
## About The Pull Request

The max potential miss chance is 80%, rather than 20%. (Yes, I know I
put it to 75% in the pr but actually I wanted an even number and my
fucking adhd brain forgot that this was meant to be changed)

## Why It's Good For The Game

I only got shown this was wrong literally the moment after my pr got
merged AAAAAH
Helpies!
2023-11-12 02:40:33 -06:00
Bloop
e1b958c41f Removes final remnants of 'targetted' (#79626)
## About The Pull Request

Finishing what https://github.com/tgstation/tgstation/pull/79513/
started, removes 'targetted' typo from code. Also updates the basic mob
guide with the new updated var names.

## Why It's Good For The Game

Typos bad. Accurate guides good.

## Changelog

🆑
code: gets rid of the rest of the instances of 'targetted' typo from
code
/🆑
2023-11-11 07:46:02 -05:00
Jacquerel
a1e46c5d31 Basic Guardians/Holoparasites (#79473)
## About The Pull Request

Fixes #79485
Fixes #77552

Converts Guardians (aka Holoparasites) into Basic Mobs.
Changes a bunch of their behaviours into actions or components which we
can reuse.
Replaces some verbs it would give to you and hide in the status panel
with action buttons that you may be able to find more quickly.

They _**should**_ work basically like they did before but a bit
smoother. It is not unlikely that I made some changes by accident or
just by changing framework though.

My one creative touch was adding random name suggestions.
The Wizard federation have a convention of naming their arcane spirit
guardians by combining a colour and a major arcana of the tarot. The
Syndicate of course won't truck with any of that mystical claptrap and
for their codenames use the much more sensible construction of a colour
and a gamepiece.

This lets you be randomly assigned such creative names as "Sparkling
Hermit", "Bloody Queen", "Blue World", or "Purple Diamond".
You can of course still ignore this entirely and type "The Brapmaster"
into the box if so desired.

I made _one_ other intentional change, which is to swap to Mothblocks'
nice leash component instead of instantly teleporting guardians back to
you when they are pulled out of the edge of their range. They should now
be "dragged" along behind you until they can't path, at which point they
will teleport. This should make the experience a bit less disorienting,
you have the recall button if you _want_ to instantly catch up.

This is unfortunately a bumper-sized PR because it did not seem
plausible to not do all of it at once, but I can make a project branch
for atomisation if people think this is too much of a pain in the ass to
review.

Other changes:
- Some refactoring to how the charge action works so I could
individually override "what you can hit" and "what happens when you hit"
instead of those being the same proc
- Lightning Guardian damage chain is now a component
- Explosive Guardian explosive trap is now a component
- Added even more arguments to the Healing Touch component to allow it
to heal tox/oxy damage and require a specific click modifier
- Life Link component which implements the Guardian behaviour of using
another mob as your health bar
- Moved some stuff about deciding what guardians look and are described
like into a theming datum
- Added a generic proc which can return whether your mob is meant to
apply some kind of damage multiplier to a certain damage type. It's not
perfect because I couldn't figure out how ot cram limb modifiers in
there, which is where most of it is on carbons. Oh well.
- Riders of vehicles now inherit all movement traits of those vehicles,
so riding a charging holoparasite will let you cross chasms. Also works
if you piggyback someone with wings, probably.

## Changelog

🆑
refactor: Guardians/Powerminers/Holoparasites now use the basic mob
framework. Please report any unexpected changes or behaviour.
qol: The verbs used to communicate with, recall, or banish your Guardian
are now action buttons.
balance: If (as a Guardian) your host moves slightly out of range you
will now be dragged back into range if possible, rather than being
instantly teleported to them.
balance: Protectors now have a shorter leash range rather than a longer
one, in order to more easily take advantage of their ability to drag
their charge out of danger.
balance: Ranged Guardians can now hold down the mouse button to fire
automatically.
balance: People riding vehicles or other mobs now inherit all of their
movement traits, so riding a flying mob (or vehicle, if we have any of
those) will allow you to cross chasms and lava safely.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-10 21:04:52 -07:00
LemonInTheDark
9696dd1a1d Targeting Datums Renamed (and global) (#79513)
## About The Pull Request

[Implements the backend required to make targeting datums
global](6901ead12e)

It's inconsistent with the rest of basic ai for these to have a high
degree of state, plus like, such a waste yaknow?

[Implements
GET_TARGETING_STRATEGY](d79c29134d)

Regexes used:
new.*(/datum/targetting_datum[^,(]*)\(*\)* -> GET_TARGETING_STRATEGY($1)

Renamed all instances of targetting to targeting (also targetting datum
-> targeting strategy)

I've used GET_TARGETING_STRATEGY at the source where the keys are
actually used, rather then in the listing. This works out just fine.

## Why It's Good For The Game

Not a misspelled name through the whole codebase, very slightly less
memory load for basically no downside (slight cpu cost maybe but not a
significant one.

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2023-11-09 14:44:24 +00:00
Jacquerel
6454b5ec9b Automatic fire for mobs (#79502)
This adds a component you can slap onto mobs with ranged attacks which
lets them fire repeatedly with the mouse held down.
I applied it to a couple of existing mobs, to be honest we don't
currently have any which _need_ this but I will add it to the Ranged
Holoparasite (which really does need it) depending on which PR gets
merged first.
2023-11-09 07:32:34 +00:00
zxaber
91af16bcbf Adds Paddy, the Security Mech (#79376)
## About The Pull Request
- Adds a new combat mech, Paddy. Paddy is a modified Ripley MK-I,
intended for use by the station's security force. Like the MK-I, the
Paddy features an open-air cockpit design (and thus does not protect
from ranged weapons), but maintains the speed of the base unit.
Constructing a Paddy is similar to constructing a MK-II, though the kit
requires combat-mech level research. Sprites by
[DrDiasyl](https://github.com/DrDiasyl)
-- The paddy has an internal cargo bay capable of holding up to four
individuals (loaded with a hydraulic claw). If the pilot exits the
Paddy, any loaded individuals are likewise ejected. Individuals can
attempt to resist their way out of the mech, but it requires the mech to
be stationary for 45 seconds. If they do this, all individuals in the
holding cell are ejected.

- Adds a new mech equipment piece, the hydraulic claw. Similar to a
clamp, this Paddy-exclusive item can load mobs into the Paddy's cargo
bay. Humanoid mobs are handcuffed upon loading. The hydraulic claw is
unlocked on the same tech node as the Paddy.

- Adds a round-start Paddy, carrying one peacekeeper disabler and one
hydraulic claw, to each security area on all maps. Round-start Paddys
are also pre-locked with security access. Security now has access to a
mech charger, and a small bay for it all. Map edits were done by
[Maurukas](https://github.com/Maurukas).

- Also did some minor cleanup of various mech-related code. Ripley mech
cargo is no longer stored in the mech, but within the "ejector" object.
This doesn't have any player-facing changes, but it is easier to
organize behind the scenes. additionally, if Ripleys are destroyed now,
they drop their stored objects rather than deleting them.

## Why It's Good For The Game
Playing lone security is probably one of the least fun aspects of the
game. Arresting any assistant is inevitably setting yourself up against
the tide as a whole; You try to stun any one person and they crawl out
of the woodworks to get in your way, drag off the arrestee, and probably
try to steal your gear.

The Paddy is set up to be functional against low-threat targets, but not
particularly good against anything with purpose. The round-start Paddy
carries the disabler equipment, as well as the law claw, to detain
individuals in a *somewhat* safe manner. Being that you're inside an
exosuit, you're immune to shovespam that plagues the halls, and you
don't risk dropping important gear quite as easily.

However, The open canopy gives you no protection at all from ranged
attacks, nor from atmos hazards. Being that you're in an exosuit, you
cannot use other items or equipment. The AI will have trouble finding
you to open a door, due to your name not jumping their camera to your
location.
## Changelog
🆑 Zxaber, DrDiasyl, Maurukas
add: A new security-focused combat mech, the Paddy, has been added,
intended to be particularly helpful for lone sec officers. You will find
one in the Security main office, and a replacement can be built with
late-game mech research.
fix: Ripley MK-I and MK-II mechs no longer qdel their stored items when
destroyed.
/🆑

![image](https://github.com/tgstation/tgstation/assets/37497534/72e6890d-82be-44dd-9b09-e4c75a9bfd4a)

---------

Co-authored-by: Vire <66576896+Maurukas@users.noreply.github.com>
2023-11-09 00:45:10 +00: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
Zergspower
05f9e9f997 Balances the stormtrooper shotgun mob (#79578)
## About The Pull Request

A few months ago during the conversion to a Basic mob the shotgun range
was changed to 1 instead of staying at what it was prior, meaning the
mob itself would get in your face and unload instantly.

## Why It's Good For The Game

Fighting an npc mob that is as fast or faster than you, with 250 health
and basically 1 shots you isnt very fun, this returns their range some
even though they dont really act like they did prior still. I thought
about making it match the SMG range as well? But 3 leaves it as below


![image](https://github.com/tgstation/tgstation/assets/22140677/1314975d-bbc3-4791-b77e-1661701cabb7)


## Changelog
:cl:zergspower
balance: NPC Syndicate Shotgunners range requirement returned
/🆑
2023-11-08 20:21:56 +00:00
Toastgoats
cfcefd06c9 Increases the time it takes for venus human traps to die off vines from 5 to 8 seconds (#79507)
## About The Pull Request

Exactly what it says on the tin, 20 damage -> 12.5 damage.
## Why It's Good For The Game

At first glance, 20 damage per second seems pretty harsh. but
reasonable, considering your job is to protect the kudzu. but a 5 second
time limit sounds _extremely_ unfairly punishing on multi-z maps where
you can fall off your kudzu, especially considering the kudzu can block
your view of open spaces.

I figured 12.5 damage per second would work since it adds up to a flat 8
seconds until you reach 100, and it should give the player a few more
precious to process how fast they're dying, since its easy to
underestimate how fast 5 seconds goes by in the heat of combat.
## Changelog
🆑
balance: Venus human traps now take 12.5 damage per second instead of 20
while off kudzu.
/🆑
2023-11-08 20:07:14 +00:00
Ben10Omintrix
d4c21054cc sets the leaper move and pull forces to strong (#79557)
## About The Pull Request
i forgot to set these in my last pr

## Why It's Good For The Game
they are large heavy monsters they shouldnt be able to be pulled so
easily

## Changelog
🆑
balance: sets the leaper move and pull forces to strong
/🆑
2023-11-07 14:04:48 +01:00
Jeremiah
e2529818aa Reverts reverted toast icons (#79538)
## About The Pull Request
During the notify ghosts refactor I was unsure why we were creating a
custom overlay for each ghost alert when new_master did the same. Turns
out - it resets icons, which is useful here. This also caused #79415.

The original notify ghosts was performing this transformation operation
O(n), which I've made O(1)
## Why It's Good For The Game
Fixes #79415

![Screenshot 2023-11-05
131336](https://github.com/tgstation/tgstation/assets/42397676/c8b63b14-e1b8-48f5-b811-4c38ef1fa224)
## Changelog
🆑
fix: The screen alert should no longer break ghost UI when it's huge
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-07 13:59:21 +01:00
san7890
dfb3a1f5ba Slimes can only reproduce out in the open (#79552)
## About The Pull Request

Fixes #79296

This code was a bit wack since we used `drop_location()` instead of
checking if we even had a valid turf to jump to, so slimes would spawn
directly on a turf above the pipe. This has been changed to see our
`loc` is actually a valid turf before we continue on in the verb.

Also this code was really fuckin' old so I just did a bunch of early
returns in the area to make it just a little bit easier to bear when
some poor sod has to refactor all of this into the basic framework.
## Why It's Good For The Game

Bug: Fixed  
Code: Improved  
Issue Tracker: One Less Thing  
## Changelog
🆑
fix: Slimes now need to be on an open turf to reproduce and split into
more slimy slimes, instead of getting away with using phasing powers in
pipes.
/🆑
2023-11-07 01:12:26 -05:00
Tim
33abff9004 Improve emote help text display (#79365)
## About The Pull Request
This adds a examine block to emote help and highlights which emotes have
sound effects in blue.

## Why It's Good For The Game
Before:


![dreamseeker_gBXU4tSkh4](https://github.com/tgstation/tgstation/assets/5195984/dea12f6a-7ab7-4ae6-a218-07348168bbe3)

After:


![dreamseeker_upqL52GDjM](https://github.com/tgstation/tgstation/assets/5195984/1c67d1da-b27f-4cff-b0be-2953f43c64d9)


## Changelog
🆑
qol: Improve the emote help verb to be more user friendly
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-06 15:41:18 +00: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
Ben10Omintrix
42c8e1adf9 new wizard ability and basic leaper refactor (#79237)
## About The Pull Request
refactors leapers into basic mobs and adds a new ability for wizards.
for 2 points wizards can buy their own leaper pet. they will get a
contract which lets them pick their pet's name and color

![thefrogs](https://github.com/tgstation/tgstation/assets/138636438/8df9b893-d07d-4e51-a9fa-644830cc7a81)

after they sign the contract they will get a frog statue which is used
to contain the leaper. players can use this statue to release or recall
the leaper into the statue. when its in the statue it will slowly regain
health or even revive from the dead, but if it gets gibbed then the
statue will be useless.

also adds a new ai behavior for leapers which lets them go swim in water
(and splash around) for a period of time. i gave this behavior to frogs
and crabs too

when riding the leaper, the players will get access to all its
abilities, it now has new abilities, it can create frog minions that
suicide bomb the enemies and it can also create a shower of poisonous
structures.


https://github.com/tgstation/tgstation/assets/138636438/931aa7b4-09f0-493f-bdb6-f3bdd0915b22

also when riding the leaper, players can point at walls near it so it
will destroy it. alternatively players can give commands to their
leapers to use abilities and to follow them if they are not riding it.
wizards cant be force dismounted from their frogs, and only wizards can
ride the frogs.

this also removes leapers from cytology as they now are much more
dangerous and have a new home


## Why It's Good For The Game
refactors leapers into basic mobs, and gives more gameplay opportunities
for wizards
## Changelog
🆑
refactor: leapers have been refactored into basic mobs please report any
bugs
add: wizards can now summon a leaper pet
removal: removes leapers from cytology
/🆑
2023-11-06 00:05:29 +00: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
John Willard
88bb3afcce Mafia now starts without admin intervention (#79348)
## About The Pull Request

Mafia should now start without the need of admin intervention.
I made a unit test that should always have a PDA and a ghost spawning in
a game of Mafia and having it run through basic setup to confirm they
both successfully sign up and the game starts.

I had to change a lot of things in order to get this working, such as
giving unique ckeys to mock clients, fixing harddels in Mafia, and
plenty of minor fixes. This is the first time any of this code is put in
CI, so a lot of uncaught errors are now showing their faces.

Because loading maps mid-round runtimes due to smoothing, I have mafia
their own unit test-only map that doesn't use smoothing.

I also split the mafia ui code into its own file, and moved a single
helper that was sitting around in mafia's file into a helpers file.

I also added some comments to explain why certain things are the way
they are, because I wrote some undocumented code previously and forgot a
few things, leading to self-inflicted wasted time.

## Why It's Good For The Game

^

## Changelog

🆑
fix: Mafia games can now start properly.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-05 01:26:24 +00:00
Jacquerel
89e918df78 [no gbp] Don't try and have a status effect destroy walls (#79500)
## About The Pull Request

Fixes #79497


![280296547-1bd169d0-0ccf-4dfb-91a3-9c51e11d020b](https://github.com/tgstation/tgstation/assets/7483112/9d976cb0-7905-4fe4-962b-a6e5374b40b9)
Missed something important here. I put it back.

## Changelog

🆑
fix: Fugu can correctly destroy walls when they get big.
/🆑
2023-11-04 16:02:55 -06:00
lizardqueenlexi
07f2214ac4 Basic Wizards (#79476)
## About The Pull Request

Makes NPC wizard mobs into basic mobs. These aren't actually used
anywhere, since their away mission was removed, so I figured I'd have
some fun with them.


![image](https://github.com/tgstation/tgstation/assets/105025397/901f3a92-74a3-492b-8435-43813ad2afa8)

Noteworthy changes are as follows:
- Wizard mobs can now wear any of the four basic colors of wizard robe
and hat. Rarely, they will wear the witch ("Marisa") outfit instead.
There was going to be a rare Tape Wizard spawn too, but the outfit
doesn't work correctly for some reason (see comments below).
- Wizard mobs no longer have a set spell loadout. Instead, they always
receive a random **targeted, primary spell**, a random **untargeted,
secondary spell**, and the spell **Blink**.
- Wizard subtypes (or var-edited wizards) can have any of the above
specified rather than random.
- Wizard AI will try to avoid ever being in melee, and will fire off
spells whenever possible with the priority order of primary > secondary
> blink. There is a mandatory 1-second waiting period between casts.
- Wizard mobs use "lesser" versions of Fireball and Blink. Lesser
Fireball does a little less damage and has a smaller explosion, though
it is still extremely dangerous. Lesser Blink simply has a smaller blink
radius so that wizard mobs don't just decide to leave.

Depending on their spell loadout, wizards can be _incredibly_ dangerous
mobs - stunning you with tesla blasts, shooting you with fireballs, and
more. Even weakened, fireball is the nastiest of these by far, able to
set you on fire or remove your limbs if you aren't properly protected.
Watch out!

The random lists have been kept pretty small, since I only wanted to use
spells that I know for sure work. Spell cards is pretty weak in AI
hands, since they don't take advantage of the fact that a human player
can spam it, but I wanted there to be a little variety in primary
attacks.

I included an UpdatePaths script here in case a downstream is using
these, but I doubt it was necessary.
## Why It's Good For The Game

Removes another simplemob.

The actual impact of this change is negligible, since this is an unused
mob, but it's possible that this lays the groundwork for these actually
being used - particularly since mappers can make them as powerful or
weak as they want by specifying a spell loadout. Wizards may make for a
tough boss challenge for a ruin or away mission, or a very mean surprise
for an admin to drop on an unsuspecting station.
## Changelog
As this is an unused mob, there are no player-facing changes.
2023-11-04 16:22:19 +00:00
Tim
9cc70a94d0 Port salute emote sound from CM SS13 (#79382)
## About The Pull Request
This adds a crisp sound to the salute emote that is from the Colonial
Marines server.

## Why It's Good For The Game
Mah Immersion!

## Changelog
🆑 timothymtorres, Rahlzel
sound: Port salute emote sound from Colonial Marines SS13 attributed to
Rahlzel
/🆑
2023-11-04 04:21:22 +01:00
lizardqueenlexi
7b720a0081 Basic Shades (#79469)
## About The Pull Request

Makes shades into basic mobs. As they are solely player-controller and
have no AI, this was a very simple conversion.

Things of note:
- I've made shades use the same "theme" system as constructs, to
determine their drops and coloration - as opposed to these things being
manually set by the type of soulstone they're held in.
- I've reorganized files slightly, putting both constructs and shades in
a new "cult" basic mob folder.

That's more or less it. As I said, shades are simple.
## Why It's Good For The Game

Basic-izes another mob and cleans up the code a little. Removes the last
cult-related simplemob, too.
## Changelog
🆑
refactor: Shades now use the basic mob framework. Please report any
bugs.
/🆑
2023-11-03 22:39:33 +00:00
Bloop
4d7f97ddba Makes softspoken quirk no longer apply when using sign language (#79456)
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/24715

## About The Pull Request

Just makes the softspoken quirk match its description that it should be
for spoken languages. You should still be able to have people view your
signs from a distance.

## Why It's Good For The Game

You can still 'subtly sign' using *whisper with that quirk, but you are
no longer restricted to only doing that. It didn't really make sense
that you were previously.

## Changelog

🆑
fix: Softspoken quirk will no longer be applied to sign language
/🆑
2023-11-03 13:53:08 -06:00
san7890
e03822fe1d Standardizes Adding Datum Actions into a proc/define (Bonus AI Support) (Bonus Useless Code Cleanup) (#79389)
## About The Pull Request

The way we add multiple actions has been very unstandardized, with
several implementations of this code doing certain things wrongly (i.e.
not nullchecking `ai_controller`), so let's do something in the vein of
#74037 and just make one nice big ol' proc that catches a lot of these
cases. There are still a few things that simply can't be done here, but
this gets the most generic "give my mob some actions and also maybe tell
the AI about it" stuff done.

This is only useful in cases where we don't ever need to reference the
ability ever again when it's added. In an ideal world we would never
need to reference the ability again and it would all be self-contained,
but this is not an ideal world. However, a lot of the latticework has
been built around certain implementations of this behavior making
refactoring it just a bit easier.

I also did a lot of auditing on `Destroy()` stuff, because
`/datum/action`s listen to signals when their parent is `qdel`ing, so we
don't need to neither hold nor clear references on our mob's
`Destroy()`. This was all cleaned up now because even if we couldn't use
`grant_multiple_actions()` (the new proc I add in this PR), it's just
not useful at all and will further hinder efforts to implement this new
proc.

Also also, I noticed in some places (such as megafauna) that we were
initializing a lot of datum actions _in nullspace_. We didn't pass the
`src` argument to `New()`. I quickly fixed that, as well as got rid of
the useless types we had going on.

Also also also, I added a define macro to handle some of the cases that
melbert was speaking about in his review down below. All you need to do
is invoke the define on the typepath, and you should be good to go from
there. There's probably a better way to do it, lmk though. we do the
whole `do while` thing in order to prevent code leakages.

## Why It's Good For The Game

* Very easy to change the implementation. In case we need to do
something different in how we add actions or anything like that, we can
simply just edit instances where this proc is located.
* Standardizes addition behavior. There's a lot of cases like the
aforementioned not-null-checking `ai_controller` that we really need to
look out for, so having it all in one accessible proc ensures standard
behavior.
* Reduces copy-pasta. A lot of mobs had their own individual
implementation of this, so let's just clean up all those lines of code.
## Changelog
🆑
refactor: The way mobs get specialized actions (like revenants shocking
lights or regal rats summoning rats to their side when you slap them)
have been modified, please report any bugs.
/🆑

This doesn't touch the following case FTR:
* Instances where we need to do work on the `/datum/action` after we
`Grant()` it, like if we were to edit some variable on the action or if
we need to call procs on said action. I don't like how the current code
is so reliant on storing a variable to it, but that's a windmill to
attack another time.
2023-11-03 04:02:26 +00:00
Jacquerel
72c8a02f6c Wall smashing > Wall tearing (#79432)
## About The Pull Request

This PR replaces a bunch of instances of mobs being able to smash walls
by clicking them once to being able to tear walls by standing next to
them for a few seconds while an animation occurs. Wall tearing is a
three-part animation and can be cancelled and resumed at any point from
the most recently completed step so it isn't _exactly_ a single two
second interaction, and is resultingly harder to interrupt.


![dreamseeker_pmnBB9YzNi](https://github.com/tgstation/tgstation/assets/7483112/edca2d02-58f1-499a-a01c-6155ad49a7b2)

Some mobs still destroy walls in a single click, such as Flesh Worms and
Star Gazers. Really whether I replaced this or not was largely down to
vibes.

It also deletes the `tear_walls` element because it was the same as
`wall_tearer` but without the fun visuals.

## Why It's Good For The Game

Deleting walls instantly with a single click is pretty obnoxious. This
method slows it down a _little_ bit but also looks visually cooler and
gives people on the _other_ side of the wall a warning that something is
about to bust through kool-aid man style.

## Changelog

🆑
balance: Gorillas, Seedlings, Gold Grubs, Mooks, Constructs, Ascended
Knock Heretics, Fugu and mobs subject to a Fugu Gland now rip up walls
in a slightly slower but more cinematic way.
/🆑
2023-11-02 19:52:27 -06:00
jimmyl
c15a877170 [no gbp] venus human traps actually heal in kudzu (#79442)
## About The Pull Request

adjust_damage sucks

## Why It's Good For The Game

oops

## Changelog
🆑
fix: venus human traps heal in kudzu again
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-11-02 15:27:51 +00:00
Jeremiah
af00850356 Removes virtual-specific megafauna, fixes boss map issues [NO GBP] (#79424)
## About The Pull Request
Another atomization of the content patch-
Let's not subtype everything into virtual variants

This also fixes some bugs that were present with vdom boss maps
- Made the bubblegum map larger so he wouldn't teleport out
- Legion is just far too annoying to have to fix code wise, given that
few if anyone tries it with the base virtual equipment

<details>
<summary>what do you mean too annoying?</summary>

Legion doesn't handle dying like the standard megafauna - each time it
"dies" it looks to see if there's another legion in the entire game
world. Given the real one very likely exists, this basically means it
won't drop anything. I'd have to modify legion's death proc specifically
for the virtual domain. No other megafauna has this level of weirdness
(nor splitting behavior) and coupled with the fact I think no one tries
the domain, I'm just removing it.

</details>

## Why It's Good For The Game
Cleans up megafauna subtypes that were specific for the virtual domain.
Now, we won't need to keep adding to the list if there's ever a new one
Fixes #79203
Fixes #79200

## Changelog
🆑
fix: Bubblegum should no longer teleport out of the simulation when
threatened
del: Chamber of Echoes map removed as it conflicts with the actual
Legion
/🆑
2023-11-02 13:21:04 +00:00
moocowswag
86d1e448d7 Fixes a bug that caused space dragon's carp to often die in one hit (especially against lasers) (#79448)
## About The Pull Request
#75607 Intended to strip space carp of their ability to avoid combat and
sabotage the station and instead made them serve as body guards meant to
help the space dragon defend the portal by gutting their movement speed
and object damage but with compensation to health and raw damage they
can deal should they somehow get in melee with their now slow and bulky
speed.


Except their health increase was only to their initial health value and
didnt bump up their max health which meant as soon as something updated
their health they would go back down to pre-reworked health.

This just gives the new "bulky" carps a max health value to match
## Why It's Good For The Game

Its not fun to be slow and immobile when your health value is still
balanced as if you are fast and nimble.

I mean just look at the changelog at a glance you can tell something was
wrong


That being said I`m open to similar behavior in the future where carp
come in, they get a one time health boost, possibly in the form of a
bubble that the rift blew them out in, and that bubble is like a
temporary health pool that gets used up and cant be recovered......but
the current iteration im 99% sure is a bug.
## Changelog
🆑

fix: Space carp that arrive via rifts are no longer stricken with rift
travel related sickness that causes them to become weaker.
/🆑
2023-11-02 12:58:02 +00:00
Mothblocks
8f29ff6e97 Revert "Emote Panel TGUI" (#79474)
Reverts tgstation/tgstation#79434

---

Dude


![image](https://github.com/tgstation/tgstation/assets/35135081/d4b07766-331d-45d7-93cf-ae5e5b01a2ab)
2023-11-02 09:14:25 +01:00
larentoun
5ef9f3e80d Emote Panel TGUI (#79434)
## About The Pull Request
Adds Emote Panel TGUI in IC category. It shows all the available emotes
for the character on the moment of opening the panel. It also has
filters for:
* If the emote is visible;
* If the emote is audible;
* If the emote has sound;
* If the emote requires hands;
* If the emote can have params (such as target);

<details><summary>Images</summary>


![Screenshot_1](https://github.com/tgstation/tgstation/assets/31931237/c6bd549c-de33-44dd-8189-7b92fa2f4ac9)

![Screenshot_8](https://github.com/tgstation/tgstation/assets/31931237/2d444a86-459a-441c-bb88-d12760229d65)

![Screenshot_2](https://github.com/tgstation/tgstation/assets/31931237/59145517-e8bc-4a46-8e82-6b738865eb83)

![Screenshot_3](https://github.com/tgstation/tgstation/assets/31931237/60d52f97-4331-40c7-a925-72019304ebea)

![Screenshot_4](https://github.com/tgstation/tgstation/assets/31931237/0eb49e6d-4046-4f56-bcf9-7bfda7444ee2)

![Screenshot_5](https://github.com/tgstation/tgstation/assets/31931237/58e1f491-532d-4225-9048-b98f8a3caa78)

![Screenshot_6](https://github.com/tgstation/tgstation/assets/31931237/dfe8f436-2954-4f2b-9949-d96b0928cfff)

![Screenshot_7](https://github.com/tgstation/tgstation/assets/31931237/7c543a7e-66dd-4192-a6de-698dc027c258)

</details>

## Why It's Good For The Game
Easier for newer players to use emotes without the use of "*help" and
keybindings. Also shows if the emote is visible/audible/etc, so there is
less need to spam each of them to see which have sound.

## Changelog
🆑
add: Emote Panel TGUI added in IC category.
/🆑
2023-11-02 00:15:08 -07:00
kawoppi
dc9376a85e basic mobs use their disarm response when shoved by humans (#79441)
## About The Pull Request
So basic mobs have variables which can change what message is displayed
when they are shoved. But right now these are only used if they are
shoved by aliens. This PR changes it so that they're also used when
they're shoved by humans.

![shove2](https://github.com/tgstation/tgstation/assets/94711066/80bc08e9-7ab2-4eb6-a01f-ed5a2e1cd63b)
## Why It's Good For The Game
It seems a bit weird for these to only show up when aliens are involved.
It seems more appropriate to shoo a tiny creature away compared to
shoving it.
## Changelog
🆑
spellcheck: basic mobs getting shoved by humans now display the mob's
disarm response
/🆑
2023-11-01 17:08:28 -06:00
lizardqueenlexi
08274f8343 Basic Constructs: Proteon (#79425)
## About The Pull Request

Last one! Makes proteons into a basic mob, and completely removes the
simple_animal construct supertype.

Proteons aren't really designed to be played by a player, instead being
a nuisance mapped into various ruins and traps. As such, they don't
really have any special abilities. Instead, the hostile variant has a
somewhat unique behavior. They'll viciously attack anyone who comes
close, but, being frail little cowards, if a proteon takes damage it
will immediately flee. After a random period between 2 and 4 seconds, it
will stop fleeing and come back for more.

In addition to this, a few other things have been done, some only
related because they're in files I touched.
- Moved proteons from the file for the Cleric's Den to their own file in
the basic constructs folder. Given that they're used in several
different ruins, they might as well not just be in the file for one.
- Simple constructs have been cut, and with them the procs for
healing/repairing on shades and cult structures, as those are no longer
needed.
- Because I was touching it anyway, I touched up the file for trap
structures. They no longer use any one-letter variable names, and time
is now universally listed in seconds rather than deciseconds in that
file.
- I removed a completely unused blackboard key from ice demons. This is
something I noticed due to a change I ended up not making while working
on proteon AI, but I figured I might as well leave it gone.
## Why It's Good For The Game

Kills the last three simple construct typepaths, bringing us to the
destined 19 removed. Huzzah!

The proteon AI routine should inject a little spice into fighting
proteons, especially for the unprepared - unlike many mobs, they won't
stand there and take it if you decide to fight back, but you can never
safely ignore them when they run away. They still aren't particularly
dangerous.
## Changelog
🆑
refactor: Proteon constructs now use the basic mob framework. The ones
encountered in ruins are a bit flightier now, and will briefly flee
combat if attacked - only so that they can return and menace you again
soon after. Please report any bugs.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-11-01 17:07:20 -06: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
GPeckman
d75b193451 Fixes Permanent Fire Visual Bug (#79326)
<!-- 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

There was a bug where the fire visual effect would remain even after the
fire status effect was removed. It happened most often with lava, but
apparently happened in some other circumstances too. I believe I have
tracked down and fixed all sources of the bug. The culprit was
`/mob/living/proc/update_fire`. It was searching for a base
`/datum/status_effect/fire_handler` status effect, when it should have
been looking for `/datum/status_effect/fire_handler/fire_stacks`. I
tested it with lava, and it fixed the bug. If anyone knows of a reliable
way to cause the bug without lava, I would be happy to test it there as
well. Closes #73283.

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

## Changelog

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

🆑
fix: The fire visual on mobs should no longer persist after the fire has
been extinguished.
/🆑

<!-- 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-10-31 13:45:38 +00:00
Hoolny
34e488acf5 Spider Infestation Balance Rebalance Expansion Part 2 (#78705)
## About The Pull Request
Balances
1. Spiders now slow down equivalent to their health
2. Tarantulas can no longer put web passages or solid webs and destroy
walls outside of charge attack
3. Young spiders now cant pull objects do to being too weak and become
slower outside of webs as they should be
4. Makes pneumatic airlock seal unable to be destroyed by spiders
5. All Broodmother eggs now have a cooldown timer
Normal Eggs: 20 seconds
Abnormal Eggs: 180 Seconds
Enriched Eggs: 60 seconds

Expansions

1. Added a new abnormal egg category
2. Broodmothers can now lay abnormal eggs
3. 2 new spiders added
6. A new web type: Reflective silk screen
# Breacher

![dreamseeker_HmjGZdlh5l](https://github.com/tgstation/tgstation/assets/84478872/de957cd4-74d1-4df1-b8d7-69d7b07cdc88)

![dreamseeker_xvfmLDa8tX](https://github.com/tgstation/tgstation/assets/84478872/b8b9238b-b31d-4c3b-9483-00cbdc827cc6)

![image](https://github.com/tgstation/tgstation/assets/84478872/df46b478-a1e1-4743-bc56-9c5821e0aac0)





- Low damaging with High wound bonuses meant to debilitate enemies to
take ground for the nest

- Has the ability to breach areas by destroying walls with menson vision
to map out strategic breachings

- Immune to harsh environments with the ability to lay solid webs to
protect the nest environment

- Can send in warnings for the entire nest to hear 


Will Help the nest get out of being closed off by small construction
attempts and fix some space breaches plus some back up by making enemies
slower and scarring them off with some bloodloss

# Tank

![image](https://github.com/tgstation/tgstation/assets/84478872/f4abe473-3593-40af-afd4-99c74cf83d46)

![image](https://github.com/tgstation/tgstation/assets/84478872/203a3b6a-9b8d-4d1f-ade8-cd67b50383ba)

- Extremely low damaging build to absorb damage to hold ground for the
nest
- With the ability to lay down silk screen reflectors to protect the
nest from missile attacks
- Can heal itself at a slow rate

Will provide great support to keep the nest at bay from range attacks at
some extent and act as a damage absorber in dier situations
# Abnormal Eggs

![YsCgX09](https://github.com/tgstation/tgstation/assets/84478872/b5da467c-9fc0-4581-bb18-47f9bf5bc9ee)

![EuKT8zN](https://github.com/tgstation/tgstation/assets/84478872/f8b0d652-14c8-4e11-92ee-d43d9eedfd77)

- They can only be made once every 180 Seconds
- Hold the two new spider types

## Why It's Good For The Game
New spiders to contribute to the general spider antag team dynamic,
balances for spiders are always good making them funner to play against
and bringing up challenges on their gameplay making them act less like
murdering simple mobs and more like an actual nest trying to survive in
the station.


How?

1. **Cooldown egg laying:** broodmothers now have to be more strategic
on where they place their eggs with an average of 3 eggs per minute per
broodmother
2. **Spider slowdown on damage:** Spiders now will become slower the
longer they stay out of the nest in battle making them have to retreat
back to the nest shortening their time out murdering giving incentives
to expand the nest
3. **Spider More Brute Damage:** Gives a reason to use melee against
spiders although more dangerous it gives more reward due to the higher
damage outputs since spiders are pretty much big bugs with delicate
bodies no bones no good structural consistency equal more damage to
blunt attacks
4. **Tarantula Nerfs:** Tarantulas shouldnt be able to destroy this many
walls at this rate and be able to lay so many defensive webs I don't
know why they had this abilities but their strong enough as is

## Changelog
🆑
add: Added Abnormal Eggs
add: Added Two new spiders
del: Some Tarantula abilities
balance: Spiders speed are now connected to health
balance: Spiders now take more brute damage
balance: All egg laying now has a cooldown
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-10-31 13:36:15 +00:00
Zephyr
9ebf319e6a fixes signal circuit not working | refactors name of timer cooldown macros to be inherent, also docs them (#79367)
## About The Pull Request

Title
## Why It's Good For The Game

Less headache in the future for a macro thats not really obvious in what
it does
## Changelog
🆑
fix: signals in circuits now actually function
/🆑
2023-10-31 10:58:48 +00:00
Profakos
bc18450afe Converts traders to basic mobs (#79187)
## About The Pull Request

This PR converts the two trader mobs into basic mobs, these being the
basic debug trader that buys ectoplasm and sells ghost burgers, and Mr
Bones, who buys empty milk cartons and bones, and sells bone relate
paraphernalia.

Traders now use dynamic appearance generation. The old sprites still
exist as hallucinations, and as shop signs.

Trader UI is now summoned via `COMSIG_ATOM_ATTACK_HAND`, which properly
cancels the attack chain, so there is no longer need to put it on
Interact.

I kept most of the original behaviour, but moved them off into a
component. I have also cached all the images generated for the radials,
I hope I have not overengineered it. I have also created a new datum,
which stores the trader's wares, needs, and speech patterns.

Admins can put the component along with the trader data on any living
mobs with an AI controller, turning them into traders. Keep in mind that
most AI has random idle movement, meaning they have a chance to walk
off, closing your trader radial.


![image](https://github.com/tgstation/tgstation/assets/2676196/a2b216e9-f9bf-46e1-83fa-3a41c8447176)

The trader AI consists of the following, first, when a trader sees
someone, they will deploy their shop, if one does not already exists.
The shop consists of a chair, and a holographic sign. If you attack
them, they will chase you with their weapons, and then return to their
chair when victorious. If the chair is somehow destroyed, they will
create a new shop when they see a new potential customer.


![image](https://github.com/tgstation/tgstation/assets/2676196/ad5fcd5a-996c-490f-938b-6bc11c91c4ee)

Mr Bones uses a variant of the AI, where they will run at you, and
deploy their shop when they reach you. I call this the jumpscare
variant. Below you can see me getting actually jumpscared because Mr
Bones has stepped on a yelling frog when I opened the maintenance door.


![image](https://github.com/tgstation/tgstation/assets/2676196/f47a5baa-e32d-4454-97f9-d90d027003d2)

I have also made an element that toggles an ai controlled combat mode
when it gains a target, and when it loses it. I am using it to make
Traders unable to trade while they are trying to kill a robber. To aid
this, I a have made
`/datum/ai_controller/proc/sig_remove_from_blackboard` send the
`COMSIG_AI_BLACKBOARD_KEY_CLEARED` signal, in case the trader kills a
mob that deletes itself on death. This means I could remove a signup
`/datum/component/appearance_on_aggro` was doing towards Qdeleting.

Below you can see Mr Bones shooting me with candy corn.

![image](https://github.com/tgstation/tgstation/assets/2676196/489e1072-e15a-412c-a8eb-9a3f0cca7bf6)


![image](https://github.com/tgstation/tgstation/assets/2676196/8f74b50f-ea35-467c-bb07-2ef38f84c453)

Traders actually only shoot you until you are conscious, so I survived
here in crit. Most mobs don't have crit state, so they just die, so I am
sticking by this voice line.

Thank you @CoiledLamb  for help with the sale sign!

## Why It's Good For The Game

Two more mobs off the list. The AI and Componentized behaviours allows
us to set up new kind of traders.

## Changelog

🆑
refactor: Traders are basic mobs now. Please alert us of any strange
behaviours!
code: If there is only one option, radial lists will autopick it. This
behaviour can be turned off via a new argument.
/🆑
2023-10-31 01:49:56 +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
lizardqueenlexi
0036e13af0 Basic Constructs: Wraith (#79235)
## About The Pull Request

Converts wraith constructs to basic mobs. The last of the "mainline"
constructs, though there's still one to go after this.

Wraiths are pretty much the same as they've always been - speedy
constructs that pack a bit of a punch, built around doing hit-and-run
tactics with their ability to ethereal jaunt. Notably, I've converted
their ability to recharge their jaunts with attacks into a new
component, `recharging_attacks`. This can be placed on any basic mob to
let them recharge a cooldown action by landing hits, which could
possibly be useful in the future.

NPC wraiths are pretty straightforward, with a twist - they will always
chase down and beat to death the lowest-hp mob they can see. Happening
upon one of these while wounded will end very badly! While I originally
wanted them to be more flighty and use hit-and-run tactics, I couldn't
figure out a way to do this that didn't look kind of silly and make them
less effective overall.

In addition to the wraiths, I've done some much-needed cleanup to basic
constructs as a whole, improving some things and covering some things I
missed along the way.
- Ectoplasm drop types from constructs is now properly based on their
theme. I _believe_ I've done this in a way that will pass unit tests
this time, but we'll see if my local tests were being honest with me.
- Player-controlled constructs now attack faster. I didn't realize that
being basic mobs capped them to attacking once every 2 seconds, which is
a gigantic nerf over the simple animal version. I cut this to just 1
second, which should be much closer to how it originally was.
- Artificers actually seek out and heal the most damaged ally they can
find, instead of the least damaged. Turns out the sort was doing the
exact opposite order from what I thought, which became much more obvious
when using the same targeting behavior on wraiths.
- I put the PR number in the juggernaut update script, which I somehow
missed on that one.
- Removed the extraneous "noncult" construct subtypes that didn't do
anything. The Artificer one, which does something, is still around.
## Why It's Good For The Game

For the same reasons as the previous three. 5 more simple animals gone,
and only one construct to go until I can nuke simple constructs from the
codebase entirely. Other than that, the new component could possibly
come in handy in future designs, and the NPC behavior should hopefully
be a little scary - even if just a little.
## Changelog
🆑
refactor: Wraith constructs have been converted to the basic mob
framework. NPC wraiths are now extra cruel and will attack the
lowest-health mob they can see at any given time. Make sure this isn't
you! Please report any bugs.
fix: Artificers and juggernauts no longer attack significantly more
slowly than intended.
/🆑
2023-10-30 02:28:32 +00:00
lizardqueenlexi
9e18c6575a Basic Pirate NPCs (#79284)
## About The Pull Request

Converts hostile pirate NPCs to basic mobs - specifically, a subtype of
trooper. As their behavior is not meaningfully distinct from other
troopers, this conversion mostly just sticks them on the existing AI
behavior while keeping the rest the same.

Pirates do have one new thing going for them, though, to differentiate
them from other troopers. They use the new **plundering attacks**
component, which means that every time they land a melee attack, they
steal money from the bank account of whoever they hit. This requires the
target to be wearing an ID with a linked bank account, so it's not the
hardest thing in the world to hide your money from them - but it's still
something to be wary of! If killed, any mob with this component will
drop everything they've stolen in a convenient holochip.
## Why It's Good For The Game

Takes down 5 more simplemobs, and (I think) converts the last remaining
trooper-type enemy to be a basic trooper. (It's possible there's more
I've forgotten that could use the same AI, though.)

The money-stealing behavior is mostly good because I think it's funny,
but it also makes the pirates something a little distinct from "yet
another mob that runs at you and punches you until you die". They still
do that, but now there's a little twist! This can be placed on other
mobs too, if we want to make any other sorts of thieves or brigands.
## Changelog
🆑
refactor: Pirate NPCs now use the basic mob framework. They'll be a
little smarter in combat, and if you're wearing your ID they'll siphon
your bank account with every melee attack! Beware! Please report any
bugs.
/🆑
2023-10-30 02:27:46 +00:00
DrTuxedo
13ab27ce60 Wearing Hailer gives unique death SFX (#79216)
## About The Pull Request

If you die with a SecHailer on, a unique sound effect will play (created
entirely by me using in-game files):


https://github.com/tgstation/tgstation/assets/42353186/042e4159-57f3-4cc1-8d96-4dc7289f194b

(Please note that the pitch is randomized)
You can give any mask's unique death sound effects now.
## Why It's Good For The Game
SecHailers can change people's voices. Why not make them sound different
when they die? It could be a humorous reference with a unique sound.
SecHailers' voice changer function is a reference, which I expanded by
also making a unique death sound effect.

Also now you can make more masks with unique death sound effects if you
want to.
## Changelog
🆑
sound: Dying with a SecHailer on your face will make a unique death
sound
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-10-28 20:41:01 +02:00
necromanceranne
c1a29f926e Your unarmed attacks are once again blocked even when you're not in combat mode (#79233)
## About The Pull Request

Currently, not being in combat mode when making an unarmed attack allows
you to bypass ALL BLOCKING. All of it. Every single kind of shielding.

This is now fixed. 

As a consequence, hugging is now blocked, but that's fine, hugging puts
you into click cooldown and _might actually be an attack now_. [Like the
Hugs of the Gondola martial
art](ab058330b4/code/datums/martial/hugs_of_the_gondola.dm)

Fixes https://github.com/tgstation/tgstation/issues/72812

## Why It's Good For The Game

This was broken with COMBAT MODE AAAAAAAAAAAH

### AAAAAAAAAAAH

## Changelog
🆑
fix: Every person on the station now no longer has the Tranquility
Evades the Shield Pinky Finger Shovegrab unarmed combat technique, an
ancient and forbidden strike that allows anyone (literally anyone) to
bypass all forms of blocking defense by simply not being in combat mode
when they shove or grab their target. As a direct result, the chakra
energy of the Spinward Sector has become severely misaligned. Oh well.
/🆑
2023-10-28 13:05:37 +02: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
lizardqueenlexi
157fafeaa9 [CI Fix] The Demonic Frost-Miner will not attack corpses. (#79294)
## About The Pull Request

Fixes #79147.

Prevents the Demonic Frost-Miner from shooting at corpses by returning
early from `OpenFire()`. Also adds the "gutted" status effect to the
corpses in its arena so it won't try to gut them.
## Why It's Good For The Game

#78826 introduced an unfortunate bug by placing corpses in the Frost
Miner's arena. There were a combination of three factors at play here:
that the Miner attacks corpses, that it happens to use colossus bolts in
its attacks, which dust corpses, and that some unfortunate quirk of life
code causes runtimes if, as far as I can tell, a life tick goes off when
a mob is at the wrong point in the dusting process. The time this
process takes happened to perfectly coincide with the Monkey Business
unit test (being the first test that takes a significant period of
time), causing it to randomly fail.

So, this fixes a flaky test that has been a pain in the ass for the last
five days, is the big thing.

Also, it can't possibly have been intended for the Miner to run around
obliterating the aesthetic corpses in its arena within the first 15
seconds of any given round. Completely ruining the mood!

I'll point out that this particular boss may have been forgotten in
#77731, which set out to make only the colossus still gib/dust you, but
even were that not the case I think it would be a bit silly for the
Miner to be busy shooting lifeless corpses when a player shows up to
challenge it, rather than standing in its scary ritual circle.
## Changelog
🆑
fix: The Demonic Frost-Miner will no longer run around destroying the
corpses in its arena the moment the round begins.
/🆑
2023-10-27 13:56:46 +00:00
lizardqueenlexi
21fbdc277f [CI Fix] Fixed a runtime when a monkey attacks a parrot. (#79288)
## About The Pull Request

#79276 has caused the monkey business test to start failing a lot, for a
few different reasons.

This was a pretty bad one, where the proc specifically used for a monkey
attacking a parrot was broken. It would not actually pass along a
reference to the monkey with the attack, causing no less than three
runtimes per attack. In unit tests this was causing literally thousands
of lines of stack traces as an angry monkey keeps trying to beat the
ghost of Poly to death.

That should not happen anymore.
## Why It's Good For The Game

Hopefully lets PRs start passing checks more consistently again. Also
lets Pun-Pun fight Poly to the death without breaking everything.
## Changelog
🆑
fix: Monkeys can now properly attack parrots.
/🆑
2023-10-27 13:41:22 +00:00