Axel Meyer b66c4ca4dd fix(vagrant): substrate leg.scl cycle restored; feet inherit_scale=false
User feedback after iteration-4: legs SHOULD cycle through +1/0/-1
(substrate-style — leg renders forward, under body, then behind body).
But feet must NOT Y-flip when leg.scl_y goes negative, and must NOT
collapse when leg.scl_y=0. They should follow leg-end position only.

Three changes:
1. walk_fwd_lower keyframes restored to substrate-style (leg.scl_y
   sign-flip on both halves: leg_l +1↔-1, leg_r -1↔+1). foot.pos
   animations REMOVED — cascade through leg.world.scl now correctly
   moves foot to leg-end position automatically (foot.local.pos
   stays at rest 25 in y).
2. foot.rest.scl: [1, -1] → [1, 1] (no Y-flip in rest, natural
   sprite orientation). inherit_scale=false → foot.world.scl stays
   at foot.local.scl=[1,1] regardless of leg.scl_y. Foot sprite
   never flips, never collapses.
3. Procedural extended: writes foot.local.rot = -leg.local.rot so
   foot.world.rot = body.world.rot (feet stay body-oriented even
   when legs rotate to walk-direction).

Speed slowed further from 0.5 → 0.4 (user: still too fast at 0.5).
2026-05-18 22:31:42 +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.2.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.2, lib-core.puppet >=0.2.0, lib-asset.prototype-subterrain >=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)

CHANGELOG

v0.2.0

  • Sprite-mode rendering throughout: 13-bone humanoid puppet via lib-core.puppet v0.2 with PROTOTYPE asset-pack textures; sprite-tilemap via lib-core.maps v0.1.2 with 4 floor variants (floor_001-003 walkable, floor_004 as wall); hardcoded furniture (bed, bench, backpack) via engine.render.draw_sprite_transform.
  • Asset-pack indirection: manifest.module asset_aliases maps the alias- keys (player, tiles, world) to lib-asset.prototype-subterrain. Rig and tilemap atlas-ids resolved at init via puppet.load_textures and maps.load_textures.
  • Tile rotations: vagrant_test.map.json includes a tile_rotations parallel array exercising 90 and 180-degree rotations for visual verification of the rotation pipeline.
  • Animation refinements: walk on lower track now includes foot bones (legs + feet alternate); idle on upper track with subtle body+head sway.
  • New smoke traces emitted under SPOREL_CI=1: vagrant: render_frame_ok (per frame from render hook), vagrant: sprite_mode=on (once after first sprite draw), vagrant: assets_loaded=14 (once after init).
Description
F.vagrant Tier-1 test-chamber: single player + puppet + tilemap
Readme 666 KiB
Languages
Lua 100%