0 fps
// DOOM Fire — Fabien Sanglard's algorithm
for each pixel (x, y) from top to bottom-1:
  decay  = rand() & 1          // 0 or 1
  src    = pixels[(y+1)*W + x] // pixel below
  dst    = (x - decay + W) % W // drift left
  pixels[y*W + dst] = max(0, src - decay)

// bottom row initialized to intensity (0–36)
// click canvas to cool down local area