One of my Internet friends is putting together an online tutorial on TADS 3, a programming language for interactive fiction. I approve. I’ve written games in both TADS 3 and Inform 7 (and in Inform 6, come to think of it). My experience has been that T3 looks fairly intimidating, especially if you don’t already have some experience in programming. It’s extremely powerful, but in order to learn to use the tools in the toolbox, some effort is required.

Inform 7, conversely, goes out of its way to look easy. But as you dig deeper, you’ll find that certain things in Inform are surprisingly messy or ill-defined. Inform is harder than it looks, while TADS is easier than it looks. At the end of the day, they’re probably about equal in terms of the amount of intellectual effort that’s required — and TADS gives you a greater return for your intellectual investment.

Eric Eve has written three book-length tutorials on TADS 3. They’re excellent. The program also comes with a Technical Manual, a System Manual, and a Library Reference Manual. Learning where to find things in these six information sources is a challenge in itself — but once you learn your way around, you’ll find that the documentation for T3 is more complete than the documentation for I7. (My I7 Handbook was inspired by in no small part by Eric’s Learning T3.)

Though my friend initially mentioned her project as “TADS 3 for Dummnies,” it isn’t that. Most of it (in the draft that I’ve seen, anyway) is an exploration of T3’s class library, a big chunk of code that provides a framework with which to develop your game. Eric’s TADS 3 Tour Guide is also organized in a way that proceeds through the class library, but it makes very little attempt to explore any of the classes thoroughly, as it’s also organized around the process of writing an example game. I like the idea of a TADS 3 Library Road Map. I think it’s needed.

But I also like the idea of “TADS 3 for Dummies” (though of course that’s a trademarked name). I’m toying with the idea of writing a very concise 20-page “Immigrants Naturalization Guide” for people whose only experience has been writing games (or attempting to) in Inform 7, but who are wondering whether they might actually be happier with T3, if only they could figure out where to start.

Ultimately, though, it’s not about writing code. It’s about writing a story. The code is just a means to an end. Emily Short has posted a detailed outline of a book that hasn’t yet been written, which talks about interactive fiction writing from the perspective of the fiction writer. Maybe I should be exploring that instead. Maybe people who want to write interactive fiction can find their own way into an authoring system that suits them. But I do think it’s a shame that so many of them seem to get sucked into the Inform 7 whirlpool without giving TADS a fair shake. It’s easier than it looks, folks. Honest.


2 thoughts on “Hammer, Saw, Wrench

  1. Maybe people who want to write interactive fiction can find their own way into an authoring system that suits them. But I do think it’s a shame that so many of them seem to get sucked into the Inform 7 whirlpool without giving TADS a fair shake.

    To give the whirlpool its due I think it has two big advantages over T3, one in syntax and one in accessibility (which I hope will be a temporary one). I7 has wider interpreter support on mobiles and the web, and its syntax has less code cruft hanging on the prose.

    For example, (as you know, Jim) if you define a range of values I7 will print the value as prose without you needing to write it as “printable” text. In my experience with T3 there is a lot more ‘extra syntax’ you need to write to specify what’s prose.

    Of course some people don’t see this code-as-prose as a syntax advantage, but rather a drawback.

    However with T3’s OO model there’s simply a lot of extra code to write of the object.object.object variety — unless the Workbench does code completion while typing now?

    Related to T3 docs, wasn’t Eric Eve and Marnie Parker writing another library tour guide? I’m not sure if that was ever made available but the early version looked promising.

    1. With respect to accessibility, I’m not sure that people who decide to try writing IF are thinking that far ahead. “Hmm … I’m going to want this game to be playable on an iPhone.” Maybe that’s a factor for some people, but I’ll bet it’s a less important factor for the average newbie than, “Hmm … I wonder if I can actually do this.”

      With respect to syntax, we can run around in circles debating minutiae. I’m not sure what you mean by “code cruft hanging on the prose.” T3 uses single quotation marks and double ones. I don’t think that would qualify as cruft.

      It’s true that Inform will look at a line like, “A rabbit can be green, purple, or polka-dotted,” and infer that it may need to print out the words “green”, “purple”, and “polka-dotted” in certain contexts. You don’t need to provide those strings explicitly. But such an inference is just as likely to be problematical as it is to be helpful. Personally, I prefer the TADS approach because it’s always clear.

      To give just one example of Inform’s lack of clarity, in Inform it’s quite easy to create an extra object without intending to do so, thereby introducing a hard-to-find bug. The compiler won’t complain, it will just create the extra object. In T3, not only does the syntax make it it unlikely that you’d do such a thing accidentally, but the compiler will catch you if you do.

      Extra code? Not sure about that. In my experience, T3 is actually less wordy than I7. It’s more concise.

      Yes, Marnie is working on the library tour guide. It’s not finished yet, but it’s moving forward.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s