Axel Meyer f7b38d984e feat: add CI-hooks for render-hook + state-transition smoke
Two env-var-gated hooks (no-op in normal play):
- SPOREL_CI=1: emits 'vagrant: render_frame_ok' per frame from
  render() and 'vagrant: frame_avg_ms=N' after 60 frames.
- SPOREL_VAGRANT_PHASE1_DRIVE=1: scripted move-right input on
  frames 21-40, idle otherwise. Combined with SPOREL_CI=1 produces
  observable idle -> walk -> idle state cycle.

State-transition trace 'vagrant: state=<walk|idle>' emits exactly
once per actual change in set_walk_or_idle, so the smoke greps
don't get noise from per-frame repeats.

Fix camera.set_target_provider (absent from camera API) to use
camera.set_target(x, y) called per frame from M.update instead.
2026-05-17 20:30:48 +02:00

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

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)
Description
F.vagrant Tier-1 test-chamber: single player + puppet + tilemap
Readme 666 KiB
Languages
Lua 100%