Build, fix and review character combat animations (melee strikes, bow shots, spell casts, skills, monster attacks, whole move sets) so they read like Diablo IV, Baldur's Gate 3 or Elden Ring and never stretch, lock, wring or break an arm, wrist or hand. A written standard with numbered rules, per-frame tests on the real skinned mesh, keys designed from upper-arm, forearm and blade intents, checks from every camera the player sees, two blind critics plus a blind A/B against the last release, and every critic claim verified against full-resolution frames and live-rig numbers. Use when creating or reworking any attack, skill or move set; when the user says arms, hands, wrists, elbows or weapons look stretched, weird, broken or wrong; when they ask for a standard, rules or tests for animations; or when they ask to score animations or get them to N out of 10.
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Distilled from the Thornvigil knight-and-archer pass (2026-09-30 to 10-01, releases 1.0.71 and 1.0.72). Its outcome:
Read references/thornvigil.md for the project's files, commands and current state, and references/traps.md before changing keys.
docs/combat-animation-standard.md (or the project's equivalent) with the move's own numbered rules:
u, the forearm direction f and the blade b, then run keydesign.mjs. It returns the hand target and flags:
references/techniques.md.armcheck.mjs for joint ranges and the skin's stretch and crush per arm region on the real mesh;at.mjs for the fist and blade at given times;knight-measure.mjs, anchor.mjs or drawfit.mjs.
Fix numbers that break a rule before spending a capture.references/review.md and templates/.workflow-ship-change skill. If a pushed but unpublished release regresses, correct it in place with a follow-up commit; don't add a version for something players never saw.vidcompose.py + encode.swift).The rig has no twist or corrective bones; past these ranges the skin visibly wrings, crushes or stretches. Every frame of every strike stays inside them, on both bodies, measured on the real skinned mesh.
| Rule | Limit |
|---|---|
| Elbow flexion | 10–152°; the striking or drawing arm keeps ≥20° through the middle 80% of the move |
| Contact reach | sword hand ≥60% of arm length from the shoulder at contact (reach into the blow, never lock) |
| Wrist | bend ≤50°, roll ≤45°; sword wrist capped at 40°; a drawing hand held straight |
| Twist | forearm roll ≤52°, upper-arm roll ≤52° |
| Raise | ≤105° from hanging (shoulder skin crushes beyond); no overhead raises |
| Skin | the worst 1% of each arm or hand region's edges: stretch ≤2×, crush ≤3× against the bind |
| Hands | always in a pose: fist on a grip, hook on a string (set → loose → follow-through), relaxed when empty; never splayed or clawed |
| Paths | hands ride their shoulders and arc about them between keys; blade keys stay reachable (25–115° off the forearm) |
Full rules, with the reasons and the tests that enforce them, are in references/rules.md.
f.references/traps.md has symptom → cause → fix for each. The short list:
head bone is +Y forward and +Z down. Check any bone-local offset against mesh landmarks (face.mjs).src while a capture runs.location.reload(), wait before evaluating the next script.Lead with what changed in the moves and whether it is live. Then give:
Say plainly when a score sits short of the target and why.
MengTo/Skills
a45892d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.