Monthly Archives: September 2018

The Cloak of Darkness

The Cloak of Darkness is a specification for an adventure game that has been created in numerous systems, with the purpose of giving prospective authors some idea of what is involved in each system.

IFWiki says of it:

This adventure is a tiny adventure designed to be easy to port to a given Authoring system. It is, if you will, the interactive fiction equivalent of “Hello, world!”

The Cloak of Darkness has its own web site that at one time kept up to date with IF authoring systems and their implementation of it.

Unfortunately it has not been updated in well over a decade, and apparently that is not about to change. Quest is on there, but a very early version, 3.5, which is very much a different system. Back then, Quest had two programs, one that was free, to play games on, and the QuestPro version, which you had to pay for, and could be used to create games. The file format was also completely different.

Modern Quest dates from August 2011, and the introduction of Quest 5, when it went open-source, free for everyone and XML-based.

I recently came across a thread on about the Cloak of Darkness (the first I had heard of it), and thought it would be interesting to do a modern version of it.

There is a problem with the concept behind The Cloak of Darkness. It is attempting to show how easy it is to create in each language, by showing the source code. But with Quest – and other systems too – you do not look at the source code. You would need to look at numerous windows and tabs (things that make authoring much easier, but make documenting authoring rather more trouble!).

So you can look at the source code for the Quest version, but really that does not tell you much. You need to understand the steps involved in creating it.

And so I present:

The Second Quest Tutorial!

This is a new page in the Quest documentation that describes how to build a full version of Cloak of Darkness from scratch, explaining at each step not just how to do it, but why it was done that way. There are links to a working game, and you can download the source code and open it up in the desktop version to take a look too.

Quest 5.8 is out!

This is my second major release for Quest, and in fact most of it has been done by other people, and in particular KV and SoonGames. Thanks also to the beta-testers and other “helpful helpers”: Anonynn, Darryl Huen, DavyB, Dcode, Pertex. Also to Luis for his support with regards to the web site (it has taught me what a pain in the neck that is!).

Apologies if I have missed anyone. This has very much been a community effort, which I think is great.

Some issues, hopefully now resolved

So Quest 5.8 is out, and not without a few issues… This was a rather more ambitious release than Quest 5.7 (which made hardly any changes outside the core libraries). Turns out the rest of the code has all sorts of inter-dependencies and pitfalls that only Alex was aware of. It was also unfortunate that while my side of it was ready several weeks ago, Luis could only upload to just a couple of days before I was away on holiday, so we had a couple of weeks where it was up and running – more or less – but no one was around to address issues. I guess we will chalk it up to experience. In the future we will be much more careful of changes to any files outside the core .aslx files. We will also have a better idea of what needs testing; issues with publishing from desktop and uploading to the web site, and problems in the web player not finding files.

We are still very much learning how to do this since Alex retired from Quest, and that will probably continue for a couple more updates. As a “one man band” Alex knew Quest inside out; I doubt we will ever get to that stage! That said, some documentation in the code might have helped…

Hopefully the issues have now been resolved.

So what is new?

New Interface

The big change in this version is the new interface. This is all thanks to SoonGames. Take a look! We hope you like it.


All the work on getting Quest better set up for internationalisation was also done by SoonGames. Thanks also to everyone who contributed translations:

– Danish: Benny Askham
– German: SoonGames
– Greek: Thanasis Chrysos
– Italian: Skarnisk
– Spanish: Luis

If you can help to get Quest translated for your language, or to update an existing translation, please get in contact. We can now offer translations for the editor, but only where we have the translations available, which so far is only German and, to a limited extent, Spanish.

Other changes

Quest will not allow bad attribute names in the editor (“object”, “turnscript”, etc.). Previously these could break your game. You can still use these in a script, which is still a problem.

A new command, TELL <char> TO <text> or <char>, <text> has been added to the _Ask/Tell_ tab.

Turnscripts have been revised a little. There is a new function, SuppressTurnscripts, which will stop all turnscripts for one turn. You might want to do this for a HELP command, for example, or for events caught by the map. The UNDO command now does this automatically, so turnscripts make more sense in that context. Also, turnscripts now run in alphabetical order (previously the order of global and local scripts would be reversed in a loaded game; now the order is always the same). If you allow multiple commands on one line in your game, each command will trigger the turnscripts.

Scope for a command can now be set to an object list attribute of the player object.

It has been the case that cloning an object also clones its child objects. Now they get the correct “alias” and “prototype” attributes set.

Following a suggestion from mrangel, text processor directives are now extensible. More towards the end of this page.

You can use the QuickParams function to quickly create a dictionary with up to three entries, useful for quickly sending parameters to a script.

The GetDefiniteName function will return the name or alias of an object, with “the” prepended where appropriate.

Thanks to KV:

You can now check if your game is being played on webplayer, desktop or mobile.

RESTART command added.

Advanced popups added.

LOOK AT now counts how many times an object has been looked at.

TAKE ALL will ignore any object with “not_all” set to true (which it is for NPCs by default), and this has generally be made more sensible with regards to items in containers. Will now give the correct response if there is nothing to take. If you have your own take/drop command this should not be affected.

Transcripts and logging now possible.

Improved VERSION command.

You can now check the “isroom” attribute to see if an object is a room, and use AllRooms to get a list of rooms in the game.

New functions DictionaryAdd and DictionaryRemove, the first will overwrite an existing entry if it exists, rather than throw an error, the latter will do nothing if it does not exist.

Thanks to Pertex:

Games can now send data to external sites, for processing, eg by PHP. This means you could set up a site that saves high scores, or records the number of people who chose a certain path through your game.

Thanks to SoonGames:

DeveloperMode (see here).