## Summary
- resolve each ledge action to the walkable segment on the stage-interior side
- preserve repeating root-motion displacement across every animation cycle
- add regression coverage for left/right ledge segments and multiple root-motion wraps
- Implement ledge intangibility
Reviewed-on: #91
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
- remove immutable stage geometry and derived animation/collision data from rollback snapshots
- avoid a duplicate full skeletal hierarchy traversal during root-motion sampling
- cache root-motion cycle deltas per animation clip
- optimize the game crate in development builds
- make Tracy profiling opt-in via the `tracy` feature
Reviewed-on: #86
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
- Add crouch cancelling
- Add IASA for aerial attacks
- Add scaffolding for autocancel
- Add hitbox group system
- Add new ergonomic features for attack scripting
- Add more information to the hitbox viewer
- Improve the looks of debug capsules
Reviewed-on: #82
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
- Preserve distinct same-action bindings in rollback input frames.
- Add independent command lifetimes with tap and state-scoped hold buffering.
- Detect second shield bindings and consume shield commands for air dodge.
- Fix duplicate keyboard mappings being overwritten.
Reviewed-on: #79
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
- add a feature flag for the GameCube adapter driver
- keep the driver enabled by default on supported platforms
- exclude the adapter dependency and polling systems on Windows
Reviewed-on: #80
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
- Mark landing position corrections as presentation discontinuities.
- Render and frame fighters from the current position for the snap frame.
- Keep previous translation history unchanged for gameplay collision and attack logic.
Reviewed-on: #67
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
- add a rollback-tracked `FighterSurfaceState` as the single source of truth for stage contact
- move active stage line ownership out of individual grounded fighter states
- update landing, airborne motion, ledge departure, hit reactions, and debug save states to maintain surface contact
- add tests for contact lifecycle, connected-segment traversal, and ledge departure
Reviewed-on: #60
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
- signal GameCube poll thread shutdown unconditionally when the snapshot is dropped
- retain and join the poll thread during resource cleanup
- add bounded, shutdown-aware backoff for recoverable parse and short-read errors
- add unit coverage for backoff capping and shutdown-aware waits
Fixes#25
Reviewed-on: #55
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
Fixes#20.
- Reuse fighter animation scratch and output buffers across rollback frames.
- Select air-collision hits in one pass without candidate allocations or sorting.
- Index contiguous replay input frames directly and binary-search checksums.
- Add regression tests for buffer reuse and replay lookup/validation.
Reviewed-on: #53
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
- install the nightly Windows MSVC target and cargo-xwin in CI
- build the production Windows executable alongside Linux
- package both executables and only imported_assets in one Steam depot
Reviewed-on: #50
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
- register Bevy's image loader explicitly in the headless asset processor
- use no GPU-compressed image formats because the processor has no render device
- allow PNG processing tasks to complete so `ProcessorState` reaches `Finished`
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
## Summary
- share custom RON asset loaders between the game and asset processor
- register image, font, and glTF loaders in the headless processor
- prevent `game_settings.ron` and `game.stylesheet.ron` from receiving ignored processed metadata
Reviewed-on: #48
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>