Quest 5.0 Beta 3 and Tutorial available

17 July 2011

Quest 5.0 Beta 3 is now available for download.

The first draft of the Quest 5.0 Tutorial is also now available.

We are getting closer to the final 5.0 release now. The Issue Tracker currently only has a few relatively minor features assigned to a future Beta 4 release, so what we have now is close to the final version 5.0. Of course, version 5.0 is just the beginning - a rebirth for Quest, really - and I have lots of ideas for the versions that will come afterwards. But I think it is important now to get the new system stable and “out there”, so I don’t expect that there will be too many dramatic changes before the “gold” or “RTM” version 5.0.

New features in Beta 3:

  • Status Attributes - these are the equivalent of Status Variables in Quest 4, and let you display attributes (such as player health, money) in the pane on the right of the screen.
  • Multi-object commands - "take all" and "drop all" are now implemented by the Core library.
  • Ask/Tell - you can now give characters a list of subjects that the player can ask or tell them about.
  • Lockable containers - you can now assign a "key" object to a container which the player must have before they can unlock or open the container
  • Compass exit editor - more easily create exits between rooms, including automatically creating exits in the other direction. Hyperlinks in the exit editor allow you to navigate between rooms.
  • Play YouTube and Vimeo videos - now built-in to the Core library.
  • Switchable objects - easily implement objects which can be switched on and off.
  • Object Types can now extend string lists - this is used so that multiple types can contribute to the display verbs list. For example, if an object is both a container and switchable, the display verbs list shown when the player clicks its hyperlink will include "open", "close" as well as "switch on", "switch off".
  • Player object is now shown in the editor - easier to set the start location, set up attributes, and set up the player's initial inventory.
  • Editor now watches file for external changes - so you can more easily make edits using an external text editor while the file is still open in Quest.

This release also fixes all bugs which have been logged so far - 45 items since Beta 2, according to the Issue Tracker. Many thanks to everybody who has been logging bugs so far. Please keep them coming!

Download Quest 5.0 Beta 3

Eliminating "Guess the Verb"

11 July 2011

Two classic problems of text adventure games:

  1. "Guess the Verb". When you want to do something in the game, it should understand you, and if you're trying to solve a puzzle, you shouldn't also have to figure out the particular sentence formation that the game author was expecting you to use.
  2. Players who are new to text adventures often don't know what kinds of things they can type in.
An old solution

To address these problems, Quest has always featured lists and a compass to the right of the game window. These show the objects in the player’s inventory, and objects and exits in the current room. The idea is that, to a large extent, the player can interact with the game using the mouse.

However, these have always been a little inflexible. Firstly, there was a hard-coded list of verbs (“Look at”, “Take”, “Speak to”) displayed on the buttons. Secondly, not everybody likes the look of the panes, but if you turn them off, you’ve removed a lot of the help that the player might get.

A new solution

Quest 5 introduces another approach - you can dispense with the lists entirely, and use hyperlinks.

When you click one of the links, you get a menu showing the display verbs for that object. Each object can have its own display verbs, tailored to the type of object.

Quest provides default display verbs for various object types. For example, characters such as Professor Dave:

Objects such as the desk:

Containers such as the box of pens:

Switchable objects, such as the fan:

You can also add custom verbs to the list. For example, here we’ve added “push” to the button:

Apart from the final example, all of the display verbs were set up automatically using the functionality built in to Quest’s Core library. When you mark an object as “Male character” for example, you get the relevant display verbs (“Look at”, “Speak to”) which are different to the display verbs you get for “Inanimate object” (“Look at”, “Take”). When you mark an object as being able to be switched on or off, you get “Switch on” and “Switch off” added to the display verbs list.

Any type can add to the list of display verbs. Quest supports multiple inheritance, and the resulting display verbs list can be extended by multiple types. This means that if an object is both a male character, a container and can be switched on/off, you will get the full list of display verbs that you would expect. Any future libraries can also easily add to the list.

From the Object tab, you can customise the display verbs list entirely - adding or removing the default verbs.


You can turn hyperlinks off by selecting “game” from the tree, then on the Options tab deselect the “Enable hyperlinks” options. But first consider why you would want to do this - if it’s because seeing a list of verbs spoils your puzzle, it probably means it’s not a very good puzzle.

