kruithne.net
Hello, my name is Kru and for some reason you've stumbled upon my tiny corner of the internet. On the off-chance that you're not lost, stay a while and listen!
A New Adventure
At the end of last year, I introduced my new "DevLog", which is what you're reading right now. In this post, I'm going to explain why it exists, and what I'm working on now.
I've built a lot of things over the years, and while there have been some outliers, my projects have all generally revolved around World of Warcraft. For this new adventure, I am going in a completely new direction and building something that is my own. And I hope you'll still come along with me for the journey.
Why now? This has been brewing for more than a decade, but I've always been waiting for the "right time". Up until last year, I had little to no bandwidth available due to my job (that's not a bad thing, I just dedicated a lot of my time to it). Last year, I moved to a different field and I've found myself with a reasonable amount of free time... so if there was ever a "right time", it's going to be now.
What does this mean for <insert project name here>? Nothing! We've recently pushed out two of the biggest updates to wow.export ever and I'll continue to support and develop that moving forward, and (spoiler) I'm also in the middle of writing one of my biggest Patreon guides ever which may or may not be related to Fun Side Project #4000.
The Adventure
So, what is this grand new adventure? Well, it's not actually that new. In-fact, I've been circling around it and procrastinating on it for 13+ years now. Whenever I tell myself "this is the year", something always comes along and life gets in the way (this is actually just be not admitting that I have lethal decade-long amounts of procrastination and spiral off into new side-projects on a weekly basis).
Shut up and tell us what it is! Okay, it's a game. Multiple games, actually. Three games. And they're completely different from each other. I'm also going to be really annoying and not tell you what they are. Actually the reason for that is not actually to be annoying, it's a combination of reasons, mostly bubbling down to not wanting to let the cat out of the bag too early. So for now, I'm going to dub them with codenames - because that's what the cool kids do, right?
- Project Gauntlet
- Project Shake
- Project Hero
Collectively, these projects will be under the umbrella of Project Hedgehog. That will make sense eventually.
Despite my tendency to be working on at least a million projects at any given time, I'm not going to be working on all three of these at the same time. Project Gauntlet is the front-runner. I'm *more* excited to work on Project Shake, but I want to make sure it's done right, so Project Gauntlet is taking the lead first as it's less ambitious.
Project Hedgehog
I said in the last paragraph that I'd been building on this for 13+ years, so this must be pretty far along, right? Okay, here's the first official screenshot of Project Gauntlet.
I know, it's beautiful.
In all seriousness, let me explain. Over the last ten years, I've built countless prototypes and tech demos, and I've experimented in many different existing game engines, learning and toying. Some of my prototypes have been playable, but most have never seen the light of day.
Every time I make some form of progress, something doesn't sit right with me. I just don't feel the right type of passion. There's no spark.
Last summer, I was sat on a beach in Cornwall listening to talks from the Better Software Conference. There were a lot of good talks, but some of the speakers who really inspired me were Casey Muratori (Handmade Hero), Vjekoslav Krajačić (File Pilot), Ryan Fleury (RAD Debugger) and Dennis Gustafsson (Teardown).
Listening to these people made me realize the reason I wasn't finding that passion was because each time I set out to make a game, I was robbing myself of the fun somewhere along the line. I tried numerous engines such as Hammer, Defold, Unity, Godot, etc. I also tried more DIY solutions; raylib, SDL, etc, and while I made plenty of prototypes, it didn't feel like it was mine. I don't want to drop in a PlayerPhysicsController and call it a day, I want the fun of writing the physics solver myself. And I'm creating a small handmade game, using something like Unreal felt like strapping a jet engine to a toy car.
I'm not saying people shouldn't make games in consumer engines. There's been countless amazing games come out of every engine. But for my personal journey, I need to do this myself. I want to learn and have fun. By no means do I think I can do things "better" than anyone else, in-fact it'll almost definitely be worse. But it'll be something I created, regardless. The idea of writing code that makes things appear on the screen is what has kept me fixed to a screen for my entire life.
As a gamer, I know the engine doesn't matter. A good game is built from many different skills and principles. But as a developer playing a game, I can't help but find myself enthralled by custom engines. I recently convinced myself to stop being a chicken and play the Amnesia series by Frictional Games, and couldn't help but admire the HPL engine. You're not going to make the next Forza Horizon in it, obviously, but there's something about a bespoke purpose-made engine that just has character and quirk. I love that. I want the quirky weird behavior in my game to be part of it's identity, not an annoying third-party bug I can't get rid of.
So that settles it. I'm taking a decade of learning and experiments, and I'm going to make my own engine from scratch. Specifically, this engine will be purpose built for all three games, and the first length of my DevLog will be focused on engine development, primarily.
From Scratch
When I said "from scratch", that could mean a few things. One of the biggest (and most playable) prototypes I created was in C#, because it was "nice". It afforded me higher-level conveniences while still being natively compiled (since NativeAoT). But I felt the same friction that I did with third-party engines.
For time to time, I'd find myself fighting the language. Far too often I kept thinking "this should be easier", especially when it came to system calls or managing memory. I want to write code to do a thing, I don't want the language to enforce otherwise. In the end, primarily spurred on by the inescapable voice of Vjekoslav Krajačić somewhere in the back of my head, I pivoted to C (kind of).
I grabbed a copy of the famous K&R The C Programming Language and read through it. It felt like the obvious choice; it's battle-tested, portable yadda-yadda but most of all it's your code, compiled into instructions, running on the computer - it felt like programming. No more transpiling, runtimes, garbage collectors or any of that. Just code.
Almost. C was made over 50 years ago. This means a lot of the modern quality of life stuff vanished. I started out by simply building my own implementations, which was great, but I couldn't help but think it's 2025.. why is there not a programming language that's a powerful and low-level as C, but without having to LARP as a caveman who hasn't invented a hashmap yet?
In my search, I stumbled into three languages: Rust, Zig and C3. So I set out to try all three. I quickly hated Rust. The syntax felt wrong, the language just felt wrong. I just didn't like writing it. It just wasn't for me. Zig I got on-board with quickly, and when it worked it felt good. But that "when it worked" had a lot of weight behind it. Still being in active development, the documentation was often out-dated or missing, and too often I felt like I was in the dark. I'm sure I could have pushed through, but for this project I didn't want to.
Enter C3. I've never seen anyone else talk about C3 before, but after reading the wiki front to back one evening, something clicked. This professed to be modern C. The low-level dirty language I'd been enjoying, but with some of the modern expectations programmers have come to expect over 50 years.
I've been building the engine in C3 for a number of months now, and I don't see any reason to look back. It's a lovely little language that makes programming feel like programming again.
Bells and Whistles
I've toyed about with some libraries for various things; SDL, GLFW, Jolt, ImGui etc. It all boils down to the same outcome as the previous section: I want to do things myself, my way.
Right now, the engine uses OpenGL directly. I go back and forth with the idea of Vulkan, but again, do I need a jet engine for this? I've also been eyeing up WebGPU but I don't want to distract myself any longer. OpenGL is perfectly fine.
The only other major third-party dependency planned at the moment is Lua, which I'll be using as a scripting engine. I thought about other scripting languages, or even writing my own, but after decades of using Lua, I've grown a weird (unhealthy) attachment to it.
So that's it. C3 + OpenGL + Lua. C3GLua. Cluga? That's my tech stack for the engine, Cluga.
Avenger's Assemble
To build a game, it needs more than code. It needs skilled people with a variety of disciplines across multiple fields. It needs art (2D and 3D), it needs sound, music, narrative, voice acting. So who's doing all of this?
Well, it's just me.
Since this is a passion project in my spare time, there's no funding to bring anyone else on-board, and I want to push myself to learn new things and see what I can do.
So the art? Yes, I'm quite handy with 3D modelling and animation, as it was a big part of my previous job. The art style for Project Gauntlet will be low-polygon, which I'm "okay" at. It won't have 4k textures with PBR workflows and all of that.
So the sound? In RuneScape, the Gower brothers created sound effects by simply recording every day things. The cooking sound effect is their mother cooking bacon. That's the level I'm operating at. Time to get some bacon!
And music?! I will admit I have no idea what I'm doing here. But, I've got a keyboard and I'm good at C# (see what I did there?), so we'll cross this bridge when I get to it. Sorry in advance.
Narrative? I've been a DM for quite a few D&D campaigns, does that count for anything? Probably not, but there's a trend here.
Voice Acting? I'll be voicing all characters! Okay, no, that would be a terrible decision. This is one thing where I'll be outsourcing to people who actually know what they're doing.
On a serious note, this project is something I want to really push myself out of my comfort zone and learn new things. I'm a strong believer that people can do anything they put their mind to, and the only way to even begin to learn these things is to throw myself in the deep end. That's how I've always learnt things, and it's why I'm terrified of swimming.
What Now?
Now, we build!
This first series of these blog posts will be focused on the development of the engine. I don't want to work on these projects in secret and then one day emerge from a dark cave clutching my creations, so I'll be sharing every step of the way here.
My Patreon will continue to serve as a support vector for the development of wow.export, but over time will likely become dual-purpose. Those of you who support me on there - thank you - you'll be first in line to play these games before public release, and will definitely get to vote on some key decisions along the way!
My Discord server, Tamara's Workbench, is going to also become dual-purpose with dedicated channels for my games moving forward, so feel free to join and ask any questions in the #project-hedgehog channel!
Stay In The Loop
Get notified when new posts are published.