Excellent game! Keep up the good work! 👍
SkyBerron
Creator of
Recent community posts
Thanks! I needed a background with some pattern to make the black outlines of the blobs stand out. So I figured a soft vertical scrolling of 16x16px tiles could work. As the blobs required several hits, I thought their colour could change and give hit point feedback. The remaining problem to solve was that the ship colours and background didn't have enough contrast, so I added a thin black border around ship and bullets. I don't know how, but everything could fit into 1024 compressed bytes.
Thanks! Adding user-controllable firing doesn't add too much code, but when you're just above 1024 compressed bytes, everything counts, Anyway, I think I'm getting too lazy and going auto-fire in every game from the start, instead of adding it only as last resource to keep within compressed code limits.
You're right, when you play higher levels at high speed, it's better that other bikes stay off-screen so you can focus on planning ahead your movements. It's crazy I just had to tweak tree drawing a bit to keep the framerate at 60 fps without drops to 30 fps.
All the information you need to encode sprite data into text strings and decode those strings in your game is here:
Tools
- Tweetcart Sprite Graphics Tutorial by JadeLombax - cram sprites+anim using only code!
I had to take apart a lot of features in order to meet the constraints 😭. And even so, I had to fight every single byte against the compressor 😅. I remember playing Charr (a Scorched Earth clone for the Amiga) countless hours in local multiplayer. Still, the game deserves a full featured version for PICO 8.
I had the palette arranged for bitplanes with 8 colors followed by brighter versions of them, but I forgot to use bitplanes 🤦♂️😅
After adding sprite decoding, I had a few compressed bytes in excess of the 1024 limit. I had lots of fun tweaking little changes to the code and watching the compressed byte counter go either up or down with same char count. 🤪
Thanks! I used your sprite encoder/decoder for the single 5 color 8x8 sprite that get scaled and color cycled depending on fish size. Very handy and compact code, so it doesn't compress well. I was thinking about going 16x16 2 color and add color banding in the decoder but the game was already working around this 5 color sprite.
The full screen flash was intentional, to let you know you successfully caught the red guy. But you're right, it also disables the spotlight mask and shows the red guy new position for one frame. Too fast for my eyes to notice, I suppose. If I had to code this game again, I would remove the flashing, as it's a bit unpleasant for the eyes.
Thanks for the kind words. The code is a bit unoptimized as I don't have much experience with using tline(). So I ended up with a code size over the maximum allowed. I had to reduce portal glitch code and take out sfx just to get to the size limits.
I decided the sequence had to be displayed on screen because in the movie the glyphs expressed coordinates. As a nice side effect, looking at the next glyph allows you to plan ahead, if you're fast enough.
Thanks for the kind words. The code is a bit unoptimized as I don't have much experience with using tline(). So I ended up with a code size over the maximum allowed. I had to reduce portal glitch code and take out sfx just to get to the size limits.
I decided the sequence had to be displayed on screen because in the movie the glyphs expressed coordinates. As a nice side effect, looking at the next glyph allows you to plan ahead, if you're fast enough.
The key code for movement is:
d=i>1and 1+((e.d-3)\2+rnd(3)\1)%4*2or e.n
That code executes when a character reaches a 8x8 tile and decides in which direction index 1+2*(0...3) it moves afterwards. Player takes i=1 and follows the next movement you selected before reaching the cell (it's a bit buggy because in order to leave a straight movement you have to set new direction just before you arrive to the tile). Ghosts take a random direction as long as it's not blocked and is different from going back. So no pathfinding, only random movement plus some logic to avoid weird behaviour.