Spring Lisp Game Jam 2026 Retrospective
Since a few months ago, ever since the release of the Raylib egg for Chicken Scheme, I've been working on my own game framework built on Raylib. This framework, Imugi, has come far enough that I wanted to stress test it in a game jam, and I knew the Spring Lisp jam was coming up.
I had a few constraints for the actual game, and some other goals than just completing the jam.
- The game needs to be small enough to finish in a few days.
- Even though the jam runs for over a week, I've been starting in a new job so I can't pick something too complex.
- I want to find gaps in my framework and the raylib egg.
- I want to have fun, but not necessarily make the most polished game.
So how did we do on all those goals? Well the game is done (source code), and I'm pretty happy with it, but I have been taking notes.
What Went Well
Part of why I've been working on Imugi is because there are a lot of benefits that come with writing with Scheme. The most important one to this sort of jam is the ability to rapidly prototype, and I'm happy to say that by my measure it was successful in this regard. The game took me about 3 days to make (I wasn't working on it on weekdays, you can see the git history for it and that's pretty accurate), probably around 12 hours in total (possibly less). The majority of that was blocking it out with rectangles, and honestly it was pretty fun. You don't need flashy graphics for something this simple.
Another thing that I want to note here is how "out of the way" the language and framework were in the process of making this. Of course that lead to some footguns, but we'll get there.
What Could Be Better
Honestly, the concept of the game is kinda terrible, but I really wanted to think about what I need for tactics games so this is what I ended up with. It's crappy, but it's good enough for a simple implementation.
Asset handling is a mess. Specifically for sounds, those are constantly reloaded because I was rushing that bit and couldn't be bothered to make changes directly to the framework. I will make those though, so that it can handle the lifecycle properly and not just load and load and load.
The raylib egg doesn't have any wrappers for the music module of raylib, so I had to improvise those with foreigners. It works, but I need to PR those into the egg.
The code is not as modular as I'd like, and a lot of the code in arena.scm could be moved into a module like unit.scm or similar.
How Stuff Was Made
Music was made with my RC-202 looper and an electric keyboard. Even though it was such a short task to make music, it was actually pretty fun.
Most of the sprites are just pictures of me with a sabre, pixelated, and then colour shifted. The exception is the pawn sprites, which were made by my fiancee.
Sound effects were all me hitting stuff with a sword.
Stuff to Improve
Aside from the asset handling, modularity, and music stuff mentioned above, there are a few other changes I need to make.
First, I want to make a proper UI module for the framework, because I had to set up the button handling and stuff manually for this project and I shouldn't have to. This includes abstracting away from pixel values for width/height/position, so that it can be responsive. For this project it's been kept to a fixed window size.
Second, the music wrapper I have set up in the Bitter Duel repo needs a redesign then merge into the framework proper.
Third, I need to move the grid functions to the framework as well and polish them up a bit.
Fourth, I really need a better way of distributing the end result…
Fifth, good god this is an uncommented, unmaintainable mess.
And that's all!
See you in the next Lisp game jam, and looking forward to rating all the other participants!