_Spider And Web_
Special source-code edition (released June 2014)
Copyright 1997-1998 Andrew Plotkin <erkyrath@eblong.com>
http://www.eblong.com/zarf/if.html

This source code is provided for personal, educational use only. The
story and text of _Spider And Web_ belong to me; you may not use them
or create derivative works which contain them. However, you have
permission to use the programming techniques of this game in your own
works, and you may use the source code excluding game text.

If you want to *play* _S&W_, you're in the wrong place. Go to my web
site, or the IF Archive, and download the compiled game file.
(http://www.eblong.com/zarf/ftp/Tangle.z5)

* Obvious Warning

This code contains spoilers! If you haven't played _S&W_, and you
read this code, you'll certainly ruin the game for yourself. Play it
first. I am releasing this code for the benefit of Inform programmers
who are familiar with _S&W_ and want to know how I did it.

* About The Source

This code is exactly the version I used to build _S&W_ release 4,
except that I've added parentheses in a few places to be compatible
with modern Inform 6 syntax.

I have not added explanatory comments; you're on your own for this
safari.

tangle.inf is the top-level source file; it includes all the others.

The package includes a modified version of the Inform 6/6 library.
(The source files are mixed in with the game source; sorry about
that.) _S&W_ must be built with this version. The modifications are
tagged with "--Z" comments. A quick overview of the changes:

- The SKIP_MAGIC_ARTICLES option turns off Inform's ability to
  auto-detect whether "a" or "an" is appropriate for object names.
  (Objects are defined with explicit article properties where
  necessary.) This makes the game run very slightly faster.

- The USE_PARTINVENT option allows the list writer to use a
  "partinvent" property. This works like "invent", except that it
  works for lists when PARTINV_BIT is set (instead of FULLINV_BIT).
  This lets me adjust objects in room listings just the way "invent"
  lets me adjust them in inventory listings.

- The ALLOW_INTERRUPT_MULTI option allows game code to interrupt
  a multiple-object action (like "take all" or "put all in box".)

- The SKIP_STANDARD_TIMERS option suppresses the library's normal
  timer and daemon features. I use an alternate daemon library
  (pri-daemons.inc) which allows me to control the execution order
  of daemons.

- The SKIP_STUPID_PRONOUNS option suppresses the library behavior of
  setting "it" to the last-seen object in a room description or
  inventory list.

- The DOOR_OVERRIDE option allows a door to define a "door_try"
  property. This method is called before moving through the door. The
  game uses this to display special failure or success messages for
  going through the door, or to try auto-opening.

- The VEHICLE_NAMES option allows an object to define a "vehicle_name"
  property, which controls how it's named when you enter it.

- The SKIP_VERBOSITY_SYNONYMS option removes the "short", "long",
  "normal" synonyms for the "superbrief", "verbose", "brief" commands.

* To Compile

The game was developed with Inform 6.14. This version can be compiled
with the latest Inform 6 release (6.33).

The compile command:

inform -~D -~S -e tangle.inf Tangle.z5

