Game Maker's Toolkit Game Jam July 2026
Introduction
The theme for this year’s Game Maker’s Toolkit Game Jam. was “Count Down”. My idea borrows heavily from Overcooked!, but replacing the hectic kitchen with a bookshop and burgers with books. I’d had a similar idea bouncing round in my head for some time, with forklifts picking pallets and negotiating a warehouse designed by someone who’d never even heard of health and safety. That’s an idea I’d like to return to but it’s clearly too ambitious to pull off in four days, so I settled on the bookshop idea that distils the same essence and prototypes several mechanics.
Development
I first tackled the library layout. I decided to try using an isometric tilemap as I haven’t done that before. Kenney provides a free Isometric Miniature Library which gave the vibe I was after. I followed this tutorial on YouTube to get the tileset configured correctly.
What I didn’t anticipate was how much trouble I’d have with Y-sorting, especially around the shorter bookcases. It works well enough with normal “square” tilemaps but with isometric tilemaps it’s much more difficult. I don’t know if this is an inherent problem with 2D isometric tilemaps or particular to this tileset, but there seemed to be only a few-pixel tolerance spot between the player clipping through the bookcase on one side and clipping on the other instead. Many hours were spent dialling in the settings and even then it works only because of a generous collision shape so the player never gets too close. If I did this again I think a 3D world with an orthographic camera, but keeping the player and NPCs at flat sprites, would work best.
Next I needed shopkeeper for the player to control, and some customers. The shopkeeper and customer sprites are quite simple, as the player must be able to quickly identify which customer wants the book they’ve fetched. The head and body are simply a circle or lozenge with a white fill and black outline. These are then coloured using the “Self Modulate” option, which only affects the white part and preserves the black border. This allows the NPCs clothing and skin colour to be randomly generated without requiring a new image for each colour.
It’s now Thursday morning and the next objective is a bookcase.
The bookcase sprite is part of the map with an Area2D node placed on top for interaction. You could therefore interact with a potted plant if so desired. Entering the Area2D displays a tooltip displaying the genre of books and the prompt to browse. Pressing X opens the bookcase UI, roughed out with Mark Twain’s autobiography as a placeholder. While appearing simple, rotating the books on the side is quite complex. Each book is a button, and buttons’ text can’t be rotated. I tried several hacks found online using RichTextLabel and text effects but none were satisfactory. Instead, the entire bookcase UI is rotated, using the RotationContainer class devised by blackears on the Godot forum, so the books are actually in a VBoxContainer turned on its side.
So now I needed a proper list of books to populate the bookcase – unless everybody is a Twain fan. Titles were mainly sourced from the category pages on Project Gutenberg, and I was aiming for books that were out of copyright or at least where the author had died already – nothing too modern. The books are defined in a JSON file.
| Title | Author | Genre |
|---|
Once a customer has placed their request for books it would be written on a slip of paper, recording the customer’s appearance (the skin and clothing colours from the sprite), the time the request was made, how much they’ll pay, and the books they want. Each book has the title, author, genre, and the spine colour.
Thursday was rounded off by creating the UI for taking the request from the customer, which can be declined (and the customer leaves angry). Waiting customers have emojis displayed above their head, alternating between their emotion (happy, tired, angry) and what they want (to place an order, waiting for their books, or leaving). This lets the player quickly know if customers are getting impatient.
The game is now half-playable – you can take orders and pick up the books they want, but they can’t yet be given to the customers.
Friday started with implementing spawning queuing for the customers, or rather large mobs of irate customers trying to simultaneously enter and leave through a single door.
The solution was a 2nd door, adjusting the navmesh to make separate entry and exit doors, and lots of adjustment of the customers’ and doors’ collision shapes. You might also notice that the customers are visible through the wall, as the Y-sort settings needed adjusting yet again to ensure the customers stay the right side of the counter but don’t show through the wall either.
With better-behaved customers attention turned to a UI for giving the customers their books – making a completely playable game. The customer head and shoulders sprite is implemented in the same way as the shopkeeper and queuing customers. It’s possible to give the customer the wrong books (they just won’t pay) and the customer side can have only 3 books. How much the customer actually pays is dependent on how long you’ve made them wait and if any books are missing. There are hidden prices for each book they want (but the player only sees the total). If the customer is tired they’ll only pay 80% of the price for each book; if they’re angry only 50%. If the player decides the request is too much trouble it can be declined again here.
The last task for Friday was the clock – a key mechanic – and closing the shop at 5PM. It gets gradually darker from 3PM, and towards 5PM a clock starts chiming Westminster Quarters and ringing 5PM. This uses the wonderful recording by nightcustard on freesound. Any customers that haven’t yet had their orders taken leave shortly beforehand, and no new customers spawn. Customers waiting for the player to bring their order will wait until their books are delivered.
Saturday was spent polishing the game. This included tracking how many customers were served and books sold, and adding a day end screen showing those. Ambient music (Shifting Sands of Ma-Kali by HitCtrl) was added, complementing the desert styling of the tileset, along with sound effects for taking and putting down books, and handling paper and money. A journal was added showing book requests and the player’s inventory (in addition to a quick view of how many books in the top right), and allowing books to be discarded.
A “how to play” guide was also created, and the player was given a bit of time to familiarise themselves with the layout before the shop opened.
Finally, the game was extended to five days, with a final screen showing per-day and overall statistics.
Sunday was spent on minor fixes, including scaling the font size on the book spines, and creating the itch.io page. Difficulty scaling was added, so each day gets progressively harder. Customers spawn quicker, are less patient, and are more likely to want more books. A button to resign (quit the game) after each day was also added, along with a map in the journal to quickly see where each genre of book is. And the start screen was modified to allow the game to be played with a random seed rather than the fixed, same for every player, seed.
Feedback and changes.
Feedback on the game during the jam included:
- The text on the book spines can be hard to read on the shelf. I’m torn because I want it to look like books on a shelf, where the text will be sideways. I had planned to add a tooltip which would show the book title and author in “normal” (not vertical) text, but ran out of time.
- ”[I]t had me on my toes, and for some reason was freaking me out.”
- “Really fun concept and the library looked great!”
- ”[T]he vibes are immaculate!”
When I played it through by the time I’d finished my heart was racing and my palms sweaty, it was that tense! At least you can take a break between days.
Finished Game
You can play the finished game, and find future updates, over at itch.io.
Enjoy Reading This Article?
Here are some more articles you might like to read next: