606 Commits over 1,249 Days - 0.02cph!
Citizen: added a handful of new MorphFrame nodes for various expressions
Add game/config/input/common.json to .gitignore
Citizen: fixed the neck bone in Airborne_Flail_Movement having been pushed down due to a CAT bug
Citizen: converted all existing FBX animation files to binary FBX - for Facepunch/sbox-issues#3085
Most were already binary FBX, but a few of the earliest ones were ASCII.
Citizen/animgraph: update "voice" to use a MorphFrame instead of a DMX file + subgraph tweaks + weightlist tweaks
Citizen: updated visemes prefab
Citizen: set viseme prefab to enabled
Merge branch 'master' of sbox
Citizen/animgraph: apply the "Disable scale_height main pelvis offset" Tag to the rolling state. Will need a more thorough solution later. (Facepunch/sbox-issues#4296)
Citizen/animgraph: enable "lock state when waning" on the "Tag & Reset Movement" state machines
Citizen/animgraph: further improve skid. Blending in/out should be more graceful now, respecting the movement 2D blendspace's own timings. Revamped the "noise" layer additive animation: it now scales with speed, and it inherently lowers the pelvis by a few units to avoid IK pops. Fixed duck transition potentially spazzing out if you duck while skidding, or blending in/out of skidding. Disabled crouch skidding (for now?)
https://files.facepunch.com/maxlebled/1b2011b1/2023-12-20%2019-33-21.mp4
Citizen/animgraph: use the skid 1D Blendspace to extend the 2D Blendspace past its boundaries gracefully & infinitely rather than outright replacing it (because move_direction cannot be dampened, especially in conjuction with move_groundspeed as part of another downstream 1D Blend) + use different weightlist to do the model-space rotation blending
Citizen: add a couple of new weightlists (Only_Arms + Blend_UpperBody_HalfSpine_FullArms)
Citizen/animgraph: small tweak to the airborne blend timings to make the jump-to-airborne transition smoother (I think I recently messed with the jump blend-in timing and forgot to adjust the subsequent timings to account for that)
Citizen/animgraph: added Skid_C to complement the 1D blend
Citizen/animgraph: added wish-based flailing & directional lean to skid, and converted the 2D x/y blend to a 1D move_direction blend to ensure the transition between directions look proper regardless of speed
https://files.facepunch.com/maxlebled/1b1811b1/2023-12-18%2013-46-47.mp4
Citizen/animgraph: added Jump_Crouching animation
Citizen: updated Jump animation, renamed it to Jump_Standing, + safeguarded against a rare bug where jumping at a very specific time (frame-perfect?) could cause the jump to be instantly overridden by landing, probably on the exact same tick (see attached video)
https://files.facepunch.com/maxlebled/1b1411b1/2023-12-14%2017-57-20_reencode.mp4
Add clothing_c files as an explicit exclusion to the .gitignore rule that excludes compiled content — and restore the files, since contentbuilder can't take care of them for now
Citizen/animgraph: address a couple of edge cases with that last commit & shove the nodes in a group
Citizen/animgraph: fix potential animation snaps caused by the reset signal used to reset the movement cycle phase sometimes overlapping the frame you start moving (especially while holding SHIFT). Rather than send a reset signal if you were idle for at least 300ms *and* you start moving, simply send a reset signal if you've been idle for 300ms at all
https://files.facepunch.com/maxlebled/1b1311b1/sbox_2023-12-13_09-41-59.mp4
Citizen/animgraph: also nest the long transition from post-jump airborne back to normal state
https://files.facepunch.com/maxlebled/1b1311b1/sbox_2023-12-13_09-41-59.mp4
Citizen/animgraph: use a nested State Machine (single transition, conditionless) to always fade in the post-jump airborne state over a longer period of time than the downstream SM allows (see commit comment)
If we go straight from grounded to airborne (without a jump) then we still want to fade the airborne state quite slow... but we also want a fast snap-free state transition back to grounded if we land almost immediately. Snaps happen if a transition out of a state engages while you're still transitioning into this state.
The 'protection' against snaps is done by using 'Time in State' conditions that are slightly longer than the previous transition's blend time. But if we keep that time too high, having very fast transitions (e.g. land-grounded-airborne-grounded-airborne) can look really off. You'd be in the airborne state for a noticeable period of time even though you're running. Therefore a very short 'protection time' below 200ms is required.
But with such a short time, going straight from grounded to airborne is too snappy.
Therefore, inside the state, we use a new SM, with a single conditionless transition, to always fade in from the upstream state gracefully, over a longer period of time. Because it's effectively a nested SM, it doesn't matter that the downstream state transitions are 100ms long. And because the jump-to-airborne transition is quite long, not only does it barely matter that this fade-in always happens, I also think it makes it look a bit better...
The SM always needs to receive a reset from downstream to restart the fade-in from the start, so I have to use yet another 'makeshift reset blocker' to prevent the upstream movement states from getting reset. (Otherwise you'd see a snap as soon as b_grounded went false)
Delete all compiled content under "/game/core/models/" from the repository
Delete all compiled content under "/game/addons/citizen/" from the repository
Citizen/animgraph: make head look more reactive and bouncier
Apply the same .gitignore wildcard fix that I had made to sbox-assets to prevent compiled files from being committed (*_c to *.*_c), with the explicit exclusion of !*.shader_c
Citizen: polish Land_Crouching a bit
Citizen/animgraph: rip out the Selector node that oversees move_style, and replace it by a State Machine implementation; solves a moderate animation snap if you go from idle to full-on sprint, and also safeguards against repeated large snaps if tapping SHIFT
Citizen/animgraph: improve jump SM logic + make wish-based airborne flail fade in over 500ms (this leaves the visuals after jump almost unaffected while letting non-jump scenarios like "running off a cliff" look & feel better) + move its 1D blend slightly downstream (this prevents the non-wish flail and the wish flail from competing, and they run out of phase sync so that could look terrible)
Citizen: improved Land_Standing_Movement_[E/W]
Citizen: one last pass at the airborne flailing (tweaked hands/fingers, added head motion because I'd forgotten, and offset the loop start point)
Citizen: improve airborne flailing (legs move more, and line up better with the direction input)
Citizen/animgraph: improved Land_Standing_Movement_S
Citizen: perform a post-motion-extraction offset on the sprint anims, to get the center-of-mass & pivot point feel better during turns, and blending in general
Citizen: improved 'Land_Movement_N' animation, & fixes it potentially causing weird IK leg flips in some movement animations
Citizen: improved 'Land_Standing' animation & removed old 'Land' animation from VMDL/files
Citizen/animgraph: tie the new airborne flailing to wish_groundspeed
Citizen/animgraph: added better airborne flailing + fixed airborne-ground-airborne jank protection using a timeout of 1000ms instead of 100ms
Citizen/animgraph: added Sprint_NW
Citizen/animgraph: added Sprint_NE + other misc. small tweaks
Citizen/animgraph: reverse the orders of "lock when waned" in the landing animation groups
Citizen: reduced the lean in the sprint forwards animation clip by ~20 degrees
Citizen/animgraph: expanded landing animations (new crouching & movement-specific behaviours), + big improvements to blending out of landing
Citizen/animgraph: improved sprinting animation & handling of the locomotion 'wish' layer
Citizen/animgraph: further improved the lean layer, especially when holding a weapon
Head look adjustments forthcoming still. https://files.facepunch.com/maxlebled/1b1711b1/2023-11-17%2017-35-37.mp4
Citizen/animgraph: rework input-based lean layers
The upper body lean component now works much better, and is nicely staggered with the additive pelvis position component. A copy of the system, with different settings, is now applied while crouching, which improves settling back to idle. The upper body bit is still a bit hacky due to the lack of model-space additive support, but this works OK enough for now. The entire system is composited in *before* the "center delta" system, so it can't stomp any non-default idle poses anymore.
https://files.facepunch.com/maxlebled/1b1611b1/2023-11-16%2021-41-22.mp4
Citizen/animgraph: re-added 2X walks to the 2D blendspace, made them use new fast walks where currently applicable, and renamed "Walk_[direction]_2X" to "Walk2X_[direction]" for consistency
Add *#local.json to .gitignore so that local keyboard preferences don't get committed
Citizen/animgraph: added experimental Sprint_N animation (doesn't play nice with compositing yet)
Citizen/animgraph: lowered distance of strides in WalkFast_E/N, reining in the look of the legs especially once other layers contribute to the pose
Citizen/animgraph: added WalkFast_E/NE & updated S