master
← Princess-Cheeseballs:i-get-knocked-down-but-i-get-up-again-cause-youre-never-gonna-keep-me-down
opened 05:31AM - 24 Apr 25 UTC
## About the PR
Adds crawling
Requires #36847
Requires #37196
Resolves: #…34894
Resolves: #1764
This is part 1 of adding crawling to upstream. Currently included in this PR:
### Crawling!!!
- You can press the C button to crawl (can be rebound and character menu has been moved to U).
- Crawling is the same as the knockdown state
- After a minimum knockdown time you can go through a DoAfter to stand up, this DoAfter happens automatically if you didn't purposefully fall down
- You cannot stand up if it would cause you to get stuck (NO MORE CLIPPING INTO WALLS WHEN SLIPPING!!!)
- Lube no longer chain stuns you, instead it keeps you knocked down (You also can't crawl on lube it's too slippery)
- Lizards can now bask for real
### Force Stand!!!
- You can right click yourself to force yourself to stand before your DoAfter is complete
- Only works if you're not stunned, incapacitated, and if your knockdown timer is up
- Costs 10 Stamina, will fail if it would StamCrit you
- You cannot force stand if you do not have an empty hand
### Tasers!!!
- Tasers have been revamped into being a knockdown weapon
- Tasers have very short range only about 4 tiles and cause 2.5 seconds of knockdown on hit as well as slowing the target
- Added an Admeme Taser which is like the old Taser in case you enjoy the stun meta
### Slipping Changes
- Slipping now does 0.5 Stun by default (configurable)
- Slip time has been turned into KnockdownTime
- Slipping now does stamina damage, default 25 goes up to 50 for Syndie Soap and Omega Soap (THIS CAN STAMCRIT)
- Slipping has a FrictionStatus it can apply, default is 0.5 friction and 0.5 seconds time
- FrictionStatus uses the new status effects system!
### SlidingComp is back!!!
- When crawling, you will inherit the friction from puddles just like if you were StamCrit
- You can now slide across lube puddles and propel yourself by throwing items or shooting a gun just like when weightless (works on all puddles but lube is the most effective)
- It also no longer throws a billion Debug Asserts
### Knocked Down Icon!!!
- Cool icon for being knocked down
- Shows how long until you can start standing
- Can be clicked to try and stand
- Will try force stand if you're in a do-after or if the timer isn't up, otherwise will try to stand you up normally
### Worm Smite
- Doesn't actually turn them into a worm (we don't have worms apparently that's fucked up)
- Makes it so they start crawling and they cannot stand up
### Missing Stuff
Since this PR is being split up for review purposes a number of things have been moved to Part 2: Coming Soon:tm:
Most of these are balance changes and some cleanup like
- Un-Hardcode Many Values
- Add a check for "touching" when sliding on lube
- Add proper notification sprite for stun
- Add Slowdown Mods for crawling based on item bulk and not hands available
- Add Component to prevent certain guns from being used when crawling (No shooting an RPG or minigun when crawling)
- Add Being able to Help other stand up
- Add SoftStamCrit as a precursor to StamCrit when taking Stamina Damage
- Arachnids Crawl Faster
- Jackboots Make you stand up Faster
- Handcuffs cuff you faster when knocked down
- Higher Disarm chance against knocked down people (Kick that gun away)
- NPCs need to be able to aim at crawling targets
- Some other stuff too probably
Out of Scope also need the Cursor Camera Offset Fix so shooting crawling people isn't a pain. I don't want CS:GO aiming in SS14 I want my bullets to go where I'm aiming. ( #35087 or equivalent)
## Why / Balance
Requested feature and I've already made two other PRs because this shit is soaped so I'm in too deep to give up now.
Also needed for medical overhaul in case you lose your legs.
## Technical details
- TryKnockdown now applies the component directly instead of through StatusEffectsSystem
- Doubled stun and crawling friction so it didn't feel bad
- Added FrictionStatusComponent and Friction Status Effect so that soap can throw people like normal (by default halves friction for 1 second)
- Added a bunch of new events for knockdowns to handle DoAfterTimes, Autostand bools, Cancellation, Knockdown time, and a lot of other stuff
- Most of the new logic is in SharedStunSystem.Knockdown, it got big enough it deserved its own file
## Media
### Voluntary Knockdown
https://github.com/user-attachments/assets/bd038d72-7ee4-4712-b5d7-ec5c6da8d9f9
### Crawling and Standing
https://github.com/user-attachments/assets/5d0cbd84-3e0f-4b84-b024-9e0de64aa9e6
### Force Standing
https://github.com/user-attachments/assets/1f929f2a-11dc-4663-a2ba-402f203a7d4e
### Alert Interactions
https://github.com/user-attachments/assets/12e3a289-a643-4f6b-bd80-b1e20f5d4731
### Slipping on Soap Onto a Table
https://github.com/user-attachments/assets/9ea6fc9a-9cf0-41d1-966c-c11c434802cb
### Tasers
https://github.com/user-attachments/assets/f35c4651-cd86-482b-bb7f-0fd284465a14
### Sliding Component
https://github.com/user-attachments/assets/4c76d084-668e-4b2f-93c7-a1049d4712f8
### Worm Smite
https://github.com/user-attachments/assets/1708b3f4-e23f-474f-b0f8-aee4e0a51d2a
## Requirements
- [X] I have read and am following the [Pull Request and Changelog Guidelines](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html).
- [X] I have added media to this PR or it does not require an ingame showcase.
## Breaking changes
- KnockdownComponent is no longer applied with the StatusEffectsSystem and is no longer a StatusEffect
- SlipperyComponent no longer has the ParalyzeTime datafield, instead it is split into StunTime and KnockdownTime
- StunOnCollideComponent's RunSpeedMultiplier and WalkSpeedMultiplier have been renamed to SprintSpeedModifier and WalkSpeedModifier to align with naming conventions
- SlidingSystem has been completely refactored to apply friction exclusively to Knocked Downed mobs so it equals stunned friction in scenarios where you don't want those friction mods applied to standing mobs (like with puddles)
- Events in the SharedStunSystem have been moved to SharedStunSystem.Events. You will need to import by changing
```
using Content.Shared.Stunnable
```
to
```
using static Content.Shared.Stunnable.SharedStunSystem
```
**Changelog**
:cl:
- add: Added crawling!