NAMING.md/AUDIT.md/UNWIRED.md are the conventions-doc pivot after the mass-rename was killed; committing so the bridge repo tree is clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
14 KiB
Animation Audit — 2026-07-24
Working audit for the animation naming-system project. Captures the current-state
inventory, what the game actually implements, what Ozan removed during his recent
animation work, and the open scope decisions. This is the evidence base for the
plan at ~/.claude/plans/i-want-to-audit-enchanted-squid.md.
Status: audit findings recorded. Decision (Ozan, 2026-07-24): do NOT implement a
mass-renaming system. Pivot to document the existing conventions + catalogue provenance/
status; keep vendor names, name new files to conform. See docs/animations/NAMING.md for
the conventions. Nothing renamed. The rename-scope questions in §6 are now moot (resolved:
no rename); the registry catalogue in §6 still proceeds.
1. Goal
Audit and revise the animation naming system across the two repos. Five deliverables:
- Create a naming system for all animations.
- Figure out which animations Ozan removed ("Kevin" clips) during his last animation work, and document the full list of animations the game needs.
- Rename current animations per the new naming system.
- Document the system.
- The animation list must store, per clip: where it came from, when it was created, how it was created, and whether it is approved / work-in-progress / not-started.
Decisions locked (Jeremy, 2026-07-24)
- Rename every animation in the game per the new system; the registry stores each clip's old/original name. (Scope of "in the game" narrowed by the §3 finding — see the open question in §6.)
- Registry is machine-readable YAML + a generated Markdown view.
- Coverage = all avatar skeletal clips (locomotion, tools/work, combat, swim, dance, boat, emotes/social). Animals out of scope.
- Naming docs + registry live in the animation repo under
docs/animations/, with pointers from ariki-game docs.
Registry fields required
canonical name · old name(s) · category · source/origin · creation date ·
creation method · status (approved | wip | not_started) · notes.
2. Where the packs live
All game-loaded animation packs are under assets/quaternius/ in ariki-game
(/Users/jeremykashkett/Tinqs/local.repo/ariki-game).
| Group | Path | Files | Clips | What it is |
|---|---|---|---|---|
| UAL vendor | assets/quaternius/anim/ |
UAL1.glb, UAL2.glb (+ _RM twins, Mannequin_F) |
254 unique (508 w/ RM) | Purchased Quaternius packs — the game's loco + work source of truth |
| Kevin | assets/quaternius/kevin/ |
12 GLBs (kevin_{male,female}_{combat,idles,misc,movement,social,work}.glb) |
1,307 (male/female mirror → ~650 unique) | Kevin Iglesias retargets; game uses "gap-only" |
| msrig (stale) | assets/quaternius/msrig/ |
18 GLBs (Kevin packs + UAL_Standard + a few Mixamo) | 1,399 | Superseded MixamoSkin retargets — flagged stale in the 2026-07-23 audit |
| Mixamo | assets/quaternius/mixamo/ |
4 GLBs (run_to_dive, walking, northern_soul, ual_loco) | 11 | One-off Mixamo clips |
| dancegen | assets/quaternius/dancegen/ |
10 GLBs (war/fertility/taming + _pp, nd_01, canoedismount1, hakadance1_static) |
11 | Our authored iClone-mocap dances + boat one-off |
| anim-combined | assets/quaternius/anim-combined/ |
Run_Punch.glb | 1 | Baked composite (run legs + punch upper body) |
Animation-repo side (/Users/jeremykashkett/Tinqs/local.repo/animation) holds the
pipeline staging/source, not what the game loads:
exchange/— incoming FBX, converted GLB, pingpong loops, outgoing propsarchive/— retired takes (never deleted, per policy).agents/wiki/dances/REGISTRY.md— existing partial naming system (dances + boat actions)tools/— all Blender-based (cc_retarget.py,rename_clip.py,loop_qc.py,pingpong_bake.py, …)
Dance JSONs that tell the game which clip to play: ariki-game/assets/dances/*.json.
3. Full clip census (2026-07-24)
Read directly from each GLB's glTF JSON chunk (pure-stdlib parser, no Blender).
| Pack | Files | Clips |
|---|---|---|
anim/ (UAL1 120, UAL1_RM 120, UAL2 134, UAL2_RM 134, Mannequin_F 0) |
5 | 508 |
kevin/ |
12 | 1,307 |
msrig/ |
18 | 1,399 |
mixamo/ (ual_loco 8, + 3 one-offs) |
4 | 11 |
dancegen/ |
10 | 11 |
anim-combined/ |
1 | 1 |
| GRAND TOTAL | 50 | 3,237 |
Per-file Kevin breakdown (male mirrors female): combat 286, movement 157, work 72,
social 68, misc 55, idles 15–16. Most Kevin clips are irrelevant to this game —
Rifle_Aim*, ThrowGrenade*, ThrowBoomerang*, Bow*, Casting*/magic.
4. What the game actually implements (~90–100 clips)
Traced through PlayerController.SetupAnimations()
(ariki-game/src/Viewer/PlayerController.cs:779) — the authoritative clip→game-key
mapping — plus the dance system's ClipCatalog auto-discovery of dancegen/.
Only 9 pack files are loaded at all. Of ~3,237 clips on disk, ~90–100 are wired.
| Pack (loaded) | Clips wired | On disk | What's used |
|---|---|---|---|
anim/UAL1.glb |
~41 | 120 | idle/walk/jog/sprint 8-dir, crouch 8-dir, jumps, turns, drink/sit, sword, interact |
anim/UAL2.glb |
~30 | 134 | chop/mine/fish/farm/carry/eat/sleep, 8-dir walk, shield set, running jump, 180 turns |
kevin_*_movement.glb |
10 | 157 | full directional swim set (loaded after UAL to override stock swim) |
kevin_*_combat.glb |
3 | 286 | ThrowWeapon01_R, ThrowSpear02_R, ThrowBall01_R |
kevin_*_work.glb |
1 | 72 | skin (SkinningGround01_R_Loop) |
kevin_*_social.glb |
1 | 68 | pray (Reverence01_Loop) |
anim-combined/Run_Punch.glb |
1 | 1 | run_punch composite |
mixamo/ (3 files) |
3 | 11 | walking, run_to_dive, northern_soul (→ dance_soul) |
dancegen/ |
~10 | 11 | war/fertility/taming dances + _pp loops, nd_01 + _pp, canoe clips |
Packs with ZERO clips implemented: all of msrig/ (1,399, superseded), kevin_*_idles
and kevin_*_misc (0 wired), the _RM root-motion UAL twins (never loaded — game loads
non-RM only), mixamo/ual_loco.glb.
Takeaway: ~97% of on-disk clips are unused vendor-library bulk buried inside purchased multi-clip GLBs. The implemented ~90 are what map cleanly to a naming system and are worth physically renaming; the rest are candidates you could pull from later.
Sample of implemented clip → game-key mapping (UAL, from SetupAnimations)
UAL1 clip → key: Idle_Loop→idle, Walk_Loop→walk, Jog_Fwd_Loop→run,
Sprint_Loop→sprint, Dance_Loop→dance/dance2/dance3 (one source, 3 keys),
Sword_Attack→weapon_attack, Fixing_Kneeling→hammer, Spell_Simple_Shoot→throw,
GroundSit_Idle_Loop→sit, 8-dir jog/crouch, Turn90_L/R.
UAL2 clip → key: TreeChopping_Loop→chop, Mining_Loop→mine, Fish_Cast_Idle_Loop→fish,
Farm_Harvest→gathering, Farm_PlantSeed→farm, Consume→eat, IdleToLay→sleep,
Walk_*_Loop→walk_* (8-dir), shield set, NinjaJump_*→running_jump_*.
Kevin gap clips (game-key = same or mapped): swim set Swim01_*→swim* / SwimIdle01→swim_idle,
SkinningGround01_R_Loop→skin, Reverence01_Loop→pray, three throw clips kept as-is.
5. Kevin-removal forensics (what Ozan removed)
During Ozan's recent animation work (2026-07-22/23), two relevant removals in ariki-game:
5a. Loose Kevin + Synty FBXs deleted — commit f5ee3a7d0 (2026-07-22)
chore(anims): drop unused Unity/Synty FBXs and dead import-time retarget
Deleted animation FBXs (each with its .import sidecar):
- Kevin (
assets/animations/kevin/):Archer@CombatIdle01/02,Archer@Death01/02,Archer@Idle01/02,Archer@Run01,Archer@TakeDamage01,Throwing@BigAxe,Villager@Gathering01/02/03,Villager@Skinning01— 13 clips - Synty BasicMotions (
assets/animations/basic-motions/):@Idle01,@Run01,@Sprint01,@Walk01— 4 clips - Also dropped: Unity-format UAL/mannequin/base-character FBX exports (the Godot pipeline uses the Godot/GLB exports, so these were redundant format duplicates).
Important nuance: these were the loose per-clip FBX form of Kevin content. The Kevin
category GLB packs (assets/quaternius/kevin/kevin_*_*.glb, 1,307 clips) survive and
still contain equivalent content — e.g. the deleted Villager@Skinning01 corresponds to
SkinningGround01_R_Loop still present in kevin_*_work.glb (and still wired as skin).
So most of these are superseded, not truly lost. Each needs a clip-level cross-check in
Phase 1 to classify truly gone vs still available in a pack / covered by a UAL clip
(e.g. Villager@Gathering ↔ UAL2 Farm_Harvest; Archer combat ↔ kevin_*_combat.glb).
5b. UAL Standard packs removed — commit 2292174dc (2026-07-23)
feat(anims+character): canonicalize UAL packs under anim/, land QuatSkin body work + tool kit
Removed the older UAL Standard clip GLBs (UAL1_Standard.glb, UAL2_Standard.glb, etc.)
in favor of UAL1 Pro (120 clips) + UAL2 Source (134 clips) under anim/. This is a
supersession/upgrade, not a loss — the Pro/Source packs are complete supersets. (Stale
UAL*_Standard.glb copies still linger inside msrig/.)
5c. Animation-repo archive
Retired dance takes are already tracked in .agents/wiki/dances/REGISTRY.md and physically in
animation/archive/ (alohaOG, firedance1, hakaOG, hakadance2, haka_mocap) —
never deleted.
Git authors for context: Ozan Bozkurt is by far the dominant author of animation commits; "Kevin" refers to the Kevin Iglesias vendor animation packs, not a team member.
6. Open scope decisions (BLOCKING — need Jeremy)
The §3/§4 findings changed the picture after the "rename everything" decision was made, so these need an explicit call before any renaming:
-
Rename scope. Given ~90 clips are implemented and ~3,000+ are unused vendor bulk:
- (A, recommended) Physically rename only the ~90 implemented clips + all our authored content; catalogue everything else in the registry with a canonical ID + old-name mapping but leave vendor names in the GLBs. Keeps the vendor re-download/upgrade path clean.
- (B) Rename the whole functional set the game might ever wire (few hundred), leaving only clearly-irrelevant vendor clips (rifles, magic) untouched.
- (C) Literally rename all 3,237 — max consistency, breaks vendor upgrade path, huge effort for near-zero value on unused clips.
-
msrig/ (1,399 stale clips). Recommended: archive it (never delete), mark superseded in the registry, don't rename — but confirm with Ozan first since code still has
msrigfallback paths (PlayerController.cs, test beds). Alternatives: catalogue-in-place, or rename-too.
7. Key technical constraints (for the rename phase)
- One skeleton: Quaternius 65-bone UE-named rig. Renaming a clip name inside a GLB is metadata-only and safe for the rig. The risk is entirely in references.
- Reference sites to migrate (ariki-game):
PlayerController.SetupAnimations()(the clip→game-key arrays — #1 silent-failure spot),PlayerAnimGraphBuilder.cs,CharacterAnimDriver.Resolve()(already has alias fallback — useful during migration),ToolActionResolver.cs,ThrowActionCatalog.cs,AnimationClipProfile.cs+data/animation-clip-profile.json,ClipCatalog.cs(dance bed, discovers packs by basename),assets/dances/*.json, docs. - Multi-clip GLBs:
rename_clip.pyassumes one action per armature; UAL/Kevin packs have many. The batch rename tool must handle multi-action GLBs. - Godot sidecars: after any asset rename, regenerate
.importviabash tools/game.sh import. - Vendor originals are archived unmodified in
tinqs/ariki-assets; renames must be applied by a re-runnable rename-map script so a future pack update re-canonicalizes in one pass. - Existing gates to reuse:
tools/rig_pose_gate.py(rest-pose delta vs UAL1 ref),ariki-game/tools/anim_qc.py(post-ingest seam/stutter), animation-repotools/loop_qc.py(pre-commit loop gate), locomotion + dance test beds (launch only after asking Jeremy). - Repo etiquette:
tinqs push/tinqs pull(raw git pull hangs on LFS), explicit-path staging, report commit hashes, archive-never-delete, clip numbers never reused.
8. Existing naming precedent (to generalize)
From animation/.agents/wiki/dances/REGISTRY.md (currently dances + boat only):
- snake_case matching the game's item-id convention (e.g.
war_dance_01); clip name baked in GLB is PascalCase (WarDance01). - Provisional stage: new takes get
nd_##(never a content name), renamed to a dance code only when Jeremy adopts them for a ceremony. - Loop-pair rule: every adopted dance ships base + ping-pong
_ppvariant, must passloop_qc.py. - Suffixes seen in use:
_loop,_idle,_pp, directional (_fwd/_bwd/_l/_r),_rm. - Archive, never delete; numbers never reused.
Game-side keys already in use (lowercase snake_case): idle, walk, run, sprint, swim,
swim_idle, chop, mine, fish, gathering, farm, skin, pray, crouch_*, turn90_l,
etc. The new naming system should reconcile the canonical clip IDs with these existing game keys.
9. Next steps
- Resolve §6 scope decisions (blocking).
- Phase 0 — draft
docs/animations/NAMING.md(naming spec) + Jeremy approval gate. - Phase 1 — full clip inventory JSON +
docs/animations/REMOVALS.md(clip-level removal cross-check). - Phase 2 —
docs/animations/registry.yaml+ render/check tools. - Phase 3 — staged, gated rename execution.
- Phase 4 — documentation + maintenance protocol.
Full plan: ~/.claude/plans/i-want-to-audit-enchanted-squid.md.