Compare commits

..
15 Commits
Author SHA1 Message Date
Richard Zinkanddeepseek-v4.1-flash (opencode-go) via CodeCraft e44aab6f5c Add gamepad support to the desktop build
Co-Authored-By: deepseek-v4.1-flash (opencode-go) via CodeCraft
2026-11-11 15:43:32 +01:00
Richard Zinkanddeepseek-v4.1-flash (opencode-go) via CodeCraft 8d51d6ec6a Add browser gamepad support with pad button pictograms
Co-Authored-By: deepseek-v4.1-flash (opencode-go) via CodeCraft
2026-11-11 14:43:39 +01:00
Richard ZinkandClaude Opus 5.5 073999d592 Bump version to v202611-00079
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 09:22:38 +01:00
Richard ZinkandClaude Opus 5.5 5e8c1ef28c Bump version to v202611-00078
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 09:15:32 +01:00
Richard ZinkandClaude Opus 5.5 a8284ca85c Remains of the dead in one mesh: drawing stays fast with hundreds of them
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 01:20:35 +01:00
Richard ZinkandClaude Opus 5.5 6886b2e1a4 Self test opens the bestiary too; bestiary screenshot with the portraits
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 01:12:33 +01:00
Richard ZinkandClaude Opus 5.5 918458df50 README screenshots in the high-res style
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 01:11:10 +01:00
Richard ZinkandClaude Opus 5.5 7f57f64947 High-res ores with big outlined lumps that stand out from the earth, kept in their own colours; screenshot tool for the desktop build
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 01:09:11 +01:00
Richard ZinkandClaude Opus 5.5 48c20fabbc Walk, die and attack animations for all creatures (sheets, prompts and scripts)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 01:00:31 +01:00
Richard ZinkandClaude Opus 5.5 8c5afe872f High-res effects: explosions, smoke, bursts, impact stars, healing and glowing projectiles as flipbooks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 01:00:20 +01:00
Richard ZinkandClaude Opus 5.5 7972e8ad1b Self test: fast forward and drawing times
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 00:56:26 +01:00
Richard ZinkandClaude Opus 5.5 7e2e638e05 Brighter obsidian for the soul core thrones, so their stone shows
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 00:29:42 +01:00
Richard ZinkandClaude Opus 5.5 04d9d719d7 Desktop self test: DC_SHOT starts the demo map or a savegame, takes a screenshot and quits
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 00:28:23 +01:00
Richard ZinkandClaude Opus 5.5 d7b6d6de7e Heart sounds: the hurt soul core beats softly, the rival hearts creak, chime and bubble nearby
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 00:12:08 +01:00
Richard ZinkandClaude Opus 5.5 9800ce7156 Holiday music: a dark carol for Christmas, a spring tune for Easter, a harpsichord dance for Halloween
During a holiday the title music plays its piece, the build music every fourth time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 00:12:08 +01:00
501 changed files with 3612 additions and 147 deletions

No files matched your search

