_The Dreamhold_ Special source-code edition (released June 2014) Copyright 2003-2004 Andrew Plotkin http://www.eblong.com/zarf/if.html This source code is provided for personal, educational use only. The story and text of _Dreamhold_ 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* _Dreamhold_, 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/dreamhold.z8) * Obvious Warning This code contains spoilers! If you haven't played _Dreamhold_, 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 _Dreamhold_ and want to know how I did it. * About The Source This code is exactly the version I used to build _Dreamhold_ release 5. I have not added explanatory comments; you're on your own for this safari. main.inf is the top-level source file; it includes all the others. The package includes a modified version of the Inform 6/10 library. _Dreamhold_ must be built with this version. The modifications are tagged with "--Z" comments. A quick overview of the changes: - The AMERICAN_COMMAS option tells the library to use the serial comma for lists. - 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 INTERRUPT_MULTI_ACTION option allows game code to interrupt a multiple-object action (like "take all" or "put all in box".) - The ALLOW_AFTERGAME_RETRY option allows a post-game option (like "amusing") to return the player to life. (Dreamhold does not make use of this option.) * To Compile The game was developed with Inform 6.21. It can be compiled with the latest Inform 6 release (6.33), although you'll see a couple of compilation warnings. The compile command (type all on one line): inform -~D -~S -v8 +include_path=,lib610 '$huge' '$MAX_PROP_TABLE_SIZE=25000' '$MAX_OBJECTS=700' main.inf dreamhold.z8