Save the Bird! - The Techy Stuff
So I may have accidentally spent the ten days since the jam ended doing nothing but playing Civilization... oops. I'd better get reviewing!
In the meantime, though, I'd like to do my usual rundown of some of the tricks and techniques that went into making my entry, Save the Bird!. If you haven't played it yet, please do so!
The Gameplay
I felt like my LD44 and LD45 entries were too similar, so this time round I went for something totally different to my usual fare: a brightly-coloured side-scrolling shoot-em-up. Not only do you have to make sure you don't get hit, but you also have to make sure your precious bird doesn't get hit, adding a level of complexity (and difficulty) to what would otherwise be a straightforward shmup.

I put a lot of thought into the bird mechanic. To make sure you're not just guarding a static spot on the screen, the bird drifts randomly around the play area. To give you some control over its movement, you can have your drone play a bird call over its speakers, attracting the bird to you. To enforce the use of that mechanic, and prevent you from camping in the corner of the screen, I added skyscrapers that can't be destroyed with bullets - you have to guide the bird over them.

There's a nice variety of enemies, too. Eagles swoop in diagonally at high speed. Enemy drones, your former comrades, zoom in and fire a bullet at your location, forcing you to dodge. UFOs move down from the top of the screen and try and beam the bird (or yourself) up into them. As the game progresses, enemies spawn more frequently, and harder enemies become more likely to spawn.

The Intro Cutscene
I've never animated a cutscene this complex before. Or anything this complex before, really. It wasn't actually that much different to the small-scale cutscenes I've done before; it was just a matter of using a frame counter to make sure the right objects did the right things at the right times. I skimped on a couple of minor details, but I'm still proud of the result--

--especially since I managed to tell a story without a single word of dialogue. That's something I've never done before either.
One subtle little detail is that the other drones all swoop into the scene in unison -- they're following their programming to the pixel -- but your drone is very slightly out of step with them. It wasn't following the rest of the pack even before the bird came along! No, I didn't animate the drones as a single unit just to be lazy, honest!

The Highscore Board
AsterVoid tracked your high score, but Save the Bird! has a full top-8 leaderboard, something I've never implemented before. Storing the scores (and tricking PICO-8 into letting me have 8-digit scores when its numbers only go up to 32768) was the easy part. The hard part was making sure your score got inserted into the right leaderboard slot -- PICO-8 doesn't support table.insert, and Lua doesn't have built-in table sorting!
My solution was to append your score to the bottom of the leaderboard and then iterate through it from the bottom up, comparing each score to the one beneath it:
``` add(highscores,{ score[1],score[2] })
for i=8,1,-1 do local cur=highscores[i] if score[1]>=cur[1] and score[2]>cur[2] then --move your score up a place for k=1,2 do local lower=cur[k] local higher=score[k] highscores[i][k]=higher highscores[i+1][k]=lower end added=true end end ```
Simple and efficient. added=true then tells the game to display the "New high score!" message on the game over screen.

I think that's all I have to discuss for now. Let me know if there's anything else about Save the Bird! that you want to hear about! In the meantime, I'd better go leave some reviews...