The Quill (c) 1983 Gilsoft International
----------------------------------------


                                    The Quill

              An Adnture System for the 48K Spectrum by Graeme Yeandle
 
                                     Serial C



         (c) 1983 GILSOFT. Unauthorised copying, hiring or lending of the
             database Editor or of this manual is strictly prohibited.


----------------------------------------(1)----------------------------------------

                                   Acknowledgment

                       Many thanks to Liz and Steve of Birchgrove
                    Business Limited (Cardiff) for their invaluable
                     assistance with the production of this manual.


----------------------------------------(2)----------------------------------------

CONTENTS

What is Adventure                            Page 5

Getting Started                              Page 6

Part 1
     How to use The Quill                    Page 7
Part 2
     Detailed Description of the Interpreter Page 32
     Detailed Description of the Database    Page 43
     Detailed Description of the Editor      Page 46
     Error Messages                          Page 54

Notes                                        Page 55   

Summary of Conditions, Actions and Flags     Page 59

----------------------------------------(3)----------------------------------------

Blank Page!

----------------------------------------(4)----------------------------------------

What is Adventure?

Adventure can be described as a computerised version of the game Dungeons &
Dragons. In Dungeons & Dragons one person is nominated as the dungeon master,
and he invents a dungeon for other players to explore and try to retrieve hidden
treasures which are usually protected by monsters of various shapes and sizes.
Each player notifies his proposed actions to the dungeon master who decides on the
outcome, sometimes with the help of dice to introduce a random element.

In Adventure the computer takes the place of the dungeon master and the player or
players explore a predefined dungeon. Most Adventures will contain a vocabulary of
words which the computer 'understands', a variety of locations which a player may
wander around and objects which have to be used in the correct way to enable the
Adventure to be solved. The computer will describe a situation to the player and
invite him to decide on a course of action. The computer then tells the player the
result of his action.

Everyone who plays Adventure has the problem of making the computer understand
their commands The computer will only have a limited vocabulary of perhaps a few
hundred words and 'finding the right words' can sometimes he a problem, for
example, if you are playing Dungeons & Dragons and the dungeon master tells you
"There is a lamp nearby" then if you decide to "PICK UP THE LIGHT" the dungeon
master should know what you mean. If the same situation occurs when playing
Adventure the computer may understand "GET LAMP" but may not know that LIGHT means,
on this occasion, the same as LAMP or that PICK UP means the same as GET. Even so,
most players will very quickly get the knack of 'finding the correct words'.
However, it should be noted that it is up to the Adventure designer to decide which
words are included in the computer's vocabulary.

What is The Quill?

Thw Quill is an adventure writer which allows someone with no programming
experience to create a machine code adventure.

----------------------------------------(5)----------------------------------------

Getting Started

The Quill Adventure system is made up of three parts:-
     
    a) A database which will contain all the information relevant to an adventure.

    b) A database Editor which enables data to be inserted into, amended in or
       deleted from the database.

    c) An Interpreter (this is the dungeon master) which uses the data in the
       database to execute your adventure.

