Files
skate-3-rust-engine/docs/360-FLIP.md
T

98 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 360 flip through the stock graphs
The ordinary on-board 360-flip route is wired for user visual testing.
PLAY.bat and PLAY-MAP.bat use the staged build. The supplied graphs and
animation banks remain the source of animation selection, transitions,
postures, timing, and physical animation attributes.
## Input and playback
- Right-stick magnitude and angle publish `AnticMag` and `AnticAngle`.
The existing anticipation states choose and blend the crouch/scoop poses.
- The seven supplied joystick `.pat` files now run through the recovered
recognizer. There is no trick hotkey, synthetic launch impulse, or new clip
selected outside the graphs.
- Recognized events pass through the original listener gates, then publish
the gesture name, `Trick`, and `GestureSpeed` into the ActionGraph.
- `CreateTrickIntentFromGesture` uses all 270 recovered mapping records,
including native bucket order, mirrored mappings, overrides, dark-catch
categories, and the four hold successors. A non-mirrored `360Flip` gesture
maps to `360Flip`; when mirrored, that gesture maps to `Laserflip`, and the
opposite gesture maps to `360Flip`, as in the original mapping.
- The stock ground path selects `B_360FLIP_G`, then sequences into
`B_360FLIP_A`. `SetTrickHeight` consumes the preceding animation's
`AnticStrength`, gesture speed, and the stock jumping settings. Its
`JumpHeightOverride` packet enters the existing skeleton-input handler.
- Trick construction identity, scoring metadata, underflip/dark-catch
requests, and nose-weight anticipation now have their original handlers.
The stock scoop coordinates for the non-mirrored 360-flip gesture correspond
to left/slightly down, down-left, down/slightly right, then an up-right flick
on the physical right stick. The recognizer permits holding the initial
point without weakening the eventual gesture. Direction changes with the
stock mirrored mapping; this is not an extra control setting.
## Evidence
TU3 instruction bytes were checked in a disposable IDA database against
the recompiled PPC instruction listings. Relevant boundaries:
| Behavior | Native source |
| --- | --- |
| PAT loading and push-front coordinate storage | 82696B18, 82699738 |
| Recognition, competition, strength, refractory frame | 82697168, 826972B8, 826974A8 |
| Axis sign and component deadzone | 82696030, 826962D8, 82F75F60 |
| Anticipation inputs | 82599AD0–82599C4C, 8259AD0C–8259AD40 |
| Pattern/held listeners and intent publication | 8259B878, 8259B9D0, 8259B1F0–8259B7D8 |
| Gesture mappings and graph lifecycle | 82B98F70, 82BA07F0, 82BA1C30–82BA2228 |
| Trick height | 82BAED78, 82BAEE90 |
| Trick construction identity | 82BB5C20, 82BB5CA0 |
| Scoring metadata | 82BBFA88, 8258FA20 |
| Underflip requests | 82BBE098, 82BBE0A8, 82BBE358 |
| Trick stair gate and physical reset | 82BA6930, 82DE3F38 |
| Nose-weight anticipation | 82BB2670, 82BB26D0, 82B97110 |
Factory names were verified from registration strings. In particular,
the community label on 82BC7848 incorrectly calls it `ScoringTrick`; the
actual registration is `SetTrickAttr`. Scoring's factory is 82BCC030.
Local research outputs and the re-extracted mapping records are under
`logs/`; original private binaries and animation data are not committed.
## Verification and user checks
Nonvisual checks pass for 36 core input tests, the PAT parser, the gesture
mapping/ActionHost lifecycle, and two private-stock fixtures. Those fixtures
recognize the authored scoop through all seven files and exercise the
stock crouch, scoop, takeoff, and air-animation handlers in both stances,
including finite decoded poses and required attributes. The fixture also
checks the ordinary route and ancestor entry/transition conditions for
unsupported factories. These are data/code
checks, not a claim of visually verified gameplay parity. No gameplay or
visual test was automated. The existing game instance was closed to stage
the new build; restarting it for the user is separate from these checks.
Please check:
1. Hold the right stick to crouch while stationary and while rolling.
2. Perform a 360 flip; check preparation, pop, board flip/spin, and foot motion.
3. Land and push away, then repeat in the opposite stance.
The first user-input run exposed the missing `OkToDoTrickOnStairs` gate.
It now reads the retained PhysOutAnimation byte166. Native reset82DE3F38
clears this byte; ordinary Ground Fill82D3A388 and common
ProcessOutput82DB6EC0 do not override it. This is the original packet
lifecycle, not a constant-success condition.
These nonvisual checks cover the ordinary ground route, not every trick in the newly
connected catalog. Advanced manual/grind-out branches still contain the
known unsupported `JumpInto` behavior, and the existing separate
`AddRunoutAttribs` gap remains. Those handlers were not bypassed. The current
test does not certify dark catches or the rest of the trick catalog visually.
The subsequent user run reached `ManualOutTimerIsActive` at tick3854.
This condition now reads the existing retained timer (>0, native82BA78B0
and8258F978). `SetManualOutTimer` arms it on End (82BB9158/8258F990),
using the authored length; UpdateManualOutTimer already owns decay/reset.
The regression fixture covers arming, hold during manuals, expiry, and
sibling takeoff preconditions evaluated before FromAntic selection.