In Beta 2, it doesn’t map at all in https://ifarchive.org/if-archive/games/zcode/advent.z6 (PENN0350). The map title says “Main(0)” and the map is completely blank, even when I go east and west from the starting room.
Lanthorn (was Babelmap) - Rust Z-Machine/Glulx/Scott TUI w/ Graphics and Sound - Linux/MacOS/Windows
Thanks. That’s a weird one, v6 can be a bit wonky. The score bar is also messed up. I’ll add it to the list. I’ve been testing with the blorb version, the maze is challenging to make look nice. Mazes might just be ugly with the drawing tools available in the terminal.
You had me until you said “map drawing” and “mouse-driven TUI”. I would love to see something similar to Gargoyle and Lectrote, but in a simple terminal window, for easier accessibility; this ain’t it, chief, but good luck. I’m sure someone will enjoy using it.
Hi @blindHunter,
The good news is that in each releases I include basic cli-only clients for each of the interpreters: z-machine (zvm-cli), glulx (gvm-cli), and scott-adams (scott-cli). No map drawing, graphics, or mouse functionality (but multi-window and sound works). These are primarily used for head-less testing harnesses, but are designed to be fully functional with the goal to be an equivalent experience to ~VT220.
Beta 4 released. Highlights:
- The simple CLI clients support --screen-reader mode
- Matrix/table based mapping to assist with maze exploration
- Journey style clickable menu system
- Better paging [more] support
- Lots of tweaks and bug fixes
Beta 5 released. Highlights:
- Reads Amiga disk images directly and detects z-machine games
- Auto selects amiga interpreter number
- Renders native amiga graphics for z6 games
- Supports Scopa and Frobozz Magic Video Poker (rename zork0.blb to fmvpoker.blb)
- Fixed room detection for several games
- Various bug fixes
First up, the project has been renamed to “Lanthorn”. As @jkj_yuio pointed out Babelmap was already taken. Also, the focus of the project is no longer just z-machine with a map, so it makes sense to have a more general purpose name.
This release I focused a lot on reading native media. So, you can point the TUI or CLI app at an original Infocom Apple, PC, MAC, or Amiga disk image and it will play straight from there, using that system’s interpreter number. If there is sound or graphics, it will decode those natively (no need for a blb file). It will also read hybrid ISO and BIN files and find all of the games automatically. You can use the ‘o’ key in the story list to select between the different graphics formats available on the disk.
I also added a screen-reader mode to all three CLI’s and lots of other various enhancements.
-Marcus
Not sure if anyone is still reading this thread, but I’ll keep posting for posterity…
New release.
I’m exploring some idea on how to make IF more accessible and a bit less frustrating for someone new to IF. So, Lanthorn can now ‘reveal’ words in the transcript that are understood by the story, and will provide a helpful prompt for mistypes and synonyms. The tab complete and command panel is also fully reactive and will not show something in the sack, until the sack is opened/examined. This is all done by parsing into the story and works for both z-machine and glulx. I’m not sure how much this actually helps, so open to feedback.
I also integrated two PRs from u/krickert (thanks!) to support Docker hosting and a web based terminal view (with sound support). Plus added extended raster mode if you want that official pixelated Mac/Amiga font look on z6 games, but with extra real-estate.
Note: this also integrates @dfabulich return-path detection concept.
None of the rows look right! I’m using iTerm2 3.6.11, with (I believe) its default font, Monaco. Lanthorn should have some mode/option that works with the default font.
In Lost Pig, it says that Closet is room #59893, but gnome room (the same room, in the light) is #231. Why is that? (Is this because thedark is kinda its own place In Inform?)
I have another suggestion that I stole from ADRIFT as I implemented Inform Glk Mapping … sometimes, when you go north from a room, it takes you back where you started. Rather than representing that on the map with a loopy connector from north to south, represent that as a short “stub” arrow pointing north.
Generally speaking, when going north takes you back where you started, it’s because something went “wrong” going that way. The “stub” arrow represents an exit that you haven’t used successfully yet. It also avoids cluttering the map with bizarre loop-de-loops.
More philosophically, I’ve come to realize a map is a diagram of hypothetical statements. It says:
- If you were to go north from West of House, you would go to North of House.
- If you were to go east from North of House, you would go to Behind House.
- If you were to go east from Behind House, you would go to Clearing.
- … and so on
But those statements aren’t necessarily true. If the map is clear and stable, then they’re usually true, but an author can write “instead of going north” and teleport you anywhere they want.
The maze at the end of Lost Pig is particularly chaotic, with connectors popping up everywhere.
I claim that this is because it wrongly assumes that since going north from Twisty Cave took you to Twisty Place, then “Twisty Place is north of Twisty Cave”, when all you really know is that one time you went north from Twisty Cave and ended up in Twisty Place. In fact, I went north from Twisty Cave and got teleported to Twisty Place.
Earlier I claimed that automatic exit exploration might be spoilerific. That might be true, but now I think you should do automatic exit exploration and just keep those discovered exits secret, just to minimize layout shift as you explore.
Thanks again for the feedback Dan.
If you want all the nicer looking glyphs you will need to grab any Nerd Font. The last four are diagonals, which are part of the Symbols for Legacy Computing. I’ll add a separate check for that in a patch release later today.
For mazes and overly complex areas, I added a matrix view which is much better for mapping and navigating a maze. You can peel those rooms into their own layer, then click on the M button in the map border to switch to the matrix view for that layer.
My wish list is getting a bit shorter so I may have some time to revisit the mapping feature. I started a discussion where you can post problematic maps: Maps with Issues · sharkusk/lanthorn · Discussion #5 · GitHub
Yeah, I too am saddened by the lack of widespread support for diagonal box-drawing characters. But at this point I try to always provide a pure-ASCII alternative; for every codepoint above $7E, there’s always going to be someone, somewhere, who’s not able to see it. (Or hear it. Or…)
Out of curiosity, what’s so great about these diagonal characters compared to good old ASCII \ and / (which everything supports)?
(And why are there four of them??)
Instead of connecting the corners of the rectangle, they connect the midpoints of the sides. So they can be linked up easily with the horizontal and vertical box-drawing characters.
I wish these had been part of the original Unicode box-drawing set, but it’s too late now.
None of those are going to render correctly on my machine, right? Is the plan just to not support Monaco??
I tried to generate a map dump for you for LostPig. When I ran /export-map it did this:
And, this may not be totally constructive feedback, but I gotta get it off my chest… The fact that Lanthorn is a TUI is a huge turn-off for me. From my perspective, Lanthorn would be better in every way if it were a GUI app.
I’m interested in Lanthorn due to its ability to integrate with the interpreter to autodetect room numbers, making it possible in principle to be a better automapper. I’m enduring this TUI to see if there’s something good buried underneath it.
Trying to draw a good map in a TUI is like trying to draw a map with both hands tied behind your back, holding a pencil in your mouth. It’s amazing that you can do it at all! But it would be 10x better in a GUI.
I think about this all the time! But there are already lots of GUIs and very few TUIs and part of the “fun” is seeing how far I can push it. ![]()
I’ll fix the overflow on the notification dialog. In the meantime you can dump the notification detail to the story transcript with /dump-notifications
I don’t want to disrupt from Lanthorn, but this is exactly what I was doing with Voxam. I have a TUI (using blessed) and a few GUIs (pygame, glkote, Tauri). It’s interesting to see what you can do about providing a consistent interface between them. Now, that said, I haven’t even tackled auto-mapping yet, except conceptually. (And honestly, I don’t know if I’m going to.) I’m sort of with Dan here, though, in that I think to do it really robustly, you almost do need a GUI.
Bringing this back to Lanthorn, I’m definitely keen on learning from what you’re doing here, so I applaud your efforts to experiment.
Playing around a bit more, I think the core problems with Lanthorn’s automap fall into two categories:
First, Lanthorn assumes that if you go north from X to Y, then Y is, in general, north of X. It assumes that Y is north of X even if you later go north from X and find yourself in Z.
That’s especially pernicious when Y is Darkness (thedark). Lanthorn assumes that if you go north from X and find yourself in Darkness, and then you go east of X and find yourself in Darkness, then both “Darkness” rooms are the same room. Lanthorn needs explicit detection for the Darkness case, and not just by name (“Darkness”), because I believe in Lost Pig it’s the “Closet.”
I claim that if you first go north from X and find yourself in Y, and then go north from X and find yourself in Z, Lanthorn should now remove the north-south connector from X to Y. If this leaves Y unattached from the map, then room Y should be removed from the map entirely.
As it stands, Lanthorn is inclined to leave the fake Darkness Closet room on the map and draw the gnome room. Once that happens, there’s no way to make the Closet go away; it just sits there, screwing up the map, forever.
Second, there’s a big problem with randomized “mazes” like in Lost Pig and Anchorhead (Twisting Lane), where movements randomly teleport you. I think this should be relatively easy to detect by a similar mechanism as return-path detection.
When testing an exit north from X to Y, try undoing and doing it again, perhaps 10 times. If going north from X to Y works 10 times in a row, then it’s probably not random. If not, then you were probably randomly teleported to Y. If you’re now in Y, but Y doesn’t already have a map placement, perhaps Lanthorn would draw Y to the north of X (why not? Y has to go somewhere), but not draw a north-south connector between X and Y, because there isn’t one.
I claim that this is also true of return-path detection. If the user navigates from X to Y, when testing the return paths, each one should be tried several times, to see if it’s consistent or random. (Maybe it’s possible to be randomly teleported to X, but not guaranteed.)
I have some map UI notes, too. In Scarier, we found it useful to represent in/out and up/down with “badges”, little circles on the room border containing a letter “I” or “O”, or an up arrow or down arrow. We position the badges at the “half-wind” ports of the room (NNE, ENE, ESE, SSE, SSW, WSW, WNW, NNW), and generally prefer to position up on the north edge, and down on the south edge. We then display in/out/up/down movements as connectors from one badge to another.
It’s quite common for there to be two ways to reach the same room, e.g. you can enter the Basement by going east from the Kitchen or by going down from the Kitchen. In that case, we draw only the east-west connector, but we position the “down” badge on the east port, thus visually representing that both East and Down are the same movement and that they go the same way, without needing a lot of confusing UI on the map.
(And I mentioned the “loops should be stub arrows” UI note earlier. That helps a lot to keep the map tidy!)
Thanks for the detailed feedback. If you could drop a couple complex maps you’ve explored into the GitHub discussion that would be really helpful. Next round I will spend some time on mapping improvements.
I dropped a minor release with some nice performance improvements on glulx stories and a few tweaks.
Hi @dfabulich ,
Lanthorn 0.4.2 now handles the Lost Pig mini-maze area. Better yet, by parsing the story file it is able to determine that the maze in this story is actually an illusion. There is only one room that randomly gets a new name with each move. So, the same fix for the Closet/Gnome Room actually works for both cases.
However, there are some other games that do actually teleport randomly (Colossal Adventure, Zork II, etc). So, it is also able to detect random destinations as well.
That said, real mazes are still be suited to be explored using the matrix view.
-Marcus



