Ring of Fire
About
Flames rising from a ring. This tweetcart/tootcart (351 characters) explores realistic fire simulation using entropy locking. The default starting seed is always 6, which creates the intended fire effect.
Click or tap the screen to generate a new random seed—some rare outcomes can be quite bizarre, demonstrating how different entropy lock patterns produce wildly different behaviors from the same underlying code.
Part of a diptych with BLUE. Where BLUE has rain falling, Ring of Fire has flames rising. Both feature a prominent circle as the source of all the pixel cascades.
Exhibition History
This piece was curated for RGBMTL (then called TEZARTMTL) in August 2022—a Montreal-based collective exhibition showcasing digital art from the Tezos blockchain. The event features a unique "collective curation" model where 25 artists each select 5-10 artists, creating an extensive showcase displayed on projections, CRT monitors, and LED panels.
Entropy Locking as Generator
This piece demonstrates entropy locking as a generative tool. The default seed (6) creates the "correct" fire effect. But by clicking to reseed, you can explore how different entropy lock patterns create entirely different visual outcomes.
Some seeds produce chaotic explosions, some create smooth flows, some generate rare geometric patterns. The entropy locking line if(r()>.9 and r()>.9)srand(s) acts as a filter that amplifies certain random sequences while dampening others, making each seed's behavior unique and discoverable.
Author's Notes
A classic Pico-8 tweetcart motif is to render flames. For this piece I wanted to create realistic-looking flames using entropy locking to achieve the desired effect. The companion piece to BLUE demonstrates the technique's versatility—same core idea (pixels cascading from a circle), opposite direction, completely different feel.
Technical Notes
Tweetcart Source Code (351 Characters)
_set_fps(60)poke(0x5f2d, 1)r=rnd
s=6srand(s)cls()x=64y=64?"\^!5f10000▒1😐<67♥:9웃🅾️8☉"
function g(c)if(c==0)return r({0,0,0,15})
return r({c-1,c,c+1})end
::_::for i=0,200do
if(r()>.9 and r()>.9)srand(s)
x+=r({r(10),-r(10)})y+=r({-r(10)})x%=128y%=128c=pget(x,y)pset(x+r({-1,0,1}),y+r({-1,-1,0}),g(c))end
circ(64,64,32,7)
if(stat(34)==1)s=r(-1)cls()
goto _
Controls
- Click/tap screen - Generate new random seed and reset
Entropy Locking Line
The critical line that creates the fire effect:
if(r()>.9 and r()>.9)srand(s)
This double-gate pattern (both conditions must pass) creates a ~1% chance of resetting the seed on each iteration. This probabilistic reset catches certain random sequences and amplifies them, creating the flickering flame behavior.
Color Function
The color progression simulates fire heat:
function g(c)if(c==0)return r({0,0,0,15})
return r({c-1,c,c+1})end
Pixels can shift to adjacent colors in the palette, creating the gradient from dark to bright yellows/oranges as "heat" propagates upward.