_So Far_ Special source-code edition (released June 2014) Copyright 1996 Andrew Plotkin 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