Walk, die and attack animations for all creatures (sheets, prompts and scripts)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No files matched your search
@@ -1,4 +1,4 @@
|
||||
# Creature animations (pilot: knight, kobold)
|
||||
# Creature animations
|
||||
|
||||
Generated on 2026-11-07 with `fal-ai/nano-banana-pro/edit` (`resolution: 2K`, `num_images: 1`,
|
||||
`output_format: png`), following the imp's digging animation (`../../imp-sprite/PROMPTS.md`).
|
||||
@@ -146,6 +146,164 @@ No extra colours were needed: the steel of both weapons is in the idle palettes.
|
||||
|
||||
## Raw files
|
||||
|
||||
The raws `*-raw*.png` are large and not covered by `.gitignore` (which only ignores
|
||||
`art/generated/sprites/*-raw*.png`); add `art/generated/sprites/anim/*-raw*.png` before
|
||||
committing.
|
||||
The raws `*-raw*.png` are large and git-ignored (`art/generated/sprites/anim/*-raw*.png`).
|
||||
|
||||
|
||||
# Batch: walk for all, die for all, attack for six (2026-11-07/08)
|
||||
|
||||
After the pilot: `walk` for the other 29 creatures (incl. the imp), `die` for all 31, `attack`
|
||||
for ogre, spider, mage, archer, dwarf and paladin. `manifest.json` lists the accepted
|
||||
animations per creature (`{"id", "kind", "anims"}`), `progress.json` the image count and the
|
||||
status and notes per sheet. `sheet-notes.txt` is the review list (input of `anim_manifest.py`), `pix-commands.sh` holds every pix command that was run (the last
|
||||
one per sheet is the accepted one). Requests: **79 images, about $11.85** (+ the pilot's 11).
|
||||
Three requests failed with "connection reset"; the image counter counts only delivered
|
||||
images, so if fal billed those, add up to $0.45. No sheet was skipped.
|
||||
|
||||
## Script changes (`../scripts/make_anim.py`)
|
||||
|
||||
- `die` as a third animation; `gen`/`pix` accept `imp` (raw = the lower row of
|
||||
`../../imp-sprite/raw-1.png`, crop `0,0.27,1,0.72`; idle = `../../imp-sprite/imp-<size>.png`;
|
||||
description in `BY_ID["imp"]`, kind `Worker`).
|
||||
- Wording per creature type (`kind_of`: `HOVER`, `SIEGE` from `creatures.py`, `QUAD` = spider,
|
||||
cave bear, beetle, else biped): walk = `WALK_FRONT` (biped), `QUAD_FRAMES[id]` (own gait),
|
||||
`HOVER_FRAMES` (hovering wing flap; the first, softer wording was used only for the bat),
|
||||
`SIEGE_FRAMES` (rolling, wheels turning); die = `DIE[type]` (see below).
|
||||
- `WEAPON` entries for every creature with an item (so the walk keeps it), `ATTACK` for the six.
|
||||
- **die pixelization**: the step is set by frame 1 only (still standing, so its core height =
|
||||
idle); frames 2-4 keep their position relative to frame 1 as drawn in the raw (the tool
|
||||
centres every figure in its cell; the source offsets from the column centres are put back),
|
||||
the lowest part on the feet row, pulled back into the cell when it fits. Width check on frame 1
|
||||
only. A 5th field in a `--view` segment (`FILE:BAND/N:COUNT:PICKS:REF`) names the figure of
|
||||
that row that sets the scale (for mixing a falling figure from another row).
|
||||
- `strip_lines`: dark horizontal lines across most of the image (ground lines, row separators
|
||||
the model drew; at most 12 px thick, >75% of the width) are keyed out; a flat background in
|
||||
another colour (the catapult raws came white and pale blue) is keyed out too.
|
||||
- `row_bands`: tiny bands (a halo or sparkles floating above a row) belong to the next row
|
||||
(before, a priest's halo landed in the row above and broke the scaling).
|
||||
- `fal`: retries on 429/5xx/connection errors (60 s, 120 s, ...), counts every delivered image
|
||||
in `progress.json` (file lock, so parallel runs are safe).
|
||||
- `../scripts/peek.py` (raws side by side, small), `../scripts/pv.py` (32 previews side by side,
|
||||
half size) for reviewing; `../scripts/anim_manifest.py NOTES` writes `manifest.json` and the
|
||||
sheet notes into `progress.json`.
|
||||
|
||||
## Prompts
|
||||
|
||||
Same templates as the pilot (`prompt_front` / `prompt_back`, `--print` shows them). The animation
|
||||
texts:
|
||||
|
||||
```text
|
||||
walk (biped): "a looping walk cycle: the <name> walks forward in the direction it faces, at a steady pace, carrying <WEAPON> as in the idle pose"
|
||||
walk (quad): same, columns from QUAD_FRAMES (spider: legs 1 and 3 on the left and 2 and 4 on the right stepping forward ...;
|
||||
beetle: front and back legs on the left and the middle leg on the right ...; cave bear: right front paw and left hind paw ...)
|
||||
walk (hover): "a looping hovering flight cycle: the <name> hovers in place in the air, flapping its wings"
|
||||
columns: 1 upstroke - the wings raised straight up high above the head, the wing tips pointing up, the body at its highest point;
|
||||
2 downstroke - the wings swept out level to the sides, fully spread; 3 down - the wings pulled down below the body, the wing
|
||||
tips pointing down, the body at its lowest point; 4 recovery - the wings half raised and folded a little, swinging back up
|
||||
+ "The creature stays in the middle of its cell ...; the wings flap with big, clearly different wing positions in the four frames ..."
|
||||
walk (siege): "rolling forward: the <name> rolls forward in the direction it faces, its wooden wheels turning" (columns: wheel marks at 0, 1/4, 1/2, 3/4 turn)
|
||||
die (biped): "a death: the character is struck by a fatal blow and falls over backwards (away from the direction it faces) onto its back,
|
||||
where it lies still - in every view it falls the same way, backwards relative to its own facing"
|
||||
columns: 1 hit - recoiling from the blow, still standing upright on both feet, head thrown back, eyes shut in pain, arms flung out;
|
||||
2 falling - tipping over backwards, the knees buckling, the arms flailing; 3 hitting the ground - landing on its back, the body
|
||||
flat and low, limbs bouncing up a little; 4 lying still - lying flat on its back on the ground, limbs limp, eyes closed or crossed out, motionless
|
||||
+ "Frame 1 has the same size and position as the idle figure; in frames 2-4 the body sinks to the ground, the lowest part always
|
||||
on the baseline of the row, and stays within its own cell. Frame 4 lies flat and low on the ground."
|
||||
die (quad): staggers, collapses and rolls over onto its side, legs curled up
|
||||
die (hover): wings fail, drops out of the air, lies with the wings spread flat
|
||||
die (siege): "its destruction: the machine is smashed - planks crack and splinter, a wheel breaks off, and it collapses into a heap of broken wood"
|
||||
attack: ATTACK[id] (ogre: two-fisted smash; spider: rearing pounce and bite; mage: staff thrust casting a purple shadow orb;
|
||||
archer: draw from the quiver, aim, release, lower; dwarf: overhead pickaxe blow; paladin: two-handed diagonal swing with the glowing blade)
|
||||
```
|
||||
|
||||
## Procedure
|
||||
|
||||
1. All front requests in parallel (10 at a time; this hit fal's rate limit, hence the retries).
|
||||
2. Each front raw was looked at; a back request was only made when rows 4-5 of the front raw
|
||||
were unusable (the model now often draws all five rows correctly). Back requests: bat, ram
|
||||
walk and ogre die (before this rule), ogre/gargoyle/wyrm/giant walk, mage/ogre/archer/dwarf
|
||||
attack (`--strict`), dwarf attack again.
|
||||
3. `pix` with per-view picks (`pix-commands.sh`), then every 32 preview was checked against idle.
|
||||
|
||||
## Results and quality
|
||||
|
||||
General:
|
||||
- **die**: in every raw the model draws frame 1 in the row's view, but frames 2-4 as the *same*
|
||||
sideways fall in all five rows (it ignores the view once the body falls; a back request for the
|
||||
ogre showed the same). So the dying body falls the same way on screen whatever the view,
|
||||
usually head to the right. It still reads well as a death; asking for more would need one
|
||||
request per view. The lying body is often wider than the cell and cut at the cell sides
|
||||
(revenant, imp, the knight's sword).
|
||||
- Several creatures come out wider/bulkier than their slim idle sheet (paladin, archer, thief,
|
||||
monk, fairy and wyrm wings), so switching idle -> animation shows a slightly broader figure.
|
||||
- Siege engines: the wheel turning is not visible at 32 px; the walk is mostly a gentle rock.
|
||||
|
||||
Per sheet (also in `progress.json`):
|
||||
|
||||
| sheet | status | notes |
|
||||
| --- | --- | --- |
|
||||
| archer-attack | accepted | front rows from the front raw, back rows from the back raw (--strict); the front three-quarter archer is drawn larger/wider than idle; side view: the draw is small |
|
||||
| archer-die | accepted | good |
|
||||
| archer-walk | accepted | raw had 6 frames per row (0,1,3,4 used); drawn a bit wider than idle, bow thinner |
|
||||
| bat-die | accepted | good drop and splayed wings |
|
||||
| bat-walk | accepted | all 5 rows from the front raw; wing flap is subtle (back raw had a smeared middle row, unused) |
|
||||
| battlemage-die | accepted | good (hat falls off in the back view) |
|
||||
| battlemage-walk | accepted | good |
|
||||
| beetle-die | accepted | good: tips over onto its back, legs up |
|
||||
| beetle-walk | accepted | legs barely visible (small steps); two stray antenna pixels above the front three-quarter frames 1 and 3 |
|
||||
| catapult-die | accepted | the model drew a pale blue background (keyed out); in the back view frames 2-3 the wreck is drawn larger than the machine |
|
||||
| catapult-walk | accepted | the model drew a white background (keyed out); wheel turning not visible, the machine only rocks slightly; back three-quarter drawn smaller than idle |
|
||||
| cavebear-die | accepted | good; front view frame 1 a little smaller than the idle bear |
|
||||
| cavebear-walk | accepted | good four-legged gait; side view touches the cell edges |
|
||||
| chainbreaker-die | accepted | good |
|
||||
| chainbreaker-walk | accepted | good |
|
||||
| cogling-die | accepted | good |
|
||||
| cogling-walk | accepted | good |
|
||||
| dwarf-attack | accepted | back raw needed a retry (first one showed the face in the impact frames); back three-quarter impact frame from the back row |
|
||||
| dwarf-die | accepted | good |
|
||||
| dwarf-walk | accepted | good |
|
||||
| fairy-die | accepted | good |
|
||||
| fairy-walk | accepted | wings drawn bigger than in idle; back 3/4 = 2 frames alternating (others showed the face) |
|
||||
| gargoyle-die | accepted | good |
|
||||
| gargoyle-walk | accepted | back three-quarter frames 0,1,2,1 of the front raw (frame 4 showed the face), back view from the back raw (both back rows came out straight from behind) |
|
||||
| giant-die | accepted | good (the club drops) |
|
||||
| giant-walk | accepted | front row frames 0,2,3,2 (the club vanished in one frame); back view from the back raw (2 frames alternating, the others lost the club) |
|
||||
| imp-die | accepted | frames 2-4 are the same sideways fall in every view (model limitation, as in all die sheets); the lying imp touches the cell edge |
|
||||
| imp-walk | accepted | front and front 3/4 rows: frames 0,1,2,1 (frame 4 of the raw was a back view) |
|
||||
| inquisitor-die | accepted | good: the holy book flies off; frame 1 wider than idle (arms flung out) |
|
||||
| inquisitor-walk | accepted | back three-quarter frames 0,1,2,1 (frame 4 was a straight back view) |
|
||||
| jailer-die | accepted | the raw had 5 figures in rows 2-5 (standing figures repeated, no falling frame there): the falling frame of rows 3-5 is borrowed from the front row; thin remnants of ground lines the model drew show under the lying body (mostly at 64) |
|
||||
| jailer-walk | accepted | drawn a little wider than idle; the dark grey skin against the near-black outline looks noisy (as in idle) |
|
||||
| knight-die | accepted | side and back rows: the raw had 5 figures (3 standing + fall + lying): frames 0,3,4,4 used, so the hit-the-ground and lying frames are the same there |
|
||||
| kobold-die | accepted | first front raw dropped (mid-air flip with a shadow, back rows not falling); retry: back views take frame 1 from their own row and frames 2-4 from the front row |
|
||||
| mage-attack | accepted | good: staff raised, thrust, a dark orb leaves the gem; back rows from the back raw |
|
||||
| mage-die | accepted | good (eyes closed, so the glowing eyes are gone) |
|
||||
| mage-walk | accepted | good |
|
||||
| monk-die | accepted | good |
|
||||
| monk-walk | accepted | wider than idle, fists lowered while walking (idle raises them) |
|
||||
| ogre-attack | accepted | front rows from the front raw, back rows from the back raw (--strict); back view frame 2 taken from the back three-quarter row (the back row showed the face there) |
|
||||
| ogre-die | accepted | frames 2-4 are the same sideways fall in every view (the model ignores the view once the body falls); back views from the back raw |
|
||||
| ogre-walk | accepted | back views from the back raw (the front raw had no back three-quarter row) |
|
||||
| owl-die | accepted | good |
|
||||
| owl-walk | accepted | good flapping |
|
||||
| paladin-attack | accepted | all 5 rows from the front raw; clear two-handed swing; blade cut at the cell edge in the impact frames; bulkier than the slim idle |
|
||||
| paladin-die | accepted | drawn bulkier than the slim idle paladin; the white/gold armour gets blotchy when lying; sword drops beside the body |
|
||||
| paladin-walk | accepted | drawn wider/stockier than idle; back 3/4 = 2 frames alternating (the row mixed front and back figures) |
|
||||
| priest-die | accepted | the halo is lost in frame 1, so frame 1 is scaled a little larger than idle (about one tenth); the halo comes back while falling |
|
||||
| priest-walk | accepted | first pixelization lost the halo of the front row (a floating halo was cut into the row above); fixed in row_bands and re-run |
|
||||
| priestess-die | accepted | good |
|
||||
| priestess-walk | accepted | good |
|
||||
| ram-die | accepted | breaks into a heap of planks; frames 2-4 are the same sideways collapse in every view |
|
||||
| ram-walk | accepted | front view static (frame 1 x4: the other front frames were turned); back view from the back raw; wheel turning barely visible, slight rocking |
|
||||
| ranger-die | accepted | the bow stands apart from the ranger in frame 1 of the side and back rows and is dropped there; grid lines in the raw removed by the tool |
|
||||
| ranger-walk | accepted | good |
|
||||
| revenant-die | accepted | the lying skeleton is longer than the cell and is cut at the cell sides in frames 3-4 |
|
||||
| revenant-walk | accepted | 6 frames per row with mixed views, picks per row; small jitter |
|
||||
| spider-attack | accepted | raw had 6 rows; only the wind-up (front legs raised) reads clearly, the bite frames move little |
|
||||
| spider-die | accepted | back three-quarter = back view (as in idle); collapses with curled legs |
|
||||
| spider-walk | accepted | raw had 6 rows (an extra front three-quarter row turned left); back three-quarter = back view as in idle |
|
||||
| thief-die | accepted | good |
|
||||
| thief-walk | accepted | raw had 5 frames per row (0,1,3,4 used); a little wider than idle |
|
||||
| trader-die | accepted | good |
|
||||
| trader-walk | accepted | good |
|
||||
| wyrm-die | accepted | frame 1 shows the wyrm with wings spread, wider than the idle pose; lying frames are a sideways dragon in every view |
|
||||
| wyrm-walk | accepted | strong wing flap, but the wings are spread much wider than in the idle pose (idle has them folded); back three-quarter = 2 frames alternating from the back raw (the other two showed the face) |
|
||||
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 67 KiB |