BIRDSTAR
A pico-8 commentary on climate change, futility and memory manipulation for the Linux Game Jam '17.
You can play it on itch.io here, or on github here with a plainer background. The source is freely available from github.
This cart was mostly just the result of me learning how to mess around with memcpy() -- it turns out that you can do some pretty fun stuff this way. The reflection at the bottom of the screen is created by grabbing part of the screen from memory and overwriting later addresses, in reverse row order. The 'ripple' is done by literally writing to addresses which are further ahead or slightly behind of the normal translation.
I wrapped this up as a very simple game, because I couldn't find an actual working example of a technique like this around the pico 8 community (though I found a couple of .gifs of other peoples' projects, so I knew it could be done). In the end I got a code snippet from the lexaloffle forums that I hacked a bit to do my thing:
mirrorcpy(0,128-32*2+1.5*sin(tick/60),0,128-32+1.5*sin(tick/60),128,128-32+1.5*sin(tick/60)) [...] function mirrorcpy(sx,sy,dx,dy,w,h) if (sx+w>128) w=128-sx if (dx+w>128) w=128-dx if (sy+h>128) h=128-sy if (dy+h>128) h=128-dy w = w/2 sad = 0x6000+flr(sy)*64+sx/2 dad = 0x6000+127*64+dx/2 -- reflect for y=1,h do memcpy(dad,sad,w) sad+=64 dad-=64-sin((y)/8)*cos(tick/64) end end |
Not really sure if this was mentioned anywhere, but I thought it might be useful for anyone who wants to make use of vector math, specifically calculating the length of a 2D vector, while minimizing the risk of overflow.
Because the sqrt(32767) ~= 181, it is easy to overflow when using the textbook equation for calculating vector length:
len = sqrt(x*x + y*y) |
To derisk overflowing when squaring the terms, you can first scale down the vector's x and y components:
m = max(x,y) x = x / m y = y / m |
then scale the square root of their sums:
len = sqrt(x*x + y*y) * m |
Lua code (simplified since one term will always == 1):
function length(v) local d = max(abs(v[1]),abs(v[2])) local n = min(abs(v[1]),abs(v[2])) / d return sqrt(n*n + 1) * d end |





The game
Inspired by my memory of the Oregon Trail hunting mini-game, shoot haunted home appliances to release the spirits inhabiting them in this game. With 10 levels and 10 bullets each, each hit reduces the haunted percentage by 1%. Don't let the appliances touch you or your hunter will run scared from the level.
Older versions

V2 has several improvements based on great community feedback:
- the "Invert Y axis" setting is saved in cart data
- the player may not flee the battle area to wait until the shield and lasers are repaired
- Enemies are more aggressive, some will follow the player
- Introduce faster TIE/IN interceptor to ramp up the difficulty
- Minor improvements and bugfixes to game over screen and game state management









Happy Saturday!
This is an attempt to create a faster falling sand simulation (60fps) by reading and writing directly to screen memory. All pixels / sand particles are active at all times.
I was inspired by Helado's Tiny Terrarium and Axnjxn's Falling sand.
https://www.lexaloffle.com/bbs/?uid=10783
https://www.lexaloffle.com/bbs/?uid=23000
I'm writing 1X2 pixel blocks in order to work directly with bytes and avoid bit-masking to address individual pixels. Then, I am using the display mode hack ( poke(0x5f2c, 2) ) to stretch the vertical scale of the display by 2X without requiring me to write any more data to screen memory.
-Electric Gryphon


After a long time without any updates I have decided to post version 0.5 of the game in its current, un-finished state. There is no goal as such apart from mine gold and build some cool looking space stations. Since version 0.4 many changes have been made such as adding a title screen, fixing some sound issues, improving sprite work, adding some new building blocks and many other improvements.
This is an unfinished update and game overall that will most likely never be finished but I hope you enjoy what is here now. I think that it is for the best for me to move onto new ideas and projects rather than get stuck on the same project for months on end.
[b]Old Versions:








This is some really good stuff, certainly worth a dig. It's the kind of thing I've been trying to get into with dynamic level generation, eventually. There's a lot of ways to apply these principles, too!
https://www.rockpapershotgun.com/2017/03/10/how-unexplored-generates-great-roguelike-dungeons/