To load The Quill use LOAD "". The introductory screen will tell you the address of
the User Defined Graphics (UDG's) and you should make a note of this as you will
need it if you ever want to change them.

Part 1 of this manual will introduce you gently to The Quill, from simple location
descriptions through to complex condition tests and actions. It is strongly
recommended that you work all the way through Part 1 before attempting to write
your own adventures. Part 2 contains a detailed description of The Quill for
reference.

----------------------------------------(6)----------------------------------------

Part 1

The Main Menu

When The Quill has loaded you will be presented with the Editor's Main Menu A.
There is also a Main Menu B and you can switch between the two using option T. Of
the other options, e.g. Bytes Spare, will perform a function and return to the Main
Menu while others e.g. Location Text, will give you a sub menu. The RETURN TO BASIC
option is an exception to this as it executes the BASIC NEW command which destroys
The Quill. Note that the full range of options (A-T) is avialable whichever Main
Menu is displayed.

The Input Routine

The input routine used in the Editor is very similar to the BASIC 'INPUT LINE'
routine and the keyboard responds in exactly the same way. In particular you should
note that CAPS SHIFT 1 will clear the input buffer while CAPS SHIFT 6 gives the
error message 'STOP in INPUT'. Try typing in a few characters and then pressing
CAPS SHIFT 1 then type in a few more characters and press CAPS SHIFT 6. Error
messages appear at the bottom of the screen in a similar way to BASIC's error
messages and pressing any key will return you to a menu.

Whenever you press ENTER the Editor checks that what you have typed in is valid
i.e. it checks the syntax. If the Editor finds a syntax error it is indicated, in
the same way as BASIC, by a flashing ? following the error. However, unlike BASIC,
the Editor positions the cursor immediately after the flashing ? so that the cursor
is in the vicinity of the error. On the Main Menu the only valid options are single
capital letters in the range A to Q and the copyright symbol. Try typing in 3 and
pressing ENTER, then delete the 3 and type in ABC followed by ENTER. In each case a
syntax error will be detected. Note that the lower case letters a to q will also
give a syntax error but the Editor will place the cursor in C mode i.e. CAPS LOCK,
whenever a menu is displayed.

Bytes Spare

Let's now try one of the options on the Main Menu. If you clear the input buffer
(CAPS SHIFT 1), then type O for Bytes Spare and press ENTER you will get a display
which tells you how many bytes are unused in the database and the address at which
they start. The start address is only of use if you are writing an adventure to fit
into a 16K Spectrum. If the spare bytes start before 32769 the adventure will run
in a 16K machine.

Permanent Colours

When The Quill is loaded it behaves as if the BASIC command INK 9: PAPER 1:
BORDER 1: FLASH 0: BRIGHT 0: INVERSE 0: OVER 0 had been executed. The values of
INK, PAPER & BORDER can be changed by selecting option Q on the Main Menu. Note
that CAPS SHIFT 6 can be used at any time to return to the menu. INK 9 (i.e.
contrast) is recommended. Try changing the colours and in particular try having
different BORDER & PAPER colours as some people find this helpful. All of the
messages in this section e.g. Input INK (0-9), are printed with blue paper and
white ink. Try changing INK & PAPER to the same value and you will realise why.
Just remember that 'Permanent Colours' is still option Q on the Main Menu even if 
you can't see the menu.

----------------------------------------(7)----------------------------------------

Save, Verify & Load Database

These three options on the Main Menu allow the database to be saved to or reloaded
from tape and in each case you will be prompted to "Type in name of file". When
loading or verifying, the Spectrum will search for a file of bytes with the name
specified and then load or verify it. If you enter a null filename i.e. just press
ENTER, the Spectrum will load or verify the first file of bytes it finds on the
tape. However, when saving, a null filename will produce the error message Invalid
file name. Care should be taken when using Load Database with a null filename
because it does the equivalent of the BASIC command LOAD "" CODE i.e. it will load
any file of bytes. The BREAK key may be used to interrupt a save, verify or load
but if it is used to interrupt a load, or a Tape Error is detected during a load,
then the database will be corrupt. Be very careful with a corrupt database as it
can easily cause the Editor & Interpreter to become corrupt. In fact the only safe
Editor command with a corrupt database is Load Database and this should be used
until a database is loaded successfully. Note that you should not attempt to load
a database produced by a Series A Quill into a Series C Quill or vice versa. (The
firsrt letter of the Quill version number is the Series letter). 

Setting up an Adventure

The following sections of Part 1 of this manual will give you some practical
experience of using The Quill to set up an adventure. Each section depends on
entries having been made to the database in earlier sections so you have to work
through it step by step. If you wish to break off part of the way through, please
save the database to tape so that you can continue later where you left off.

A map of the mini adventure we are going to set up is shown in figure 1 and the
objective of the adventure is to find the jewel and place it in the Dining Room.
The map shows all of the locations in the adventure and how they are interconnected.
The locations have all been given a location number, which is shown in the corner,
and the position of various objects is indicated.

Figure 1 - Map of the Adventure

   +-----------------+          +-----------------+          +-----------------+
   | bedroom       4 |          | Hall          0 |          | Kichen        1 |
   | with bed        |E        W|                 |E       W |                 | 
   |                 |----------|             Hat |----------|                 |
   |                 |          |            Coat |          |           Torch |
   +-----------------+          +-----------------+          +-----------------+
                               /D        |S                           S
                             /           |
                           /             |
                         /               |
                      U/                 |N                           N
   +-----------------+          +-----------------+          +-----------------+
   | Dark          5 |          | Lounge        3 |          | Dining        2 |
   | Cellar          |          | with bed        |E        W| Room            |
   |           Jewal |          |              TV |----------|           Apple |
   |         in Safe |          |             Key |          |           Knife |
   +-----------------+          +-----------------+          +-----------------+


----------------------------------------(8)----------------------------------------

Before we start to set up the adventure make sure that the database is in the state
it was when The Quill was loaded. The PAPER and BORDER colours should be set to 1
and INK should be set to 9 (contrast).

The Location Texts

The descriptions we will use for each location are as follows:-

Location 0
I am in a Hall. The Kitchen is to the East, the Bedroom to the West and the Lounge
to the South. Steps lead Down to the Cellar.

Location 1
I am in the Kitchen. The Hall is to the West and the Dining room is to the South.

Location 2
I am in the Dining Room. The Kitchen is to the North and the Lounge to the West.

Location 3
I am in the Lounge. To the North is the Hall while the Dining Room is to the East.

Location 4
I am in the Bedroom. The Hall is to the East and a bed is against the North wall.

Location 5
I am in the Cellar. Steps lead Up to the Hall.

If you type in C on the Main Menu the Location Text menu will be displayed and you
will see that location texts can be Inserted, Amended or Printed. P is used to print
on the screen while L is used to print on the printer. P or L by itself will start
printing with the text for location 0. P and L can also be followed by a location
number (locno.) and if that location exists printing will start with the text for
that location. The P or L and that locno. must be separated by at least one space
and if the locno. does not exist a syntax error will be detected.

Type in P followed by ENTER on the Location Text menu and you will see that a
description is already present for location 0. The only reason for this is that the
programming of The Quill was much simpler if location 0 was always present. The
text that is present is not important but it does show some of the things that can
be entered from the keyboard e.g. FLASH. Note that PAPER 0 and PAPER 6 have been
used and that the use of INK 9 as a permanent colour has automatically changed the
INK colour.

----------------------------------------(9)----------------------------------------

As a text is already present for location 0 we will have to amend it to the text
required for our mini adventure. You will see from the Location Text menu that to
amend a location text, A followed by a locno. must be entered. Please now enter A 0
and the existing text for that location will be copied to the input buffer and
displayed at the bottom of the screen followed by a cursor. There are a number of
points to be noted here. Firstly, because you are amending text, the Editor has
changed the cursor to L mode i.e. lower case. Secondly, due to an inconsistency in
the BASIC ROM, INK 9 behaves differently in the bottom of the screen and the INK
colours are not changed as you would expect. The third point to note is that each
line of the text ends with a CHR$ 6 to reduce the amount of memory that the text
occupies. A CHR$ 6 behaves in the same way as a comma in a BASIC PRINT statement.
If you now use CAPS SHIFT 5 and CAPS SHIFT 8 to move the cursor through the text
you will see the effect of the CHR$ 6. Please now position the cursor at the
beginning of the last line and then delete the CHR$ 6 at the end of the previous
line using CAPS SHIFT 0. To reinsert the CHR$ 6 is a little awkward but it is worth
the effort involved because it can considerably reduce the amount of memory used
and it also makes moving the cursor through the text much easier. To insert a
CHR$ 6, change the cursor to E (extended mode) by pressing CAPS SHIFT and SYMBOL
SHIFT together, then press the 6 key to insert the control characters for PAPER 6
(i.e. CHR$ 17 and CHR$ 6). If you now use the delete key once you will delete the
CHR$ 17 and leave the CHR$ 6. Experiment with the insertion of CHR$ 6 and try
inserting multiple CHR$ 6's to create blank lines in the text.#

Getting back to our mini adventure use CAPS SHIFT 1 to clear the input buffer and
then type in the text we need for our location 0 i.e. the Hall. Use CHR$ 6 where
appropriate and, if you like, put the compass directions in INVERSE. When you have
typed it in press ENTER to amend the database. Note that the database is not
amended until you press ENTER and that the use of CAPS SHIFT 6 at any time before
pressing ENTER will leave the database unchanged.

The texts for the other locations in our mini adventure now have to be inserted by
using the I option on the Location Text menu. Notice that the I is not followed by
a locno. When you use l the Editor automatically allocates the next location number
in sequence. Type in I followed by ENTER and the Editor will tell you which
location number has been allocated (1 in this case) and display a cursor at the
bottom of the screen. It is important that you realise that a null entry for the
location number being inserted has already been made in the database and that if
you were to use CAPS SHIFT 6 at this stage (do not do this now) the null entry
would still remain.

Type in the text that we need for our location 1 and press ENTER which will change
the null entry already inserted to the text you have typed in. You should now be
able to insert the texts for locations 2 to 5 and then print them to check that
they are correct. If you have made any mistakes then please amend the texts to
correct the errors. You might also like to try P followed by a locno. e.g. P 2, to
start printing with the text for location 2.

You should have inserted the location texts for locations 0 to 5 and returned to
the Main Menu before continuing with the next part.

---------------------------------------(10)----------------------------------------

The Movements

The interconnections between our 6 locations can now be entered into the database
and these are placed in the Movement Table. If you select D on the Main Menu the
Movement Table menu will be displayed and you will see that entries can he amended
or printed. Notice that entries cannot be inserted. This is because when you insert
a location text for a location the Editor automatically creates a null entry for
that location in the Movement Table. If you type in P on the Movement Table menu
you should see that nulI entries do actually exist for our locations 0 to 5.

Refer back to the map of our mini adventure in figure 1 and you will see for
location 0 that :-

         EAST  goes to location 1
         DOWN  goes to location 5
         WEST  goes to location 4
       & SOUTH goes to location 3.

Going back to the Movement Table menu type in A 0 to amend the entry for location
0. When 'Movements from location 0' is printed at the top of the screen, type in
(exactly)

         EST 1 DOWN 5 WEST 9 SOUTH 3 and press ENTER.

If you did type it in exactly you should get a syntax error after EST because it is
not in the database's vocabulary. If you correct EST to EAST and press ENTER
again you should get a syntax error after the 9 because the Editor knows that there
is no location 9. Change the 9 to 4 and you should then have EAST 1 DOWN 5 WEST 4
SOUTH 3.

Pressing ENTER now will amend the existing database entry.

Now type in P on the Movement Table menu and you will see that the entry for
location 0 reads :-

         E  TO  1
         D  TO  5
         W  TO  4
         S  TO  3

The Editor knows that E is a synonym of EAST (i.e. E means the same as EAST). D is
a synonym of DOWN etc. and it always prefers to use the abbreviation or shorter
synonym. We will deal with synonyms in more detail when we get to the section on
the vocabulary.

If you now wanted to amend the entry for location 0 it would be displayed at the
bottom of the screen as E 1 D 5 W 4 S 3. Type in A 0 on the Movement Menu to have a
look; you can then get back to the menu by using CAPS SHIFT 6 or ENTER. If you use
ENTER the Editor will copy the input buffer into the database and tell you it has
amended the entry even though it hasn't actually changed. Note that you could have
typed in the abbreviations initially.

---------------------------------------(11)----------------------------------------

The Movement Table entries we need for our mini adventure are:-

Location 0 E 1 D 5 W 4 S 3
Location 1 S 2 W 0
Location 2 N 1 W 3
Location 3 N 0 E 2
Location 4 E 0
Location 5 U 0

Check these with the map and then amend the Movement Table entries for locations 1
to 5 using the Movement Table menu. You can print the entries to check that they
are correct if you wish.

Testing the Adventure

Now that you have entered the location texts and the movements it is time to test
the adventure, so select L on the Main Menu. You will be asked whether you require
diagnostics and you should reply N & ENTER or just ENTER. Note that the adventure
always begins at location 0. You should be able to move to all of our locations
using the full words e.g. EAST, or the abbreviations e.g. E. When you are in the
bedroom try typing in the following commands:-

     GO WEST               will get the reply      I can't go in that direction.
     GET JEWEL             will give               I can't.
     LIE ON THE BED
&    GO TO THE HALL        will give               I don't understand...
     REDESCRIBE LOCATION
or   REDESCRIBE
or   R                     will print the location description again.
     TAKE INVENTORY
or   INVENTORY
or   I                     will give a list of what you're carrying
                           (nothing).

To return to the Editor use the word QUIT and if you have found any errors in the
location texts or the movements then use the Editor to correct them. If you would
like to try out the diagnostics then select L again on the Main Menu and reply Y to
the prompt. The diagnostics will not help you much at this stage but you should
note that the number in INVERSE in the bottom corner of the screen is the number of
the current location. The other 31 numbers (all 0 at the moment) are the values of,
what are called, the user flags and they will be explained in a later section.

The Objects

An object is anything that can be manipulated e.g. a key, or moved from place to
place or changed from one thing into another e.g. a torch into a lit torch. Most of
the objects in our mini adventure are shown on the map in figure 1 but a full list
showing the object number, the description needed and the position of the object at
the start of the adventure is as follows:-

---------------------------------------(12)----------------------------------------

objno.        Text                   Start location

Object 0      A lit torch.           not created
Object 1      A torch.               1
Object 2      An apple.              2
Object 3      A sharp knife.         2
Object 4      A television.          3
Object 5      A coat.                0
Object 6      A deerstalker hat.     0
Object 7      A key.                 3
Object 8      A safe.                5
Object 9      A jewel.               not created
Object 10     An open safe.          not created
Object 11     A walking stick.       carried

So, the (unlit) torch starts out at the kitchen, the walking stick starts off being
carried and the jewel (which can't be seen because it's in the safe) starts off as
not created. Notice that there are two descriptions for the safe and that it is
treated as two separate objects. When the safe is opened Object 8 will be destroyed
and Object 10 will be created, while the reverse will happen if the safe is closed.
Similarly the torch is really two objects which will he swapped over when the torch
is switched on or off.

The Object Texts

The descriptions of the objects are entered in exactly the same way as the
descriptions of the locations. If you select E on the Main Menu the Object Text
menu will he displayed and you will see that it is the same as the Location Text
menu except that locno. has been replaced with objno. i.e. object number. If you
print the object texts (P) you may not be surprised to find that an Object 0
already exists. Amend the text of Object 0 so that it reads "A lit torch." and use a
different PAPER colour to your permanent PAPER colour. The table in Chapter 16 of
the Spectrum manual will explain how to do this. Then insert the texts for objects
1-11 so that all the object texts use the same PAPER colour. After you have printed
the texts, checked and corrected them please return to the Main Menu.

The Object Start Locations

Now that the object texts have been inserted into the database we can go about
placing the objects where they will be at the start of the adventure. Type in 1 on
the Main Menu to select the Object Start Location menu and you will see that the
entries can he amended or printed. Entries cannot be inserted because when you
insert an object text for an object the Editor automatically inserts an entry of
'not created' for that object in the Object Start Location Table. If you print the
Object Start Location entries you should see that our 12 objects (0-11) are all
'not created'. To amend the entry for object 7 so that it starts the adventure at
location 3 type in A 7 3 on the Object Start Location menu. 252, 253 & 254 are some
special locnos which mean not created, worn & carried respectively so to amend the
entry for object 11 so that it starts off being carried type in A 11 254.

---------------------------------------(13)----------------------------------------

Refer back to our list of objects and their start locations and amend all the other
entries that need to be changed. You can then print the entries again to check that
they are correct. Note that if you type A 0 252 (for instance) the Editor will
print 'Amended' even though the entry hasn't changed.

Testing Again

It's time to test the adventure again to check that the objects are where they
should be and have the correct descriptions so select L on the Main Menu. When you
are in the adventure type in INVENTORY or I to check that you are carrying the
walking stick and use the map in figure 1 to check that the other objects are at
the correct locations.

If you asked for diagnostics you will see that the second number is now set to 1.
The Interpreter which is part of The Quill contains 33, of what are termed, user
flags and these will he explained in more detail in a later section. However, as a
very brief introduction, these flags are numbered from 0 to 32 and may contain
values in the range 0-255. When you ask for diagnostics the values of the first 31
flags (0 to 30) are printed at the bottom of the screen followed, in INVERSE, by
the current location number. Flag 1 i.e. the second flag, is used to contain a
count of the number of objects carried and as one object is carried in this case,
Flag 1 has the value 1.

The Vocabulary

One section of the database contains the vocabulary and this will hold an entry for
every word that the computer is to understand. The Vocabulary menu is selected by
typing in A on the Main Menu and it allows for words to be inserted and deleted,
for the vocabulary to be printed and for the synonyms of a word to be displayed.
Synonyms were mentioned earlier when we discovered that the Editor knew that EAST
and E meant the same thing. If you print the vocabulary you will see that there are
over 30 entries already present and these relate to words which will be needed in
most adventures. Each entry consists of up to four letters followed by a number (or
word value) and entries with the same word value are synonyms.

The entries in the vocabulary will either hold a whole word e.g. UP, or, if the
word has more than four letters, just the first four letters e.g. ASCE(ND). This
has the advantage of using up only a little memory and it also reduces the amount
of typing the person playing the adventure has to do because he or she will soon
learn that only the first four letters of each word are significant. The
disadvantage, of course, is that you can't have two words with different meanings
which start with the same four letters. This rarely causes problems but note that
when you are playing an adventure and want to go NORTHEAST you have to type in NE
as the vocabulary says that NORTH is a synonym of N.

Take a look through the vocabulary and you should be able to spot all the words we
used when we were doing the Movement Table and in fact the Movement Table can only
contain words that are in the vocabulary. Getting back to the Vocabulary menu, type
in S ASCEND to see the synonyms of the word ascend (Note that S ASCE is
sufficient). Then try inserting the word ORANGE with the value 200 i.e. I ORANGE
200 or I ORAN 200. We haven't an

---------------------------------------(14)----------------------------------------

orange in our adventure so delete the entry using D ORAN. Try inserting a word that
is already present e.g. I STOP 62 and deleting a word that isn't present e.g. D
SPECTRUM. We'll come back to the vocabulary after we've found out what the
Interpreter does when a command is typed in.

Decoding the Players command

Each time the player types in a command during an adventure the Interpreter has to
decode it. It does this by searching along the command for words which are in it's
vocabulary. The word value of the first word recognised is stored in a variable
called W1 and similarly the word value of the second word recognised in W2. This
means that commands like TURN ON THE TORCH can be reduced to ON TORCH provided the
words TURN & THE are not in the vocabulary and that GO TO THE EAST will mean the
same as EAST if the words GO, TO & THE are not in the vocabulary. Thus it is
important to consider which words are excluded from the vocabulary as well as those
which are included.

If no words are recognised the Interpreter gives the reply "I don't understand...".
If the Interpreter recognises a word or words, but they neither cause movement (due
to no entry in the Movement Table) nor cause an action to be performed (to be
explained later) then the Interpreter gives the reply "I can't", if the value of W1
is greater than 12 or "I can't go in that direction", if the value of W1 is less
than 13. Therefore the words in the vocabulary which relate to directions should
have word values in the range 1 to 12.

More Movements

The location descriptions in our adventure include statements of the form "The Hall
is to the West" and up to now we have moved to the Hall with the commands WEST, W
or GO WEST. We are now going to improve the adventure so that it will also obey
commands of the form GO TO THE HALL or just HALL. To do this we will need an entry
in the vocabulary relating to each location so insert the following entries into
the vocabulary.

    HALL       13
    KITCHEN    14
    DINING     15
    LOUNGE     16
    BEDROOM    17
    CELLAR     18

e.g. to insert the word KITCHEN with a word value of 14 use I KITC 14 on the
Vocabulary menu. Print the vocabulary to check the entries are correct and then
amend the entries in the Movement Table to include these new words. The Movement
Table entries required are:-

Location 0 E 1 D 5 W 4 S 3 KlTC 1 CELL 5 BEDR 4 LOUN 3
Location 1 S 2 W 0 DINI 2 HALL 0
Location 2 N 1 W 3 KITC 1 LOUN 3
Location 3 N 0 E 2 HALL 0 DINI 2
Location 4 E 0 HALL 0
Location 5 U 0 HALL 0

---------------------------------------(15)----------------------------------------

When you have changed the Movement Table, test the adventure again to check that
commands such as GO TO HALL are obeyed correctly. While testing the adventure note
that when you are in the Dining Room, GO NE gives the reply "I can't go in that
direction" because NE has a word value less than 13, while GO TO THE HALL gives the
reply "I can't" because HALL has a word value greater than 12.
More Words
We will shortly get to the stage where we can begin to manipulate the objects in
our adventure. Before we can do that though, the words we will use to manipulate
the objects have to be inserted into the vocabulary. Please insert the following
entries into the vocabulary:-

    TORCH          20
    APPLE          21
    KNIFE          22
    TELEVISION     23
    TV             23
    KEY            26
    SAFE           27
    JEWEL          28
    STICK          29
    UNLOCK         30
    OPEN           30
    CLOSE          31
    SHUT           31
    LOCK           31
    LIGHT          32
    ON             32
    OFF            33
    OUT            33
    EAT            34
    BED            200
    HUNGER         201
    FINISH         202
    COAT           224
    DEERSTALKER    225
    HAT            225

The bed is not an object in the adventure and we do not intend to make use of the
word BED anywhere else in the database. However, the bed is mentioned in the
location description of the bedroom so BED is included in the vocabulary to stop
the Interpreter replying "I don't understand..." if a player tries to use the bed.

The Event Table

This table (and the Status Table) form the heart of the database, for it is here
that the actions the Interpreter has to take to reply to a player's command are
specified. Each entry in the table consists of two word values, a set of conditions
and a set of actions. When the adventure is played the Interpreter matches the word
values entered by the player (which have been stored in W1 and W2) against each
entry in the table. If the word values match and the conditions are satisfied then
the actions are performed.

---------------------------------------(16)----------------------------------------

Select G on the Main Menu to display the Event Table menu and you will see that
entries can be inserted, amended or printed. Printing is slightly different to the
other menus because you may either enter P by itself, P followed by one word or P
followed by two words and printing will start at the appropriate part of the table.
The words used must of course be present in the vocabulary. If you type in P now
you will find that a few entries, which will be needed for most adventures, are
already present.

Action INVEN

This is the action which prints "I have with me:-" etc. The first entry in the
Event Table, GET I, has no conditions and a single action called INVEN. What does,
this mean? Well if you were playing the adventure and typed in TAKE INVENTORY then,
because the word value stored in W1 matched the word value for GET and W2 matched
I, action INVEN would be performed. Remember that TAKE & GET and INVENTORY & I are
synonyms.

The next entry I _ does the same thing. If the first word recognised by the
Interpreter is a synonym of I then action INVEN is performed. The (underline) means
that the corresponding value in W1 or W2 (W2 in this case) is irrelevant. Please
make sure you fully understand the last two sections on the Event Table before
reading further.

Action DESC

The third entry in the Event Table R _, means that if R or REDE(SCRIBE) is entered
as a command then action DESC will be performed. Action DESC clears the screen and
attempts to describe the current location. ( If it is dark the Interpreter will
print "Everything is dark. I can't see." ).

Actions SAVE and LOAD

These are the actions which copy a game position to tape and restore a game
position from tape. The last two entries in the Event Table use these actions and
mean, for instance, that if LOAD is typed in as a command then action LOAD is
performed. Do not be confused by the vocabulary word LOAD and the action word LOAD
because they are not related. You can only have an entry in the Event Table of
LOAD _ if there is an entry for LOAD in the vocabulary. The action word LOAD is
independent of the vocabulary.

Actions QUIT, TURNS and END

Action QUIT is the action which asks "Are you sure you want to quit now?" while
action TURNS is the action which prints "You have taken x turn(s).". Action END is
a very important action as it prints "END OF GAME Do you want to try again?" and if
you reply "N" it returns you to the Editor. Note that the only way to return to the
Editor, after testing an adventure, is by action END being performed.

---------------------------------------(17)----------------------------------------

Actions GET, DROP and OK

Actions GET and DROP must be followed by an objno. and are used to carry or put
down objects while action OK simply prints "OK". In our mini adventure we want the
player to be able to take and leave the walking stick using the commands TAKE STICK
and DROP STICK respectively. The entries needed in the Event Table for this are:-

TAKE STICK    Conds
              Acts     GET     11
OK
DROP STICK    Conds 
              Acts     DROP    11
                       OK

To insert the first of these into the Event Table go to the Event Table menu, type
in I TAKE STICK and press ENTER. This inserts a null entry for TAKE STICK (i.e.
with no conditions and no actions) in the table and displays a cursor at the bottom
of the screen to allow you to amend the null entry. When the cursor appears, type
in GET 11 OK and press ENTER again. Insert the entry for DROP STICK in the same way
and then print the Event Table to check the entries. Notice that the Editor prefers
to use the vocabulary word GET instead of TAKE as it is a shorter synonym.

Now test the adventure to see the effect of these entries in the Event Table. In
particular try the following commands:-

    TAKE STICK    when you are already carrying it
    DROP STICK    when you are not carrying it
    GET STICK     when the stick is at a different location

Condition PRESENT
The entries we need, to be able to GET and DROP the other objects are:-

Words         Conds        Acts

GET APPLE                  GET 2 OK
DROP APPLE                 DROP 2 OK
GET KNIFE                  GET 3 OK
DROP KNIFE                 DROP 3 OK
GET COAT                   GET 5 OK
DROP COAT                  DROP 5 OK
GET HAT                    GET 6 OK
DROP HAT                   DROP 6 OK
GET KEY                    GET 7 OK
DROP KEY                   DROP 7 OK
GET JEWEL                  GET 9 OK
DROP JEWEL                 DROP 9 OK
GET TORCH P   PRESENT 0    GET 0 OK
GET TORCH                  GET 1 OK
DROP TORCH    PRESENT 0    DROP 0 OK
DROP TORCH                 DROP 1 OK

---------------------------------------(18)----------------------------------------

AS you can see the entries for the torch are not quite so simple. The problem is
that the torch is really two objects so we have to have two entries. The condition
present which must he followed by an objno., checks whether the object specified
is present at the current location. So the first entry for GET TORCH checks whether
Object 0 is present and if it is, tries to GET it. If Object 0 is not present the
condition is not satisfied so the Interpreter falls through to the next entry,
which has no conditions and tries to get Object 1. When an entry has conditions
and actions the conditions are typed in, in front of the actions e.g. PRESENT 0
GET 0 OK.

When you have inserted the entries print them to check they are correct and that
the entries for the torch are in the correct order. Amending entries in the Event
Table is similar to amending entries in the other database tables. However, if
there is more than one entry present for the same words e.g. DROP TORCH, then each
entry is displayed in turn for amending and you simply press ENTER to leave an
entry as it is. Try A DROP TORC on the Event Table menu and keep pressing ENTER
until you get back to the menu; both entries should he displayed in turn for
possible amending.

Entries in the Event Table can be deleted by removing all the conditions and
actions i.e. Amend the entry using CAPS SHIFT 1 to clear the input buffer and then
press ENTER. Before we test the adventure again we'll insert a few more entries.

Actions WEAR and REMOVE

These actions enable objects to be worn and removed and must be followed by an
objno. Our adventure has two objects that can he worn and the entries needed in the
Event Table for this are:-

Words          Conds    Acts

WEAR HAT                WEAR 6 OK
REMOVE                  HAT REMOVE 6 OK
WEAR COAT               WEAR 5 OK
REMOVE COAT             REMOVE 5 OK

Insert these entries and then test the adventure again using diagnostics. The
reason for using diagnostics is to enable you to monitor the value of Flag 1 (the
second flag) which has a value equal to the number of objects carried. When you are
in the adventure try these commands in the order shown:-

Command       Response                     Flag 1 value

WEAR HAT      I don' t have it             1
REMOVE HAT    I 'm not wearing it          1
GET HAT       OK                           2
TAKE COAT     OK                           3
KITCHEN                                    3
GET TORCH     OK                           4
DINING                                     4

continued next page

---------------------------------------(19)----------------------------------------

Command       Response                      Flag 1 value

GET APPLE     I can't carry any more        4
WEAR HAT      OK                            3
WEAR HAT      I'm already wearing it        3
GET APPLE     OK                            4
REMOVE HAT    I can't. My hands are full    4
DROP HAT      I can't. My hands are full    4
WEAR COAT     OK 3
I             I have with me...             3
DROP HAT      OK                            3
REMOVE COAT   OK                            4

Also make sure you can GET the key and drop all the objects you are carrying.

As you can see, the actions GET, DROP, REMOVE and WEAR include quite a bit of
checking on the objects being manipulated and they can normally be used without
being preceded by conditions. These actions are exceptions to the rule as most
other actions will need to be preceded by conditions.

Action SWAP

This action is followed by two objnos and simply swaps over the positions of the
two objects e.g. if Object 0 is 'not created' and Object 1 is at location 3 then
the action SWAP 0 1 would put Object 0 at location 3 and make Object 1 'not
created'. In our adventure we are going to use SWAP to switch the torch on and off.
The entries we need are:-

Words        Conds        Acts

ON TORCH     PRESENT 1    SWAP 0 1 OK
TORCH ON     PRESENT 1    SWAP 0 1 OK
OFF TORCH    PRESENT 0    SWAP 0 1 OK
TORCH OFF    PRESENT 0    SWAP 0 1 OK

Notice that we have catered for a player giving the command SWITCH OFF TORCH or
SWITCH TORCH OFF and that the condition PRESENT 0 means that the torch can only be
switched off if the lit torch is present. Insert these entries into the Event table
and test them.

The Flags

The Interpreter contains 33 user flags which are really just variables that can
hold a value in the range 0 255. Like everything else in The Quill, numbering
starts at 0 so the flag numbers (flagnos) are in the range 0-32. There are actions
which enable the flag values to be changed and conditions which allow the flag
values to be tested. Some of the flags have special purposes while others have an
auto-decrement feature. The flags with special purposes are flags 0, 1, 30, 31 and
32. Flag 0 is used to tell the interpreter whether it is light or dark; if it has
any value other than zero the Interpreter thinks it's dark. Flag 1 as we have seen
before, holds a count of the number of objects carried. Flag 30 is used to hold the
players score as a percentage while Flags 31 and 32 are used to hold

---------------------------------------(20)----------------------------------------

the number of turns that the player has taken. Flags 2 to 10 are auto-decrement
flags which means they are decreased by 1 under certain circumstances:-

Flag 2 is decreased each time the Interpreter tries to describe a location

Flag 3 is decreased each time the Interpreter tries to describe a location and it's
dark

Flag 4 is decreased each time the Interpreter tries to describe a location and it's
dark and Object 0 is absent

Flags 5-8 are decreased each time a command is entered

Flag 9 is decreased each time a command is entered and it's dark

Flag 10 is decreased each time a command is entered and it's dark and Object 0 is
absent

Flags 11-29 have no special features

Note that a flag cannot be decreased below zero and that Object 0 is a special
object because the Interpreter considers it as a source of light.

There is a summary of the flags and a summary of the conditions and actions that
can be used, on the last page, of this manual. As mentioned earlier, when
diagnostics are requested the values of flags 0-30 are printed so that you can
monitor the values of these flags.

Light and Dark

If you take another look at our map in figure 1 you will notice that it says the
cellar is dark. To make the cellar dark we will use the condition AT and the
actions CLEAR, SET, GOTO and DESC. Condition AT must be followed by a locno. and is
satisfied if the player is at that location. The actions CLEAR and SET must be
followed by a flagno. and change that flags value to 0 or 255 respectively. Action
GOTO is followed by a locno. and causes movement to that location.

If this entry were present in the Event Table (do not insert it).

Words  Cond    Acts
U _    AT 5    GOTO 0 DESC

it would have exactly the same effect as our entry U 0 for location 5 in the
Movement Table i.e. if a player gives the command UP when he is at location 5, he
is moved to location 4 and the location is described.

The Event Table entries to be inserted to make the cellar dark are:-

---------------------------------------(21)----------------------------------------

Words       Conds   Acts

D _         AT 0    SET 0 GOTO 5 DESC
CELLAR _    AT 0    SET 0 GOTO 5 DESC
U _         AT 5    CLEAR 0 GOTO 0 DESC
HALL _      AT 5    CLEAR 0 GOTO 0 DESC

When a player moves from the Hall to the Cellar, Flag 0 will be set to 255 (making
it dark). When he moves back to the Hall, Flag 0 will be cleared to 0 (making it
light again). However, if you were to test the adventure now you would find that
the Cellar was still light. This is because the Interpreter checks the Movement
Table before it checks the Event Table and if the Movement Table causes movement
the Event Table is not checked. So remove the movements between the Hall and Cellar
from the Movement Table and then test the adventure. When you are testing the
adventure monitor the value of flag 0 and try experimenting with moving between the
Hall and Cellar and switching the torch on and off.

Action SCORE

The action SCORE prints "You have scored x%" where x is the value of Flag 30. We
are going to use a very simple scoring system in our adventure where the player
scores 50% for opening the safe and a further 50% for completing the adventure. If
the player QUIT's the adventure he will want to know what score he has achieved so
amend the Event Table entry for QUIT _ so that it has the actions QUIT SCORE TURNS
END. It is important that you print this entry (use P QUIT) to check it is correct,
because the only way back to the Editor from the Interpreter is by action END being
performed.

Opening and Closing the Safe

In our adventure the safe can only be opened if the key is carried, the lit torch
is present and, of course, the safe is not already open. To close the safe, the key
is not needed but the lit torch must be present. The first time the safe is opened
we want to create the jewel and give the player a score of 50% but if the player
closes the safe and reopens it then we must not create the jewel again or give
another 50%.

We will use Flag 11 to show whether the safe has already been opened. As the flags
start off with a value of zero we will say that if Flag 11 has the value 0 the safe
has not previously been opened. Then if we SET Flag 11 the first time the safe is
opened we will be able to tell that the safe has already been opened. The Event
Table entries we need are:-

OPEN SAFE     Conds    PRESENT    8
                       CARRIED    7
                       PRESENT    0
                       ZERO       11
              Acts     DESTROY    8
                       CREATE     10
                       LET        30    50
                       CREATE     9
                       SET        11
                       DESC

---------------------------------------(22)----------------------------------------

OPEN SAFE     Conds    PRESENT    8
                       CARRIED    7
                       PRESENT    0
              Acts     DESTROY    8
                       CREATE     10
                       OK
CLOSE SAFE    Conds    PRESENT    10
                       PRESENI    0
              Acts     DESTROY    10
                       CREATE     8
                       OK

Condition CARRIED must he followed by an objno. and is satisfied if that object is
carried while condition ZERO must be followed by a flagno. and is satisfied if that
flag has the value 0. Action CREATE is used to change an object's location to the
current location while action DESTROY changes at object's location to 'not
created'. Both CREATE and DESTROY must be followed by an objno. Action LET is
followed by a flagno. & a value, and the flag is given that value e.g. LET 30 50
gives Flag 30 a value of 50; a bit like the BASIC command LET FLAG30 = 50.

The order of the two entries for OPEN SAFE is important. The first time the safe is
opened the condition ZERO 11 will be satisfied so the actions in the first entry
will be performed. If the safe is opened again the condition ZERO 11 will not be
satisfied and the Interpreter will fall through to the second OPEN SAFE entry.
Insert these entries into the Event Table, then print them (use P UNLOCK SAFE) to
check they are correct. Note that the first OPEN SAFE entry ends with action DESC
so that the player can see that the jewel has been created. When you have checke
 the entries test the adventure again and use diagnostics so that you can monitor
the values of flags 11 & 30.

The Message Texts

Any messages which are needed in the adventure have to be entered into the Message
Text table. The Message Text menu is the same as the Location Text menu with the
exception that locno. has been replaced with mesno. (message number). If you select
B on the Main Menu to display the Message Text menu and then print the messages,
you will see that a message 0 is already present. The messages we need in our
adventure are:-

    Message 0
    I'm hungry!

    Message 1
    Ah. That's better !

    Message 2
    I'm dying of starvation...

---------------------------------------(23)----------------------------------------
  
    Message 3
    Well done. You've solved the Adventure.

Amend the existing entry for message 0 and then insert messages 1 to 3.

The Status Table

This table has exactly the same format as the Event Table i.e. each entry has two
word values followed by conditions and actions, but the Interpreter uses the two
tables in slightly different ways. We have already seen that the Interpreter uses
the Event Table after each command given by a player and matches the word values in
W1 and W2 with each entry in the table. The Interpreter uses the Status Table in
between turns and looks at each entry irrespective of the word values in W1 and W2.
Thus the Event Table contains entries which are dependent on the commands entered
by the player while the Status Table contains entries which are independent of the
commands entered by the player. Note that the Interpreter does not make use of the
word values present in the Status Table entries. The vocabulary words used in the
Status Table can therefore be used as comments, to remind you what the entries do,
or to position an entry at a particular place in the table because the entries are
arranged in ascending order of word value. When you write your own adventures you
will find that the order of the entries in the Status Table is very important.

Finishing the Adventure

Our mini adventure is solved when a player is at the Dining Room and the jewel is
present. It doesn't matter what commands the player uses to get the jewel to the
DINING ROOM so we will use an entry in the Status Table to detect when the
adventure is solved. The Status Table entry required is:-

FINISH    _    Conds    AT         2
                        PRESENT    9
               Acts     MESSAGE    3
                        PLUS       30    50
                        BEEP       20    140
                        BEEP       20    160
                        BEEP       20    180
                        BEEP       90    200
                        SCORE
                        TURNS
                        END

Note that the vocabulary word FINISH is used only as a comment.

Select H on the Main Menu to display the Status Table menu and then insert this
entry. Action MESSAGE must be followed by a mesno. and simply prints that message.
Action PLUS must be followed by a flagno. & a value, and adds that value to the
appropriate flag e.g. PLUS 30 50 adds 50 to Flag 30 (the score). Action BEEP is
followed by a duration and a pitch; the duration is in hundredths of a second and,
like pitch, is in the range of 0-254. Action BEEP can be considered to execute the
BASIC command BEEP duration/100, Pitch/2 -60. Thus the action BEEP 20 140 is
equivalent to the BASIC command BEEP .2,10.

---------------------------------------(24)----------------------------------------

When you have inserted this entry in the Status Table test the adventure again arid
take the jewel to the Dining Room.

Hunger

In our adventure we want the player to become hungry after 6 turns, to remain
hungry for the next 7 turns and then to die of starvation. Eating the apple, of
course, will ward off the pangs of hunger. We will set Flag 12 when the apple is
eaten and we will use Flag 5, which is auto-decremented each turn, to count the 7
turns when the player is hungry. The entries needed in the Status Table are:-

HUNGER    _    Conds    EQ         31    6
                        ZERO       32
               Acts     LET        5     8
HUNGER    _    Conds    NOTZERO    5
                        ZERO       12
               Acts     MESSAGE    0
HUNGER    _    Conds    EQ 5       1
                        ZERO       12
               Acts     MESSAGE    2
                        PAUSE      100
                        BEEP       20    200
                        BEEP       20    180
                        BEEP       20    160
                        BEEP       90    140 
                        SCORE
                        TURNS
                        END

Note that the vocabulary word HUNGER is only used as a comment.

The condition EQ must be followed by a flagno. & a value, and is satisfied if the
flag specified has the value specified. Condition NOTZERO must also be followed by
a flagno. and is satisfied if the flag specified does not have the value 0. The
action PAUSE is similar to the BASIC command of the same name. Insert these three
entries into the Status Table but make sure you insert them in the order shown. The
first entry waits until the turns count (Flags 31 and 32) is equal to 6 and it then
gives Flag 5 a value of 8. The second entry is the one which prints "I'm hungry!"
and it does this when Flag 5 is not zero and Flag 12 says the apple has not been
eaten. Flag 5 is auto-decremented each turn. The conditions in the third entry are
satisfied when Flag 5 reaches 1 and Flag 12 says the apple has not been eaten. Note
that when Flag 5 has the value 1 the conditions in both the second and third
entries are satisfied so both the messages "I'm hungry!" and "I'm dying of
starvation..." are printed.

Eating the Apple

We have already said that we will set Flag 12 when the apple is eaten. However, we
only want to print message 1 if the apple is eaten when the player is hungry i.e.
if the apple is eaten before the player is hungry we just want the reply "OK". The
entries required in the Event Table are:-

---------------------------------------(25)----------------------------------------

EAT APPLE    Conds    PRESENT    2 
                      NOTZERO    5
             Acts     DESTROY    2
                      SET        12
                      MESSAGE    1 
                      DONE
EAT APPLE    Conds    PRESENT    2
             Acts     DESTROY    2
                      SET        12
                      OK

Action DONE simply stops the Interpreter falling through to the next entry in the
table. Insert these two entries into the Event (Not Status) table in the correct
order.

Number of Objects Conveyable

You may remember when you were testing the adventure earlier, that the player was
able to carry only 4 objects. This number can be altered by selecting P on the Main
Menu. For our mini adventure change the number of objects conveyable to 1 (one) and
then test the adventure for the last time (it won't be quite so easy this time).

Save and Verify Adventure

These two Options on the Main Menu allow complete copies of an adventure to be
saved to tape in a form that will auto-run when loaded into a Spectrum using
LOAD"". Note that the files saved are not designed to be reloaded into The Quill.

The Object Word Table

This table is used by the actions AUTOG, AUTOD, AUTOW, and AUTOR (short fot
Autoget, Autodrop, Autowear, and Autoremove) and its purpose is to enable objects
to be manipulated without you making hundreds of entries in the Event table of the
form:-

    GET HAT    Conds
               Acts     GET    6
                        OK

As an wxample, we are now going to change our mini adventure so that it uses the
Object Word Table Table. If you look at the Event table, you will see that we have
made the following entries related to manipulating objects:-

    Words          Conds        Acts

    GET TORCH      CARRIED 0    GET      7 OK
    GET TORCH                   GET      1 OK
    GET APPLE                   GET      2 OK
    GET KNIFE                   GET      3 OK
    GET COAT                    GET      5 OK
    GET HAT                     GET      6 OK

---------------------------------------(26)----------------------------------------

    Words          Conds        Acts

    GET KEY                     GET      7 OK
    GET JEWAL                   GET      9 OK
    GET STICK                   GET      11 OK
    DROP TORCH     CARRIED 0    DROP     0 OK
    DROP TORCH                  DROP     1 OK
    DROP APPLE                  DROP2    OK
    DROP KNIFE                  DROP     3 OK
    DROP COAT                   DROP     5 OK
    DROP HAT                    DROP     6 OK
    DROP KEY                    DROP     7 OK
    DROP JEWAL                  DROP     9 OK
    DROP STICK                  DROP     11 OK
    WEAR COAT                   WEAR     5 OK
    WAER HAT                    WEAR     6 OK
    REMOVE COAT                 REMOVE   5 OK
    REMOVE HAT                  REMOVE   6 OK

Please delete these 22 entries and insert the following 6 entries:-

    Words          Conds        Acts

    GET TORCH      CARRIED 0    GET      0 OK
    GET                         AUTOG      OK
    GET _                       DROP     0 OK
    GET TORCH      CARRIED 0    AUTOD      OK
    DROP _                      AUTOW      OK
    REMOVE _                    AUTOR      OK

Now select option S on the Main Menu for the Object Word Menu and you will see that
entries can be ammended or printed. Entries cannot be inserted because when you
insert an object text for an object the Editor automatically inserts a null entry
for that object in the Object Word Table. If you print the Object Word entries you
should see that 12 objects all have null entries. The Object Word Table is where
objects are associated with Vocabulary words, e.g. to associate the word HAT with
object 6, enter A 6 HAT on the Object Word Menu. In our mini adventure, we need the
following associations:-

    A    1     TORCH
    A    2     APPLE
    A    3     KNIFE 
    A    5     COAT
    A    6     HAT
    A    7     KEY
    A    9     JEWEL
    A    11    STICK

Note that the entries for objects 4, 8 and 10 remain null because the TV and Safe
are not to be manipulated and that the Torch (objects 0 and 1) has object 1 handled
by the Object Word Table while object 0 still has to be handled explicity in the
Event table.

---------------------------------------(27)----------------------------------------

If you print the Object Word Table now you should get the following information:-

    Object    0
    Object    1     TORC GD
    Object    2     APPL GD
    Object    3     KNIF GD
    Object    4
    Object    5     COAT GDWR
    Object    6     HAT GDWR
    Object    7     KEY GD
    Object    8
    Object    9     JEWE GD
    Object    10
    Object    11    STIC GD

The GD or GDWR signifies which of the Actions AUTOG, AUTOD, AUTOW, and AUTOR will
operate for each object. Whether GD or GDWR is shown depends entirely on the word
values of the words used. If the word value is <200 then GD is shown otherwise GDWR
is showm. Thus objects which can be worn should be associated with words which have
word values >199.

If you test the adventure now, you will find that it worls in exactly the same way
as before when the Object Word Table was used.

Deleting Words from the Vocabulary

Note that if all the synonyms of a word are deleted from the vocabulary then:-

a) Any entries in the Event and Status Tables using those words are also deleted.
b) Any movements in the Movement table using those words are also deleted.
c) Any enries in the Object Word Table using those words are set to null.
d) Deleting words from the vocabulary can sometimes take a few minutes.

