                                                           Ŀ
 USA/FLT                 United Software Association                 USA/FLT 
                            Fairlight PC Division                            
                              USA-DoX Department

                               Proudly Presents

                      Complete Virtual Reality Studio Dox

                                    From
                                                                             
 USA/FLT                          Domark                             USA/FLT 


                                INTRODUCTION
                                ~~~~~~~~~~~~
          To Load from a floppy drive, insert the disc labelled with the
  proper graphics format for your system into the floppy drive. Type
  STUDIO and press Enter to load, then answer the on-screen prompts. To
  install on a hard drive, insert the disc labelled with the proper
  graphics format for your system into the floppy drive. Type INSTALL and
  press Enter, then answer the on-screen prompts. To load from a hard
  drive, from your C: or D: prompt, type STUDIO and press Enter. (This
  will change your computer into the subdirectory where the Virtual
  Reality Studio files are). Type STUDIO and press Enter and the program
  will load.

          The system allows you to represent a virtual world that you can
  move around and interact with. This world is represented in three
  dimensions, known as X, Y and Z.

          X is equivalent to left and right
          Y is equivalent to up and down.
          Z is equivalent to near and far.

  AREAS:
  ~~~~~~  The world is divided into regions known as AREAS. Each are is
          like a box and has a set size of 8192 (x) * 8192 (y) * 8192 (z)
          units. These units area an arbitrary form of measurement that
          could easily be thought of as being millimeters, centimeters or
          meters. One unit is the smallest distance that you can move
          through.
  XYZ:
  ~~~~    A co-ordinate of x=0 y=0 z=0 (View:0000,0000,0000) represents
          the nearest bottom, left hand corner of an area. The world is
          seen from a single viewpoint which occupies on unit, looking in
          different directions. The direction is represented bye 3 angles:

                  x rotation represents looking up or down (pitch)
                  y rotation represents looking left or right (yaw)
                  z rotation represents looking sideways (roll)

          These rotations are measured in degrees and 360 degrees means
          that you have turned full circle. On the PC rotations are
          limited to multiples of 5 degrees steps.
          There can be up to 254 different AREAS defined by the user. An
          AREA can be used to represent a room of a house or an outdoor
          region. You cannot travel beyond the boundary of an area.
          AREAS have no geographical relation to each other, but are tied
          together by ENTRANCES. An ENTRANCE has a position and view
          direction. The user can then be placed at an ENTRANCE position
          in a specific AREA by some form of trigger.

  OBJECTS:
  ~~~~~~~~Objects can be placed into an area to make the environment.
          These are solid and, as such, cannot be passed through when
          moving. Objects can have different sizes, in x, y and z
          directions.

          There are several basic object types, PRIMITIVES, which can be
          re-sized and combined to make larger, more complicated, objects
          such as buildings, trees, etc. The primitive objects consist of:

                  Cuboids, Pyramids, Rectangles, Lines, Triangles,
                  Quadrilaterals, Pentagons, Hexagons, Sensors.

          Objects can exist in three states: Visible, Invisible or
          Destroyed.

                  Visible - The object is present in solid form
                  Invisible - The object in not present but can be made
                              present by being made visible.
                  Destroyed - Once destroyed and object is invisible and
                              can not be made visible again.

          Each side of an object can have a different shade. A shade is
          made up of a mixture of colors available on the computer used.
          The first shade (number 0) has a special property in that it is
          not drawn. The can be used to improve the speed of drawing the
          3D world when used on object sides which are never see. Bye
          painting all of the sides of an object with shade 0 it is
          possible to have an object which cannot be seen but which is
          solid and cannot be moved through. In order to conserve memory,
          common objects may be stored in a reserved area known as the
          GLOBALS AREA ( AREA 255). These objects can be placed in any
          area by using the GLOBAL option in the editor. Events or
          reactions can be caused by interacting with object within the
          environment. Objects may be triggered to respond to being shot,
          activated, collided with or walked on. In order to shoot or
          activate an object, a sight mode is selected (by pressing the
          space bar) whereupon a cross-hair appears and is controlled by
          using the normal movement keys or joystick. After targeting an
          object, the fire button or 0 key will shoot at that object. To
          activate a targeted object the A key is pressed. However, an
          object will only be activated it the object is within a
          predefined distance know as the ACTIVE RANGE. A SENSOR is a
          special type of object that will detect your presence if you are
          within a set distance from it. This allows a reaction to occur
          when approaching an object. A sensor can also be set to respond
          by firing back at you at a given rate.

  CONDITIONS - THE FREESCAPE COMMAND LANGUAGE
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          In order to interact with objects, checks and actions have to be
          defined in the form of short programs called CONDITIONS.
          FCL has a very simple but powerful set of commands which allow
          you to manipulate and respond to any occurrences. There is also a
          bank of memory which can be used by the user to store and view
          information relating to the environment and events. Each memory
          cell is call a VARIABLE. A variable can store a value between 0
          and 255. There are 128 of these cells and they are numbered 0 -
          127. The first 112 are free for the user to use whilst the last
          16 are defined and used by the system. There are various
          categories of instructions in FCL and they are as follows:
          Variable manipulation:

                  This set of instructions acts upon values stored in the
                  variable memory cells. These include commands to add to
                  and subtract values, comparisons of values and setting a
                  value.

          Object manipulation:
                  This set of instructions can alter the attributes of a
                  specified object. There are instructions to visiblise,
                  invisblise, destroy and swap the visibility of object.

          Vehicle commands:
                  This set of instructions affects the type of movement
                  you  have within the environment. They allow you to set
                  movement to crawling, walking, running, and flying.
                  A command is also available to move the user to a
                  specified ENTRANCE in a specified AREA.

          Condition instructions:
                  This set of instructions allow the execution of segments
                  of programs depending on the outcome of specific checks

          Miscellaneous commands:
                  This set of instructions deals with functions such as
                  printing messages, setting colors, playing sounds and
                  setting the TIMER. The timer is a device that can be set
                  to trigger a set of conditions at a defines interval of
                  time.

  CONDITION ROUTINES:
  ~~~~~~~~~~~~~~~~~~~
          General conditions:
                  These are a set of conditional lists which are executed
                  all the time. Conditions used in this form are useful
                  for checking for end game situations. The first
                  condition in this set is only executed when the
                  environment is reset. This allows you to initialize any
                  variables, etc.

          Local conditions:
                  This is a set of conditional lists which are also
                  executed all the time. However, there is a set of local
                  conditions for each AREA. Only the set of conditions
                  associated with the current area will be executed. Local
                  conditions are useful for checking and acting upon
                  collisions, etc.

          Instruments:
                  An instrument is a device which display information to
                  the user, instruments are not visible whilst in the
                  editor, but are visible on the test screen or in a
                  standalone environment. There are 2 types of instrument:
                  Bar:

                          Bar instruments are used to display the value
                          held in a variable as a bar of a length.

                  Numerical:
                          Numerical instruments are used to display the
                          value held in a variable as a decimal figure.
          Text:
                  Text is used to display messages or print commands in
                  the specific text window.

  LIMITATIONS TO FREESCAPE:
  ~~~~~~~~~~~~~~~~~~~~~~~~~
          As freescape uses extremely complex math algorithms to represent
          the 3D world, there are a few limitations:

                  Objects should not overlap. The bounding cube of one
                  object should not occupy the same space as any other.
                  The number of visible objects in any one AREA is limited
                  due to memory. Excess objects are not drawn.

  MAIN SCREEN:
  ~~~~~~~~~~~~
          The main screen is divided up into the following areas:

          Menu selector:        This is the top text line which contains
                  the heading for the various menus. To access one of the
                  menus simply move the mouse over the desired heading and
                  the relevant menu will open. Moving the mouse over the
                  options within the menu will highlight them and then
                  pressing the mouse button will select the option. Moving
                  the pointer out of the boundary of the menu will cause
                  it to retract.

          View window:          Below the menu selector you will see the
                  view window. This area is always used to display the
                  current freescape view as seen from whichever camera is
                  currently selected.

          Information bar:      Below the view window is the information
                  bar. This initially reads area 001 pos:4000,0300,4000
                  rot:000,000,000. This shows the current area your
                  present viewpoint co-ordinates and the angle of view.
                  When in edit mode this line will change to read the
                  object name you are editing, its position and its size.
                  The information will be useful when animation or other
                  more advanced uses of the system are required.

          Mode/Freescape icons: Below the information bar you will see a
                  series of icons. These are the mode and freescape icons.
                  The mode icons are on the left of the screen. Excl is
                  useful when editing object. Clicking on this icon will
                  exclude all background information and leave the
                  currently selected object to be edited. Just to the
                  right of this you will see highlight or highlight which
                  when activated all highlight the selected object for
                  ease of identification. Just to the right of these you
                  will see a set of small icons in the form of arrows.

                  These icons are very useful. When an object is selected,
                  if these arrows are activated they will lock onto the
                  current object from the front, rear, either side, or top
                  and bottom. Alongside these you will see two further
                  icons which are mode and step. Mode toggles between
                  walk, fly1, fly2, cam1 through cam5 and lock, and step
                  toggles between user and fine. User is the standard
                  speed of operation movement which is initially set by
                  the preferences menu which is found user general on the
                  menu bar. Fine is used for fine work when only a small
                  movement is required in editing or movement.

                  WALK allows you to move along the ground, with the
                  restriction of gravity, you can climb onto objects and
                  fall off them. Your height above the floor is restricted
                  to between 64 and 280 units, corresponding to a crouched
                  and standing position.

                  FLY1 removes restrictions on gravity. You can now fly as
                  if you were in a helicopter with complete freedom in 3
                  dimensions. Forward motion is restricted to a horizontal
                  plane, so that you can fly forward and look down at the
                  same time.

                  FLY2 is very similar to FLY1, except that you can now
                  fly in exactly the direction you are looking, as though
                  you were in an airplane.

                  CAM1 through CAM5 controls 5 cameras which can be placed
                  anywhere. Control is similar to FLY1, except that the
                  cameras are allowed inside objects and outside the area.
                  When you change to another view the camera's position is
                  saved, so that on returning to that camera the view
                  position is retained.

                  WALK, FLY1 and FLY2 have collision detection built in;
                  they will not travel through solid objects. There modes
                  are the only 3 possible within a runnable program or the
                  test screen.

                  To the right of the mode icons you will find the
                  freescape icons. The first of these is a set of arrows
                  which are used for your movement within the environment.
                  Using these arrows you can move left, right, forwards,
                  backwards, rotate left, rotate right, make a complete
                  u-turn, move yourself up or down and toggle the
                  cross-hair cursor on and off. To the right of these you
                  will see the rest of the freescape icons which control
                  your view movement. These allow you to look up, down,
                  roll and clicking on the center icon will return your
                  view to the center view.

                  Note that the edit and freescape icons remain on the
                  screen and can be used at most times during editing.
                  Below the mode and freescape icons you will see the
                  shortcut icons. These icons are marked, SELECT, COPY,
                  CREATE, EDIT, TEST, RESET, COPY, CREATE, EDIT, TEST,
                  RESET, CONDITION, DELETE, ATTRIBUTES, and COLOR. These
                  are shortcut icons which duplicate the more commonly
                  used functions which are also available from the menus.

  THE USER INTERFACE:
  ~~~~~~~~~~~~~~~~~~~
          File selector:
                  The file selector will appear when SAVE DATA, LOAD DATA,
                  LOAD OBJECT or LOAD BORDER is selected from the file
                  menu at the top of the view window. The first files in
                  the current directory will be displayed.

          Alert boxes:
                  During environment creation there will be instances
                  where something you have attempted to do will be either
                  not possible or irrevocable. In these instances and
                  alert box will appear with information about the
                  function request. If the function is irrevocable, the
                  alert box will give you the chance to reconsider the
                  action.

          Dialog boxes:
                  These are various parts of the environment creation
                  which will require input from you to set parameters
                  relating to the current function.

          Text editing:
                  Text editing is used to change commands and usually
                  takes place in the lower half of the screen directly
                  below the view window after selecting any of the icons
                  which bring up the text window. The text window will
                  come up if you are editing either conditions or
                  animations. An inverse square will indicate you current
                  cursor position.


          TEXT EDITING CONTROLS
          ~~~~~~~~~~~~~~~~~~~~~
                  (left arrow)   move cursor left one space
                  (right arrow)  move cursor right one space
                  (up arrow)     move cursor up one space
                  (down arrow)   move cursor down one space
                  (page up)      move cursor up one page
                  (page down)    move cursor down one page
                  (return)       insert a line
                  (b.space)      delete the character before the
                                 cursor
                  (delete)       delete the character under the
                                 cursor
                  (home)         move cursor to start of text
                  (end)          move cursor to end of text
                  (esc)          cancel edit
                  (shift + return) accept edit
                  (f1 to f10)    insert some of the more common
                                 functions

  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

                             FILE MENU OPTIONS
                             ~~~~~~~~~~~~~~~~~
  Save data:   To save all the data in memory to disc as a datafile.
  Load data:   To load datafile from disc.
  Save object: To save a single Object or Group to disc for reloading
               reloading later ( or into another area or datafile)
  Load object: Load a specified Object or Group into the current data.
  Load border: Load a picture file from disc to use as a border in the
               TEST screen.
  Make:        To make a stand alone environment from the data in memory.
  Clear all:   To clear the current data from memory and replace with the
               default area.
  Delete file: Deletes an unwanted datafile from disc.
  About:       Displays credits
  Quit:        Exit program

                               GENERAL MENU OPTIONS
                               ~~~~~~~~~~~~~~~~~~~~
  Preferences:      Set up specific parameters used in the studio to your
                    own preference.
  Reset:            Resets the game/environment to the initial position as
                    set in the defaults.
  Create condition: Create a new general condition.
                    General conditions are executed each frame regardless
                    of the players position with the exception of the
                    initial condition specified in the defaults section.
  Edit condition:   Edit a general condition.
  Delete condition: Deletes a gener condition.
  Defaults:         Set up the default game variables.
                    1. the climb ability
                    2. the safe fall distance
                    3. the activate range
                    4. the timer frequency
                    5. the start area
                    6. the start entrance
                    7. the initial mode
                    8. the initial general condition number
  Controls:         Set up the controls that are used in the test screen.
  Create instrument:Allocate a new instrument. Must edit to be displayed.
  Edit instrument:  To edit the various parameters associated with
                    instruments.
  Set view window:  To set the size and position of the view window in the
                    test screen.
  Test:             Go to the test screen allowing the environment to be
                    tested.

                                 AREA MENU OPTIONS
                                 ~~~~~~~~~~~~~~~~~
  Create area:      Create a new area. All new areas contain an entrance
                    near the centre (001) and a base (cuboid 001). if
                    these are not required they may be delete.
  Edit area:        Displays a list of areas and allows the user to edit
                    the area specific information.
                    You may edit OBJECTS, ENTRANCES, and ANIMATORS
  Delete area:      Delete a specified area.
  Goto area:        To move viewpoint to another area.
  Area colors:      To re-color the solid base colors in the current area.
  Create condition: To create a new area condition, which are executed
                    each frame in the current area.
  Edit condition:   Edit an area condition.
  Delete condition:  Delete a selected area condition
  Create entrance:  Create a new entrance in the current area. The new
                    entrance will contain the position and view direction
                    of the viewpoint at the time of its creation. First
                    look in the desired direction, then select create
                    entrance.
  Edit entrance:    Allows you to edit an existing entrance. You can edit
                    name, position and rotation.
  Delete entrance:  Delete a specified entrance.
  Goto entrance:    Move to a entrance within the current area.
  Create animation: Create a new animator.
  Edit animation:   Allows editing of animation commands.
  Delete animation: Delete a animation.

                                 OBJECT MENU OPTIONS
                                 ~~~~~~~~~~~~~~~~~~~
  Create object:    Create a new object in the current area. A group of
                    objects can be created by selecting group.
  Edit object:      Edit a specified object.
                    Point:  Alters to position of the point on the info
                            bar.
                    Turn:   Rotates the object in the direction of the
                            arrows though 90 degrees.
                    Shrink: Decreases the size of the object in the
                            direction of the arrows.
                    Stretch:Increases the size of the object in the
                            direction of the arrows.
                    Move:   Move the object in the direction of the arrows
                    Undo:   Undo any editing made prior to selecting
                            another object or using the okay icon.
                    Select: Provides the option to select another object.
                    Okay:   Commit all editing and return to main screen.
  Delete object:    Delete a specified object.
  Select object:    Choose a new selected object for use in highlight,
                    exclude or lock.
  Copy:             Create a duplicate of an object or group.
  Condition:        To edit the condition on an object.
  Attributes:       Alter the position and status of an object.
                    NAME, SIZE, POSITION, STATUS, INITIAL STATUS, ANIMATED
                    RANGE, SPEED, DIRECTION, EFFECT.
  Color:            Color objects in the current area. A color editing
                    panel will be displayed at the bottom of the screen
                    displaying available colors. Base colors are combined
                    to give various shades. The small 'l' in the box for
                    color 0 indicates that color 0 is invisible. Invisible
                    facets are not drawn. Sides of objects that can never
                    be seen should be colored invisible to increase
                    efficiency.
  Edit group:       Alter the contents of a specified group.

  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

                     THE FREESCAPE COMMAND LANGUAGE (FCL)
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Object Conditions: These commands are executed when some sort of
   ~~~~~~~~~~~~~~~~~~ interaction with the specified object takes place.
                      The interaction options are:  SHOT, ACTIVATED,
                      COLLIDED.
     Area Conditions: These commands are executed each frame while the
     ~~~~~~~~~~~~~~~~ viewpoint is within the confines of the specified
                      area.
  General Conditions: There commands are executed every frame regardless of
  ~~~~~~~~~~~~~~~~~~~ the viewpoint position.


  CONDITIONS
  ~~~~~~~~~~
  ACTIVATED? (ACT?) - Class trigger interrogator
  ~~~~~~~~~~~~~~~~~
  Format: if ACTIVATED?
          then commands...
          else commands...
          endif
  Function: Check whether the selected object has been activated. This
            happens when the cursor is over the object and the right
            button is pressed. The selected object must be within the
            activate range to be affected.

  ADDVAR (ADD) - Class variable command
  ~~~~~~~~~~~~
  Format: ADDVAR (P1,P2)
  Function: Perform addition on 2 supplied values, the p1 is added to p2.
  if p2 is a variable specifier then the addition is stored in p2, else
  the result is lost but the flags are still altered.

  AGAIN - Class loop command
  ~~~~~
  Format: loop (p1)
          commands....
          AGAIN
  Function: Used to terminate a loop section.

  AND - Class condition command
  ~~~
  Format: if condition
          AND condition
          then commands
          endif
  Function: combines the result of 2 or more condition checking commands,
  returns TRUE only if all of the checks are TRUE

  ANDV - Class variable command
  ~~~~
  Format: ANDV (P1,P2)
  Function: Performs a logical AND on the 2 values supplied, p1 is anded
  with p2, if p2 is a variable the result is stored in p2.

  COLLIDED? (COL?) - Class trigger interrogator
  ~~~~~~~~~~~~~~~~
  Format: if COLLIDED?
          then commands...
          endif
  Function: This checks the collided flag

  DELAY - Class time command
  ~~~~~
  Format: DELAY (P1)
  Function: Halts all functions for the specified time. p1 is in 1/50 sec

  DESTROY - Class object commands
  ~~~~~~~
  Format: DESTROY (P1 [,P2])
  Function: sets the destroyed flag of the object (p1) in area (p2)

  DESTROYED? - Class object interrogator
  ~~~~~~~~~~
  Format: if DESTROYED? (P1 [,P2])
          then commands...
          else commands..
          endif
  Function: Checks to see if an object is destroyed

  ELSE - Class conditional statement
  ~~~~
  Format: if condition
          then commands
          ELSE commands
          endif
  Function: exists only as part of if/then/else/endif. It marks the start
  of commands to execute only if the previous condition was false.

  END - Class condition command
  ~~~
  Format: if condition
          then commands
          else commands
          END
  Function: exits the entire command list process on a specific condition

  ENDGAME - Class player command
  ~~~~~~~
  Format: ENDGAME
  Function: To reset the environment, and end the game

  ENDIF - Class condition statement
  ~~~~~
  Format: ENDIF
  Function: terminates a conditional section of logic

  EXECUTE (EX) - Class branch command
  ~~~~~~~~~~~~
  Format: EXECUTE (P1)
  Function: Terminates command execution, and continues with the command
  list on object (P1). Note flags and position of original object are
  still used for the object commands

  GOTO -Class player command
  ~~~~
  Format: GOTO (P1 [,P2])
  Function: Move the player to the defined entrance P1 at the defined area
  P2

  IF - Class condition statement
  ~~
  Format: IF condition
          then commands
          endif
  Function: Marks the start of a condition statement

  INCLUDE - Class animation command
  ~~~~~~~
  Format: INCLUDE (P1)
  Function: This command is animation specific. The command includes the
  specified object into the animation list. This command should be used at
  the very beginning of an animation before the START command.

  INVIS (IV) - Class object command
  ~~~~~~~~~~
  Format: INVIS (P1 [,P2])
  Function: Sets the invisible flag on object P1 in area P2

  INVIS? - Class object interrogator
  ~~~~~~
  Format: if INVIS? (P1 [,P2])
          then commands
          endif
  Function: Checks the invisible flag for object P1 in area P2.

  LOOP - Class loop command
  ~~~~
  Format: LOOP (P1)
  Function: Marks the start of a loop section. The commands between the
  loop and again will be executed P1 times

  MODE - Class player command
  ~~~~
  Format: MODE (P1)
  Function: Alters the current movement mode: 1 - walk, 2 - fly1, 3 - fly2

  MOVE - Class animation command
  ~~~~
  Format: MOVE (P1,P2,P3)
  Function: Moves the members of the current animation specified by the
  include command by x,y, and z

  MOVETO - Class animation command
  ~~~~~~
  Format: MOVETO (P1,P2,P3)
  Function: Moves the members of the current animation specified by the
  include command to position x,y, and z.

  NOTV - Class variable command
  ~~~~
  Format: NOTV (P1)
  Function: Performs a logical NOT on P1

  OR - Class condition command
  ~~
  Format: if condition
          OR condition
          then commands
          endif
  Function: Combines 2 or more condition checking commands, and returns
  true if any of the conditions are true.

  ORV - Class variable command
  ~~~
  Format: ORV (P1,P2)
  Function: Performs a logical OR on the 2 values specified.

  GETXPOS,GETYPOS,GETZPOS - Class object interrogator
  ~~~~~~~~~~~~~~~~~~~~~~~
  Format: GETXPOS (V1,P2 [,P3]) - variable, object, area
  Function: Store the position of an object P2, in area P3 along the x,y
  and z axis in the variable V1.

  PRINT - Class instrument command
  ~~~~~
  Format: PRINT ("message...",P1)
  Function: Print a message to a defined text window

  RESTART - Class animation command
  ~~~~~~~
  Format: RESTART
  Function: Reset the animation to the position set by the START command
  or the start of the animation.

  REDRAW - Class instrument command
  ~~~~~~
  Format: REDRAW
  Function: Force a redraw of the freescape view window

  REMOVE - Class animation command
  ~~~~~~
  Format: REMOVE(P1)
  Function: Remove the P1 object from the animation.

  SOUND - Class sound command
  ~~~~~
  Format: SOUND(P1)
  Function: Perform the sound P1

  SETVAR (SET) - Class variable command
  ~~~~~~~~~~~~
  Format: SETVAR (P1,V2)
  Function: Sets the variable V2 to the value of P1.

  SHOT? - Class trigger interrogator
  ~~~~~
  Format: if SHOT?
          then command
          endif
  Function: Check to see if an object has been shot.

  START - Class animation command
  ~~~~~
  Format: START
  Function: Marks the beginning of the animation command list.

  STARTANIM - Class animation command
  ~~~~~~~~~
  Format: STARTANIM (P1[,P2)
  Function: Start an animation controller going.

  STOPANIM - Class animation command
  ~~~~~~~~
  Format: STOPANIM(P1,[P2])
  Function: Stop an animation controller.

  SUBVAR (SUB) - Class variable command
  ~~~~~~~~~~~~
  Format: SUBVAR (P1,P2)
  Function: Perform a subtraction on the 2 values, P1 is subtracted from
  P2.

  SYNCSND - Class sound command
  ~~~~~~~
  Format: SYNCSND (P1)
  Function: Execute the sound P1 in sync with the next complete frame
  update.

  THEN - Class condition statement
  ~~~~
  Format: if condition
          THEN commands
          endif
  Function: Checks the status of True on the condition above. Executes
  commands following then and before else and/or endif

  TIMER? - Class trigger interrogator
  ~~~~~~
  Format: if TIMER?
          then commands
          endif
  Function: Checks the timer flag, returns a true if a timelapse of the
  amount specified in the setup section has passed

  TOGVIS (TOG) - Class object command
  ~~~~~~~~~~~~
  Format: TOGVIS(P1 [,P2])
  Function: Toggles the visibility of P1 object in P2 area.

  TRIGANIM - Class animation command
  ~~~~~~~~
  Format: TRIGANIM (P1)
  Function: Sets the trigger flag for use in the WAITTRIG command. Useless
  unless waittrig command is used.

  UPDATEI - Class instrument command
  ~~~~~~~
  Format: UPDATEI(P1)
  Function: Update instrument P1 in the test screen

  VAR=? (V=?) - Class variable command
  ~~~~~~~~~~~
  Format: if VAR=? (P1,P2)
          then commands..
          endif
  Function: Compare P1 and P2 and return true if P1 = P2

  VAR>? (V>?) - Class variable command
  ~~~~~~~~~~~
  Format: if VAR>? (P1,P2)
          then commands..
          endif
  Function: Compare P1 and P2 and return true if P1 > P2

  VAR<? - Class variable command
  ~~~~~
  Format: if VAR<? (P1,P2)
          then commands..
          endif
  Function: Compare P1 and P2 and return true if P1 < P2

  VIS (V) - Class object command
  ~~~~~~~
  Format: VIS (P1[,P2])
  Function: Make object P1 in area P2 visible

  VIS? - Class object interrogator
  ~~~~
  Format: if VIS? (P1[,P2])
  Function: Checks to see if object P1 in area P2 is visible

  WAIT - Class time command
  ~~~~
  Format: WAIT
  Function: This command halts processing to the current command list and
  stores the information on an internal stack. The processing is then
  allowed to continue, when the next frame comes round execution of the
  command list will continue from the command following the wait command

  WAITTRIG - Class animation command
  ~~~~~~~~
  Format: WAITTRIG
  Function: Checks the trigger flag. If the flag has been set by the
  triganim command, the flag will be cleared and execution will continue,
  else the execution will be stopped at the waittrig command. The next
  frame will start at the waittrig command awaiting the flag set by the
  triganim command

  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

                                  TUTORIAL
                                  ~~~~~~~~
          This tutorial for the Studio covers the beginning of the Studio
  games.

          In area 001 there is a collection of colored boxes. These all
  have the same condition associated with the. The yellow box, for
  example is cuboid 018, and has the following condition:

  if shot/        starts the if/then statement, so if the box is shot..
  then invis (18) then make the box invisible
  sound (5)       adds a sound effect to coincide with the shot
  execute (45)    executes the conditions of object 045
  endif

          The conditions of object 045 allow the revelation of the hidden
  doorway. If is important to note that object 045 is never visible and is
  used to store the following routine which can be used by all the colored
  cuboids in front of the hidden doorway.

  if invis (17)   these lines are asking if all the boxes have been
  and invis (18)  shot, ie made invisible
  and invis (19)
  and invis (20)
  and invis (21)
  and invis (22)
  then vis (16)   and if they have been then make the secret door visible
  loop (6)        sets up the loop counter
  togvis (16)     this is to toggle the visibility of the door
  sound (3)       waits for 1/60 of a second
  wait
  sound (1)
  wait            the 2 wait commands count for 2/60 of a second
  wait
  again           repeats the loop 6 times
  endif

          From the loop (6) command to the end of the condition above, the
  door will have been flashed 6 times by toggling the visibility. Because
  the loop is executed an even number of times the door is visible when
  the loop has been exited.

          The door behind the boxes is object 016 and has, like all other
  doorways, the following condition:
  if collided?
  then goto (1,12) so you go to area 12 if you go through the door
  endif

          We are now at area 012. The entrance position has been defined
  using the edit entrance option from the top of the screen. This means
  that when we collide with the object 016 (the door), we enter area 12 at
  position 7932,505,6699.

          It is possible to travel along the walkway until you get to a
  series of cuboids that move to and fro blocking your path. The first of
  these is the blue cuboid 009. This has the following condition:

  if collided?
  then sound (5)
  addvar (10,v11)         adds 10 to variable 11 (number of times shot)
  endif

          This effectively causes damage to the player.

          By examining the attributes on cuboid 009 we see that it is
  created as moveable and starts its animation from a position
  7580,5120,6040. The animation for this object is as follows:

  include (9)             includes object 009 the blue cuboid
  start                   to start the animation
  loop (10)               telling the program to do the next cmd 10 times
  move (-50,0,0)          moves the cuboid 50 units in x direction
  again                   repeats the loop
  loop (10)               creates a new loop
  move (50,0,0)           moves the cuboid in the opposite direction
  again                   repeats the loop
  restart                 tells the program to start the animation again

          Once we get past the cuboids we see a pyramid 018 which travels
  up and down on a green lift (cuboid 016). The condition for pyramid18 is:

  if activated?           if this object is activated
  then invis (18)         then make it disappear
  print("you find some rope")
  setvar (25,v35)         v35 is a frame counter
  sound (4)               adds a sound effect
  setvar(1,v42)           this sets a marker to say we have the rope
  endif                   ends the if/then statement

          The value of variable 35 has been set at 25. The general
  condition number 2 will count down this variable on every frame update
  until it reaches 25. When v25 reaches the value of 2 (after 25 frames)
  the message area is cleared.

          Now go back to area 001 by using the goto area command from the
  pull down menus at the top of the screen. Move round to rctngl 015
  which acts as a doorway on the outer wall. The conditions for rctngl 015
  are:

  if collided?            ie, you collided with this object
  then goto (1,4)         then the program takes you to entrance 1 of area
                          4
  endif                   this ends the if statement

          So by colliding with this door (rctngl 015) then we go to area
  4. look around this area, on the far wall you will see a red triangle
  and a slot. The red triangle is trngl 046. The condtions for this are as
  follows:

  if activated?
  then if var=? (v45,0)   v45 is set to 1 if the security pass is held
  the print("access denied: pass required")
  sound (3)
  setvar (20,v45)         primes the clear message window
  else print ("++ access granted ++)
  set var (10,v35)        clears message window in ten frames
  loop (6)                this makes the sound happen 6 times
  sound (4)
  delay (4)
  again
  sound (1)
  invis (46)              remove the red triangle
  vis (47)                replace by a green triangle
  invis (41)              removes block so you can get to the shuttle
  endif
  endif

          The next line to the triangle is 049 rctngl, and the condition is
  simply:

  execute (46)            this executes the condition of object 046 which
                          is the red triangle mentioned above.

          If we now go back to area001 we can make our way to area 003.
  Firstly we have to go to rctngl 024 which acts as another doorway by
  using the following condition:

  if collided?
  then vis (9,11)         these following lines make visible the three
  vis (10,11)             pyramids and sensors so that if they have
  vis (11,11)             been previous shot and made invisible
  vis (14,11)             then they can be brought back into action
  vis (15,11)
  vis (16,11)
  goto (1,11)             go to entrance 1 of area 11
  endif

          The goto statement above took us to area 011, a long tunnel.
  Along the top of the tunnel are 3 laser-shooting pyramids, the first of
  which is pyrmid 011. This pyramid has the following conditions:

  if shot?                if the pyramid is shot
  the invis (11)          then make it invisible
  sound (1)               adds a sound
  addvar (50,v34)         adds 50 to the score
  endif

          Once we get past the shooting pyramids then at the end of the
  tunnel we see another door. Quad 004. Once again this has a simple
  condition to take us to another area:

  if collided?            if we collided with quad 004
  then goto (1,3)         then go to area 3

          We are now in area 003, the cliffs scene. Under the palm tree is
  a block of gold., pyrmid 058. This has the following conditions, and
  shows how to control your inventory:

  if activated?
  then print('you find a gold bar")
  sound (4)
  setvar (15,v35)         primes the message clear counter
  addvar (1,v33)          adds 1 to number of gold found (instrument 3)
  addvar (300,v34)        adds 300 to the score
  invis (58)              makes the object invisible as we have picked it
                          up

          After exploring the cliffs we find a small boat floating on the
  sea. If we walk onto the boat (object 051) a new CONDITION is activated:

  if collided?
  then setvar (1,v250)
  setvar (0,v249)
  endif

          Variable 250 is used later on to check if the player is on the
  boat, 1 is yes, 2 is no. In addition v249 is set to 1 if the player is
  in the water or to 0 if not.

          The engine on the boat is pyrmid 055. Activating this executes
  object 041. Object 041 is actually always invisible, it has just been
  used to store a set of condition that actually get the boat moving:

  if activated?
  then if var=? (v250,1)  this is asking if the player is on the boat
  print ("you start the outboard motor")
  delay (25)
  setvar (25,v35)
  if var ,? (v0,3500)     checks the player's position in relation to
                          cliffs
  then start anim (2)     starts animation 2 (see below)
  invis (56)
  vis (38)
  else invis (38)
  vis (56)
  start anim (4)          starts animation 4 (see below)
  endif
  endif
  endif

          Animation 2 moves the boat to the lighthouse and runs:

  include (38)
  start
  vis (57)
  invis (50)              invisible block that detects if player is off
  setvar (v0,v252)        copy the viewpoint coordinates into
  setvar (v,253)          v252,v253,v254
  setvar (v2,254)
  moveto(825,41,1880)     make sure the boat is starting position
  end                     render the frame image
  loop (154)
  addvar (31,v252)        add 31 to stored x
  addvar (30,v254)        add 30 to stored y
  setvar (v354,v1)        and update viewpoint position. This effectively
  setvar (v254,v2)        stops the player from walking off the moving boat
  move (31,0,36)          move boat along with viewpoint
  again                   repeat loop
  invis (57)              make the hidden bar of gold invisible
  stopanim (2)            ends the voyage
  restart

          The bar of gold is made invisible since you can only pick it up
  while on the boat.

          Animation 4 is the opposite of animation 2:

  include (56)
  start
  vis (57)
  setvar (v0,v252)
  setvar (v1,v253)
  setvar (v2,v254)
  moveto (5599,41,6500)
  end
  loop (154)
  subvar (31,v252)
  moveto (5599,41,6500)
  end
  loop (154)
  subvar (31,v252)
  subvar (30,v254)
  setvar (v252,v0)
  setvar (v253,v1)
  setvar (v254,v2)
  move (-31,0,-30)
  again
  vis (50)                make visible the block that detects if the
  invis (57)              player want to climb because the boat stopped
  stopanim (4)
  restart

          GAME VARIABLES
          ~~~~~~~~~~~~~~
          The following is a list of all the game variables:

  v11     energy, ie number of times the player has been shot
  v33     the number of gold bar collected
  v34     score, 0 - 99995
  v35     text timer for general CONDITION, if = 1 then clear the text
  v38     cash and grab counter (frames)
  v39     case and grab counter
  v40     game state - 0 playing
                  1 - lose (time out)
                  2 - lose (energy out)
                  3 - lose (fell too far)
                  4 - lose (drowned)
                  5 - win
                  6 - end game sequence
  v42     rope carried? 0 = no, 1 = yes
  v44     key carried? 0 = no, 1 = yes
  v45     exit pass carried? 0 = no, 1 = yes
  v50     loop variable (for general use)
  v51     frames spent in the sea. if = 50 then blackout and go to the
          desert island. if >75 then drown
  v53     x coordinate at the beach head when going to the island.
  v54     inventory list indicator. 0 - not showing
                                    1 - first object
                                    2 - second object, etc.
  v55     object carried counter for inventory list.
  v56     inventory request.        0 - not requested
                                    1 - requested
                                    2 - currently showing
  v57     in sea (island) 0 = no, 1 = yes
  v58     number of frames spent in the sea
  v61     giant nose shot? 0 = no, 1 = yes
  v247    speed trap, 0 = off, 1 = on
  v248    cheat on?       0 = no, 1 = yes
  v249    used to check whether the player is on the sea or not 0 = no
          1 = yes
  v252    x viewpoint position, used for locking out movement when
          animating the viewpoint in area 003, same for v253 and v254
  v253    y viewpoint position
  v254    z viewpoint position

                                  APPENDIX
                                  ~~~~~~~~
  Default key controls

  "O"     move forward
  "Q"     turn left
  "K"     move back
  "H"     move left
  "P"     look up
  "J"     move right
  "R"     move up (rise)
  "N"     tilt left
  "F"     move down (fall)
  "W"     turn right
  "I"     face forward
  "1"     save game position
  "L"     look down
  "U"     u-turn
  "2"     load game position
  "M"     tilt right
  "A"     activate object
  "esc"   quit game
  "B"     select mode
  "V"     change mode (walk/fly)
  "C"     center cursor on/off
  "space" FIRE!


                              -=USA/Fairlight=-
