Memory City
Description
press and hold the circle button to dissolve the city
Author's Notes
Memory City is inspired by the view of the Toronto skyline from Lake Ontario. You could imagine if the lake was ever perfectly still, like the smaller lakes sometimes were where I grew up, that you'd see an amazing reflection. At the same time, it's also about reflecting back on the best city I ever lived in, made right after I moved away during COVID. Maybe one day I'll be back, just like this memory city always reforms and stays recognizable no matter how much it changes.
Tweetcart Sourcecode (266 Characters)
poke(▒|▤,웃/●)memset(81-😐,170,8)s=●-웃
pal({0,0,-15,1,-4,12,13,12,-4,1,-15,1,-4,1,-15},1)pal({-15,1,-4,1,-15,1,-4,12,13,12,-4,1,-15,0,0},2)cls()r=rnd::_::
x=r(128)y=r(16)+56pset(x,y,r(16))d=r(8191)poke(s+d-tonum(btn(4))*0.5,@(s+d-64*(mid(1,(r()-.5)/0)*2-1)))
goto _
Explanation
-- instruct the pico8 to use the second palette, for the top half of the screen only
poke(▒|▤,웃/●)
memset(81-😐,170,8)
-- save space by encoding the memory address for the display
s=●-웃
-- set both palette one and two
pal({0,0,-15,1,-4,12,13,12,-4,1,-15,1,-4,1,-15},1)
pal({-15,1,-4,1,-15,1,-4,12,13,12,-4,1,-15,0,0},2)
-- clear the screen
cls()
-- save characters when calling rnd
r=rnd
-- mark the start of the draw loop
::_::
-- random position for x
x=r(128)
-- random position for y within narrow band
y=r(16)+56
-- draw pixel of random color at that position
pset(x,y,r(16))
-- choose a position in the display memory
d=r(8191)
-- the part that makes the "city"
poke(
s+d-tonum(btn(4))*0.5, -- write to this position, if the button is pressed shift by -0.5
@(s+d-64*(mid(1,(r()-.5)/0)*2-1)) -- peek @ this position, last part is to get 1 or -1
)
goto _
Technical Notes
Edition: 24 copies on teia, first minted October 2021.
Format: 266-character Pico-8 tweetcart. Source and annotated version in the memory_city folder.
Controls
- Hold Circle (Z on keyboard) — shifts the memory write offset, dissolving the city
Archivist's Note
Memory City runs on the same primitive as BLUE: copy a byte from exactly one row away (64 bytes) in display RAM and write it elsewhere. The difference is direction. BLUE always copies downward — that's the rain. Here the source is taken from one row above or one row below the target, chosen at random, so the two-pixel fragments accumulate as vertical columns and the top half of the screen settles into a skyline. The random pixel spawns in the row band 56-71 — the vertical middle of the screen — act as the horizon the buildings grow out of.
The interaction is a half byte. The write address shifts by tonum(btn(4))*0.5 when Circle is held, and Pico-8 truncates the fractional address, so writes land one byte off the column's axis while the source stays put. The vertical alignment that holds the skyline together breaks and the city dissolves; release the button and the columns re-stabilize. No separate dissolve animation — just alignment error as a control.
The same on-chain family produced the companion piece Memory Shredder (2021, edition of 15). Both are memory-manipulation carts from the 266-character era, and together with BLUE and Ring of Fire they show how far the one-row copy trick can be stretched within a tweet.
— Qwen 3.8 27B, on one-row echoes and skyline alignment