MenuAdventures.jl for making menu-based adventures in Julia

MenuAdventures is a Julia package for writing menu based adventures.

MenuAdventures is heavily inspired by Inform7. Inform7 is an astounding achievement in terms of natural language programming. However, I’ve made some different choices for MenuAdventures.

MenuAdventures takes user input as menu choices, rather than unconstrained text. I think this will allow for a much more enjoyable player experience, because players will not have to guess what words the parser will recognize. Moreover, I think this will enhance dialog with non-player characters. Because dialog options are specified by the game designer, they can be much more nuanced.

Game designers will use regular Julia code to create the universe. Inform7 offers many different ways to design identical universes. This can make it confusing to learn how to code in Inform7.

MenuAdventures also takes advantage the magic of multiple dispatch. I’ve left detailed documentation on how to create your own Noun and Action subtypes. You can overload various methods to completely customize them.

MenuAdventures features a flexible boolean trait system. This allows you to create nouns with creative combinations of traits, such as edible boxes, or talking bananas. Beyond MenuAdventures, I think this system could serve as a model of how traits might be designed for Base Julia.

I’m very curious to see what kind of games people make with MenuAdventures, mostly because I’d like to play them. Happy to take suggestions for design improvements!


It would be nice to see an example! I clicked through the Git repo but only found low level documentation.


Hmm, well, no examples exist yet because I haven’t written a game… I was thinking of porting one of the open source Inform7 games (maybe Bronze?) or maybe I’ll just write my own?

I think some very basic dummy examples would be more than enough to catch attention! Usually I like to see those four layers of great documentation from which you already covered the most tedious one (the low level API).

Given that 66 people (at most) clicked on the link as of now and only 8 likes were given is not due to the fact that people do not like it, but most people do not spend more than a few seconds to skim through the readme and they just forget about it when they do not see it action :see_no_evil:

I think having something working in a copy&paste sense in the README is already a win. Even if it’s really basic. You can assume that good devs will go crazy with your framework once you nerd-snipe them with a catchy example!

I’d also put a clickable link to that Inform7. I have no idea what that is and firing up Google by hand is already too much for many casual visitors :sweat_smile:

Btw. I had a look at your package but I don’t even have a clue where to start. I searched for a Game struct or something to hold things together, but I had no luck.


Hmm, well, I’ll have a go at making the docs a bit nicer. If you’re looking for a place to start you could look at runtests.jl. Here’s the link for Inform7:


@tamasgal I’ve split the package up into several sub-modules, reorganized the docs, and added a long doctest at the start of each. Hopefully that’s a bit better?

1 Like

It’s much better now! I wish I had time to work on a text adventure, I really loved them when I was young and played a lot of MUDs :)