---
id: ground-look-and-levels/004
title: Water and lava move — shader drift, shimmer, glow, shore foam, behind a toggle with a frame-time readout
epic: ground-look-and-levels
state: done
priority: 2
blocked_by: []
estimate: S
created: 2026-08-18
updated: 2026-08-18
claimed_by: null
claimed_at: null
delivers: []
review_artifact: land-of-lor/docs/handoff/ground-look-and-levels.md
---

## What to do

Decision 9 of the workshop note (`land-of-lor/docs/design/2026-08-18-ground-look-and-levels-workshop.md`).

- `ground.gdshader`: for cells flagged as sinking liquids (water, lava — the flag byte in the
  data texture already says sunken; sand is not a liquid) drift the tile sample position with
  `TIME`; a second, slower offset layer blended in for shimmer; lava a slow brightness pulse;
  animated foam (value noise, white) on the bank band at the waterline, read off the height. A
  `ground_animation` uniform (0/1) turns all of it off.
- A frame-time readout in the HUD's dev/debug corner (or the existing dev overlay), so the
  number is readable on a phone; `game/README.md` says how to read it. Take the laptop and web
  numbers with the animation on and off on the 60×60 Badlands at maximum zoom-out; the phone
  number is Kris's — say so in the handoff.
- A short GIF (a few frames from the shot harness) in `docs/handoff/ground-look-and-levels/`.

## Definition of done

Animation visible in the GIF, toggle works, readout works, numbers in the handoff note.
Committed and pushed.

## Where the work lands

`land-of-lor/game/world/client/`, `docs/handoff/`.

## What was done (2026-08-18, laptop workshop session)

Built and shipped the same day. Drift + shimmer for liquid cells (two reads instead of one, a
coherent per-cell branch), a slow glow pulse on lava, foam along the waterline (water only,
never lava or a cliff face, sparse moving crests), all from `TIME`; behind the `animate`
uniform, remembered across Area rebuilds; the HUD's bottom-left perf readout (frame ms · fps ·
water moving/still) flips it on a tap. `LOR_SHOTS_ANIM=N` for the GIF
(`docs/handoff/ground-look-and-levels/water-lava-foam.gif`), `LOR_SHOTS_PERF=1` for the number:
laptop iGPU, whole 60×60 Badlands at 844×390, viewport GPU time 0.96 ms still, ~1.2 ms moving.
**The phone number is Kris's** — read the readout, tap, read again. Handoff: `land-of-lor/docs/handoff/ground-look-and-levels.md`.