Note that the display verbs is not the full list of verbs for an object, so you can easily support additional verbs for detail, without cluttering up the display list.

As with all Quest user interface features, the pop-up list works both on the desktop and via the web. So whichever way people play your game, they will get the same experience. I believe this feature will be especially important for web-based games, because if text adventures are to attract a new (and like it or not, more casual) audience, they have to be easy for people to start playing, and of course hyperlinks provide a very intuitive way to to get web users started.

(The hyperlink feature is available in the current Beta 2 release of Quest 5.0. “Display verbs depending on object type” is a new feature in Beta 3, which will be available soon - or you can download the latest source code from CodePlex)

Quest 5.0 Beta 2 released

20 June 2011

It’s been another busy month of Quest development, and I’ve just released Beta 2.

The main change in this release is a substantial redevelopment of the Editor UI - it is now written in WPF, which has made laying out dynamically sized controls much easier. In particular, this is what has enabled me to implement the new-look Script Editor, as described in last week’s blog post.

Aside from that, all bugs that were logged against Beta 1 have now been fixed, and I have also implemented a few other features:

Static Picture

You can now keep a picture at the top of the screen, while the text scrolls beneath. This has been a common request for years, and I’m glad to have finally implemented it. Using HTML means that you can use any picture size you like, and the frame will resize accordingly. It means that it works the same wherever your game is being played - whether in the Quest desktop software, or online via the WebPlayer. It also means that in upcoming versions I’ll be able to extend this functionality to enable things like using a YouTube clip in the static frame instead.


Timers are now implemented, and you can use them in a couple of different ways. First, you can use them in the same way as in earlier Quest versions, where you can run a script at specified intervals. But there’s a new simpler way of creating a “one off” timer, which will run one time only, after a certain time period has elapsed. This creates a timer object behind the scenes, so even if the player saves the game and reloads it later, the timer will still be triggered at the correct time.

Turn scripts

Turn Scripts are analogous to timers, but instead of running a script at specified time intervals, you can run a script every time the player enters a command. You can create multiple turn scripts in the game or in different rooms, and enable/disable them at will, so it’s a bit more flexible than the “afterturn” scripts from previous Quest versions. Also, just as you can now run a script after X seconds have elapsed, you can now run a script after X turns.

Random Numbers and Expression Templates

I’ve added functions to generate an integer in a range (say, from 1 to 10) and to generate a random floating point number (between 0.0 and 1.0). With the new Expression Templates (covered in the previous blog), I was able to easily add some nice templates to the editor:

  • When adding an "if" script, you can choose "random chance" from the dropdown. You can then enter a percentage between 0 and 100, and that script will then have X% chance of running.

  • When setting a variable value, it's very easy to say you want to choose a random number:

Packaging games

In Beta 1 you could save your game as an ASLX file, but there was no safe way to distribute your game. Beta 2 comes to the rescue with a new “.QUEST” file format, which is similar to the CAS format in previous versions. It will take your game, including all libraries and external sound, picture files etc., and output one .QUEST file. This will be the file format you’ll have to use to upload your game to This will ensure that games written for one version of Quest will still work in future versions, as the entire Core library will be included within the .QUEST file, so there won’t be any incompatibility problems as features are added and changed in the Core library.

Other features

You can now put what the player types next into a string variable, ask the player a “yes or no” question, and there’s a full-screen option if you want to go completely old-school and get your Windows taskbar out of the way.

Download now

You can download Beta 2 now from the Quest 5.0 Downloads page.

You can subscribe to the Quest announcements mailing list, and get updates on Twitter via @TextAdv and @alexwarren.

If you have any questions or problems, please ask in the Quest 5 Forum or check the Quest 5 documentation wiki. Please report any bugs on the forum or the Issue Tracker, or email me at [email protected].

Programming visually - the Script Editor in Quest 5.0 Beta 2

13 June 2011

I’ve often described Quest as allowing you to create text adventure games “without programming”, but of course that’s not strictly true. While you could create a game without using any scripts at all, you’d only be able to tap into very basic, default behaviour, so it would be quite a boring game.

