A look at Alan 3

2012-03-05

Created in 1985 (according to the IFWiki), Alan may well be the oldest interactive fiction authoring system still in active development. Despite that, it never achieved much popularity. The IFDB lists 46 Alan games; Baf's Guide, only 42 of them. To put things in perspective, that's the number of IFComp entries on a good year. That's too bad, because the system has unique qualities.

I downloaded the binary archive of Alan 3 beta 2 for Linux, the latest stable version as of this writing. The system falls under the open source Artistic License; beware that both the website and README files may still refer to the old "register-ware" terms in places.

Speaking of the manual, it comes as a 227-page PDF which apparently describes the system in its entirety. That's possible because Alan is a specialized programming language, with all the needed functionality hardcoded into the runtime, and the (otherwise ample) standard library is merely a bonus. That's in contrast with platforms such as Inform 6 and the Z-Machine, which can and have been used for things other than interactive fiction.

While on the topic of the standard library, the Alan Beginner's Guide recommends copying it into every project and customizing in-place. That has the undesirable side effect of forcing you to distribute the customized version with your game's source code, should you wish to make it public; be sure to read the Artistic License if you do.

If on the other hand you go without the standard library, it turns out the game doesn't understand any verb at all by default, except for whatever exit names you define (and "undo", oddly enough). At the very least, you'll want something along the lines of:

	verb 'look', l does look. end verb 'look'.

	verb 'save' does save. end verb 'save'.
	verb 'restore' does restore. end verb 'restore'.
	verb 'quit' does quit. end verb 'quit'.

	verb transcript_on does transcript on. end verb transcript_on.
	syntax transcript_on = 'transcript' 'on'.
	verb transcript_off does transcript off. end verb transcript_off.
	syntax transcript_off = 'transcript' 'off'.

Section 3.17 of the manual appears to suggest you can reuse language keywords as verb identifiers, but in reality you need to do it like in the code above, as per the sample game Saviour. We can expect a documentation fix soon; Thomas Nilsson was very nice and prompt in answering my e-mail.

By the way, I kind of expected to use the same identifier for an exit and the location it points at, but that was probably unreasonable. On the plus side, exit names are arbitrary. (There is no built-in concept of a compass, but you can simulate one easily enough.) That, coupled with the ease of declaring verbs per location, makes Alan a natural fit for keyword-driven games, and those just happen to be in vogue.

Overall, Alan looks like a nice combination of simplicity and advanced features. It even has rules, like the much more advanced Inform 7, and the ability to nest ordinary rooms provides an elegant solution to multi-presence objects and, yes, vehicles. On the other hand, there is no way to manipulate exits once defined, doors have to be implemented with manual checks inside said exits, and the built-in score system is quite limited; even the official documentation recommends making your own instead.

Last but not least, the verbose syntax suggests that intricate puzzles might be tedious to code, which would make the system better suited for literary pieces. (But see the above remark on clever features.) Illustrations and sounds are supported, but only in the most basic way. All in all, Alan has a very distinct flavor, and it's worth keeping it in mind as an option.

Tags: , ,