Other Actions

All but two of the actions available in The Quill were used in our mini adventure.
The other two are MINUS and ANYKEY. MINUS is followed by a flagno. and a value, and
subtracts the value specified from the flag specified. Action ANYKEY prints "Press
any key to continue" and waits for a key to be pressed. One use of ANYKEY is to
provide an introduction to adventures. If the introduction occupies two screens,
then insert it into the database as the texts for locations 0 & 1 and let the
adventure proper start at location 2. The following entries in the Status table can
then be used to do the introduction:-

---------------------------------------(28)----------------------------------------

    INTRO    -    Conds    AT        0
                  Acts     ANYKEY    
                           GOTO      1
                           DESC
    INTRO    -    Conds    AT        1
                  Acts     ANYKEY
                           GOTO      2
                           DESC

More about Event and Status

When the interpreter is processing these tables it considers each entry till it
reaches the end of the table or it performs one of the actions lNVEN, DESC, END,
DONE, OK, SAVE or LOAD. The actions QUIT, REMOVE, GET, DROP, and WEAR can sometimes
also stop processing of the Event/Status tables. Full details of all the actions
can be found in Part 2 of this manual.

Other Conditions

Our mini adventure made use of only 6 of the 16 conditions available in The Quill.
Details of the other conditions can be found in Part 2 of this manual but it is
worth mentioning the condition CHANCE here as it can introduce a random element
into an adventure. Condition CHANCE must be followed by a percentage, in the range
0-99, e.g. CHANCE 25 would have a 25% chance of being satisfied.