What Quest has always aimed to do is to make creating scripts easy, by taking a different approach to programming. You still enter commands, use variables, functions and so on, just as in “real” programming, but the Script Editor guides you through the process and tries to make it as intuitive as possible. There’s no need to remember syntax, type in strange punctuation or even remember the names of commands, because the Script Editor shows you all the available commands, and guides you through entering their parameters.

It essentially presents a graphical layer in front of the underlying code. The underlying code is still there, and in Quest 5 it looks pretty much like any other programming language, but the Script Editor shields you from all of that, and displays as much as it can in plain English. The aim of this approach is that you should be able to get started quickly, even if you’ve never programmed before, but also know that you have as much power as you could ever need if you delve a little further.

With the new Script Editor appearing soon in Quest 5.0 Beta 2, I think I have achieved my aim of improving on the design of the Script Editor in Quest 4, making it both quicker and easier to use for beginners, but exposing the full power of Quest 5’s new scripting language for those that need it. At the same time, the Script Editor is flexible enough that new libraries can hook into it to allow the game author to easily use all of the library’s features.

In Beta 2, I have rewritten the Script Editor UI from Beta 1, so it now looks quite a bit different. Here’s an example of the Script Editor showing the kind of script that often appears at the beginning of a game - it prompts the player to enter their name, and then welcomes them to the game:

Behind the scenes, this the script that has been created:

msg ("Welcome! Please enter your name to begin.")
playername = GetInput()
msg ("Welcome, " + playername)

Let’s look at each of these commands in turn, and how the Script Editor helps you to create this kind of script.

First, there’s a command which simply prints a message to the screen. Starting with a blank Script Editor, the only option we have is to expand the “Add new script” section, which gives us a searchable, categorised tree of all the commands we can use:

We can click “Add” or double-click to add this command. Now the Script Editor looks like this:

We can simply start typing the message. No need to worry about closing quote characters, or indeed including quote characters within the message - the Script Editor handles all of that, ensuring the underlying script is created correctly (with any quote characters in the message escaped if necessary).

Next, we want to add a command which will store the next thing the player types in at the command prompt. We click “Add new script” again, and add the “Set a variable or property” command, which can be found in the “Variables” category (or by typing “set” in the search box).

We can type in a name for our variable, “playername” for example. Next we need to enter the value for the variable. We can enter any expression, such as “2”, “foo”, “3+8”, “SomeFunction()” etc. So we could call the function ourselves, but the Script Editor has another trick up its sleeve - expression templates.

Expression templates appear for a number of script commands, and provide access to common functions. They are context-specific, so you see different expression templates for the “set” command than for the “if” command. If you click the “expression” drop-down, you’ll see the available templates. Currently, for “set” you will see this:

(This list may well be expanded before Beta 2 is released, and the templates are defined in the core library, meaning that the list can be easily extended)

Selecting “player input” completes the command, and now we can add the final “print” command to welcome the player. But this time we don’t want to print a static message - we need an expression, so we can include the value of the “playername” variable we created earlier.

A similar dropdown on the “Print” command allows us to switch to an expression:

We can now add the expression "Welcome, " + playername, and the Script Editor will give us a bit of help with that, too. The blue triangle to the right of the expression contains a menu which allows us to add things to our expression:

Selecting “Variable” from the menu gives us a drop-down list of all variables in the current scope - in this case, just the “playername” variable we created earlier. Of course, we can simply type the expression too.

To experienced programmers, this may seem like quite a lot of pointing and clicking to create a simple script. You may think that nobody would want to program this way - but the evidence from previous versions of Quest shows that’s not the case. When I first added a visual editor to Quest, way back in 1999, it was far from clear that people would want to program in this way, but people do - the visual editor is by far the most popular way to create games for Quest 4, and while I’ve always supported the ability to “hand code” games using a text editor, pretty much nobody uses Quest in this way. In Quest 5, the Script Editor is even easier to use, and more powerful, so I hope it will allow both experienced programmers and novices alike a way to get started making games quickly. Quest 5 also features a Code View, so the “hardcore” version is just a click away anyway - you can switch back and forth easily.

The new Script Editor will be available in Beta 2, which I’m hoping to release within the next couple of weeks. If you can put up with buggy code and have Visual Studio, you can try it out now by downloading and building the latest trunk code from CodePlex.

