Commit Graph

454 Commits

Author SHA1 Message Date
Joshua Kidder
df0e0811c2 Significantly increases stamina recovery on most effects that provide it (#83556)
## About The Pull Request

Currently, stamina healing is a niche side effect on many drugs, besides
a few effects (mostly heretic powers, an obscure side effect of some
drinks) that actually contribute to a significant shift in gameplay
style when you use them. In this PR I significantly increased the
stamina recovery on almost every drug and some effects that provide it.

Points of interest (not completely inclusive):
Syndicate stimulants heal 12 instead of 5 stamina damage. This will
bring you out of stam crit in two cycles, and let you heal out of the
slowdown from the stamina damage from a baton strike. The current rate
of 5 takes 5 seconds to heal out of stam crit, and the stamina reset
takes place before you heal out of stamina damage slowdown.
Bath salts heal stamina at the rate stimulants used to. Meth heals
stamina slightly slower.
Changeling adrenaline will instantly bring you out of stam crit if
you're in it; otherwise, it will heal 10 stamina damage.
Ephedrine heals 4 stamina per life, instead of 1.
Being so drunk that you black out and give up your body to ghost control
will make you heal stamina more quickly than an ascended rust heretic.
You will also likely be dying of liver damage.
## Why It's Good For The Game

At the levels they are set, most of these stamina healing effects have
almost no effect on gameplay whatsoever except in the case of tanking a
couple of extra disabler shots (only in the case of the high end drugs),
or being able to do stamina consuming tasks slightly longer (breaking
boulders, grinding with pestle and mortar, working out, ???).

Adjusting these numbers would make these drugs an actual factor in
combat situations that rely on stamina crit (stun batons, ebows, stamina
damaging poisons and diseases). Most of the drugs already have side
effects such as brain and organ damage, which in the current state
hugely outweighs any reason to use most of them besides a few that give
a movespeed buff or prevent baton knockdown (ephedrine, stimulants).

This only affects stamina healing. There has been no change to any other
interactions with things that knock down or cause any other kind of
stun.

These changes are in consideration of the fact that taking stamina
damage puts you in a cooldown before you can recover your stamina
naturally. Effects that cause steady stamina damage will bottom out your
stamina the way they do now, unless you use something to heal it.
## Changelog
🆑
balance: Stamina healing has been significantly increased for most
reagents and passive effects.
/🆑
2024-06-11 22:03:50 -07:00
MrMelbert
4b8127a777 Incoming stamina damage while in stamcrit has diminishing returns applied (#83445)
## About The Pull Request

After being put in stamcrit, future incoming stamina damage has
"diminishing returns" applied*.

The formula looks like `ceil(sqrt(amount of stamina damage) / 2) - times
you have taken stamina damage in stamcrit`.

This means eventually stamina based damage will do less than zero
damage, and thus, not contribute to keeping stamcrit active.

Very, very low amounts of stamina damage (such as from chems) contribute
to DR 1/20th the amount.

*_Note, this is not real diminishing returns because making it real
diminishing returns would be pointless, you are capped to 120 stamina
damage so 99.99% of the time you take stam damage while in stam crit
you're already capped. This is just faking the effect._

In its current stat this means that a stun baton will stop being able to
keep someone in stamcrit after the 5th hit, and a stock disabler will
stop being able to keep someone in stamcrit after the 4th hit.

## Why It's Good For The Game

Mostly just an experiment. I don't imagine it will shake up much about
the baton situation in its current state.

There's also no grace period after getting UP - so like you can just be
stamcritted right after anyways. Maybe there should be one? Food for
thought.

And yes of course you can just space out your hits, you're not clever
for thinking about that

## Changelog

🆑 Melbert
balance: Taking stamina damage in stamcrit has diminishing returns
associated, meaning you cannot be infinitely stamcrit.
/🆑
2024-06-11 22:02:24 -07:00
MrMelbert
ff6b41aa07 Afterattack is dead, long live Afterattack (#83818)
## About The Pull Request

- Afterattack is a very simple proc now: All it does is this, and all
it's used for is for having a convenient place to put effects an item
does after a successful attack (IE, the attack was not blocked)


![image](https://github.com/tgstation/tgstation/assets/51863163/1e70f7be-0990-4827-a60a-0c9dd0e0ee49)

- An overwhelming majority of afterattack implementations have been
moved to `interact_with_atom` or the new `ranged_interact_with_atom`

I have manually tested many of the refactored procs but there was 200+
so it's kinda hard

## Why It's Good For The Game

Afterattack is one of the worst parts of the attack chain, as it
simultaneously serves as a way of doing random interactions NOT AT ALL
related to attacks (despite the name) while ALSO serving as the defacto
way to do a ranged interaction with an item

This means careless coders (most of them) may throw stuff in afterattack
without realizing how wide reaching it is, which causes bugs. By making
two well defined, separate procs for handing adjacent vs ranged
interactions, it becomes WAY WAY WAY more easy to develop for.

If you want to do something when you click on something else and you're
adjacent, use `interact_with_atom`
If you want to do something when you click on something else and you're
not adjacent, use 'ranged_interact_with_atom`

This does result in some instances of boilerplate as shown here:


![image](https://github.com/tgstation/tgstation/assets/51863163/a7e469dd-115e-4e5b-88e0-0c664619c878)

But I think it's acceptable, feel free to oppose if you don't I'm sure
we can think of another solution

~~Additionally it makes it easier to implement swing combat. That's a
bonus I guess~~

## Changelog

🆑 Melbert
refactor: Over 200 item interactions have been refactored to use a
newer, easier-to-use system. Report any oddities with using items on
other objects you may see (such as surgery, reagent containers like cups
and spray bottles, or construction devices), especially using something
at range (such as guns or chisels)
refactor: Item-On-Modsuit interactions have changed slightly. While on
combat mode, you will attempt to "use" the item on the suit instead of
inserting it into the suit's storage. This means being on combat mode
while the suit's panel is open will block you from inserting items
entirely via click (but other methods such as hotkey, clicking on the
storage boxes, and mousedrop will still work).
refactor: The detective's scanner will now be inserted into storage
items if clicked normally, and will scan the storage item if on combat
mode
/🆑
2024-06-11 21:58:09 -07:00
Time-Green
108880a1e6 Sneeze Rework: Projectile Combat Edition (#83361)
## About The Pull Request
Reworks sneezing. Instead of a range check that checks if you're facing
someone, it is now a skill check


https://github.com/tgstation/tgstation/assets/7501474/c11ffa16-9bd2-4ed1-8022-2094360657bc

All sneezes shoot projectiles, but depends on the virus if they're
infectious. Using the sneeze emote is the only method that doesn't shoot
a sneeze

## Why It's Good For The Game
I think the invisible infection mechanics are unfun. A lot of station
dangers challenge your knowledge and mechanical skill, while viruses are
gotten by being around people in a roleplay game. You can get a round
seriously ruined if you walk past someone with a sneezing virus and
don't immediately rush spaceillin or chemistry, which I don't think is
mechanically interesting.

Now if you get infected, it's a skill issue. Get good and dodge the
sneeze

Note that this is just one method of infection. I didn't touch coughing
and airborne viruses, which do constant area checks and infect everyone
around. I plan to, but not now. I'll probably make coughing do a cone or
something, and ignore the airborne viruses since they can't be modified
and are generally less broken

## Changelog
🆑
balance: You can now dodge sneezes
balance: Infectious simple diseases that use sneezes now infect with
sneezes and have lowered airborn transmission
balance: Damageless attacks, projectiles, hugs etc no longer drain
shields
/🆑

- [x] Make sneezes shoot to your cursor so you can either intentionally
sneeze on people or sneeze away from people if you react fast

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-06-07 13:40:05 -04:00
Jacquerel
167c55bed2 Sentient mobs can slowly subtract slime stacks by shaking (#83471)
## About The Pull Request

Closes #82746
PR #77569 replaced the clone damage inflicted by slimes with a lingering
damage over time effect which can be removed with water.
This is all well and good for humans who can spray themselves with fire
extinguishers, showers, or sinks... but most other mobs are not actually
capable of opearating any form of equipment which can make them wet.

This PR allows you to click on the debuff icon to shake the slime off
slowly over time (15 seconds to fully remove the debuff).
This is slower than the recovery time when wet.

Dogs, Cats, and by extension, Felinids are better at removing slime
because of their self-cleaning prowess (they're always licking weird
stuff off themselves). This is rarely helpful if you're not a Felinid,
because almost all cats and dogs have so little health that they will
hit the minimum health threshold and lose the debuff anyway by the time
they would be done.
In the very niche circumstance that a sentient wolf is attacked by a
slime they will appreciate this bonus.

## Why It's Good For The Game

This was a replacement for slimes inflicting clone damage (I am not sure
this even did anything for most simple mobs?) but essentially turned
slimes into an automatic death sentence for most forms of mob without
hands.
Technically the slime debuff cannot kill you and stops if you are under
10 HP, but this is small consolation for most of these mobs which cannot
heal themselves either.

You are still probably going to take between 30-60 damage during the 15
seconds of removing slime from your body.

## Changelog

🆑
balance: Corrosive slime left behind after a slime fails to eat you can
be scraped off with your hands, or shaken off in some other way, by
clicking on the debuff. This is slower and less effective than washing
it off using water.
/🆑
2024-06-05 14:47:02 +02:00
carlarctg
445ed08ce1 Adds Crutches to Medbay & Crafting (#83242)
## About The Pull Request

Added crutches! Wooden ones can be made with wood. Medical ones can be
bought from the medvendor.

Crutches will reduce slowdown from missing a leg by 60%, and they will
remove the limping from fractured bones. They're also a fairly decent
bludgeon. However, they do nothing if both legs are cut off. Canes now
also remove broken bone limping as well

Changed the 'white cane' name to 'probing cane' to better reflect its
function.

Shuffled some wound and mob code around, added signals for limbless
slowdown and limping.

Crutches make you waddle.

SPRITES BY XHORIAN!!!!!!!!!!!!!


![image](https://github.com/tgstation/tgstation/assets/53100513/fe7e5ac8-0e6e-4291-ae64-c96632997607)

![image](https://github.com/tgstation/tgstation/assets/53100513/bde7fd7a-38d4-4036-82f2-01bdb8a6f00b)

![image](https://github.com/tgstation/tgstation/assets/53100513/9d94bc8d-5a80-4199-a044-7c5cf1944f99)

![image](https://github.com/tgstation/tgstation/assets/53100513/b26ecf53-177a-400d-aa5a-f2c0d5560942)



## Why It's Good For The Game

> Added crutches! Wooden ones can be made with wood. Medical ones can be
bought from the medvendor.

> Crutches will reduce slowdown from missing a leg by 60%, and they will
remove the limping from broken bones. They're also a fairly decent
bludgeon. However, they do nothing if both legs are cut off.

Currently there's no way to abate slowdown from a missing leg except
getting on a vehicle, which I think is pretty lame. What if all the
doctors are busy, missing, or dead? What if medbay is a hole? A crutch
helps make up for the loss at the cost of a hand slot.

> Changed the 'white cane' name to 'probing cane' to better reflect its
function.

'White cane' was undescriptive.

> Shuffled some wound and mob code around, added signals for limbless
slowdown and limping.

I dont know where to put the friggin signals

## Changelog

🆑
Carlarc, Xhorian
add: Added crutches! Wooden ones can be made with wood. Medical ones can
be bought from the medvendor.
add: Crutches will reduce slowdown from missing a leg by 60%, and they
will remove the limping from fractured bones. (canes do that now too)
They're also a fairly decent bludgeon. However, they do nothing if both
legs are cut off.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-06-01 20:02:00 +00:00
MrMelbert
249df48116 Deletes handle_random_events, saving us from 1 whole proc call in Life (#83421)
## About The Pull Request

Dumps `handle_random_events` in the bin, giving us one less proc in
`Life`, that's a free proc call optimization baby.

Replaces its only implementation with a status effect conditionally
applied when gaining / losing tox dam.

## Changelog

🆑 Melbert
refactor: Refactored the way high toxins cause you to vomit.
/🆑
2024-05-26 11:58:16 -07:00
EnterTheJake
154837240d Rust Heretic rework: THE PUKENING. (#83006)
## About The Pull Request
Turf rusting is now based on knowledge instead of RNG; toxic damage on
spells has been replaced with disgust; rust walkers are a bit easier to
summon and show up early in the tree.

Rust ascension spread has been massively increased and immunities while
on Rust have been updated.
## Why It's Good For The Game

This is a massive list of changes, but the tl:dr is Rust heretic design
is pretty barebones and dated in its current state. I'm going to try my
best to explain why that is and why it needs to change.

###  RNG on rusting is bad

**Problem** : quite a lot of turfs cannot be rusted, and reinforced
turfs rusting is tied to RNG, the emergency shuttle floors are also
unrustable, making an ascended heretic not threatening at all to an
escaping crew.

**Solution**: Heretic rusting prowess is now tied to knowledge
progression; reinf wall rusting is no longer tied to RNG; the emergency
shuttle is now rustable if you have accrued enough knowledge.

**Explanation** : I've been adopting the code from a previous PR that
sadly didn't make the light of day.

Link: https://github.com/tgstation/tgstation/pull/65361

The goal is to have Heretic rusting be more consistent, so that if you
ascend the shuttle is no longer a safe refuge.

**Grasp Of Rust**: Basic floors and walls.
**Mark Of Rust**: Reinf floors and walls (takes 3 applications of rust
to fully destroy).
**Toxic Blade** Titanium and Plastitanium( still takes 3 applications of
rust to destroy).
**Ascension**: almost everything save for admin walls, glass, and
silver.

### A territorial antagonist with no tools to defend its turf

**Problem**: Rust heretic is forced into a territorial playstyle, but
it's heavily diminished by rusted turfs not having any negative effect
on the crew whatsoever, Toxic damage on plume and blade is also kind of
bad and has no synergy with the rest of the kit.

Lastly, while fitting to the theme of Rust; mark detonation destroying
clothes and items can end up being more harmful to the heretic, as
destroying a secoff's flashbang will result in you getting stunned and
killed.

**Solution**: Rusted floors are no longer safe for the crew; walking
over Rust will add a small buildup of disgust, silicons will receive
ticking damage, Toxic damage on Rust skills has been replaced with
disgust buildup and a chem purge effect to prevent the crew from
cheesing the debuff with sol dry.

**Explaination** "The goal behind this change is to prevent the crew to
just be able to walk willy nilly into an eldritchly decayed area without
repercussions, plus I feel like disgust is a fitting debuff for Rusties
for a number of reasons.

1) Lore wise, your goal is to turn the entire station into a garbage
dump.

2) It fits for fighting a territorial antagonist, it's not immediately
threatening on its own, but if you overstay your welcome, it has dire
consequences.

3) We don't really do much with disgust as a status effect, far as i
know, this'll be the first iteration of it being used for an antagonist
toolset.

4) It gives reason to the crew to act hostile towards the Heretic, as
you are essentially making their work area inhabitable.

I've also Slightly increased the healing on leeching walk and gave it
some minor temperature regulation (you won't be able to outtemp space
cold).

### Rust Walkers 

**Problem**: Rust walkers might as well not exist in their current
state; they are one of the latest heretic unlocks, and the recipe for
summoning one is INSANE now that you cannot decapitate mobs anymore.

**Solution**: Rust walkers pop up a bit earlier in the tree; the ritual
to summon them has more reasonable reagents (wires, pools of vomit, iron
sheets) and they have increased health.

**Explanation**: : There is not a lot to add to this. without walkers,
Rust heretics are fairly slow at spreading rust, by making rust walkers
have reasonable summoning reagents, we ease that problem; lastly i've
slightly bumped their hp, as i felt 75 hp was a bit low.

### Underwhelming ascension

**Problem**: The spread rate from the ascension is downright ATROCIOUS
in its current state, i actually ran multiple tests on different maps,
on Metastation it can take up to 40 minutes for the rust to spread to
the entire station, considering an ascended heretic results in an
immediate shuttle call, it's unecceptable in its current form.

Solution: Rust spread is now a hybridization between old ascension and
Wizard tranformation ritual.

**Explanation**: The spread rate in its current form is painstakingly
slow and has a tendency to reach one corner of the map and compound on
itself, i've borrowed the code from the wizard final ritual
"transformation" and gave it my own spin so that given enough time it
will cover the station more or less evenly, it can now spread through
all z levels.

Video example: https://www.youtube.com/watch?v=jZ5zMrNM6Jw

I've also updated the immunities you gain on ascension to ignore
slowdown and stasis from Cryogelidia.

The whole point of rust ascension is to become immune to crowd control,
i've seen far too many ascended heretics die to a single bola or cryo
syringe, that's pretty lame so i fixed that.

Lastly, aggressive spread has had its radius reduced in exchange for the
spread being consistent now; cooldown is also halved when you ascend, to
better help the heretic go on the offensive.
2024-05-16 18:53:05 +00:00
Time-Green
7499b84c9e Protects space spawned humans from radiation nebula (#83202)
Fixes #80864 

When a mob is spawned in space in a nebula, they get 1 minute of
radiation immunity. Ninja is the main one, but it'll also apply to other
space spawned mobs (lone nukie, space changeling?)

This only works for dynamic spawned antags. If an admin forces ninja
through an event, it doesnt work


![image](https://github.com/tgstation/tgstation/assets/7501474/98fbb499-86b3-43bc-bf63-403d7fa8df39)

🆑
fix: Space Ninja and other space spawned antags get a 1 minute radiation
shield in the radioactive nebula
/🆑
2024-05-15 03:21:13 +02:00
MrMelbert
11843651f5 Allows status effects with alerts to display their duration (on the alert), adds it to a select handful (#83211)
## About The Pull Request

Plainly: Expands the status effect API so their alerts can showcase
duration remaining.


https://github.com/tgstation/tgstation/assets/51863163/02eaad84-ebb7-4af9-9895-977c6e71acc4

## Why It's Good For The Game

I figure there are some status effects out there which really want the
player to know how long the duration is.

And right now, for 95% of them, you have to code dive to find out. This
is rather punishing for players who... don't code dive.

At the same time, there are effects which *do* tell you how long they
last, which leaves it up to the player to intuit when it'll run out.
This can get a bit silly during lag, and again, punishes new players.

That's not to say I think every status effect should report how much
duration is left: **For very common effects, like sleeping, it should be
left up to the player to guess.** Otherwise we lose a lot of paranoia
and feeling of helplessness. (Also keep in mind this only applies to
status effects with alerts associated.)

Hence why I only added it, largely, to the more "gamified" buffs and
debuffs - Things from (generally) one or two sources and with a static
duration, (or things which already informed the player how long they
last).

Notable ones include Fleshmend, Convulsing (from emag defib), Regen
core.

## Changelog

🆑 Melbert
qol: Some alerts, such as Fleshmend's, show their remaining duration on
their icon.
/🆑
2024-05-14 08:36:23 +02:00
necromanceranne
ca2ff33292 Rocky DLXIII: Fitness to Athletics, Athletics skill influences Boxing against Boxers, Boxing overhaul, Evil Boxing (#82611)
## About The Pull Request

### Changes Fitness skill to Athletics skill; Removes the sprite growth
as the only meaningful reward

Basically just a rebranding so that it is more broad in its concept. It
isn't just about peak physique. It's about how you can apply it too.

Reaching Legendary rewards you with the Golden Gloves.

### Boxing Overhaul

I started it in this pr here
https://github.com/tgstation/tgstation/pull/80635

But this is a more significant overhaul of boxing from the ground up.
Namely, it now is majorly influenced by the Athletics skill, and also
more thoroughly aligns with conventional punching in its current state.
However, a major component of this is that boxing's breadth of mechanics
is only relevant when used against another boxer. Non-boxer targets are
only ever going to get smacked by a stamina punch, as it is currently
(and more or less the same values too). Additionally, boxers cannot
punch someone who is either unconscious or in stamina crit, so it can't
be used to maintain stamcrit.

- Boxing now has a One-Two Punch mechanic. Swapping between the left and
right mouse buttons to punch and maintaining this causes every second
punch to do more damage (to boxers). Breaking this chain by punching
with the same button twice will cause you to lose damage (against
boxers).

- Boxing now can have crits occur below 50 stamina damage (against
boxers). However, to knock someone out clean, the target must be
staggered from a previous crit first. (Or I guess be staggered at all,
maybe their shoelaces were tied or something). Crit probabilities are
determined by adding your Athletics probability skill bonuses to your
unarmed effectiveness, and then reduced by the targets own Athletics
skill bonuses. It is hard for two athletes to knock each other out in
one blow. It is trivial for a legendary boxer to knock out a novice in a
single punch. Cybernetically enhanced boxers are dangerously effective
at boxing.

- Boxers can block other boxers by using throw mode, but the chances of
doing so is based on Athletics skill bonuses. A successful block causes
the attacker to take stamina damage (as does the blocker, but less so).

- Participating in boxing increases the Athletics skill. Your gains are
probably slower than normal training, but you at least get some reward
for doing so. Only relevant if your opponent is a boxer. Get a sparring
partner!

### Evil Boxing (Admin Only)

So this is all well and good, but what if you're a scoundrel with no
care for the other person in this equation? Well, that's where Evil
Boxing comes in. Evil Boxing has absolutely no restrictions at all, and
can freely use its boxing abilities against anyone. Even non-boxers. You
can even grab people! Wow, what a scumbag. I bet you even king hit
people. Thankfully, only an admin can make you into an Evil Boxer.

### Strength and Stimmed Mutations now benefit Exercising and Boxing
(against boxers)

Both mutations have a flimsy increase to instability of 5 because of how
incredibly particular the bonus is.

Strength now reduces the amount of stamina damage inflicted via
exercising by half. Strength also adds a +2 damage bonus on boxing
punches while boxing against boxers (this doesn't influence normal
unarmed attacks whatsoever, or boxing against nonboxers). Obviously,
evil boxers just get this benefit against everyone because they're
knaves.

Stimmed increases the duration of the exercised status effect by one
factor. (That is, if you have no other modifiers, it will double the
duration on its own)

## Why It's Good For The Game

@Jacquerel was racking their brain trying to come up with an alternative
to the skill rewards of Fitness. At the moment, sprite growth is not
only a really bad bonus (it does literally nothing but make you big, and
thus is actually a detriment due to how intrusive sprite size is with
interaction, and plays weird with other sprite changing effects), but
isn't really all that interesting for all the effort put in.

Problem is, how do you make Fitness meaningful without making it a
powergame mechanic? Simple! You make it applicable to a really niche,
self-contained but still utilized game mechanic that is engaging to
participate in and makes you meaningfully very good in it. AND scratches
that power scaling itch that many players have.

Boxing is reasonably self-contained as is, but pretty bland due to how
old it is. While maintaining that self-contained nature, I hoped to
expand the interactivity of boxing a little bit by giving it a small
mini-game in of itself. And also introduce ways to simulate the idea of
boxing a bit better.

The idea of being an Evil Boxer is funny. For every Rocky, there is a
[Insert Rocky Villain Here that isn't Creed]. But in this case, it's
probably some Syndicate douchebag looking to punch clowns into a coma
and inspire the mime to take up shadowboxing in revenge.

## Changelog
🆑
add: Replaces Fitness with Athletics; same skill, but now more
specifically applicable to boxing.
add: Athletics does not increase sprite size.
balance: Overhauls Boxing to add a lot more depth to the interactions.
Only applicable to other boxers, however. You can still punch the snot
out of non-boxers though. But only up to stamcrit or unconsciousness. No
hitting someone who can't fight back!
balance: Adds Evil Boxing, which is the evil and fucked up version of
boxing that you kill people with and are allowed to flout the sacred
rules of boxing as you please. Everyone is a victim!
/🆑
2024-04-22 16:43:58 +01:00
Rhials
3af37616c9 Water tiles now put out burning atoms (#82735)
## About The Pull Request

This adds a new "watery tile" element, currently used for (you guessed
it) water turfs.

This makes a tile extinguish any atom that passes through it. It also
makes mobs wet!

![fire
test](https://github.com/tgstation/tgstation/assets/28870487/4a19c921-37f3-428d-bb94-0baef7589e1b)

This required a minor amount of under-the-hood work regarding
firestacks. Essentially, they now get put out when the atom-level
`extinguish()` proc is called, as they are now receptive to the
`COMSIG_ATOM_EXTINGUISH` signal.

## Why It's Good For The Game

It makes sense to me! If I was playing another simulation game and dived
into a pool of water on fire, only to remain on fire, I would be very
confused and disturbed.

Also, it's good for immersion. Get it? Like, because water tiles also
have the immerse element?
## Changelog
🆑 Rhials
qol: Water tiles now extinguish fires on items and people.
/🆑
2024-04-18 19:53:57 -04:00
san7890
c403a6eccc Wraps lowertext() to ensure proper stringification. (#82442)
## About The Pull Request

Fixes #82440

This PR just creates a new macro, `LOWER_TEXT()` (yes the irony is not
lost on me) to wrap around all calls of `lowertext()` and ensure that
whatever we input into that proc will be stringified using the `"[]"`
(or `tostring()` for the nerds) operator. very simple.

I also added a linter to enforce this (and prevent all forms of
regression) because I think that machines should do the menial work and
we shouldn't expect maintainers to remember this, let me know if you
disagree. if there is a time when it should be opted out for some
reason, the linter does respect it if you wrap your input with the
`UNLINT()` function.
2024-04-10 12:19:43 -07:00
Jeremiah
9723b4b317 Replaces even more deciseconds with SECONDS (#82438)
## About The Pull Request
Using these search regexes:

Ending in 0:
`addtimer\((.*),\s?(\d{1,3})0\b\)`
replacement:
`addtimer($1, $2 SECONDS)`

Two digit ending in odd:
`addtimer\((.*), (\d)([1-9])\)$`
replacement:
`addtimer($1, $2.$3 SECONDS)`

Single digit ending odd:
`addtimer\((.*), ([1-9])\)$`
replacement:
`addtimer($1, 0.$2 SECONDS)`

## Why It's Good For The Game
Code readability

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-04-06 15:18:49 -06:00
MrMelbert
192800247f Small Social Anxiety Fixes (#82387)
## About The Pull Request

- Speech filters from speech impairments don't apply unless they
actually change the message
- Psicodine properly stops stutter

## Changelog

🆑 Melbert
fix: Psicodine helps Socially Anxious people again (as does signing) 
fix: Speech effects such as stuttering no longer applies its TTS filter
if the resulting message doesn't actually change the message
/🆑
2024-04-02 23:13:13 +02:00
MrMelbert
7685f0a2b4 Makes Social Anxiety stuttering a lot less harsh (#82313)
## About The Pull Request

Social Anxiety was doing a lot of jank things with stuttering so I
replaced it

I added a new subtype of stuttering specifically for it which scales a
lot better (IMO)


![image](https://github.com/tgstation/tgstation/assets/51863163/7f0ccc62-48eb-4e34-81d1-1131d3140979)

I haven't tested this with TTS but it should work the same as normal
stuttering now

Also this effect will stack with normal stuttering, which is either the
funniest thing ever or a complete disaster. You decide

## Why It's Good For The Game

I think some bugs arose from the way we (I) did social anxiety,
especially in the wake of TTS so I'm here to resolve them

Now it should be a lot less full tilt, since we no longer use the same
stuttering probabilities for "being hit by a bomb" as "one person is
standing next to me".

## Changelog

🆑 Melbert
qol: Socially Anxious people should be able to talk a bit more clearer
while still maintaining the stuttering "charm"
/🆑
2024-03-31 16:33:25 +02:00
necromanceranne
191b5b3df1 Eye of God Update: Loads of QoL, and makes it somewhat more useful to have permanently grafted to your face. (#82053)
## About The Pull Request

The eye of god now protects from the madness inducing effects of
supermatter crystals and singularities. This trait is shared by the
meson night vision goggles (which this is a better version of)

The Scan ability has been refactored into a pointed spell.

The Scan ability has a lower cooldown of 35 seconds.

Scan now gives an advanced health scan readout of the target.

Scanning someone alerts the target as to who is responsible, rather than
being completely silent as to the culprit (much to the annoyance of
anyone who is victimized by someone using this on them)

The status effect that was called Stagger (not Staggered, which is
separate) is now called Rebuked.

Rebuked applies a x2 action delay cooldown, rather than x1.5.

## Why It's Good For The Game

The eye of god is generally viewed as not particularly useful. Sure, it
is a night vision meson without the flash vulnerability, which is nice.
But it wasn't seen as a terribly exciting tendril drop. The scan power
is so underwhelming, most people do not actually know what the effects
of it are. It largely is only useful for fighting megafauna, since the
stagger effect typically matters more for their cooldowns than other
monster cooldowns. And even then, not by much. The action cooldown
effect on anything else isn't often understood or felt by both victim or
user.

So, the vast majority of the time, miners use it to troll people by, and
I am quoting one player who was witness to me doing so to a particularly
annoying Head of Security, 'pissing on them' by making them glow yellow.
Someone else described it as a 'miner's jarate'. You get the idea.

I changed the highlight color to red to avoid this crude comparison. And
also, I've made it more obviously an attack when someone uses it on you
AND you now know who used it to begin with. And on top of all this, I've
given the eye of god both useful utility and a bit of a power boost to
encourage miners to actually stick the fucking thing into their skull. I
think miners will appreciate health scanning bosses in particular,
something you normally can't do in the middle of a fight with one.

## Changelog
🆑
qol: The eye of god now protects from the madness inducing effects of
supermatter crystals and singularities. This trait is shared by the
meson night vision goggles (which this is a better version of)
refactor: The Scan ability has been refactored into a pointed spell.
balance: The Scan ability has a lower cooldown of 35 seconds.
balance: The Scan ability now gives an advanced health scan readout of
the target.
balance: Scanning someone alerts the target as to who is responsible,
rather than being completely silent as to the culprit (much to the
annoyance of anyone who is victimized by someone using this on them)
code: The status effect that was called Stagger (not Staggered, which is
separate) is now called Rebuked.
balance: Rebuked applies a x2 action delay cooldown, rather than x1.5.
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2024-03-31 13:18:06 +00:00
Profakos
53daa4e6b7 [No GBP] Fixes slow slime feed (#82284)
## About The Pull Request

Slimes were supposed to gain the same amount of nutrition as the damage
they dealt while feeding. However, I have accidentally multiplied this
again by `seconds_between_ticks` a second time. This meant that locally
slimes fed normally, but on the server they got about the third
nutrition they were supposed to, probably due to having more ticks per
second then my machine. This PR fixes that.

Also raised the nutrition gained by slimes by 20%, after careful
testing, one monkey wasn't always enough.

## Why It's Good For The Game

 Fixes #82283

## Changelog

🆑
fix: Slimes now feed faster, and should only need one monkey to reach
their next lifestage.
/🆑
2024-03-29 12:40:43 -06:00
Profakos
b20c982404 Converts slimes to basic mobs (#82176)
## About The Pull Request

After months of preparation, and further months of work, I am finally
done. Please bear with me, as this is a massive refactor, but I have
already atomized everything I could. This is now ready for review.

General

- 	The hilbert hotel slimes are now a subtype instead of a varedit.
- The `use_mob_ability` subtree now also accepts non cooldown abilities.
If set_behaviours is set up properly, mobs won't keep continously
triggering it as if it were a 0 second cooldown action. The alternative
would have been turning the slime abilities into cooldown abilities.
- Wrestling off a slime now signs up to the `COMSIG_ATOM_ATTACK_HAND`
signal, instead of being part of attack_hand.
- Adds datum/ai_controller/controller as a fourth, optional argument to
`/datum/ai_behavior/find_hunt_target/valid_dinner()` to make it possible
to access blackboard keys.
- Slimes no longer attack windows if they would accidentally move into
them (when the conditions are met), since random walk behaviour ignores
tiles they can't go in. It was also not worth to keep. Did you know this
was the sole override of `ObjBump()`?
- Examine was made less snowflaky/bespoke. Also added a new element:
`/datum/element/basic_health_examine`, which is a simple bespoke element
that prints out a custom message based on how damaged the basic mob it
is attached to is.
- Slimes only perform knockdown instead of paralysis, as they can attack
more often now, and paralysis is not that fun.
- LAssailant has been removed due being archaic code. To befriend a
slime, you have to spawn a monkey with the slime console, or feed them a
sheet of plasma. Simple grabbing the monkey or stuffing them in
disposals do not work anymore. Slime console spawned monkeys will have a
visible status effect, with pheromones coming off them to make this
clearer.

Actions
- 	Feeding, reproduction and evolution is no longer a verb.
- Slime feeding is no longer an action button. You have to use right
click, or as previously, mousedrop. Slimes can always unbuckle from mobs
they are attached to.

Hunger 

- Instead randomly changing the starvation and max nutrition values
while growing up, evolution costs 200 nutrion. This makes the code more
readable, and behaviour more predictable, while still giving the
intended time between evolving and splitting. As a result, I could also
turn these into defines.
- Added a component that handles doing an effect over time while buckled
to a mob, until the mob dies or you get unbuckled.
- Slimes gained nutrition is no longer randomly multiplied by the damage
config value, but rather gain nutrition equal to twice the damage dealt.
You'll have to eat one monkey to evolve, just as before.
- Slimes do not heal passively. They only heal from eating. It was a
rather miniscule value that did not have much effect.
- Slimes generate electricity from hunger threshold, instead of the
random amount of hunger threshold + 100.

Environment

- Slimes take 15 damage from cold every second, instead of using a
complex formula (that also decreased the damage up to a point?).
- Slimes still heal from burn damage, but this is now set on the damage
coefficient list.
- Slimes instead of getting stunned by the cold, freeze in an ice cube.
BZ instead of setting them unconscious, calls the stasis status effect,
allowing you to safely stash your hungry slimes for later. They also no
longer slow down from the cold, as they are already slowed down by the
damage they get. Conversely they no longer get a speed up from a random
amount of temperature. I could be convinced to readd this either as part
of the basic sensitive component, or a similar one.

AI
- Removed the attacked_stacks system. Slimes will just perform regular
retaliation if you hit them in a harmful manner.
- Slimes now use the pet orders component. They will interrupt their
feeding when given a command by their master.
- Slimes have their own subtrees. I tried to replicate as much as I
could from the old code, dividing ancient code artifacts and intentional
stuff, so there might be some weirdness.
- Slime speech has been almost fully reduced to basic blorbing, as you
can not even understand them anymore, and most of them require the slime
to loop through all of their surroundings.
- Discipline does not have stacks either. Disciplined baby slimes have a
chance to clear their attack and hunt blackboard keys. All slimes will
stop feeding on the target otherwise.
- Since discipline is not a stack, rabidity instead gets removed at a
10% chance per disciplining.
- 	Slimes faces are a bit more randomly picked now.

## Why It's Good For The Game

- We want to convert all simple animals to basic mobs. Old slime code
was also very strange, and had some systems that have been replicated by
components.
- Slimes fully paralyzing you is not fun at all. Knockdown should give
you a fighting chance when a slime would like to eat you.
- Slimes slow down from the heavy damage they get from the cold, so I
don't think they need extra slowdown, nor do they need to speed up from
warmth, as they are already fast.
- Slimes turning into an icecube instead of becoming paralyzed from the
cold is more fun for the slimes, as they can break out for a few
moments. It is also funny.
- Slimes entering proper stasis from BZ is not just a visual indicator
of a slime that is safe to approach, but also keeps the slimes's hunger
value in check, allowing it to not starve while stopped. They can also
look around and blorble, instead of staring at a black screen, if player
controlled.
- The attack_stack and discipline_stack behaviours were rather
overcomplicated, and the xenobio mains I talked with didn't even know it
was a thing, so I argue it needed simplification.
- The bespoke friendship system of slimes was also too complicated.
Slimes slowly gained levels of trust, and at certain levels commands
costed friendship, and other levels, they did not. The binary friend/not
friend system that everything else in the game uses is much more
sensible.
- Using right click for feeding is much more sensible than using an
action, and then picking someone from a dropdown.
- Slime speech was very soulful but not only did it loop through
everything in sight, you couldn't even understand it unless you spoke
slime. Maybe it can be readded later in a different form.
- Slime's passive healing was miniscule, and having them rely on feeding
is more interesting.

also
fixes #81463

## Changelog

🆑
refactor: Slimes are now basic mobs. Please report any strange
behaviours!
balance: Slimes only stun you for two seconds when they shock you, the
rest of the duration is a knockdown.
balance: Slimes are not stunned from the cold, but rather, get frozen in
a freon icecube. BZ also puts them in complete stasis, instead of making
them unconscious. Their speed is likewise unchanged by temperatures.
balance: Slimes do not passively heal, they instead rely on feeding.
fix: Slimes can use the buckling screen alert to unbuckle and stop
feeding, along with clicking on the mob they are riding
/🆑
2024-03-27 16:40:52 -06:00
MrMelbert
21d72c49c0 Blocks (most instances of) screen elements from entering base atom /Click (#82236)
## About The Pull Request

Fixes #76495

This PR prevents (most) screen elements from running base
`/atom/proc/Click` and `/mob/proc/ClickOn()` when clickend.

(The only exception I found to it was the cursor catcher for scopes.) 

Why?
Most, if not everything in `ClickOn` is considered "in world"
interacting. It abides by `incapacitated`, runs `faceAtom`, etc.
This means, currently, you can "interact" with screen elements using in
world elements. For example, TK-ing / pointing a gun at your mood face.

Right now this affects very little, but there is a large potential for
errors. All you have to do is forget a sanity check in `afterattack` and
suddenly you have an item that can affect your screen objects.
The only example I found was the `/item/godstaff`, which can color some
of your screen elements. But there may be more. Like guns.

Note: 
Many, many screen elements ALREADY do not fall down into atom click.
They simply don't call parent. Which is totally fine.
I am just ensuring ALL* screen elements do not fall down into atom
click.

## Changelog

🆑 Melbert
fix: Blocks mobs from trying to "physically" interact with some of their
hud elements, such as using Telekinesis or point a gun at your mood
meter.
/🆑
2024-03-26 14:55:20 -06:00
MrMelbert
a8fc9cf7e2 Makes Bioware into Status Effects because they're just Status Effects but their own datum (#81989)
- Refactors `/datum/bioware` -> `/datum/status_effect/bioware`. 
- Literally everything bioware datum does is done by the status effect
API, including handing dupes / unique keys
- Tallies all blackbox surgeries done rather than just nerve splicing
2024-03-23 21:01:28 +00:00
Ghom
ca537ce829 Ice cream now gives a chilling food effect (plus small food haste buff) (#81719)
## About The Pull Request
We have a `crafted_food_buff` in the code meant for specific food buffs
(and perhaps one day, debuffs) that has gone unused ever since it was
created during the 'Foodening' PR.

Anyway, yeah, this PR takes the fire step to implement it with ice cream
and other frozen treats.

Frozen treats (all food found in the `food/frozen.dm` file) have it by
default. Other ice cream holders such as waffles cones (and now regular
waffles too!) can aquire it when filled with ice cream. Using the ice
cream vat also adds the 'Chef Made' trait now, which is required for
food effects to happen.

Also very slight food effect refactor. There's no need to have five
different alert screen objects when only have to switch icon states.

This PR also adds an action speed modifier to the generic 'haste' food
effect. I'm confident the original creator would have done that too, but
action speed modifiers aren't as well-known.

## Why It's Good For The Game
People tend to make one feature, call it a day and then move on to the
next. Food effects are nice, however they're barely implemented, and I
don't like food being all the same-ish in the end.

## Changelog

🆑
add: Ice cream and frozen treats now have a chilling effect.
add: You can add a scoop of ice cream on waffles.
balance: added an action speed modifier to the generic food haste effect
(you do things, and not just run, an itsy bitsy faster)
/🆑
2024-03-16 12:02:06 +00:00
John Willard
405d369694 Crushers and PKAs: Coop Upgrades (#81940)
## About The Pull Request

This PR makes 2 changes, one to the crusher and one to the PKA

Crushers: Their projectile no longer overrides eachother, so a mob can
have the blue bubble from several crushers. Triggering it will only
trigger the one that you own, so each player has to go hit the mob to
strike.

PKA: Fixed the minebot passthrough upgrade, and also adds a human
passthrough upgrade. They are incompatible with eachother, so you choose
between solo+minebot or coop, which is a compromise I thought as a
better alternative to taking mod space (the minebot passthrough
currently takes none). This upgrade is available solely at the mining
vendor, for 750 points.

## Why It's Good For The Game

The new mining has been great, and one thing I love is that it
encourages more coop play. Excavating boulders with other miners is much
more engaging and has good teamwork in it, and also is a good way to
encourage miners to stick together more and even fight megafauna in
pairs.
This hopes to make that easier to do, because currently having anyone
with a crusher is sort of a detriment to the whole team. Either the PKA
dude will accidentally shoot the crusher user while they're going in for
a melee kill, or 2 crusher users will be constantly erasing the mark of
the other. This will hopefully make that aspect better, and make mining
with friends a little better.

## Changelog

🆑
balance: Crusher marks no longer overwrite eachother, fauna can have one
from each crusher.
balance: Ash drake's crusher trophy no longer affects people the same
faction as you (like hiero trophy), so you won't friendly fire people
with it.
add: Added a new upgrade: Human Passthrough. You can shoot your PKA
without having to worry about friendly fire with this, for 750 mining
points at your mining vendor.
fix: Minebot passthrough upgrade now properly makes PKAs pass through
minebots.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-03-14 00:41:56 +00:00
san7890
00525f97f4 Basic Mobs Can Now Get Wet (and can therefore clear the slimed status effect) (#81927)
## About The Pull Request

A year ago in #73601 (b7da743e7d), we made
it such that we wouldn't apply the `/datum/status_effect/fire_handler`
to any basic mob that wasn't a "flammable" mob. However, guess what? The
way we handle "wet stacks" is handled by a subtype,
`/datum/status_effect/fire_handler/wet_stacks`. This means that any mob
that wasn't flammable wouldn't also get wet, meaning that they would
literally _never_ get the `slimed` status effect off them (since that is
reliant on wet stacks).

In order to rectify this, let's actually account for the case in the
code to ensure that mobs that should get wet do get wet (I made it an
opt-out flag because I can't think of a single mob that can't get wet
and didn't want to balloon the diff trying to think of every mob that
should be able to get wet, etc.), and now it's all fixed hunky-dory.
## Why It's Good For The Game

Fixes #81888

Basic mobs should be able to get wet. It's an oversight with how the
wet_stack handler is tacked onto the backend of the fire_handler
latticework- ideally these two would be two separate systems (or it
would at least not be named `fire_handler` so people don't make this
confusion in the future without realizing that it handles more than
just... `fire`) but I don't have time to do a full cleansing and
refactor of this code.
## Changelog
🆑
fix: All basic mobs are able to get wet. This means, among other things,
that you can clear the "slimed" status effect off your holoparasite or
dog or whatever.
/🆑
2024-03-12 18:49:03 +00:00
LemonInTheDark
ef714c1c34 Overlay Lighting Color/Intensity Pass (#81425)
## About The Pull Request

I was looking at screenshots of the game and realized we had a lot of
light sources that were really... flat.

Medium intensity, not colored at all, cringe.

So I went over all the uses of overlay styled lighting (since I've done
matrix lighting already) and gave them more unique features. Colors that
match the sprite they're used with, intensity to produce vibes, that
sort of thing.

It's kinda impossible to go one by one cause there's a LOT.

I may have gone a bit overboard with a few, I'm messing around with some
things like giving bots colors based off their department, etc. We'll
see how this all turns out.

Oh also I tweaked how the cone of overlay lighting is drawn. It seemed a
bit too present to me so I dropped the alpha down from like 200 to 120
at max (so it's roughly half of the mask's alpha so it's less
overwhelming

## Why It's Good For The Game

Lighting should be impactful, subtle and colorful

<details>
<summary>
Old Lights
</summary>


![dreamseeker_QJ5bFZxd63](https://github.com/tgstation/tgstation/assets/58055496/8ae74a95-32cb-473f-830a-ab4e1073a581)

![dreamseeker_DPVgI8wOoN](https://github.com/tgstation/tgstation/assets/58055496/149095af-a08a-4038-bf18-9e3401327452)

![dreamseeker_pyEmTAb37x](https://github.com/tgstation/tgstation/assets/58055496/6dbb6cf8-2ed7-4bc0-9d19-c64849088a33)

![dreamseeker_aDfvnea6YD](https://github.com/tgstation/tgstation/assets/58055496/4ed983e1-6be3-4513-ba3b-cecde08ccd38)

![dreamseeker_RnkQSwmxmc](https://github.com/tgstation/tgstation/assets/58055496/63e0210e-e1b1-42f0-be64-53d67c43f689)

![dreamseeker_G8NSC3lzAk](https://github.com/tgstation/tgstation/assets/58055496/93001925-904d-4061-8874-1d17bb225a90)

![dreamseeker_yASfxtbHDR](https://github.com/tgstation/tgstation/assets/58055496/ce0ae9ad-9067-44e0-9491-3ef331bbbb84)

![dreamseeker_4ecBbG5urI](https://github.com/tgstation/tgstation/assets/58055496/ce82f471-15c7-40ce-bc08-be4f5dc8a3b7)

![dreamseeker_udYlv8uAce](https://github.com/tgstation/tgstation/assets/58055496/c516a278-852b-44b8-ba7c-1203cea3f845)

![dreamseeker_bc2120Fnmr](https://github.com/tgstation/tgstation/assets/58055496/87a1429a-2329-4dd5-8c7b-ff44f54a08bb)

</details>

<details>
<summary>
New Lights
</summary>


![dreamseeker_0H11TyhGgx](https://github.com/tgstation/tgstation/assets/58055496/75b68a25-055e-488c-af82-b062dbe7413e)

![dreamseeker_2B9AENHsfl](https://github.com/tgstation/tgstation/assets/58055496/b52d441c-6ed3-495b-9ebd-9b0c9f924f30)

![dreamseeker_3vOVRRMTSP](https://github.com/tgstation/tgstation/assets/58055496/b265578f-34cc-4a0a-80ea-3237fb83df33)

![dreamseeker_5bTLup65rx](https://github.com/tgstation/tgstation/assets/58055496/6fcd3dc0-5927-458a-9f77-5582ad57a954)

![dreamseeker_iZzxZv4nfW](https://github.com/tgstation/tgstation/assets/58055496/67c3af13-2305-4130-936b-19ded08ccc4e)

![dreamseeker_Lhe9TSA0Av](https://github.com/tgstation/tgstation/assets/58055496/a5310e58-0ff1-45ac-bb81-b4a0212eb0ce)

![dreamseeker_ngQJUv0tV4](https://github.com/tgstation/tgstation/assets/58055496/c3d7423a-ab32-4401-9ffa-c4c3b7811334)

![dreamseeker_PL0z6sU7by](https://github.com/tgstation/tgstation/assets/58055496/2947d828-3aee-48c2-903f-2bf0db9077d2)

![dreamseeker_xineFZDzPA](https://github.com/tgstation/tgstation/assets/58055496/095ff8b0-51cf-4f7c-a2ee-752d9d7e87bd)

![dreamseeker_zpXxbZZakS](https://github.com/tgstation/tgstation/assets/58055496/c4200d35-a2fa-4c3f-8e88-1fd87f44cd46)

</details>

## Changelog
🆑
add: Tweaked the saturation, color and intensity of a bunch of lights
/🆑
2024-03-09 23:57:19 +00:00
MrMelbert
c85f84245d Fix love not working right before Valentines day (VERY HIGHI priority) (#81440)
## About The Pull Request

The parent new call is what handles showing the alt appearance to the
mob

So we add the alt appearance to our date, try to show to any mob, it
fails (there is no seer), then set seer

Fixes this by fixing the order

## Changelog

🆑 Melbert
fix: You can once again see love on Valentines Day
/🆑
2024-02-12 22:29:50 +01:00
Nick
815c7913d7 Adds fire ants as a chem (#81214)
## About The Pull Request
Adds fire ants as a chem. They work pretty much exactly the same as
normal ants, but they deal roughly 2x damage. Also mildly cleans up
whatever ant code I touched
## Why It's Good For The Game
Doesn't really make sense that when you scoop up an anthill of fire
ants, you get a beaker full of normal ants. It's honestly an injustice.
Also, new flavours for the bartender and chef to work with are always
nice.
## Changelog
🆑
add: Fire ants can now be scooped up and used as a chem like normal
space ants
/🆑

---------

Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
2024-02-11 00:34:48 +01:00
MrMelbert
d9243d1016 Refactors fire overlays once again to make it not get stuck so often (#81367)
## About The Pull Request

Maybe finally fixes #77701 

A big reason why this kept happening is because fire uses standing
overlays. But fire isn't managed by mobs anymore. Meaning in some
situations, fire can cease to exist but the overlay can still be on the
mob. So it gets stuck.

So like, why use standing overlays anymore? We can just hook
`update_overlays` signal.
Isn't that neat. 

## Changelog

🆑 Melbert
refactor: Fire effects get added to mobs in a different way now. Maybe
it will get stuck less. Report any oddities.
/🆑
2024-02-09 17:26:00 -07:00
Ghom
aa9caef0ed Fishing hook and reel line tweaks (also qol for the fish bounties) (#80599)
## About The Pull Request
This PR includes a series of small changes and additions to hooks and
reel lines, as well as the aforementioned bounties. My objective here is
to make the (base) hook and reel line feel more useful. Ditto with a few
other things.

Here's the list of changes:
- Almost all fishing rods come with a hook and reel line pre-installed.
The rod from the fishing toolbox comes with separate hook and reel line.
- Without a hook, you cannot fish. Without a reel line, the cast range
is reduced (from 5 to 3).
- Fishing with a reel line installed provides a mild boon to completion
speed by default.
- The sinewy reel line (craftable from lavaland mobs) can now be used to
fish on lava / liquid plasma, but it's a bit stiff and gives a mild
malus to completion speed.
- Unlike other hooks, the rescue and jawed hooks now allow you to cast a
line and reel in living mobs too, not only items. They even get a status
alert they can click to un-snag themselves, or move away far enough to
achieve the same effect.
- Master fishing rod buffed. It now comes with a flexible reel line and
weighted hook pre-installed, and can be cast further than other rods.
- On top of that, the jawed hook will slow down living mobs snagged by
it and is a bit harder to remove.
- when casting a line, it will now show the icon of the current hook as
projectile, not a generic one.
- Reeling now correctly checks movement resistance and anchorage.
- Reeling an object (or a mob) now plays a sound. Ditto for
installing/removing slotted items.
- A few balloon alert feedbacks.
- Minor code improvements.
- The jawed hook should look a smidge sharper.
- reel lines are now small items.

## Why It's Good For The Game
The base hook and reel line didn't do anything begin with, and you would
do just fine without them. In the end it's just a bit unintuitive for
them not to be a requirement.

Beside that, it makes sense for the rescue hook to be able to snag mobs,
so they may as well be used to drag people out of lava or liquid plasma.
As for the jawed hook, it always felt to me a bit underwhelming and a
bit of a filler I had cooked up on the moment. It really could have some
'tactical' utility in virtue of being one of those niche black market
items.

## Changelog

🆑
add: Most fishing rods come with a hook and line preinstalled. Fishing
toolboxes come with separate reel and lines as usual.
balance: Fishing hooks are now required to fish.
balance: Without a reel line, the range of fishing rods is reduced by
two tiles. Conversely, having one installed gives a mild buff to the
minigame completion speed.
balance: The craftable sinewy reel line can now be used to fish on lava
or liquid plasma, but it's a bit harder to use.
balance: The rare-to-find-in-maintenance master fishing rod now comes
with a flexible line and weighted hook preinstalled, and has better
range than other rods.
balance: Fishing reel lines are now small enough to fit pockets.
add: The rescue and jawed hook can now snag and reel in mobs, not only
items. The jawed hook also slows down when applied, a la beartrap.
qol: Fish bounties now accept filled (stasis) fish cases.
qol: Several balloon alerts for fishing rod interactions.
fix: Reeling in items (and mobs) now respects movement resistance and
anchorage.
fix: Fixed the fishing rod equipment UI being too small to fit its
components.
sound: Reeling in something now plays a sound.
/🆑
2024-01-17 04:37:52 -05:00
Ghom
68677dc721 Disarm refactor, plus shoving people with shields (#80123)
## About The Pull Request
I wanted to add the ability to shove people with shields by
right-clicking your target, just like how it works barehanded.

This also required a solid refactor of disarm code, effectively bringing
down the core of it to `mob/living` from `mob/living/carbon` or
`mob/living/carbon/human`. This also means you can shove simple mobs
inside closets, bins and on tables.

Xenos and borgs are pretty much immune to regular disarms, but using a
shield will work (borgs and royal xenos are immune to the knockdown).

The riot shield armor has been balanced. It now tanks melee attacks
pretty well, but will break against bullets in just about 2 to 4 hits
depending on the bullet damage. I've always found the lack of sturdiness
of the riot shields for what they're supposed to be good for a bit
detrimental.

Because I've refactored an item flag into a trait, I've had to add a new
MOD module that grants protection from shove knockdown and staggering;
found pre-installed in the administrative MODsuit, but I've also added
it to the black market to make it cooler.

You can bash people with the strobe shield on combat mode.

## Why It's Good For The Game
Currently, shields are simply items that take a held slot in return of
some block chance without being anything special, save for the strobe
shield's integrated flash I guess, but are also a botherance as most
crumple under the duress of less than half a dozen attacks. Meanwhile
swords and other weapons with blok chance just don't care.
TL;DR, I want them a bit more remarkable, and flexible as a tool.

Of course, this ended up in a larger refactor because the right-click /
disarm code was inconsistent.

## Changelog

🆑
add: Shields (and pillows) can be used to shove people around the same
way barehanded right-clicking does. Xenos and borgs can actually be
moved this way.
add: Added a new MODsuit module, the bulwark module, which prevents
knockdown and staggering from shoving, and getting pushed away by thrown
objects. Inbuilt for the safeguard MODsuit, but one might also it in the
black market.
refactor: Disarming has been refactored. You can now shove simple
critters onto tables and into bins and closets
balance: Shields now take their own armor values and the armor
penetration of the attack they blocked when damaged. This means shields
are a bit sturdier now.
balance: Riot shields can tank a lot more damage against melee weapons,
but less against bullets.
qol: strobe shields can now be used to bash people while combat mode is
on.
/🆑
2024-01-16 19:35:56 -06:00
MrMelbert
00c4a882e4 Fake Virus doesn't affect virus immune mobs (#80447)
## About The Pull Request

Fake Virus random event won't pick Virus Immune mobs. 

Plus some code cleanup.

## Why It's Good For The Game

Feeling a virus when you can't feel a virus makes it pretty obvious
what's going on.

## Changelog

🆑 Melbert
fix: Crewmembers immune to viruses won't be picked by the fake virus
event.
/🆑
2023-12-21 11:13:48 -05:00
Tim
536381d308 Fitness rebalance and improvements - mood, fireman carry, and longer workouts (#79584)
## About The Pull Request
So after getting feedback on fitness I've decided to make some balance
changes:

- ~~Every level of fitness now increases max hp. At max legendary
fitness, all the hp bonuses combined results in a total of +25 max hp~~
- Fitness now decreases the time it takes to firemany carry by 0.33
seconds per level. (At max fitness, this means a decrease of 2 seconds)
- Exercise status effect triggers the exercise mood event and goes away
when the exercise status effect is gone
- The better your fitness level, the more happiness you gain from the
mood event
- Decreased the fitness timers and effects by half and tweaked a few
other values
- Increased the nutrition cost of working out
- Removed doubles metabolism exercise effect

I'd also like this test merged to see if anymore minor tweaks need to be
made.

## Why It's Good For The Game
Fitness effects on gameplay were pretty underwhelming. This was
deliberate since there is a concern about prisoners being able to abuse
it in quite a lot of scenarios. ~~Adding a small boost to max hp is nice
given that the downside is a bigger target.~~

Another problem was that the double metabolism rate resulted in a lot of
the diet effects being metabolised before you could convert them into
exercise gains. So this was removed.

People would also hit their bench max rather quickly and then spend a
long duration sleeping. Ideally I wanted people to spend more time
working out than sleeping, so I halved the duration values so it takes
them longer to achieve maxxing out.

## Changelog
🆑
balance: Fitness level decreases the time it takes to firemany carry
someone. Fitness level determines how much of a positive mood the
workout grants. Working out is now more difficult and requires more
nutrition.
balance: Exercise no longer triggers double metabolism.  
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-12-14 02:21:27 +00:00
Time-Green
54ab1e3936 Organ movement refactor *Un-nullspaces your organs* (#79687)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

closes #53931, #70916, #53931

## About The Pull Request

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

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

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

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

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


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

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

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

## Why It's Good For The Game

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

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

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

## Changelog

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

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

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2023-12-09 17:50:46 +00:00
YesterdaysPromise
71a1fee2f1 Explodes device.dmi (#80025)
## About The Pull Request

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


## Why It's Good For The Game

The device.dmi was kind of a mess.

## Changelog

🆑
/🆑
2023-12-09 13:31:50 +01:00
MrMelbert
1e76fd70b4 Attack chain refactoring: Broadening tool_act into item_interact, moving some item interactions to... atom/item_interact / item/interact_with_atom (#79968)
## About The Pull Request

Implements half of this (with some minor changes): 


![image](https://github.com/tgstation/tgstation/assets/51863163/bf5cc4bb-5a1f-42e3-921d-9a57bc6096cc)

The ultimate goal of this is to split our attack chain in two: 
- One for non-combat item interactions
  - Health analyzer scanning
  - using tools on stuff
  - surgery
  - Niche other interactions
- One for combat attacking
  - Item hit thing, item deal damage. 
  - Special effects on attack would go here.  

This PR begins this by broadining tool act into item interact. 

Item interact is a catch-all proc ran at the beginning of attack chain,
before `pre_attack` and such, that handles the first part of the chain.

This allows us to easily catch item interaction and cancel the attack
part of the chain by using deliberate bitflag return values, rather than
`TRUE` / `FALSE`*.

*Because right now, `TRUE` = `cancel attack`, no matter what, which is
unclear to people.

Instead of moving as much as possible to the new proc in this PR, I
started by doing some easy, obvious things. More things can be moved in
the future, or technically they don't even need to move in a lot of
cases.

## Changelog

🆑 Melbert
refactor: Refactored some methods of items interacting with other
objects or mobs, such as surgery and health analzyers. Report if
anything seems wrong
/🆑
2023-12-08 23:50:19 -07:00
Higgin
ca2b8db3e6 Fixes? / Removes stagger shoving animation on corpses. (#79985)
## About The Pull Request

Appears to have been intended, but I'm guessing its scale and time were
not.

## Why It's Good For The Game

Shoving dead bodies was causing them to spasm for longer than described
and frankly made it obnoxious both judging whether or not you were
dealing with a dead body and clicking on them after doing it (which
should probably be redundant with a dead body.)

## Changelog

🆑
del: Stagger animation no longer fires longer than it should on dead
bodies or on dead bodies period.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-12-06 03:57:45 +00:00
distributivgesetz
274eb2a52e Removes Clone Damage (#80109)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

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

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

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

## Why It's Good For The Game

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

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

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

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

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

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

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

## Changelog

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

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

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2023-12-04 14:42:43 -08:00
tralezab
5a905d8680 Festival Sect Expansion: New Tunes, New Rites, Cogitandi Fidis (#80032)
## About The Pull Request

### Cogitandi Fidis

Creates a holy violin that gives an analysis of songs played on it. This
lets you check how long the song is for final effects, to make sure they
trigger without the hassle of trying a rite with a song until you get
one that works. 20 Favor, looks neat too!

### Portable Song Tuning

Rite to empower an instrument with the ability to invoke specifically
song tuning rites, 5 charges before you need to go back to a proper
altar. Helps a chaplain stay on the move, since songs are interruptable
and sometimes an altar can be incredibly far. 10 Favor for 5 charges.

### Illuminating Solo


![image](https://github.com/tgstation/tgstation/assets/40974010/9dddc60a-92e3-4e42-bf7b-423e9ac25c7c)

New free invocation that lets you light up the way with your music! The
finishing effect applies a weaker glow to all listeners for a minute.

### Other Misc Changes

The threshold for getting a final effect on a song is now lower, 220 ->
170. As a reminder, this threshold is lines * tempo. I think the
threshold was simply too high

## Why It's Good For The Game

Changes were made from
https://tgstation13.org/phpBB/viewtopic.php?f=10&t=35381 statistics and
feedback about sects. I think, overall, Festival Sect is in a very good
place and doesn't need a whole lot but a few rites that help with a
quality of life would really cut down on the amount of time a chappy is
spending doing nothing but running allllll the way back to the chapel to
load up some new songs

## Changelog
🆑
add: Festival Sect has 3 new rites: Cogitandi Fidis, Portable Song
Tuning, and Illuminating Solo.
balance: lowers threshold for triggering a final effect. Consult your
Cogitandi Fidis for more information
/🆑
2023-12-03 04:48:19 +01:00
distributivgesetz
f8b41f9442 Changes occurrences of recieve in code to receive (#80065)
## About The Pull Request

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

I find it pretty annoying because I stumble across words that are
misspelled for a few seconds, and I'm likely not the only one who feels
like this. Less spelling mistakes in code are better.
## Changelog
🆑
spellcheck: Occurrences of "recieve" has been changed to "receive".
/🆑
2023-12-02 14:50:57 -07:00
Verm
16d274e7c3 Fix typo in spacer negative moodlet (#80036)
## About The Pull Request

Fixes a typo in one of the spacer quirk's negative moodlets.
## Why It's Good For The Game

Typos aren't good.
## Changelog
🆑
spellcheck: fixed typo in one of spacer's moodlets
/🆑
2023-12-01 00:40:40 +01:00
MGOOOOOO
c00f7d53a3 The Inversenning : Superior Healing Medications (#79342)
Introducing new inverse reagents for existing superior healing
medications! This push includes...

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

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

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

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

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

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

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

This is an effort to add more variety to the existing inverse reagent
system within chemistry. Not only should this variety serve to provide
additional options for a Chemist to experiment with, they should also
broaden the possibilities for already existing strategies.
2023-11-28 14:53:09 +00:00
necromanceranne
ef52047274 [READY] The Tackleling: Unarmed bonuses and features contribute to tackle success and failure, significant outcome overhaul, among other things (#79721)
## About The Pull Request

### Tackling Outcomes

Tackling now determines success based on outcome categories. These are
derived from the typical attacker/defender roll that would have
previously determined the outcome on its own. A negative roll results in
a negative outcome, a positive roll a positive outcome, and a result of
exactly 0 resulting in a neutral outcome.

The result of your roll are then passed along to the relevant proc to
determine severity. The derived roll is multiplied by 10 (or -10 for the
negative roll to get a positive value to roll with). Then we see if our
final roll fits a severity bracket. Negative outcomes will roll to
determine their outcome, and potentially could roll a less severe
outcome than what our first roll would suggest.

For positive outcomes, the defender's melee armor reduces the severity
of the outcome.
For negative outcomes, the attacker's melee armor improves the potential
outcome and at least prevents more severe backlash. It'll still be
negative, you can't move from a negative outcome to a positive outcome
just from good armor.

Most of the outcomes are fairly similar to the current outcomes, but
with the inclusion of staggering one or both parties to make the
subsequent potential grabs _stickier_, if that makes sense.

Neutral is now a mutual stagger, but also the tackler being left
upright. It's effectively net zero.

### Blocking

Blocking is checked on impact, and results in a neutral outcome if the
defender successfully blocks. This means our tackler isn't too severely
impacted from an unsuccessful tackle

### Additional Changes

Your arms ``unarmed_effectiveness`` now contributes to the attack mod
and defense mod of tackles. For humans tackling humans, this often
results in a net neutral result. But if you have a better arm, or the
tackle target has worse arms, this can alter the outcome significantly.

Any tackler with the trait TRAIT_NOGUNS (like bezerkers, Sleeping Carp
users or the very unlikely chance ninjas are tackling while wearing
their armor) gains a bonus to their tackles.

Any suit that prevents shove knockdowns grants an attack bonus, and not
just riot armor. This now includes Mk.1 Swat suits, the ones from the
SWAT crate in cargo.

Settlers are vulnerable to tackles, much like their dwarf cousins.
They're also just as bad at tackles.

Security lockers come with gripper gloves, and the sec vendor has 5 sets
of gripper gloves as standard items. They also have a +1 skill bonus.
This should encourage people to use tackling a bit more without having
to always seek out the best gear to accomplish the task. (particularly
since security is inherently pretty good at tackling with the outcome
changes).

The HoS gets a pair of gorilla gloves in his garment bag. If he wants
them.

The shove slowdown is now a new status effect, Staggered. This is just
better functionality overall. Any instance of adding the shove slowdown
now makes our target staggered.

## Why It's Good For The Game

Tackling is a bit outdated, to say the least. Not much content has been
added for a while that isn't strictly meme content. With these changes,
tackling should be slightly more nuanced, considering elements such as
unarmed effectiveness, the presence of martial arts, and actually
properly checking block rather than notionally checking block. There is
also more opportunity to protect yourself from tackle outcomes, both
positive and negative.

It also should be a little fairer to be on the receiving end of tackles
if you have taken the time to layer up defenses against it. Attackers
often overwhelmed defenders due to numbers favoring attackers more than
defenders.

Closes some really outdated design that was resulting in some really
bizarre behaviour with regards to layered defenses against attack not
having the same meaning against tackles, if only because it was looking
for the wrong things and not even the correct parts of what it was
looking for. Namely, blocking and shielding.

The inclusion of more gripper gloves and a good outcome from using them
will hopefully incentivize people to consider tacking as a useful tool,
if a bit risky still due to the splat mechanics.

## Changelog
🆑
balance: Judo Joe, archnemesis of Maint Khan, has begun re-airing his
midnight infomercials shilling his extremely expensive Tackle Supreme
Judo Karate Training video tapes. Unable to pass up a 'bargain',
Nanotrasen has purchased these tapes en masse. Tackling techniques have
started to improve, as well as Nanotrasen's tackling instructional
algorithms within tackle gloves.
balance: The outcomes for tackling are more equalized. It isn't as feast
or famine, and should be somewhat more controllable without becoming too
severe.
add: Blocking successfully against a tackle will force the tackle to be
a neutral outcome.
add: Unarmed effectiveness from arms now contributes to attacking with
and defending from tackles.
add: Those who refuse to use firearms (like Sleeping Carp users and
insane unholy berzerkers) are better at tackling others.
add: Riot specialized armor, and not just riot armor, now contributes
meaningfully to tackling effectiveness.
balance: MK.1 Swat Suits, the ones that come in SWAT crates, now
functions similarly to riot armor.
add: Settlers from the outer rims have noticed they aren't very good at
protecting themselves against Judo Joe's clearly discriminatory tackling
techniques.
add: Security lockers come with gripper gloves, security vendors now
sell them as standard items, and the HoS' garment bag now has a pair of
gorilla gloves. Gripper gloves have a positive skill bonus to tackling.
add: Being insane also makes you INSANELY good at tackling but also
INSANELY likely to eat shit on a whiff. DO OR DIE, BITCH.
refactor: Shoving slowdown and all its implementations now use a status
effect, Staggered.
/🆑
2023-11-22 17:36:04 +00:00
MrMelbert
c1ed62915b Adds UPSIDE_DOWN movetype for negative gravity / makes Atrocinator affected by less things (#79785)
## About The Pull Request

Fixes #79764

I was going to tackle this issue by slamming `TRAIT_NO_SLIP_ALL` on
Atrocinator users and calling it a day, but like, that didn't feel
proper.

So I thought hey, we could just give them the flying movetype, even
though they technically aren't flying it means they're unaffected by
things that flying would make you unaffected by.

Nope, this means the mob technically "negates gravity", so no falling
and no feetsteps.

Let's try floating - this give us feetsteps but no falling upwards. 

So instead of going back to square one, with `TRAIT_NO_SLIP_ALL`, I
decided to go for the more complex route of just adding a movetype.

Hence, move type `UPSIDE_DOWN`. This covers situations where a mob would
be "floating" above the ground, but still walking. ...Negative gravity.

This means overall the Atrociator acts more as you'd expect - you don't
slip on ice, you don't trigger bear traps or mouse traps, you can walk
over railings, unaffected by conveyor belts, etc.

## Why It's Good For The Game

Makes the Atrocinator a lot more consistent with how you'd expect for it
to work.

Admittedly it is a bit niche use of movetypes, but it can possibly be
expanded to more things in the future, who knows? I applied it to mobs
on meat spikes (even though they don't move), just for proof of concept.

## Changelog

🆑 Melbert
fix: Atrocinating mobs will now behave more as you'd expect. Meaning
they don't slip on wet patches, can't trigger bear traps / landmines /
mouse traps, ignore conveyors, and can walk over tables and railings.
fix: Floating mobs are unaffected by conveyor belts, acid (on the
ground), glass tables
fix: Floating mobs won't squish stuff like roaches anymore 
fix: Fixes bear traps triggering on floating / flying mobs 
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-20 21:19:13 +00:00
SyncIt21
e4029ed9cd More code compression for reagent holder (#79796)
## About The Pull Request
Part 2 of #79686 where we trim down the size of `holder.dm` even further
and in the process give some procs more advanced features as they get
merged with their counterparts.

**1. Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()`**
The proc `get_multiple_reagent_amounts()` was only used by bio generator
and 1 other item with its only use being finding the sum of all reagents
present in the list returned by
`typesof(datum/reagent/consumable/nutrient)`. Currently the approach is
very inefficient because.
- `typesof()` is an expensive call which returns a long list of reagents
- `get_multiple_reagent_amounts()` would then use 2 nested for loops.
One to loop over every reagent in this holder & another inner for loop
to loop over every reagent returned by `typesof()` operator so the time
complexity of this proc is overall multiplicative which in lamen terms
means "Bad"

We can replicate the same behaviour of `typesof()` by using the
`type2parent()` proc and 1 more direct type check to get the exact same
behaviour but with much faster results, therefore reducing overall code

**2. Removes & merges `get_reagent()` proc with `has_reagent()`**
The proc `has_reagent()` is way more advanced than `get_reagent()` with
arguments requesting for a specific amount, metabolization and now even
has a new argument i.e. `chemical flag`. `has_reagent()` has always
returned the reagent reference directly and not a simple TRUE/FALSE so
it is a perfect replacement for `get_reagent()`, therefore reducing
overall code

**3. Removes & merges `has_chemical_flag()` proc with `has_reagent()`**
The proc `has_reagent()` can now look for a specific reagent with a
specific chemical flag as well as mentioned above thus it can replace
`has_chemical_flag()` therefore reducing overall code


## Changelog
🆑
code: Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()` inside reagent holder
code: Removes & merges `get_reagent()` proc with `has_reagent()` inside
reagent holder
code: Removes & merges `has_chemical_flag()` proc with `has_reagent()`
inside reagent holder
refactor: Reagent holder code has been further compressed. Report bugs
on github
/🆑
2023-11-19 10:40:09 -08:00
MrMelbert
2562f0997a Reworks stop, drop, roll into a gradual, interruptable thing, that repeats until extinguished (#79694)
## About The Pull Request

Related: #78017 

Stop drop and roll is no longer instant -5 fire stacks -> stun -> wait. 

Now, when you stop drop and roll, every time you roll you will lose 1
firestack.

A roll is triggered every 0.8 seconds. Moving, getting up, or becoming
incapacitated / stunned will stop you from rolling.
_(This number puts it roughly equivalent to its current rate.)_

While rolling, your hands are blocked (you cannot use items, hold
things, etc.)
Additionally, you will roll until all firestacks are cleared. 

## Why It's Good For The Game

Getting stunned for 6 seconds because you decide to stop and roll is a
little silly. Reasonably you could stop rolling and get back up should
the need arise, such as "oh god there's more fire I gotta relocate".

By changing it to a gradual thing, it makes it a bit more reasonable and
fair.
- New players who immediately slam "STOP DROP ROLL" because the alert on
their screen tells them to are no longer helpless for 6 whole seconds
- People who hit the resist key, intending to interact with something
else (such as a bola) are no longer stuck rolling when they did not want
to

## Changelog

🆑 Melbert
balance: Stop, drop, and roll no longer instantly clears 5 fire stacks
off of you - Instead, it will clear 1 fire stack off of you every time
you roll, with a roll every 0.8 seconds.
balance: Stop, drop, and roll no longer stuns you for 6 seconds.
Instead, it will knock you to the floor while you are rolling. Moving
around or getting up will cancel the roll, and you cannot use items
while rolling around.
balance: Stop, drop, and roll will now repeat until the fire is put out
or you get up.
/🆑
2023-11-15 18:38:39 -07:00
Ghom
573895a302 Traits from blessing of insanity are now applied correctly (#79704)
## About The Pull Request
What it reads on the title. The traits should be applied to the owner
and not the status effect itself.

## Why It's Good For The Game
This will fix #79641.

## Changelog

🆑 san7890, Ghommie
fix: The Blessing of Insanity now grants no damage slowdown and free
hyperspace movement correctly.
/🆑
2023-11-14 13:57:33 -07: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
MrMelbert
5cb5eab318 Fire temperature effects on a human is soft capped at 1200 kelvin, from when dimishing returns are applied (#79655)
## About The Pull Request

Past 1200 kelvin, fire temperature applied to humans receive diminishing
returns


![image](https://github.com/tgstation/tgstation/assets/51863163/40ddbcde-f3fa-4ecc-8c5b-ca27e86b9aed)

At 30 minutes of fire, a human is expected to be at about 6,200 k 

## Why It's Good For The Game

It's not really realistic that a body can manage to get up to the
hundreds of thousands of kelvin, the energy just isn't there.

It doesn't even make sense that a body can get to 6000 kelvin that's
like as hot as plasma IRL or something. Humans cremate at 1200 kelvin.
Temperature in general should be reigned in to prevent that but that's a
much larger project.

This also helps curb two issues, one being the "very high temperature
reagents" exploit and the other being "shaft miners coming into medical
being very difficult to revive".

## Changelog

🆑 Melbert
balance: Body temperature from being lit on fire will soft cap at 1,200
K. It will still increase beyond this, but with diminishing returns. For
example, at 5,000 K, fire will heat 67x weaker.
/🆑
2023-11-13 00:46:16 +01:00
MrMelbert
5c550db672 Fix being unable to resist out of /datum/status_effect/freon (#79628)
## About The Pull Request

Arguments were backwards. 

Adds some free code cleanup as well. 

## Changelog

🆑 Melbert
fix: Fix being unable to resist out of ice cubes
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-11-12 11:27:28 +01: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