Version 1.0.16r1
Bugfix:
- Fixed an order of operations error that caused entities to overlap when using a sacrifice altar wired to a toggle door at its own location
Graphical:
- Open toggle doors now draw on top of sacrifice altars
I considered a few different options for this, and ended up adding a new item to the pause menu called "Statistics", which allows you to view the time spent in the current room and total time spent in the world at any time. Version 1.0.14 is now released with this addition included. Thanks for the feedback!
Hotfix 1.0.11r1:
Bugfix:
Graphical:
I'm not prepared to administer a public server right now, but there is an active thread for the game on the thinky-puzzle-games Discord server: https://discord.com/invite/eybtCDR
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!
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!
Update: Hotfix version 1.0.10r2 changes:
Aha, I see it now - I didn't notice in the minimap screenshot, but there's actually a column of pit tiles in the room at (-1, 0, -1) between the two rooms. Subtle enough not to notice, but it's separating the two by a tile. Just gotta shift everything over to the right a bit and the two rooms should connect properly!
Whoa, weird! I've replicated the relevant parts of the layout based on that minimap screenshot, and the rooms connect as expected for me. There shouldn't be anything extra required, so I wonder if something subtle is causing a logic bug somewhere. Could you send me the world file? If you don't have an easy place to host it, feel free to upload it using this world submission form (if you put your username here as the e-mail address, I'll know it's in reference to this thread; the process isn't automated, so the world won't actually get published right away): https://ludobloom.com/leafsodyssey_worldupload.html
I've created a webpage for hosting user-made worlds. You can find more puzzles to play here: https://ludobloom.com/leafsodyssey_worlds.html
If you've made a world of your own and want to submit it for listing, there's an upload form linked from that page. I'm hoping to eventually integrate this directly into the game so that you won't have to do the extra import/export step and can simply see the listing and choose one to play, but for now this at least collects all of the existing custom worlds in one place.
Have fun!
Hey, this was fun! I really like how small the possibility space is while still having interesting things to think about. A couple of my solves happened by accident, but that's fine. Exploring the graph of "this and this are valid moves, which then leads to a state where this and this are valid moves" was quite enjoyable.
Minor control setting stuff and a few very small level tweaks based on feedback. There's an option now to disable the behavior of starting a throw at the same time as picking up a rock, and a scroll in the intro level to let players know how to get to the settings menu. A lot of people didn't discover right away that there was a menu at all!
Whoa, this is a trip. I had a lot of trouble understanding how to accomplish anything at first, but things made more sense once I finished blundering my way past level 3.
One persistent issue I was having was that every time I'd click a hook to change my rotation, it would instantly jump to a different orientation, and I didn't have much success building up a mental model to know where that would be - in pretty much all cases, I wanted to make a relative adjustment from where the hook was currently rotated, so I think a different control scheme (for example, click and drag vertically to adjust relative to the current rotation) could have given me a smoother experience. Still, I got through the first 10 levels and had a pretty good time.