Files
wizwar6e/research/fx3d-sprite-spec.md
T
Eric WagonerandClaude Fable 5 1e79f2ffb2 The terrain moves in: pits open downward, hedges stand waist-high, ooze is jello
The flat token billboards give way to terrain that inhabits the room.
Pits, slime, tacks, and the dimensional warp's rings are painted INTO
the flagstones — the home-tile decal pass grows into a general per-cell
overlay grid, one texture per cell, alpha-blended texel by texel. Thorn
and rose hedges fill their square wall to wall at half height, drawn
with a near-bias so the wizard standing among the thorns peeks over the
top. The killer ooze rises as a full translucent cube of jello, bricks
and bodies visible through it; dust billows; and each dimensional warp
mouth throws an additive pillar of violet light up from its floor ring.
Billboards learn aspect, translucency, glow, and draw-order bias to
carry it all.

Nine paintable starters ship — four floor decals under textures/, five
standing volumes under terrain3d/ (spec updated for the artist, hedges
wide, jello solid, warpglow as light) — shown in the token workshop,
rehearsable in place with /?fpv&terrain=thornbush@3,7;jello@4,7.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-23 18:25:01 -04:00

79 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# The conjuration sprites — a spec for the artist
The first-person view (`/?fpv`, and the replay's "your eyes" mode) throws
spell moments through the air as **billboard sprites**: flat images that
always face the camera, drawn glowing in mid-air, occluded by walls, and
scaled by distance. Nine sprites cover every spell moment in the game.
Each lives at `packages/web/public/textures/../fx3d/<name>.png` — replace
the file, refresh, done. The current files are placeholder radial glows;
all nine are shown side by side at `/?tokens` under "The conjurations."
## Technical requirements
- **Format:** PNG with a transparent background. The transparent area is
essential — whatever is opaque is what flies.
- **Size:** square, any resolution; 128×128 or 256×256 recommended. The
renderer scales freely and pixelates on magnification (the whole view
is deliberately chunky, like the wall textures).
- **Drawn additively:** sprites are composited in "lighter" (additive)
mode over a dark dungeon, so dark pixels vanish and bright pixels glow.
Paint light-on-transparent; pure black will be invisible. Midtones read
as translucent light.
- **No animation frames.** Each sprite is a single still. Motion comes
from the renderer: projectiles streak across the room, impacts swell
from small to large while fading out. Radially symmetric (or nearly so)
designs work best since the image does not rotate.
- **Fills most of the canvas.** Leave only a small transparent margin;
the renderer sizes the sprite by its canvas, not its painted extent.
## The nine sprites and where they appear
| file | flies as | moment |
| --- | --- | --- |
| `fireball.png` | projectile | Fireball, Sudden Death, Blaster Wand — a ball of fire streaking caster → target |
| `bolt.png` | projectile | Lightning Blast, Power Drain — a crackling bolt |
| `waterbolt.png` | projectile | Waterbolt — a hurled gout of water |
| `spark.png` | projectile | anything else that travels: thrown objects, bodies knocked back, dragged things — a neutral streak of force |
| `burst.png` | impact | a fireball landing; victory fireworks — swells and fades |
| `splash.png` | impact | waterbolt landing, stone turned to water |
| `hit.png` | impact | damage landing on someone you can see; punches, claws |
| `shimmer.png` | impact | teleports, warps, illusions, minds touched — the general "magic happened here" glimmer, violet by tradition |
| `shield.png` | impact | an attack fully stopped; absorbed spells |
| `rubble.png` | prop | a destroyed wall's remains: bursts on the kill, then stands as a mound at the fallen edge for the rest of the reel. Unlike the others this is drawn OPAQUE (normal compositing) — paint it as solid debris, not light |
Projectiles hold their size in flight (about a third of a wizard's
height). Impacts start small and swell to roughly double while fading —
so an impact painted as a ring or burst reads especially well.
What the sprites do NOT need to carry: screen-wide flashes when YOU are
hit (red), healed (green), or teleported (violet), the camera shake, the
door slide (doors animate by sliding `door.png` along its own edge — no
separate art), and the jammed-lock seethe (a pulsing rust glow the
renderer lays over the door) — those are renderer effects, not images.
## The terrain, in two families
**Floor decals**`public/textures/pit.png`, `slime.png`, `tacks.png`,
`dimwarp.png` — are painted INTO the flagstones by the floor caster,
alpha-blended texel by texel like the home tile: transparent wherever
plain floor should show. The pit can carry its own painted label if
wanted. Square, any size.
**Standing volumes**`public/terrain3d/thornbush.png`, `rosebush.png`,
`jello.png`, `dust.png`, `warpglow.png` — are billboards in the room.
The hedges render CELL-WIDE at half wall height (paint them twice as
wide as tall; a wizard in the square peeks over the top). The jello
cube fills the whole square and is drawn ~60% opaque — paint it solid,
the renderer supplies the translucency. Dust likewise. `warpglow` is a
pillar of light drawn ADDITIVELY (like the old glow sprites): bright
means bright, black vanishes. Rehearse any of them in place:
`/?fpv&terrain=thornbush@3,7;jello@4,7;dimwarp@2,7`.
## One more paintable surface: the home tile
`public/textures/home.png` is a floor overlay for home-base cells,
drawn over the flagstones and TINTED by the owning wizard's color at
draw time. Paint it near-white/neutral with transparency wherever the
plain floor should show through; the tint does the rest. Square, any
size, same as the other textures.