Babelmap - Rust Z-Machine/Glulx/Scott TUI w/ Graphics and Sound - Linux/MacOS/Windows

What started as a toy project to learn Claude Code turned into something more expansive than I was planning. In fact, I came up with so many ideas during the process that I had to create another project to help me track them all.

Check out the other screenshots and grab the beta binaries here.

There are likely a lot of issues (especially with Z-Machine v6 – the newest addition and challenging to make work in a TUI), but it is in a playable state. Some highlights from the readme:


Play interactive fiction in your terminal while babelmap draws the map for you — live, as you explore.

babelmap is a terminal interactive-fiction interpreter with a built-in automapper. Point it at a story — the Infocom canon and Z-machine classics like Zork, modern Inform 7 / Glulx games, graphical Zork Zero, or a classic Scott Adams text adventure — play it in a clean, mouse-driven TUI, and watch a room-and-connection map assemble itself from your movements. No graph paper, no manual annotation: every room you enter and every exit you take is placed, routed, and de-overlapped automatically, then continuously tidied into a readable layout. Three from-scratch, zero-dependency virtual machines under one roof; one engine-agnostic mapper that charts them all.

Supported formats: Z-machine v3–v8 (incl. graphical v6), Glulx, and Scott Adams (ScottFree .dat) — auto-detected from the file, loaded raw, from a .zip, or from a Blorb container (.zblorb/.blorb/.gblorb)


Here is some quick feedback.

On the upside; Ran everything smoothly. Didn’t encounter any faults.

I’m not seeing any text output pagination. For example, a game that generates a lot of initial text, you are scrolled down after this and have to scroll back to read it.

Although the word suggestion/completion is a great idea, the way it bounces up and down while you type is quite annoying. Could it not operate “inline”?

The map looks quite promising. Sometimes the location name doesn’t fit in the box and is truncated. Not sure what you could do here as varying the font size would look untidy (you could maybe consider dynamic hyphenation).

The map layout needs a bit more work. It has trouble when going up and down (understandably). Perhaps it should either draw levels as layers or perhaps further away boxes?

A few oddities (see pic). The NW diagonal to “dining room” here looks distinctly odd, as doe the west exit to “Study” not being a straight line?

Other comments; there’s a reasonably well-known font glyph viewer also called “Babelmap”.

Best of luck!

Thanks for the feedback.

  • Agreed on the autocomplete bouncing. Next beta version I will fix this.
  • There are a lot of tradeoffs with the map layout and room size, and due to nature of this being a TUI we are limited. You can click on the room to bring up the room inspector to see the entire room name. One way I’m handling very complex maps (like zork1) is peeling different layers of the map to separate map segments. Currently this is a manual step, but I have some ideas on how to automate (or at least prompt) in the future.
  • Room name detection can also be problematic due to the nature of IF stories. So, this becomes a game of whack a mole.
  • Output pagination is a WIP (but you can scroll back in the meantime).

The map output you posted looks a bit corrupted. If you are seeing this in-app, can you share the name of the story file and the OS / terminal application / font you are using?

BTW, you can also dump an ascii output of the map information using the “/export-map” function (“map.txt” will end up in the game specific save directory).

I tried it with Colossal Cave Adventure https://ifarchive.org/if-archive/games/zcode/advent.z8 and it didn’t map at all. Is it expecting something specific in the transcript? Capitalization, perhaps? Styling?

I tried it with Lost Pig https://ifarchive.org/if-archive/games/zcode/LostPig.zblorb but the map didn’t seem to render correctly in iTerm2 for macOS. There are little unknown character symbols � where the lines are supposed to be.

(It may not make sense to render this as a TUI application.)

I played through to the maze in Lost Pig (which is much like the mazes in Colossal Cave Adventure). Room detection went haywire.

It’s not clear that transcript-based automapping is a solvable problem, especially when the author makes room names are deliberately ambiguous (or change, like The Van der Nagel Papyrus).

I think a better approach is for authors to provide a structured map model of rooms and exits. (ADRIFT uses this approach.) I’m exploring a Glk API for that in this thread: Automaps in a Glk extension

But authors haven’t provided map models for most games ever written. Maybe it would be possible to design a document format for map models, so end users could hand-code maps that an interpreter could use for automapping. (Perhaps there’d be a Github/wiki repository of map models for games.)

Then, the transcript parser would “just” need to know which room you’re in, which can still be a hard problem, especially for ambiguous room names, but if it simply omitted the “you are here” marker for ambiguous cases, that’d probably be good enough.

Thanks for giving it a shot. It looks like the default font for iTerm2 doesn’t include the centered diagonal glyphs, I’ve had good luck with any nerd font.

The z8 of Colossal Cave Adventure doesn’t output room names (or have a score/location bar), so there isn’t much I can do to detect the room. The good news is that the .blb/glulx and .z6 versions both work.

