my dog flapjack

GMTK 2022 Postmorten

GMTK gamejam logo

I participated in the GMTK Jam the other weekend, and thought I'd try and get back into the habit of writing a postmortem! So here's some random thoughts

Workflow Changes

I've been doing game jams since 2018, and with the exception of one I've always used fantasy consoles. One of the gimmick of fantasy consoles is that they have everything built in, including code, music, and art editors. This is great for beginners, but I've found that as I've gained some experience I've naturally moved away from the built in tools!

I now code in my text editor of choice, Emacs

The pro version of TIC-80 supports saving projects as plaintext specifically to allow this. So in my case I save my project as a `.fnl` and I'm on my way.

Auto reload on save.

Using the wonderful entr command, I can have TIC-80 re-run on save of the source code file. This has sped up my workflow A TON, and I would highly recommend everyone find a way to get something like this. Here's the command to run if you're using TIC-80:

ls | entr -r tic80 a-dice-garden.fnl --skip  --fs . --volume=0

I know live code reloading is a deep rabbit, especially in the world of Lisp languages. Thats something I definitely want to explore.

Asesprite for art

New for this jam I switched to using Aseprite for all my art. I mimicked the layout of TIC-80 sprites by having `sprites.png` and `tiles.png` files each with a resolution of 128x128. Then all I had to do was sync them to the actual cart `.fnl` file when I drew something new with this command

tic80 --skip  --fs . --cmd="load gmtk-2022.fnl & import sprites gmtk-2022-sprites.png & import tiles gmtk-2022-tiles.png & save & exit"

All these workflow changes have made me reevaluate the value of using fantasy consoles in general. Specifically I'm considering using Raylib with Janet lang bindings.. the one reservation being building the game for web (which is a hard requirement for me). We'll see what I find!

Growing a Toolkit

The other big thing thats changed throughout my game jamming is I reuse A LOT more code! Discovering the ECS (Entity Component System) design pattern was the real kicker for this, as it allowed me to build independent and reusable systems for stuff like:

  • Sprite animation
  • Simple physics, including my secret juice weapon: Springs using "Verlet Integration"
  • Screen Shake
  • Freeze Frames

Since TIC-80 doesn't support importing modules, I literally just copy paste my "toolkit" from the previous jam game to the next. Any changes or enhancements I need I just make and move one. Its stupid simple which works great for jams… though maybe someday I'll actually build out a git repo to hold these bits and bobs.

the Actual Game

So how did the actual jam go? Well, I made as close to a gardening sim as I ever want to (I do not like gardening games). I'm actually really happy how the mechanics turned out, even though I didn't need to build anything "new" or "challenging". I guess that means I'll just have to be extra conscious to stretch myself for Ludum Dare 51!

This however did allow me to make more music and art then I ever have before, which was a lot of fun! I also tried a new color palette, endesga-32. I think I'll continue to try out new palettesh in future jams, since it was really inspiring to get a fresh set of colors.

a Dice Garden gameplay gif

You can play my GMTK jam game, a Dice Garden, HERE