Back at it again! I'm hoping to get these devlogs up to at least once a month, if possible, assuming I can keep up this kind of pace with coding. Updates under the cut~
SWN GM Tool
When I decided to update my project list, I said I was moving my old SWN GM Tool down to a sort of backburner status. It felt a bit like the end of an era; the GM tool was my first real personal project that I had started after college and had been poking at it for the last ten years or so, so officially putting it on hold with a desire to come back to it one day was a little interesting.
Especially since I started working on it again that very same week.
I decided to start the whole project over, essentially, and use this as an opportunity to learn to use Godot more at the same time. Within a few days, I had made a simple Faction creation widget as well as a list of factions. In a week, I had a mechanism for saving that faction list to a file and loading it back up as well. All in a simple application made with Godot UI nodes!
I haven't touched the project again in a little over a month, now, but I'm feeling very good about returning and working more on it. Next steps are to make a Faction View scene that shows the stats and assets of the faction, and allows adding and removing assets. Once I feel like I have a good enough user experience for it - something that's not really my specialty - I'll probably upload it to itch.io with just the Faction and asset tracking. After that, I'd like to include a simple map and then a way to run the Faction Turn.
Libtcod Tutorials
Over a year after I received feedback from r/roguelikedev about my attempt at making a C++ tutorial for libtcod, I have begun making a concerted effort to continue working on the codebase again!
After the whole effort of getting a simple eventing system using double-dispatch in place, I took a pretty good break before returning. I decided to make sure the code was working on both Linux and Windows, and updated to the C++23 standard at the same time, which introduced some issues. At first I thought it was a problem with MSVC, but was able to replicate it with Clang as well. It turns out that the way I was doing virtual inheritance for the event handlers worked perfectly fine in C++20, but broke in C++23. Getting that figured out took a few days, but after that I confirmed it worked on GCC, Clang, and MSVC :D
Next I'm going to continue working on the actual tutorial code before I return to writing the tutorials for C++ again, to make sure that there's not more optimizations or architectural changes I'll want to do down the line that would be better to backport again.
Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
β Live Streamingβ Interactive Chatβ Private Showsβ HD Quality
Anya is LIVE right now
FREE
Free to watch β’ No registration required β’ HD streaming
Woo, it's online! Tutorial 1 for the #cpp libtcod #roguelike #programming tutorial series is finally up.
Please check it out if you like, and let me know what you think! It's my first time creating anything like this, so feedback of any kind is appreciated π
Been a little bit since my last post about the tutorials, so here's an update!
I haven't finished the code for the tutorial 8 yet, instead I've been going back and refactoring some of the older code and consolidating some things.
Besides that, I've been slowly working on doing the writeups for the tutorials themselves, and currently have the basic setup as well as the website hosting the tutorials through Gitlab. Check it out here!
I'm hoping to have more code and writeups soon, definitely want to finish them up for this year so I can start on tutorials for the newer implementation of libtcod! :D
Project Updates - Jun 26 August 25 November 22 December 4, 2025
Well not only has it been a long time since I made an update, I missed the original time(s) I was intending for this post to get out ^^;
Oops
A lot has been going on since the last update, but I'm working on getting into a better schedule for working on projects, as well as finding work since I am still unemployed. I'm in a good place financially still, so I'm hoping that getting some project work to show as a sort of portfolio will also help with job searching, as well as just making sure to keep my skills sharp.
Updates under the cut!
Personal server setup
A big focus I've had recently is on preserving any tech that I have that is still functional but is either outdated or unusable in some way. I had upgraded my PC a little while back but I still had the old one laying around, so rather than trashing it I wanted to repurpose it. So I installed Debian Linux on it and set it up to be my home server. Currently I'm only really using it as a local Git repository, using the Forgejo frontend. I have also set up Home Assistant in a Docker container on it to control our thermostat, but it went out of support and now can't be controlled remotely unfortunately :/
As part of the Forgejo install, I also spent some time learning how to set up a CI/CD pipeline, mostly just because I haven't messed with it before, but also due to my interest in setting up private game servers (more info on that in the next section).
I might keep working on extending the use of the server to maybe include a locally hosted mail server or even a personal website if I can figure out any security concerns, but it's mostly just interesting to have something I can SSH into to do system admin tasks on.
Forays into private game servers
A little while back I started looking into MU*s a bit and had an interest in playing around with the code of them some to see if I could maybe make my own. I ended up falling out of it, but more recently started looking into Ragnarok Online private servers. I found out there were a couple of currently maintained projects out there and decided to test out one of them called rAthena, which mostly caught my eye since it was being rewritten from another project in C++.
I ended up running into issues building the rAthena project on my machine, so I spent a few days fixing the build issues and then sent in a PR to the project which was accepted! It was nice to be able to contribute to an open source project again :) I ended up working on getting CI/CD set up for the rAthena code on my server, but haven't quite finished getting it to automatically create a release that I can then automate deploying to a container, but it's pretty close.
Then a few weeks ago, another project caught my eye. After seeing some friends playing on a Phantasy Star Online Blue Burst private server, and then starting to play that some with my partner, I got curious about implementations of the private servers and have been diving into a project called newserv lately to see if I can get that set up to run, too :D
Free City States
Over the past couple months, I have only worked a little bit on FCS, but was able to get some basic things set up. Mainly, I have made it so that I can click on the city region to display an info box, dismiss it, and added in a confirmation for exiting the game. I found some nice shortcuts in Godot for things like scene transitions, and I also implemented a basic save/load system, but haven't worked on much actual coding for the project.
Instead, I've been trying to think a lot about the design of the game, and what I really want the game to be like. It's difficult to pin down, as I have a bunch of inspirations I'm drawing from, but I'm working to narrow those down to something simple that I can maybe expand on later. Trying to focus on key areas like city management and intrigue based events, and trying to balance those sorts of things against making the game enjoyable and lewd as well.
Personal Site
Since I'm still unemployed, I figured it may be a good idea to have a personal site that I can use as a sort of portfolio and technical blog space, if for no other reason than to show that I have been working on things that I can more easily show off. At least that seems like what a lot of people do in my field, and is maybe seems to me like it is a bit more professional than just linking to my github or gitlab pages. I realize that making another page to use as a blog would maybe make this tumblr account redundant, though I think I'd still keep it up or repurpose it in some way. Not sure yet, but I'm still toying with ideas around that.
Well that's a high-level wrap up of things I've been doing, hopefully I can have more substantial things to show for it sometime soon! :D And here's hoping that I don't go many months without updating here again lol
Woops, once again forgot to update this blog for a year π
Things have been a little wild over since I last updated. The top one was that I was let go of my job last year. Since then, I've been working on myself, getting over burnout which was much more severe than I realized, and finally getting medicated for ADHD. I'm in a pretty stable place now, and have been trying to get back into the swing of working on projects again.
I'll make another post sometime soon detailing some project work I've been doing, but wanted to get this out there first! Hopefully I won't go another year without more haha
Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
β Live Streamingβ Interactive Chatβ Private Showsβ HD Quality
Anya is LIVE right now
FREE
Free to watch β’ No registration required β’ HD streaming
Looks like it's time for my bi-yearly "remember this blog exists and post an update"! πIt's been another few months of off and on work due to my day job and other life things going on, but still trying to chip away at things.
More on the individual projects under the cut~
libtcod tutorials
Since my first crack at writing up the C++ tutorials for libtcod, I've mostly been trying to decide what I want to show for them. Part of the feedback I received on the first tutorial was that it didn't have a clear audience, whether it was for beginners to programming or to more advanced developers. I've gone back and forth on this, and I think I've settled on making it more accessible to newer programmers, though that does mean I have some reworking to do. On the upside, I was able to fairly easily change the code on the early tutorials to account for newer versions of libtcod.
I have also been working through reimplementing later tutorials. Most recently worked on the fourth tutorial, where I decided to introduce an event handling system using double dispatch (specifically using the way outlined in this blog post). This approach is a bit complex to implement and describe since it uses certain template patterns, but overall it should allow for the rest of the tutorials to easily add functionality by simply adding events and new event handlers. Actually implementing it took a couple of days of trial and error due to a lot of factors (mostly trying to understand how it all worked myself), but now it's in a good state and pretty easily extendable! Explaining it in the tutorial, however, will be a different story π
OpenHomeworld
This is mostly still in the rough design phase still. Most of the tinkering I've done has been around loading and listing the Bigfile contents, and optimizations around that. I'm tempted to start working on a GUI archive tool to display items as well as insert and extract files from the Bigfile, though I'm not sure if I want to make something in Qt or try my hand at making a plugin for Godot. The Qt tool would probably end up being pretty simple and just show a list of files like how 7zip or WinRAR work, which itself would be just a UI around a command line tool, really. If I tried creating a Godot plugin, I'd also want to handle viewing and editing the files extracted from the Bigfile, too, and that would probably also require implementing the way to handle the Homeworld texture, mesh, script, and other files that have their own format internally. The Godot option is tempting, since I would want to have some sort of editor for the project at some point, but I'll probably keep is simple at this point and just make some small command line utilities. Options, though!
At the same time, I've been playing with the source port of the original game and trying my hand at updating the build system to CMake. This has gone mostly smoothly, except for one snag that I have yet to figure out a good way to handle. You see, the old Homeworld source code is written in C, but the game levels were created in a scripting language that the Relic devs used called KAS (which I think stands for Kick-Ass Scripts lol). Essentially these KAS files would get converted into C code and compiled into the main game executable, and the way the game is built with Makefiles makes it pretty easy to hook in calls to the utility programs to convert these files. In all my messing around, though, I have not been able to successfully replicate that process using CMake. I might need to specify all of the mission files explicitly to have them build and link properly, but I worry I'll end up running into a situation where the build will fail due to things being run out of order in multi-threaded builds (which is already a problem with the source port process though). Analysis continues...
Metal Max Redux - GBC game project
In my last devlog, I mentioned that I was interested in making a game based on a series of obscure JRPGs. The Metal Max/Metal Saga games are ones that I found last year and fell in love with, so much so that I wanted to create a game based off them. The first game in the series was an NES game that was never released in North America, but has a wonderful fan translation patch that I was playing through, but have not actually completed quite yet. It's a fun little RPG where you can drive tanks around a post-apocalyptic world fighting monsters, and has a pretty open structure to it, not unlike the first Dragon Quest or Final Fantasy.
Last year I also came across GB Studio, a free and open source all-included editor for creating GameBoy and GameBoy Color games from scratch, and this gave me a great idea: since I was a huge fan of the GBC port of Dragon Quest I+II, I thought I would make a similar port of Metal Max. So Metal Max Redux was born!
I'm still mostly in the beginning stages with this project still, but I've created a basic mock-up of overworld movement and triggering random battles. The random battle system took a while to puzzle out, and at one point I thought I was going to have to extend the engine that GB Studio uses, but I was able to make it work using a step counter attached to an invisible player object that seems to work well enough. Next steps will probably be analyzing how the NES battle code worked, so I'll be looking at lots of assembly. Fun times! π
Free City-States - lewd city management game
Finally, a project to earn my screenname π I really enjoy city builder and management games like the Caesar series and Dwarf Fortress, and within the last few years games like Crusader Kings and Stellaris.
A while back, I was starting to help out with a project called Free Cities Reborn, itself a reimagining of an HTML game called Free Cities, a lewd management game with some city building aspects. I couldn't continue with FCR after a while due to some growing reservations about the content and focus of the game which extends somewhat to the original too, since its core gameplay is around the raising, training, and sale of sex slaves. It's a fun indulgence, if somewhat of a guilty pleasure, and it's certainly not the first game that's concerned with the subject matter, but I still felt weird contributing to a project where it was so focused on that. But at the same time I started to think about creating my own spin on the core ideas, and creating my own lewd game in general.
So that's how Free City-States came to be envisioned. The core game concept in my mind is more akin to Crusader Kings and Stellaris than to Caesar and Dwarf Fortress, but focused on the management of a fantasy city-state. I've created a small mock-up in Godot as my first real foray into that game engine so far, and hoping to continue chipping away at it as the concept becomes more fleshed out π
Wow, this ended up way longer than I thought it would, and this doesn't even cover all the small ideas and tinkerings I've been working on! Putting it down into words, I guess I really did do a lot between the last post and this one π Hopefully future posts will be a little shorter, but this was a fun way to reflect on the things that I'm working on. I think I'll try to make fortnightly updates if I can, going forward.
It seems like every time I make progress on something and put it out there for people to see, my motivation to continue just tanks and I forget to work on it for a while π (Plus day job stress and other general life things working against me too lol)
That said! I have been doing a bit of rework on my libtcob tutorials following some good feedback from the r/roguelikedev Sharing Saturday thread I posted in a few months ago. I worked on getting the project to build using vcpkg on Linux and Windows, which actually wasn't too difficult to get set up. Originally I wanted to stay away from using package managers and really any other libraries and things besides what was absolutely necessary for getting the tutorials up and running, but my system wasn't exactly the most straightforward either, so I think the vcpkg solution works. I also updated the code to use the newer libtcod system of contexts for rendering, which was also fairly simple to implement. Now I just need to rework the tutorial text, hopefully I can find time to work on that this weekend!
Additionally, I messed around some with Ogre3D the last couple days and got a minimal setup running to evaluate using it for OpenHomeworld. Initially I thought about using a more bare-bones setup and building it out from scratch for a more bespoke engine using something like raylib, but I think getting something running first with a robust and full-featured library like Ogre is probably a better way to go about things. If I can keep the code modular enough, I can always go back and start replacing the Ogre code if needed, but I think that Ogre will end up being the main rendering framework that the project will use anyway. No need to reinvent the wheel and all.
Speaking of bespoke systems and raylib, I am tinkering around with a little project that's been in my mind for a little while, a little RPG project based on some mostly obscure JRPGs. At this point I'm not sure if I want to take the time building a full game engine from scratch or if I should learn Godot instead. Maybe I can do a small scale implementation in libtcod even, and then port some of it to Godot. Lots of options here, but mostly still in the basic design stage.
All in all, I have a lot of ideas for things and finally have energy and motivation to try to work on them! :) It's an exciting time, and I hope that I can continue to make updates like these, too!
The recent Unity kerfuffle got me thinking about implementing a game engine again and reinvigorated me to work on the libtcod tutorials. Ended up reworking the first tutorial code to use the newer Contexts that libtcod has moved to, and even refactored my second tutorial code as well!
The actual tutorial text will hopefully come later this week sometime, though I did diagnose a weird issue with the CSS I was using on my pages so that it doesn't show a white bar on the side of the code blocks while in dark mode :D
Getting excited to be in C++ programming land working on engine stuff again!