bf5fe12e4cf6214464f9ecbbd24b8e3c18e3cbb0
User manual-test feedback after iteration-3 hip-stable + leg-rotation fixes: 1. Animation too fast for actual map traversal → play walk_fwd_lower and walk_upper with speed=0.5 (effective 1.6s cycle, was 0.8s). 2. Second half visually broken → was substrate's sign-flip trick where leg.scl_y goes +1 (opposite of rest -1) and foot.pos.y flips negative. Cascade foot.world.scl_y = +1 * -1 = -1 → foot rendered Y-flipped. User: 'die füße ... darf hier die skalierung nicht negativ werden'. New cycle: each half extends ONE leg (scl_y=-1 matching rest) while the other stays at scl_y=0 (collapsed/invisible). foot.world.scl_y never goes negative — only [0, +1]. Alternating-leg gait. Substrate first-half preserved verbatim; second-half mirrors with role swap.
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. Emitsvagrant: frame_avg_ms=Nandvagrant: 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
Languages
Lua
100%