Quest 5.0 Beta 1 now available

24 May 2011

Quest 5.0 has finally reached beta stage!

You can download Beta 1 from

This is the first “full-featured” release, in the sense that it’s the first release of Quest 5.0 which you could use to create a game from scratch.

It will be quite buggy though, as all Beta releases generally are. Also, although it’s version 5.0, don’t forget that as this is a complete rewrite, it’s a fundamentally brand new system, so this is more like a v1.0 beta. But if you like Beta software, that’s a good thing, because there will be even more bugs for you to find! You can report bugs on the forum or the Issue Tracker or you can email me at [email protected].

New features since the last technical preview version:

  • a fully working Editor
  • a game browser allowing easy and direct access to games on
  • support for graphics and sounds
  • German and Dutch translations

Read on for full details…

Quest is growing quickly

I left my job a couple of months ago to work full time on Quest. There’s just so much that I want to do, and it would take forever to get there otherwise, so I’m taking a short-term hit to invest in the long-term future of Quest (I haven’t quite worked out how to make any money from a free open-source system, so this may not necessarily be a clever idea).

Open-source site Ohloh have just improved their code analysis graphs, and Quest’s graph is pretty interesting - it has grown 50% since the end of March. (You can see one other big jump in December 2010 when I checked in the port of LegacyASL to handle older Quest games)

Code Analysis from Ohloh

I’ve been working hard to get to the point where Quest 5.0 is now of “initial beta” quality. There are still quite a lot of outstanding tasks, but it’s now at least possible to load Quest, create a new game from scratch, add things to it and play it. The foundations for all features are at last in place, and we have a solid base from which to build.

So, what’s new since the last technical preview?

Making it easy to get games

Quest now features an integrated download manager. You don’t need to go to a website, download a game, find it on your hard disk and then open it - instead, as soon as you open Quest, it will grab a list of games from, which you can download within the program and play immediately.

Game Browser

Editing games

The Editor has been the main thing I’ve worked on over the last few weeks. You can now create a new game from scratch, add rooms, objects, exits, verbs, commands, functions and walkthroughs, and then play your created game - all within one application.

The Tree

Every kind of thing in Quest is an element - an object, a verb, an exit, a function… they’re all elements, and they’re all displayed in the tree on the left hand side of the Editor window. It will be familiar to Quest 4 users, but it’s even better in Quest 5 - if you have objects inside objects inside other objects, you can see the full hierarchical relationship within the tree, and you can click and drag to move elements around. It also has a search feature.

Editor tree

Element Editors

When you select an element from the tree, you’ll see the relevant editor, such as the one below for an object:

Object editor

The element editors have been designed from the outset to be completely extensible. Every element editor is in fact loaded from the Core library, which means that it’s easy to add functionality such as a new checkbox for a particular object feature. The Core library therefore defines not just the standard game behaviour, but the standard game editors. This means that:

  • as the Core library gains features, it's easy to update the editor to reflect them
  • new editor checkboxes, textboxes etc. automatically gain standard functionality such as undo/redo, and inheriting attributes from included types
  • if you write a Quest extension, you can add editor support easily, and it will be just as rich as the standard functionality
  • if you want to entirely replace the Core library, you can create your own Editor screens to go with it

Script Editor

The Script Editor is probably the most important part of the Editor, and the most complex. Behind Quest 5 lies a much more powerful version of the ASL scripting language than was present in previous versions, yet I want the Script Editor to be even easier to use.

The general aim is to make it possible for you to edit complex scripts, just a complex as in any “full” programming language, but in plain English. Quest takes a slightly different approach compared to other systems such as Inform. In Inform, the syntax is very “English-like”, making it easy to read Inform code, but you have to know the “correct” way to express yourself as you type in code. In Quest, you don’t type commands - instead, you select them from a searchable, categorised list, and you fill in the blanks.

Step 1. Choose a command…

Script command tree

Step 2. Click “Add”, then fill in the blanks…

Editing a script command

Step 3. Lather, rinse, repeat if desired.

You can add as many script lines as you like, and you can build up arbitrarily complex scripts if you add something like an “if” command or a loop.