Designing your own Adventure

The suggested procedure of writing your own adventure is:-

    a) Read Part 2 of this manual

    b) Draw a map of your adventure and allocate locnos.
       (make your first adventure a small adventure)

    c) List the location texts you will use

    d) List the Movement table entries you will need

    e) List the objects in the adventure showing where they will start the
       adventure. Allocate objnos
    f) List the messages needed in the adventure and allocate mesnos

    g) List all the words and synonyms you will use and allocate word values

    h) Decide which flags will be used and what they will be used for

    i) Write out all the Event table entries showing the conditions and actions to
       be used. If you have more than one entry with the same word values check
       that you have the entries in the correct order

---------------------------------------(29)----------------------------------------

    j) Write out all the Status table entries and plan the order of the entries.
       You might need to add further entries to the vocabulary which will be used
       as comments in the Status table

    k) Insert the entries into the database and save the database regularly (you
       might get a power cut)

    l) Thoroughly test your adventure

As you can see you need to do a lot of planning before you start to type your
adventure into The Quill.

Selling your Adventure

If you intend to sell adventures then they need to be very thoroughly tested by as
many people as possible. In particular:

    a) Check the spelling of every word
    
    b) Check it is impossible to get a score of over 100%

    c) Try to move in every direction from every location

    d) Try to GET, DROP, WEAR and REMOVE each object

    e) It should be possible to solve the adventure each time it is played provided
       the correct commands are used e.g. poison gas which has a 1% chance of
       appearing and killing the player should be avoided unless you also provide a
       gas mask.

