I've been meaning to review the Dialog authoring system for interactive fiction since its first release two and a half years ago, in December 2018, but various factors prevented me. Luckily it's not too late, seeing how it was only used for a handful of games so far, and is hardly on anyone's radar. Can I be the one to change that? Let's see!
What attracted me at first was that Dialog targets the Z-Machine. Not many languages do that. Inform 6 seemed all but dead at the time, relegated to a compiler back-end, and ZIL hadn't been brought back to life yet, so that was a problem. But we could use more alternatives even now.
So I picked up my tablet one night in bed, and opened the Dialog manual. Having previously tried and failed to make sense of various code samples, I wasn't too confident, but my worries proved unfounded. Once explained, everything makes a lot of sense. Knowing a few things about Inform 7 and Prolog helped me, but it's probably not vital. There are two parts to it, best read in zig-zag: one deals with theory while the other teaches by example. It's relatively short, too: I could read most of the manual in one day, and skim the rest.
A copy is also included in the archive, alongside source code and binaries for Windows and Linux; these are surprisingly small. The Dialog compiler is lightning-fast, and has few options to worry about.
As for the language? For the most part, it offers typical features. That said, one thing blew my mind: there's native support for CYOA, and you can switch modes during the game! I mean as an author, not player. So for example talking to NPCs can be RPG-style, while your game is otherwise played like a good old text adventure. This is of course not unheard of in Inform games, but it takes a lot of effort. And while in 2016 I suggested it could be done elegantly in Alan 3, I never actually got to try.
And... as if that wasn't enough, you can also enable the so-called default actions, meaning the game will do something sensible when the player enters just an object name at the prompt. Usually that's "examine", but you can customize it as needed, effectively making the game keyword-driven as well.
What's that good for? Mostly it helps a lot when adding hyperlinks. No, Z-code doesn't support them, but Dialog can also compile for its own virtual machine, which in turn can be packaged for the web. In this mode it can also do images, or even CSS. Games look rather bland in a browser otherwise, but try it on a mobile device and you'll see why.
Other advantages of Dialog include:
- rules-based language with a lot of goodies from Inform 7 in a much smaller package: the overhead is closer to that of the Inform 6 standard library;
- more freedom when laying out source code;
- easier to define new verbs and new grammar, or to get extra input from the player and handle it in unexpected ways;
- support for rich metadata under the Treaty of Babel;
- everything is customizable: the standard library is deliberately kept small; not that you need to customize it, as you can simply override anything instead.
Downsides include, for instance, numbers being limited to 15-bit unsigned integers (a quirk that's well documented, yet never explained). Also the syntax can get cryptic, especially with more advanced features.
Unfortunately, as of this writing I haven't yet decided on a game to try and port over, so I can't tell you how Dialog handles anything other than sample code. I did test a bunch of games made with it in various interpreters, and they seemed to work just fine, with one exception: Text Fiction for Android rejects any game compiled with Dialog on the pretext that "the game file is corrupt". That's obviously not the case, but it's an issue to watch out for.
Until I can write a follow-up to this, give Dialog a glance. Seriously now.