I Built My Own Game Dev ToolsBehind the Scenes of My Custom RPG Engine

It’s a widely accepted fact that humans are shaped by their physical and social environment. I think the same applies to software environments as well. If you spend your whole day in tools you don’t really feel home at, it can affect how you think and work.
In contrast, what if you could shape that environment yourself? Designing your workspace the way a craftsman builds a tool bench: focused, personalised, and optimized for the way you work.
Instant Feedback
One thing I always missed in other tools is the feeling of instant feedback. Once an action takes longer than 400 milliseconds, you can lose flow — a limit known as the Doherty Threshold. Most engines cross it constantly with reloads and compile times. I wanted to avoid this as much as possible when creating Frameland.”Productivity soars when a computer and its users interact at a pace (<400ms) that ensures that neither has to wait on the other.”
The Doherty Threshold
The Map-Editor allows the creation and modification of Maps, NPCs and events (e.g. cutscenes). It's not an external application but runs inside the game. The editing tools are always available, similar to browser dev-tools. Because state does not reset, you can iterate rapidly and immediately test your changes.
Why is this important?
Let’s compare making a change to an NPC script in RPG Maker vs in Frameland (both clips are sped up by 1.5x):
Process: Close game → make change → compile → title-screen → go back to where you were → restore state → talk to NPC
Process: Open editor → make change → exit Editor → talk to NPCNow that’s roughly a 3x reduction in wait time. And this is a simple example. Once you factor in restoring complex quest states, restarts quickly become a major productivity killer. More importantly, there are several instances in the RPG Maker workflow, where you wait more than 400 milliseconds for a response – crossing the Doherty Threshold.
Editing the World in Tight Loops
Let's say I want to add a tent to this map. I switch into editing mode, place the tent, and then go back to playing. But after taking a few steps, I discover the enemy below is pulling the camera down, an effect I don't want to have near the tent.

I can easily fix this by moving the enemy down a bit (or I could reduce its camera influence). But the key point is: how would I have ever discovered this if switching between editing and playing wasn't instantaneous? The usual spawn point is much further down, so if the state would reset between edit and play (like in RPG Maker), I might have never noticed this issue.
Editing Battles in Flight
This is the same concept as the map editor. You press a button and are instantly inside the editor. You can change the stats of enemies or your party, like for example health:

In addition to changing stats, you can also preview attacks, skills or items:
Previews do not deal damage by default to allow iterationThis makes playtesting and balancing a lot easier, as you can change a value and then instantly see it’s result. As the attacks are controlled by script code, you can change the attack animations too without needing a recompile or restart!
Inline State
In RPG Maker, state is shown in an extra debug menu you have to navigate to. Then you have to remember the number you assigned to the variable previously.
RPG Maker
FramelandIn Frameland there is such a menu too (that is sorted by region instead), but what I found much more useful is to show the state inline. Not only do I show the state right beside the script (where it’s relevant), but you can actually change the state by clicking the ‘Toggle’ button. This means you don’t have to reload the map if you want to simply re-trigger a condition.
Inline Preview of Resources
Like with State, the script code knows what an animation is. We can use the parameters of the function call we are currently hovering to generate a preview.
Changing the duration to speed up the animation as you type
Same thing applies for character expressions like “happy” or “sad”.
Localisation keys are translated immediately as well with the current language.Technically all that I am doing here is parsing the current line, see if the function is one that can generate a preview, eg.if (funcName == "anim_message") createMessagePreview()and if so, extract parameters and (re)-create the ressource.
Marrying code and UI like this is not a new concept. I was heavily inspired by the work of Bret Victor who best demonstrated this in his talk Inventing on Principle.
Developer Saves
Frameland is a typical RPG: character progression, loot, dozens of cutscenes (~100+), NPCs, and optional quests, all of which rely on persistent state. During testing, this quickly becomes problematic: you can easily end up in the wrong save file or miss certain triggers or items.
The special **DEV** menu, only present in debug buildsTo solve this, I built a developer-only save system that lets you jump to specific points in the game. You can then jump to those points via an in-game menu. It’s also easy to create a new savefile by placing an existing savefile into a special folder. We had a save for each cutscene & major checkpoint in the game. This is a time investment that paid itself back pretty quickly.
Other Tools
For completeness sake, here’s an unordered collection of other tools I’ve built over the years.
A shader panel allowing to test shader effects live
A simple Animation Editor
Changing frame length by dragging
Particle Editor: I used reflection to create the UI out of the particle effect classes automatically.
Console: Allows calling script functions & launching other tools
Music loop testing tool
Script Editor: Syntax highlighting, code snippets, simple code completion, text search & code navigation.
GUI sidenote: All the UI you have seen above doesn't use any third party library, but is written from scratch too.Want to see more of the game?
You can check it out here →
How much work is that, really?
You might think creating all these tools is a big undertaking, but when a friend asked me what the percentage of my code was tool-related it came out to be only around 13.5% of the 103K total lines.
Tools
14KEngine & Gameplay
89KAt least half of that 14K is just boilerplate for setting up the UI and event handling. It's really not very complicated code and I remember writing the majority of the animation editor in around a day (~800 lines).
In my experience, most tools just worked once set up and only needed updates for bugs or new features. The main exception was the Map Editor, the largest and most used tool. It evolved continuously alongside the game itself. I think of this as a plus: not needing to put up with a tool and working around it's forced model but being able to change the model/tool itself.
Be conscious of your environment
Is this way of building a silver bullet for game development? Of course not and it has lots of tradeoffs. I simply want to show that you don't have to be constrained by environments other people build for you. Building tools is not some black magic artform. They can be quite basic, unrefined and unpolished and still be useful just for you personally.
I also want to reinforce that the point of building your own tools is not necessarily about efficiency or automation, but creativity itself.
References & Inspiration
- Everything by Bret Victor (especially 2011-2015)
- Tomorrow Corporation Tech Demo
- Classic HCI Demos
- Ink & Switch Essays
Feedback
Got a cool project? I’m currently looking for work and available for hire. Contact me here!