feat: initial implementation v0.1.0 — single player puppet + WASD + map
Composer module: single-player character as puppet (humanoid 4-bone rig: torso, head, leg_l, leg_r) at world (320, 240) on a 20x20 v0.1-format tilemap. - WASD direct movement, normalized for diagonals, 120 px/s. - Camera-chase via lib-core.camera target-provider (camera follows puppet position frame-to-frame). - Idle and walk keyframe animations: idle is a 2s torso-sway on the upper track; walk is a 0.6s leg-cycle on the lower track. - Animation-state transitions driven by movement input: walk while WASD-active, idle when released. - Headtrack: head bone (marked look_at: true in rig) rotates each frame to face the mouse cursor's world position via puppet.set_look_target. - ESC -> launcher. CI hooks (env-var-gated, no-op in normal play): - SPOREL_CI=1: emits 'vagrant: frame_avg_ms=N' after 60 frames and 'vagrant: render_frame_ok' per frame from the render hook, then engine.exit(0). Smoke stages consume these markers.
This commit is contained in:
48
README.md
Normal file
48
README.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# sporel-module-vagrant-skeleton
|
||||
|
||||
F.vagrant Tier-1 test-chamber: single player as puppet, WASD direct
|
||||
movement, camera-chase, headtrack to mouse-cursor. Phase 1 stage.
|
||||
|
||||
**Version:** 0.1.0
|
||||
**Module-ID:** vagrant-skeleton
|
||||
**Requires:** lib-core.input >=0.4.0, lib-core.camera >=0.3.0, lib-core.render >=0.1.0, lib-core.maps >=0.1.1, lib-core.puppet >=0.1.0
|
||||
**Tags:** test-chamber, puppet, walking-sim
|
||||
|
||||
## Topology
|
||||
|
||||
<!-- topology:start (auto-generated; do not edit) -->
|
||||
<!-- topology:end -->
|
||||
|
||||
## Controls
|
||||
|
||||
- **W A S D** — direct movement (4-way, normalized for diagonals)
|
||||
- **Mouse** — head/torso look-at target
|
||||
- **ESC** — return to launcher
|
||||
|
||||
## Demonstrates
|
||||
|
||||
- lib-core.puppet integration (skeleton, keyframe animation, procedural-ready, look-at constraint)
|
||||
- idle <-> walk animation-state transition driven by movement input
|
||||
- Camera-chase via lib-core.camera target-provider
|
||||
- Throwaway-content test-chamber stance: existing maps v0.1 format,
|
||||
hand-painted humanoid rig + 2 keyframe animations.
|
||||
|
||||
## Interactions
|
||||
|
||||
- WASD active -> walk animation on lower track
|
||||
- WASD released -> idle animation on upper track (subtle torso sway)
|
||||
- Mouse moved -> head-bone angle updates each frame to face cursor's
|
||||
world-position (look-at constraint on bones marked `look_at: true`)
|
||||
|
||||
## CI Hooks
|
||||
|
||||
- `SPOREL_CI=1` -> 60-frame perf canary. Emits `vagrant: frame_avg_ms=N`
|
||||
and `vagrant: render_frame_ok` (per-frame, from render hook), then exits.
|
||||
Used by smoke stages P0-S25a + P0-S25b.
|
||||
|
||||
## References
|
||||
|
||||
- ADR-0028 (Launcher-Flow)
|
||||
- ADR-0036 (Lib-Override for multi-module reuse)
|
||||
- ADR-0037 (Tests-as-Libs)
|
||||
- ADR-0038 (API-Doc-Convention)
|
||||
Reference in New Issue
Block a user