hadeishi@husc4.harvard.edu (mitsuharu hadeishi) (10/14/86)
Welcome to AmigaVenture 1.17 . . . ! What follows is a program I hacked up on the weekends that allows you to write your own Infocom-style adventure games in AmigaBasic. I chose AmigaBasic because 1) It is an interpreted language, 2) It is relatively fast, 3) It is somewhat structured, making it at least possible to read, and 4) It is a full-featured programming language allowing you to modify and enhance the adventure system directly. This is NOT an adventure INTERPRETER. Several reasons I chose not to write an interpreter are: 1) Adventure writers would be stuck with the limitations of the interpreter, 2) I didn't want this project to take all of my time, 3) I didn't feel like implementing a language system when AmigaBasic was already there and working just fine, thank you, and 4) I wanted to be able to dynamically extend the capabilities of the program in an interpretive setting. What you GET: 1) A full-featured adventure parser, including direct and indirect objects, multiple object processing, adjectives, automatic ambiguity resolution, and subordinate clauses. The parser also includes support for one, two, and three-word verbs which makes it very easy for the adventure writer to support more natural-language style commands (my girlfriend when she first played AmigaVenture typed in a large number of sentences which would have choked the Infocom parser but were handled fine by this parser, such as "pick up the towel" or "get rid of the bag.") 2) A full set of object-manipulation primitives that will handle objects inside, on top of, underneath, and wrapped by other objects in a general fashion (allowing objects, for example, to be simultaneously on top of and inside an object, unlike Infocom.) Automatically handled is the issue of object size and capacity, as well as the total weight of each object. The primitives handle the details of maintaining the tree structures and attribute arrays (such as weight, bulk, etc.), and the programmer need not (and in fact should not) fiddle with the internal details of the data structures. 3) A full set of basic verbs written with these primitives. 4) Fully commented source code. (Well, the source code is the same as the executable, but what the hell. There is an AmigaBasic compiler coming from AbSoft, so if you really wanted speed you could develop the adventure with the interpreter and compile it with the compiler.) 5) A sample micro-adventure (not an adventure, really, just a bunch of locations to test the adventure system.) If you wish to write your own adventure, please eliminate the small amount of code in this kernal relating to the microadventure (there are two adventure-specific verbs and the list of objects, object attributes and descriptions, and map locations and their descriptions. Simply replace these with your own locations and objects and you're ready to go.) IMPORTANT NOTE: This code is NOT to be used in ANY commerical product, in WHOLE or IN PART, without my EXPLICIT WRITTEN PERMISSION and a WRITTEN AGREEMENT. Please, guys, be ethical about this. This code is intended to make it easy for people to create adventure worlds for themselves and other people on the net and elsewhere. This code is distributed on the condition that the copyright notice in the code be included in any adventure written using this. If you want to make money with it, talk to me first; I reserve rights for commercial distribution of any program based on this code. Thank you! However, I encourage anyone to please write adventures with this system and distribute them in the public domain. If you have suggestions for improvements to the kernal, please email me so I can distribute enhanced versions in the future. The code provided is heavily commented and would be about half the size minus all the comments and explanations. I am also distributing a quick reference guide which you should read FIRST before trying to figure out how the program works. Possible future improvements: currently all descriptions are in-memory for speed of development of small adventures. This could easily be moved to a disk file by modifying the Look: command. The code could be compiled for speed once an adventure is completed. Object creation could be made easier by the creation of an AmigaVenture Object Editor. Now they are simply a list of numbers in DATA statements for ease of modification with the AmigaBasic editor. Some of the routines use recursion but AmigaBasic, though it has local variables, does not support recursion (the local variables are all static). In future this restriction may be lifted, so the current method of recursion (using arrays) could be replaced by true recursion. This would most likely slow program execution, however. Please report any bugs, questions, etc. to me by email. Enjoy! (The following postings include the quick reference guide and the source code for AmigaVenture. NOTE: you must do a CLEAR,170000 before loading AmigaVenture, to clear enough RAM workspace for AmigaVenture to work in. AmigaVenture is currently around 80K of compressed AmigaBasic code, but could be reduced significantly by elimination of comments. I suggest printing out the source code and the quick reference guide so you can get a feel for the layout of the program.) -Mitsu