This is a collection of all of my games, in chronological order of publishing them, along with various bits of commentary about what developing them was like at the time.
If you want my games, roughly ordered by what I think is the most entertaining or interesting, you can look at my itch profile
This is the first jam game I released, the first time I used Love2D, Bosca Ceoil, the first time I made what I considered a "complete game". The qualifications for that were:
Somehow, I managed to pull all of those off in the weekend of Ludum Dare 34. Already being a professional software developer helped, to be sure, but it was a learning experience, especially since I made it entirely solo, which is something I've done less and less often over the years.
Omega Llama is *also* mostly in one code file, outside of a library called coil. This is *not* something I recommend, but it was an artifact of being unfamiliar with Lua's module/require system.
I enjoy the sense of humor in the game game, though I do wish I'd come up with a better enemy design.
Trivia: This game placed right next to miziziziz's Ludum Dare 34 entry in the overall ranking.
I didn't get back into game jamming until Ludum Dare 37, though this time, I managed to recruit a classmate and friend to help with the art and music.
I used Love2D again, and this game had a *lot* that the previous game didn't quite get, like animations, and keyboard driven menu, and something resembling credits.
It felt like a massive improvement over the Omega Llama from a technical standpoint, but didn't seem to perform as well in the jam.
With the benefit of hindsight, it probably has to do with a *lot* of the effort in this game being pulled into higher effort assets, and the resulting game kinda being a pacing mush, as well as having less of that self-deprecating sense of humor.
Omega Llama: Bullet Surfing saw me jamming solo again. It was actually something I kinda did on a whim, in some ways.
It has a weird concept of trying to get hit by bullets, rather than trying to avoid them, perhaps a different notion of a bullet heaven.
One of the main difficulties I had in trying to design it was that the player could simply sit still. In my attempts to keep that from happening, I ended up getting rid of mouse controls, and forcing the player to keep moving to keep their streak.
I think I could do mouse controls now, by using relative mouse motion to aim where the shield/surfboard, though it would be a difficult adjustment for players.
This was also a game I made to the soundtrack of Infected Mushroom's Return to the Sauce album. That actually made it difficult to make an actual soundtrack, so I ended up mostly punting on that, using a music generator for space sounding menu music.
All of the non-font graphics are created by using love2d graphic primitive draw commands, like lines, rectangles, or circles, in an attempt to imitate Atari displays. This ended up being trickier to build art for, since I didn't have a good vector art program to work with.
(If you want a more detailed retrospective, I wrote one over here
The Game
Caster Fight is, in theory, Rock Paper Scissors meets One Finger Death Punch. In practice, it's more like "spam each of your 3 attacks to overwhelm your opponent". It was another solo game of mine, and *far* more work went into the animations than the gameplay, or the sound track.
The Developer Headspace
So, this game came at an *unusual* time for me.
Officially, it's an entry in the first ever Alakajam.
What's Alakajam, you ask? It was a spliter-off of Ludum Dare, by a group of volunteers that were (rightly, IMO) frustrated by how PoV was running things.
And, to be honest, being around for that drama, in the #ludum-dare IRC channel, has left a bit of a sour taste in my mouth about Ludum Dare ever since. Ludum Dare 38 is the last Ludum Dare I've done to date.
Thing is, I was pretty burnt out in general when Alakajam 1 happened. For a 48 hour jam, I was only really able to muster about 16 hours of work on for this game. Most of that time went into over-animating the elemental attacks and the turtle.
Perhaps fittingly, this game, set in a desert night, would mark the start of a multi-year game jam dry spell. I was hitting up against the limits of what I could do with Love2D easily at the time, and didn't have the bandwidth to learn something else.
I don't know where to start with game. The gameplay is a hot mess, the art is inconsistent, with my wife doing most of the good stuff, and me doing the player character and the cellular automata plants. Out of Control was the GMTK 2020 jam theme, and I think that reflected in the process of making this game.
And yet, this was my return to game jamming, after 3 years of not being able to finish a game inside the time confines of a jam. It'd be strange if that *wasn't* a mess.
Goomplez is back on music, and helped cover some of the farming tools, as well as small bits of code around the menu.
Switching from Love2D to Godot 3 has *already* made a difference, letting me assemble a barnyard to situate the game in, rather than just clamping the player's movement, like I had done in previous games.
Using Godot *also* let me aim for a much more mechanically complicated game than I'd have tried for in Love2D, and it definitely shows in how unwieldy the game is to play.
If Carrot Patch was my messy return to game jams, Battle of Seclusa was me finding my feet a bit. For, you see, the mess in Seclusa is *mostly* in the code, and less in the gameplay vs Carrot Patch. (Which isn't to say that Seclusa has anything like perfect gameplay)
This game was an entry to the one and only, to date, public Mizjam. Miziziziz was one of the influences on getting me back in the gamedev saddle.
I picked up a *lot* of things from Seclusa.
I learned how normal maps and shadows work in Godot's 2d engine. I don't think I'll be touching normal maps in 2D art for Godot again any time soon, having to both paint and do a manual normal mapping pass took a lot more time and effort than I think it was worth.
I had a chance to find out what it was like to make a game inside a week, rather than a weekend, something I've done multiple times since.
I also learned, by anti-example, about building cutscene-like things, including game-event triggered dialog display. Seclusa has a 2700-line "Level.gd" file that tracks *all* of the various level states. That's one of those things that I don't recommend someone to do every single time they make a game, but that can be very educational to do once or twice.
I was also introduced to the Kenney 1-bit 1000 tile pack, which I have been slowly trying to use every tile of since.
Wisp was my GMTK 2021 submission, the 3rd major game I made in Godot, and the first time I made a game with more than one actual level (rather than just waves inside the same level). It was also the first time I used Raycasts to inform enemy AI logic, which the enemies in this game use a fair bit. The idea is to attempt to build something akin to Dark Soul's block/attack rhythm. I didn't *really* succeed there. It would have needed a lot more animation.
Also, the character art, both player and enemy, ended up eating far more of the time for art than it probably should have, given how half-baked the level and background art is.
It was fun to be able to make levels, and to put in little set pieces, like the explosion chain at the end of the first level (getting chained explosions to work was a bit more fiddly than I'd expected), or the backwards shooting at the end of the last one.
Multiple levels also meant multiple dialog cut scenes, which were in multiple files. Learning to effectively work with multiple files in Godot was something that would become very helpful later.
I also had help on Wisp from my wife (who made the title screen art), a musician named Swauss, who I've since lost track of, and @molloy again, for some writing, and the dialog art.
Sparklines is perhaps the most unique game I've submitted to a jam in terms of tech. It runs on the Janet programming language, using bindings to the Raylib gamedev library. (the Janet bindings are called, appropriately, Jaylib :D)
One of the biggest shifts in working with Godot was that I had access to a GUI editor for building levels and other node-base constructs with.
Working with Janet and Raylib, I was back to the position I was in my Love2D days of not having anything resembling a level editor. And, I think it shows in the resulting game, where the levels are randomly generated, and the gameplay is in a fixed camera on a single screen.
Another aspect of Sparkworks is that it was deliberately made to not be an action-heavy game. I'd showed off one of my previous games to a friend online, and they talked about how action games didn't really do well for them. This lead to me trying to take a different tack, since I'd mostly made action focused games up to this point.
This was also the second game I made using the Kenney 1-bit pack, and, so far, I think one of the prettier ones.
Originally, I was going to have it be a game about trying to survive on a raft, which is the tile placement mechanic was born. That mechanic ate up most of my development time, though, (though I did end up writing my own auto-tiling logic for it, which was an interesting exercise), so I ended up switching to something that interacted with the tile placement mechanics more directly.
The sparks ended up being used as a mechanic so that the player didn't have to connect the *entire* map, which was how things worked for a while. They gave just enough of an optimization problem in terms of routing to add a little interest to the game.
Fault Lines as Text
Often the work that creator values the most is separate from their most successful work. For me, I think Fault Lines is the game that I've made that is the most _me_. In one sense, that's very literal, as it's the most recent time I've made a game solo. In another sense, it's because it's the time I felt I was able to make a statement with a game. Though, with time, I don't know if the statement is clear without commentary.
An important bit of context surrounding Fault Lines is that it was built during the first month of Russia's invasion of Ukraine. There was a *lot* of discussion of economic sanctions. The actual level of Russia's military capability was rapidly coming into question.
At the time, I felt a lot less comfortable making directly political statements than I do now, but I *definitely* wanted to make something anti-war, that the strongly economic overtones of the western response stuck out in my head.
And so, you have a game about defending yourself from an aggressor. A game where progress is measured in how much of a limited budget they have left. Where you are first introduced to those you'll be defending, walked through an interrupted good morning ritual. Where, if missiles make it through, the ghosts of the fish will rise from the sea floor, and where you are given a memorial of the fallen.
Perhaps, where a bit of optimism of mine shines through, is that the game doesn't *force* the player to lose a fish. An actual war is not without casualty, but I did want, at the time, for the game to be beatable, in a sense. After all, the game *is* a game, in a game jam.
That might blunt the message a bit, but it also acts as a sort of endorsement of the defensive combat. Slava Ukrani!
Fault Lines as Technology
As an executable *game*, Fault Lines saw me return to a lot of familiar tools, with some new twists. I used Love2D again, but this time I used Fennel, a Lisp that compiles to Lua as my scripting language. I used Bosca Ceoil to compose the combat song, as well as for some of the sound effects.
But my time in Godot didn't go without affect. Fault Lines has multiple distinct "scenes" that it switches between, for example. It also takes advantage of a tool I built, called Vectron, for building the vector polyline-based graphics of the game. And the game deliberately invokes an arcade aesthetic.
It also made a strong effort to be playable on mobile as a action game, with one thumb, so as to not cover up the screen.
Fault Lines as Competition
Ultimately, Fault Lines didn't do notably well or poorly in the Love2D jam it was a part of of. It did have a lot of stiff competition, though, including a networked multiplayer Tower Defense game. I can't necessarily fault the raters for that, though I do wish the storytelling involved had landed into the ratings more.
In conclusion
I like what I did with this game, though I'd like to do something similar _better_ in the future.
The Game Makers Tool Kit game jam is a mainstay for me as a hobbyist game developer. Ever since 2020, I've made a point to at least do this one game jam in a given year. In 2022, the theme was "Roll of the Dice", which was an interesting choice
Dicegeon was also the start of something special: A Godot and late-nights fueled game development bender. Up until now, I'd done, at most, 3 games in one year. 2022 would see 14.
I mentioned that Fault Lines was the last time I fully made a game myself. In part, that is because Dicegeon lead to me finding some rather steady jamming companions.
(todo: more)