+1
View File
@@ -11,3 +11,4 @@ art/generated/sprites/anim/*-raw*.png
art/generated/sprites/scripts/__pycache__/
art/generated/portraits/*-raw*.png
art/generated/portraits/scripts/__pycache__/
art/generated/fx/*-raw.png
Generated
+116
View File
@@ -93,6 +93,12 @@ version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
[[package]]
name = "cfg_aliases"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527"
[[package]]
name = "color_quant"
version = "1.1.0"
@@ -194,6 +200,7 @@ name = "dungeoncraft"
version = "0.1.0"
dependencies = [
"cpal",
"gilrs",
"macroquad",
"rfd",
"serde",
@@ -226,6 +233,12 @@ dependencies = [
"zlib-rs",
]
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "foldhash"
version = "0.1.5"
@@ -266,6 +279,40 @@ dependencies = [
"slab",
]
[[package]]
name = "gilrs"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "902fb00d3f6398e635be22e5c837b303c501835cca7ac11a47bba138f7aafdd8"
dependencies = [
"fnv",
"gilrs-core",
"log",
"uuid",
"vec_map",
]
[[package]]
name = "gilrs-core"
version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc7f0ce6237abcc0523f2a5502b1e3fe5802daaae47ac14e166fe49551301ea9"
dependencies = [
"inotify",
"js-sys",
"libc",
"libudev-sys",
"log",
"nix",
"objc2-core-foundation",
"objc2-io-kit",
"uuid",
"vec_map",
"wasm-bindgen",
"web-sys",
"windows",
]
[[package]]
name = "glam"
version = "0.27.0"
@@ -312,6 +359,26 @@ dependencies = [
"hashbrown 0.17.1",
]
[[package]]
name = "inotify"
version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4cc00ea907cab49550b7da656f80ebb97be1b997d931fbcd28d39734e17ce592"
dependencies = [
"bitflags 2.13.2",
"inotify-sys",
"libc",
]
[[package]]
name = "inotify-sys"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c033f80b2c113cdf91ab7a33faa9cbc014726dcad99880c8609af2a370edf37d"
dependencies = [
"libc",
]
[[package]]
name = "itoa"
version = "1.0.18"
@@ -399,6 +466,16 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
[[package]]
name = "libudev-sys"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
dependencies = [
"libc",
"pkg-config",
]
[[package]]
name = "log"
version = "0.4.35"
@@ -513,6 +590,18 @@ dependencies = [
"jni-sys 0.3.1",
]
[[package]]
name = "nix"
version = "0.31.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d"
dependencies = [
"bitflags 2.13.2",
"cfg-if",
"cfg_aliases",
"libc",
]
[[package]]
name = "num-derive"
version = "0.4.2"
@@ -666,6 +755,17 @@ dependencies = [
"objc2-core-foundation",
]
[[package]]
name = "objc2-io-kit"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15"
dependencies = [
"bitflags 2.13.2",
"libc",
"objc2-core-foundation",
]
[[package]]
name = "percent-encoding"
version = "2.3.2"
@@ -983,6 +1083,22 @@ version = "1.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
[[package]]
name = "uuid"
version = "1.29.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bed99139f7dac9b5cfe5f17be4d66dc7079a34dee1d74bcc77217119240e267c"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]]
name = "walkdir"
version = "2.5.0"
+2 -1
View File
@@ -26,7 +26,8 @@ inherits = "release"
lto = "thin"
codegen-units = 16
# desktop builds: system file dialog (xdg portal on Linux) and sound output
# desktop builds: system file dialog (xdg portal on Linux), sound output and gamepads
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
rfd = { version = "0.17", default-features = false, features = ["xdg-portal"] }
cpal = "0.18"
gilrs = "0.11"
+3 -2
View File
@@ -46,8 +46,9 @@ cargo build --release
./target/release/dungeoncraft
```
On Linux the build needs the ALSA headers (`alsa-lib` / `libasound2-dev`); the sound goes through ALSA (PipeWire and
PulseAudio take it). The settings, the autosave, the campaign progress and the profile are kept as files in the
On Linux the build needs the ALSA headers (`alsa-lib` / `libasound2-dev`) and libudev for gamepads
(`libudev-dev`); the sound goes through ALSA (PipeWire and PulseAudio take it). Gamepads are read directly on the
desktop (gilrs, hot-plug included); the browser build uses the browser's Gamepad API. The settings, the autosave, the campaign progress and the profile are kept as files in the
data folder: `~/.local/share/dungeoncraft/` (Linux, or `$XDG_DATA_HOME/dungeoncraft`), `%APPDATA%\DungeonCraft`
(Windows), `~/Library/Application Support/DungeonCraft` (macOS); `DUNGEONCRAFT_DATA` chooses another one.
*Save Game* and saved campaigns land in its `saves/` folder; *Load Game* opens the system file dialog there (on
+1 -1
View File
@@ -1 +1 @@
v202611-00077
v202611-00080
+32
View File
@@ -0,0 +1,32 @@
# Effect flipbooks (high-res)
Generated on 2026-11-08 with `fal-ai/nano-banana-pro` (`aspect_ratio: 16:9`, `resolution: 2K`,
one image per effect; the first try with one row of 8 frames at `8:1` came back empty), the
prompt in `batch.py`: the shared text followed by the effect.
```text
An animation sprite sheet of exactly 8 frames in a grid of 4 columns and 2 rows (reading order), each frame in its own equal square cell, the effect centred in every cell and filling most of it, the frames showing the animation from start to end. Hand-painted pixel art for a dark-fantasy dungeon strategy game, crisp pixels, glowing. The background is completely flat pure black (#000000) everywhere - no frames, no grid lines, no text, no numbers. The effect:
```
- **explosion**: a fiery explosion: a small bright flash, growing into a ball of orange and yellow fire with dark red edges, breaking up into flames and embers, fading into thin dark smoke.
- **smoke**: a puff of grey smoke: a small dense cloud growing larger and softer, drifting apart and fading out.
- **burst**: a magic burst seen from the front: a bright white spark growing into a ring of white light rays and sparkles, then scattering into small fading sparkles (pure white and light grey, so it can be tinted).
- **impact**: a hit impact star: a sharp white flash with jagged rays, then smaller sparks flying outwards and fading (pure white and light grey, so it can be tinted).
- **heal**: a healing effect: soft green glowing crosses and sparkles rising upwards and fading, around a gentle green glow.
- **orbs**: eight different glowing magic projectiles, one per cell (not an animation): 1 a fireball with a flaming tail, 2 the same fireball flickering, 3 a white glowing orb with a soft halo (to be tinted), 4 the same white orb pulsing larger, 5 a holy golden light orb, 6 a dark violet shadow orb with wisps, 7 a glowing red rune orb, 8 a blue arcane orb with small sparkles.
## Processing
The explosion sheet had a grey border around its black panel; it was cut to the panel first
(`explosion-trim.png`). Then
```bash
python3 tools/make_fx.py fx.png explosion-trim.png smoke-raw.png burst-raw.png impact-raw.png heal-raw.png orbs-raw.png --margin 0.12
```
cuts the 2x4 frames, turns the dark background into transparency (alpha from the brightness, so
glows and smoke keep soft edges) and writes one row of eight 64x64 frames per effect;
`fx.png` is copied to `assets/textures/fx/fx.png`. In the game (`fx_sprite` in
`src/render3d.rs`, high-res only): fireballs and cannon blasts explode, other flashes burst in
their colour, smoke puffs, hits flash with an impact star, healing rises in green, and the
magic projectiles are glowing orbs (the fireball's tail points back along its way).
+13
View File
@@ -0,0 +1,13 @@
# Effect flipbooks of the high-res style (2026-11-08): one sheet per effect, 8 frames in a row.
STYLE = ("An animation sprite sheet of exactly 8 frames in a grid of 4 columns and 2 rows (reading order), each frame in its own equal square cell, the effect centred in every "
"cell and filling most of it, the frames showing the animation from start to end. Hand-painted pixel art for a dark-fantasy dungeon "
"strategy game, crisp pixels, glowing. The background is completely flat pure black (#000000) everywhere - no frames, no grid lines, "
"no text, no numbers. The effect: ")
FX = {
"explosion": "a fiery explosion: a small bright flash, growing into a ball of orange and yellow fire with dark red edges, breaking up into flames and embers, fading into thin dark smoke.",
"smoke": "a puff of grey smoke: a small dense cloud growing larger and softer, drifting apart and fading out.",
"burst": "a magic burst seen from the front: a bright white spark growing into a ring of white light rays and sparkles, then scattering into small fading sparkles (pure white and light grey, so it can be tinted).",
"impact": "a hit impact star: a sharp white flash with jagged rays, then smaller sparks flying outwards and fading (pure white and light grey, so it can be tinted).",
"heal": "a healing effect: soft green glowing crosses and sparkles rising upwards and fading, around a gentle green glow.",
"orbs": "eight different glowing magic projectiles, one per cell (not an animation): 1 a fireball with a flaming tail, 2 the same fireball flickering, 3 a white glowing orb with a soft halo (to be tinted), 4 the same white orb pulsing larger, 5 a holy golden light orb, 6 a dark violet shadow orb with wisps, 7 a glowing red rune orb, 8 a blue arcane orb with small sparkles.",
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

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

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Loaded 100 of 501 files, more files were not shown because too many files have changed in this diff. Show more