A new, easy-to-learn library for TADS3

Hm. To drag this really far off topic, I can see some philosophical problems with how to implement this. What I mean is something like this (farfetched analogy coming): One of the most common analyses of counterfactual sentences like “If TADS Workbench ran on the Mac, three times as many authors would use it” involves what’s called nearby possible worlds. To evaluate the sentence, you look at the possible world (which basically means a way that the history of the world could be) that’s the most like ours, but in which it’s true that TADS Workbench runs on the Mac. But there’s a real problem in defining “the most like ours.” In one way the world that’s the most like ours would be one in which TADS Workbench runs on the Macintosh, but absolutely nobody uses it. But that’s not the world we’re looking for when we’re contemplating this counterfactual.

OK, here’s how I see it coming up: It sounds to me as though you’d like the sim model to bend itself so that the conditions on a piece of prose are met. In your original example, the condition is that the PC and the NPC be in the same room when the NPC utters the significant quip that follows on a little bit after the prose you’ve printed. But that seems like a nearest possible world problem – we want the smallest possible deviation from the course of events that would follow if we didn’t have to obey these conditions, but just which deviation is smallest? Is it a bigger deal to push the PC back into the room with the NPC, or to drag the NPC into the PC’s room, or to open up a listening hole between them? Depends on the situation, and seems like it needs to be coded by hand anyway. So the grail you’re after seems to me very holy indeed, at least as far as including it in a library.

OTOH you mentioned RAP, and I think I read a piece of yours comparing Planner to one of Aaron Reed’s extensions, and extensions like that might go a long way to getting the sort of thing you want. Maybe we could have a sort of impersonal agent behind the scenes manipulating thing so that the conditions have met. – I don’t know, I’ve never written a game with more than 140 characters source code, let alone messing around with Planner.

Have you played The Nemean Lion?

I had an idea a while back of having a repository like this where you could post links to intfiction.org and r.a.i-f posts, blogs and online manuals and tag them by the language and topic. The site would then build an index (or a cookbook) of every question and solution in the web. For example, if someone posted a question here about how to make doors in TADS 3 that are locked only on the other side, it would go under TADS 3 > World-building > Doors > Locking and unlocking (or some other similar path.) I dropped the project when I realized I didn’t really have the time to keep it up to date.

I still have the rough but somewhat working proof-of-concept code I baked when I was thinking about this. If people are interested (and especially if there’s someone interested in taking the job of administering the site) I can put it online as a demo.

Title: Beating a Dead Horse
Subtitle: More Constructive Comments about the TADS Documentation

We agree again. Learning TADS 3 is the best manual in the bunch. Why?

  • It has the most detailed content on the most topics
  • Interestingly enough, it is the only TADS manual (that I use, anyway) in .pdf format.

Why is .pdf format important?

  • For me, personally, it is very esthetically pleasing to the reading eye.
    (I tried to control myself, but I can’t…I really don’t want to hear from the detractors, “What’s pleasing for one person may not be pleasing for another person.” Tell it to Adobe.)

Me, too. Because it’s possible with a .pdf file. It ain’t possible with a manual that’s broken into 100 html files. (…and no, I don’t want to hear any kludge-y ways to meld html files together.)

Constructive Comment #73: Put TADS documentation into .pdf format

Yesterday, I tried to nail down in my mind the fundamental problem with TADS 3 System Manual and TADS 3 Technical Manual. Besides they’re not searchable and their “Table of Contents” are nebulous.

It relates to your word grab bag and to your comment…

Look at the TADS 3 Technical Manual for an example. Why does “Programming Conversations with NPCs” come after “Using Build Configurations”? “Programming Conversations with NPCs” is fundamental. “Using Build Configurations” is, in general, geek material.