---------------------------------------(30)----------------------------------------

               +---------------------------------------------------+
               | A great deal of time has been spent testing The   |
               | Quill but it is possible that a few well hidden   | 
               | bugs still remain within the 7K of machine code.  |
               | If you do have any problems please let us know    |
               | so that they can be corrected. We would also be   | 
               | pleased to hear of any comments or criticisms     |
               | about The Quill or any suggestions for            |
               | improvements.                                     | 
               |                                                   | 
               | If you intend to sell an adventure written with   |
               | The Quill we would be grateful if you could       |
               | mention somewhere in it, that it was written with |
               | The Quill. If you would like us to market an      |
               | adventure for you, then please send a fully       |
               | tested copy to:-                                  |
               |                                                   |
               |         GILSOFT                                   |
               |         30 Hawthorn Road                          |
               |         Barry                                     |
               |         South Glamorgan                           | 
               |         or 'phone 0446 736369                     |
               +---------------------------------------------------+

---------------------------------------(31)----------------------------------------

Part 2

Detailed Description of the Interpreter

The structure of the Interpreter is shown in flowchart 1. The numbers shown on the
flowchart relate to the following paragraphs:-

1  Initialise

   All the flags are set to zero except for Flag 1 which is set to the number of
   objects initially carried. The current location and the two word values W1 & W2
   are set to zero.

2  Describe Current Location
   The screen is cleared. If Flag 2 is non zero it is decremented. If it is dark
   (Flag 0 is non zero) and Flag 3 is non zero it is decremented. If it is dark and
   Flag 4 is non zero it is decremented if Object 0 is absent.

   If it is light (Flag 0 is zero) or Object 0 is present the location text for the
   current location is printed. Then, if any objects are at this location, SM1 "I
   can also see:-" is printed followed by the object texts. SM1 refers to Sytem
   Message number 1.
 
   If it is dark (Flag 0 is non zero) and Object 0 is absent "Everything is dark. I
   can't see." is printed.

3  Consider 1st Entry in Status Table.

   A pointer is set to the first entry in the Status table.

4  Words & Conditions Satisfied
  
   The 1st word & 2nd word in the entry being considered are matched with W1 & W2
   as shown in flowchart 2. Each condition in the entry is checked as follows:-

   4.1  AT locno.
      
        Satisfied if the current location is the same as locno.
  
   4.2  NOTAT locno.
      
        Satisfied if the current location is different to locno.

   4.3  ATGT locno.
 
        Satisfied if the current location is greater than locno.
  
   4.4  ATLT locno.

        Satisfied if the current location is less than locno.

---------------------------------------(32)----------------------------------------

   4.5  PRESENT objno.
     
        Satisfied if Object objno. is carried or worn or at the current location.

   4.6  ABSENT objno.
      
        Satisfied if Object objno. is not carried and not worn and not at the
        current location.

   4.7  WORN objno.
  
        Satisfied if Object objno. is worn.

   4.8  NOTWORN objno.

        Satisfied if Object objno. is not worn.

   4.9  CARRIED objno.
        Satisfied if Object objno. is carried.

   4.10 NOTCARR objno.

        Satisfied if Object objno. is not carried.

   4.11 CHANCE percent.
       
        Satisfied if percent is less than or equal to a random number in the range
        1-100 (inclusive).

   4.12 ZERO flagno.
 
        Satisfied if Flag flagno. is set to zero.

   4.13 NOTZERO flagno.
  
        Satisfied if Flag flagno. is not set to zero.

   4.14 EQ flagno. value
      
        Satisfied if Flag flagno. is set to value.
   
   4.15 GT flagno. value
   
        Satisfied if Flag flagno. is set to greater than value.

   4.16 LT flagno. value

        Satisfied if Flag flagno. is set to less than value.

---------------------------------------(33)----------------------------------------
 
       -------------         
      (    Start    )
       ------|------
       ______|_______
       |            |
       | Initialise |
       |            | 
       |            |                / \            ______________
       |____________|          Y  /  WI   \         |          10|
     ___________________/_______/ Found in  \___/___| Lookup W1  |____ /____ 
     | ______|_______   \       \ Movement  /   \   |in Movement |     \    |
     | |           2|             \table? /         |   table    |          |
     | |  Describe  |                \ /            |____________|          |
     | |  Current   |                 | N                                   |
     | |  Location  |                 |                                     |
     | |____________|                 |                                     |
     |       |                        |                                     |
  ___|_______|                        |                                     |
 |   |       |                        |                                     |
 |   | ______|_______           ______|_______      ______________          |
 |   | |           3|           |          11|      |           8|          |
 |   | |  Consider  |           |Cinsider    |      |  Consider  |__/__     |
 |   | |1st entry in|           |1st entry in|      |    Next    |  \  |    |
 |   | |Status table|           |Event table |      |    Entry   |     |    |
 |   | |____________|           |____________|      |____________|     |    |
 |   |       |________________________|____________________|           |    |