I think the current design is far more user-friendly than the Script Editor in Quest 4. There are no pop-up windows, and you can’t accidentally change the command you’re editing into a completely different command with a misplaced mouse click. The list of scripts updates in real-time as you type, even as you update nested scripts (such as “Print a message” commands inside an “if” script’s “then” block).

You don’t need to scour the list to find the script command you need - you can quickly search for it. For example, search for “picture” to find any commands relating to pictures:

Script Editor showing a command search

There’s still some way to go with the Script Editor, though. A major part of the complexity of a script is in creating expressions - calling functions etc. The current beta doesn’t give you any help with that. Eventually I want there to be drop-down lists of functions, but for now you’ll have to type in expressions yourself.

Also, the Script Editor is currently implemented in WinForms, which seems to be quite glitchy when you have a complex script containing multiple “if” commands as it’s creating quite a lot of window elements. I’ll probably work on a WPF version of the Script Editor for Beta 2.

Undo, redo, cut, copy, paste

The Editor supports unlimited undo and redo. Didn’t mean to delete that object? Pasted a script in the wrong place? Now you can go back in time to correct your misdeeds - your text adventure editing ones anyway.

You can cut, copy and paste any element. In QDK 4 you were limited to objects - now you can copy and paste everything.

Quest Editor toolbar

As both the Player and the Editor are the same program, when you click Run you’ll be able to play your game in the same window. Typing “quit”, pressing Ctrl+F4 or choosing “Stop Game” from the File menu brings you back to the Editor.

Code Editor

QDK 4 had an ASL viewer which wasn’t too useful - now you can quickly drop into the code viewer and edit by hand. Useful for those comfortable getting their hands dirty with code. You get XML syntax highlighting too.

Code Editor

If you reference any JavaScript in your game to customise your interface, you can also edit that within the Editor, again with syntax highlighting.

Library Elements

Most of the standard game functionality comes from the Core library, and the Core library consists of elements, so it makes sense to be able to view these in the editor too. If you turn on “Show Library Elements” from the Filter menu at the bottom of the tree, you can see all elements defined in the library. If you select one of these, you can see its entire definition, and copy it to your game if you want to customise it yourself.

For example, the default implementation of the “take” command is defined in the Core library, and here it is in the Editor:

Editing a library element

Attribute Editor

The “Attributes” tab on elements allows you to enter your own arbitrary attributes. All element data is stored in attributes, so you can in fact edit every aspect of an element here.

If an attribute is greyed out, it’s because it’s inherited from a type instead of being defined on the element itself. You can still edit them though - they’ll be copied to your element if you do so, which will mean you’re overriding the default value from the type.

Attribute Editor


I’ve designed Quest 5 from the beginning to support games in other languages. No game text is hard-coded - it all comes from a library. When you create a new game in the Editor, you’ll be prompted to choose a template, and already in Beta 1 you can choose from English, German or Dutch templates.

Many thanks to Lina Anna and Pertex respectively for providing the Dutch and German translations - I’m very keen for Quest to support as many languages as possible, so I’d be happy to receive any other translations! You can edit a copy of the English.aslx file in your Program FilesAxe SoftwareQuest folder.

What's next?

Beta 1 is just the beginning - there’s plenty of work to do. I already have a fairly extensive list of things to implement for Beta 2 - see the Beta 2 items on the Issue Tracker for full details.

I’m hoping to be able to iterate through releases fairly quickly, so hopefully it won’t be too many weeks before Beta 2 becomes available.

I almost have too many ideas for Quest, so it’s important to avoid “scope creep”. Version 5.0 will be good, but I don’t want it to be like Duke Nukem Forever - so I’m planning to release the final version within a few months, with more goodies to come in versions 5.1, 5.2, 6.0 etc.

Keep up to date

You can download Beta 1 from - it will give you an update notification on the game browser screen when a new version is available.

You can also subscribe to the Quest announcements mailing list here.

You can also get updates on Twitter via @TextAdv (for Quest and announcements) or by following me at @alexwarren (there are some Quest announcements, but it’s mostly other rambling and ranting).

If you have any questions or problems, please ask in the Quest 5 Forum or check the Quest 5 documentation wiki. Please report any bugs on the forum or the Issue Tracker, or email me at [email protected].

All Posts