diff --git a/art/generated/sprites/anim/PROMPTS.md b/art/generated/sprites/anim/PROMPTS.md index c7cfcbe..06e2bf3 100644 --- a/art/generated/sprites/anim/PROMPTS.md +++ b/art/generated/sprites/anim/PROMPTS.md @@ -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-.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 walks forward in the direction it faces, at a steady pace, carrying 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 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 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) | diff --git a/art/generated/sprites/anim/archer-attack-32-preview.png b/art/generated/sprites/anim/archer-attack-32-preview.png new file mode 100644 index 0000000..c9fc0f5 Binary files /dev/null and b/art/generated/sprites/anim/archer-attack-32-preview.png differ diff --git a/art/generated/sprites/anim/archer-attack-32.png b/art/generated/sprites/anim/archer-attack-32.png new file mode 100644 index 0000000..4c29eeb Binary files /dev/null and b/art/generated/sprites/anim/archer-attack-32.png differ diff --git a/art/generated/sprites/anim/archer-attack-64-preview.png b/art/generated/sprites/anim/archer-attack-64-preview.png new file mode 100644 index 0000000..50d9f7d Binary files /dev/null and b/art/generated/sprites/anim/archer-attack-64-preview.png differ diff --git a/art/generated/sprites/anim/archer-attack-64.png b/art/generated/sprites/anim/archer-attack-64.png new file mode 100644 index 0000000..5716341 Binary files /dev/null and b/art/generated/sprites/anim/archer-attack-64.png differ diff --git a/art/generated/sprites/anim/archer-die-32-preview.png b/art/generated/sprites/anim/archer-die-32-preview.png new file mode 100644 index 0000000..4246937 Binary files /dev/null and b/art/generated/sprites/anim/archer-die-32-preview.png differ diff --git a/art/generated/sprites/anim/archer-die-32.png b/art/generated/sprites/anim/archer-die-32.png new file mode 100644 index 0000000..f6f45f6 Binary files /dev/null and b/art/generated/sprites/anim/archer-die-32.png differ diff --git a/art/generated/sprites/anim/archer-die-64-preview.png b/art/generated/sprites/anim/archer-die-64-preview.png new file mode 100644 index 0000000..8bc7abd Binary files /dev/null and b/art/generated/sprites/anim/archer-die-64-preview.png differ diff --git a/art/generated/sprites/anim/archer-die-64.png b/art/generated/sprites/anim/archer-die-64.png new file mode 100644 index 0000000..5b171be Binary files /dev/null and b/art/generated/sprites/anim/archer-die-64.png differ diff --git a/art/generated/sprites/anim/archer-walk-32-preview.png b/art/generated/sprites/anim/archer-walk-32-preview.png new file mode 100644 index 0000000..bc3e96d Binary files /dev/null and b/art/generated/sprites/anim/archer-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/archer-walk-32.png b/art/generated/sprites/anim/archer-walk-32.png new file mode 100644 index 0000000..9ddfb60 Binary files /dev/null and b/art/generated/sprites/anim/archer-walk-32.png differ diff --git a/art/generated/sprites/anim/archer-walk-64-preview.png b/art/generated/sprites/anim/archer-walk-64-preview.png new file mode 100644 index 0000000..59c321a Binary files /dev/null and b/art/generated/sprites/anim/archer-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/archer-walk-64.png b/art/generated/sprites/anim/archer-walk-64.png new file mode 100644 index 0000000..485eadd Binary files /dev/null and b/art/generated/sprites/anim/archer-walk-64.png differ diff --git a/art/generated/sprites/anim/bat-die-32-preview.png b/art/generated/sprites/anim/bat-die-32-preview.png new file mode 100644 index 0000000..e6425b0 Binary files /dev/null and b/art/generated/sprites/anim/bat-die-32-preview.png differ diff --git a/art/generated/sprites/anim/bat-die-32.png b/art/generated/sprites/anim/bat-die-32.png new file mode 100644 index 0000000..c5a9e8c Binary files /dev/null and b/art/generated/sprites/anim/bat-die-32.png differ diff --git a/art/generated/sprites/anim/bat-die-64-preview.png b/art/generated/sprites/anim/bat-die-64-preview.png new file mode 100644 index 0000000..bde9e82 Binary files /dev/null and b/art/generated/sprites/anim/bat-die-64-preview.png differ diff --git a/art/generated/sprites/anim/bat-die-64.png b/art/generated/sprites/anim/bat-die-64.png new file mode 100644 index 0000000..c52da03 Binary files /dev/null and b/art/generated/sprites/anim/bat-die-64.png differ diff --git a/art/generated/sprites/anim/bat-walk-32-preview.png b/art/generated/sprites/anim/bat-walk-32-preview.png new file mode 100644 index 0000000..375aea8 Binary files /dev/null and b/art/generated/sprites/anim/bat-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/bat-walk-32.png b/art/generated/sprites/anim/bat-walk-32.png new file mode 100644 index 0000000..179032b Binary files /dev/null and b/art/generated/sprites/anim/bat-walk-32.png differ diff --git a/art/generated/sprites/anim/bat-walk-64-preview.png b/art/generated/sprites/anim/bat-walk-64-preview.png new file mode 100644 index 0000000..f331207 Binary files /dev/null and b/art/generated/sprites/anim/bat-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/bat-walk-64.png b/art/generated/sprites/anim/bat-walk-64.png new file mode 100644 index 0000000..0691b4a Binary files /dev/null and b/art/generated/sprites/anim/bat-walk-64.png differ diff --git a/art/generated/sprites/anim/battlemage-die-32-preview.png b/art/generated/sprites/anim/battlemage-die-32-preview.png new file mode 100644 index 0000000..22c0559 Binary files /dev/null and b/art/generated/sprites/anim/battlemage-die-32-preview.png differ diff --git a/art/generated/sprites/anim/battlemage-die-32.png b/art/generated/sprites/anim/battlemage-die-32.png new file mode 100644 index 0000000..7c67740 Binary files /dev/null and b/art/generated/sprites/anim/battlemage-die-32.png differ diff --git a/art/generated/sprites/anim/battlemage-die-64-preview.png b/art/generated/sprites/anim/battlemage-die-64-preview.png new file mode 100644 index 0000000..491966f Binary files /dev/null and b/art/generated/sprites/anim/battlemage-die-64-preview.png differ diff --git a/art/generated/sprites/anim/battlemage-die-64.png b/art/generated/sprites/anim/battlemage-die-64.png new file mode 100644 index 0000000..8bb7ec0 Binary files /dev/null and b/art/generated/sprites/anim/battlemage-die-64.png differ diff --git a/art/generated/sprites/anim/battlemage-walk-32-preview.png b/art/generated/sprites/anim/battlemage-walk-32-preview.png new file mode 100644 index 0000000..38a5dfb Binary files /dev/null and b/art/generated/sprites/anim/battlemage-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/battlemage-walk-32.png b/art/generated/sprites/anim/battlemage-walk-32.png new file mode 100644 index 0000000..2bda411 Binary files /dev/null and b/art/generated/sprites/anim/battlemage-walk-32.png differ diff --git a/art/generated/sprites/anim/battlemage-walk-64-preview.png b/art/generated/sprites/anim/battlemage-walk-64-preview.png new file mode 100644 index 0000000..11b5882 Binary files /dev/null and b/art/generated/sprites/anim/battlemage-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/battlemage-walk-64.png b/art/generated/sprites/anim/battlemage-walk-64.png new file mode 100644 index 0000000..17c6f03 Binary files /dev/null and b/art/generated/sprites/anim/battlemage-walk-64.png differ diff --git a/art/generated/sprites/anim/beetle-die-32-preview.png b/art/generated/sprites/anim/beetle-die-32-preview.png new file mode 100644 index 0000000..1ee2250 Binary files /dev/null and b/art/generated/sprites/anim/beetle-die-32-preview.png differ diff --git a/art/generated/sprites/anim/beetle-die-32.png b/art/generated/sprites/anim/beetle-die-32.png new file mode 100644 index 0000000..10543db Binary files /dev/null and b/art/generated/sprites/anim/beetle-die-32.png differ diff --git a/art/generated/sprites/anim/beetle-die-64-preview.png b/art/generated/sprites/anim/beetle-die-64-preview.png new file mode 100644 index 0000000..d01afb0 Binary files /dev/null and b/art/generated/sprites/anim/beetle-die-64-preview.png differ diff --git a/art/generated/sprites/anim/beetle-die-64.png b/art/generated/sprites/anim/beetle-die-64.png new file mode 100644 index 0000000..3e5aaca Binary files /dev/null and b/art/generated/sprites/anim/beetle-die-64.png differ diff --git a/art/generated/sprites/anim/beetle-walk-32-preview.png b/art/generated/sprites/anim/beetle-walk-32-preview.png new file mode 100644 index 0000000..553fd18 Binary files /dev/null and b/art/generated/sprites/anim/beetle-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/beetle-walk-32.png b/art/generated/sprites/anim/beetle-walk-32.png new file mode 100644 index 0000000..40adb65 Binary files /dev/null and b/art/generated/sprites/anim/beetle-walk-32.png differ diff --git a/art/generated/sprites/anim/beetle-walk-64-preview.png b/art/generated/sprites/anim/beetle-walk-64-preview.png new file mode 100644 index 0000000..856d74d Binary files /dev/null and b/art/generated/sprites/anim/beetle-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/beetle-walk-64.png b/art/generated/sprites/anim/beetle-walk-64.png new file mode 100644 index 0000000..34de4ec Binary files /dev/null and b/art/generated/sprites/anim/beetle-walk-64.png differ diff --git a/art/generated/sprites/anim/catapult-die-32-preview.png b/art/generated/sprites/anim/catapult-die-32-preview.png new file mode 100644 index 0000000..5666c88 Binary files /dev/null and b/art/generated/sprites/anim/catapult-die-32-preview.png differ diff --git a/art/generated/sprites/anim/catapult-die-32.png b/art/generated/sprites/anim/catapult-die-32.png new file mode 100644 index 0000000..17ff83e Binary files /dev/null and b/art/generated/sprites/anim/catapult-die-32.png differ diff --git a/art/generated/sprites/anim/catapult-die-64-preview.png b/art/generated/sprites/anim/catapult-die-64-preview.png new file mode 100644 index 0000000..b392e02 Binary files /dev/null and b/art/generated/sprites/anim/catapult-die-64-preview.png differ diff --git a/art/generated/sprites/anim/catapult-die-64.png b/art/generated/sprites/anim/catapult-die-64.png new file mode 100644 index 0000000..3f9ea72 Binary files /dev/null and b/art/generated/sprites/anim/catapult-die-64.png differ diff --git a/art/generated/sprites/anim/catapult-walk-32-preview.png b/art/generated/sprites/anim/catapult-walk-32-preview.png new file mode 100644 index 0000000..85fa3ae Binary files /dev/null and b/art/generated/sprites/anim/catapult-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/catapult-walk-32.png b/art/generated/sprites/anim/catapult-walk-32.png new file mode 100644 index 0000000..8c230ef Binary files /dev/null and b/art/generated/sprites/anim/catapult-walk-32.png differ diff --git a/art/generated/sprites/anim/catapult-walk-64-preview.png b/art/generated/sprites/anim/catapult-walk-64-preview.png new file mode 100644 index 0000000..638acd8 Binary files /dev/null and b/art/generated/sprites/anim/catapult-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/catapult-walk-64.png b/art/generated/sprites/anim/catapult-walk-64.png new file mode 100644 index 0000000..89d52ff Binary files /dev/null and b/art/generated/sprites/anim/catapult-walk-64.png differ diff --git a/art/generated/sprites/anim/cavebear-die-32-preview.png b/art/generated/sprites/anim/cavebear-die-32-preview.png new file mode 100644 index 0000000..5d8ee07 Binary files /dev/null and b/art/generated/sprites/anim/cavebear-die-32-preview.png differ diff --git a/art/generated/sprites/anim/cavebear-die-32.png b/art/generated/sprites/anim/cavebear-die-32.png new file mode 100644 index 0000000..487ce82 Binary files /dev/null and b/art/generated/sprites/anim/cavebear-die-32.png differ diff --git a/art/generated/sprites/anim/cavebear-die-64-preview.png b/art/generated/sprites/anim/cavebear-die-64-preview.png new file mode 100644 index 0000000..dfdca7f Binary files /dev/null and b/art/generated/sprites/anim/cavebear-die-64-preview.png differ diff --git a/art/generated/sprites/anim/cavebear-die-64.png b/art/generated/sprites/anim/cavebear-die-64.png new file mode 100644 index 0000000..3fb739c Binary files /dev/null and b/art/generated/sprites/anim/cavebear-die-64.png differ diff --git a/art/generated/sprites/anim/cavebear-walk-32-preview.png b/art/generated/sprites/anim/cavebear-walk-32-preview.png new file mode 100644 index 0000000..bcd490a Binary files /dev/null and b/art/generated/sprites/anim/cavebear-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/cavebear-walk-32.png b/art/generated/sprites/anim/cavebear-walk-32.png new file mode 100644 index 0000000..ed2aed5 Binary files /dev/null and b/art/generated/sprites/anim/cavebear-walk-32.png differ diff --git a/art/generated/sprites/anim/cavebear-walk-64-preview.png b/art/generated/sprites/anim/cavebear-walk-64-preview.png new file mode 100644 index 0000000..84116e3 Binary files /dev/null and b/art/generated/sprites/anim/cavebear-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/cavebear-walk-64.png b/art/generated/sprites/anim/cavebear-walk-64.png new file mode 100644 index 0000000..dbd0dbf Binary files /dev/null and b/art/generated/sprites/anim/cavebear-walk-64.png differ diff --git a/art/generated/sprites/anim/chainbreaker-die-32-preview.png b/art/generated/sprites/anim/chainbreaker-die-32-preview.png new file mode 100644 index 0000000..32e6e88 Binary files /dev/null and b/art/generated/sprites/anim/chainbreaker-die-32-preview.png differ diff --git a/art/generated/sprites/anim/chainbreaker-die-32.png b/art/generated/sprites/anim/chainbreaker-die-32.png new file mode 100644 index 0000000..4ff2293 Binary files /dev/null and b/art/generated/sprites/anim/chainbreaker-die-32.png differ diff --git a/art/generated/sprites/anim/chainbreaker-die-64-preview.png b/art/generated/sprites/anim/chainbreaker-die-64-preview.png new file mode 100644 index 0000000..c804acd Binary files /dev/null and b/art/generated/sprites/anim/chainbreaker-die-64-preview.png differ diff --git a/art/generated/sprites/anim/chainbreaker-die-64.png b/art/generated/sprites/anim/chainbreaker-die-64.png new file mode 100644 index 0000000..0a6b191 Binary files /dev/null and b/art/generated/sprites/anim/chainbreaker-die-64.png differ diff --git a/art/generated/sprites/anim/chainbreaker-walk-32-preview.png b/art/generated/sprites/anim/chainbreaker-walk-32-preview.png new file mode 100644 index 0000000..c657b03 Binary files /dev/null and b/art/generated/sprites/anim/chainbreaker-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/chainbreaker-walk-32.png b/art/generated/sprites/anim/chainbreaker-walk-32.png new file mode 100644 index 0000000..cfd2ff6 Binary files /dev/null and b/art/generated/sprites/anim/chainbreaker-walk-32.png differ diff --git a/art/generated/sprites/anim/chainbreaker-walk-64-preview.png b/art/generated/sprites/anim/chainbreaker-walk-64-preview.png new file mode 100644 index 0000000..cb85479 Binary files /dev/null and b/art/generated/sprites/anim/chainbreaker-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/chainbreaker-walk-64.png b/art/generated/sprites/anim/chainbreaker-walk-64.png new file mode 100644 index 0000000..1160d9d Binary files /dev/null and b/art/generated/sprites/anim/chainbreaker-walk-64.png differ diff --git a/art/generated/sprites/anim/cogling-die-32-preview.png b/art/generated/sprites/anim/cogling-die-32-preview.png new file mode 100644 index 0000000..cb85bd4 Binary files /dev/null and b/art/generated/sprites/anim/cogling-die-32-preview.png differ diff --git a/art/generated/sprites/anim/cogling-die-32.png b/art/generated/sprites/anim/cogling-die-32.png new file mode 100644 index 0000000..6dd4033 Binary files /dev/null and b/art/generated/sprites/anim/cogling-die-32.png differ diff --git a/art/generated/sprites/anim/cogling-die-64-preview.png b/art/generated/sprites/anim/cogling-die-64-preview.png new file mode 100644 index 0000000..55b455b Binary files /dev/null and b/art/generated/sprites/anim/cogling-die-64-preview.png differ diff --git a/art/generated/sprites/anim/cogling-die-64.png b/art/generated/sprites/anim/cogling-die-64.png new file mode 100644 index 0000000..4d8ffa1 Binary files /dev/null and b/art/generated/sprites/anim/cogling-die-64.png differ diff --git a/art/generated/sprites/anim/cogling-walk-32-preview.png b/art/generated/sprites/anim/cogling-walk-32-preview.png new file mode 100644 index 0000000..10d6bf9 Binary files /dev/null and b/art/generated/sprites/anim/cogling-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/cogling-walk-32.png b/art/generated/sprites/anim/cogling-walk-32.png new file mode 100644 index 0000000..39242e3 Binary files /dev/null and b/art/generated/sprites/anim/cogling-walk-32.png differ diff --git a/art/generated/sprites/anim/cogling-walk-64-preview.png b/art/generated/sprites/anim/cogling-walk-64-preview.png new file mode 100644 index 0000000..3e0e094 Binary files /dev/null and b/art/generated/sprites/anim/cogling-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/cogling-walk-64.png b/art/generated/sprites/anim/cogling-walk-64.png new file mode 100644 index 0000000..fe8413f Binary files /dev/null and b/art/generated/sprites/anim/cogling-walk-64.png differ diff --git a/art/generated/sprites/anim/dwarf-attack-32-preview.png b/art/generated/sprites/anim/dwarf-attack-32-preview.png new file mode 100644 index 0000000..ccc58f8 Binary files /dev/null and b/art/generated/sprites/anim/dwarf-attack-32-preview.png differ diff --git a/art/generated/sprites/anim/dwarf-attack-32.png b/art/generated/sprites/anim/dwarf-attack-32.png new file mode 100644 index 0000000..e5d9649 Binary files /dev/null and b/art/generated/sprites/anim/dwarf-attack-32.png differ diff --git a/art/generated/sprites/anim/dwarf-attack-64-preview.png b/art/generated/sprites/anim/dwarf-attack-64-preview.png new file mode 100644 index 0000000..29b06d1 Binary files /dev/null and b/art/generated/sprites/anim/dwarf-attack-64-preview.png differ diff --git a/art/generated/sprites/anim/dwarf-attack-64.png b/art/generated/sprites/anim/dwarf-attack-64.png new file mode 100644 index 0000000..daa6053 Binary files /dev/null and b/art/generated/sprites/anim/dwarf-attack-64.png differ diff --git a/art/generated/sprites/anim/dwarf-die-32-preview.png b/art/generated/sprites/anim/dwarf-die-32-preview.png new file mode 100644 index 0000000..0a4b043 Binary files /dev/null and b/art/generated/sprites/anim/dwarf-die-32-preview.png differ diff --git a/art/generated/sprites/anim/dwarf-die-32.png b/art/generated/sprites/anim/dwarf-die-32.png new file mode 100644 index 0000000..fbf7e1c Binary files /dev/null and b/art/generated/sprites/anim/dwarf-die-32.png differ diff --git a/art/generated/sprites/anim/dwarf-die-64-preview.png b/art/generated/sprites/anim/dwarf-die-64-preview.png new file mode 100644 index 0000000..fab71ef Binary files /dev/null and b/art/generated/sprites/anim/dwarf-die-64-preview.png differ diff --git a/art/generated/sprites/anim/dwarf-die-64.png b/art/generated/sprites/anim/dwarf-die-64.png new file mode 100644 index 0000000..08a7e5e Binary files /dev/null and b/art/generated/sprites/anim/dwarf-die-64.png differ diff --git a/art/generated/sprites/anim/dwarf-walk-32-preview.png b/art/generated/sprites/anim/dwarf-walk-32-preview.png new file mode 100644 index 0000000..edaca2b Binary files /dev/null and b/art/generated/sprites/anim/dwarf-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/dwarf-walk-32.png b/art/generated/sprites/anim/dwarf-walk-32.png new file mode 100644 index 0000000..0473e7d Binary files /dev/null and b/art/generated/sprites/anim/dwarf-walk-32.png differ diff --git a/art/generated/sprites/anim/dwarf-walk-64-preview.png b/art/generated/sprites/anim/dwarf-walk-64-preview.png new file mode 100644 index 0000000..891d423 Binary files /dev/null and b/art/generated/sprites/anim/dwarf-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/dwarf-walk-64.png b/art/generated/sprites/anim/dwarf-walk-64.png new file mode 100644 index 0000000..e23eb36 Binary files /dev/null and b/art/generated/sprites/anim/dwarf-walk-64.png differ diff --git a/art/generated/sprites/anim/fairy-die-32-preview.png b/art/generated/sprites/anim/fairy-die-32-preview.png new file mode 100644 index 0000000..5b9bf12 Binary files /dev/null and b/art/generated/sprites/anim/fairy-die-32-preview.png differ diff --git a/art/generated/sprites/anim/fairy-die-32.png b/art/generated/sprites/anim/fairy-die-32.png new file mode 100644 index 0000000..3b14bcf Binary files /dev/null and b/art/generated/sprites/anim/fairy-die-32.png differ diff --git a/art/generated/sprites/anim/fairy-die-64-preview.png b/art/generated/sprites/anim/fairy-die-64-preview.png new file mode 100644 index 0000000..d5ee563 Binary files /dev/null and b/art/generated/sprites/anim/fairy-die-64-preview.png differ diff --git a/art/generated/sprites/anim/fairy-die-64.png b/art/generated/sprites/anim/fairy-die-64.png new file mode 100644 index 0000000..b17da43 Binary files /dev/null and b/art/generated/sprites/anim/fairy-die-64.png differ diff --git a/art/generated/sprites/anim/fairy-walk-32-preview.png b/art/generated/sprites/anim/fairy-walk-32-preview.png new file mode 100644 index 0000000..d4128e6 Binary files /dev/null and b/art/generated/sprites/anim/fairy-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/fairy-walk-32.png b/art/generated/sprites/anim/fairy-walk-32.png new file mode 100644 index 0000000..e1f30fe Binary files /dev/null and b/art/generated/sprites/anim/fairy-walk-32.png differ diff --git a/art/generated/sprites/anim/fairy-walk-64-preview.png b/art/generated/sprites/anim/fairy-walk-64-preview.png new file mode 100644 index 0000000..02ff971 Binary files /dev/null and b/art/generated/sprites/anim/fairy-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/fairy-walk-64.png b/art/generated/sprites/anim/fairy-walk-64.png new file mode 100644 index 0000000..29ac7c4 Binary files /dev/null and b/art/generated/sprites/anim/fairy-walk-64.png differ diff --git a/art/generated/sprites/anim/gargoyle-die-32-preview.png b/art/generated/sprites/anim/gargoyle-die-32-preview.png new file mode 100644 index 0000000..26771af Binary files /dev/null and b/art/generated/sprites/anim/gargoyle-die-32-preview.png differ diff --git a/art/generated/sprites/anim/gargoyle-die-32.png b/art/generated/sprites/anim/gargoyle-die-32.png new file mode 100644 index 0000000..bd833be Binary files /dev/null and b/art/generated/sprites/anim/gargoyle-die-32.png differ diff --git a/art/generated/sprites/anim/gargoyle-die-64-preview.png b/art/generated/sprites/anim/gargoyle-die-64-preview.png new file mode 100644 index 0000000..41d4f9d Binary files /dev/null and b/art/generated/sprites/anim/gargoyle-die-64-preview.png differ diff --git a/art/generated/sprites/anim/gargoyle-die-64.png b/art/generated/sprites/anim/gargoyle-die-64.png new file mode 100644 index 0000000..f328143 Binary files /dev/null and b/art/generated/sprites/anim/gargoyle-die-64.png differ diff --git a/art/generated/sprites/anim/gargoyle-walk-32-preview.png b/art/generated/sprites/anim/gargoyle-walk-32-preview.png new file mode 100644 index 0000000..613aeac Binary files /dev/null and b/art/generated/sprites/anim/gargoyle-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/gargoyle-walk-32.png b/art/generated/sprites/anim/gargoyle-walk-32.png new file mode 100644 index 0000000..6b5c4a2 Binary files /dev/null and b/art/generated/sprites/anim/gargoyle-walk-32.png differ diff --git a/art/generated/sprites/anim/gargoyle-walk-64-preview.png b/art/generated/sprites/anim/gargoyle-walk-64-preview.png new file mode 100644 index 0000000..9edf675 Binary files /dev/null and b/art/generated/sprites/anim/gargoyle-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/gargoyle-walk-64.png b/art/generated/sprites/anim/gargoyle-walk-64.png new file mode 100644 index 0000000..35c85e6 Binary files /dev/null and b/art/generated/sprites/anim/gargoyle-walk-64.png differ diff --git a/art/generated/sprites/anim/giant-die-32-preview.png b/art/generated/sprites/anim/giant-die-32-preview.png new file mode 100644 index 0000000..24742bc Binary files /dev/null and b/art/generated/sprites/anim/giant-die-32-preview.png differ diff --git a/art/generated/sprites/anim/giant-die-32.png b/art/generated/sprites/anim/giant-die-32.png new file mode 100644 index 0000000..1acd0b3 Binary files /dev/null and b/art/generated/sprites/anim/giant-die-32.png differ diff --git a/art/generated/sprites/anim/giant-die-64-preview.png b/art/generated/sprites/anim/giant-die-64-preview.png new file mode 100644 index 0000000..188bd29 Binary files /dev/null and b/art/generated/sprites/anim/giant-die-64-preview.png differ diff --git a/art/generated/sprites/anim/giant-die-64.png b/art/generated/sprites/anim/giant-die-64.png new file mode 100644 index 0000000..7197abe Binary files /dev/null and b/art/generated/sprites/anim/giant-die-64.png differ diff --git a/art/generated/sprites/anim/giant-walk-32-preview.png b/art/generated/sprites/anim/giant-walk-32-preview.png new file mode 100644 index 0000000..e5a1a12 Binary files /dev/null and b/art/generated/sprites/anim/giant-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/giant-walk-32.png b/art/generated/sprites/anim/giant-walk-32.png new file mode 100644 index 0000000..51c4584 Binary files /dev/null and b/art/generated/sprites/anim/giant-walk-32.png differ diff --git a/art/generated/sprites/anim/giant-walk-64-preview.png b/art/generated/sprites/anim/giant-walk-64-preview.png new file mode 100644 index 0000000..32a8e06 Binary files /dev/null and b/art/generated/sprites/anim/giant-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/giant-walk-64.png b/art/generated/sprites/anim/giant-walk-64.png new file mode 100644 index 0000000..5a6954e Binary files /dev/null and b/art/generated/sprites/anim/giant-walk-64.png differ diff --git a/art/generated/sprites/anim/imp-die-32-preview.png b/art/generated/sprites/anim/imp-die-32-preview.png new file mode 100644 index 0000000..213d4e7 Binary files /dev/null and b/art/generated/sprites/anim/imp-die-32-preview.png differ diff --git a/art/generated/sprites/anim/imp-die-32.png b/art/generated/sprites/anim/imp-die-32.png new file mode 100644 index 0000000..c3bf8db Binary files /dev/null and b/art/generated/sprites/anim/imp-die-32.png differ diff --git a/art/generated/sprites/anim/imp-die-64-preview.png b/art/generated/sprites/anim/imp-die-64-preview.png new file mode 100644 index 0000000..19a3c24 Binary files /dev/null and b/art/generated/sprites/anim/imp-die-64-preview.png differ diff --git a/art/generated/sprites/anim/imp-die-64.png b/art/generated/sprites/anim/imp-die-64.png new file mode 100644 index 0000000..6d3b7df Binary files /dev/null and b/art/generated/sprites/anim/imp-die-64.png differ diff --git a/art/generated/sprites/anim/imp-walk-32-preview.png b/art/generated/sprites/anim/imp-walk-32-preview.png new file mode 100644 index 0000000..f65f42f Binary files /dev/null and b/art/generated/sprites/anim/imp-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/imp-walk-32.png b/art/generated/sprites/anim/imp-walk-32.png new file mode 100644 index 0000000..a6f93fc Binary files /dev/null and b/art/generated/sprites/anim/imp-walk-32.png differ diff --git a/art/generated/sprites/anim/imp-walk-64-preview.png b/art/generated/sprites/anim/imp-walk-64-preview.png new file mode 100644 index 0000000..a1843de Binary files /dev/null and b/art/generated/sprites/anim/imp-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/imp-walk-64.png b/art/generated/sprites/anim/imp-walk-64.png new file mode 100644 index 0000000..a27ca7c Binary files /dev/null and b/art/generated/sprites/anim/imp-walk-64.png differ diff --git a/art/generated/sprites/anim/inquisitor-die-32-preview.png b/art/generated/sprites/anim/inquisitor-die-32-preview.png new file mode 100644 index 0000000..105a6a8 Binary files /dev/null and b/art/generated/sprites/anim/inquisitor-die-32-preview.png differ diff --git a/art/generated/sprites/anim/inquisitor-die-32.png b/art/generated/sprites/anim/inquisitor-die-32.png new file mode 100644 index 0000000..a196bfe Binary files /dev/null and b/art/generated/sprites/anim/inquisitor-die-32.png differ diff --git a/art/generated/sprites/anim/inquisitor-die-64-preview.png b/art/generated/sprites/anim/inquisitor-die-64-preview.png new file mode 100644 index 0000000..d21130f Binary files /dev/null and b/art/generated/sprites/anim/inquisitor-die-64-preview.png differ diff --git a/art/generated/sprites/anim/inquisitor-die-64.png b/art/generated/sprites/anim/inquisitor-die-64.png new file mode 100644 index 0000000..f3d6aa2 Binary files /dev/null and b/art/generated/sprites/anim/inquisitor-die-64.png differ diff --git a/art/generated/sprites/anim/inquisitor-walk-32-preview.png b/art/generated/sprites/anim/inquisitor-walk-32-preview.png new file mode 100644 index 0000000..ead8015 Binary files /dev/null and b/art/generated/sprites/anim/inquisitor-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/inquisitor-walk-32.png b/art/generated/sprites/anim/inquisitor-walk-32.png new file mode 100644 index 0000000..6a38136 Binary files /dev/null and b/art/generated/sprites/anim/inquisitor-walk-32.png differ diff --git a/art/generated/sprites/anim/inquisitor-walk-64-preview.png b/art/generated/sprites/anim/inquisitor-walk-64-preview.png new file mode 100644 index 0000000..1140824 Binary files /dev/null and b/art/generated/sprites/anim/inquisitor-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/inquisitor-walk-64.png b/art/generated/sprites/anim/inquisitor-walk-64.png new file mode 100644 index 0000000..f1099bf Binary files /dev/null and b/art/generated/sprites/anim/inquisitor-walk-64.png differ diff --git a/art/generated/sprites/anim/jailer-die-32-preview.png b/art/generated/sprites/anim/jailer-die-32-preview.png new file mode 100644 index 0000000..8795ddd Binary files /dev/null and b/art/generated/sprites/anim/jailer-die-32-preview.png differ diff --git a/art/generated/sprites/anim/jailer-die-32.png b/art/generated/sprites/anim/jailer-die-32.png new file mode 100644 index 0000000..5a7b19a Binary files /dev/null and b/art/generated/sprites/anim/jailer-die-32.png differ diff --git a/art/generated/sprites/anim/jailer-die-64-preview.png b/art/generated/sprites/anim/jailer-die-64-preview.png new file mode 100644 index 0000000..ccd6b3c Binary files /dev/null and b/art/generated/sprites/anim/jailer-die-64-preview.png differ diff --git a/art/generated/sprites/anim/jailer-die-64.png b/art/generated/sprites/anim/jailer-die-64.png new file mode 100644 index 0000000..df5a884 Binary files /dev/null and b/art/generated/sprites/anim/jailer-die-64.png differ diff --git a/art/generated/sprites/anim/jailer-walk-32-preview.png b/art/generated/sprites/anim/jailer-walk-32-preview.png new file mode 100644 index 0000000..a4fbb52 Binary files /dev/null and b/art/generated/sprites/anim/jailer-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/jailer-walk-32.png b/art/generated/sprites/anim/jailer-walk-32.png new file mode 100644 index 0000000..3b352b2 Binary files /dev/null and b/art/generated/sprites/anim/jailer-walk-32.png differ diff --git a/art/generated/sprites/anim/jailer-walk-64-preview.png b/art/generated/sprites/anim/jailer-walk-64-preview.png new file mode 100644 index 0000000..4e625d9 Binary files /dev/null and b/art/generated/sprites/anim/jailer-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/jailer-walk-64.png b/art/generated/sprites/anim/jailer-walk-64.png new file mode 100644 index 0000000..ce78691 Binary files /dev/null and b/art/generated/sprites/anim/jailer-walk-64.png differ diff --git a/art/generated/sprites/anim/knight-die-32-preview.png b/art/generated/sprites/anim/knight-die-32-preview.png new file mode 100644 index 0000000..51c1396 Binary files /dev/null and b/art/generated/sprites/anim/knight-die-32-preview.png differ diff --git a/art/generated/sprites/anim/knight-die-32.png b/art/generated/sprites/anim/knight-die-32.png new file mode 100644 index 0000000..7e437bc Binary files /dev/null and b/art/generated/sprites/anim/knight-die-32.png differ diff --git a/art/generated/sprites/anim/knight-die-64-preview.png b/art/generated/sprites/anim/knight-die-64-preview.png new file mode 100644 index 0000000..f85065b Binary files /dev/null and b/art/generated/sprites/anim/knight-die-64-preview.png differ diff --git a/art/generated/sprites/anim/knight-die-64.png b/art/generated/sprites/anim/knight-die-64.png new file mode 100644 index 0000000..c4370b4 Binary files /dev/null and b/art/generated/sprites/anim/knight-die-64.png differ diff --git a/art/generated/sprites/anim/kobold-die-32-preview.png b/art/generated/sprites/anim/kobold-die-32-preview.png new file mode 100644 index 0000000..13e0dca Binary files /dev/null and b/art/generated/sprites/anim/kobold-die-32-preview.png differ diff --git a/art/generated/sprites/anim/kobold-die-32.png b/art/generated/sprites/anim/kobold-die-32.png new file mode 100644 index 0000000..feeedb5 Binary files /dev/null and b/art/generated/sprites/anim/kobold-die-32.png differ diff --git a/art/generated/sprites/anim/kobold-die-64-preview.png b/art/generated/sprites/anim/kobold-die-64-preview.png new file mode 100644 index 0000000..8f2834d Binary files /dev/null and b/art/generated/sprites/anim/kobold-die-64-preview.png differ diff --git a/art/generated/sprites/anim/kobold-die-64.png b/art/generated/sprites/anim/kobold-die-64.png new file mode 100644 index 0000000..ec1c21a Binary files /dev/null and b/art/generated/sprites/anim/kobold-die-64.png differ diff --git a/art/generated/sprites/anim/mage-attack-32-preview.png b/art/generated/sprites/anim/mage-attack-32-preview.png new file mode 100644 index 0000000..18bde6e Binary files /dev/null and b/art/generated/sprites/anim/mage-attack-32-preview.png differ diff --git a/art/generated/sprites/anim/mage-attack-32.png b/art/generated/sprites/anim/mage-attack-32.png new file mode 100644 index 0000000..6aaed69 Binary files /dev/null and b/art/generated/sprites/anim/mage-attack-32.png differ diff --git a/art/generated/sprites/anim/mage-attack-64-preview.png b/art/generated/sprites/anim/mage-attack-64-preview.png new file mode 100644 index 0000000..1b06235 Binary files /dev/null and b/art/generated/sprites/anim/mage-attack-64-preview.png differ diff --git a/art/generated/sprites/anim/mage-attack-64.png b/art/generated/sprites/anim/mage-attack-64.png new file mode 100644 index 0000000..4cb6c5b Binary files /dev/null and b/art/generated/sprites/anim/mage-attack-64.png differ diff --git a/art/generated/sprites/anim/mage-die-32-preview.png b/art/generated/sprites/anim/mage-die-32-preview.png new file mode 100644 index 0000000..4f49c0b Binary files /dev/null and b/art/generated/sprites/anim/mage-die-32-preview.png differ diff --git a/art/generated/sprites/anim/mage-die-32.png b/art/generated/sprites/anim/mage-die-32.png new file mode 100644 index 0000000..b8b3c67 Binary files /dev/null and b/art/generated/sprites/anim/mage-die-32.png differ diff --git a/art/generated/sprites/anim/mage-die-64-preview.png b/art/generated/sprites/anim/mage-die-64-preview.png new file mode 100644 index 0000000..5205b52 Binary files /dev/null and b/art/generated/sprites/anim/mage-die-64-preview.png differ diff --git a/art/generated/sprites/anim/mage-die-64.png b/art/generated/sprites/anim/mage-die-64.png new file mode 100644 index 0000000..5b16861 Binary files /dev/null and b/art/generated/sprites/anim/mage-die-64.png differ diff --git a/art/generated/sprites/anim/mage-walk-32-preview.png b/art/generated/sprites/anim/mage-walk-32-preview.png new file mode 100644 index 0000000..84b8b27 Binary files /dev/null and b/art/generated/sprites/anim/mage-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/mage-walk-32.png b/art/generated/sprites/anim/mage-walk-32.png new file mode 100644 index 0000000..da2cff7 Binary files /dev/null and b/art/generated/sprites/anim/mage-walk-32.png differ diff --git a/art/generated/sprites/anim/mage-walk-64-preview.png b/art/generated/sprites/anim/mage-walk-64-preview.png new file mode 100644 index 0000000..d0cfb84 Binary files /dev/null and b/art/generated/sprites/anim/mage-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/mage-walk-64.png b/art/generated/sprites/anim/mage-walk-64.png new file mode 100644 index 0000000..2b5417e Binary files /dev/null and b/art/generated/sprites/anim/mage-walk-64.png differ diff --git a/art/generated/sprites/anim/manifest.json b/art/generated/sprites/anim/manifest.json new file mode 100644 index 0000000..4d95757 --- /dev/null +++ b/art/generated/sprites/anim/manifest.json @@ -0,0 +1,258 @@ +[ + { + "id": "imp", + "kind": "Worker", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "kobold", + "kind": "Kobold", + "anims": [ + "walk", + "die", + "attack" + ] + }, + { + "id": "spider", + "kind": "Spider", + "anims": [ + "walk", + "die", + "attack" + ] + }, + { + "id": "mage", + "kind": "Mage", + "anims": [ + "walk", + "die", + "attack" + ] + }, + { + "id": "ogre", + "kind": "Ogre", + "anims": [ + "walk", + "die", + "attack" + ] + }, + { + "id": "knight", + "kind": "Knight", + "anims": [ + "walk", + "die", + "attack" + ] + }, + { + "id": "archer", + "kind": "Archer", + "anims": [ + "walk", + "die", + "attack" + ] + }, + { + "id": "priest", + "kind": "Priest", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "dwarf", + "kind": "Dwarf", + "anims": [ + "walk", + "die", + "attack" + ] + }, + { + "id": "paladin", + "kind": "Paladin", + "anims": [ + "walk", + "die", + "attack" + ] + }, + { + "id": "jailer", + "kind": "Jailer", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "priestess", + "kind": "Priestess", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "chainbreaker", + "kind": "Chainbreaker", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "bat", + "kind": "Bat", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "gargoyle", + "kind": "Gargoyle", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "owl", + "kind": "Owl", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "wyrm", + "kind": "Wyrm", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "cogling", + "kind": "Cogling", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "revenant", + "kind": "Revenant", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "giant", + "kind": "Giant", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "fairy", + "kind": "Fairy", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "battlemage", + "kind": "BattleMage", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "ram", + "kind": "Ram", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "catapult", + "kind": "Catapult", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "cavebear", + "kind": "CaveBear", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "beetle", + "kind": "Beetle", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "trader", + "kind": "Trader", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "thief", + "kind": "Thief", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "monk", + "kind": "Monk", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "ranger", + "kind": "Ranger", + "anims": [ + "walk", + "die" + ] + }, + { + "id": "inquisitor", + "kind": "Inquisitor", + "anims": [ + "walk", + "die" + ] + } +] \ No newline at end of file diff --git a/art/generated/sprites/anim/monk-die-32-preview.png b/art/generated/sprites/anim/monk-die-32-preview.png new file mode 100644 index 0000000..b239e96 Binary files /dev/null and b/art/generated/sprites/anim/monk-die-32-preview.png differ diff --git a/art/generated/sprites/anim/monk-die-32.png b/art/generated/sprites/anim/monk-die-32.png new file mode 100644 index 0000000..d4920d7 Binary files /dev/null and b/art/generated/sprites/anim/monk-die-32.png differ diff --git a/art/generated/sprites/anim/monk-die-64-preview.png b/art/generated/sprites/anim/monk-die-64-preview.png new file mode 100644 index 0000000..e870f33 Binary files /dev/null and b/art/generated/sprites/anim/monk-die-64-preview.png differ diff --git a/art/generated/sprites/anim/monk-die-64.png b/art/generated/sprites/anim/monk-die-64.png new file mode 100644 index 0000000..cb27817 Binary files /dev/null and b/art/generated/sprites/anim/monk-die-64.png differ diff --git a/art/generated/sprites/anim/monk-walk-32-preview.png b/art/generated/sprites/anim/monk-walk-32-preview.png new file mode 100644 index 0000000..f306f8e Binary files /dev/null and b/art/generated/sprites/anim/monk-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/monk-walk-32.png b/art/generated/sprites/anim/monk-walk-32.png new file mode 100644 index 0000000..aa9b20c Binary files /dev/null and b/art/generated/sprites/anim/monk-walk-32.png differ diff --git a/art/generated/sprites/anim/monk-walk-64-preview.png b/art/generated/sprites/anim/monk-walk-64-preview.png new file mode 100644 index 0000000..69d8d35 Binary files /dev/null and b/art/generated/sprites/anim/monk-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/monk-walk-64.png b/art/generated/sprites/anim/monk-walk-64.png new file mode 100644 index 0000000..fdd1072 Binary files /dev/null and b/art/generated/sprites/anim/monk-walk-64.png differ diff --git a/art/generated/sprites/anim/ogre-attack-32-preview.png b/art/generated/sprites/anim/ogre-attack-32-preview.png new file mode 100644 index 0000000..c015488 Binary files /dev/null and b/art/generated/sprites/anim/ogre-attack-32-preview.png differ diff --git a/art/generated/sprites/anim/ogre-attack-32.png b/art/generated/sprites/anim/ogre-attack-32.png new file mode 100644 index 0000000..51107fe Binary files /dev/null and b/art/generated/sprites/anim/ogre-attack-32.png differ diff --git a/art/generated/sprites/anim/ogre-attack-64-preview.png b/art/generated/sprites/anim/ogre-attack-64-preview.png new file mode 100644 index 0000000..c4119c9 Binary files /dev/null and b/art/generated/sprites/anim/ogre-attack-64-preview.png differ diff --git a/art/generated/sprites/anim/ogre-attack-64.png b/art/generated/sprites/anim/ogre-attack-64.png new file mode 100644 index 0000000..009ab3b Binary files /dev/null and b/art/generated/sprites/anim/ogre-attack-64.png differ diff --git a/art/generated/sprites/anim/ogre-die-32-preview.png b/art/generated/sprites/anim/ogre-die-32-preview.png new file mode 100644 index 0000000..9edb14e Binary files /dev/null and b/art/generated/sprites/anim/ogre-die-32-preview.png differ diff --git a/art/generated/sprites/anim/ogre-die-32.png b/art/generated/sprites/anim/ogre-die-32.png new file mode 100644 index 0000000..852612e Binary files /dev/null and b/art/generated/sprites/anim/ogre-die-32.png differ diff --git a/art/generated/sprites/anim/ogre-die-64-preview.png b/art/generated/sprites/anim/ogre-die-64-preview.png new file mode 100644 index 0000000..b322871 Binary files /dev/null and b/art/generated/sprites/anim/ogre-die-64-preview.png differ diff --git a/art/generated/sprites/anim/ogre-die-64.png b/art/generated/sprites/anim/ogre-die-64.png new file mode 100644 index 0000000..2fd3b29 Binary files /dev/null and b/art/generated/sprites/anim/ogre-die-64.png differ diff --git a/art/generated/sprites/anim/ogre-walk-32-preview.png b/art/generated/sprites/anim/ogre-walk-32-preview.png new file mode 100644 index 0000000..6d3ed67 Binary files /dev/null and b/art/generated/sprites/anim/ogre-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/ogre-walk-32.png b/art/generated/sprites/anim/ogre-walk-32.png new file mode 100644 index 0000000..9f15ea6 Binary files /dev/null and b/art/generated/sprites/anim/ogre-walk-32.png differ diff --git a/art/generated/sprites/anim/ogre-walk-64-preview.png b/art/generated/sprites/anim/ogre-walk-64-preview.png new file mode 100644 index 0000000..ae03dec Binary files /dev/null and b/art/generated/sprites/anim/ogre-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/ogre-walk-64.png b/art/generated/sprites/anim/ogre-walk-64.png new file mode 100644 index 0000000..fbf079c Binary files /dev/null and b/art/generated/sprites/anim/ogre-walk-64.png differ diff --git a/art/generated/sprites/anim/owl-die-32-preview.png b/art/generated/sprites/anim/owl-die-32-preview.png new file mode 100644 index 0000000..d321c2c Binary files /dev/null and b/art/generated/sprites/anim/owl-die-32-preview.png differ diff --git a/art/generated/sprites/anim/owl-die-32.png b/art/generated/sprites/anim/owl-die-32.png new file mode 100644 index 0000000..ee9247b Binary files /dev/null and b/art/generated/sprites/anim/owl-die-32.png differ diff --git a/art/generated/sprites/anim/owl-die-64-preview.png b/art/generated/sprites/anim/owl-die-64-preview.png new file mode 100644 index 0000000..6b50755 Binary files /dev/null and b/art/generated/sprites/anim/owl-die-64-preview.png differ diff --git a/art/generated/sprites/anim/owl-die-64.png b/art/generated/sprites/anim/owl-die-64.png new file mode 100644 index 0000000..8bfc3a9 Binary files /dev/null and b/art/generated/sprites/anim/owl-die-64.png differ diff --git a/art/generated/sprites/anim/owl-walk-32-preview.png b/art/generated/sprites/anim/owl-walk-32-preview.png new file mode 100644 index 0000000..5641e20 Binary files /dev/null and b/art/generated/sprites/anim/owl-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/owl-walk-32.png b/art/generated/sprites/anim/owl-walk-32.png new file mode 100644 index 0000000..1dd83e0 Binary files /dev/null and b/art/generated/sprites/anim/owl-walk-32.png differ diff --git a/art/generated/sprites/anim/owl-walk-64-preview.png b/art/generated/sprites/anim/owl-walk-64-preview.png new file mode 100644 index 0000000..75a017e Binary files /dev/null and b/art/generated/sprites/anim/owl-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/owl-walk-64.png b/art/generated/sprites/anim/owl-walk-64.png new file mode 100644 index 0000000..10ad6eb Binary files /dev/null and b/art/generated/sprites/anim/owl-walk-64.png differ diff --git a/art/generated/sprites/anim/paladin-attack-32-preview.png b/art/generated/sprites/anim/paladin-attack-32-preview.png new file mode 100644 index 0000000..700cb3a Binary files /dev/null and b/art/generated/sprites/anim/paladin-attack-32-preview.png differ diff --git a/art/generated/sprites/anim/paladin-attack-32.png b/art/generated/sprites/anim/paladin-attack-32.png new file mode 100644 index 0000000..596a8b9 Binary files /dev/null and b/art/generated/sprites/anim/paladin-attack-32.png differ diff --git a/art/generated/sprites/anim/paladin-attack-64-preview.png b/art/generated/sprites/anim/paladin-attack-64-preview.png new file mode 100644 index 0000000..8d794f0 Binary files /dev/null and b/art/generated/sprites/anim/paladin-attack-64-preview.png differ diff --git a/art/generated/sprites/anim/paladin-attack-64.png b/art/generated/sprites/anim/paladin-attack-64.png new file mode 100644 index 0000000..ae8e07f Binary files /dev/null and b/art/generated/sprites/anim/paladin-attack-64.png differ diff --git a/art/generated/sprites/anim/paladin-die-32-preview.png b/art/generated/sprites/anim/paladin-die-32-preview.png new file mode 100644 index 0000000..ff0635d Binary files /dev/null and b/art/generated/sprites/anim/paladin-die-32-preview.png differ diff --git a/art/generated/sprites/anim/paladin-die-32.png b/art/generated/sprites/anim/paladin-die-32.png new file mode 100644 index 0000000..14b2584 Binary files /dev/null and b/art/generated/sprites/anim/paladin-die-32.png differ diff --git a/art/generated/sprites/anim/paladin-die-64-preview.png b/art/generated/sprites/anim/paladin-die-64-preview.png new file mode 100644 index 0000000..121a709 Binary files /dev/null and b/art/generated/sprites/anim/paladin-die-64-preview.png differ diff --git a/art/generated/sprites/anim/paladin-die-64.png b/art/generated/sprites/anim/paladin-die-64.png new file mode 100644 index 0000000..a69bf85 Binary files /dev/null and b/art/generated/sprites/anim/paladin-die-64.png differ diff --git a/art/generated/sprites/anim/paladin-walk-32-preview.png b/art/generated/sprites/anim/paladin-walk-32-preview.png new file mode 100644 index 0000000..d433b65 Binary files /dev/null and b/art/generated/sprites/anim/paladin-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/paladin-walk-32.png b/art/generated/sprites/anim/paladin-walk-32.png new file mode 100644 index 0000000..e0fe416 Binary files /dev/null and b/art/generated/sprites/anim/paladin-walk-32.png differ diff --git a/art/generated/sprites/anim/paladin-walk-64-preview.png b/art/generated/sprites/anim/paladin-walk-64-preview.png new file mode 100644 index 0000000..657352b Binary files /dev/null and b/art/generated/sprites/anim/paladin-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/paladin-walk-64.png b/art/generated/sprites/anim/paladin-walk-64.png new file mode 100644 index 0000000..98a23d8 Binary files /dev/null and b/art/generated/sprites/anim/paladin-walk-64.png differ diff --git a/art/generated/sprites/anim/pix-commands.sh b/art/generated/sprites/anim/pix-commands.sh new file mode 100644 index 0000000..5db1eaa --- /dev/null +++ b/art/generated/sprites/anim/pix-commands.sh @@ -0,0 +1,79 @@ +# pix commands of the batch (run from art/generated/sprites/anim with P="/tmp/sprvenv/bin/python -I ../scripts/make_anim.py") +$P pix ogre die +$P pix bat walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix ram walk --view "0=:0/5:4:0,0,0,0" --view "3=:3/5:4:0,1,2,3" --view "4=ram-walk-back-raw.png:1/2:4:0,1,2,3" +$P pix imp walk --view "0=:0/5:4:0,1,2,1" --view "1=:1/5:4:0,1,2,1" --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix spider walk --view "0=:0/6:4:0,1,2,3" --view "1=:1/6:4:0,1,2,3" --view "2=:2/6:4:0,1,2,3" --view "3=:4/6:4:0,1,2,3" --view "4=:5/6:4:0,1,2,3" +$P pix archer walk --view "0=:0/5:6:0,1,3,4" --view "1=:1/5:6:0,1,3,4" --view "2=:2/5:6:0,1,3,4" --view "3=:3/5:6:0,1,3,4" --view "4=:4/5:6:0,1,3,4" +$P pix priestess walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix mage walk --view "3=:3/5:5:0,1,2,3" --view "4=:4/5:5:0,1,2,3" +$P pix dwarf walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix jailer walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix priest walk --view "0=:0/5:6:0,1,3,4" --view "1=:1/5:6:0,1,3,4" --view "2=:2/5:6:0,1,3,4" --view "3=:3/5:6:0,1,3,4" --view "4=:4/5:4:0,1,2,3" +$P pix paladin walk --view "3=:3/5:4:2,3,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix chainbreaker walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix owl walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix fairy walk --view "3=:3/5:4:0,2,0,2" --view "4=:4/5:4:0,1,2,1" +$P pix revenant walk --view "0=:0/5:6:0,1,2,3" --view "1=:1/5:6:0,1,3,4" --view "2=:2/5:6:0,1,3,4" --view "3=:3/5:6:0,1,4,5" --view "4=:4/5:6:0,1,3,4" +$P pix catapult walk --view "0=:0/5:4:0,1,2,1" --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,0,1" +$P pix battlemage walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix cogling walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix cavebear walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix beetle walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix trader walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix thief walk --view "0=:0/5:5:0,1,3,4" --view "1=:1/5:5:0,1,3,4" --view "2=:2/5:5:0,1,3,4" --view "3=:3/5:5:0,1,3,4" --view "4=:4/5:5:0,1,3,4" +$P pix monk walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix ranger walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix inquisitor walk --view "3=:3/5:4:0,1,2,1" --view "4=:4/5:4:0,1,2,3" +$P pix imp die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix spider die --view "3=:4/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix mage die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix archer die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix priest die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix dwarf die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix knight die --view "2=:2/5:5:0,3,4,4" --view "3=:3/5:5:0,3,4,4" --view "4=:4/5:5:0,3,4,4" +$P pix giant walk --view "0=:0/5:4:0,2,3,2" --view "3=:3/5:4:0,1,2,3" --view "4=giant-walk-back-raw.png:1/2:4:0,1,2,1" +$P pix wyrm walk --view "3=wyrm-walk-back-raw.png:0/2:4:0,1,0,1" --view "4=wyrm-walk-back-raw.png:1/2:4:0,1,2,3" +$P pix spider walk --view "0=:0/6:4:0,1,2,3" --view "1=:1/6:4:0,1,2,3" --view "2=:2/6:4:0,1,2,3" --view "3=:4/6:4:0,1,2,3" --view "4=:5/6:4:0,1,2,3" +$P pix chainbreaker walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix catapult walk --view "0=:0/5:4:0,1,2,1" --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,0,1" +$P pix chainbreaker die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix jailer die --view "1=:1/5:5:0,2,3,4" --view "2=:2/5:5:0;:0/5:4:1:0;:2/5:5:3,4:0" --view "3=:3/5:5:0;:0/5:4:1:0;:3/5:5:3,4:0" --view "4=:4/5:5:0;:0/5:4:1:0;:4/5:5:3,4:0" +$P pix priestess die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix paladin die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix bat die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix gargoyle die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix owl die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix cogling die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix fairy die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix revenant die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix wyrm die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix giant die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix trader die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix monk die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix thief die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix cavebear die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix ranger die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix inquisitor die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix spider attack --view "3=:4/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix jailer walk --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix priest walk --view "0=:0/5:6:0,1,3,4" --view "1=:1/5:6:0,1,3,4" --view "2=:2/5:6:0,1,3,4" --view "3=:3/5:6:0,1,3,4" --view "4=:4/5:4:0,1,2,3" +$P pix paladin attack --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix kobold die --front kobold-die-front-raw-2.png --view "3=:3/5:4:0;:0/5:4:1,2,3:0" --view "4=:4/5:4:0;:0/5:4:1,2,3:0" +$P pix ogre walk --back ogre-walk-back-raw.png +$P pix gargoyle walk --view "3=:3/5:4:0,1,2,1" --view "4=gargoyle-walk-back-raw.png:1/2:4:0,1,2,3" +$P pix mage attack --back mage-attack-back-raw.png +$P pix ogre attack --view "4=ogre-attack-back-raw.png:1/2:4:0;ogre-attack-back-raw.png:0/2:4:1;ogre-attack-back-raw.png:1/2:4:2,3" +$P pix archer attack +$P pix battlemage die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix ram die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix catapult die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix beetle die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix jailer die --view "1=:1/5:5:0,2,3,4" --view "2=:2/5:5:0;:0/5:4:1:0;:2/5:5:3,4:0" --view "3=:3/5:5:0;:0/5:4:1:0;:3/5:5:3,4:0" --view "4=:4/5:5:0;:0/5:4:1:0;:4/5:5:3,4:0" +$P pix kobold die --front kobold-die-front-raw-2.png --view "3=:3/5:4:0;:0/5:4:1,2,3:0" --view "4=:4/5:4:0;:0/5:4:1,2,3:0" +$P pix dwarf attack --back dwarf-attack-back-raw-2.png --view "3=dwarf-attack-back-raw-2.png:0/2:4:0,1;dwarf-attack-back-raw-2.png:1/2:4:2;dwarf-attack-back-raw-2.png:0/2:4:3" +$P pix priest walk --view "0=:0/5:6:0,1,3,4" --view "1=:1/5:6:0,1,3,4" --view "2=:2/5:6:0,1,3,4" --view "3=:3/5:6:0,1,3,4" --view "4=:4/5:4:0,1,2,3" +$P pix priest die --view "3=:3/5:4:0,1,2,3" --view "4=:4/5:4:0,1,2,3" +$P pix giant walk --view "0=:0/5:4:0,2,3,2" --view "3=:3/5:4:0,1,2,3" --view "4=giant-walk-back-raw.png:1/2:4:0,2,0,2" +$P pix ranger die --view "2=:2/5:5:0,2,3,4" --view "3=:3/5:5:0,2,3,4" --view "4=:4/5:5:0,2,3,4" +$P pix spider attack --view "0=:0/6:4:0,1,2,3" --view "1=:1/6:4:0,1,2,3" --view "2=:2/6:4:0,1,2,3" --view "3=:4/6:4:0,1,2,3" --view "4=:4/6:4:0,1,2,3" diff --git a/art/generated/sprites/anim/priest-die-32-preview.png b/art/generated/sprites/anim/priest-die-32-preview.png new file mode 100644 index 0000000..107b080 Binary files /dev/null and b/art/generated/sprites/anim/priest-die-32-preview.png differ diff --git a/art/generated/sprites/anim/priest-die-32.png b/art/generated/sprites/anim/priest-die-32.png new file mode 100644 index 0000000..c2fdf29 Binary files /dev/null and b/art/generated/sprites/anim/priest-die-32.png differ diff --git a/art/generated/sprites/anim/priest-die-64-preview.png b/art/generated/sprites/anim/priest-die-64-preview.png new file mode 100644 index 0000000..450e566 Binary files /dev/null and b/art/generated/sprites/anim/priest-die-64-preview.png differ diff --git a/art/generated/sprites/anim/priest-die-64.png b/art/generated/sprites/anim/priest-die-64.png new file mode 100644 index 0000000..57437e5 Binary files /dev/null and b/art/generated/sprites/anim/priest-die-64.png differ diff --git a/art/generated/sprites/anim/priest-walk-32-preview.png b/art/generated/sprites/anim/priest-walk-32-preview.png new file mode 100644 index 0000000..cc13764 Binary files /dev/null and b/art/generated/sprites/anim/priest-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/priest-walk-32.png b/art/generated/sprites/anim/priest-walk-32.png new file mode 100644 index 0000000..76ceb26 Binary files /dev/null and b/art/generated/sprites/anim/priest-walk-32.png differ diff --git a/art/generated/sprites/anim/priest-walk-64-preview.png b/art/generated/sprites/anim/priest-walk-64-preview.png new file mode 100644 index 0000000..3f74c0c Binary files /dev/null and b/art/generated/sprites/anim/priest-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/priest-walk-64.png b/art/generated/sprites/anim/priest-walk-64.png new file mode 100644 index 0000000..d2bcd09 Binary files /dev/null and b/art/generated/sprites/anim/priest-walk-64.png differ diff --git a/art/generated/sprites/anim/priestess-die-32-preview.png b/art/generated/sprites/anim/priestess-die-32-preview.png new file mode 100644 index 0000000..53cbf33 Binary files /dev/null and b/art/generated/sprites/anim/priestess-die-32-preview.png differ diff --git a/art/generated/sprites/anim/priestess-die-32.png b/art/generated/sprites/anim/priestess-die-32.png new file mode 100644 index 0000000..e41c019 Binary files /dev/null and b/art/generated/sprites/anim/priestess-die-32.png differ diff --git a/art/generated/sprites/anim/priestess-die-64-preview.png b/art/generated/sprites/anim/priestess-die-64-preview.png new file mode 100644 index 0000000..edf4268 Binary files /dev/null and b/art/generated/sprites/anim/priestess-die-64-preview.png differ diff --git a/art/generated/sprites/anim/priestess-die-64.png b/art/generated/sprites/anim/priestess-die-64.png new file mode 100644 index 0000000..68540c9 Binary files /dev/null and b/art/generated/sprites/anim/priestess-die-64.png differ diff --git a/art/generated/sprites/anim/priestess-walk-32-preview.png b/art/generated/sprites/anim/priestess-walk-32-preview.png new file mode 100644 index 0000000..0e112e1 Binary files /dev/null and b/art/generated/sprites/anim/priestess-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/priestess-walk-32.png b/art/generated/sprites/anim/priestess-walk-32.png new file mode 100644 index 0000000..bef8212 Binary files /dev/null and b/art/generated/sprites/anim/priestess-walk-32.png differ diff --git a/art/generated/sprites/anim/priestess-walk-64-preview.png b/art/generated/sprites/anim/priestess-walk-64-preview.png new file mode 100644 index 0000000..5b0af0b Binary files /dev/null and b/art/generated/sprites/anim/priestess-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/priestess-walk-64.png b/art/generated/sprites/anim/priestess-walk-64.png new file mode 100644 index 0000000..8a36ed2 Binary files /dev/null and b/art/generated/sprites/anim/priestess-walk-64.png differ diff --git a/art/generated/sprites/anim/progress.json b/art/generated/sprites/anim/progress.json new file mode 100644 index 0000000..fcc0450 --- /dev/null +++ b/art/generated/sprites/anim/progress.json @@ -0,0 +1,357 @@ +{ + "cost_usd": 11.85, + "images": 79, + "price_per_image": 0.15, + "sheets": { + "archer-attack": { + "images": 2, + "note": "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", + "status": "accepted" + }, + "archer-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "archer-walk": { + "images": 1, + "note": "raw had 6 frames per row (0,1,3,4 used); drawn a bit wider than idle, bow thinner", + "status": "accepted" + }, + "bat-die": { + "images": 1, + "note": "good drop and splayed wings", + "status": "accepted" + }, + "bat-walk": { + "images": 2, + "note": "all 5 rows from the front raw; wing flap is subtle (back raw had a smeared middle row, unused)", + "status": "accepted" + }, + "battlemage-die": { + "images": 1, + "note": "good (hat falls off in the back view)", + "status": "accepted" + }, + "battlemage-walk": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "beetle-die": { + "images": 1, + "note": "good: tips over onto its back, legs up", + "status": "accepted" + }, + "beetle-walk": { + "images": 1, + "note": "legs barely visible (small steps); two stray antenna pixels above the front three-quarter frames 1 and 3", + "status": "accepted" + }, + "catapult-die": { + "images": 1, + "note": "the model drew a pale blue background (keyed out); in the back view frames 2-3 the wreck is drawn larger than the machine", + "status": "accepted" + }, + "catapult-walk": { + "images": 1, + "note": "the model drew a white background (keyed out); wheel turning not visible, the machine only rocks slightly; back three-quarter drawn smaller than idle", + "status": "accepted" + }, + "cavebear-die": { + "images": 1, + "note": "good; front view frame 1 a little smaller than the idle bear", + "status": "accepted" + }, + "cavebear-walk": { + "images": 1, + "note": "good four-legged gait; side view touches the cell edges", + "status": "accepted" + }, + "chainbreaker-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "chainbreaker-walk": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "cogling-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "cogling-walk": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "dwarf-attack": { + "images": 3, + "note": "back raw needed a retry (first one showed the face in the impact frames); back three-quarter impact frame from the back row", + "status": "accepted" + }, + "dwarf-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "dwarf-walk": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "fairy-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "fairy-walk": { + "images": 1, + "note": "wings drawn bigger than in idle; back 3/4 = 2 frames alternating (others showed the face)", + "status": "accepted" + }, + "gargoyle-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "gargoyle-walk": { + "images": 2, + "note": "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)", + "status": "accepted" + }, + "giant-die": { + "images": 1, + "note": "good (the club drops)", + "status": "accepted" + }, + "giant-walk": { + "images": 2, + "note": "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)", + "status": "accepted" + }, + "imp-die": { + "images": 1, + "note": "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", + "status": "accepted" + }, + "imp-walk": { + "images": 1, + "note": "front and front 3/4 rows: frames 0,1,2,1 (frame 4 of the raw was a back view)", + "status": "accepted" + }, + "inquisitor-die": { + "images": 1, + "note": "good: the holy book flies off; frame 1 wider than idle (arms flung out)", + "status": "accepted" + }, + "inquisitor-walk": { + "images": 1, + "note": "back three-quarter frames 0,1,2,1 (frame 4 was a straight back view)", + "status": "accepted" + }, + "jailer-die": { + "images": 1, + "note": "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)", + "status": "accepted" + }, + "jailer-walk": { + "images": 1, + "note": "drawn a little wider than idle; the dark grey skin against the near-black outline looks noisy (as in idle)", + "status": "accepted" + }, + "knight-attack": { + "images": 0, + "note": "pilot (see the pilot section)", + "status": "accepted" + }, + "knight-die": { + "images": 1, + "note": "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", + "status": "accepted" + }, + "knight-walk": { + "images": 0, + "note": "pilot (see the pilot section)", + "status": "accepted" + }, + "kobold-attack": { + "images": 0, + "note": "pilot (see the pilot section)", + "status": "accepted" + }, + "kobold-die": { + "images": 2, + "note": "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", + "status": "accepted" + }, + "kobold-walk": { + "images": 0, + "note": "pilot (see the pilot section)", + "status": "accepted" + }, + "mage-attack": { + "images": 2, + "note": "good: staff raised, thrust, a dark orb leaves the gem; back rows from the back raw", + "status": "accepted" + }, + "mage-die": { + "images": 1, + "note": "good (eyes closed, so the glowing eyes are gone)", + "status": "accepted" + }, + "mage-walk": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "monk-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "monk-walk": { + "images": 1, + "note": "wider than idle, fists lowered while walking (idle raises them)", + "status": "accepted" + }, + "ogre-attack": { + "images": 2, + "note": "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)", + "status": "accepted" + }, + "ogre-die": { + "images": 2, + "note": "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", + "status": "accepted" + }, + "ogre-walk": { + "images": 2, + "note": "back views from the back raw (the front raw had no back three-quarter row)", + "status": "accepted" + }, + "owl-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "owl-walk": { + "images": 1, + "note": "good flapping", + "status": "accepted" + }, + "paladin-attack": { + "images": 1, + "note": "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", + "status": "accepted" + }, + "paladin-die": { + "images": 1, + "note": "drawn bulkier than the slim idle paladin; the white/gold armour gets blotchy when lying; sword drops beside the body", + "status": "accepted" + }, + "paladin-walk": { + "images": 1, + "note": "drawn wider/stockier than idle; back 3/4 = 2 frames alternating (the row mixed front and back figures)", + "status": "accepted" + }, + "priest-die": { + "images": 1, + "note": "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", + "status": "accepted" + }, + "priest-walk": { + "images": 1, + "note": "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", + "status": "accepted" + }, + "priestess-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "priestess-walk": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "ram-die": { + "images": 1, + "note": "breaks into a heap of planks; frames 2-4 are the same sideways collapse in every view", + "status": "accepted" + }, + "ram-walk": { + "images": 2, + "note": "front view static (frame 1 x4: the other front frames were turned); back view from the back raw; wheel turning barely visible, slight rocking", + "status": "accepted" + }, + "ranger-die": { + "images": 1, + "note": "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", + "status": "accepted" + }, + "ranger-walk": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "revenant-die": { + "images": 1, + "note": "the lying skeleton is longer than the cell and is cut at the cell sides in frames 3-4", + "status": "accepted" + }, + "revenant-walk": { + "images": 1, + "note": "6 frames per row with mixed views, picks per row; small jitter", + "status": "accepted" + }, + "spider-attack": { + "images": 1, + "note": "raw had 6 rows; only the wind-up (front legs raised) reads clearly, the bite frames move little", + "status": "accepted" + }, + "spider-die": { + "images": 1, + "note": "back three-quarter = back view (as in idle); collapses with curled legs", + "status": "accepted" + }, + "spider-walk": { + "images": 1, + "note": "raw had 6 rows (an extra front three-quarter row turned left); back three-quarter = back view as in idle", + "status": "accepted" + }, + "thief-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "thief-walk": { + "images": 1, + "note": "raw had 5 frames per row (0,1,3,4 used); a little wider than idle", + "status": "accepted" + }, + "trader-die": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "trader-walk": { + "images": 1, + "note": "good", + "status": "accepted" + }, + "wyrm-die": { + "images": 1, + "note": "frame 1 shows the wyrm with wings spread, wider than the idle pose; lying frames are a sideways dragon in every view", + "status": "accepted" + }, + "wyrm-walk": { + "images": 2, + "note": "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)", + "status": "accepted" + } + } +} \ No newline at end of file diff --git a/art/generated/sprites/anim/ram-die-32-preview.png b/art/generated/sprites/anim/ram-die-32-preview.png new file mode 100644 index 0000000..09f1e44 Binary files /dev/null and b/art/generated/sprites/anim/ram-die-32-preview.png differ diff --git a/art/generated/sprites/anim/ram-die-32.png b/art/generated/sprites/anim/ram-die-32.png new file mode 100644 index 0000000..6e3a598 Binary files /dev/null and b/art/generated/sprites/anim/ram-die-32.png differ diff --git a/art/generated/sprites/anim/ram-die-64-preview.png b/art/generated/sprites/anim/ram-die-64-preview.png new file mode 100644 index 0000000..869ba12 Binary files /dev/null and b/art/generated/sprites/anim/ram-die-64-preview.png differ diff --git a/art/generated/sprites/anim/ram-die-64.png b/art/generated/sprites/anim/ram-die-64.png new file mode 100644 index 0000000..ed92b9d Binary files /dev/null and b/art/generated/sprites/anim/ram-die-64.png differ diff --git a/art/generated/sprites/anim/ram-walk-32-preview.png b/art/generated/sprites/anim/ram-walk-32-preview.png new file mode 100644 index 0000000..d1ee247 Binary files /dev/null and b/art/generated/sprites/anim/ram-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/ram-walk-32.png b/art/generated/sprites/anim/ram-walk-32.png new file mode 100644 index 0000000..6e74700 Binary files /dev/null and b/art/generated/sprites/anim/ram-walk-32.png differ diff --git a/art/generated/sprites/anim/ram-walk-64-preview.png b/art/generated/sprites/anim/ram-walk-64-preview.png new file mode 100644 index 0000000..3051d64 Binary files /dev/null and b/art/generated/sprites/anim/ram-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/ram-walk-64.png b/art/generated/sprites/anim/ram-walk-64.png new file mode 100644 index 0000000..ee4aa7a Binary files /dev/null and b/art/generated/sprites/anim/ram-walk-64.png differ diff --git a/art/generated/sprites/anim/ranger-die-32-preview.png b/art/generated/sprites/anim/ranger-die-32-preview.png new file mode 100644 index 0000000..e656722 Binary files /dev/null and b/art/generated/sprites/anim/ranger-die-32-preview.png differ diff --git a/art/generated/sprites/anim/ranger-die-32.png b/art/generated/sprites/anim/ranger-die-32.png new file mode 100644 index 0000000..9ba09bf Binary files /dev/null and b/art/generated/sprites/anim/ranger-die-32.png differ diff --git a/art/generated/sprites/anim/ranger-die-64-preview.png b/art/generated/sprites/anim/ranger-die-64-preview.png new file mode 100644 index 0000000..f5208a7 Binary files /dev/null and b/art/generated/sprites/anim/ranger-die-64-preview.png differ diff --git a/art/generated/sprites/anim/ranger-die-64.png b/art/generated/sprites/anim/ranger-die-64.png new file mode 100644 index 0000000..398ac2d Binary files /dev/null and b/art/generated/sprites/anim/ranger-die-64.png differ diff --git a/art/generated/sprites/anim/ranger-walk-32-preview.png b/art/generated/sprites/anim/ranger-walk-32-preview.png new file mode 100644 index 0000000..7da71c2 Binary files /dev/null and b/art/generated/sprites/anim/ranger-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/ranger-walk-32.png b/art/generated/sprites/anim/ranger-walk-32.png new file mode 100644 index 0000000..769f1e9 Binary files /dev/null and b/art/generated/sprites/anim/ranger-walk-32.png differ diff --git a/art/generated/sprites/anim/ranger-walk-64-preview.png b/art/generated/sprites/anim/ranger-walk-64-preview.png new file mode 100644 index 0000000..6ea4645 Binary files /dev/null and b/art/generated/sprites/anim/ranger-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/ranger-walk-64.png b/art/generated/sprites/anim/ranger-walk-64.png new file mode 100644 index 0000000..bf7711a Binary files /dev/null and b/art/generated/sprites/anim/ranger-walk-64.png differ diff --git a/art/generated/sprites/anim/revenant-die-32-preview.png b/art/generated/sprites/anim/revenant-die-32-preview.png new file mode 100644 index 0000000..3d9ab55 Binary files /dev/null and b/art/generated/sprites/anim/revenant-die-32-preview.png differ diff --git a/art/generated/sprites/anim/revenant-die-32.png b/art/generated/sprites/anim/revenant-die-32.png new file mode 100644 index 0000000..801cf0e Binary files /dev/null and b/art/generated/sprites/anim/revenant-die-32.png differ diff --git a/art/generated/sprites/anim/revenant-die-64-preview.png b/art/generated/sprites/anim/revenant-die-64-preview.png new file mode 100644 index 0000000..d66eb32 Binary files /dev/null and b/art/generated/sprites/anim/revenant-die-64-preview.png differ diff --git a/art/generated/sprites/anim/revenant-die-64.png b/art/generated/sprites/anim/revenant-die-64.png new file mode 100644 index 0000000..6b26a4d Binary files /dev/null and b/art/generated/sprites/anim/revenant-die-64.png differ diff --git a/art/generated/sprites/anim/revenant-walk-32-preview.png b/art/generated/sprites/anim/revenant-walk-32-preview.png new file mode 100644 index 0000000..cfdd422 Binary files /dev/null and b/art/generated/sprites/anim/revenant-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/revenant-walk-32.png b/art/generated/sprites/anim/revenant-walk-32.png new file mode 100644 index 0000000..96853a9 Binary files /dev/null and b/art/generated/sprites/anim/revenant-walk-32.png differ diff --git a/art/generated/sprites/anim/revenant-walk-64-preview.png b/art/generated/sprites/anim/revenant-walk-64-preview.png new file mode 100644 index 0000000..a0be0a2 Binary files /dev/null and b/art/generated/sprites/anim/revenant-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/revenant-walk-64.png b/art/generated/sprites/anim/revenant-walk-64.png new file mode 100644 index 0000000..3a71748 Binary files /dev/null and b/art/generated/sprites/anim/revenant-walk-64.png differ diff --git a/art/generated/sprites/anim/sheet-notes.txt b/art/generated/sprites/anim/sheet-notes.txt new file mode 100644 index 0000000..773c2e3 --- /dev/null +++ b/art/generated/sprites/anim/sheet-notes.txt @@ -0,0 +1,66 @@ +imp-walk|accepted|front and front 3/4 rows: frames 0,1,2,1 (frame 4 of the raw was a back view) +bat-walk|accepted|all 5 rows from the front raw; wing flap is subtle (back raw had a smeared middle row, unused) +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 +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 +mage-walk|accepted|good +priestess-walk|accepted|good +archer-walk|accepted|raw had 6 frames per row (0,1,3,4 used); drawn a bit wider than idle, bow thinner +dwarf-walk|accepted|good +revenant-walk|accepted|6 frames per row with mixed views, picks per row; small jitter +fairy-walk|accepted|wings drawn bigger than in idle; back 3/4 = 2 frames alternating (others showed the face) +owl-walk|accepted|good flapping +cogling-walk|accepted|good +battlemage-walk|accepted|good +paladin-walk|accepted|drawn wider/stockier than idle; back 3/4 = 2 frames alternating (the row mixed front and back figures) +thief-walk|accepted|raw had 5 frames per row (0,1,3,4 used); a little wider than idle +trader-walk|accepted|good +monk-walk|accepted|wider than idle, fists lowered while walking (idle raises them) +cavebear-walk|accepted|good four-legged gait; side view touches the cell edges +beetle-walk|accepted|legs barely visible (small steps); two stray antenna pixels above the front three-quarter frames 1 and 3 +ranger-walk|accepted|good +inquisitor-walk|accepted|back three-quarter frames 0,1,2,1 (frame 4 was a straight back view) +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 +spider-die|accepted|back three-quarter = back view (as in idle); collapses with curled legs +priestess-die|accepted|good +bat-die|accepted|good drop and splayed wings +gargoyle-die|accepted|good +paladin-die|accepted|drawn bulkier than the slim idle paladin; the white/gold armour gets blotchy when lying; sword drops beside the body +chainbreaker-die|accepted|good +mage-die|accepted|good (eyes closed, so the glowing eyes are gone) +revenant-die|accepted|the lying skeleton is longer than the cell and is cut at the cell sides in frames 3-4 +cogling-die|accepted|good +fairy-die|accepted|good +owl-die|accepted|good +spider-walk|accepted|raw had 6 rows (an extra front three-quarter row turned left); back three-quarter = back view as in idle +chainbreaker-walk|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) +archer-die|accepted|good +dwarf-die|accepted|good +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 +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 +monk-die|accepted|good +giant-die|accepted|good (the club drops) +trader-die|accepted|good +thief-die|accepted|good +cavebear-die|accepted|good; front view frame 1 a little smaller than the idle bear +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 +mage-attack|accepted|good: staff raised, thrust, a dark orb leaves the gem; back rows from the back raw +ogre-walk|accepted|back views from the back raw (the front raw had no back three-quarter row) +jailer-walk|accepted|drawn a little wider than idle; the dark grey skin against the near-black outline looks noisy (as in idle) +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) +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 +battlemage-die|accepted|good (hat falls off in the back view) +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 +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) +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 +spider-attack|accepted|raw had 6 rows; only the wind-up (front legs raised) reads clearly, the bite frames move little +ram-die|accepted|breaks into a heap of planks; frames 2-4 are the same sideways collapse in every view +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 +beetle-die|accepted|good: tips over onto its back, legs up +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 +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 +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 +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) +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 +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) +inquisitor-die|accepted|good: the holy book flies off; frame 1 wider than idle (arms flung out) diff --git a/art/generated/sprites/anim/spider-attack-32-preview.png b/art/generated/sprites/anim/spider-attack-32-preview.png new file mode 100644 index 0000000..aed6935 Binary files /dev/null and b/art/generated/sprites/anim/spider-attack-32-preview.png differ diff --git a/art/generated/sprites/anim/spider-attack-32.png b/art/generated/sprites/anim/spider-attack-32.png new file mode 100644 index 0000000..3a76a17 Binary files /dev/null and b/art/generated/sprites/anim/spider-attack-32.png differ diff --git a/art/generated/sprites/anim/spider-attack-64-preview.png b/art/generated/sprites/anim/spider-attack-64-preview.png new file mode 100644 index 0000000..92b0f8c Binary files /dev/null and b/art/generated/sprites/anim/spider-attack-64-preview.png differ diff --git a/art/generated/sprites/anim/spider-attack-64.png b/art/generated/sprites/anim/spider-attack-64.png new file mode 100644 index 0000000..b67b5be Binary files /dev/null and b/art/generated/sprites/anim/spider-attack-64.png differ diff --git a/art/generated/sprites/anim/spider-die-32-preview.png b/art/generated/sprites/anim/spider-die-32-preview.png new file mode 100644 index 0000000..735446d Binary files /dev/null and b/art/generated/sprites/anim/spider-die-32-preview.png differ diff --git a/art/generated/sprites/anim/spider-die-32.png b/art/generated/sprites/anim/spider-die-32.png new file mode 100644 index 0000000..c2da6f8 Binary files /dev/null and b/art/generated/sprites/anim/spider-die-32.png differ diff --git a/art/generated/sprites/anim/spider-die-64-preview.png b/art/generated/sprites/anim/spider-die-64-preview.png new file mode 100644 index 0000000..1b331e4 Binary files /dev/null and b/art/generated/sprites/anim/spider-die-64-preview.png differ diff --git a/art/generated/sprites/anim/spider-die-64.png b/art/generated/sprites/anim/spider-die-64.png new file mode 100644 index 0000000..7f117d7 Binary files /dev/null and b/art/generated/sprites/anim/spider-die-64.png differ diff --git a/art/generated/sprites/anim/spider-walk-32-preview.png b/art/generated/sprites/anim/spider-walk-32-preview.png new file mode 100644 index 0000000..459bee8 Binary files /dev/null and b/art/generated/sprites/anim/spider-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/spider-walk-32.png b/art/generated/sprites/anim/spider-walk-32.png new file mode 100644 index 0000000..42d92cd Binary files /dev/null and b/art/generated/sprites/anim/spider-walk-32.png differ diff --git a/art/generated/sprites/anim/spider-walk-64-preview.png b/art/generated/sprites/anim/spider-walk-64-preview.png new file mode 100644 index 0000000..e97ac6a Binary files /dev/null and b/art/generated/sprites/anim/spider-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/spider-walk-64.png b/art/generated/sprites/anim/spider-walk-64.png new file mode 100644 index 0000000..e552258 Binary files /dev/null and b/art/generated/sprites/anim/spider-walk-64.png differ diff --git a/art/generated/sprites/anim/thief-die-32-preview.png b/art/generated/sprites/anim/thief-die-32-preview.png new file mode 100644 index 0000000..fb34cd4 Binary files /dev/null and b/art/generated/sprites/anim/thief-die-32-preview.png differ diff --git a/art/generated/sprites/anim/thief-die-32.png b/art/generated/sprites/anim/thief-die-32.png new file mode 100644 index 0000000..a05b66b Binary files /dev/null and b/art/generated/sprites/anim/thief-die-32.png differ diff --git a/art/generated/sprites/anim/thief-die-64-preview.png b/art/generated/sprites/anim/thief-die-64-preview.png new file mode 100644 index 0000000..aa229d8 Binary files /dev/null and b/art/generated/sprites/anim/thief-die-64-preview.png differ diff --git a/art/generated/sprites/anim/thief-die-64.png b/art/generated/sprites/anim/thief-die-64.png new file mode 100644 index 0000000..31afb70 Binary files /dev/null and b/art/generated/sprites/anim/thief-die-64.png differ diff --git a/art/generated/sprites/anim/thief-walk-32-preview.png b/art/generated/sprites/anim/thief-walk-32-preview.png new file mode 100644 index 0000000..17bd2ca Binary files /dev/null and b/art/generated/sprites/anim/thief-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/thief-walk-32.png b/art/generated/sprites/anim/thief-walk-32.png new file mode 100644 index 0000000..a434421 Binary files /dev/null and b/art/generated/sprites/anim/thief-walk-32.png differ diff --git a/art/generated/sprites/anim/thief-walk-64-preview.png b/art/generated/sprites/anim/thief-walk-64-preview.png new file mode 100644 index 0000000..76348b8 Binary files /dev/null and b/art/generated/sprites/anim/thief-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/thief-walk-64.png b/art/generated/sprites/anim/thief-walk-64.png new file mode 100644 index 0000000..e15c6d8 Binary files /dev/null and b/art/generated/sprites/anim/thief-walk-64.png differ diff --git a/art/generated/sprites/anim/trader-die-32-preview.png b/art/generated/sprites/anim/trader-die-32-preview.png new file mode 100644 index 0000000..7dc8c90 Binary files /dev/null and b/art/generated/sprites/anim/trader-die-32-preview.png differ diff --git a/art/generated/sprites/anim/trader-die-32.png b/art/generated/sprites/anim/trader-die-32.png new file mode 100644 index 0000000..396744b Binary files /dev/null and b/art/generated/sprites/anim/trader-die-32.png differ diff --git a/art/generated/sprites/anim/trader-die-64-preview.png b/art/generated/sprites/anim/trader-die-64-preview.png new file mode 100644 index 0000000..0b8b525 Binary files /dev/null and b/art/generated/sprites/anim/trader-die-64-preview.png differ diff --git a/art/generated/sprites/anim/trader-die-64.png b/art/generated/sprites/anim/trader-die-64.png new file mode 100644 index 0000000..34270f1 Binary files /dev/null and b/art/generated/sprites/anim/trader-die-64.png differ diff --git a/art/generated/sprites/anim/trader-walk-32-preview.png b/art/generated/sprites/anim/trader-walk-32-preview.png new file mode 100644 index 0000000..e322442 Binary files /dev/null and b/art/generated/sprites/anim/trader-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/trader-walk-32.png b/art/generated/sprites/anim/trader-walk-32.png new file mode 100644 index 0000000..c30a068 Binary files /dev/null and b/art/generated/sprites/anim/trader-walk-32.png differ diff --git a/art/generated/sprites/anim/trader-walk-64-preview.png b/art/generated/sprites/anim/trader-walk-64-preview.png new file mode 100644 index 0000000..d5c54fc Binary files /dev/null and b/art/generated/sprites/anim/trader-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/trader-walk-64.png b/art/generated/sprites/anim/trader-walk-64.png new file mode 100644 index 0000000..bed0d91 Binary files /dev/null and b/art/generated/sprites/anim/trader-walk-64.png differ diff --git a/art/generated/sprites/anim/wyrm-die-32-preview.png b/art/generated/sprites/anim/wyrm-die-32-preview.png new file mode 100644 index 0000000..2faf60f Binary files /dev/null and b/art/generated/sprites/anim/wyrm-die-32-preview.png differ diff --git a/art/generated/sprites/anim/wyrm-die-32.png b/art/generated/sprites/anim/wyrm-die-32.png new file mode 100644 index 0000000..ef7bbf0 Binary files /dev/null and b/art/generated/sprites/anim/wyrm-die-32.png differ diff --git a/art/generated/sprites/anim/wyrm-die-64-preview.png b/art/generated/sprites/anim/wyrm-die-64-preview.png new file mode 100644 index 0000000..7f5f561 Binary files /dev/null and b/art/generated/sprites/anim/wyrm-die-64-preview.png differ diff --git a/art/generated/sprites/anim/wyrm-die-64.png b/art/generated/sprites/anim/wyrm-die-64.png new file mode 100644 index 0000000..c5c12d4 Binary files /dev/null and b/art/generated/sprites/anim/wyrm-die-64.png differ diff --git a/art/generated/sprites/anim/wyrm-walk-32-preview.png b/art/generated/sprites/anim/wyrm-walk-32-preview.png new file mode 100644 index 0000000..413cb19 Binary files /dev/null and b/art/generated/sprites/anim/wyrm-walk-32-preview.png differ diff --git a/art/generated/sprites/anim/wyrm-walk-32.png b/art/generated/sprites/anim/wyrm-walk-32.png new file mode 100644 index 0000000..e93b337 Binary files /dev/null and b/art/generated/sprites/anim/wyrm-walk-32.png differ diff --git a/art/generated/sprites/anim/wyrm-walk-64-preview.png b/art/generated/sprites/anim/wyrm-walk-64-preview.png new file mode 100644 index 0000000..64a3b2d Binary files /dev/null and b/art/generated/sprites/anim/wyrm-walk-64-preview.png differ diff --git a/art/generated/sprites/anim/wyrm-walk-64.png b/art/generated/sprites/anim/wyrm-walk-64.png new file mode 100644 index 0000000..0c3281f Binary files /dev/null and b/art/generated/sprites/anim/wyrm-walk-64.png differ diff --git a/art/generated/sprites/scripts/anim_manifest.py b/art/generated/sprites/scripts/anim_manifest.py new file mode 100644 index 0000000..5cd32d2 --- /dev/null +++ b/art/generated/sprites/scripts/anim_manifest.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +"""anim_manifest.py NOTES: write anim/manifest.json (accepted animations per creature) and the +per-sheet status/notes into anim/progress.json. NOTES lines: -|accepted|skipped|note""" +import json, os, sys +HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, HERE) +from make_anim import BY_ID, ANIM, update_progress # noqa: E402 + +ORDER = ["imp"] + [c for c in BY_ID if c != "imp"] +notes = {} +for line in open(sys.argv[1]): + if line.strip(): + sheet, status, note = line.rstrip("\n").split("|", 2) + notes[sheet] = (status, note) +# the pilot sheets +for s in ("knight-walk", "knight-attack", "kobold-walk", "kobold-attack"): + notes.setdefault(s, ("accepted", "pilot (see the pilot section)")) +man = [] +for cid in ORDER: + anims = [a for a in ("walk", "die", "attack") + if notes.get(f"{cid}-{a}", ("",))[0] == "accepted" and os.path.exists(os.path.join(ANIM, f"{cid}-{a}-32.png"))] + man.append({"id": cid, "kind": BY_ID[cid]["kind"], "anims": anims}) +json.dump(man, open(os.path.join(ANIM, "manifest.json"), "w"), indent=1) + + +def f(d): + for sheet, (status, note) in notes.items(): + e = d["sheets"].setdefault(sheet, {"images": 0}) + e["status"], e["note"] = status, note + for sheet, e in d["sheets"].items(): + if e.get("status") == "generating": + e["status"] = "unreviewed" +update_progress(f) +print(sum(len(m["anims"]) for m in man), "sheets in the manifest") diff --git a/art/generated/sprites/scripts/make_anim.py b/art/generated/sprites/scripts/make_anim.py index e9e3dae..ccfe1f8 100644 --- a/art/generated/sprites/scripts/make_anim.py +++ b/art/generated/sprites/scripts/make_anim.py @@ -18,7 +18,7 @@ figures' "core" height (the body without thin weapon parts sticking out above or core()) is the median core height of the matching idle view; each frame is then shifted so that its core bottom sits on the feet row and its core centre on the idle view's core centre. """ -import argparse, base64, io, json, os, statistics, subprocess, sys, urllib.request +import argparse, base64, io, json, os, statistics, subprocess, sys, time, urllib.error, urllib.request from PIL import Image @@ -29,9 +29,24 @@ ROOT = os.path.normpath(os.path.join(SPR, "..", "..", "..")) TOOL = os.path.join(ROOT, "tools", "pixelize_sprite.py") sys.path.insert(0, HERE) sys.path.insert(0, os.path.join(ROOT, "tools")) -from creatures import BY_ID, GREEN # noqa: E402 +from creatures import BY_ID as _BY_ID, GREEN, HOVER, SIEGE # noqa: E402 import pixelize_sprite as ps # noqa: E402 +# the imp (kind Worker) has its own folder: raw = the lower row of imp-sprite/raw-1.png +IMP_DIR = os.path.normpath(os.path.join(SPR, "..", "imp-sprite")) +BY_ID = dict(_BY_ID) +BY_ID["imp"] = dict(id="imp", kind="Worker", name="Pit Imp", + desc="A small goblin-like worker demon: short and stocky, big head, oversized pointed ears and two small black horns, orange skin, glowing yellow eyes, a wide mischievous grin with tiny fangs, a ragged dark-red tunic with a rope belt, bare feet with claws, a small iron pickaxe with a wooden handle carried over its right shoulder. Thin tail.") +QUAD = {"spider", "cavebear", "beetle"} +PROGRESS = os.path.join(ANIM, "progress.json") + + +def idle_sheet(cid, size): + if cid == "imp": + return os.path.join(IMP_DIR, f"imp-{size}.png") + return os.path.join(SPR, f"{cid}-{size}.png") + + VIEWS = ["front", "front three-quarter", "side", "back three-quarter", "back"] SIZES = ((32, 31), (64, 63)) # cell size, feet row @@ -40,6 +55,24 @@ SIZES = ((32, 31), (64, 63)) # cell size, feet row WEAPON = { "knight": "the same short straight steel sword in the right hand", "kobold": "the same wooden spear with the steel tip in the right hand", + "imp": "the same small iron pickaxe over the right shoulder", + "mage": "the same wooden staff with the glowing yellow gem in the right hand", + "archer": "the same wooden bow in the left hand", + "dwarf": "the same steel pickaxe with the wooden handle in the right hand", + "paladin": "the same white holy sword with the golden hilt in the right hand", + "jailer": "the same coiled iron chain in the right hand", + "priestess": "the same small fireball above the right hand", + "chainbreaker": "the same steel battle axe in each hand", + "gargoyle": "the same iron chain around one arm", + "cogling": "the same steel hammer in the right hand", + "revenant": "the same rusty steel sword in the right hand", + "giant": "the same big wooden tree-trunk club in the right hand", + "battlemage": "the same wooden staff with the burning flame on top in the right hand", + "trader": "the same big backpack and the small glowing lantern in the right hand", + "thief": "the same short steel dagger in the right hand and the sack of gold on the back", + "ranger": "the same wooden bow in the left hand", + "inquisitor": "the same glowing yellow holy book in both hands", + "priest": "the same golden halo floating above the head", } ATTACK = { "knight": dict( @@ -63,11 +96,139 @@ ATTACK = { "impact - the spear fully thrust forward, arms stretched out, the spear hidden by the body except a short piece of shaft, a small white spark at the tip beyond the head", "recover - the spear pulled back to the ready position, the shaft visible beside the body"]), } +ATTACK.update({ + "ogre": dict( + what="a fist smash: the ogre raises both huge stone fists high and slams them down on an enemy in front of it", + front=["wind-up - both fists raised high above the head, body leaning back", + "strike - the fists coming down in front of the face, body bending forward", + "impact - the fists smashed down low in front of the feet, body bent forward, a few small grey stone chips flying", + "recover - straightening up, the arms hanging low and ready"], + back=["wind-up - both fists raised high above the head, seen from behind", + "strike - the fists coming down in front, the arms partly hidden by the head and shoulders", + "impact - bent forward, the fists down in front hidden by the body, the broad back hunched", + "recover - straightening up, the arms hanging low at the sides"]), + "spider": dict( + what="a pouncing bite: the spider rears up on its back legs, raises its front legs and lunges forward to bite an enemy in front of it with its fangs", + front=["wind-up - the front of the body reared up, the two front legs raised high, fangs open", + "strike - lunging forward and down, the front legs reaching forward", + "impact - the body pressed low and forward, fangs biting, the front legs stabbing down", + "recover - pulling back to the normal low stance, all eight legs on the ground"], + back=["wind-up - the front of the body reared up, the two front legs raised high above the round back", + "strike - lunging forward away from the viewer, the front legs reaching forward", + "impact - the body pressed low and forward, the round back seen from behind", + "recover - back in the normal low stance, all eight legs on the ground"]), + "mage": dict( + what="casting a shadow bolt: the mage raises the staff and thrusts it forward, the gem flashing and a small purple-black orb of shadow magic shooting from it", + front=["wind-up - the staff raised high and drawn back, the gem glowing brighter, the free hand raised", + "strike - the staff swung forward and pointed at the enemy, a small dark-purple magic orb forming at the gem", + "impact - the staff thrust forward, the small purple orb leaving the gem with a few sparks", + "recover - the staff pulled back upright, the gem glow fading"], + back=["wind-up - the staff raised high above the hood, the gem glowing", + "strike - the staff swung forward away from the viewer, mostly hidden by the hood, a purple glow beyond", + "impact - the staff thrust forward, hidden by the body except its upper end, a small purple orb beyond", + "recover - the staff pulled back upright beside the body"]), + "archer": dict( + what="shooting an arrow: the archer raises the bow, draws an arrow from the quiver, pulls the string back and shoots forward", + front=["wind-up - drawing an arrow from the quiver on the back with the right hand, the bow lowered in the left hand", + "strike - the bow raised and held out forward, the arrow nocked, the string pulled back to the cheek", + "impact - the arrow just released, the string snapped forward, the bow still raised", + "recover - the bow lowered back to the upright idle position"], + back=["wind-up - reaching to the quiver on the back with the right hand", + "strike - the bow raised forward away from the viewer, the right elbow pulled back drawing the string", + "impact - the arrow released, the bow held out forward, the right arm relaxed", + "recover - the bow lowered back to the upright idle position"]), + "dwarf": dict( + what="a pickaxe blow: the dwarf swings the pickaxe from over the right shoulder down in front of it onto an enemy", + front=["wind-up - the pickaxe raised high over the right shoulder with both hands, body leaning back", + "strike - the pickaxe swinging down over the helmet", + "impact - the pickaxe head struck down low in front of the feet, body bent forward, a few small sparks", + "recover - the pickaxe lifted back onto the right shoulder"], + back=["wind-up - the pickaxe raised high over the right shoulder, its head showing above the helmet", + "strike - the pickaxe coming down, partly hidden by the helmet and shoulders", + "impact - bent forward, the pickaxe down in front hidden by the body, only the handle end shows", + "recover - the pickaxe lifted back onto the right shoulder"]), + "paladin": dict( + what="a holy sword swing: the paladin swings the white sword with both hands from high over the right shoulder diagonally down across the body at an enemy in front of it, the blade glowing", + front=["wind-up - the sword raised high over the right shoulder with both hands, the blade pointing up and back, glowing", + "strike - the glowing sword swinging down diagonally in front of the helmet", + "impact - the sword fully swung through, the blade low in front of the body at the left hip, a small golden spark", + "recover - the sword raised back to the upright ready position"], + back=["wind-up - the sword raised high over the right shoulder, the blade showing above the helmet", + "strike - the sword coming down, partly hidden by the helmet and shoulders", + "impact - the sword in front of the paladin, mostly hidden by the body, only the blade tip shows low at the left side", + "recover - the sword raised back up, its blade visible beside the right shoulder"]), +}) + WALK_FRONT = ["contact - the right leg stepping forward with the heel down, the left leg behind, arms swinging opposite to the legs", "passing - the legs passing each other under the body, the body slightly higher", "contact - the left leg stepping forward with the heel down, the right leg behind, arms swinging the other way", "passing - the legs passing each other under the body, the body slightly higher"] WALK_BACK = WALK_FRONT +HOVER_FRAMES = ["upstroke - the wings raised straight up high above the head, the wing tips pointing up, the body at its highest point", + "downstroke - the wings swept out level to the sides, fully spread", + "down - the wings pulled down below the body, the wing tips pointing down, the body at its lowest point", + "recovery - the wings half raised and folded a little, swinging back up"] +SIEGE_FRAMES = ["the wheels in their start position, the spokes or wheel marks at 0 degrees", + "the wheels turned a quarter turn further (the wheel marks visibly rotated)", + "the wheels turned another quarter turn", + "the wheels turned another quarter turn, the machine rocking slightly"] +QUAD_FRAMES = { + "spider": ["legs 1 and 3 on the left and 2 and 4 on the right stepping forward, the others pushing back", + "the legs passing, the body slightly raised", + "the other set of legs stepping forward", + "the legs passing, the body slightly raised"], + "beetle": ["the front and back legs on the left and the middle leg on the right stepping forward", + "the legs passing under the shell, the body slightly raised", + "the other three legs stepping forward", + "the legs passing under the shell, the body slightly raised"], + "cavebear": ["the right front paw and the left hind paw stepping forward, the head low", + "the paws passing under the body, the shaggy body slightly raised", + "the left front paw and the right hind paw stepping forward", + "the paws passing under the body, the shaggy body slightly raised"], +} +DIE = { + # (what, front frames, back frames) + "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", + ["hit - recoiling from the blow, still standing upright on both feet, head thrown back, eyes shut in pain, arms flung out", + "falling - tipping over backwards, the knees buckling, the arms flailing", + "hitting the ground - landing on its back, the body flat and low, limbs bouncing up a little", + "lying still - lying flat on its back on the ground, limbs limp, eyes closed or crossed out, motionless"], + ["hit - recoiling from the blow, still standing upright on both feet, the head thrown back towards the viewer, arms flung out", + "falling - tipping over backwards towards the viewer, the knees buckling", + "hitting the ground - landing on its back, the body flat and low on the ground", + "lying still - lying flat on its back on the ground, motionless"]), + "quad": ("a death: the creature is struck by a fatal blow, staggers, collapses and rolls over onto its side where it lies still - the same way in every view", + ["hit - recoiling from the blow, still standing on all its legs, flinching back, eyes shut in pain", + "falling - the legs giving way, the body collapsing and tipping over sideways", + "hitting the ground - crashing down onto its side, the legs in the air", + "lying still - lying on its side or back, the legs curled up and limp, motionless"], + ["hit - recoiling from the blow, still standing on all its legs, flinching", + "falling - the legs giving way, the body collapsing and tipping over sideways", + "hitting the ground - crashing down onto its side, the legs in the air", + "lying still - lying on its side or back, the legs curled up and limp, motionless"]), + "hover": ("a death: the flying creature is struck by a fatal blow, its wings fail and it drops out of the air to the ground, where it lies still", + ["hit - recoiling in the air from the blow, wings jerked up, eyes shut in pain", + "falling - dropping down, the wings folding and limp, the body tumbling", + "hitting the ground - crashing onto the ground on its back, the wings splayed", + "lying still - lying on the ground with the wings spread flat and limp, eyes closed or crossed out, motionless"], + ["hit - recoiling in the air from the blow, wings jerked up", + "falling - dropping down, the wings folding and limp", + "hitting the ground - crashing onto the ground, the wings splayed", + "lying still - lying on the ground with the wings spread flat and limp, motionless"]), + "siege": ("its destruction: the machine is smashed - planks crack and splinter, a wheel breaks off, and it collapses into a heap of broken wood", + ["hit - the machine jolted by a heavy blow, cracks in the planks, a few wood splinters flying, still standing on its wheels", + "breaking - a front wheel breaking off, the frame tilting and sagging, planks coming loose", + "collapsing - the frame crashing down, the roof or arm broken, planks and wheels falling apart", + "wreck - a low flat heap of broken planks, beams and a loose wheel on the ground, motionless"], + ["hit - the machine jolted by a heavy blow, cracks in the planks, still standing on its wheels", + "breaking - a wheel breaking off, the frame tilting and sagging", + "collapsing - the frame crashing down, planks and wheels falling apart", + "wreck - a low flat heap of broken planks, beams and a loose wheel on the ground, motionless"]), +} + + +def kind_of(cid): + return "siege" if cid in SIEGE else "hover" if cid in HOVER else "quad" if cid in QUAD else "biped" def bg_of(cid): @@ -77,11 +238,27 @@ def bg_of(cid): def anim_text(cid, anim, part): c = BY_ID[cid] weapon = WEAPON.get(cid, "") + name = c['name'].lower() + k = kind_of(cid) if anim == "walk": - what = f"a looping walk cycle: the {c['name'].lower()} walks forward in the direction it faces, at a steady pace" + ( - f", carrying {weapon} as in the idle pose" if weapon else "") - frames = WALK_FRONT if part == "front" else WALK_BACK - feet = "The figure walks in place (it does not move across the cell); the feet stand on the baseline of the row." + if k == "hover": + what = f"a looping hovering flight cycle: the {name} hovers in place in the air, flapping its wings" + frames = HOVER_FRAMES + feet = "The creature stays in the middle of its cell (it does not fly across the cell); the wings flap with big, clearly different wing positions in the four frames and the body bobs up and down a little." + elif k == "siege": + what = f"rolling forward: the {name} rolls forward in the direction it faces, its wooden wheels turning" + frames = SIEGE_FRAMES + feet = "The machine rolls in place (it does not move across the cell); the wheels stand on the baseline of the row and visibly turn from frame to frame." + else: + what = f"a looping walk cycle: the {name} walks forward in the direction it faces, at a steady pace" + ( + f", carrying {weapon} as in the idle pose" if weapon else "") + frames = QUAD_FRAMES.get(cid) or (WALK_FRONT if part == "front" else WALK_BACK) + feet = "The figure walks in place (it does not move across the cell); the feet stand on the baseline of the row." + elif anim == "die": + what, ff, bf = DIE[k] + frames = ff if part == "front" else bf + feet = ("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.") else: a = ATTACK[cid] what = a["what"] @@ -95,7 +272,12 @@ def prompt_front(cid, anim): c = BY_ID[cid] bgname, _ = bg_of(cid) what, cols, feet = anim_text(cid, anim, "front") - hold = f"the character holds {WEAPON[cid]}" if cid in WEAPON else "the character keeps all its equipment" + if anim == "die": + hold = "the character keeps its clothes and equipment (a held weapon may drop beside it in frames 3-4)" + if cid in SIEGE: + hold = "the machine keeps its colours and materials even when broken" + else: + hold = f"the character keeps {WEAPON[cid]}" if cid in WEAPON else "the character keeps all its equipment" return f"""The attached image is a pixel art sprite sheet of the "{c['name']}" in five views (left to right: front, front three-quarter turned right, side facing right, back three-quarter turned away to the right, back). {c['desc']} Create a new pixel art sprite sheet of exactly the same character - same proportions, colours, outline, pixel size, clothes and equipment - showing {what}. @@ -104,7 +286,7 @@ Layout: a grid of 5 rows and 4 columns, every figure the same size, evenly space Rows (one view per row, top to bottom): 1 front view facing the viewer, 2 front three-quarter view turned to the right, 3 side view facing right, 4 back three-quarter view turned away to the right, 5 back view. Columns (animation frames, left to right): {cols}. {feet} -Every frame of a row keeps exactly that row's view direction (the side view row stays in profile facing right in all four frames, the back rows never show the face), and {hold} in every single frame. +Every frame of a row keeps exactly that row's view direction (the side view row stays in profile facing right in all four frames{", also when falling" if anim == "die" else ""}, the back rows never show the face), and {hold} in every single frame. Style: identical to the attached sheet - crisp retro pixel art, hard square pixels, one-pixel near-black outline, limited palette, no anti-aliasing, no blur. Flat pure {bgname} background everywhere, no ground, no shadows, no text, no labels, no frame lines, no grid lines, no motion lines.""" @@ -165,15 +347,62 @@ def fal(prompt, images, aspect): "resolution": "2K", "num_images": 1, "output_format": "png"} req = urllib.request.Request("https://fal.run/fal-ai/nano-banana-pro/edit", data=json.dumps(body).encode(), headers={"Authorization": "Key " + key, "Content-Type": "application/json"}) - with urllib.request.urlopen(req, timeout=900) as r: - res = json.load(r) + + for attempt in range(5): + try: + with urllib.request.urlopen(req, timeout=900) as r: + res = json.load(r) + break + except urllib.error.HTTPError as e: + msg = e.read().decode(errors="replace")[:500] + if e.code in (429, 500, 502, 503, 504) and attempt < 4: + print(f" HTTP {e.code}, retrying in {60 * (attempt + 1)} s") + time.sleep(60 * (attempt + 1)) + continue + raise SystemExit(f"HTTP {e.code}: {msg}") + except (urllib.error.URLError, ConnectionError, TimeoutError) as e: + if attempt < 4: + print(f" {e}, retrying in {60 * (attempt + 1)} s") + time.sleep(60 * (attempt + 1)) + continue + raise + count_image() with urllib.request.urlopen(res["images"][0]["url"], timeout=300) as r: return Image.open(io.BytesIO(r.read())).convert("RGB") +def update_progress(fn): + """Apply fn(dict) to progress.json under a file lock.""" + import fcntl + os.makedirs(ANIM, exist_ok=True) + with open(PROGRESS + ".lock", "w") as lk: + fcntl.flock(lk, fcntl.LOCK_EX) + d = json.load(open(PROGRESS)) if os.path.exists(PROGRESS) else {"images": 0, "price_per_image": 0.15, "sheets": {}} + fn(d) + d["cost_usd"] = round(d["images"] * d.get("price_per_image", 0.15), 2) + tmp = PROGRESS + ".tmp" + json.dump(d, open(tmp, "w"), indent=1, sort_keys=True) + os.replace(tmp, PROGRESS) + + +CURRENT = {} + + +def count_image(): + def f(d): + d["images"] += 1 + sh = d["sheets"].setdefault(CURRENT.get("sheet", "?"), {"status": "generating", "images": 0}) + sh["images"] = sh.get("images", 0) + 1 + update_progress(f) + + def idle_ref(cid): - raw = Image.open(os.path.join(SPR, f"{cid}-raw.png")).convert("RGB") - f = idle_crop(cid) + if cid == "imp": + raw = Image.open(os.path.join(IMP_DIR, "raw-1.png")).convert("RGB") + f = [0, 0.27, 1, 0.72] + else: + raw = Image.open(os.path.join(SPR, f"{cid}-raw.png")).convert("RGB") + f = idle_crop(cid) if f: w, h = raw.size raw = raw.crop((int(f[0] * w), int(f[1] * h), int(f[2] * w), int(f[3] * h))) @@ -188,14 +417,24 @@ def row_bands(img, n): mask = [[not v for v in r] for r in ps.background_mask(img)] occ = [sum(r) for r in mask] h = len(occ) - bands, y0 = [], None + raw, y0 = [], None for y, v in enumerate(occ + [0]): if v > 2 and y0 is None: y0 = y elif v <= 2 and y0 is not None: - if y - y0 > 0.06 * h: - bands.append((y0, y)) + raw.append((y0, y)) y0 = None + # bands lower than 6% of the image (a halo or sparkles floating above a row, specks) belong + # to the next band (the last one to the previous band) + bands, pend = [], None + for b in raw: + if b[1] - b[0] > 0.06 * h: + bands.append((pend if pend is not None else b[0], b[1])) + pend = None + elif pend is None: + pend = b[0] + if pend is not None and bands: + bands[-1] = (bands[-1][0], h) if len(bands) == n: # widen to the midpoints of the gaps cuts = [0] + [(bands[i][1] + bands[i + 1][0]) // 2 for i in range(n - 1)] + [h] @@ -212,6 +451,7 @@ def row_bands(img, n): def cmd_gen(a): os.makedirs(ANIM, exist_ok=True) + CURRENT["sheet"] = f"{a.id}-{a.anim}" ref = idle_ref(a.id) front = os.path.join(ANIM, f"{a.id}-{a.anim}-front-raw{a.suffix}.png") if a.part in ("front", "both"): @@ -309,18 +549,76 @@ def shift(cell, dx, dy): return out, lost -def pix_source(raw_crop, n, target, size, feet, palette, add): - """All n figures of one raw row, at the step that makes their median core height = target.""" +def pix_source(raw_crop, n, target, size, feet, palette, add, ref=None): + """All n figures of one raw row, at the step that makes their median core height = target + (ref = a figure index: only that figure's core height counts, for die rows whose later + frames lie on the ground). Also returns each figure's horizontal offset in source pixels + from the centre of its equal column (the tool centres every figure in its cell; die rows + need the original positions back).""" step = None for _ in range(4): # the core height is linear in 1/step; converge in a few passes sheet, used = run_tool(raw_crop, n, size, feet, step, palette, add) - hs = [c[1] - c[0] for c in (core(x, size) for x in cells(sheet, size, 0)) if c] + cs = [core(x, size) for x in cells(sheet, size, 0)] + hs = [c[1] - c[0] for c in ([cs[ref]] if ref is not None else cs) if c] new = used * statistics.median(hs) / target if step and abs(new - step) / step < 0.01: break step = new sheet, used = run_tool(raw_crop, n, size, feet, step, palette, add) - return cells(sheet, size, 0), used + offs = [0.0] * n + try: + _, boxes = ps.figure_boxes(raw_crop.convert("RGB"), 1, n) + if len(boxes) == n: + col = raw_crop.width / n + offs = [(b[0] + b[2]) / 2 - (i + 0.5) * col for i, b in enumerate(boxes)] + except Exception as e: # noqa: BLE001 + print(" note: no figure offsets:", e) + return cells(sheet, size, 0), used, offs + + +def bbox(cell): + b = cell.getchannel("A").point(lambda v: 255 if v > 128 else 0).getbbox() + return b + + +def strip_lines(img, key): + """Paint dark horizontal lines across nearly the whole image (ground lines, row separators + the model drew despite the prompt; at most 12 px thick) in the key colour. Wide dark + figure parts (a row of spider legs) are not lines: they are thicker or have gaps.""" + w, h = img.size + px = img.load() + corners = [px[x, y] for x, y in ((2, 2), (w - 3, 2), (2, h - 3), (w - 3, h - 3))] + c0 = corners[0] + d2 = lambda p, q: sum((a - b) ** 2 for a, b in zip(p, q)) + if all(d2(c, c0) < 400 for c in corners) and d2(c0, key) > 3600: + # the model drew another flat background (white, pale blue) instead of the key colour + img = img.copy() + px = img.load() + for y in range(h): + for x in range(w): + if d2(px[x, y], c0) < 2000: + px[x, y] = key + print(f" note: background {c0} keyed out") + darkrow = [sum(1 for x in range(0, w, 4) if sum(px[x, y]) < 160) > 0.75 * (w / 4) for y in range(h)] + out, y = None, 0 + while y < h: + if darkrow[y]: + y1 = y + while y1 < h and darkrow[y1]: + y1 += 1 + if y1 - y <= 12: + if out is None: + out = img.copy() + opx = out.load() + for yy in range(max(0, y - 1), min(h, y1 + 1)): + for x in range(w): + opx[x, yy] = key + y = y1 + else: + y += 1 + if out is not None: + print(" note: removed horizontal lines") + return out or img def parse_view(spec, default_file): @@ -328,9 +626,11 @@ def parse_view(spec, default_file): be empty (= default_file), PICKS like 0,2,1,3 (m = mirrored, e.g. m1).""" out = [] for seg in spec.split(";"): - f, bn, count, picks = seg.split(":") + parts = seg.split(":") + f, bn, count, picks = parts[:4] + ref = int(parts[4]) if len(parts) > 4 else None # die: the figure that sets the scale band, nb = (int(v) for v in bn.split("/")) - out.append((f or default_file, band, nb, int(count), picks.split(","))) + out.append((f or default_file, band, nb, int(count), picks.split(","), ref)) return out @@ -345,40 +645,62 @@ def cmd_pix(a): views = [parse_view(sp, front) for sp in specs] images, bands = {}, {} for segs in views: - for f, band, nb, count, picks in segs: + for f, band, nb, count, picks, _ in segs: p = f if os.path.isabs(f) or os.path.exists(f) else os.path.join(ANIM, f) if p not in images: - images[p] = Image.open(p).convert("RGB") + images[p] = strip_lines(Image.open(p).convert("RGB"), bg_of(a.id)[1]) if (p, nb) not in bands: bands[p, nb] = row_bands(images[p], nb) for size, feet in SIZES: - idle_path = os.path.join(SPR, f"{a.id}-{size}.png") + idle_path = idle_sheet(a.id, size) idle = Image.open(idle_path).convert("RGBA") sheet = Image.new("RGBA", (4 * size, 5 * size), (0, 0, 0, 0)) log = [f"{a.id}-{a.anim}-{size}"] for v, segs in enumerate(views): icell = idle.crop((v * size, 0, (v + 1) * size, size)) ic, iw = core(icell, size), body_width(icell, size) - frames, notes = [], [] - for f, band, nb, count, picks in segs: + frames, notes = [], [] # frames: (cell, source offset in output pixels) + die = a.anim == "die" + for f, band, nb, count, picks, ref in segs: p = f if os.path.isabs(f) or os.path.exists(f) else os.path.join(ANIM, f) y0, y1 = bands[p, nb][band] im = images[p] - figs, used = pix_source(im.crop((0, y0, im.width, y1)), count, ic[1] - ic[0], size, feet, idle_path, a.add_colors) + if die and ref is None: + ref = int(picks[0].lstrip("m")) + figs, used, offs = pix_source(im.crop((0, y0, im.width, y1)), count, ic[1] - ic[0], size, feet, idle_path, + a.add_colors, ref if die else None) notes.append(f"{os.path.basename(p)} row {band}/{nb} step {used:.2f}") for t in picks: - c = figs[int(t.lstrip("m"))] - frames.append(c.transpose(Image.FLIP_LEFT_RIGHT) if t.startswith("m") else c) + i = int(t.lstrip("m")) + c, o = figs[i], offs[i] / used + frames.append((c.transpose(Image.FLIP_LEFT_RIGHT), -o) if t.startswith("m") else (c, o)) if len(frames) != 4: raise SystemExit(f"view {v}: {len(frames)} frames, want 4") fn = [] - wr = statistics.median(body_width(f, size) for f in frames) / iw - for col, cell in enumerate(frames): + wr = (body_width(frames[0][0], size) if die else statistics.median(body_width(f, size) for f, _ in frames)) / iw + dx0 = o0 = None + for col, (cell, off) in enumerate(frames): c = core(cell, size) - dx, dy = round(ic[2] - c[2]), feet - c[1] + if not die or col == 0: + dx, dy = round(ic[2] - c[2]), feet - c[1] + if die: + dx0, o0 = dx, off + else: + # keep the position relative to frame 1 as drawn; the lowest part on the feet row + b = bbox(cell) + dx = round(dx0 + off - o0) + bot = c[1] if c else b[3] - 1 + dy = feet - bot + if b[2] - b[0] <= size: # pull a body that fits back into the cell + if b[0] + dx < 0: + dx = -b[0] + elif b[2] + dx > size: + dx = size - b[2] + else: + dx = round(size / 2 - (b[0] + b[2]) / 2) moved, lost = shift(cell, dx, dy) sheet.alpha_composite(moved, (col * size, v * size)) - fn.append(f"h{c[1] - c[0]} dx{dx:+d} dy{dy:+d}" + (f" CLIPPED {lost}px" if lost else "")) + fn.append(f"h{c[1] - c[0] if c else 0} dx{dx:+d} dy{dy:+d}" + (f" CLIPPED {lost}px" if lost else "")) log.append(f" {VIEWS[v]} (idle core h {ic[1] - ic[0]}, width ratio {wr:.2f}" + (" WIDER/NARROWER THAN IDLE" if abs(wr - 1) > 0.1 else "") + "): " + "; ".join(notes) + " | " + ", ".join(fn)) out = pre + f"-{size}.png" @@ -412,7 +734,7 @@ def main(): sub = ap.add_subparsers(dest="cmd", required=True) g = sub.add_parser("gen") g.add_argument("id") - g.add_argument("anim", choices=["walk", "attack"]) + g.add_argument("anim", choices=["walk", "attack", "die"]) g.add_argument("part", nargs="?", default="both", choices=["front", "back", "both"]) g.add_argument("--suffix", default="") g.add_argument("--front-src", default=None, help="front raw to show in the back request") @@ -420,7 +742,7 @@ def main(): g.add_argument("--print", action="store_true", help="only print the prompts") p = sub.add_parser("pix") p.add_argument("id") - p.add_argument("anim", choices=["walk", "attack"]) + p.add_argument("anim", choices=["walk", "attack", "die"]) p.add_argument("--front", default=None) p.add_argument("--back", default=None) p.add_argument("--view", action="append", help="V=FILE:BAND/NBANDS:COUNT:PICKS[;...] frames of view V " diff --git a/art/generated/sprites/scripts/peek.py b/art/generated/sprites/scripts/peek.py new file mode 100644 index 0000000..01a741c --- /dev/null +++ b/art/generated/sprites/scripts/peek.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +"""Contact image of raws for a quick look: peek.py OUT RAW [RAW ...] (each scaled to 520 px high, side by side).""" +import sys +from PIL import Image +H = 520 +ims = [Image.open(p).convert("RGB") for p in sys.argv[2:]] +ims = [i.resize((round(i.width * H / i.height), H), Image.LANCZOS) for i in ims] +out = Image.new("RGB", (sum(i.width for i in ims) + 10 * (len(ims) - 1), H), (40, 40, 40)) +x = 0 +for i in ims: + out.paste(i, (x, 0)) + x += i.width + 10 +out.save(sys.argv[1]) diff --git a/art/generated/sprites/scripts/pv.py b/art/generated/sprites/scripts/pv.py new file mode 100644 index 0000000..7f1e966 --- /dev/null +++ b/art/generated/sprites/scripts/pv.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +"""pv.py OUT SHEET [SHEET ...]: the 32 previews of sheets (e.g. imp-walk) at half size, side by side.""" +import os, sys +from PIL import Image +D = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "anim") +ims = [Image.open(os.path.join(D, f"{s}-32-preview.png")) for s in sys.argv[2:]] +ims = [i.resize((i.width // 2, i.height // 2), Image.NEAREST) for i in ims] +out = Image.new("RGB", (sum(i.width for i in ims) + 8 * (len(ims) - 1), ims[0].height), (20, 20, 20)) +x = 0 +for i in ims: + out.paste(i, (x, 0)) + x += i.width + 8 +out.save(sys.argv[1]) diff --git a/assets/sprites/archer-attack-32.png b/assets/sprites/archer-attack-32.png new file mode 100644 index 0000000..4c29eeb Binary files /dev/null and b/assets/sprites/archer-attack-32.png differ diff --git a/assets/sprites/archer-attack-64.png b/assets/sprites/archer-attack-64.png new file mode 100644 index 0000000..5716341 Binary files /dev/null and b/assets/sprites/archer-attack-64.png differ diff --git a/assets/sprites/archer-die-32.png b/assets/sprites/archer-die-32.png new file mode 100644 index 0000000..f6f45f6 Binary files /dev/null and b/assets/sprites/archer-die-32.png differ diff --git a/assets/sprites/archer-die-64.png b/assets/sprites/archer-die-64.png new file mode 100644 index 0000000..5b171be Binary files /dev/null and b/assets/sprites/archer-die-64.png differ diff --git a/assets/sprites/archer-walk-32.png b/assets/sprites/archer-walk-32.png new file mode 100644 index 0000000..9ddfb60 Binary files /dev/null and b/assets/sprites/archer-walk-32.png differ diff --git a/assets/sprites/archer-walk-64.png b/assets/sprites/archer-walk-64.png new file mode 100644 index 0000000..485eadd Binary files /dev/null and b/assets/sprites/archer-walk-64.png differ diff --git a/assets/sprites/bat-die-32.png b/assets/sprites/bat-die-32.png new file mode 100644 index 0000000..c5a9e8c Binary files /dev/null and b/assets/sprites/bat-die-32.png differ diff --git a/assets/sprites/bat-die-64.png b/assets/sprites/bat-die-64.png new file mode 100644 index 0000000..c52da03 Binary files /dev/null and b/assets/sprites/bat-die-64.png differ diff --git a/assets/sprites/bat-walk-32.png b/assets/sprites/bat-walk-32.png new file mode 100644 index 0000000..179032b Binary files /dev/null and b/assets/sprites/bat-walk-32.png differ diff --git a/assets/sprites/bat-walk-64.png b/assets/sprites/bat-walk-64.png new file mode 100644 index 0000000..0691b4a Binary files /dev/null and b/assets/sprites/bat-walk-64.png differ diff --git a/assets/sprites/battlemage-die-32.png b/assets/sprites/battlemage-die-32.png new file mode 100644 index 0000000..7c67740 Binary files /dev/null and b/assets/sprites/battlemage-die-32.png differ diff --git a/assets/sprites/battlemage-die-64.png b/assets/sprites/battlemage-die-64.png new file mode 100644 index 0000000..8bb7ec0 Binary files /dev/null and b/assets/sprites/battlemage-die-64.png differ diff --git a/assets/sprites/battlemage-walk-32.png b/assets/sprites/battlemage-walk-32.png new file mode 100644 index 0000000..2bda411 Binary files /dev/null and b/assets/sprites/battlemage-walk-32.png differ diff --git a/assets/sprites/battlemage-walk-64.png b/assets/sprites/battlemage-walk-64.png new file mode 100644 index 0000000..17c6f03 Binary files /dev/null and b/assets/sprites/battlemage-walk-64.png differ diff --git a/assets/sprites/beetle-die-32.png b/assets/sprites/beetle-die-32.png new file mode 100644 index 0000000..10543db Binary files /dev/null and b/assets/sprites/beetle-die-32.png differ diff --git a/assets/sprites/beetle-die-64.png b/assets/sprites/beetle-die-64.png new file mode 100644 index 0000000..3e5aaca Binary files /dev/null and b/assets/sprites/beetle-die-64.png differ diff --git a/assets/sprites/beetle-walk-32.png b/assets/sprites/beetle-walk-32.png new file mode 100644 index 0000000..40adb65 Binary files /dev/null and b/assets/sprites/beetle-walk-32.png differ diff --git a/assets/sprites/beetle-walk-64.png b/assets/sprites/beetle-walk-64.png new file mode 100644 index 0000000..34de4ec Binary files /dev/null and b/assets/sprites/beetle-walk-64.png differ diff --git a/assets/sprites/catapult-die-32.png b/assets/sprites/catapult-die-32.png new file mode 100644 index 0000000..17ff83e Binary files /dev/null and b/assets/sprites/catapult-die-32.png differ diff --git a/assets/sprites/catapult-die-64.png b/assets/sprites/catapult-die-64.png new file mode 100644 index 0000000..3f9ea72 Binary files /dev/null and b/assets/sprites/catapult-die-64.png differ diff --git a/assets/sprites/catapult-walk-32.png b/assets/sprites/catapult-walk-32.png new file mode 100644 index 0000000..8c230ef Binary files /dev/null and b/assets/sprites/catapult-walk-32.png differ diff --git a/assets/sprites/catapult-walk-64.png b/assets/sprites/catapult-walk-64.png new file mode 100644 index 0000000..89d52ff Binary files /dev/null and b/assets/sprites/catapult-walk-64.png differ diff --git a/assets/sprites/cavebear-die-32.png b/assets/sprites/cavebear-die-32.png new file mode 100644 index 0000000..487ce82 Binary files /dev/null and b/assets/sprites/cavebear-die-32.png differ diff --git a/assets/sprites/cavebear-die-64.png b/assets/sprites/cavebear-die-64.png new file mode 100644 index 0000000..3fb739c Binary files /dev/null and b/assets/sprites/cavebear-die-64.png differ diff --git a/assets/sprites/cavebear-walk-32.png b/assets/sprites/cavebear-walk-32.png new file mode 100644 index 0000000..ed2aed5 Binary files /dev/null and b/assets/sprites/cavebear-walk-32.png differ diff --git a/assets/sprites/cavebear-walk-64.png b/assets/sprites/cavebear-walk-64.png new file mode 100644 index 0000000..dbd0dbf Binary files /dev/null and b/assets/sprites/cavebear-walk-64.png differ diff --git a/assets/sprites/chainbreaker-die-32.png b/assets/sprites/chainbreaker-die-32.png new file mode 100644 index 0000000..4ff2293 Binary files /dev/null and b/assets/sprites/chainbreaker-die-32.png differ diff --git a/assets/sprites/chainbreaker-die-64.png b/assets/sprites/chainbreaker-die-64.png new file mode 100644 index 0000000..0a6b191 Binary files /dev/null and b/assets/sprites/chainbreaker-die-64.png differ diff --git a/assets/sprites/chainbreaker-walk-32.png b/assets/sprites/chainbreaker-walk-32.png new file mode 100644 index 0000000..cfd2ff6 Binary files /dev/null and b/assets/sprites/chainbreaker-walk-32.png differ diff --git a/assets/sprites/chainbreaker-walk-64.png b/assets/sprites/chainbreaker-walk-64.png new file mode 100644 index 0000000..1160d9d Binary files /dev/null and b/assets/sprites/chainbreaker-walk-64.png differ diff --git a/assets/sprites/cogling-die-32.png b/assets/sprites/cogling-die-32.png new file mode 100644 index 0000000..6dd4033 Binary files /dev/null and b/assets/sprites/cogling-die-32.png differ diff --git a/assets/sprites/cogling-die-64.png b/assets/sprites/cogling-die-64.png new file mode 100644 index 0000000..4d8ffa1 Binary files /dev/null and b/assets/sprites/cogling-die-64.png differ diff --git a/assets/sprites/cogling-walk-32.png b/assets/sprites/cogling-walk-32.png new file mode 100644 index 0000000..39242e3 Binary files /dev/null and b/assets/sprites/cogling-walk-32.png differ diff --git a/assets/sprites/cogling-walk-64.png b/assets/sprites/cogling-walk-64.png new file mode 100644 index 0000000..fe8413f Binary files /dev/null and b/assets/sprites/cogling-walk-64.png differ diff --git a/assets/sprites/dwarf-attack-32.png b/assets/sprites/dwarf-attack-32.png new file mode 100644 index 0000000..e5d9649 Binary files /dev/null and b/assets/sprites/dwarf-attack-32.png differ diff --git a/assets/sprites/dwarf-attack-64.png b/assets/sprites/dwarf-attack-64.png new file mode 100644 index 0000000..daa6053 Binary files /dev/null and b/assets/sprites/dwarf-attack-64.png differ diff --git a/assets/sprites/dwarf-die-32.png b/assets/sprites/dwarf-die-32.png new file mode 100644 index 0000000..fbf7e1c Binary files /dev/null and b/assets/sprites/dwarf-die-32.png differ diff --git a/assets/sprites/dwarf-die-64.png b/assets/sprites/dwarf-die-64.png new file mode 100644 index 0000000..08a7e5e Binary files /dev/null and b/assets/sprites/dwarf-die-64.png differ diff --git a/assets/sprites/dwarf-walk-32.png b/assets/sprites/dwarf-walk-32.png new file mode 100644 index 0000000..0473e7d Binary files /dev/null and b/assets/sprites/dwarf-walk-32.png differ diff --git a/assets/sprites/dwarf-walk-64.png b/assets/sprites/dwarf-walk-64.png new file mode 100644 index 0000000..e23eb36 Binary files /dev/null and b/assets/sprites/dwarf-walk-64.png differ diff --git a/assets/sprites/fairy-die-32.png b/assets/sprites/fairy-die-32.png new file mode 100644 index 0000000..3b14bcf Binary files /dev/null and b/assets/sprites/fairy-die-32.png differ diff --git a/assets/sprites/fairy-die-64.png b/assets/sprites/fairy-die-64.png new file mode 100644 index 0000000..b17da43 Binary files /dev/null and b/assets/sprites/fairy-die-64.png differ diff --git a/assets/sprites/fairy-walk-32.png b/assets/sprites/fairy-walk-32.png new file mode 100644 index 0000000..e1f30fe Binary files /dev/null and b/assets/sprites/fairy-walk-32.png differ diff --git a/assets/sprites/fairy-walk-64.png b/assets/sprites/fairy-walk-64.png new file mode 100644 index 0000000..29ac7c4 Binary files /dev/null and b/assets/sprites/fairy-walk-64.png differ diff --git a/assets/sprites/gargoyle-die-32.png b/assets/sprites/gargoyle-die-32.png new file mode 100644 index 0000000..bd833be Binary files /dev/null and b/assets/sprites/gargoyle-die-32.png differ diff --git a/assets/sprites/gargoyle-die-64.png b/assets/sprites/gargoyle-die-64.png new file mode 100644 index 0000000..f328143 Binary files /dev/null and b/assets/sprites/gargoyle-die-64.png differ diff --git a/assets/sprites/gargoyle-walk-32.png b/assets/sprites/gargoyle-walk-32.png new file mode 100644 index 0000000..6b5c4a2 Binary files /dev/null and b/assets/sprites/gargoyle-walk-32.png differ diff --git a/assets/sprites/gargoyle-walk-64.png b/assets/sprites/gargoyle-walk-64.png new file mode 100644 index 0000000..35c85e6 Binary files /dev/null and b/assets/sprites/gargoyle-walk-64.png differ diff --git a/assets/sprites/giant-die-32.png b/assets/sprites/giant-die-32.png new file mode 100644 index 0000000..1acd0b3 Binary files /dev/null and b/assets/sprites/giant-die-32.png differ diff --git a/assets/sprites/giant-die-64.png b/assets/sprites/giant-die-64.png new file mode 100644 index 0000000..7197abe Binary files /dev/null and b/assets/sprites/giant-die-64.png differ diff --git a/assets/sprites/giant-walk-32.png b/assets/sprites/giant-walk-32.png new file mode 100644 index 0000000..51c4584 Binary files /dev/null and b/assets/sprites/giant-walk-32.png differ diff --git a/assets/sprites/giant-walk-64.png b/assets/sprites/giant-walk-64.png new file mode 100644 index 0000000..5a6954e Binary files /dev/null and b/assets/sprites/giant-walk-64.png differ diff --git a/assets/sprites/imp-die-32.png b/assets/sprites/imp-die-32.png new file mode 100644 index 0000000..c3bf8db Binary files /dev/null and b/assets/sprites/imp-die-32.png differ diff --git a/assets/sprites/imp-die-64.png b/assets/sprites/imp-die-64.png new file mode 100644 index 0000000..6d3b7df Binary files /dev/null and b/assets/sprites/imp-die-64.png differ diff --git a/assets/sprites/imp-walk-32.png b/assets/sprites/imp-walk-32.png new file mode 100644 index 0000000..a6f93fc Binary files /dev/null and b/assets/sprites/imp-walk-32.png differ diff --git a/assets/sprites/imp-walk-64.png b/assets/sprites/imp-walk-64.png new file mode 100644 index 0000000..a27ca7c Binary files /dev/null and b/assets/sprites/imp-walk-64.png differ diff --git a/assets/sprites/inquisitor-die-32.png b/assets/sprites/inquisitor-die-32.png new file mode 100644 index 0000000..a196bfe Binary files /dev/null and b/assets/sprites/inquisitor-die-32.png differ diff --git a/assets/sprites/inquisitor-die-64.png b/assets/sprites/inquisitor-die-64.png new file mode 100644 index 0000000..f3d6aa2 Binary files /dev/null and b/assets/sprites/inquisitor-die-64.png differ diff --git a/assets/sprites/inquisitor-walk-32.png b/assets/sprites/inquisitor-walk-32.png new file mode 100644 index 0000000..6a38136 Binary files /dev/null and b/assets/sprites/inquisitor-walk-32.png differ diff --git a/assets/sprites/inquisitor-walk-64.png b/assets/sprites/inquisitor-walk-64.png new file mode 100644 index 0000000..f1099bf Binary files /dev/null and b/assets/sprites/inquisitor-walk-64.png differ diff --git a/assets/sprites/jailer-die-32.png b/assets/sprites/jailer-die-32.png new file mode 100644 index 0000000..5a7b19a Binary files /dev/null and b/assets/sprites/jailer-die-32.png differ diff --git a/assets/sprites/jailer-die-64.png b/assets/sprites/jailer-die-64.png new file mode 100644 index 0000000..df5a884 Binary files /dev/null and b/assets/sprites/jailer-die-64.png differ diff --git a/assets/sprites/jailer-walk-32.png b/assets/sprites/jailer-walk-32.png new file mode 100644 index 0000000..3b352b2 Binary files /dev/null and b/assets/sprites/jailer-walk-32.png differ diff --git a/assets/sprites/jailer-walk-64.png b/assets/sprites/jailer-walk-64.png new file mode 100644 index 0000000..ce78691 Binary files /dev/null and b/assets/sprites/jailer-walk-64.png differ diff --git a/assets/sprites/knight-die-32.png b/assets/sprites/knight-die-32.png new file mode 100644 index 0000000..7e437bc Binary files /dev/null and b/assets/sprites/knight-die-32.png differ diff --git a/assets/sprites/knight-die-64.png b/assets/sprites/knight-die-64.png new file mode 100644 index 0000000..c4370b4 Binary files /dev/null and b/assets/sprites/knight-die-64.png differ diff --git a/assets/sprites/kobold-die-32.png b/assets/sprites/kobold-die-32.png new file mode 100644 index 0000000..feeedb5 Binary files /dev/null and b/assets/sprites/kobold-die-32.png differ diff --git a/assets/sprites/kobold-die-64.png b/assets/sprites/kobold-die-64.png new file mode 100644 index 0000000..ec1c21a Binary files /dev/null and b/assets/sprites/kobold-die-64.png differ diff --git a/assets/sprites/mage-attack-32.png b/assets/sprites/mage-attack-32.png new file mode 100644 index 0000000..6aaed69 Binary files /dev/null and b/assets/sprites/mage-attack-32.png differ diff --git a/assets/sprites/mage-attack-64.png b/assets/sprites/mage-attack-64.png new file mode 100644 index 0000000..4cb6c5b Binary files /dev/null and b/assets/sprites/mage-attack-64.png differ diff --git a/assets/sprites/mage-die-32.png b/assets/sprites/mage-die-32.png new file mode 100644 index 0000000..b8b3c67 Binary files /dev/null and b/assets/sprites/mage-die-32.png differ diff --git a/assets/sprites/mage-die-64.png b/assets/sprites/mage-die-64.png new file mode 100644 index 0000000..5b16861 Binary files /dev/null and b/assets/sprites/mage-die-64.png differ diff --git a/assets/sprites/mage-walk-32.png b/assets/sprites/mage-walk-32.png new file mode 100644 index 0000000..da2cff7 Binary files /dev/null and b/assets/sprites/mage-walk-32.png differ diff --git a/assets/sprites/mage-walk-64.png b/assets/sprites/mage-walk-64.png new file mode 100644 index 0000000..2b5417e Binary files /dev/null and b/assets/sprites/mage-walk-64.png differ diff --git a/assets/sprites/monk-die-32.png b/assets/sprites/monk-die-32.png new file mode 100644 index 0000000..d4920d7 Binary files /dev/null and b/assets/sprites/monk-die-32.png differ diff --git a/assets/sprites/monk-die-64.png b/assets/sprites/monk-die-64.png new file mode 100644 index 0000000..cb27817 Binary files /dev/null and b/assets/sprites/monk-die-64.png differ diff --git a/assets/sprites/monk-walk-32.png b/assets/sprites/monk-walk-32.png new file mode 100644 index 0000000..aa9b20c Binary files /dev/null and b/assets/sprites/monk-walk-32.png differ diff --git a/assets/sprites/monk-walk-64.png b/assets/sprites/monk-walk-64.png new file mode 100644 index 0000000..fdd1072 Binary files /dev/null and b/assets/sprites/monk-walk-64.png differ diff --git a/assets/sprites/ogre-attack-32.png b/assets/sprites/ogre-attack-32.png new file mode 100644 index 0000000..51107fe Binary files /dev/null and b/assets/sprites/ogre-attack-32.png differ diff --git a/assets/sprites/ogre-attack-64.png b/assets/sprites/ogre-attack-64.png new file mode 100644 index 0000000..009ab3b Binary files /dev/null and b/assets/sprites/ogre-attack-64.png differ diff --git a/assets/sprites/ogre-die-32.png b/assets/sprites/ogre-die-32.png new file mode 100644 index 0000000..852612e Binary files /dev/null and b/assets/sprites/ogre-die-32.png differ diff --git a/assets/sprites/ogre-die-64.png b/assets/sprites/ogre-die-64.png new file mode 100644 index 0000000..2fd3b29 Binary files /dev/null and b/assets/sprites/ogre-die-64.png differ diff --git a/assets/sprites/ogre-walk-32.png b/assets/sprites/ogre-walk-32.png new file mode 100644 index 0000000..9f15ea6 Binary files /dev/null and b/assets/sprites/ogre-walk-32.png differ diff --git a/assets/sprites/ogre-walk-64.png b/assets/sprites/ogre-walk-64.png new file mode 100644 index 0000000..fbf079c Binary files /dev/null and b/assets/sprites/ogre-walk-64.png differ diff --git a/assets/sprites/owl-die-32.png b/assets/sprites/owl-die-32.png new file mode 100644 index 0000000..ee9247b Binary files /dev/null and b/assets/sprites/owl-die-32.png differ diff --git a/assets/sprites/owl-die-64.png b/assets/sprites/owl-die-64.png new file mode 100644 index 0000000..8bfc3a9 Binary files /dev/null and b/assets/sprites/owl-die-64.png differ diff --git a/assets/sprites/owl-walk-32.png b/assets/sprites/owl-walk-32.png new file mode 100644 index 0000000..1dd83e0 Binary files /dev/null and b/assets/sprites/owl-walk-32.png differ diff --git a/assets/sprites/owl-walk-64.png b/assets/sprites/owl-walk-64.png new file mode 100644 index 0000000..10ad6eb Binary files /dev/null and b/assets/sprites/owl-walk-64.png differ diff --git a/assets/sprites/paladin-attack-32.png b/assets/sprites/paladin-attack-32.png new file mode 100644 index 0000000..596a8b9 Binary files /dev/null and b/assets/sprites/paladin-attack-32.png differ diff --git a/assets/sprites/paladin-attack-64.png b/assets/sprites/paladin-attack-64.png new file mode 100644 index 0000000..ae8e07f Binary files /dev/null and b/assets/sprites/paladin-attack-64.png differ diff --git a/assets/sprites/paladin-die-32.png b/assets/sprites/paladin-die-32.png new file mode 100644 index 0000000..14b2584 Binary files /dev/null and b/assets/sprites/paladin-die-32.png differ diff --git a/assets/sprites/paladin-die-64.png b/assets/sprites/paladin-die-64.png new file mode 100644 index 0000000..a69bf85 Binary files /dev/null and b/assets/sprites/paladin-die-64.png differ diff --git a/assets/sprites/paladin-walk-32.png b/assets/sprites/paladin-walk-32.png new file mode 100644 index 0000000..e0fe416 Binary files /dev/null and b/assets/sprites/paladin-walk-32.png differ diff --git a/assets/sprites/paladin-walk-64.png b/assets/sprites/paladin-walk-64.png new file mode 100644 index 0000000..98a23d8 Binary files /dev/null and b/assets/sprites/paladin-walk-64.png differ diff --git a/assets/sprites/priest-die-32.png b/assets/sprites/priest-die-32.png new file mode 100644 index 0000000..c2fdf29 Binary files /dev/null and b/assets/sprites/priest-die-32.png differ diff --git a/assets/sprites/priest-die-64.png b/assets/sprites/priest-die-64.png new file mode 100644 index 0000000..57437e5 Binary files /dev/null and b/assets/sprites/priest-die-64.png differ diff --git a/assets/sprites/priest-walk-32.png b/assets/sprites/priest-walk-32.png new file mode 100644 index 0000000..76ceb26 Binary files /dev/null and b/assets/sprites/priest-walk-32.png differ diff --git a/assets/sprites/priest-walk-64.png b/assets/sprites/priest-walk-64.png new file mode 100644 index 0000000..d2bcd09 Binary files /dev/null and b/assets/sprites/priest-walk-64.png differ diff --git a/assets/sprites/priestess-die-32.png b/assets/sprites/priestess-die-32.png new file mode 100644 index 0000000..e41c019 Binary files /dev/null and b/assets/sprites/priestess-die-32.png differ diff --git a/assets/sprites/priestess-die-64.png b/assets/sprites/priestess-die-64.png new file mode 100644 index 0000000..68540c9 Binary files /dev/null and b/assets/sprites/priestess-die-64.png differ diff --git a/assets/sprites/priestess-walk-32.png b/assets/sprites/priestess-walk-32.png new file mode 100644 index 0000000..bef8212 Binary files /dev/null and b/assets/sprites/priestess-walk-32.png differ diff --git a/assets/sprites/priestess-walk-64.png b/assets/sprites/priestess-walk-64.png new file mode 100644 index 0000000..8a36ed2 Binary files /dev/null and b/assets/sprites/priestess-walk-64.png differ diff --git a/assets/sprites/ram-die-32.png b/assets/sprites/ram-die-32.png new file mode 100644 index 0000000..6e3a598 Binary files /dev/null and b/assets/sprites/ram-die-32.png differ diff --git a/assets/sprites/ram-die-64.png b/assets/sprites/ram-die-64.png new file mode 100644 index 0000000..ed92b9d Binary files /dev/null and b/assets/sprites/ram-die-64.png differ diff --git a/assets/sprites/ram-walk-32.png b/assets/sprites/ram-walk-32.png new file mode 100644 index 0000000..6e74700 Binary files /dev/null and b/assets/sprites/ram-walk-32.png differ diff --git a/assets/sprites/ram-walk-64.png b/assets/sprites/ram-walk-64.png new file mode 100644 index 0000000..ee4aa7a Binary files /dev/null and b/assets/sprites/ram-walk-64.png differ diff --git a/assets/sprites/ranger-die-32.png b/assets/sprites/ranger-die-32.png new file mode 100644 index 0000000..9ba09bf Binary files /dev/null and b/assets/sprites/ranger-die-32.png differ diff --git a/assets/sprites/ranger-die-64.png b/assets/sprites/ranger-die-64.png new file mode 100644 index 0000000..398ac2d Binary files /dev/null and b/assets/sprites/ranger-die-64.png differ diff --git a/assets/sprites/ranger-walk-32.png b/assets/sprites/ranger-walk-32.png new file mode 100644 index 0000000..769f1e9 Binary files /dev/null and b/assets/sprites/ranger-walk-32.png differ diff --git a/assets/sprites/ranger-walk-64.png b/assets/sprites/ranger-walk-64.png new file mode 100644 index 0000000..bf7711a Binary files /dev/null and b/assets/sprites/ranger-walk-64.png differ diff --git a/assets/sprites/revenant-die-32.png b/assets/sprites/revenant-die-32.png new file mode 100644 index 0000000..801cf0e Binary files /dev/null and b/assets/sprites/revenant-die-32.png differ diff --git a/assets/sprites/revenant-die-64.png b/assets/sprites/revenant-die-64.png new file mode 100644 index 0000000..6b26a4d Binary files /dev/null and b/assets/sprites/revenant-die-64.png differ diff --git a/assets/sprites/revenant-walk-32.png b/assets/sprites/revenant-walk-32.png new file mode 100644 index 0000000..96853a9 Binary files /dev/null and b/assets/sprites/revenant-walk-32.png differ diff --git a/assets/sprites/revenant-walk-64.png b/assets/sprites/revenant-walk-64.png new file mode 100644 index 0000000..3a71748 Binary files /dev/null and b/assets/sprites/revenant-walk-64.png differ diff --git a/assets/sprites/spider-attack-32.png b/assets/sprites/spider-attack-32.png new file mode 100644 index 0000000..3a76a17 Binary files /dev/null and b/assets/sprites/spider-attack-32.png differ diff --git a/assets/sprites/spider-attack-64.png b/assets/sprites/spider-attack-64.png new file mode 100644 index 0000000..b67b5be Binary files /dev/null and b/assets/sprites/spider-attack-64.png differ diff --git a/assets/sprites/spider-die-32.png b/assets/sprites/spider-die-32.png new file mode 100644 index 0000000..c2da6f8 Binary files /dev/null and b/assets/sprites/spider-die-32.png differ diff --git a/assets/sprites/spider-die-64.png b/assets/sprites/spider-die-64.png new file mode 100644 index 0000000..7f117d7 Binary files /dev/null and b/assets/sprites/spider-die-64.png differ diff --git a/assets/sprites/spider-walk-32.png b/assets/sprites/spider-walk-32.png new file mode 100644 index 0000000..42d92cd Binary files /dev/null and b/assets/sprites/spider-walk-32.png differ diff --git a/assets/sprites/spider-walk-64.png b/assets/sprites/spider-walk-64.png new file mode 100644 index 0000000..e552258 Binary files /dev/null and b/assets/sprites/spider-walk-64.png differ diff --git a/assets/sprites/thief-die-32.png b/assets/sprites/thief-die-32.png new file mode 100644 index 0000000..a05b66b Binary files /dev/null and b/assets/sprites/thief-die-32.png differ diff --git a/assets/sprites/thief-die-64.png b/assets/sprites/thief-die-64.png new file mode 100644 index 0000000..31afb70 Binary files /dev/null and b/assets/sprites/thief-die-64.png differ diff --git a/assets/sprites/thief-walk-32.png b/assets/sprites/thief-walk-32.png new file mode 100644 index 0000000..a434421 Binary files /dev/null and b/assets/sprites/thief-walk-32.png differ diff --git a/assets/sprites/thief-walk-64.png b/assets/sprites/thief-walk-64.png new file mode 100644 index 0000000..e15c6d8 Binary files /dev/null and b/assets/sprites/thief-walk-64.png differ diff --git a/assets/sprites/trader-die-32.png b/assets/sprites/trader-die-32.png new file mode 100644 index 0000000..396744b Binary files /dev/null and b/assets/sprites/trader-die-32.png differ diff --git a/assets/sprites/trader-die-64.png b/assets/sprites/trader-die-64.png new file mode 100644 index 0000000..34270f1 Binary files /dev/null and b/assets/sprites/trader-die-64.png differ diff --git a/assets/sprites/trader-walk-32.png b/assets/sprites/trader-walk-32.png new file mode 100644 index 0000000..c30a068 Binary files /dev/null and b/assets/sprites/trader-walk-32.png differ diff --git a/assets/sprites/trader-walk-64.png b/assets/sprites/trader-walk-64.png new file mode 100644 index 0000000..bed0d91 Binary files /dev/null and b/assets/sprites/trader-walk-64.png differ diff --git a/assets/sprites/wyrm-die-32.png b/assets/sprites/wyrm-die-32.png new file mode 100644 index 0000000..ef7bbf0 Binary files /dev/null and b/assets/sprites/wyrm-die-32.png differ diff --git a/assets/sprites/wyrm-die-64.png b/assets/sprites/wyrm-die-64.png new file mode 100644 index 0000000..c5c12d4 Binary files /dev/null and b/assets/sprites/wyrm-die-64.png differ diff --git a/assets/sprites/wyrm-walk-32.png b/assets/sprites/wyrm-walk-32.png new file mode 100644 index 0000000..e93b337 Binary files /dev/null and b/assets/sprites/wyrm-walk-32.png differ diff --git a/assets/sprites/wyrm-walk-64.png b/assets/sprites/wyrm-walk-64.png new file mode 100644 index 0000000..0c3281f Binary files /dev/null and b/assets/sprites/wyrm-walk-64.png differ