In terms of detecting multiple rooms with the same name, that shouldn’t be a problem because I cheat and look into the vm to differentiate. You can turn on the VM’s object/room number with the “/toggle-room-numbers” command. I suppose this allows a user to cheat on some of the maze-centric puzzles, but if you care about that sort of thing you can hide the map.

I’ll play through Lost Pig and Colossal Cave to help generate some stress tests. The maze type maps are always going to look a bit gross in the terminal due to overlaps and non-sensical bi-directional mapping.

Which one? Link to it? (Is it on IF Archive?) Colossal Cave Adventure has been ported/cloned hundreds of times.

That’s interesting! (And quite novel, I think… other automappers are purely transcript-based.)

I still suspect the ideal approach would be a standardized document format for map models that authors and end users could provide. With that, plus autodetected room numbers, you could get entirely out of the business of runtime transcript parsing, which seems good/wise.

For games that post the current room name to the status bar, it seems like you maybe wouldn’t/shouldn’t need to parse the transcript at all. When the player uses a directional command to travel to a new room, in the background, in parallel, you could fork the running process and try to return to the previous room, first by the inverse of the way they came in, then by all other standard directions. When you find the way back, you draw the new room with the link from the old room to the new one, and throw away the forked process.

You could also do that to automatically test/retest all used exits from the current room, hiding those links if they’ve changed in any way.

I tried the v6 and bib versions of Colossal Cave Adventures from the page here: Colossal Cave Adventure - Details

There is a bit of trial an error figuring out what is a room and what is not since there is so much variety in how stories are structured, so typically I detect the room (status bar is the best bet as you mention), then peek into the vm. Currently, I don’t auto-explore or look for return paths (not a bad idea). That is why as the user explores and finds bi-directional links between rooms the map gets a bit cleaner.

I’ve updated them with their code numbers (BALD0350) and (PENN0350) on IFDB.

In my mind, “autoexplore” means automatically revealing all accessible exits for the current room. I don’t think that’s a good idea, because it can spoil a puzzle, e.g. if you can secretly move up from the current room.

But automatically discovering how to get back to the room you just left is rarely a spoiler (except in classic mazes, and there, it’s a blessing to spoil them), and really helps when you travel north from room X to room Y, enter through Y’s west exit, and return to X via the west.

I definately recognize that you are playing “Dead Man’s Chest”. I made this map using my map tool as a map maker for that game. It is my graph paper in 2026 but I still have to make it and it is still easy to get lost and make it incorrectly but that is the fun part.

None of this is any kind of spoiler. These rooms are the open rooms of the mansion right when you start.

I find automapping removes some of the charm of the game. If the author wants you to have a map they give you one. I don’t really understand what problem automapping is trying to solve or what the person who offers it thinks it is trying to solve. By the time I won in this game I was moving around the whole map, close to 40 rooms if I remember marginally correctly, without needing to look at the map.

I could put this in my engine if I wanted but I don’t want to because I want the person to get a piece of graph paper, a pencil, and go full on D&D mode.

hey sorry but this always confounds me on github, where do i download the binaries?

Under “Releases” (direct link: Releases · sharkusk/babelmap · GitHub), then expand “Assets”.

Not everybody finds it fun to make maps on graph paper. I make maps because if I don’t make maps, I get lost, but it’s boring busywork for me.

It’s particularly painful to make maps on mobile. Whenever I’m playing on my phone, I’m very unlikely to have access to stationery and a writing surface. So, if I’m going to make maps in that setting, I’d have to do it on the mobile screen. I’ve tried doing that before; it’s such a hassle that it’s usually not worth the trouble.

Does that confuse you? (Why?)

If the author wants you to have a map they give you one.

Today, it’s very difficult for authors to give players a map with “fog of war” built in, where the map reveals itself as you play. Instead, authors typically have to provide a static map, which then can’t include spoilers, which means I’m likely to forget rooms that aren’t on the map.

Surely that’s the worst part, isn’t it? Whenever I discover that I’ve been stuck for 20 minutes because I’d accidentally messed up my map, especially on paper, where I either have to laboriously erase the map or start all over again from scratch, it makes me want to ragequit the game completely.

You shouldn’t let a game have that much power over you

Quitting a bad game is one way I take control of my life.

Anyway, are you still confused about what problem automapping is trying to solve?

Thanks I’m dumb

Edit: sharks could this potentially work as a steam binary and do steam achievements and cards?

My take is that some players enjoy making their own maps and others don’t. If someone downloads an automapping tool, they’re probably the type that doesn’t.

This might be possible eventually, perhaps once Ghostty fully supports windows (so it can be embedded).

Which Unicode characters are you using to draw the map? I’m curious about font support.

I updated the main readme with a table of the unicode ranges that are used (and for which purpose). There will also be a work around for those who don’t have a font with the diagonal glyphs (documented in that same section).

Beta 2 release complete. Lots of little improvements and much better v6 support.