

		       Colossal Cave Revisited
		A TADS game with complete source code

		 Copyright (C) 1993 David M. Baggett

	  See the file readme.1st for terms of distribution
		       and use of this software


What Have We Here?

   This game is a remake of the first major adventure game ever written:
Colossal Cave, otherwise known as "Adventure."  The original Adventure
was written in FORTRAN by Willie Crowther and Don Woods, and had only
a simple two word command parser.  Its descriptions were so vivid,
however, that it captivated a generation of computer enthusiasts and
quickly became part of the "hacker lore."  References to Adventure
crop up even today in games and other software.

   Adventure was such a significant event in computerdom that it
spawned a whole genre of games, made even more popular by Infocom
in the 1980's.  The MIT hackers who formed Infocom took the Adventure
concept and added some powerful new technology to it: sentence parsing.
Their first game, Zork, was clearly very much inspired by Crowther and
Woods' original, but seemed more intelligent and was easier to play
because it could accept simple sentences instead of just two-word
directives.

   Eventually affordable computers got to be powerful enough to support
general text adventure authoring packagaes, and by 1992 there were already
nearly a dozen systems for would-be adventure authors to choose from.
This remake of Crowther and Woods' original was written with TADS,
one such adventure writing system, and is intended to be a tutorial
example for TADS authors to learn from.  For this reason, great care
has been taken to keep the code easy to read and understand.

   Colossal Cave Revisited (CCR) is also meant to give a new
generation of computer gamers an opportunity to play the game that
started it all, in a format they will feel more comfortable with.
Today's text adventurers have been "spoiled" by the nice sentence
parsing that most games have these days, and it is the author's hope
that this reimplementation will make the original Adventure -- a
classic that still shines today -- accessable to a wider audience.


Implementation Details and Philosophy

   I have tried to be as faithful to the original game as possible
throughout the project.  To start off on the right foot, I went back
to Donald Ekman's excellent PC port of what seemed to be the original
DEC-10 FORTRAN source code.  Don tells me he typed a significant
portion of that source in from a paper listing -- now that's
devotion!  In any case, few changes had to be made to get the game
running under DOS, so the source I used to make CCR is largely
"untainted."

   Retrofitting such an old game onto a more sophisicated game engine
created a few philosophical problems.  Games these days are expected
to have "decorations;" little bits of scenery mentioned in the room
descriptions that you can't actually do anything with, but make
the setting feel more real.  The original Adventure didn't have many
decorations, and the two-word parser prevented players from trying
things like "look under y2 rock," "put the rod in the stream," etc.

   The approach I took was to add decorations every reasonable place
without writing much new prose.  Where prose exists in the original
game, I used it, even to the extent of making bits of room
descriptions serve double duty.  In a number of places I wrote
entirely new text.  In these cases, I either wrote something
innocuous or tried my best to mimic the style of the original.

   The new sentence parser created similar problems for game play.
Whereas in the original you had to say "throw axe" to attack
something, you can now do things like "attack bear with lamp."  There
is no analogue to this in the original source; "throw lamp" would be
interpreted as a request to drop the object.  Here again, I used
response text whenever available and strived to stay consistent with
the overall tone of the original when crafting new prose.  From the
beginning I wanted walkthroughs for the original to still work in
CCR; this is largely true now, though there are surely a few
exceptions.


Hints to Programmers Who Want to Modify Colossal Cave Revisited

   Colossal Cave Revisited isn't meant to be an unchanging mass of
archival source code.  On the contrary, I hope that people will add
new features, objects and locations.  If you do add things, please
let me know so I can incorporate the changes into the official
distribution.

   Modifying any large program is daunting at first.  CCR is about
13,000 lines of source, and that's a lot of code to read through.
Fortunately, you shouldn't have to pay much attention to the grungy
details of most of it, since I've tried my best to make it easy to
modify.

   With this is mind, here are a few tips to make building and
changing CCR simpler:

   * Have a suitable compiler.  You need a compiler for TADS 2.0.13
     or higher.  Earlier versions of the compiler won't understand
     some of the constructs used in the CCR source code.  Similarly,
     you will need a version 2.0.13 or later run-time system to run it.

   * Use (or at least follow) the makefile.  Some of the options 
     in the makefile are crucial, and if you don't specify them when
     compiling ccr.t, you will get mystifying error messages.  In
     particular, be sure to compile with the -mp option set large
     enough, and make sure you make the cache small enough (with the
     -m option) if you're running under MS-DOS.

   * Make extensions optional.  The easiest way to do this is to
     add flags to the "global" object in ccr-std.t that enable or
     disable your new code.

   * Use the existing classes whenever possible.  Classes are already
     defined to make your life easy.  In addition to the basic TADS
     classes, make sure you understand the definitions and use of the
     following:

     ccr-item.t:

	class CCR_treasure_item

     ccr-npc.t:

	class NPC

     ccr-room.t:

	class CCR_room
	class CCR_alike_maze_room
	class NoNPC
	class CCR_dead_end_room
	class lightroom
	class Outside
	class NotFarIn
	class CCR_decoration

	class floatingdecoration
	class rfd (room feature decoration)

   * Set global.debug to true to get extra information about room 
     connections and NPC movement at run-time.  The game will check
     its connections to make sure everything's OK at run-time.

     Add new debugging code enabled by this flag for your own
     extensions.

   * When defining new classes or puzzles, copy an existing similar
     implementation and then modify it to suit your needs.  Starting
     from scratch is always harder than updating already-working code.  


Some Ideas

   Here are a few things that I considered doing myself, but decided
to leave as exercises.  (Yeah, that's the ticket.)  They range from
fairly trivial to incredibly time-consuming:

   * Add hints.  The original gave you hints at various times, but
     would deduct points if the player took them.  Get Don Ekman's
     PC port of the FORTRAN source and use the original hint text.

   * Make the NPC code more faithful to the original.  In particular,
     dwarves don't block your way in CCR, while they did in the original.

   * Make the NPC movement code faster.

   * Make the descriptions of treasures sound more "excited."  The game
     currently treats treasure like all other items when it tells you
     about them:

	You see a rock here.
	You see a platinum pyramid here, 12 inches on a side.

     Change ccr-adv.t so that it lists treasures separately, and
     puts an exclamation point at the end.

   * Implement one of the "extended" versions of the games; e.g., the
     550 point version with the sword in the stone.  Make sure you
     update scoring so that your extensions fit in seamlessly.

   * Add your own NPC's, puzzles, or locations.

   * Port TADS to new machines so that CCR has a wider audience. (Contact
     Mike Roberts at High Energy Software for more info.)

Whatever you do, please send me your changes!

