_So Far_
Special source-code edition (released June 2014)
Copyright 1996 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 _So Far_ 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* _So Far_, 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/SoFar.z8)

* Obvious Warning

This code contains spoilers! If you haven't played _So Far_, 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 _So Far_ and want to know how I did it.

* About The Source

This code is exactly the version I used to build _So Far_ release 6.
(I renamed the library files to fit with Unix build conventions;
on the old Mac setup, they didn't have ".h" suffixes.)

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

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

The compiled game will generate interpreter warnings on some
interpreters (such as Frotz). This is historically accurate; the game
file on my web site does the same thing. :)

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

- The NO_CHATTER option suppresses the cursing and swearing verbs.

- The NO_PLACES option suppresses the "OBJECTS" and "PLACES" verbs
  (which list where you've been and what you've found).

- The DEATH_MENTION_UNDO option allows you to suppress or display the
  "UNDO" option in the end-of-game options.

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

- The INITIAL_DAEMONS option causes the library to run daemons before
  the first turn. (In addition to the usual behavior of running them
  after every turn.)

The priority-daemons file is an Inform 5 library which allows me to
control the execution order of daemons. The game does not use it.
I don't remember why I have it in here with the source, actually.

* To Compile

The game was developed with Inform 5. It cannot be compiled with Inform 6.

The compile command (all on one line):

inform5 '$HUGE' '$MAX_ZCODE_SIZE=300000' '$MAX_BANK_SIZE=8000'
   '$MAX_ROUTINES=2000' '$MAX_CLASSES=100' sofar.inf SoFar.z8