/|\ /|\                                                    |           |    |
 |   | ______________           ______________             |           |    |
 |   | |           6|           |           5|            / \          |    |
 |   | |   Peform   |           |  Consider  |      Y  / Words \       |    |
 |   | |   Action   |__/_____/__| ist Action |___/___/  & Conds  \     |    |
 |   | |            |  \  |  \  |            |   \   \ satisfied /     |    |
 |   | |____________|     |     |____________|         \   4   /       |    |
 |   |       |            |                               \ /         /|\  /|\
 |   |       |            |____/______                     | N         |    |
 |   |       |                 \      |                    |           |    |
 |   |      / \                  _____|_______             |           |    |
 |   | Y /       \               |          7|             |           |    |
 |   |_/   DESC ?  \             | Consider  |    ____/____|           |    |
 |     \           /             |   Next    |    |   \                |    |
 |       \   6   /               |  Action   |    |                    |    |
 |          \ /                  |___________|    |                    |    |
 |           | N                      |           |                    |    |
 |           |                        |           |                    |    |
 |           |                        |           |                    |    |

---------------------------------------(34)----------------------------------------

 |           |                        |           |                    |    |
 |           |                       /|\          |                    |    |
 |           |                        |           |                    |    |
 |           |                        | Y         |                    |    |
 |          / \                      / \          |       / \          |    |
 |       /       \  N             /  Any  \  N    |    / More  \  Y    |   /|\
 |     /   DONE?   \____________/   more    \_____|__/  entries  \_____|    |
 |     \           /            \  Actions? /        \ in table? /          |
 |       \   6   /                \       /            \       /            |
 |          \ /                      \ /                  \ /               |
 |           | Y                                           | N              |
 |           |______________________________/______________|                |
 |           |                              \                               |
 |           |                                                              | Y
 |          / \                  _____________                             / \
 |       /  Are  \  Y            |          9|                          /  Any  \
 |     /   we in   \_____________|    Get    |________________________/recognised \
 |     \   Status  /             |  Command  |                        \   word?   /
 |       \ table /               |           |                          \       /
 |          \ /                  |___________|                             \ /
 |           | N                                                            | N
/|\          |                                                              |
 |           |                                                              |
 |           |                                                              |
 |          / \                       / \                                   |
 |       /  Are  \  N              / Is W1 \  Y                             |
 |     /   we in   \_____________/a direction\_____________                 |
 |     \   Status  /             \   ie<13   /             |                |
 |       \ table /                 \       /               |                |
 |          \ /                       \ /                  |                |
 |           | Y                       | N                 |                |
 |           |                         |                   |                |
 |           |                   ______|______       ______|______    ______|______         
 |           |                   |    SM8    |       |    SM7    |    |    SM6    |
 |           |                   | "I can't" |       |"I can't go|    | "I don't  |
 |           |                   |           |       |  in that  |    |understand"|
 |           |                   |           |       | direction |    |           |
 |           |                   |___________|       |___________|    |___________|
 |           |                         |                   |                |
 |_____/_____|_________/_______________|_________/_________|________/_______|
       \               \                         \                  \

                       Flowchart 1. Structure of Interpreter

---------------------------------------(35)----------------------------------------

 -------------         
(    Start    )
 -------------
       |
       |
       |
      / \                / \                / \
   /  Are  \ N        /  1st  \ N        /       \ N
 /   we in   \______/  word is  \______/ 1st word  \_________________________
 \  Status   /      \ undeline? /      \   = W1?   /                         |
   \ table?/          \       /          \       /                           |
      \ /                \ /                \ /                              |
       |                  |                  | Y                             |
       |                  |                  |                               |
       |                  |                  |                               |
       |                  |                  |                               |
       |                  |                 / \                / \           |
       |                  |              /  2nd  \  N       /       \  N     |
       |                  |            /  word is  \______/ 2nd word  \______|
       |                  |            \ undeline? /      \  = W2?    /      |
       |                  |              \       /          \       /        |
       |                  |                 \ /                \ /           |
       |                  |                  | Y                | Y          |
       |__________________|__________________|__________________|            |
                                                                |            |
                                                                |            |
                                                               / \           |
                                                            /  All  \  N     |
                                                          /   Conds   \______|
                                                          \ satisfied?/      |
                                                            \       /        |
                                                               \ /           |
                                                                | Y          |
                                                                |            |
                                                            ---------    ---------       
                                                           ( End Yes )  ( End No  )
                                                            ---------    ---------

                    Flowchart 2: Words & Conditions Satisfied

---------------------------------------(36)----------------------------------------

5  Consider 1st Action

   A pointer is set to the first action in the entry being considered.

6  Perform Action

   The action is performed as follows:-
   
   6.1  INVEN

        SM1 "I have with me:-" is printed. If no objects are carried or worn
        "Nothing at all." is printed, otherwise the object text for each object
        that is carried or worn is printed. If an object is worn its object text
        is followed by "(worn)". Action DONE is then performed.

   6.2  DESC

        This action jumps out of STATUS/EVENT processing to Describe Current
        Location.

   6.3  QUIT
   
        SM12 "Do you really want to quit now?" is printed and the input routine
        called. If the reply does not start with the first letter of SM0 action
        DONE is performed.

   6.4  END

        SM13 "END or GAME Do you want to try again?" is printed and the input
        routine called. If the reply does not start with the first letter of SM31
        a jump is made to Initialise. Otherwise a jump is made to the Editor (if
        it is present) or to the BASIC NEW command.

   6.5  DONE
        
        This action jumps to the end of STATUS/EVENT processing i.e. no more
        actions or entries are considered.
 
   6.6  OK
       
        "OK" is printed and action DONE is performed.

   6.7  ANYKEY
        
        "Press any key to continue" is printed at the bottom of the screen and
        the keyboard is scanned until a key is pressed.

   6.8  SAVE

        "Start tape, then press any key." is printed at the bottom of the screen.
        When a key is pressed the game position is saved to tape, then action
        DESC is performed. If BREAK is pressed during the save a jump is made
        to Initialise.

---------------------------------------(37)----------------------------------------

   6.9  LOAD

        Loads data (which should be a game position) from tape, then action DESC is
        performed. If BREAK is pressed during the load or a tape error is detected
        a jump is made to Initialise. If data is loaded which is not a game
        position a tape error will normally be detected.

   6.10 TURNS
        You have taken x turn(s). is printed where x is Flag 31 + 256 * Flag 32.

   6.11 SCORE
        You have scored x% is printed where x is Flag 30.

   6.12 PAUSE value
     
        Pauses for value/50 secs. However, if value is zero then the pause is for
        256/50 secs.

   6.13 GOTO locno.
 
        Changes the current location to locno.

   6.14 MESSAGE mesno.
        
        Message mesno. is printed.

   6.15 REMOVE objno.
 
        If Object objno. is not worn, SM32 "I'm not wearing it." is printed and
        action DONE is performed.

        If the maximum number of objects is being carried (Flag 1), SM24 "I can' t.
        My hands are full." is printed and action DONE is performed.

        Otherwise the position of Object objno. is changed to 'carried' and Flag 1
        is decremented.

   6.16 GET objno.

        If Object objno. is worn or carried, SM25 "I already have it." is printed
        and action DONE is performed.

        If Object objno. is not at the current location, SM26 "It's not here." is
        printed and action DONE is performed.

        If the maximum number of objects is being carried (Flag 1), SM27 "I can't
        carry any more." is printed and action DONE is performed.

---------------------------------------(38)----------------------------------------

        Otherwise the position of Object objno. is changed to 'carried' and Flag 1
        is incremented.

   6.17 DROP objno.

        If objno. is worn and the maximum number of objects is being carried (Flag
        1), SM24 "I can't. My hands are full." is printed and action DONE is
        performed.

        If Object objno. is neither worn nor carried, SM28 "I don't have it." is
        printed and action DONE is performed.

        Otherwise the position of Object objno. is changed to the current location
        and Flag 1 is decremented if the object was carried.

   6.18 WEAR objno.

        If Object objno. is worn, SM29 "I'm already wearing it." is printed and
        action DONE is performed.

        If Object objno. is not carried, SM28 "I don't have it." is printed and
        action DONE is performed.

        Otherwise the position of Object objno, is changed to 'worn' and Flag 1 is
        decremented.

   6.19 DESTROY objno.

        The position of Object objno. is changed to 'not created' and Flag 1 is
        decremented if the object was carried.

   6.20 CREATE objno.
 
        The position of Object objno. is changed to the current location and Flag 1
        is decremented if the object was carried.

   6.21 SWAP objno. objno.
        
        The positions of the two objects are exchanged.

   6.22 SET flagno.

        Flag flagno. is set to 255.

   6.23 CLEAR flagno.
        
        Flag flagno. is cleared to 0.

   6.24 PLUS flagno. value

        Flag flagno. is increased by value. If the result exceeds 255 the flag is
        set to 255.

---------------------------------------(39)----------------------------------------

   6.25 MINUS flagno. value

        Flag flagno. is decreased by value. If the result is negative the flag is
        set to 0.

   6.26 LET flagno. value

        Flag flagno. is set to value.

   6.27 BEEP duration pitch

        Executes the BASIC command BEEP duration/100, pitch/2 - 60.

   6.28 PAPER n

        Where n ranges from 0 to 9. Changes global paper colour.

   6.29 INK n

        Where n ranges from 0 to 9. Changes global ink colour.

   6.30 BORDER n

        Where n ranges from 0 to 7. Changes screen border colour.

   6.31 CLS

        Clears screen to current global colours

   6.32 DROPALL

        All objects which are carried or worn are created at the current location
        (ie all objects are dropped) and Flag 1 is set to 0.

   6.33 PLACE objno. locno.

         The position of Objno. is changed to locno. Flag 1 is decremented if the
         obbject is carried.

   6.34 AUTOG

        The Object Word Table is searched for an entry which matches W2. If a match
        is not found, SM8 "I can't" is printed and action DONE is performed. If a
        match is found the object number of the matching entry is passed to the GET
        action.

   6.35 AUTOD

        The Object Word Table is searched for an entry which matches W2. If a match
        is not found, SM8 "I can't" is printed and action DONE is performed. If a
        match is found the object number of the matching entry is passed to the
        DROP action.

---------------------------------------(40)----------------------------------------

   6.36 AUTOW

        If the value in W2 is < 200, SM8 "I can't" is printed and action DONE is
        performed. Otherwise the Object Word Table is searched for an entry which
        matches W2. If a match is not found, SM8 "I can't" is printed and action
        DONE is performed. If a match is not found the object number of the
        matching entry is passed to rhe WEAR action.

   6.37 AUTOR

        If the value in W2 is < 200, SM8 "I can't" is printed and action DONE is
        performed. Otherwise the Object Word Table is searched for an entry which
        matches W2. If a match is not found, SM8 "I can't" is printed and action
        DONE is performed. If a match is not found the object number of the
        matching entry is passed to rhe REMOVE action.

7  Consider Next Action
   
   A pointer is set to the next action in the entry being considered.

8  Consider Next Entry
   
   A pointer is set to the next entry in the table being processed.

9  Get Command

   If Flags 5 to 8 are non zero they are decremented. If it is dark (Flag 0 is non
   zero) and Flag 9 is non zero it is decremented. If it is dark and Flag 10 is non
   zero it is decremented if Object 0 is absent.

   The turns count (Flags 31 & 32) is incremented, one of four messages e.g. "Tell
   me what to do." is printed and the input routine called. The first four letters
   of each word in the reply are looked up in the vocabulary and the values of the
   first two words found in the vocabulary are stored in W1 & W2.

10 Lookup W1 in Movement Table
   The entry in the movement table for the current location is searched to see if
   the word value in W1 is present. If it is, the current location is set to the
   value following W1 in the movement table.

11 Consider 1st Entry in Event Table
 
   A pointer is set to the first entry in the Event table.

