[comp.sys.atari.st] COMP: TADS: The Text Adventure Development System

daroloso@watmath.waterloo.edu (Dani A. Roloson) (05/31/91)

If you're interested in creating Infocom-like text-only adventures on your home
computer, TADS is a great start.
The package does all the parsing and defines most of the common adventure
verbs and item types in editable include files.

TADS is a shareware object-oriented programming tool for the Atari ST,
Macintosh, and IBM PC Compatible (MS-DOS/PC-DOS) which is available from
High Energy Software, P.O. Box 50422, Palo Alto, CA 94303.
(Atari users can try out atari/games/tads/tads.lzh on atari.archive.umich.edu)

For my $25 US, I got the TADS Author's Manual, a sample game, updated versions
of the include files and programs, and a tool for combining
the game runner and game into a single file.

I am pleased with the quality of the manual, the response to the question I
asked with my payment, and the complexity and flexibility that
the package allows.

I would like to get together with other TADS users even on different platforms
since a game written for the Atari can be compiled on all three systems.

Sample simple adventure:  
************************

  #include <adv.t>
  #include <std.t>

  fireVerb: deepverb
    verb = 'fire' 'shoot' 'blast'
    sdesc = "fire"
    doAction = 'Fire'
  ;

  /* This is where you start the game. */
  startroom: room
    sdesc = "Hallway"
    ldesc = "You are in the hallway.  There is an room to the east. "
    east = engineroom
  ;

  engineroom: room
    sdesc = "Engine Room"
    ldesc = "You are in the engine room.  The only exit is to the west. "
    west = startroom
  ;

  /* The engine can not be taken since it is a fixed item. */
  engine: fixeditem
    sdesc = "diesel engine"
    ldesc = "It's an old-fashioned diesel engine.  You can't imagine how it
      runs this spaceship. "
    location = engineroom
    noun = 'engine'
    adjective = 'diesel' 'old-fashioned' 'spaceship'
  ;

  /* The slime gun starts out in your possession. */
  slimegun: item
    shotsleft = 6
    sdesc = "slime gun"
    ldesc = "It's standard equipment in the Denebian Space Patrol. "
    location = Me
    noun = 'gun' 'pistol' 'blaster'
    adjective = 'slime' 'space' 'denebian'

    /* Don't allow the gun to be dropped. */
    /* ver = verify, do = direct object */
    verDoDrop( actor ) =
    {
      "You can't leave the gun here. ";
    }

    /* Allow the gun to be fired if you still have slime. */
    verDoFire( actor ) =
    {
      if ( self.shotsleft < 1 )
      {
        "No more slime left.";
      }
    } 
    doFire( actor ) =
    {
      /* Decrement number of shots left. */
      self.shotsleft := self.shotsleft - 1;
      /* If I'm not in the engine room */
      if ( Me.location <> engineroom )
      {
        "You get slime all over yourself.";
      }
      else
      {
        "The slime clogs up the engine and the spaceship explodes.";
        die();
      }
    }
  ;


******************************************************************
WARNING: The following is probably only interesting to TADS users.
******************************************************************

> Marvin, pick up the paper

Although the TADS parser recognizes the actor Marvin, most of the
standard responses assume Me was the actor.
e.g. "You don't see the paper." instead of "Marvin doesn't see the paper."

I have spent a great deal of time editting ADV.T changing 
"You" to "caps(); actor.sdesc;" and
and "don't" to :

  if ( actor = Me ) { 
  {
    "don't";
  }
  else
  {
    "doesn't";
  }

plus similiar changes for "your", "are", "see", "have", etc.

While I was at it, I reorganized the file into functions, prepositions,
verbs, and items alphabetically unless there was a better ordering
plus cleaned up the indentation and brace style and a few typos.

Before I mail the file back to the authors, are there any other suggestions?

Even though I have made all these changes and allowed my actors in my game
to pick up items, I keep getting an error from "Marvin, pick up the paper"
which usually says that I am trying to compare two different data types
in a comparison.  However, "give paper to Marvin" works fine.  Any ideas?

Dani Roloson

-------------------------------------------------------------------------------
From the TADS manual (please read carefully):

(Like all TADS limits, this can be changed at compile-time with user-specified
compiler options; of course, string space is also limited by the amount of
computer in your memory, which you unfortunately cannot change with compiler
options.