Previous page

Project Retrospective — Panic Shopper Game

First of all — you can play the game this post is about here. It works from browser, so you don’t have to download anything! And it takes around 5 minutes to finish it, so time investment shouldn’t be an issue as well.

Right now there is a game jam — Ludum Dare 46 — going on the internet. In time when everyone should sit at home because of quarantine (at least that’s how it is like right now in Poland), it sounds like a good idea to find a way to distract yourself from… sitting idle at home. For me one of the ways to do that was to participate in that game jam!

It was not my first one — I already had a chance to participate twice (SGJ2018 & TKGJ2019) but first one on which my partner-in-crime for last two jams bailed out on me (shame on you, @duobix!), resulting in me having to do the work by myself.

I think of this post as mostly just a memo for myself in a future — where I was, what were my thoughts and how I approached (or not) few topics. Whole project lasted for about 1,5 day — started at 10 AM on Saturday and finished on 3 PM Sunday).

Basic assumption was that I am doing it for fun — I am not a pro, don’t aim to be one. Just a single guy doing some crappy game in his free time. That is my usual way of talking about game-alike software that I created in a past — even my homepage states that I “create shitty games for fun in my free time”. While I had quite a lot of time (jam started at 3 AM on Saturday and will be done on Tuesday) to prepare some ‘quality content’, my approach was to limit the scope to bare minimum, and avoid scope creep at all costs. After all that’s how you never finish any project, right?

On the other hand I wanted to really make it my own. Own code was a guarantee, but also other assets — sounds, graphics. Taking care of everything from git init up to full preparation of site for the project. This is my standard approach for my ‘proper’ software developer projects — you cannot avoid some part of the work if you want to learn what some (potential) issues may be later-on with code that you write, i.e. during deployment or hosting.

3 PM on Saturday — first ‘prototype’ of UI, after around 3 hours of working on a game.

But that would mean cutting corners — don’t try to make everything beautiful, just ‘get it done’. That’s why some of the assets that I’ve created looked exactly the same in first prototypes (like phone you can see on the image above) as in final version that was pushed to And that’s actually fine. Stating to myself “yup, it looks shitty but gets job done” was making it much easier to organize work properly — because I didn’t had a temptation to go back to what I already marked as ‘finished’ and could only look forward to what’s left to do.

And that’s fine as well. It’s just for fun after all.

I used tooling that I had some experience with in the past — Godot Engine as ‘heart’ of the project. While I had some experience with Unity as well in the past, I found Godot much more ‘lightweight’ than Unity, and it got job done properly. But still only 2D games. I don’t trust myself with that whole 3D models stuff yet, and I don’t feel like that moment will come anytime soon.

I am pretty proud of myself as I didn’t even look-through the code we had for last game jam when we used Godot. And as I did not use that engine for more than 1 year, this is definitely an achievement for me. I did base my grid movement on article on the other hand. Well, while I’m not a kid any more, all sources of knowledge come handy!

I still had some issues — perhaps from my lack of knowledge, perhaps because some features ‘doesn’t behave the way I expected them to’. I wanted to use Autotile feature to make creating maps much easier, but after spending about 30 mins trying to properly set-up bitmasks on them — I gave up. Zones created using autotile never looked properly, so I decided to stick to the manual ones.

One thing that I am very angry about is how many shortcuts I used to make game work. Things like putting almost whole game logic into singleton & passing “Player” object to objects with which the player should interact with just to have possibility to access some nodes that were part of “Player” scene (mainly Camera). Oh, and I totally ignored signals. “Event listeners? Never heard of it, sounds like some mumbo-jumbo.”

Probably I should go through those things sometime in a near future and learn how it should ‘properly be done’. And learn how to use that damn Autotile feature.

For graphics I used Aseprite, as I had it on Steam since at least 2 years ago when I did some summer pixel-art marathon to learn how to properly do pixel art. Guess what? After two years I remember almost nothing, and my pixel art was not looking too good. At the very beginning it was not looking at all.

Compare my final ‘main character’ to what you saw on the previous image.

On main character alone I spend around 45 minutes. Animation was easy, but preparing the base one was hard as hell. And this is definitely not how I want it to happen in the future. I even replaced other people in the shop with something similar to “Wet Floor” signs (that yellow thing you can see in top-right corner at some point of animation) to avoid creating other customers in the shop.

Second issue that I’ve had was a size of everything. I decided to go with 16x16 tiles — and it’s reaaaaly hard to fit anything there. While it may be some kind of ‘fun limitation’ to be more creative, for next projects I will probably move to 32x32. That will also make it easier to work with i.e. fonts in whole project (most of it was too pixelated in end result), as by making everything bigger smaller font sizes will also scale properly.

Third (and last!) issue I had with my sprites was a palette. I had difficulties with creating graphics using Aseprite default palette and didn’t bother to get any other. For pixel art folks usually stick to some limited amount of colours to have a possibility to create a colour theme around everything. Two years ago I used to play with different palettes provided by Lospec, but here I somehow forgotten and used the default one, which had quite a lot of colours I had no use for. And then I struggled with things like light over shopping basket, as I did not had too many colours that could create proper shadows impressions.

Last (but not least) — music. I though this would be walk in a park, as I was pretty confident in tools I had available. Most notably GarageBand. After all how difficult it would be to create around 8 seconds of music that should loop during the game? Oh boy was I for the treat.

I spend around 1 hour playing with different instruments provided by the tool, without any success. I was never able to find the good sounding one (I was aiming for ‘gameboy-alike sounds’) for the type of game I was making. I then tried to mimic what we did on previous game jams — using sunvox. Definitely not a way for me to go, I totally forgotten how to use that tool. I ended up with using Beepbox for the final melody playing in the background — it was easy and did a job properly. And based on content I saw other people created using it — there is a huuuge potential in learning that one. Maybe even creating something similar to Magnus Pålsson PPPPPP, which for me is one of the best music using chiptune style.

Still even outside of this jam I had a rather productive weekend — I found time for workout, spending some quality reading time in a garden and even went for a shopping trip (and there was no queue at entrance, which probably used all my luck for the weekend) to the nearest supermarket. If you’re reading it when COVID-19 is a thing of the past: during April 2020 shops in Poland had a limit of people that could be inside a shop at the same time because of quarantine, which resulted in queues in front of most of the bigger shops selling everyday products.

End result looked much better than I anticipated.

But the best thing came after publishing the game and sending some social media posts to my friends about it — for the first time I felt like I can create some ‘bigger’ and ‘proper’ game, just by working on it from time to time. And it’s definitely better way to use some of that ‘creative juice’ than simply writing some software that nobody would use. After all, more people will be interested in some visual product that they can play around with, rather than some software for use-case they will never have!

And this time (perhaps) I’ll write a proper code, without those nasty shortcuts and skill limitations I have right now…


Previous page