Please review my Text Adventure Authoring System XVAN

Dear all,

I hope to find a few volunteers on this forum who want to have a look at the text adventure authoring system I made.

Some information:

–edit 3 years after posting the text is now obsolete. XVAN has moved here.

Thanks for reading!

In your opinion, is XVAN better at something than other authoring systems? If so, what?

I see that you have ported Cloak of Darkness. Have you written or ported a medium-sized game in XVAN? If not, there are a number of popular Inform games with source available online; you could start there.

You probably want/need mobile interpreters. In 2015, Apple shipped more iOS devices than all Windows PCs combined; there’s roughly 4x that many Android devices. Windows gaming is a niche now.

If not mobile interpreters, then at least a web interpreter (though preferably both). It takes much more effort to download and install an interpreter than it does to click a link and play a game in a browser.

Long term, people start using an authoring system when someone writes an admirable game in that system. Then people sit up and say, “How did you make that? I want to make a game like that, too.”

Thank you for your reply dfabulich.

I’m not very familiar with other systems, so I find that hard to say. I just wanted to write a system and there were a couple of things I particularly focused on:* Words can have multiple types. The interpreter uses a backtracking mechanism to select the right word types that produce a sentence it understands. E.g. ‘light’ can be both a noun and a verb, so it will understand ‘light light’.

  • The compiler uses the interpreter funtionality to compile parts of the story and vocabulary file. You may add sentences that a user would type to an object definition and the compiler will parse the sentence to an aggregated level and link it to an action for the specific object. Same goes for verbs.
    This makes it easy to implement very specific responses to user actions without changing much in the standard code. Just enter what the user would type with the object that should respond to it.
    In the end, I believe that user acceptance and installed base matters most, so Inform always wins.

I made a sample story in which you must escape from a building. It has an npc and some puzzles. I checked out some of the Inform game sources but have a hard time visualizing it. I would rather have a platform independent game design that I can implement but haven’t found one yet. I’m not good at the art of writing, so any game I design myself will suck from a writer’s point of view.

I wouldn’t play interpreter games on my phone because of the screensize and keyboard. Tablet would be different, though.

Yes, that will be an absolute must.

Basically, I enjoyed programming XVAN and I would like someone else’s opinion/tips on it. It would even better to have a game design for a larger game to implement and show that it can be implemented. Examples are better than words.

Thanks for reading.

I’m not sure how you’re imagining the game design should be specified, so possibly this will not be helpful. But for what it’s worth, my Inform game Bronze ( ) has a license that permits derivative works. The site I just linked includes source code, but also a full map of the game’s rooms, a making-of discussion with a puzzle chart, and a walkthrough to the various possible endings. It is generally considered a full-sized but not monstrously large game, and demonstrates a range of classic IF functionality.

Thank you, Emily. I downloaded the source text and am now trying to unravel how all the artifacts interact (I don’t speak Inform). At a first glance the Inform architecture seems very logical so I think I’ll be able to figure it out.

For who’s interested, here’s an update about porting Bronze to my system.

I started working on it in February after Emily’s pointer to the Bronze sources. Currently I have some 12.000 lines of code and I must say, it’s a lot more work than I expected, mainly because I’m not fluent in Inform 7. I never used it, so I spent quite some time figuring out how things work in Inform.

I had to start over a few times before I found the best way of working for me.

I started out with the floor plan and room descriptions and made sure the player character could walk around in the ‘empty’ world. Some rooms have variable descriptions that vary with the state of the game (first entry, number of rooms visited, memories, etc).

After the floorplan, I went through the Bronze sources and implemented all the ‘logic’ I could find in there. The candle and sounds were a bit of a challenge, because they go beyond the player’s current location. You can hear sounds that are outside the room and the candle will light a dark room when it’s in an adjacent room.

Next, I downloaded the walkthrough and played Bronze with transcript mode on, so I had a file with a complete overview of the commands to finish the game and the responses.

Currently, I play the walkthrough in my ported version of the game and compare the outputs with the Bronze transcript. In case of differences, I consult the Bronze source and revisit my sources to fix it.

Bronze has 3 endgames: kill the beast, free the beast but not the servants, and free the servants. Kill the beast works and I’m currently working on the free the servants end game.
On the side, I spend time walking around in my port, trying unexpected things and make sure the game responds in a logical way. These typically are actions that are not in the bronze source but are implemented (I think) as standard rules in Inform (e.g. walking through closed doors, putting other stuff in the cage, eating things, breaking things, etc.). So it’s not only the happy flow. For each verb (action) I have default responses which I try to align with Inform responses.

By the way, the port is only intended to show how to implement a large game with sometimes difficult concepts, it’s not intended to play Bronze. I will have to consult with Emily when it’s finished whether I may publish it and under what disclaimers as Bronze is her copyright.

Thanks for reading!

1 Like

Congratulations on your accomplishment so far! Most new IF system authors don’t get nearly as far as you have.

Now that you have more familiarity with Inform, do you feel better equipped to answer my question about what XVAN is better/worse at?

1 Like

