feat(vagrant): v0.3.0 — substrate-port rig + animations + locomotion

- humanoid.rig.json rewrite: legs->root, rest.rot+rest.scl on all bones,
  Y-mirror via scl=-1 on leg_l/r/foot_l/r, locomotion-block with
  procedural footplant config
- walk.anim.json: substrate walk_fwd_lower port; track=lower; pos+scl
  channels on legs+feet
- walk_upper.anim.json (NEW): substrate walk_upper port; arm-swing
- idle.anim.json: substrate idle_upper port; pos+rot on shoulders+arms
- init.lua: walk_upper parallel-play wiring
- manifest bump v0.2->v0.3; puppet dep ^0.3.0
This commit is contained in:
Axel Meyer
2026-05-18 18:55:34 +02:00
parent 3457a7eab8
commit fa511204c2
6 changed files with 156 additions and 46 deletions

View File

@@ -34,11 +34,13 @@ local function set_walk_or_idle(moving)
if moving then
if not puppet.is_playing(state.player, "walk") then
puppet.stop(state.player, "idle")
puppet.play(state.player, "walk", { loop = true })
puppet.play(state.player, "walk", { loop = true })
puppet.play(state.player, "walk_upper", { loop = true })
end
else
if not puppet.is_playing(state.player, "idle") then
puppet.stop(state.player, "walk")
puppet.stop(state.player, "walk_upper")
puppet.play(state.player, "idle", { loop = true })
end
end
@@ -59,10 +61,12 @@ function M.init(ctx)
-- Puppet rig + sprite textures + animations.
local rig = puppet.load_rig("rigs/humanoid.rig.json", aliases)
state.player = puppet.spawn(rig, { x = 320, y = 240 })
local idle = puppet.load_animation("animations/idle.anim.json", rig)
local walk = puppet.load_animation("animations/walk.anim.json", rig)
local walk_upper = puppet.load_animation("animations/walk_upper.anim.json", rig)
local idle = puppet.load_animation("animations/idle.anim.json", rig)
puppet.register_animation(state.player, idle)
puppet.register_animation(state.player, walk)
puppet.register_animation(state.player, walk_upper)
puppet.play(state.player, "idle", { loop = true })
-- Furniture textures (preload to avoid first-frame load stutter).