13-bone humanoid rig (12 visible bones + 1 root) hand-ported from substrate reference, mapped to PROTOTYPE asset-pack via asset_aliases indirection (asset_pack: player). Bones use texture/z_order/scale/ anchor fields from the rig-format extension. Tracks split: lower for legs + feet (walk animation), upper for root/body/head/shoulders/arms (idle animation). Animations: - idle.anim.json: 2.0s loop on upper track, subtle body+head sway - walk.anim.json: 0.6s loop on lower track, legs+feet cycle Sprite-tilemap: 4-tile palette (floor_001-003 walkable, floor_004 as wall). Map content: 20x20 with wall-border and interior wall blocks. tile_rotations parallel array exercises 90 and 180-degree rotations on a handful of cells for visual rotation-pipeline verification. init.lua loads textures via asset_aliases lookup: - maps.load_textures(aliases) resolves tilemap-tile atlas-ids - puppet.load_rig(path, aliases) loads + resolves bone textures - furniture textures preloaded at init (bed, bench, backpack) to avoid first-frame load stutter; rendered via engine.render. draw_sprite_transform in the draw hook Camera follows puppet via per-frame camera.set_target. Headtrack: head bone (look_at: true) rotates to face mouse world-position. New SPOREL_CI=1 traces from render and init hooks: - vagrant: render_frame_ok (per frame from render) - vagrant: sprite_mode=on (once after first sprite-draw) - vagrant: assets_loaded=14 (once after init: 7 puppet + 4 tile + 3 furniture)
25 lines
2.0 KiB
JSON
25 lines
2.0 KiB
JSON
{
|
|
"id": "humanoid",
|
|
"asset_pack": "player",
|
|
"bones": [
|
|
{ "id": "root", "parent": null, "rest": {"x": 0, "y": 0, "angle": 0}, "z_order": -1 },
|
|
{ "id": "body", "parent": "root", "rest": {"x": 0, "y": 0, "angle": 0}, "z_order": 2, "texture": "body_001" },
|
|
{ "id": "head", "parent": "body", "rest": {"x": 0, "y": -16, "angle": 0}, "z_order": 6, "texture": "head_001", "look_at": true },
|
|
{ "id": "shoulders", "parent": "body", "rest": {"x": 0, "y": 0, "angle": 0}, "z_order": 5, "texture": "shoulder_001" },
|
|
{ "id": "upper_arm_l", "parent": "shoulders", "rest": {"x": -19, "y": -3, "angle": 0}, "z_order": 3, "texture": "upper_arm_001", "scale": [-1, 1] },
|
|
{ "id": "upper_arm_r", "parent": "shoulders", "rest": {"x": 19, "y": -3, "angle": 0}, "z_order": 3, "texture": "upper_arm_001", "scale": [ 1, 1] },
|
|
{ "id": "lower_arm_l", "parent": "upper_arm_l", "rest": {"x": 14, "y": -18, "angle": 0}, "z_order": 2, "texture": "lower_arm_001", "scale": [-1, 1] },
|
|
{ "id": "lower_arm_r", "parent": "upper_arm_r", "rest": {"x": 14, "y": -18, "angle": 0}, "z_order": 2, "texture": "lower_arm_001", "scale": [ 1, 1] },
|
|
{ "id": "leg_l", "parent": "body", "rest": {"x": -4, "y": 8, "angle": 0}, "z_order": 1, "texture": "leg_001" },
|
|
{ "id": "leg_r", "parent": "body", "rest": {"x": 4, "y": 8, "angle": 0}, "z_order": 1, "texture": "leg_001" },
|
|
{ "id": "foot_l", "parent": "leg_l", "rest": {"x": 0, "y": 12, "angle": 0}, "z_order": 0, "texture": "foot_001" },
|
|
{ "id": "foot_r", "parent": "leg_r", "rest": {"x": 0, "y": 12, "angle": 0}, "z_order": 0, "texture": "foot_001" }
|
|
],
|
|
"tracks": [
|
|
{ "id": "lower", "bones": ["leg_l", "leg_r", "foot_l", "foot_r"] },
|
|
{ "id": "upper", "bones": ["root", "body", "head", "shoulders",
|
|
"upper_arm_l", "upper_arm_r",
|
|
"lower_arm_l", "lower_arm_r"] }
|
|
]
|
|
}
|