Files
wizwar6e/research/fx3d-sprite-spec.md
T
Eric WagonerandClaude Fable 5 cdfae39398 The maze performs: doors swing, walls die loudly, homes wear their colors
Entertainment polish for the instant replay, all through one wizard's
eyes. Doors now slide open along their own edge — Wolf3D style — when
anyone steps through in a reel, hold for the crossing, and swing shut;
the raycaster takes a per-edge openness map and doors carry their
texture with them, leaving a sliver of jamb at the far post. A wall
that dies bursts into stone and shakes the camera, then leaves a mound
of rubble at the fallen edge for the rest of the reel (a tenth
paintable sprite, drawn opaque — debris, not light). Jammed locks
seethe: a rusty pulse across the wood, keyed off the view's own door
states. Walking THROUGH a wall shimmers on both faces and washes the
walker's own screen stone-gray. And every home base wears its owner's
emblem on the flagstones — a near-white paintable overlay tinted by
wizard color per cell in the floor cast.

Testing surfaced a real ghost: a body standing near a far warp mouth
also rendered at its virtual position, which can overlap real
corridors — the depth buffer alone cannot clip it. Every column now
remembers whether its ray bent, and a sprite draws only where its warp
side matches the column's; projectile legs carry the same flag.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-23 16:30:35 -04:00

3.6 KiB
Raw Blame History

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.

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.