Andrey Listopadov

Game1 - Results

Well, this was fun! A bit exhausting, actually. The first of five months of the challenge has ended and here are the results:

The game isn’t really complete, but I did my best to make it feel as complete as possible in the time constraints I had. Technically, I have 1 day left, but given that I need to start working on the next game immediately I decided to give myself a day off. It only features one level, and cuts out to the “you won” screen, but I still consider it a success.

Here’s the last bit of devlog for this particular game outlining some things I did since the last post in no particular order.

Graphic overhaul

I’ve added parallax scrolling to the background, making the game happen inside a cave. Well, at least, now the background is not that boring to look at, but it’s still plain.

Then, I added a second layer and started experimenting with different colors:

The problem with limited colors is that I can’t find a way of having foreground and background properly separated without using outlines on sprites, which I wanted to avoid for this game at least. Thus, slimes are now blue instead of green. But I like it more this way because it pops from the green ground a bit better. And now that the background is also green it’s a lot more sensible.

I’ve spent some time drawing foliage, like mushrooms, trees, grass, water, and so on. None of this is animated though - time is once again against me.

Also, added the menus, title screen, cover art, and some fade-in/out animations for smoother transitions:

Enemy AI

While I wanted to add more enemy types to the game I simply ran out of time, so the game only features basic slimes. Their AI is extremely simple too - just roam forward until there’s no more ground, a wall, or another entity, then turns around.

Still, I had some trouble implementing this at first, as I tried to use the world:check method to try and move the slime forward and below to check if there’s ground to traverse on. But this didn’t work for some reason, so I opted for advanced bump API world:queryRect and queried the rectangle below the slime instead. It worked nicely, and perhaps I’ll use this to make a more robust AI in future games.

I was toying for a little bit with flying enemies, but it’s hard to make them work right with the environment. I didn’t want something like Medusa heads from Castlevania games, but that’s exactly what I got during testing.

I also finally added the death mechanic, as previously the game lacked it completely. Death doesn’t take away your score, as the game turned out to be hard, and there are not enough coins in the only level to get 100 of them and earn an extra life.

Level design

Probably shouldn’t have left this to the last possible moment, but designing interesting levels turned out to be a lot harder than I thought initially. I think I’ve managed to at least do a somewhat challenging one, but you’re the judge here. Probably most enemies and traps are cheap.

As I mentioned previously, I’ve used the map editor to construct the level:

It’s a shame though that Tiled, a tilemap editor, doesn’t support TIC’s maps. Well, there’s a converter but it didn’t work for me. Map editor in TIC isn’t bad, but it isn’t as good as something like Tiled. For example, Tiled has randomization from a selected set of tiles when you paint with them, which makes things like ground feel less repetitive. In TIC I had to do it by hand, and I may have forgotten to do it somewhere in the game, so excuse me if you’ll see something like that.

I used the bottom of the map to draw menus, backgrounds, transitions, and so on, as can be seen here:

My initial idea was to implement the first few levels like this, one below another, and then switch the memory bank, draw a new set of tiles, and make more levels. But not only I ran out of time, I also ran out of ideas. Maybe next time.

Overall, I’d say making levels isn’t my least favorite thing so far but it’s close. I’ve played in a fair bit of games with level editors and even published some online, but it never grew on me. I guess I’m not a level designer at heart.

Music and SFX

This was probably the hardest part. I can’t compose music and TIC’s tracker is alien to me. Sound design is a bit easier, but I don’t know a lot of tricks, so sounds in this game are far and few between. Still was worth a shot.

Up next

The next game in the challenge is a roguelike. This kind of game poses different problems, like pathfinding, more complex enemy AI in general, randomization of levels, items, etc. I kinda feel exhausted right now but I’ll still try not to repeat the mistake I made and not procrastinate too much in the first weeks. Though the next month is packed with various life-related events, much more than this one, so we’ll see.

As for this game, here’s the cartridge if you want to play it yourself:

Though, because the original code requires a more recent version of Fennel than the one TIC provides, the code in the cart above was AOT compiled to Lua and isn’t very readable. Also note that the last stable release of TIC still contains the #1904 bug, which means that my game will run ~10 times slower than it should. So you either need to play the game on the page, as it features a more recent version, build a standalone version yourself, or use an older release with the Lua version above. You can read the original source code at the page linked above, or in the game repository.