---------------------------------------(41)----------------------------------------

          The basic structure of the interpreter has its origins in an
          article written by Ken Reed and published in the August 1980
          issue of Practical Computing. The interpreter in The Quill
          now has little in common with the article but the terms used
          to describe it (e.g. Status, Event, Flags) have been retained
          as an aid to people who are familiar with the article.

---------------------------------------(42)----------------------------------------

Detailed Description of the Database

The database consists of a number of inter-related tables and also contains an area
of miscellaneous information e.g. values of permanent colours, number of objects
conveyable. The tables present are:-

A  The Vocabulary

   Each entry in the table uses 5 bytes and contains a word (or the first four
   characters, if the word is longer than four characters) and a word value in the
   range 1-254. Words with the same word value are called synonyms. The entries
   are held in ascending order of word value and within each word value, entries
   with more spaces come first e.g.

            U
            UP
            CLIM
            SCE

   where entries with the same word value also have the same number of spaces the
   entry inserted first comes earlier e.g. CLIM(B) was inserted before ASCE(ND).

   Note 1. Whenever the editor has to convert from a word value to a word it takes
   the first word with that value.

   Note 2. Word values less than 13 should be reserved for movement words.

B  The Message Text table

   This table contains the text of any messages which are needed for the adventure.
   The messages are numbered from 0 upwards and each one uses 3 bytes plus the
   length of the text.

C  The Location Text table

This table, which has an entry for each location, contains the text which is
printed when a location is described. Each entry uses 3 bytes plus the length of
the text. The entries are numbered from 0 upwards and location 0 is the location at
which the adventure starts. Whenever a new location is inserted a null entry for
that location is also made in the movement table.

D  The Movement Table
   This table has an entry for each location and each entry may either be empty
   (null) or contain a number of 'movement pairs'. A movement pair consists of a
   word value in the vocabulary followed by a location number and means that any
   word with that word value causes movement to that location. A typical entry
   could he SOUTH 6 EAST 7 ENTER 6 NORTH 5

---------------------------------------(43)----------------------------------------

   which means that SOUTH or ENTER or their synonyms cause movement to location 6,
   EAST or it's synonyms to location 7 and NORTH or it's synonyms to location 5.
   Each entry uses 3 bytes plus 2 bytes for each movement pair.

   Note 1. The movement pairs contain the word value not the actual word and if a
   word value is deleted from the vocabulary then all movement pairs which contain
   that word value are also deleted.

   Note 2. When the adventure is being played it is only the first recognised word
  (W1) which will cause movement.

   Note 3. If any movements are to be performed in the Event or Status tables using
   the action GOTO then those movements should be excluded from the Movement table.

E  The Object Text table

   This table, which has an entry for each object, contains the text which is
   printed when an object is described. Each entry uses 3 bytes plus the length of
   the text. An object is anything in the adventure which may he manipulated and
   objects are numbered from 0 upwards. Object 0 is assumed by the Interpreter to
   be a source of light. Whenever a new object text is inserted an entry of 'not
   created' is made for that object in the object start location table.

F  The Object Start Location table
   
   This table has a 1 byte entry for each object, which specifies the location at
   which the object is situated at the beginning of the adventure. An object can
   also start the adventure being worn, carried or not created.

G  The Event table

   This table (together with the Status table) is the main part of the database and
   each entry contains 2 word values followed by any number of conditions and then
   (normally) at least one action. When the adventure is played, if there is an
   entry in the table with the word values entered and the conditions specified are
   satisfied then the actions are performed. The conditions and actions that may be
   present and the effect that they have is fully specified in the description of
   the interpreter. The order of entries in the table is in ascending order of the
   first word value. Entries which have the same first word value are held in
   ascending order of the second word value. Entries with the same first and second
   word values are held in the order they were inserted into the database (i.e.
   they must be inserted in the order required). An example of the order of the
   table, with word values shown in brackets, is as follows:-

---------------------------------------(44)----------------------------------------

         LOOK (30) UP (9)
         LOOK (30) DOWN (10)
         LOOK (30) _ (255)
         GET (100) KEY (16)
         GET (100) LAMP (26)
         GET (100) LAMP (26)

   Each entry in the table has an overhead of 6 bytes and each condition and action
   uses 1, 2 or 3 bytes depending on the number of parameters.

   Note 1. If a word value is deleted from the vocabulary then all entries in the
   Event and Status tables which contain that word value are also deleted.

H  The Status table
  
   This table has exactly the same format as the Event table. When the adventure is
   played the Status table is scanned between turns to see if the Spectrum wants
   anything to happen. The Event table can he considered as the player's table and
   contains entries which are dependent on the words entered, while the Status
   table is the computer's table and contains entries which are independent of the
   words entered by the player. The words in the Status table can however be used
   to position entries at the required place and/or as a reminder of the purpose of
   the entries.

I The UDG's
  
   This table, which is 168 bytes long, contains the User Defined Graphics The
   UDG's cannot be changed with the Editor but the address at which they start is
   given when The Quill is loaded. The UDG's can be changed by using BASIC to
   set up the required values at the correct address and then saving them to tape.
   The file of UDG's can subsequently be loaded into the database using the Load
   Database command .

J  The Interpreter Messages

   This table contains the system messages used by the Interpreter e.g. Each entry
   uses 3 bytes plus the length of the text. The description of the interpreter
   shows when these messages are being used.

K  The Object Word Table

   This table has a 1 byte entruy for each object which holds the word value of the
   word associated with the object.

---------------------------------------(45)---------------------------------------- 

Detailed Description of the Editor

A  Vocabulary

   Words may be, inserted or deleted, synonyms of a word may be displayed or the
   vocabulary may be printed:-

   Insert I word No. (No. is in the range 1-254)

   If word is not already present in the vocabulary it is inserted with a word
   value of No.

   Delete D word

   If word is present in the vocabulary, it and it's word value are deleted. If
   synonyms of the word deleted are present in the vocabulary no further action is
   taken. However, if no synonyms are present, then:-

   a) all entries in the Event and Status tables which use this word value are also
      deleted.

   b) all movements in the movement table which use this word value are also
      deleted.

   c) All entries in the object Word Table which use this word value are set null.

   Show Synonyms S word
   
   If word is present in the vocabulary, it and all other words with the same word
   value are, displayed.

   Print P or L

   Printing is either to the screen using P or to the printer using L.

   Points to note:

   a) Be careful using delete as it can also affect the Event, Status and Movement
      tables.

   b) Words with a word value of less than 13 are assumed to be movement words by
      the Interpreter and cause the message "I can't go in that direction," to be
      printed instead of "I can't".
   
   c) Deleting words from the Vocabulary can sometimes take a long time (minutes).

B  Message Text

   Message texts may be inserted, amended or printed:-

   Insert I

---------------------------------------(46)---------------------------------------- 

   The next available message number is used and a null entry is made for it in the
   message text table. An automatic call to the amend routine is then made to allow
   the user to amend the null entry.

   Amend A mesno.
   
   The existing text for message mesno. is copied to the input buffer and displayed
   at the bottom of the screen for amending. When ENTER is pressed the existing
   text is replaced with the contents of the input buffer.

   Print P (mesno.) or L (mesno.)

   Printing is either to the screen using P or to the printer using L. Printing
   starts with the text for message mesno. or at the beginning if mesno. is not
   specified.

   Points to note:

   a) There is a limit of 255 messages.

C  Location Text
  
   Location texts may be inserted, amended or printed:-

   Insert I

   The next available location number is used and a null entry is made for it in
   both the movement table and the location text table. Processing then continues
   with an automatic call to the amend routine to allow the user to amend the null
   entry already set up in the location text table.

   Amend A locno.

   The existing text for location locno. is copied to the input buffer and
   displayed at the bottom of the screen for amending. When ENTER is pressed the
   existing entry is replaced with the contents of the input buffer.

   Print P (locno.) or L (locno.)

   Printing is either to the screen using P or to the printer using L. Printing
   starts with the text for Location locno. or at the beginning if locno. is not
   specified.

   Points to note:

   a) The start of an adventure is always at Location 0.

   b) There is a limit of 252 locations.

D  Movement table

   Movements may be amended or printed:-

---------------------------------------(47)---------------------------------------- 

   Amend A locno.
   
   The existing entry for Location locno. is decoded, copied to the input buffer
   and displayed at the bottom of the screen for amending. When ENTER is pressed
   the input buffer is vetted to be empty or to contain word locno. repeated any
   number of times. word must be present in the vocabulary and locno. must be
   present in the location text table. If there are no syntax errors the existing
   entry is replaced with an encoded copy of the input buffer (i.e. words changed
   to word values).

   Print P (locno.) or L (locno.)

   Printing is either to the screen using P or to the printer using L. Printing
   starts with the entry for Location locno. or at the beginnings if locno. is not
   specified.

   Points to note:

   a) A location text must be present for a Location before movements can be
      present.

   b) Any words in the Vocabulary may be used in the Movement table.

   c) When an entry is decoded (for Amend or Print) the word value is changed into
      the first word in the Vocabulary with that word value.

E  Object Text
   
   Object texts may be inserted, amended or printed:-

   Insert I

   The next available object number is used and a null entry is made for it in the
   object text table. An entry of 'not created' is also made for it in the object
   start location table. Processing then continues with an automatic call to the
   amend routine to allow the user to amend the null entry already set up in the
   object text table.

   Amend A objno.

   The existing text for Object objno. is copied to the input buffer and displayed
   at the bottom of the screen for amending. When ENTER is pressed the existing
   text is replaced with the contents of the input buffer.

   Print P (objno.) or L (objno.)

   Printing is either to the screen using P or to the printer using L. Printing
   starts with the text for Object objno. or at the beginning if objno. is not
   specified.

---------------------------------------(48)----------------------------------------

   Points to note:
   
   a) Object 0 is considered by the Interpreter to be a source of light.

   b) There is a limit of about 210 objects.

F  Object Start Location Table
---------------------------------------(48)----------------------------------------
   The location at which an object is situated at the start of the adventure may be
   amended or the object start location table may be printed:-

   Amend A objno. locno.

   The existing entry for Object objno. is replaced with locno. which must either
   be present in the location text table or be one of the special locnos. 252 not
   created, 253 worn or 254 carried.

   Print P or L

   Printing is either to the screen using P or to the printer using L.

   Points to note:

   a) An object text must be present for an object before it's start location can
      be present.

G  Event Table

   Entries may be Inserted, Amended, Deleted or Printed:-

   Insert I word1 word2

   Word1 and Word2 must be underline characters or words which are in the
   vocabulary. The word values of Word1 and Word2 (underline has a word value of
   255) are used to find the correct place in the table for the new entry to be
   created. If any entries already exist for Word1 Word2 then the new entry will be
   created after the existing entries. A null entry is created at the appropriate
   place and an automatic call made to the amend routine to allow the user to amend
   the null entry.

   Amend A Word1 Word2

   The first entry in the table with word values of Word1 and Word2 is copied to
   the input buffer and displayed at the bottom of the screen for amending. When
   ENTER is pressed the input buffer is vetted to be empty, in which case the
   existing entry is deleted, or to contain any number of valid conditions followed
   by at least one valid action. If there are no syntax errors the existing entry
   is replaced with the contents of the input buffer. Any following entries in the
   table with the same word values (i.e. Word1 and Word2) are then displayed in
   turn for amending in the same way.

---------------------------------------(49)----------------------------------------

The conditions that may be used are:-

    AT       locno.
    NOTAT    locno.
    ALGT     locno.
    ATLT     locno.
    PRESENT  objno.
    ABSENT   objno.
    WORN     objno..
    NOTWORN  objno.
    CARRIED  objno..
    NOTCARR  objno.
    CHANCE   percent       (percent, is in the range 0-99)
    ZERO     flagno.
    NOTZERO  flagno.
    EQ       flagno. value
    GT       flagno. value (value is in the range 0-255)
    LT       flagno. value

