Inspiration. is out now!
I'm too burned out to say anything else. Just go play it.

I'm too burned out to say anything else. Just go play it.

In the days since I released Inspiration., two major bugs have been brought to my attention:
These glitches have been fixed, but the original Compo submission is still available on the PICO-8 site if you want to experience these glitches for yourself. Either way, check out Inspiration. here: https://ldjam.com/events/ludum-dare/45/inspiration

I've pushed another small update for Inspiration. to fix a glitch where the bar's exit didn't work properly, and you could glitch out of bounds or get stuck inside a house. The actual collision detection still doesn't work properly but I'm probably gonna just give up on that. This happens every jam and I'm honestly sick and tired of it.
Anyway, check out Inspiration. here if you haven't already: https://ldjam.com/events/ludum-dare/45/inspiration

...I got the collision detection in Inspiration. working properly! No more getting stuck... I hope!

Hopefully, no more need for patches either. I might make some post-jam graphical upgrades, but this should be it for now. If you haven't already, give it a try: https://ldjam.com/events/ludum-dare/45/inspiration
As has become my custom, I'm going to take a little time to discuss the more technical aspects of my LD45 entry, Inspiration.; the design decisions, the implementation, and how I came up with such a meta concept in the first place.
First, if you haven't played Inspiration. yet, go do that!
October 4th, 11pm BST. The theme was announced as "Start with nothing", and scrolling through the feed, it seemed not everyone was happy with the choice. More than once I saw people saying that they had no ideas, and remarking at the irony of that.
Then I looked at my empty PICO-8 code page. Then it hit me: We're all starting from nothing too. And thus, Inspiration. was born. The title is inspired by the 2002 film Adaptation., written by Charlie Kaufman, about Charlie Kaufman (played by Nicolas Cage) trying to write a film script.
In terms of gameplay, Inspiration. is similar to my previous entry, 15 Minutes to Live, but with a few additions. NPCs and objects are now distinct types of entity, with different interaction systems. For example, you can pick objects up off the ground, something you couldn't do in 15 Minutes.

The distinct interaction systems have other advantages. NPCs and objects both have their dialogue stored in arrays. NPC dialogue is consumed three rows at a time, with every third row containing the name of the NPC who's currently speaking, but object dialogue doesn't have that third "name" row, so I don't have to pad it out with empty strings.
Another important little touch is that if the dialogue box would hide you, the game will move it to the top of the window instead. Observe:

15 Minutes to Live had a very grey, monochromatic world, with buildings surrounding you on all sides. I wanted to give it a futuristic feel, while communicating the gloom of Vance's situation and the feeling of being "trapped" that pervades the storyline.
Inspiration. is the opposite. It's bright, colourful, and full of wide-open spaces. The park takes up about half the game world. Though some of the NPCs have quite melancholy stories (poor Vance, the guy just can't catch a break...), overall the tone is a lot more cheerful, relaxed, and optimistic, and I wanted to convey that through the world. Also I just couldn't think of anything else to add in.
This is honestly one of my favourite effects I've pulled off in PICO-8. It was meant to be just for the inventory system, but I liked it so much I put it on the main menu:

The whole thing is just 33 tokens, and a single sprite for the rings at the top:
rectfill(20,8,107,115,7)
for i=20,108,8 do
line(20,i,107,i,12)
end
for i=22,107,8 do
spr(15,i,4)
end
(The pencil is a further 24 tokens and two sprites, in case you're wondering.)
At the end of every interaction, the game checks whether the person/object you're interacting with has any inspiration to offer you, and whether you've progressed far enough along their dialogue tree to receive it. If so, the inspiration is stored in a "bank" variable, and a flag is set so you can't earn that same inspiration a second time.
Every frame, if the "bank" variable is greater than 0, a small portion of it will be deducted and added to your current inspiration. This creates the effect of the meter gradually "filling". To give it some extra juice, particles will spawn at the tip of the bar, with randomised speeds, directions, and lifespans. I don't add enough of these small touches.

That's all I have to discuss. If there's anything else you'd like to know about the development of Inspiration., leave a comment!
First of all, as always: thanks to all the people who've played and reviewed Inspiration. so far! I think it got to 20 reviews faster than any of my previous entries, and I've gotten some excellent feedback. Unfortunately I've been slacking in terms of rating other people's games, and I need to start doing that over the weekend.
In the meantime, though, it's time for my regular post-mortem: what went well while making Inspiration., and what didn't?



I might, over the weekend, push out one last patch, making a few tweaks to the graphics and dialogue. Other than that, I have no real plans for Inspiration.. It's too specific to this jam for me to really do anything with it outside of this jam, plus, as I mentioned before, I'm kinda burnt out on it.
For Ludum Dare 46, I'll attempt to push my boundaries and make something that isn't an adventure game... while still telling a story, of course. I also need to set aside some time to practice using and composing in the PICO-8 music tracker, so I can finally compose proper soundtracks for my entries. I'm going to be able to start working from home soon, which should give me a lot more free time for things like that because my current commute is horrendous.
...and in future, if I go into a Ludum Dare weekend not feeling well, I will just pull out. It's better than pushing myself to the point of burnout like I did this time round.
Anyway: thanks once again to everyone who's reviewed my game so far, I wish you all the best of luck with your own entries, and see you again next Ludum Dare!
I've finally managed to get to 20 ratings given, so I'm safe. I feel kinda bad about stopping at 20 (and taking so long to get there in the first place), but life and mental issues get in the way, sadly.
Anyway, if you want to play and rate my game, Inspiration., you've got less than 24 hours to do so! Give it a look: https://ldjam.com/events/ludum-dare/45/inspiration


Not as good as last year, but I kinda expected that. 15 Minutes to Live was always going to be a hard act to follow. Still very good results, though! I can be pleased with that.
Roll on Ludum Dare 46! Hopefully I'm not suffering from a cold and migraines during that one :joy:
This'll be my sixth Ludum Dare. I've been meaning to do some development work this year but I've been low on creative energy, so hopefully this will be the spark I need.
My main goal this time round is to try and push my creative boundaries, and develop something in a genre I don't usually work in, or with a system I've never programmed before. My previous two entries were pretty similar, and I don't want to get stuck in a rut. I'll still try and create something story-driven, but I'm not going to commit to it this time round.
As always, though, I'll be developing my entry in either PICO-8 or TIC-80, and tucked away somewhere within will be a reference to my previous entry (namely, Inspiration.).
I'm off work for a few days, so for the first time ever, I'll be entering the Jam instead of the Compo. This way, I can fix the two main weaknesses of my past entries:
Therefore: I'm looking for someone skilled at composing in PICO-8 and/or TIC-80 to collaborate with me on my Ludum Dare 46 entry. I'm open to collaborating on other areas of the game, but music is the most important area.
Let me know if you're interested.
My collaborator @alanxoc3 came up with an idea where you control a drone and have to protect a bird that's flying through dangerous airspace. I'm working on a prototype, and I have a working control scheme. I have a small problem in that PICO-8 isn't letting me take screenshots or GIF recordings, which is going to make documenting my progress difficult... but I'll try anyway! And I'll contact support and see what they think.
The screenshots issue has been sorted out, so here's the first gameplay footage of my (currently untitled) entry:

The artwork isn't final, but the basic gameplay is there - you're an autonomous drone, wowed by the beauty of a passing bird (represented for now by the yellow blob), and your goal is to shoot the hell out of anything that threatens it.
As you can see, it's a lot more arcade-y and a lot less story-heavy than my previous few entries, while still having some semblance of a plotline. Hopefully the change in direction pays off.
Feat. weird bug where my controls lock up when I stop recording

I think I should be able to get the central game completed by the end of the day. That gives me tomorrow to add in all the less-important stuff like menu screens, sound effects, extra obstacles, and better sprites, and Monday to finish polishing and then test the hell out of it.
As well as shooting obstacles, there's another way to get the bird out of harm's way - lure it towards you with birdsong.

To encourage the use of this mechanic, there'll be some obstacles (like skyscrapers) that you can't shoot down, so you'll have to lure the bird around them. Just try not to lure it into an obstacle, like I did here, or you'll be greeted with one of my humorous death quotes (to say nothing of my predictably-lousy collision detection).
Made a lot of progress today. The final major addition is this eagle, who comes screeching in to try and snatch the poor bird out of the sky:

I'm gonna turn the code over to @alanxoc3, who's got the music track ready and can hopefully make a few other improvements while I'm in bed. Then on Day 2 it'll be time for the main menu system and some major polishing. Reckon I'm doing okay so far!
@alanxoc3 was hard at work on the game last night, and here's what it looks like now:

As well as the obvious stuff - a new alien enemy and clouds in the background - there's some subtle details like the bird drifting around the play area instead of staying in one place, forcing you to call it back to you. He's also added in the music, and a few new sound effects.
Day 2 is here, so time to crack on!
Complete with clouds!

I think all that's left at this point is the opening cutscene, and as much polish as I can be bothered to dump on it, and that's it!
I didn't make as much progress with the opening cutscene as I would have liked, but a fair amount of it is done:

Nearly there now. Tomorrow I'll be finishing it up and sending it in, hopefully with some time to spare - and with no bugs!
It's taken a lot of work to get this done, but finally, Save The Bird! is live! And hopefully glitch-free!

How long can you keep the bird alive for? Find out here! Please do give feedback, but don't expect me to respond for a while because it's 2am for me and I gotta go pass out.
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!
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.

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!

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...