# Walk weight and head movement

## Study

The previous cleanup stabilised the face pixels, but also froze the head's position. That removed part of the walk's weight shift.

References consulted:

- [schwarnhild: free four-direction NPC](https://schwarnhild.itch.io/free-top-down-npc-01-walking-animation-in-4-directions). The creator describes a 30×48 sprite with an eight-frame walk. Its public animated preview was viewed in the browser to compare contact and passing positions. The small head/shoulder height change reads at this scale.
- [SLYNYRD, Pixelblog 50: Human Walk Cycle](https://www.slynyrd.com/blog/2024/5/24/pixelblog-50-human-walk-cycle). The contact/down/pass/swing breakdown links the head's height to the support leg and describes a more angular weight rhythm. This informed the authored phase offsets, rather than an independent continuous head oscillator.
- [SLYNYRD, Pixelblog 55: Top Down Character Animation](https://www.slynyrd.com/blog/2025/3/24/pixelblog-55-top-down-character-animation). Keeping proportions consistent across views, moving shoulders/head in phase, and controlling hair/equipment noise informed the cleanup.

These are motion references. The game retains its existing character artwork; no third-party sprite is selected as a game asset.

## Current candidate

The weight-pass sheets (v6; Fiddler now v7 after the anatomy correction in MOTION_REVISION.md) are **384×256**, with eight 48×64 cells in each direction row. They reuse four existing limb drawings, each with two timed weight phases. This adds motion/timing between the drawings; it does not supply eight newly drawn leg poses.

| Character | Body offsets per half-cycle | Character of the movement |
|---|---|---|
| Ganoes | +1, 0, −1, 0 px | Slightly lighter rise; two-pixel low-to-high range |
| Commander | +1, +1, 0, 0 px | Restrained one-pixel weight dip |
| Fiddle soldier, walking | +1, 0, −1, 0 px | Lighter rise, with instrument attached rigidly |
| Surly | +1, +1, 0, 0 px | Controlled one-pixel dip |

Head, shoulders, torso, limbs and equipment translate together as existing pixel clusters. Only a one-pixel boot edge changes to keep each key drawing's planted sole in place. There is no neck/torso/shin stretching, image rotation, scaling or frame blending. The same face shape moves through the cycle, which avoids changing eyes or duplicated facial features.

Relative phase durations are 1.0 / 1.15 / 0.85 / 1.0, repeated for the opposite step. The gallery cycle is 0.64 seconds. During scripted travel, Godot derives animation speed from travel speed, stride length and the sum of relative frame durations, so the cadence follows movement. Earlier idle and held-pose assets stay separate.

## Review

[Watch the matched comparison](/home/vladc/Documents/Codex/2026-10-16/i-w/outputs/story-tactics-prototype/art/previews/walk_weight_v6.mp4): previous cycles above, revised below. It shows all four directions in place, then matched scripted travel. The long prologue v5 film predates this motion pass; the game and F2 gallery select the new sheets.

The four limb drawings remain the main limit on smoothness. Adding more fully drawn passing/swing poses would be a separate art pass; this candidate addresses the missing head/body weight movement with the current artwork.

Rebuild the minor motion pass:

```bash
python3 tools/prepare_motion.py --weight-only
```

Rebuild the source key exports and motion pass together:

```bash
python3 tools/prepare_motion.py --gaits-only
```

Open the dedicated review scene:

```bash
./run.sh res://scenes/walk_review.tscn
```

Offsets, source key indices and durations are in content/characters.json. Aseprite applies them through tools/export_walk_weight.lua. No new image generation was needed. The scene and contact sheets were rendered for visual review; no new automated tests were added or run.
