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>
79 lines
4.5 KiB
Markdown
79 lines
4.5 KiB
Markdown
# 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.
|