What are some of the things have you learned about creating a new IF system?


Great job on writing your own IF system. Can you pm the source or a link. I’ll give it a go here and let you know if it works.

Thank you for your kind words.

A comparison with Inform I still find difficult. I only looked at one story file (which I can almost reproduce by heart now, so many times did I read it). From what I know now, Inform must ‘somewhere’ have a basic set of actions and other functionalities and in the story source file we tell Inform where to deviate from the standard set and how? With XVAN I don’t have such a standard set, everything is written by the author. This is a bigger initial effort, but after the first story there is a standard set that can be reused with the next story. And after porting Bronze, I have a pretty good set of actions and words to work with.
The abstraction level of XVAN I reckon is in between Inform 7 and Inform 6/Tads. It’s not natural language like Inform 7, and it doesn’t have the typical programming language artifacts (classes/arrays/inheritance …) as in Inform 6 and tads code
Inform has predefined objects like doors, stairs, scenery, containers (fluid, enterable) which is fine, but if you need different behavior it requires customization. I’ve seen posts from people asking advice how to do this.

XVAN has a very simple world model with little predefined. I tried to make it object oriented (Remember, I started in the early 90s, when OO was hot).

The world model can be described as:
Locations (rooms).
Objects (things). An object is contained in another object or in a location.
Verbs (actions).

Triggers (small programs that are part of a location or object and are triggered by the user input).
Functions to use in triggers (setflag(), move(), save(), restore(), getsubject(), distance(), newexit(), ……)
Flags (are up or down, used to keep track of status).
Attributes (used to store information like objects, locations, numbers, other attributes, …).
Timers (can be set to fire after they reach a threshold and will then call a trigger).

There is no central orchestration. User input is parsed and given to each individual location and object that is in scope. This sometimes requires some creativity from the author when multiple objects have to produce one response (the objects will use flags and attributes to synchronize and align their actions). With Inform this is easier because you can use the ‘run item through……’ construction, sort of a for/while loop. I deliberately chose this approach because I wanted the objects and locations as self-contained as possible. This would make it easy to share objects between authors (sort of an object store where you can upload and download objects). This would be similar to the Inform extensions?

Thanks for reading!

Here’s another update for who’s interested.

I finished the port of Bronze. I left out some things in the port:

  • Hint system (I don’t like hints in IF and I felt I didn’t need to implement it to “prove” that XVAN can model complex situations).
  • “go to” command. I will make it, but am still undecisive whether it must be an on-board compiler function or that I will make it in XVAN source code as a how-to pattern.
  • I wasn’t happy with my implementation of the compass rose in the status window so I took that out. Thinking about a better way, though.

A big step IMO is that I have integrated the Glk library in the interpreter to have more flexibility with the I/O. Windows Console / Linux Terminal is limited and Glk offers some nice functions. I currently only use it for screen I/O. The Save/Restore and Transcript data go straight from my own program code to disk. And the compiler is still console-based but I can change that later if necessary. It has lower output format demands than the interpreter.

The Bronze port source is 10.000+ lines. I started from scratch with the vocabulary and have used 715 words, of which are 120 verbs. It compiles in about 2 seconds. The Bronze binary is 452 KB.

Is XVAN finished? No, it’s never finished. The Glk thing I consider a big improvement and porting Bronze helped identifying missing functionality. It’s my pet project and I will continue working on it.

Thanks for reading…

Here’s a screenshot from my Bronze port in the XVAN Glk interpreter:

1 Like

Is the port available for download? I’d be interested in comparing it with the Inform version.

@Draconis, I don’t have a website but I can PM you a dropbox link if that’s ok.

Is the windows interpreter ok? The screenshot is from the windows version. I’m planning to make a Linux build with Glk this weekend.

Github or BitBucket are good places to host source code, if you’re inclined. It would be interesting to see everything.

I’m on Linux at the moment, but if you don’t have a Linux build ready I can run the Windows one through WINE. And second DavidC’s suggestion, it would be very interesting to see.

Yes, I am willing to put the source code in Github, but I think I will need a license to go with it. I’ve never done this before, so I will open a separate topic for some advice about licenses for Authoring systems.

Github doesn’t require that you make your material available under an open-source license or any license at all. You can put your code up there and say “All Rights Reserved” at no charge. (I do recommend using a more open license in the future, but it’s easy to get tied in knots trying to pick one.)

Ok, thanks dfabulich. I just found that Github also has a good explanation of various license types in their help page. And they also link to

For license, I suggest either public domain or GPL3, although there are many other FOSS licenses. GPL3 is complicated compared to the other licenses, but will protect against many things; I recommend it for a commercial product. (In order to protect your business interests, you may wish to omit the “or later version” clause, but use the statement mentioned in section 14 that allows a proxy’s public statement to authorize later versions, and to always authorize them unless you have a good reason not to do so. If it is not a commercial product or have no business interests further, then you should probably include “or later version”.) For noncommercial products, releasing the source code to public domain can be used for simplicity.

–Edit 20sep2019: version 2.4 is here

1 Like