Posted January 23, 2026 by BitGlint Games
The Melkhior's Tower game world is created using a custom map editor, written in C# using Monogame. It started out life as a copy of my demo game from 2025, Blackford PI. With all the Blackford parts ripped out, I was left with little more than the isometric engine, and a shell of an application for switching between scenes. The isometric engine originates from Melkhior's Mansion.
The isometric world is divided into scenes, and each scene can have many entities. I plan on having 10 levels in Melkhior's Tower, each one consisting of around 16 rooms, so around 160 scenes in total. Entities are just cuboid shaped things of any size, that can be freely placed anywhere in the scene, so I'm not constrained by a tile layout. The rendering is achieved using the technique described here: http://www.bitglint.co.uk/Iso/default.htm
The map editor application is the source of the entity definitions. It uses several XML files to store the data about each entity:
Map and entity data isn't consumed by the game as binary data. Instead, the map editor exports .c and .h files containing arrays of data and case statements for assigning properties. So it's effectively hard coded. I chose to do it this way so that the data is in a readable format in the game code. For example, an entity's properties are split into rendering information and physics body information, and end up looking like this:
Each scene is split into background and foreground objects. Background object will always be behind foreground objects, so these can be extracted separately, baked onto a background image, and then discarded. Those background images are pre-generated by the map editor when the data is exported, so the game never has any knowledge of the individual entities that make up the background. In the video above, the background entities are blue, and the foreground entities are white. This is done for performance. In each scene, there are only a handful of entities to process each frame, keeping the CPU usage nice and low.