Building a Read-Only Dark Souls III Minimap for My Sister.doc

Building a Read-Only Dark Souls III Minimap for My Sister

23 August 2026 Harry Chapman

I built a Windows minimap with breadcrumbs, bonfires and optional item markers for my sister, who cannot rely on a visual memory of a route.

I play a lot of video games, and I can normally navigate through them perfectly well. Minecraft probably taught me that. Spend enough time trying to find a hastily built wooden house without losing your diamonds and you develop a surprisingly durable mental compass.

My sister does not form mental pictures of places. She thinks in words and thoughts, so she cannot return to an internal image of a route later. This is often described as aphantasia or low visual imagery.

When she wanted to play Dark Souls III, its similar stone corridors and folding shortcuts created an extra barrier. She could explore, die and then have no reliable way to reconstruct the path back to a bonfire.

I built a minimap that records the route on screen. I left combat and route choices alone.

An animated illustration of the minimap recording a journey between a bonfire and an item wisp.

What I wanted the map to show

The map needed to answer a few practical questions:

  • Where am I now?
  • Which way am I facing?
  • Where have I already walked?
  • Where are the bonfires?

The result is a small top-down overlay with a player marker and dotted breadcrumb trail. Bonfires are visible by default. Uncollected item markers can be switched on separately.

There is no route to the next boss and nothing plays on the player’s behalf. The map shows where the player has been.

Reading the game without changing it

The minimap runs as a separate Windows program. It opens the Dark Souls III process with read-only permission and reads the player’s position, heading and current internal map identifier. It takes these readings about thirty times a second and places the marker on a two-dimensional map.

The program does not write to the game process or inject code. It has no network service and is intended for offline play. Settings, logs, breadcrumb history and generated maps stay on the computer.

The current map identifier selects the matching generated map. The player’s position and height then determine which floor to display.

Those maps are generated locally from the player’s installation. A builder reads the game archives without changing them, extracts the surfaces used by enemy navigation and projects them from above. It groups separated geometry into floors and writes a compact package. Extracted textures and models are not distributed.

The repository pins the .NET SDK, package versions and the Smithbox source revision used to decode the game formats. Once the dependencies are cached, the setup script also has an offline mode.

Why the first overlay was empty

The first overlay appeared over the game, but most of it was a transparent circle with an arrow. Reading the player’s position and drawing the map were separate jobs. Without a generated map package, the overlay had nothing else to show.

I added one setup command that installs project-local dependencies, compiles and tests the application, finds the Steam installation and generates the maps.

Map generation also creates an SVG review gallery for every region and floor. I could inspect a bad result before launching the game and compare all twelve base-game map resources together.

Choosing the geometry for the map

My first attempt used the game’s visible environment models. I expected a top-down projection of the level to produce the clearest map.

The models also contain distant scenery, decorative meshes, invisible helpers and large sky domes. Flattening all of that geometry covered useful paths with circles and slabs. Road of Sacrifices produced a large circular shape behind the playable area. Grand Archives looked plausible, which made the problem harder to notice.

I returned to the AI navigation meshes. These surfaces are built for enemies, so they are not an exact record of where the player can stand. They do show paths, rooms and connections more clearly than the environment models.

Direction, gaps and stacked floors

Dark Souls uses X and Z for the ground and Y for elevation. The drawing system uses different axes and rotation. My first conversion made the arrow point away from the direction the character was walking.

After correcting the conversion, I added another check. While the player is moving, consecutive positions show the visible direction of travel. At rest, the marker uses the character heading.

A marker can still appear in dark space. Enemy navigation does not cover every prop, patch of shallow water or ledge where a player can stand. Those gaps are part of the source data.

Bridges, tunnels and rooms can also occupy overlapping height ranges. The minimap scores the player’s elevation and distance from nearby polygons when choosing a floor. It waits before switching layers to prevent flicker at a seam, then cross-fades to the new floor. Manual floor controls remain available for ambiguous places.

Firelink is the awkward case. Cemetery of Ash, Firelink Shrine and Untended Graves share one map resource. The diagnostics show the active map, selected layer and current position readings so I can investigate odd results.

Making the overlay usable while the game runs

The overlay is normally always on top and click-through. Early on, that made the settings difficult to use because Dark Souls kept taking control back.

Opening the settings now pauses position updates, releases the always-on-top state and activates a normal window. Closing the settings restores the overlay. It also hides when the game is minimised or loses focus, and it handles borderless mode, multiple monitors and DPI changes.

A game process can disappear between two reads. Earlier builds displayed repeated error boxes when that happened. The overlay now stops its readings, records a diagnostic and waits for the game to return.

The breadcrumb trail records movement at intervals so that it remains a dotted route. Teleports, deaths, loads and map changes begin a new segment. Trail history can be saved locally or cleared.

Bonfire positions come from matching game parameter records to placed entities. Optional item markers combine treasure positions with the game’s pickup flags. The overlay checks the relevant flags for the active region twice per second, and collected items disappear. If a flag cannot be validated, the item markers are hidden.

I used a parchment-and-stone colour for walkable ground. Bonfires use a coiled sword with an ember glow. Items appear as a blue-white wisp. The symbols stay upright while the map rotates beneath them.

The current build

The current build shows the player’s position and direction on a rotating map. It records a breadcrumb trail, displays bonfires and can hide collected items. Invalid position readings pause the marker instead of placing it somewhere plausible.

Some gaps remain because enemy navigation surfaces do not cover everywhere the player can stand. Automatic floor selection can also be ambiguous, so the manual controls and diagnostics are still part of the application.

Page 1 1,149 words 6 min Play