Just curious, if you don’t mind me asking…what tools did you use to make this? The file size is so small it makes me think you made your own engine. Or, it’s not one of the big 3 at the very least…would love to know, thanks!
A puzzle game with combat and exploration · By
Yup! It's written in C with a homebuilt framework, which allowed me to do a lot of interesting things with data efficiency.
Some relevant history: Long ago, I used to write games for the Macintosh by using system APIs directly. In 2009, after copying code from project to project a few times for stuff like window creation and event handling, and desiring to be able to support other platforms, I decided it would make more sense to package up the code I had been copying around into a set of libraries, each of which would encapsulate a specific set of functionality, and I could pull in the relevant ones for each project I was working on without making a mess. I named this collection of libraries "Stem", and everything I wrote from then on used it as the foundation to build upon, gradually expanding the Stem framework as needs arose.
Sometime around 2021, I started working on a suite of productivity applications that acted as a companion to Stem (while also being built with it), which consisted of a bitmap graphic editor, an audio synthesizer, and a 3D modeler. When I wrote Throw Rock in 2022, I used these tools for asset creation, and then a more mature iteration of them was used for Leaf's Odyssey. The main reason Leaf's Odyssey is so small on disk is because there's no sampled audio in it at all - everything you hear is synthesized at runtime from very compact configuration files. All of the graphics are packed into one PNG file, which is used as a texture atlas with a supplemental index of rectangles for every sprite in the game. The title screen graphic was made with my 3D modeler, though instead of including the entire scene, it's actually just a 480x270 render packed into the main texture atlas.
All of these libraries and tools are open source, though I haven't yet put in the effort to make them easily buildable without specialized knowledge; however, if you just want to browse some code, you can find the relevant sections of my WebSVN repository here: https://ludobloom.com/svn/StemLibProjects/ https://ludobloom.com/svn/Tools/
I'm pretty happy with how all of this turned out. Having full control over every part of the process means I don't have to compromise on anything; if there's a bug at any level of the program, I can fix it myself instead of having to convince a third-party vendor to do it for me, and if I want to do something unconventional, I have the freedom to insert it into whatever part of the pipeline is most appropriate, or build something entirely new to do what I want. Since the tools I've written use the same framework as the game, I can continue to run them on every platform and setup relevant to what I use them for.
I would estimate that the amount of system APIs and paradigms I've had to learn to get this all to work is roughly comparable to what it would take to master a typical pre-built game engine, and the benefits I get from it are quite substantial. C happens to be my favorite programming language, and it's perfectly suited to this task. I wouldn't necessarily recommend this approach to other game developers since it takes a specific kind of dedication, but if this fits your style, you're probably not shopping around for that type of recommendation in the first place. That said, I would love to see more software written in this way, and would encourage everyone to at least give it a try and see if it works for you!
Thank you very much for the explanation! This is very cool stuff. So you even wrote all the editing tools for the graphics and audio yourself? Super impressive, I’m blown away honestly. I suppose the fact that you used to write things for Mac using the system APIs allows the binary to be less than a megabyte (!).
I have been looking through some of the code you linked. There is a lot here, and it’s clear how much work you have put into all of this. I agree that doing things yourself often ends up being the best solution. I started with Godot and have worked down more to now using Raylib with C. I don’t have much time for game development anymore, though. I also saw some conditionals for iPhone and Android…I’m sure some people would enjoy a game like this on mobile.
When did you start working directly on Leaf’s Odyssey? Curious as to how long it took you to complete. I bought the game a few minutes after posting, and I’m really enjoying it so far. Since you talked about it; the title screen scene is great. The controller re-mapper works really well too…better than some modern AAA games! Looking forward to designing some levels after I play more.
Nice, I've heard good things about Raylib. Leaf's Odyssey actually had a pretty short development time, starting in October 2023. I had initially set out with the goal of writing and releasing an entire game by the end of that month, and tried to keep the scope down to match, but one thing led to another, and it turned into a much larger project than anticipated.
In almost every way though, this project went just about perfectly - after I understood the true scope of the game, I had a clear and achievable deadline in May that helped me focus my efforts in the right direction. A wonderful group of playtesters helped me sort out the majority of issues before release, and a couple of them even used the editor to make fantastic custom puzzle campaigns, one of which I'm still in the middle of solving. The post-release updates I've been doing have been a labor of love, and an interesting case of getting to experience my own game as if I'm a new player - by playing puzzles made by other people, I'm seeing firsthand which quality of life improvements would make the most impact, and I'm motivated to implement them to improve my own experience so that everyone else's experience can get better at the same time.
Hope you enjoy the game, and I'm looking forward to playing your puzzles!
That’s a quick timeline! Very cool about your playtesters making campaigns for you to play.
I have been playing a lot and am entirely enjoying it. Working on the last blue key right now in the upper monster-block zone. The eyes are by far my favorite, really enjoyed that section. The slug section really stumped me several times, think I have spent the most time overall there so far.