The description of the interpreter will tell you what these conditions do. The
actions that may be used are:-

    O        INVEN
    O        DESC
    O        QUIT
    O        END
    O        DONE
    O        OK
             ANYKEY
    O        SAVE
    O        LOAD
             TURNS
             SCORE
             PAUSE   value (value is 1/50 sec in the range 0-254)
             GOTO    locno.
             MESSAGE mesno.
    O        REMOVE  objno.
    O        GET     objno.
    O        DROP    objno.
    O        WEAR    objno.
             DESTROY objno.
             CREATE  objno.
             SWAP    objno.  objno.
             SET     flagno.
             CLEAR   flagno.
             PLUS    flagno. value
             MINUS   flagno. value (value is in the range 0-254)
             LET     flagno. value
             BEEP duration pitch (duration and pitch are in the range 0-254.
                                 Duration is in 1/100 sec. The value of pitch is
                                 obtained by taking the value you would use in a
                                 BEEP command, adding 60 then multiplying by 2.)

---------------------------------------(50)----------------------------------------
 
             BORDER   value
             PAPER    value
             INK      value
             CLS
             DROPALL
             PLACE    objno.  locno.
    O        AUTOG
    O        AUTOD
    O        AUTOW
    O        AUTOR

    The description of the Interpreter will tell you in detail what these actions
    do. However, please note that the actions marked ??will always cause an exit
    from the Event/Status table entry being processed so any following actions will
    11 never be performed. The actions marked ??may cause an exit from the table
    being processed.

    Delete

    To delete an entry amend it so that no conditions or actions remain.

    Print P (word1 (word2)) or L (word1 (word2))

    Printing is either to the screen using P or to the printer using L. Printing
    starts at the first entry with word values of Word1 Word2. If Word1 or Word2 is
    not specified then a word value of 0 is assumed. Thus P or L by itself starts
    at the beginning of the table.

    H Status Table

    The Status table is handled in exactly the same way as the Event Table.

I   Save Database

    Equivalent to the BASIC command SAVE f Code m,n where m is the start address of
    the database and n is the length.

J   Verify Database

    Equivalent to the BASIC command VERIFY f CODE m,n

K   Load Database

    Equivalent to the BASIC command LOAD f CODE i.e. it will load any file of bytes
    back to the address it was saved from. As well as loading a database this can
    be used to load a file of UDG's provided they have been saved from the correct
    address and with a length not greater than 168. This command can also be used
    to load the file called "You" supplied with The Quill, which will change the
    Interpreter messages so that they use "You" instead of "I".

    Very Important

    If BREAK is pressed or a tape error is detected during a load then the database
    held in memory will be corrupt and should not be used as it may corrupt the
    Editor and Interpreter.

---------------------------------------(51)----------------------------------------

    Under these circumstances the only Editor command which may be used safely is
    Load Database and this should be used until a database is loaded successfully.

L   Test Adventure

    "Do you require diagnostics?" is printed and any reply that doesn't start with
    "Y" is assumed to be negative. A jump is then made to the Interpreter. If
    diagnostics are required then whenever the Interpreter's input routine is used
    the bottom four lines of the screen will display the values of flags 0-30 and
    the value of the current location. The first of the four lines will contain the
    values of flags 0-7, the second line flags 8-15 the third line flags 16-23 and
    the fourth line flags 24-30 followed by the value of the current location in
    inverse. Note that the use of diagnostics will cause the screen to scroll
    earlier than usual.

    Very Important
 
    The only way back to the Editor from the Interpreter is by performing the action
    END in either the EVENT or STATUS tables.

M   Save Adventure

    The Interpreter and database arc saved to tape with the file name specified and
    in such a way that the Adventure will auto run when loaded I rom BASIC using
    LOAD""."".

N   Verify Adventure
    Verifies that an Adventure has been saved correctly

O   Bytes Spare

    The address of the first spare byte and the number of spare bytes are printed.
    If the address of the first spare byte is less than 32769 then the Adventure
    will fit into a 16k machine.

P   Objects Conveyable
   
    The number of objects that can be carried at any one time may be set to any
    value from 0 to 254. A value less than 10 will normally be used.

Q   Permanent Colours

    The BORDER, PAPER & INK colours may be set to any valid values. INK 9 (i.e.
    contrast) is recommended but please note that INK 9 behaves differently in the
    bottom part of the screen.
R   System Messages

    System message texts may be amended or printed:-

---------------------------------------(52)----------------------------------------

    Amend A no.
   
    The exsisting text for message no. is copied to the input buffer and displayed
    at the bottom of the screen for amending. When RETURN is pressed, the existing
    text is replaced with the contents of the input buffer.

    Print P (no,) or L (no.)

    Printing is either to the screen using P or to the printer using L. Printing
    starts with the text for message no. or at the beginning if no. is not
    specified.

    Points to note:

    a) The description of the Interpreter shows where these messages are used.

    b) Messages 30 and 31 are not really messages but contain the positive and
       negative replies used in the QUIT and END actions. Therefore be very careful
       changing these as action END is the only way back to the Editor from the
       interpreter.

    c) These messages may be changed to use "You" instead of "I" if you prefer,
       i.e. "You're not wearing it", or even into different languages.

    d) SM10 "(WORN)" should not include any colour control codes

S   The Object Word Table

    The word associated with an object may be amended or the table may be printed:-

    Amend A objno. word

    The existing entry for Object objno. is replied with the word value of word
    which must be present in the Vocabulary (or be an underline to set the entry
    to null).

    Print P or L

    Printing is either to the screen using P or to the printer using L. Each entry
    may be followed by GD or GDWR to indicate which of the actions AUTOG, AUTOD,
    AUTOW and AUTOR can effect that object. GDWR will be shown if the word value
    > 199 otherwise GD will be shown.

T   Switch Main Menu

    Displays the other Main Menu

(c) Return to BASIC
    
    Jumps to that BASIC NEW command.

---------------------------------------(53)----------------------------------------

Editor Error Messages and their meanings

BREAK                BREAK was pressed during a peripheral operation.

STOP in INPUT        CAPS SHIFT 6 pressed

Tape loading error   as BASIC. Note that a tape error during a LOAD means that the
                     database is corrupt

Database full        Insufficient room in the database for what you were attempting

Limit reached        The maximum number of locations, messages or objects is
                     already present

Out of Memory        Entry for Event Status or Movement table is too large for
                     input buffer (very unlikely to occur). The remedy is to use a
                     smaller entry

    Note 1    During input the Spectrum will give out a RASP if the screen and/or
              input buffer is full.

    Note 2    If an entry is present in the Database which is too big to fit on one
              screen, the Spectrum will give out a RASP when the entry is displayed
              at the bottom of the screen for amending.

    Note 3    If an abnormally large entry is inserted in the movement table using
              abbreviations e.g. N I W 6 S 4 etc and the abbreviations are deleted
              from the vocabulary, the movement entry (when decoded) i.e. NORT I
              WEST 6 SOUT 4 etc could be too big for the input buffer. If this
              happens an out of Memory message will be produced. The remedy is
              to reinsert the abbreviations in the vocabulary.

---------------------------------------(54)----------------------------------------

Notes

1)  The Quill starts up by printing the addess in memory where the UDG definitions
    are stored - this may vary from version to version so we will refer to it as
    'uda'. In order to change the udg's in the Quill you should follow the
    following step;

    i)   Define your udg's as normal (e.g. the Horizons character definer or BIN
         statements)
  
    ii)  Save them as a file on tape, this if done from basic will involve the
         statement show below;

             SAVE "name" CODE USR "a",168

    iii) Now clear out the machine and type the following (which forces the udg's
         to be sy 'uda')

    iv)  Now immediately;

             SAVE "name" CODE uda,168

         which produces a file on tape located at the address 'uda' which the Quill
         stores its udg's at.

     v)  Now load The Quill into the machine, select option 'K' (load database) and
         play the file you just saved. This will reload to the address it was saved
         from, thus overwriting the udg definitions which The Quill starts with.

2)   In order to highlight parts of the text with FLASH and BRIGHT you must use a
     a similar method to the Control codes used to change colour, i.e. use CAPS and
     SYMBOL to enter extended mode (cursor is flashing 'E') then press key 9 to
     turn on FLASH, if you keep your finger on CAPS you can turn on BRIGHT. Turning
     them off again is easy, you do exactly the same but key '8' instead of '9'!

3)   Printing to an RS232 printer can be done by using the following commands
     before loading The Quill

         OPEN #3;'T'
         FORMAT "T";x

     Note though that any CHR$ 6's in the text tables will be ignored by the
     Interface 1.

---------------------------------------(55)----------------------------------------

Notes

4)   A minimum BASIC program needed to run a saved adventure is:-
 
         CLEAR 24999: LOAD "" CODE: RANDOMISE USR 25063

5)   An entry in the Status table of the form:-
              
         _   _   Conds
                 Acts    DESC

      Will cause the Interpreter to loop. Pressing the Break key will escape from
      this loop.

---------------------------------------(56)----------------------------------------

Notes

---------------------------------------(57)----------------------------------------

Notes

---------------------------------------(58)----------------------------------------

Summary of Conditions, Actions and Flags

Conditions                       Actions

AT        locno.                 INVEN
NOTAT     locno.                 DESC
ATGT      locno.                 QUIT
ATLT      locno.                 END
PRESENT   objno.                 DONE
ABSENT    objno.                 OK
WORN      objno.                 ANYKEY
NOTWORN   objno.                 SAVE
NOTCARR   objno.                 TURNS
CHANCE    percent                SCORE
ZERO      flagno.                PAUSE     value
NOTZERO   flagno.                GOTO      locno.
EQ        flagno. value          MESSAGE   mesno.
GT        flagno. value          REMOVE    objno.
LT        flagno. value          GET       objno.
                                 WEAR      objno.
                                 DESTROY   objno.
                                 CREATE    objno. 
                                 SWAP      objno.  objno.
                                 SET       flagno.
                                 CLEAR     flagno.
                                 PLUS      flagno. value
                                 MINUS     flagno. value
                                 LET       flagno. value
                                 BEEP      duration pitch
                                 BORDER    value
                                 PAPER     value
                                 INK       value
                                 CLS
                                 DROPALL
                                 PLACE     objno.  locno.
                                 AUTOG
                                 AUTOD
                                 AUTOW
                                 AUTOR

---------------------------------------(59)----------------------------------------

Flags

Flag 0      If this f lag is set to zero it is light. Any other value means it's
            dark
Flag 1      holds count of objects carried
Flag 2      decreased when a location is described
Flag 3      decreased when a location is described and it's dark
Flag 4      decreased when a location is described and it's dark and object 0 is
            absent
Flags 5-8   decreased each turn
Flag 9      decreased each turn when it's dark
Flag 10     decreased each turn when it's dark and Object 0 is absent
Flags 11-29 ordinary flags
Flag 30     holds the score
Flag 31     holds turns count LSB
Flag 32     holds turns count MSB

---------------------------------------(60)----------------------------------------
                           ____________________________
                          |                            |
                          |          GILSOFT           |
                          |                            |
                          |   Home Computer Software   |
                          |____________________________|

                              
                                (c) 1983 GILSOFT


                               ALL RIGHTS RESERVED
                              UNAUTHORISED COPYING,
                                HIRING OR LENDING
                               STRICTLY PROHIBITED.


                                     GILSOFT
                                Te: (0446) 732765

-----------------------------------------------------------------------------------

Complete Instructions typed in by Paul Thompson, April 2003
