[net.micro.amiga] AmigaVenture1.17

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