Constructive Comment #74: In TADS 3 System Manual and TADS 3 Technical Manual, move geek material to an appendix (and better organize everything).
[I know. I know. What’s geek material to one person is fundamental to another person. So put the geek material in an appendix and entitle it, “Fundamentals for Geeks”.]


  1. Jim’s comments about TADS documentation are spot on. Jim writes documentation for Inform. Which user base is larger: TADS or Inform? (Yes, I already know the answer.)

  2. Lest we lose sight of the important issue here. Mike Roberts knows that TADS’ user base is dwindling, and he wants to regain lost TADS 2 users (who moved to Inform?).

TADS is a one-person show in terms of programming the system. How should Mike most effectively use the next year of his life:

  • Writing a dummied-down version of the TADS library

  • Working on enhancements to the existing system

From my perspective, TADS is a better product than Inform. It just needs better…“advertising”.

Yeah, IMO keeping up with adding and tagging threads wouldn’t last without IFWiki-caliber maintainers, since I don’t think the idea of the site alone would attract maintainers on the scale of the IFDB for example.

If we weren’t committed to keeping up with threads but just adding small examples, that might make it more accessible.

Just waving my hands around here, but what if the Intfiction forums got a mod that allowed posting/tagging from within a thread here on the forums? That would require some PHP I guess?

My .02 on TADS manuals – I can’t stand manuals in PDF format ;D.

Well I gave an example with the ensuring the timed quip isn’t missed. And I am aware of the problem of a parser’s implicit actions accidentally solving the game for the player; Eric Eve brought it up to me in an Inform consultation document thread when I’d mentioned his NPC Implicit Actions extension (for Inform) could be used for general AI. I’m looking to push that kind of AI into the compiler, so it could ensure winnable games, ensure or list any unwinnable states the game could get locked into, ensuring all prose is reachable by some path through the game, etc. If that sounds too holy, well, Prolog answers questions of that sort as a matter of course.

(Incidentally, a modern, OO, compileable flavor of Prolog is also called Mercury: http://www.mercury.csse.unimelb.edu.au/index.html)

I presume the alternatives would be tried in order, backtracking if one led to further complications. Or, a breadth-first search, the one which solves the problem in the least #/steps. Or, explicit directives mentioning favored alternatives, perhaps tie-able to particular situations. Whichever.

But this stuff really needs to happen during compilation, so the author can be informed immediately of unreachable prose, or prose that can’t be guaranteed to be said at some point or another. As-is, much of I-F exhibits an anti-pattern called Tester-Driven Development (not to be confused with Test-Driven) because we just have to compile and play the game to see if quip X can be reached, etc.

Perhaps the idea’s a little too holy. I still stick to my guns regarding the other, much more practical points I made about the possible new TADS library. I believe that prose generation + AI is a better avenue for the future of I-F than more detailed physical world simulations.

Also, it’s the manual I wrote most recently, in the light of the most experience with TADS 3 and feedback on the other documentation! :slight_smile:

But it’s not the only manual available in .pdf format. Getting Started in TADS 3 and The TADS 3 Tour Guide are also provided in .pdf as well as HTML format (so people can use which they prefer).

– Eric

Mm, this sounds tough (though I’m not a programmer so I don’t know how hard it’d be to implement). There are a lot of subtle unreachable quips. For instance, in ex. 400 of the I7 documentation, “The Cow Exonerated,” you can never get the response “The match goes out,” because it triggers only when there are zero burnt visible s-matches, but it’s in an if-statement that can only be triggered if a visible s-match has just become burnt. And there are other tricky issues even in that short example – I’m pretty sure that there are some quips that would never trigger if the player only started with one lit match, because then two matches would never burn out on the same turn, and there are other quips that may never trigger because there’s only one room in the world model. But in the latter case, we don’t want to throw a compiler error whenever we’ve coded for an eventuality that never actually takes place. (In fact, I could imagine coding something that I never wanted to reach – for instance something that asked the player to e-mail me if they had found a way to exceed the maximum score.) Is there a way to catch this other than by having the compiler do an automatic beta-test?

I do hear you about having to constantly compile, though – sometimes I’d really like to see what objects would be in the index if my code compiled, but it won’t compile, because I haven’t defined an object the way I thought I was, but I can’t tell that because I can’t see the index…