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