IRE

IT-HE Roleplaying Game Engine



 
 
 
 
 
 

Developer Documentation

version 0.9 -10/8/2003

Made with Netscape Composer, DRDOS, Win 3.1, and Win95 when necessary
Written by Joseph P Morris
Proofread by Alan P Keane
(C) 1999 Joseph P Morris
Any trademarks in this document are the property of their respective owners.
This is free software and as such there is no warranty whatsoever.  Use at your own risk..


 


Warning : 

A large part of the documentation is out of date.













Update history:

0.9.00 - 10/08/03 - Partial update of the documentation - Alexandre Pineau

  • add a warning about the fact that the documentation is not up-to-date!
  •  support for .rar files dropped, partial update of chapter 1.2 and of chapter 6
  •  chapter 5.1 : add a link to additionnal informations on programming conversions
  •  chapter 3 : out of date, add a link to some informations about the new script langa
  •  chapter 7 : links updated
  • 0.5.03 - 11/08/99 - Corrected a critical error in the documentation

  • add_quantity and take_quantity had the last 2 parameters the WRONG WAY AROUND: this would cause a crash.
  • 0.5.02 - 23/07/99 - Documented some forgotten functions
  • Documented forgotten function object_set_behaviour
  • Documented new conversation functions [goto] (5.3.2) and [set_behaviour] (5.4.1)
  • Documented new features in flat.gam resource file (chapter 6)
  • 0.5.01 - 22/06/99 - Final checks for R 0.5
  • Documented forgotten functions transfer_to_pocket, force_from_pocket
  • Documented forgotton functions choose_member and choose_leader
  • Documented new function get_number
  • 0.5.0 - 05/6/99 - Release 0.50, totally new conversation engine
  • Inserted a new chapter 5: programming conversations (with the new script system)
  • Updated 1.4.1 so it is not obsolete anymore
  • Updated 3.2.3 to add new flags and keywords
  • Documented new Section:Rooftiles in 3.2.9
  • Added new variables game_minute, game_hour, game_day, game_month, game_year
  • Added undocumented functions transfer_object, get_first_object
  • Added new functions replace_object,move_forward, move_backward, turn_l, turn_r
  • Added new functions add_quantity, take_quantity, wait_for_animation, lightning
  • Added new functions find_object_with_tag, find_container
  • Added new functions get_pflag, set_pflag, get_user_flag, set_user_flag, get_yn
  • Updated screenshots of editor.
  • Added section 2.2.9 - setting an object's owner
  • Added section 2.2.10 - editing an object's statistics
  • Added section 2.2.11 - editing an object's behaviour
  • 0.4.1 - 28/3/99 - Release 0.41, VRM system changed to SeeR
  • Mentioned the graphical script editor in section 3.1.
  • Updated the description of VRMs and how they are compiled in section 4.1
  • Added new description of how you must use flags since 0.041
  • Added new VRM functions get_flag and set_flag, see above
  • 0.4.0 - 18/1/99 - Release 0.4, rewrite of core map system
  • Removed sections 2.2.8 to 2.2.10, about obsolete features of the editor.
  • Added new section 2.2.8, about editing objects inside containers
  • Added new VRM functions redraw_map, line_of_sight, move_to_top and in_pocket
  • Updated create_object and get_top_object, get_best_object etc.
  • Added new vrm function move_object which you must use instead of modifying the X and Y coordinates
  • Added new functions spill_contents and spill_contents_at
  • Added new flags etc to section 3.2.3 and 4.2.4
  • Added NODRIFT command to Section: Sound in section 3.2.7
  • Added Section 3.2.7 and 3.2.8 to the index (oops)
  • Added Part 5, about the .GAM file
  • Described partially-solid objects in section 3.2.3
  • 0.3.1 - 5/9/98
  • Added section 2.1.4, about cut and paste
  • Added section 2.1.5, about the tile randomiser
  • Added section 2.1.6, about bulk replace
  • Added two new .cel files to section 1.4.1
  • set_darkness changed to a single level instead of RGB levels
  • 0.3.0 - 15/6/98
  • Fixed some typos.
  • Added 'light' and 'enemy' to section 4.2.4
  • Added new function 'set_darkness' to section 4.3.4
  • 0.2.8 - 15/6/98
  • Added new function 'delay' to section 4.3.2
  • Added new function 'start_song' to section 4.3.2
  • Updated entry for 'stop_song' in section 4.3.2
  • 0.2.7 - 11/6/98
  • Added new function 'rnd' to section 4.3.2
  • Added new function 'restart' to section 4.3.4
  • 0.2.6 - 10/6/98
  • Added the 'ifHurt' parameter to section 3.2.3
  • Fixed typo in the example of section 4.3.2
  • Added 'object->stats->oldhp' to section 4.2.4
  • 0.2.5 - 9/6/98
  • Sections 1.4.4 and 1.4.5 are re-written because the music is now script-controlled.not loaded incrementally.
  • Added the overlay flag to section 3.2.2
  • Added the post_overlay flag to section 3.2.3
  • Added the wielded flag to section 3.2.3
  • Wrote about the ifDead parameter for objects in section 3.2.3
  • Added Section 3.2.7, about the new sound loaders
  • Added Section 3.2.8 about the new music loaders.
  • Added the new system variable 'victim' to section 4.2.4
  • Described new function set_object_sequence in section 4.3.1
  • Described new printxy function in section 4.3.2
  • 0.2.4 - 21/5/98
  • Wrote about the automatic object placement in section 2.2.8 and 3.2.3
  • How to put objects into containers.  Section 2.2.10
  • 0.2.3 - 20/5/98 0.2.2 - 15/5/98

    Contents

    Part 1 : Introduction

    1.1 What is the IRE?
    1.2 What do I need to edit the IRE?
    1.3 File formats
    1.3.1 - Graphics
    1.3.2 - Sounds
    1.3.3 - Music
    1.4 Where the files should be stored
    1.4.1 - RES
    1.4.2 - RES\BACKINGS
    1.4.3 - RES\CODE
    1.4.4 - RES\MUSIC
    1.4.5 - RES\SOUND
    1.4.6 - RES\SPRITES
    1.5 How the program searches for files
    Part 2 : The IRE map editor
    2.1 Backgrounds
    2.1.1 getting familiar with the editor
    2.1.2 placing tiles on the map
    2.1.3 selecting tiles
    2.1.4 cut and paste
    2.1.5 Randomising tiles
    2.1.6 Bulk Replacing
    2.2 Sprites
    2.2.1 The editor in sprites mode
    2.2.2 Creating sprites
    2.2.3 Moving sprites
    2.2.4 Changing sprites
    2.2.5 Setting the direction
    2.2.6 Deleting sprites
    2.2.7 Tagging Objects
    2.2.8 Editing Containers
    2.2.9 Setting a character's individual name
    2.2.10 Editing an object's individual statistics
    2.2.11 Editing an object's individual behaviour
    2.3 Rooftops
    2.3.1 The editor in rooftops mode
    2.3.2 Editing rooftops
    Part 3 : The IRE script file
    3.1 What is the script file and what does it do?
    3.2 Script file sections
    3.2.1 Section: Sprites
    3.2.2 Section: Sequences
    3.2.3 Section: Characters
    3.2.4 Section: Descriptions
    3.2.5 Section: Code
    3.2.6 Section: Tiles
    3.2.7 Section: Sounds
    3.2.8 Section: Music
    3.2.9 Section: Rooftiles
    Part 4 : The IRE VRM system
    4.1 What are VRM files?
    4.1.1 The VRM concept
    4.1.2 How VRMs are made
    4.1.3 A VRM tutorial
    4.1.4 Rules for writing VRMs
    4.1.5 How the example works
    4.1.6 Data Types
    4.2 The OBJECT
    4.2.1 Introducing the OBJECT
    4.2.2 Creating an OBJECT from scratch
    4.2.3 Modifying OBJECTs
    4.2.4 OBJECT Reference guide
    4.2.5 The TILE
    4.3 Function Reference
    4.3.1 Object functions
    4.3.2 IO functions
    4.3.3 Flow control functions
    4.3.4 Miscellaneous functions
    4.4 System Variables
    4.5 Keyboard Macros
    Part 5 : Programming Conversations
    5.1 Overview
    5.2 Page structure and simple commands
    5.2.1 Simple Linking
    5.2.2 Interactive Linking
    5.2.3 Images
    5.2.4 Setting the text colour
    5.3 Advanced conversations - Conditional branching
    5.3.1 Checking for an object
    5.3.2 Important tips
    5.3.3 Checking for a party member
    5.3.4 Using your own flags
    5.3.5 Personal flags
    5.4 Manipulating the game world
    5.4.1 Calling VRM functions
    5.4.2 Creating and destroying objects
    5.4.3 The theory of the conservation of money
    Part 6 : Game description files
    6.1 Crucial lines
    6.2 The text console
    6.3 Loading screen
    Part 7 : Conclusion and Contact info



     
     

    Part 1 - Introduction

    1.1 - What is the IRE?

    In 1993 I got hold of a computer roleplaying game called Ultima 6.  This game changed my life forever.
    Previously I'd seen DCworld, an Ultima 5-type game editor.  Ultima 6 was a whole new level above DCworld, like the difference between Wolfenstein and Doom.
    When I buy new hardware, the bottom line is, will U6 work?  No U6, no sale.

    I spent the next few years in Ultima 6, hacking it, twisting it, folding it into new shapes.
    I wrote a set of tools which hack the program, and allow you create new worlds, but there is a limit.
    Ultima 6 has some pretty strange data structures which I never did figure out completely.

    In '94 I started an abortive attempt to make a U6 clone, which was codenamed U6C.  I couldn't draw a player and it bombed.

    After the failure of Avios to run satisfactorily on the P200 I am using, despite intense optimisation, I decided to stop working on it, and turned instead to making a 'perfect' ultima 6 type game.  This is what I have so far.

    The IRE is a Computer Role-Playing Game which takes most of its ideas from Ultima 6, and some from Ultima 7.

    The main difference between the design of U6 and IRE, is that IRE is designed from the ground up to allow someone to edit it.  Ultima 6 was not designed this way.
     

    1.2 - What will I need to edit the IRE?

    There are many features you can edit, and you will need a variety of programs to edit each different part of the game.
    Most editors are provided, but some you will have to acquire yourself.

    First, we shall look at all the resources that the game can use.

    Map files

    The map file is the world in which the player inhabits.  At present the engine can only support one map per game, although this will probably change later.

    Font

    The font is the character set used in the game.  The characters are fixed-space 8x8 letters, and are stored in the raw bit-packed format used by Arthur Barr's font editor.

    Script file

    The script file is central to IRE.  It is a description file that describes a game written using IRE.
    It tells the program which sprites will be loaded, it binds the sprites into animation sequences and defines the behaviour of all characters and objects in the game.

    The script file is described in detail in Chapter 3.

    VRM files

    Although the script coordinates everything, it is the VRM files which do the actual work.
    VRMs (or Virtual Runnable Modules) are written in C (using my library functions) and get loaded into the game as it starts.  Each game event is driven by a corresponding VRM.

    VRM programming is described in detail in Chapter 4.

    Internal graphics

    Certain parts of the IRE system have their own sprites, such as the mouse pointer and the volume slider.  These graphics are not controlled by the script file (although they might be later), and the program will attempt to load them itself.  The internal graphics are 256-colour and stored in the Animator .CEL format.  You can also use PCX if you prefer.
    If you need to convert between CEL and another format, try using PICTVIEW by Jan Patera.

    Sprites and tiles

    Sprites and tiles are all defined in the script file, and are loaded in as the script is parsed.
    They are stored in .CEL or .PCX format, and may have either 256 colours or 16.7 million.

    Backing pictures

    At present backing pictures are loaded in by the program, like the internal graphics of the mouse pointer and the volume slider.  They must be in PCX format and either 640x400 in size, or 640x480.
    They can be 8-bit or 24-bit PCX files.

    Game package

    The datafiles are loaded directly now by the engine so there is no need to pack all the datafiles into one large resource file today.
     

    Summary
     
    Property to edit
    Recommended Editor
    Comments
    Map files The IRE editor
    Font Arthur's font editor (supplied)
    Script file Any text editor This is covered in part three
    VRM files SEERC is supplied to build them This is covered in part four
    Internal graphics Autodesk Animator You can use PICTVIEW by Jan Patera to convert graphics to CEL files
    Sprites and Tiles Any PCX editor
    Backing pictures Any PCX editor
    Game package -

    1.3 - File formats

    The program uses a fairly narrow selection of file formats, so you may have to use some conversion software to get the data from your favourite package into IRE.

    1.3.1 - Graphics formats

    The IRE uses two main graphics formats, .CEL and .PCX.
    In future releases, all the loaders will be able to take either format, but at present, some will only take one or the other.

    PCX files.

    PCX files are straightforward, so any package that creates a .PCX should produce something readable by IRE.

    Here are some known caveats:

    The PCX files must be compressed using the runlength method.  This is the standard, but if you do somehow manage to make an uncompressed PCX file, the program will likely choke on it.

    The PCX files must be either 8-bit or 24-bit.  1,2,4 or 16-bit PCX files will be rejected and the program will stop with an error.

    CEL files.

    The .CEL files refer to Autodesk Animator .CEL files.  This means Autodesk Animator, not Animator Pro.  Animator Pro uses .FLI files and just calls them .CEL files.

    If you try and load a .CEL file created by Animator Pro, IRE will go back to DOS with a panic message saying that the .CEL file you gave it "is not a .CEL file".

    If you don't have the original Animator, use .PCX files instead of .CEL.

    Alternatively, get RSE 2.00, a freeware program which is able to read and write .CEL files compatible with IRE.

    Graphics sizes.

    1.3.2 - Sound formats

    The IRE sound engine can load .WAV files produced by most applications.
    The .WAV files can be 8 or 16 bit, and any frequency up to 44Khz is allowed.

    Stereo .WAV files are not supported however.

    I don't know if .WAV files can be compressed, but it they can, that won't work either.
     

    1.3.3 - Music formats

    The IRE music player uses MOD files, a digital music system originating from the Commodore Amiga's somewhat creative sound circuits.  Lack of any music chips at all gave rise to the .MOD file, a four-channel digital music system.

    The IRE's sound engine can support the following types of .MOD file:
     
     
    File name Name Channels Comments
    .MOD Protracker module 4 Generic module format
    .MTM ? 16 More obscure format
    .S3M Screamtracker III 32 Popular module format
    .STM Screamtracker II 4 PC extension to the MOD format
    .ULT Ultratracker 32 Originated on the (late) GUS soundcard
    .XM Fastracker 32 Rival format to S3M 
    Both FT1 and FT2 variants supported

    Before you race off, remember that there is a maximum of 32 channels available to the sound engine.

    If you use all 32 for the music there will be none left for the sound effects.

    The amount of channels reserved for the music and sound is set in the game's config file, not the script file.  By default it is 16+4, i.e. 20 channels in total.
     

    1.4 - Where the files should go

    It is important to understand how IRE looks for it's resources, so that you know where to put the new files.

    Each IRE game will have a directory of its own, and it will look for the files in various subdirectories
    in the tree.

    By default, IRE will look in the RES directory, so we'll refer to as the RES directory in future.
    (RES is shorthand for resources).

    Note that it does not have to be RES, and you should call your directory something else when you develop an IRE game.
    (It's controlled by your .GAM file, which is described in Part 7)

    If you've followed the previous section, you should have some idea of the resources that each IRE game will use.

    Unless the file is requested by the system itself, it can go anywhere you like, as the script file will contain the full path of each file.

    Internal Graphics and the script file itself, must go in particular places, which will be described in detail later.  Where you put the other resources is up to you.

    The files are generally organised in this way:


     
     

    1.4.1 - RES

    The RES directory must contain the following files:
     
    main.txt The script file
    arrow00.cel The mouse pointer image
    soundbar.cel The volume slider backing image
    slider1.cel The slider that has been selected
    slider2.cel The slider that is not selected
    font.dat The typeface used in the game
    eyesore.cel Used by the editor for the 'Random Tile'
    warning.cel Shown if the Random Tile appears in the game
    credits.dat ANSI credits at end, like ENDOOM in Doom
    help.txt A conversation file that is run when F1 is pressed, see Part 5

    1.4.2 - RES\BACKINGS

    The RES\BACKINGS directory must contain the following file:
     
    panel.pcx The background image of the game status area
    Additionally, I store the map tiles in this directory, but as each sprite's location is defined in the script file, this is just a matter of preference.
     

    1.4.3 - RES\CODE

    You need a place to store the VRM files used in the game, I called mine RES\CODE.
    Again, the VRMs are defined in the script file, so you can put them anywhere you like,
    RES\VRM might be another choice.

    You could keep them on another drive, or even just in the RES\ directory, although that would be untidy.
     

    1.4.4 - RES\MUSIC

    You need a place to store the music files.  I keep them in RES\MUSIC.
    As of kernel version 0.025, the music is defined in the script file, so you can put them anywhere you like,
    RES\MODS might be another choice.

    You could keep them on another drive, or even just in the RES\ directory, although that would be untidy.

    1.4.5 - RES\SOUND

    You need a place to store the sound effects.  I keep them in RES\SOUND.
    As of kernel version 0.025, the music is defined in the script file, so you can put them anywhere you like,
    RES\WAVS might be another choice.

    1.4.6 - RES\SPRITES

    You need a place to store the sprites used in the game, I called mine RES\SPRITES.
    Again, the sprites and other game images are defined in the script file, so you can put them anywhere you like, maybe RES\OBJECTS.

    1.5 - The search order

    The search order is quite important.

    When it tries to load a file, it will look for it in the following order:
     

    1. In the IRE directory, e.g. C:\IRE\
    2. In the RES directory, e.g. C:\IRE\RES\
    3. In a specified .RAR file, e.g. RES.RAR
    So, if a file is found in the IRE directory it will take precedence over a file found in either of the other two places.

    NOTE:  The map editor will ONLY load maps from the IRE directory, and not from the RES or RAR sources.  All other files, the graphics and such can be loaded from other sources.
     



     
     

    Part 2 - The map editor

    The IRE map consists of three layers:

    A Background
    Objects and characters
    Rooftops
     
     

    2.1 Editing the background

     Backgrounds are made up of tiles, which are 32x32 in size.
     These tiles are arranged in a huge grid, which makes up the map.

    2.1.1 - getting familiar with the editor

    This is a screenshot of the editor in Background mode, we will refer to it as the editor is described.

    First, look the main window.  This is the map, as it will  appear when the game is being played.
    You can pan around the map using the cursor keys, or the four arrow buttons to the right of the window.
     
     


     












    Also, note the two black panels on the far right-hand side of the screen.

    They control the screen display, and allow you to switch off the other layers of the level if you find they get in the way while you are editing.

    "SPRITES ON" means that the movable objects in the game, such as the player, other characters and similar things will be displayed.  If you click once in the black area, it will read "SPRITES OFF" instead, and any sprites visible on the map will disappear while you are editing the backgrounds.

    Similarly, "ROOFTOPS ON" means that the highest-level objects in the game, normally the roofs of buildings, will be displayed.  If you click in the black area, it will change to "ROOFTOPS OFF".  Rooftops are not displayed by default, as you are mainly going to edit the insides of buildings and that
    is generally impossible with the roof in the way.

    2.1.2 Placing tiles on the map

    At it's most simple, map editing consists of just clicking on the map, and drawing the tiles on it.

    Looking to the right of the main map window, are two small squares, marked 'L' and 'R'.
    This shows the currently selected tiles, which will appear when you click on the map.

    The tile in the 'L' window is the tile that will appear if you click with the left button, and the 'R' tile is the tile that will appear if you click with the right mouse button.

    This means that you can use the left mouse button to do most of your drawing, and set the right-button to a common sort of tile and use it to erase mistakes without having to select another tile from the list.

    2.1.3 Selecting tiles

    Looking back at the editor screenshot, there is a bar at the bottom which contains all the tiles you can use in the map.

    The bar has some buttons at either end, allowing you to scroll around the tiles, one at a time or at high speed, through the list of tiles.

    To choose a tile, move the mouse over the bar, and click on the tile you want, with the mouse button you wish to contain this tile.

    For example, if you click on a wall with the left button, the wall will appear on the 'L' box, and drawing with the left button will draw walls.

    Now, you can doodle around on the map with that particular tile.

    Adding new kinds of tile is dealt with in Chapter 3.

    2.1.4 Prefabs

    Support for prefabricated parts is not fully implemented at this stage, so if you use the buttons they work like cut-and-paste.
    Clicking on 'Get Prefab' will copy the current screenful of tiles into a 'clipboard', and 'Put Prefab' will put the contents of the clipboard onto the screen.

    When it is completed, the Prefab system will support hundreds of clipboards that are stored to disk so you can create a library of commonly-used map sections.

    2.1.5 Randomising tiles

    Introduced in IRE 0.3, is support for randomising sections of the map, for instance to make grass that does not repeat.

    To achieve this, do the following:

    1. Click on the 'Random Tile' button at the bottom of the screen.  This looks hideous to remind you that the tiles are still on the map.

    2. Draw the 'Random Tile' over the section you want to be randomised.  If it's a fairly large area, you can use the 'Clear L' or 'Clear R' buttons to fill the screen with the current tile.

    3. Now, choose the tiles that you want it to pick from.  These must be grouped together on the tile bar: you cannot choose from different tiles scattered everywhere.

    4. To do this, Left-Click on the first tile in the group, and Right-Click on the last tile in the group.

    (For example, with the grass, left-click on the first tile, and right-click on the seventh), the editor will pick tiles between these two.

    5.  Click on the Randomise button.  All the yellow tiles will be replaced with a selection from the group you chose in step 4.

    2.1.6  Bulk Replace

    Suppose you wanted to turn all the grass in the map into something else.  You can 'reverse' the action of the randomiser above, in a similar manner.

    1.  Choose the group of tiles that you want to isolate, for example the grass.  Like Step 4 in the Randomiser, you must use the Left and Right buttons to choose the first and last tile to be replaced.

    2.  Click on 'Replace Tiles', and all the tiles in the group you've selected will turn into the Random Tiles!

    3.  Now you can use the randomiser to turn them into mud or whatever you fancy.
     

    2.2 - Editing Sprites

    2.2.1 - The editor in Sprites mode

    This is a screenshot of the editor in Sprite mode.  There are some subtle differences between Background and Sprite mode, so we will look at each item again.

    First, look the main window.  This is still the map, but note that the character has a white box around him.  This is because the player has been selected, and he is the object being edited.
     
     


     











    Now, look again at the two black panels on the far right-hand side of the screen.

    "ROOFTOPS OFF" has not changed at all, but "SPRITES ON" has changed to "EXCLUDE OFF".

    This switch still controls the display of the sprites, but now it will switch off most of the sprites if it is enabled, instead of the whole lot.
    Specifically, "EXCLUDE ON" will display only the currently selected object, i.e. the one with the white box.  It is used for situations when the other objects get in the way of the one you are positioning.

     2.2.2 - Creating a new sprite

    To create a new sprite, click on the button marked 'New Item'.

    When you do this, a box will appear, showing you a list of all the objects in the game, and displaying a picture of each one.

    When you've found the one you want, using the cursor keys to scroll, press ENTER and the object will appear in the middle of the screen.

    The object will be highlighted with the white selection box, and you can drag it to the proper place.

    To create copies of this object quickly, you can press INS (or INSERT) on the keyboard, and a copy of the object will appear wherever the mouse pointer is on the map.  If the mouse pointer is not over the map, no object will be created.

    The INS method creates a copy of the selected object.  If no object is selected, it will pop up the creation list and the object will appear in the centre of the screen, like 'New Item'.

    Individual Names

    An object can have its own special name, for example 'Kenny McKormick', which is used when you talk to the person, among other things.

    Below the map is the panel marked 'Individual Name:'.  You can click on this to enter the object's individual name.

    2.2.3 - Selecting and moving objects

    To select an object, just left-click on it, and it should become highlighted.
    If another object has already been selected first, left-click on an empty space to clear the selection first.

    You can move objects by dragging them around the map with the left button, or, you can instantly move an object (without dragging) by right-clicking where you want the object to go.  This is often useful if the selected object is off-screen.

    2.2.4 - Changing an object's direction

    Looking at the screenshot again, there is a second set of arrow-buttons in the middle of the screen, on the right hand side.

    When an object is selected, one of these arrows should be depressed.
    This is the direction in which the object is facing.

    For example, the player can face in any of the four directions.  To make the player face left, select the player and click on the left arrow button.
    The player should now face left.

    Many simple objects only have one direction, in which case the arrow buttons will have no effect.  Doors and windows usually have two directions, Up/down for the horizontal position, and Left/Right for the vertical position.

    The directions an object has are defined in the script file.

    2.2.5 - Changing the object's type

    At some stage you will decide that you want to change one object into another.
    You can do this by selecting the object, and then clicking on the 'Edit Item' button, (or pressing ENTER).

    This will pop up the creation list again, and the object will change to the new type. (By default, it will highlight the type of object it was before in the menu.)
     

    2.2.6 - Deleting an object

    To delete and object first select it, and then click on 'Delete Item', or press the 'DEL' key if you prefer.

    There will be no warning before the sprite is removed, so take care.

    2.2.7 - Tagging objects

    On the bottom right hand side of the screen are three buttons, 'Find Tag', an entry box and 'Next Free Tag'.

    The entry box is used to assign a control value to certain objects.

    What the object does will depend on the script assigned to it in the main script file, but it will often be necessary to mark certain objects with a tag.

    One of the main uses of tags will be locked doors.
    A door can be open, shut, or locked shut.
    There will also be a key to lock or unlock the door.

    In these cases, the key and the door must both have the same Tag number for the key to fit the door.

    Click on the number in the black entry box to enter a different tag number.

    The button marked 'find tag' will ask you for a number, and then search all the objects in the game to find one with the appropriate tag number.  It will not be able to show the object if it is inside a container.

    The button marked 'Next free tag' will find the first tag number which does not exist in the game.

    2.2.8 - Containers

    In release 0.4 it is now possible to edit containers.
    (Some objects, such as bottles, will contain objects inside as soon as they are created.  These are determined by the script file.)

    Container editing is done using the new 'Edit Pockets' button.
    First, select the object you wish to modify.  When it is highlighted, you can click on 'Edit Pockets', which will display a list of the objects which are in the container.  You should see this:
     
     


     











    There are currently four things you can do with containers:

    1. Create a new object inside a container
    2. Delete an object inside a container
    3. Move an object out of a container
    4. Bring an outside object into the container.

    Creating and Removing objects

    'Create object' is the button used to create an object.  Clicking on this will bring up the familiar creation menu.

    To remove an object, first click on the object you want to remove in the list.  It will turn red, indicating that it has been selected.
    Then click on 'Remove object' and the chosen object will disappear.

    Moving Objects out of the container.

    First, highlight the object you want to move out of the container.
    Then click on 'Move Outside' and the object will disappear from the list.  When you leave the pocket editing window, you will
    find the object on top of the container.

    Bringing Objects in to the container.

    First, get out of the pocket editor.
    Select the container, and place it ON TOP of the object you want to be inside the container.
    Now, making sure the object is highlighted, click on 'Edit Pockets', and choose 'Bring Inside'.
    Press 'Y' to continue and the object will be there.

    CAVEAT: It is not currently possible to edit the properties of an object while it is inside a container.  If you wish to adjust the direction or tag number of an object in a container, you will have to move it out of the container first.
     

    2.2.9 - Setting an object's owner

    In release 0.5 objects can now have owners, who get angry if their object is stolen.
    In order for this to work, you must specify who owns the object.

    At the bottom of the panel is a field marked 'Object is property of:'.
    If you click on this while an object is selected, you will be asked to click on the person who owns the object.

    Here is the screen you will see:
     
     


     











    TYou can pan around the map to find the person who owns it, and click on them.  They will be highlighted red when an object they own has been selected.

    Alternatively you can choose the person from a list (of all objects which are marked as 'Person' and have an individual name).

    If you decide that the object should be public property, you can click on 'Make Public Property'.
     

    2.2.10 - Changing an object's statistics

    In release 0.5 it is now possible to change the statistics of a single object without using the scriptfile.
    This allows you to create special variations of an object by giving it individual properties.
    It also allows you to specify the number of objects in a pile if you have a group item, such as a heap of coins.

    This is done using the 'Statistics' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Statistics', which will display the properties you can edit.  You should see this:
     
     


     











    This should be self-explanatory.

    2.2.11 - Changing an object's behavior

    In release 0.5 you can also change the way an individual object interacts with the rest of the world, by giving it its own unique set of functions.

    This is done using the 'Behaviour' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Behaviour', which will display the properties you can edit.  You should see this:
     
     


     











    Each of the boxes (except Speech File) is a VRM function which is called when the event happens.  You can choose this from a list.

    Speech File is the only one which is not a VRM file: instead you enter the path to the file containing the conversation.
    In the current release, there is no list of files.  However the program will check if the filename you have entered is correct, and warn you if it does not exist.
     

    2.3 - Editing Rooftops

    2.3.1 - The editor in Rooftop mode

    This is a screenshot of the editor in Rooftop mode.
    As you can see, the editor is exactly the same as for Background Tiles, so familiarise yourself with the Background editor first.


     









    2.3.2 - Editing rooftops

    Rooftops are similar in concept to Background tiles, except that background tiles will interact with sprites.

    Rooftops are completely separate and are for decorative purposes only.

    As the name implies, Rooftops are special tiles that are drawn above everything else in the game.  They are not always drawn, and the rooftop layer can be shown or removed at will by VRM scripts.  By default, they will be removed if the player is underneath a tile.

    At the bottom of the screen is the set of tiles that can be used.  These are defined in the script file.
    Each tile is a single frame, and it may or may not cause the roof to disappear when the player is underneath it.
    (You don't want this to happen when the player is standing outside the building and the roof is overhanging.)

    Basically you just click and paint the roof tiles.  The first tile in the list is blank and can be used to erase bits of roof.



     
     

    Part 3 - The Script File


    Warning : the following chapters are out of date. They covers the old SEER language, which has now been removed.

    Some informations about new script language PEscript can be found here.
     

    3.1 - What is the script file and what does it do?

    Although you can use the default objects and their behaviours to good effect, as a 'super-ultima-6' engine, you will at some stage want to add your own graphics and objects to the game.

    To do this you must go into the main script file.
    You can either do this manually, or you can use the graphical Script editor, SCRIPTER.
    Scripter is not documented yet, but if you read this chapter and then play around with it, it should be easy enough to pick up.
     

    The IRE script file is a description file that describes a game written using
    IRE.  It tells the program which sprites will be loaded, it binds the sprites
    into animation sequences and defines the behaviour of characters in the game.

    The script file is parsed by the game (and the editor) as it starts up, and any errors it detects will be reported at this stage, with a red and green error report (except in Linux and BeOS which are black-and-white).
     
     


     











    If you intend to start playing around with script files, It is a good idea to print this document out for reference.

    Here are some rules for writing script files:

    3.2 - Script file sections

    Let's look at each section in turn.

    3.2.1 - Section: sprites

    The sprites section is used to declare sprites that will be used in the game.
    All moving images and map tiles that appear in the game must be declared here.

    The sprites section is basically a list consisting of the following form:
     

    SECTION: sprites
        name    filename
        name2   filename2
        name3   filename3

    'name' is the title of the sprite.  Every time you want to refer to this image,
    you should call it by this name.

    'filename' is the file containing the image.  Images are stored as autodesk animator .CEL files, or .PCX files.

    The list will continue until the next section is reached.
     

    EXAMPLE:

    SECTION: sprites
    left_frame      sprites\left01.cel
    left_frame2     sprites\left02.cel
    left_frame3     sprites\left03.cel

    right_frame     sprites\right01.cel
    right_frame2    sprites\right02.cel
    right_frame3    sprites\right03.cel

    up_frame        sprites\up01.cel
    up_frame2       sprites\up02.cel
    up_frame3       sprites\up03.cel

    down_frame      sprites\down01.cel
    down_frame2     sprites\down02.cel
    down_frame3     sprites\down03.cel
     

    3.2.2 - Section: sequences

    The sequences section is used to declare all animation sequences.
    Any animation, character or object that appears in the game must have its
    animation declared here.

    There are two ways to declare sequences, the 'traditional' way, and the Quick
    way.

    Traditionally, sequences are declared like this:

    SECTION: sequences

    name  sequence_name
    <options>
    framelist:
    frame1
    frame2
    ...
    END
    'name'
    NAME is the title of this animation.  Every time you want to refer to this animation, (in other parts of the script, or the Rooftops editor)  you will use this name.

    'framelist:'
    FRAMELIST: marks the start of the list of frames. All frames in the list are entries in the SPRITES section.

    'END'
    END marks the end of the list of frames.
    I.E, everything between framelist: and END will be treated as a frame, and the program will try to find it in the sprite list.

    <options>
    You don't literally type '<options>'.  Instead, this is the part where you can specify some flags to control the animation.

    The following flags are understood by the game:
     
    pingpong This makes the animation play backwards when it finishes. 
    E.g. frame 1, frame 2, frame 3, frame 2, frame 1
    loops This will make the animation repeat endlessly.
    stepped This makes the animation play only after each turn of the game, rather than continuously.
    overlay <sprite> This will make the specified sprite appear on top of the animation.  The overlay will be a single frame, not a real animation.  For example, the blood on the dead player is an overlay.

    'LOOPED' or 'LOOP' can be used as alternatives to 'LOOPS'.
     

    Quick sequences

    Although the sequence declarations are OK for most things, it is over-long for simple sequences which only need one frame.  For example, map tiles will usually consist of a single frame, and the above declaration is overkill.

    To speed this up, I added a quicker, easier way to define simple sequences
    for map tiles and other single-frame entities.

    These are called QuickNames, and they are a one-line sequence definition.

    Suppose you wanted to declare this sequence:

    name    GrassTile
    framelist:
    grasstile00
    END
    Using a QuickName to declare the tile, it would be done this way:
     
    quickname    GrassTile    grasstile00
    ..which is a lot simpler (though much less flexible).

    For reference only, it can be noted that the actual declaration of a QuickName
    consists of three words.
     
     
    1.  quickname Start the declaration
    2.  sequence_name Identifying name of the sequence being created
    3.  sprite_name A sprite from the SPRITES: section

    EXAMPLES:

        SECTION: sequences

        name    MoveLeft
        framelist:
        left_frame
        left_frame2
        left_frame3
        END

        name    Moveright
        framelist:
        right_frame
        right_frame2
        right_frame3
        END

        name    Moveup
        framelist:
        up_frame
        up_frame2
        up_frame3
        END

        name    Movedown
        framelist:
        down_frame
        down_frame2
        down_frame3
        END

        name    Dead_Guy
        overlay  blood
        framelist:
        dead_guy
        END

        lexible).

    For referenco the container.

    Creating and Removing objects

    'Create object' is the button used to create an object.  Clicking on this will bring up the familiar creation menu.

    To remove an object, first click on the object you want to remove in the list.  It will turn red, indicating that it has been selected.
    Then click on 'Remove object' and the chosen object will disappear.

    Moving Objects out of the container.

    First, highlight the object you want to move out of the container.
    Then click on 'Move Outside' and the object will disappear from the list.  When you leave the pocket editing window, you will
    find the object on top of the container.

    Bringing Objects in to the container.

    First, get out of the pocket editor.
    Select the container, and place it ON TOP of the object you want to be inside the container.
    Now, making sure the object is highlighted, click on 'Edit Pockets', and choose 'Bring Inside'.
    Press 'Y' to continue and the object will be there.

    CAVEAT: It is not currently possible to edit the properties of an object while it is inside a container.  If you wish to adjust the direction or tag number of an object in a container, you will have to move it out of the container first.
     

    2.2.9 - Setting an object's owner

    In release 0.5 objects can now have owners, who get angry if their object is stolen.
    In order for this to work, you must specify who owns the object.

    At the bottom of the panel is a field marked 'Object is property of:'.
    If you click on this while an object is selected, you will be asked to click on the person who owns the object.

    Here is the screen you will see:
     
     


     











    TYou can pan around the map to find the person who owns it, and click on them.  They will be highlighted red when an object they own has been selected.

    Alternatively you can choose the person from a list (of all objects which are marked as 'Person' and have an individual name).

    If you decide that the object should be public property, you can click on 'Make Public Property'.
     

    2.2.10 - Changing an object's statistics

    In release 0.5 it is now possible to change the statistics of a single object without using the scriptfile.
    This allows you to create special variations of an object by giving it individual properties.
    It also allows you to specify the number of objects in a pile if you have a group item, such as a heap of coins.

    This is done using the 'Statistics' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Statistics', which will display the properties you can edit.  You should see this:
     
     


     











    This should be self-explanatory.

    2.2.11 - Changing an object's behavior

    In release 0.5 you can also change the way an individual object interacts with the rest of the world, by giving it its own unique set of functions.

    This is done using the 'Behaviour' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Behaviour', which will display the properties you can edit.  You should see this:
     
     


     











    Each of the boxes (except Speech File) is a VRM function which is called when the event happens.  You can choose this from a list.

    Speech File is the only one which is not a VRM file: instead you enter the path to the file containing the conversation.
    In the current release, there is no list of files.  However the program will check if the filename you have entered is correct, and warn you if it does not exist.
     

    2.3 - Editing Rooftops

    2.3.1 - The editor in Rooftop mode

    This is a screenshot of the editor in Rooftop mode.
    As you can see, the editor is exactly the same as for Background Tiles, so familiarise yourself with the Background editor first.


     









    2.3.2 - Editing rooftops

    Rooftops are similar in concept to Background tiles, except that background tiles will interact with sprites.

    Rooftops are completely separate and are for decorative purposes only.

    As the name implies, Rooftops are special tiles that are drawn above everything else in the game.  They are not always drawn, and the rooftop layer can be shown or removed at will by VRM scripts.  By default, they will be removed if the player is underneath a tile.

    At the bottom of the screen is the set of tiles that can be used.  These are defined in the script file.
    Each tile is a single frame, and it may or may not cause the roof to disappear when the player is underneath it.
    (You don't want this to happen when the player is standing outside the building and the roof is overhanging.)

    Basically you just click and paint the roof tiles.  The first tile in the list is blank and can be used to erase bits of roof.



     
     

    Part 3 - The Script File


    Warning : the following chapters are out of date. They covers the old SEER language, which has now been removed.

    Some informations about new script language PEscript can be found here.
     

    3.1 - What is the script file and what does it do?

    Although you can use the default objects and their behaviours to good effect, as a 'super-ultima-6' engine, you will at some stage want to add your own graphics and objects to the game.

    To do this you must go into the main script file.
    You can either do this manually, or you can use the graphical Script editor, SCRIPTER.
    Scripter is not documented yet, but if you read this chapter and then play around with it, it should be easy enough to pick up.
     

    The IRE script file is a description file that describes a game written using
    IRE.  It tells the program which sprites will be loaded, it binds the sprites
    into animation sequences and defines the behaviour of characters in the game.

    The script file is parsed by the game (and the editor) as it starts up, and any errors it detects will be reported at this stage, with a red and green error report (except in Linux and BeOS which are black-and-white).
     
     


     











    If you intend to start playing around with script files, It is a good idea to print this document out for reference.

    Here are some rules for writing script files:

    3.2 - Script file sections

    Let's look at each section in turn.

    3.2.1 - Section: sprites

    The sprites section is used to declare sprites that will be used in the game.
    All moving images and map tiles that appear in the game must be declared here.

    The sprites section is basically a list consisting of the following form:
     

    SECTION: sprites
        name    filename
        name2   filename2
        name3   filename3

    'name' is the title of the sprite.  Every time you want to refer to this image,
    you should call it by this name.

    'filename' is the file containing the image.  Images are stored as autodesk animator .CEL files, or .PCX files.

    The list will continue until the next section is reached.
     

    EXAMPLE:

    SECTION: sprites
    left_frame      sprites\left01.cel
    left_frame2     sprites\left02.cel
    left_frame3     sprites\left03.cel

    right_frame     sprites\right01.cel
    right_frame2    sprites\right02.cel
    right_frame3    sprites\right03.cel

    up_frame        sprites\up01.cel
    up_frame2       sprites\up02.cel
    up_frame3       sprites\up03.cel

    down_frame      sprites\down01.cel
    down_frame2     sprites\down02.cel
    down_frame3     sprites\down03.cel
     

    3.2.2 - Section: sequences

    The sequences section is used to declare all animation sequences.
    Any animation, character or object that appears in the game must have its
    animation declared here.

    There are two ways to declare sequences, the 'traditional' way, and the Quick
    way.

    Traditionally, sequences are declared like this:

    SECTION: sequences

    name  sequence_name
    <options>
    framelist:
    frame1
    frame2
    ...
    END
    'name'
    NAME is the title of this animation.  Every time you want to refer to this animation, (in other parts of the script, or the Rooftops editor)  you will use this name.

    'framelist:'
    FRAMELIST: marks the start of the list of frames. All frames in the list are entries in the SPRITES section.

    'END'
    END marks the end of the list of frames.
    I.E, everything between framelist: and END will be treated as a frame, and the program will try to find it in the sprite list.

    <options>
    You don't literally type '<options>'.  Instead, this is the part where you can specify some flags to control the animation.

    The following flags are understood by the game:
     
    pingpong This makes the animation play backwards when it finishes. 
    E.g. frame 1, frame 2, frame 3, frame 2, frame 1
    loops This will make the animation repeat endlessly.
    stepped This makes the animation play only after each turn of the game, rather than continuously.
    overlay <sprite> This will make the specified sprite appear on top of the animation.  The overlay will be a single frame, not a real animation.  For example, the blood on the dead player is an overlay.

    'LOOPED' or 'LOOP' can be used as alternatives to 'LOOPS'.
     

    Quick sequences

    Although the sequence declarations are OK for most things, it is over-long for simple sequences which only need one frame.  For example, map tiles will usually consist of a single frame, and the above declaration is overkill.

    To speed this up, I added a quicker, easier way to define simple sequences
    for map tiles and other single-frame entities.

    These are called QuickNames, and they are a one-line sequence definition.

    Suppose you wanted to declare this sequence:

    name    GrassTile
    framelist:
    grasstile00
    END
    Using a QuickName to declare the tile, it would be done this way:
     
    quickname    GrassTile    grasstile00
    ..which is a lot simpler (though much less flexible).

    For reference only, it can be noted that the actual declaration of a QuickName
    consists of three words.
     
     
    1.  quickname Start the declaration
    2.  sequence_name Identifying name of the sequence being created
    3.  sprite_name A sprite from the SPRITES: section

    EXAMPLES:

        SECTION: sequences

        name    MoveLeft
        framelist:
        left_frame
        left_frame2
        left_frame3
        END

        name    Moveright
        framelist:
        right_frame
        right_frame2
        right_frame3
        END

        name    Moveup
        framelist:
        up_frame
        up_frame2
        up_frame3
        END

        name    Movedown
        framelist:
        down_frame
        down_frame2
        down_frame3
        END

        name    Dead_Guy
        overlay  blood
        framelist:
        dead_guy
        END

        lexible).

    For referenco the container.

    Creating and Removing objects

    'Create object' is the button used to create an object.  Clicking on this will bring up the familiar creation menu.

    To remove an object, first click on the object you want to remove in the list.  It will turn red, indicating that it has been selected.
    Then click on 'Remove object' and the chosen object will disappear.

    Moving Objects out of the container.

    First, highlight the object you want to move out of the container.
    Then click on 'Move Outside' and the object will disappear from the list.  When you leave the pocket editing window, you will
    find the object on top of the container.

    Bringing Objects in to the container.

    First, get out of the pocket editor.
    Select the container, and place it ON TOP of the object you want to be inside the container.
    Now, making sure the object is highlighted, click on 'Edit Pockets', and choose 'Bring Inside'.
    Press 'Y' to continue and the object will be there.

    CAVEAT: It is not currently possible to edit the properties of an object while it is inside a container.  If you wish to adjust the direction or tag number of an object in a container, you will have to move it out of the container first.
     

    2.2.9 - Setting an object's owner

    In release 0.5 objects can now have owners, who get angry if their object is stolen.
    In order for this to work, you must specify who owns the object.

    At the bottom of the panel is a field marked 'Object is property of:'.
    If you click on this while an object is selected, you will be asked to click on the person who owns the object.

    Here is the screen you will see:
     
     


     











    TYou can pan around the map to find the person who owns it, and click on them.  They will be highlighted red when an object they own has been selected.

    Alternatively you can choose the person from a list (of all objects which are marked as 'Person' and have an individual name).

    If you decide that the object should be public property, you can click on 'Make Public Property'.
     

    2.2.10 - Changing an object's statistics

    In release 0.5 it is now possible to change the statistics of a single object without using the scriptfile.
    This allows you to create special variations of an object by giving it individual properties.
    It also allows you to specify the number of objects in a pile if you have a group item, such as a heap of coins.

    This is done using the 'Statistics' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Statistics', which will display the properties you can edit.  You should see this:
     
     


     











    This should be self-explanatory.

    2.2.11 - Changing an object's behavior

    In release 0.5 you can also change the way an individual object interacts with the rest of the world, by giving it its own unique set of functions.

    This is done using the 'Behaviour' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Behaviour', which will display the properties you can edit.  You should see this:
     
     


     











    Each of the boxes (except Speech File) is a VRM function which is called when the event happens.  You can choose this from a list.

    Speech File is the only one which is not a VRM file: instead you enter the path to the file containing the conversation.
    In the current release, there is no list of files.  However the program will check if the filename you have entered is correct, and warn you if it does not exist.
     

    2.3 - Editing Rooftops

    2.3.1 - The editor in Rooftop mode

    This is a screenshot of the editor in Rooftop mode.
    As you can see, the editor is exactly the same as for Background Tiles, so familiarise yourself with the Background editor first.


     









    2.3.2 - Editing rooftops

    Rooftops are similar in concept to Background tiles, except that background tiles will interact with sprites.

    Rooftops are completely separate and are for decorative purposes only.

    As the name implies, Rooftops are special tiles that are drawn above everything else in the game.  They are not always drawn, and the rooftop layer can be shown or removed at will by VRM scripts.  By default, they will be removed if the player is underneath a tile.

    At the bottom of the screen is the set of tiles that can be used.  These are defined in the script file.
    Each tile is a single frame, and it may or may not cause the roof to disappear when the player is underneath it.
    (You don't want this to happen when the player is standing outside the building and the roof is overhanging.)

    Basically you just click and paint the roof tiles.  The first tile in the list is blank and can be used to erase bits of roof.



     
     

    Part 3 - The Script File


    Warning : the following chapters are out of date. They covers the old SEER language, which has now been removed.

    Some informations about new script language PEscript can be found here.
     

    3.1 - What is the script file and what does it do?

    Although you can use the default objects and their behaviours to good effect, as a 'super-ultima-6' engine, you will at some stage want to add your own graphics and objects to the game.

    To do this you must go into the main script file.
    You can either do this manually, or you can use the graphical Script editor, SCRIPTER.
    Scripter is not documented yet, but if you read this chapter and then play around with it, it should be easy enough to pick up.
     

    The IRE script file is a description file that describes a game written using
    IRE.  It tells the program which sprites will be loaded, it binds the sprites
    into animation sequences and defines the behaviour of characters in the game.

    The script file is parsed by the game (and the editor) as it starts up, and any errors it detects will be reported at this stage, with a red and green error report (except in Linux and BeOS which are black-and-white).
     
     


     











    If you intend to start playing around with script files, It is a good idea to print this document out for reference.

    Here are some rules for writing script files:

    3.2 - Script file sections

    Let's look at each section in turn.

    3.2.1 - Section: sprites

    The sprites section is used to declare sprites that will be used in the game.
    All moving images and map tiles that appear in the game must be declared here.

    The sprites section is basically a list consisting of the following form:
     

    SECTION: sprites
        name    filename
        name2   filename2
        name3   filename3

    'name' is the title of the sprite.  Every time you want to refer to this image,
    you should call it by this name.

    'filename' is the file containing the image.  Images are stored as autodesk animator .CEL files, or .PCX files.

    The list will continue until the next section is reached.
     

    EXAMPLE:

    SECTION: sprites
    left_frame      sprites\left01.cel
    left_frame2     sprites\left02.cel
    left_frame3     sprites\left03.cel

    right_frame     sprites\right01.cel
    right_frame2    sprites\right02.cel
    right_frame3    sprites\right03.cel

    up_frame        sprites\up01.cel
    up_frame2       sprites\up02.cel
    up_frame3       sprites\up03.cel

    down_frame      sprites\down01.cel
    down_frame2     sprites\down02.cel
    down_frame3     sprites\down03.cel
     

    3.2.2 - Section: sequences

    The sequences section is used to declare all animation sequences.
    Any animation, character or object that appears in the game must have its
    animation declared here.

    There are two ways to declare sequences, the 'traditional' way, and the Quick
    way.

    Traditionally, sequences are declared like this:

    SECTION: sequences

    name  sequence_name
    <options>
    framelist:
    frame1
    frame2
    ...
    END
    'name'
    NAME is the title of this animation.  Every time you want to refer to this animation, (in other parts of the script, or the Rooftops editor)  you will use this name.

    'framelist:'
    FRAMELIST: marks the start of the list of frames. All frames in the list are entries in the SPRITES section.

    'END'
    END marks the end of the list of frames.
    I.E, everything between framelist: and END will be treated as a frame, and the program will try to find it in the sprite list.

    <options>
    You don't literally type '<options>'.  Instead, this is the part where you can specify some flags to control the animation.

    The following flags are understood by the game:
     
    pingpong This makes the animation play backwards when it finishes. 
    E.g. frame 1, frame 2, frame 3, frame 2, frame 1
    loops This will make the animation repeat endlessly.
    stepped This makes the animation play only after each turn of the game, rather than continuously.
    overlay <sprite> This will make the specified sprite appear on top of the animation.  The overlay will be a single frame, not a real animation.  For example, the blood on the dead player is an overlay.

    'LOOPED' or 'LOOP' can be used as alternatives to 'LOOPS'.
     

    Quick sequences

    Although the sequence declarations are OK for most things, it is over-long for simple sequences which only need one frame.  For example, map tiles will usually consist of a single frame, and the above declaration is overkill.

    To speed this up, I added a quicker, easier way to define simple sequences
    for map tiles and other single-frame entities.

    These are called QuickNames, and they are a one-line sequence definition.

    Suppose you wanted to declare this sequence:

    name    GrassTile
    framelist:
    grasstile00
    END
    Using a QuickName to declare the tile, it would be done this way:
     
    quickname    GrassTile    grasstile00
    ..which is a lot simpler (though much less flexible).

    For reference only, it can be noted that the actual declaration of a QuickName
    consists of three words.
     
     
    1.  quickname Start the declaration
    2.  sequence_name Identifying name of the sequence being created
    3.  sprite_name A sprite from the SPRITES: section

    EXAMPLES:

        SECTION: sequences

        name    MoveLeft
        framelist:
        left_frame
        left_frame2
        left_frame3
        END

        name    Moveright
        framelist:
        right_frame
        right_frame2
        right_frame3
        END

        name    Moveup
        framelist:
        up_frame
        up_frame2
        up_frame3
        END

        name    Movedown
        framelist:
        down_frame
        down_frame2
        down_frame3
        END

        name    Dead_Guy
        overlay  blood
        framelist:
        dead_guy
        END

        lexible).

    For referenco the container.

    Creating and Removing objects

    'Create object' is the button used to create an object.  Clicking on this will bring up the familiar creation menu.

    To remove an object, first click on the object you want to remove in the list.  It will turn red, indicating that it has been selected.
    Then click on 'Remove object' and the chosen object will disappear.

    Moving Objects out of the container.

    First, highlight the object you want to move out of the container.
    Then click on 'Move Outside' and the object will disappear from the list.  When you leave the pocket editing window, you will
    find the object on top of the container.

    Bringing Objects in to the container.

    First, get out of the pocket editor.
    Select the container, and place it ON TOP of the object you want to be inside the container.
    Now, making sure the object is highlighted, click on 'Edit Pockets', and choose 'Bring Inside'.
    Press 'Y' to continue and the object will be there.

    CAVEAT: It is not currently possible to edit the properties of an object while it is inside a container.  If you wish to adjust the direction or tag number of an object in a container, you will have to move it out of the container first.
     

    2.2.9 - Setting an object's owner

    In release 0.5 objects can now have owners, who get angry if their object is stolen.
    In order for this to work, you must specify who owns the object.

    At the bottom of the panel is a field marked 'Object is property of:'.
    If you click on this while an object is selected, you will be asked to click on the person who owns the object.

    Here is the screen you will see:
     
     


     











    TYou can pan around the map to find the person who owns it, and click on them.  They will be highlighted red when an object they own has been selected.

    Alternatively you can choose the person from a list (of all objects which are marked as 'Person' and have an individual name).

    If you decide that the object should be public property, you can click on 'Make Public Property'.
     

    2.2.10 - Changing an object's statistics

    In release 0.5 it is now possible to change the statistics of a single object without using the scriptfile.
    This allows you to create special variations of an object by giving it individual properties.
    It also allows you to specify the number of objects in a pile if you have a group item, such as a heap of coins.

    This is done using the 'Statistics' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Statistics', which will display the properties you can edit.  You should see this:
     
     


     











    This should be self-explanatory.

    2.2.11 - Changing an object's behavior

    In release 0.5 you can also change the way an individual object interacts with the rest of the world, by giving it its own unique set of functions.

    This is done using the 'Behaviour' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Behaviour', which will display the properties you can edit.  You should see this:
     
     


     











    Each of the boxes (except Speech File) is a VRM function which is called when the event happens.  You can choose this from a list.

    Speech File is the only one which is not a VRM file: instead you enter the path to the file containing the conversation.
    In the current release, there is no list of files.  However the program will check if the filename you have entered is correct, and warn you if it does not exist.
     

    2.3 - Editing Rooftops

    2.3.1 - The editor in Rooftop mode

    This is a screenshot of the editor in Rooftop mode.
    As you can see, the editor is exactly the same as for Background Tiles, so familiarise yourself with the Background editor first.


     









    2.3.2 - Editing rooftops

    Rooftops are similar in concept to Background tiles, except that background tiles will interact with sprites.

    Rooftops are completely separate and are for decorative purposes only.

    As the name implies, Rooftops are special tiles that are drawn above everything else in the game.  They are not always drawn, and the rooftop layer can be shown or removed at will by VRM scripts.  By default, they will be removed if the player is underneath a tile.

    At the bottom of the screen is the set of tiles that can be used.  These are defined in the script file.
    Each tile is a single frame, and it may or may not cause the roof to disappear when the player is underneath it.
    (You don't want this to happen when the player is standing outside the building and the roof is overhanging.)

    Basically you just click and paint the roof tiles.  The first tile in the list is blank and can be used to erase bits of roof.



     
     

    Part 3 - The Script File


    Warning : the following chapters are out of date. They covers the old SEER language, which has now been removed.

    Some informations about new script language PEscript can be found here.
     

    3.1 - What is the script file and what does it do?

    Although you can use the default objects and their behaviours to good effect, as a 'super-ultima-6' engine, you will at some stage want to add your own graphics and objects to the game.

    To do this you must go into the main script file.
    You can either do this manually, or you can use the graphical Script editor, SCRIPTER.
    Scripter is not documented yet, but if you read this chapter and then play around with it, it should be easy enough to pick up.
     

    The IRE script file is a description file that describes a game written using
    IRE.  It tells the program which sprites will be loaded, it binds the sprites
    into animation sequences and defines the behaviour of characters in the game.

    The script file is parsed by the game (and the editor) as it starts up, and any errors it detects will be reported at this stage, with a red and green error report (except in Linux and BeOS which are black-and-white).
     
     


     











    If you intend to start playing around with script files, It is a good idea to print this document out for reference.

    Here are some rules for writing script files:

    • The script file consists of several sections.
    • Each section starts with the statement 'SECTION: sprites' for example.  The colon is necessary.
    • # is used as a comment.  Anything following a # will be ignored.
    • The compiler will often IGNORE anything it does not understand.
    • The case of the letters in the script file does not matter.  For instance, 'WORD' is the same as 'word'.
    • Spaces, whitespace and commas are all treated as spaces, and will appear as a single space in the error dumps.  Comments will not appear in the error dump.

    3.2 - Script file sections

    Let's look at each section in turn.

    3.2.1 - Section: sprites

    The sprites section is used to declare sprites that will be used in the game.
    All moving images and map tiles that appear in the game must be declared here.

    The sprites section is basically a list consisting of the following form:
     

    SECTION: sprites
        name    filename
        name2   filename2
        name3   filename3

    'name' is the title of the sprite.  Every time you want to refer to this image,
    you should call it by this name.

    'filename' is the file containing the image.  Images are stored as autodesk animator .CEL files, or .PCX files.

    The list will continue until the next section is reached.
     

    EXAMPLE:

    SECTION: sprites
    left_frame      sprites\left01.cel
    left_frame2     sprites\left02.cel
    left_frame3     sprites\left03.cel

    right_frame     sprites\right01.cel
    right_frame2    sprites\right02.cel
    right_frame3    sprites\right03.cel

    up_frame        sprites\up01.cel
    up_frame2       sprites\up02.cel
    up_frame3       sprites\up03.cel

    down_frame      sprites\down01.cel
    down_frame2     sprites\down02.cel
    down_frame3     sprites\down03.cel
     

    3.2.2 - Section: sequences

    The sequences section is used to declare all animation sequences.
    Any animation, character or object that appears in the game must have its
    animation declared here.

    There are two ways to declare sequences, the 'traditional' way, and the Quick
    way.

    Traditionally, sequences are declared like this:

    SECTION: sequences

    name  sequence_name
    <options>
    framelist:
    frame1
    frame2
    ...
    END
    'name'
    NAME is the title of this animation.  Every time you want to refer to this animation, (in other parts of the script, or the Rooftops editor)  you will use this name.

    'framelist:'
    FRAMELIST: marks the start of the list of frames. All frames in the list are entries in the SPRITES section.

    'END'
    END marks the end of the list of frames.
    I.E, everything between framelist: and END will be treated as a frame, and the program will try to find it in the sprite list.

    <options>
    You don't literally type '<options>'.  Instead, this is the part where you can specify some flags to control the animation.

    The following flags are understood by the game:
     
    pingpong This makes the animation play backwards when it finishes. 
    E.g. frame 1, frame 2, frame 3, frame 2, frame 1
    loops This will make the animation repeat endlessly.
    stepped This makes the animation play only after each turn of the game, rather than continuously.
    overlay <sprite> This will make the specified sprite appear on top of the animation.  The overlay will be a single frame, not a real animation.  For example, the blood on the dead player is an overlay.

    'LOOPED' or 'LOOP' can be used as alternatives to 'LOOPS'.
     

    Quick sequences

    Although the sequence declarations are OK for most things, it is over-long for simple sequences which only need one frame.  For example, map tiles will usually consist of a single frame, and the above declaration is overkill.

    To speed this up, I added a quicker, easier way to define simple sequences
    for map tiles and other single-frame entities.

    These are called QuickNames, and they are a one-line sequence definition.

    Suppose you wanted to declare this sequence:

    name    GrassTile
    framelist:
    grasstile00
    END
    Using a QuickName to declare the tile, it would be done this way:
     
    quickname    GrassTile    grasstile00
    ..which is a lot simpler (though much less flexible).

    For reference only, it can be noted that the actual declaration of a QuickName
    consists of three words.
     
     
    1.  quickname Start the declaration
    2.  sequence_name Identifying name of the sequence being created
    3.  sprite_name A sprite from the SPRITES: section

    EXAMPLES:

        SECTION: sequences

        name    MoveLeft
        framelist:
        left_frame
        left_frame2
        left_frame3
        END

        name    Moveright
        framelist:
        right_frame
        right_frame2
        right_frame3
        END

        name    Moveup
        framelist:
        up_frame
        up_frame2
        up_frame3
        END

        name    Movedown
        framelist:
        down_frame
        down_frame2
        down_frame3
        END

        name    Dead_Guy
        overlay  blood
        framelist:
        dead_guy
        END

        lexible).

    For referenco the container.

    Creating and Removing objects

    'Create object' is the button used to create an object.  Clicking on this will bring up the familiar creation menu.

    To remove an object, first click on the object you want to remove in the list.  It will turn red, indicating that it has been selected.
    Then click on 'Remove object' and the chosen object will disappear.

    Moving Objects out of the container.

    First, highlight the object you want to move out of the container.
    Then click on 'Move Outside' and the object will disappear from the list.  When you leave the pocket editing window, you will
    find the object on top of the container.

    Bringing Objects in to the container.

    First, get out of the pocket editor.
    Select the container, and place it ON TOP of the object you want to be inside the container.
    Now, making sure the object is highlighted, click on 'Edit Pockets', and choose 'Bring Inside'.
    Press 'Y' to continue and the object will be there.

    CAVEAT: It is not currently possible to edit the properties of an object while it is inside a container.  If you wish to adjust the direction or tag number of an object in a container, you will have to move it out of the container first.
     

    2.2.9 - Setting an object's owner

    In release 0.5 objects can now have owners, who get angry if their object is stolen.
    In order for this to work, you must specify who owns the object.

    At the bottom of the panel is a field marked 'Object is property of:'.
    If you click on this while an object is selected, you will be asked to click on the person who owns the object.

    Here is the screen you will see:
     
     


     











    TYou can pan around the map to find the person who owns it, and click on them.  They will be highlighted red when an object they own has been selected.

    Alternatively you can choose the person from a list (of all objects which are marked as 'Person' and have an individual name).

    If you decide that the object should be public property, you can click on 'Make Public Property'.
     

    2.2.10 - Changing an object's statistics

    In release 0.5 it is now possible to change the statistics of a single object without using the scriptfile.
    This allows you to create special variations of an object by giving it individual properties.
    It also allows you to specify the number of objects in a pile if you have a group item, such as a heap of coins.

    This is done using the 'Statistics' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Statistics', which will display the properties you can edit.  You should see this:
     
     


     











    This should be self-explanatory.

    2.2.11 - Changing an object's behavior

    In release 0.5 you can also change the way an individual object interacts with the rest of the world, by giving it its own unique set of functions.

    This is done using the 'Behaviour' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Behaviour', which will display the properties you can edit.  You should see this:
     
     


     











    Each of the boxes (except Speech File) is a VRM function which is called when the event happens.  You can choose this from a list.

    Speech File is the only one which is not a VRM file: instead you enter the path to the file containing the conversation.
    In the current release, there is no list of files.  However the program will check if the filename you have entered is correct, and warn you if it does not exist.
     

    2.3 - Editing Rooftops

    2.3.1 - The editor in Rooftop mode

    This is a screenshot of the editor in Rooftop mode.
    As you can see, the editor is exactly the same as for Background Tiles, so familiarise yourself with the Background editor first.


     









    2.3.2 - Editing rooftops

    Rooftops are similar in concept to Background tiles, except that background tiles will interact with sprites.

    Rooftops are completely separate and are for decorative purposes only.

    As the name implies, Rooftops are special tiles that are drawn above everything else in the game.  They are not always drawn, and the rooftop layer can be shown or removed at will by VRM scripts.  By default, they will be removed if the player is underneath a tile.

    At the bottom of the screen is the set of tiles that can be used.  These are defined in the script file.
    Each tile is a single frame, and it may or may not cause the roof to disappear when the player is underneath it.
    (You don't want this to happen when the player is standing outside the building and the roof is overhanging.)

    Basically you just click and paint the roof tiles.  The first tile in the list is blank and can be used to erase bits of roof.



     
     

    Part 3 - The Script File


    Warning : the following chapters are out of date. They covers the old SEER language, which has now been removed.

    Some informations about new script language PEscript can be found here.
     

    3.1 - What is the script file and what does it do?

    Although you can use the default objects and their behaviours to good effect, as a 'super-ultima-6' engine, you will at some stage want to add your own graphics and objects to the game.

    To do this you must go into the main script file.
    You can either do this manually, or you can use the graphical Script editor, SCRIPTER.
    Scripter is not documented yet, but if you read this chapter and then play around with it, it should be easy enough to pick up.
     

    The IRE script file is a description file that describes a game written using
    IRE.  It tells the program which sprites will be loaded, it binds the sprites
    into animation sequences and defines the behaviour of characters in the game.

    The script file is parsed by the game (and the editor) as it starts up, and any errors it detects will be reported at this stage, with a red and green error report (except in Linux and BeOS which are black-and-white).
     
     


     











    If you intend to start playing around with script files, It is a good idea to print this document out for reference.

    Here are some rules for writing script files:

    • The script file consists of several sections.
    • Each section starts with the statement 'SECTION: sprites' for example.  The colon is necessary.
    • # is used as a comment.  Anything following a # will be ignored.
    • The compiler will often IGNORE anything it does not understand.
    • The case of the letters in the script file does not matter.  For instance, 'WORD' is the same as 'word'.
    • Spaces, whitespace and commas are all treated as spaces, and will appear as a single space in the error dumps.  Comments will not appear in the error dump.

    3.2 - Script file sections

    Let's look at each section in turn.

    3.2.1 - Section: sprites

    The sprites section is used to declare sprites that will be used in the game.
    All moving images and map tiles that appear in the game must be declared here.

    The sprites section is basically a list consisting of the following form:
     

    SECTION: sprites
        name    filename
        name2   filename2
        name3   filename3

    'name' is the title of the sprite.  Every time you want to refer to this image,
    you should call it by this name.

    'filename' is the file containing the image.  Images are stored as autodesk animator .CEL files, or .PCX files.

    The list will continue until the next section is reached.
     

    EXAMPLE:

    SECTION: sprites
    left_frame      sprites\left01.cel
    left_frame2     sprites\left02.cel
    left_frame3     sprites\left03.cel

    right_frame     sprites\right01.cel
    right_frame2    sprites\right02.cel
    right_frame3    sprites\right03.cel

    up_frame        sprites\up01.cel
    up_frame2       sprites\up02.cel
    up_frame3       sprites\up03.cel

    down_frame      sprites\down01.cel
    down_frame2     sprites\down02.cel
    down_frame3     sprites\down03.cel
     

    3.2.2 - Section: sequences

    The sequences section is used to declare all animation sequences.
    Any animation, character or object that appears in the game must have its
    animation declared here.

    There are two ways to declare sequences, the 'traditional' way, and the Quick
    way.

    Traditionally, sequences are declared like this:

    SECTION: sequences

    name  sequence_name
    <options>
    framelist:
    frame1
    frame2
    ...
    END
    'name'
    NAME is the title of this animation.  Every time you want to refer to this animation, (in other parts of the script, or the Rooftops editor)  you will use this name.

    'framelist:'
    FRAMELIST: marks the start of the list of frames. All frames in the list are entries in the SPRITES section.

    'END'
    END marks the end of the list of frames.
    I.E, everything between framelist: and END will be treated as a frame, and the program will try to find it in the sprite list.

    <options>
    You don't literally type '<options>'.  Instead, this is the part where you can specify some flags to control the animation.

    The following flags are understood by the game:
     
    pingpong This makes the animation play backwards when it finishes. 
    E.g. frame 1, frame 2, frame 3, frame 2, frame 1
    loops This will make the animation repeat endlessly.
    stepped This makes the animation play only after each turn of the game, rather than continuously.
    overlay <sprite> This will make the specified sprite appear on top of the animation.  The overlay will be a single frame, not a real animation.  For example, the blood on the dead player is an overlay.

    'LOOPED' or 'LOOP' can be used as alternatives to 'LOOPS'.
     

    Quick sequences

    Although the sequence declarations are OK for most things, it is over-long for simple sequences which only need one frame.  For example, map tiles will usually consist of a single frame, and the above declaration is overkill.

    To speed this up, I added a quicker, easier way to define simple sequences
    for map tiles and other single-frame entities.

    These are called QuickNames, and they are a one-line sequence definition.

    Suppose you wanted to declare this sequence:

    name    GrassTile
    framelist:
    grasstile00
    END
    Using a QuickName to declare the tile, it would be done this way:
     
    quickname    GrassTile    grasstile00
    ..which is a lot simpler (though much less flexible).

    For reference only, it can be noted that the actual declaration of a QuickName
    consists of three words.
     
     
    1.  quickname Start the declaration
    2.  sequence_name Identifying name of the sequence being created
    3.  sprite_name A sprite from the SPRITES: section

    EXAMPLES:

        SECTION: sequences

        name    MoveLeft
        framelist:
        left_frame
        left_frame2
        left_frame3
        END

        name    Moveright
        framelist:
        right_frame
        right_frame2
        right_frame3
        END

        name    Moveup
        framelist:
        up_frame
        up_frame2
        up_frame3
        END

        name    Movedown
        framelist:
        down_frame
        down_frame2
        down_frame3
        END

        name    Dead_Guy
        overlay  blood
        framelist:
        dead_guy
        END

        lexible).

    For referenco the container.

    Creating and Removing objects

    'Create object' is the button used to create an object.  Clicking on this will bring up the familiar creation menu.

    To remove an object, first click on the object you want to remove in the list.  It will turn red, indicating that it has been selected.
    Then click on 'Remove object' and the chosen object will disappear.

    Moving Objects out of the container.

    First, highlight the object you want to move out of the container.
    Then click on 'Move Outside' and the object will disappear from the list.  When you leave the pocket editing window, you will
    find the object on top of the container.

    Bringing Objects in to the container.

    First, get out of the pocket editor.
    Select the container, and place it ON TOP of the object you want to be inside the container.
    Now, making sure the object is highlighted, click on 'Edit Pockets', and choose 'Bring Inside'.
    Press 'Y' to continue and the object will be there.

    CAVEAT: It is not currently possible to edit the properties of an object while it is inside a container.  If you wish to adjust the direction or tag number of an object in a container, you will have to move it out of the container first.
     

    2.2.9 - Setting an object's owner

    In release 0.5 objects can now have owners, who get angry if their object is stolen.
    In order for this to work, you must specify who owns the object.

    At the bottom of the panel is a field marked 'Object is property of:'.
    If you click on this while an object is selected, you will be asked to click on the person who owns the object.

    Here is the screen you will see:
     
     


     











    TYou can pan around the map to find the person who owns it, and click on them.  They will be highlighted red when an object they own has been selected.

    Alternatively you can choose the person from a list (of all objects which are marked as 'Person' and have an individual name).

    If you decide that the object should be public property, you can click on 'Make Public Property'.
     

    2.2.10 - Changing an object's statistics

    In release 0.5 it is now possible to change the statistics of a single object without using the scriptfile.
    This allows you to create special variations of an object by giving it individual properties.
    It also allows you to specify the number of objects in a pile if you have a group item, such as a heap of coins.

    This is done using the 'Statistics' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Statistics', which will display the properties you can edit.  You should see this:
     
     


     











    This should be self-explanatory.

    2.2.11 - Changing an object's behavior

    In release 0.5 you can also change the way an individual object interacts with the rest of the world, by giving it its own unique set of functions.

    This is done using the 'Behaviour' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Behaviour', which will display the properties you can edit.  You should see this:
     
     


     











    Each of the boxes (except Speech File) is a VRM function which is called when the event happens.  You can choose this from a list.

    Speech File is the only one which is not a VRM file: instead you enter the path to the file containing the conversation.
    In the current release, there is no list of files.  However the program will check if the filename you have entered is correct, and warn you if it does not exist.
     

    2.3 - Editing Rooftops

    2.3.1 - The editor in Rooftop mode

    This is a screenshot of the editor in Rooftop mode.
    As you can see, the editor is exactly the same as for Background Tiles, so familiarise yourself with the Background editor first.


     









    2.3.2 - Editing rooftops

    Rooftops are similar in concept to Background tiles, except that background tiles will interact with sprites.

    Rooftops are completely separate and are for decorative purposes only.

    As the name implies, Rooftops are special tiles that are drawn above everything else in the game.  They are not always drawn, and the rooftop layer can be shown or removed at will by VRM scripts.  By default, they will be removed if the player is underneath a tile.

    At the bottom of the screen is the set of tiles that can be used.  These are defined in the script file.
    Each tile is a single frame, and it may or may not cause the roof to disappear when the player is underneath it.
    (You don't want this to happen when the player is standing outside the building and the roof is overhanging.)

    Basically you just click and paint the roof tiles.  The first tile in the list is blank and can be used to erase bits of roof.



     
     

    Part 3 - The Script File


    Warning : the following chapters are out of date. They covers the old SEER language, which has now been removed.

    Some informations about new script language PEscript can be found here.
     

    3.1 - What is the script file and what does it do?

    Although you can use the default objects and their behaviours to good effect, as a 'super-ultima-6' engine, you will at some stage want to add your own graphics and objects to the game.

    To do this you must go into the main script file.
    You can either do this manually, or you can use the graphical Script editor, SCRIPTER.
    Scripter is not documented yet, but if you read this chapter and then play around with it, it should be easy enough to pick up.
     

    The IRE script file is a description file that describes a game written using
    IRE.  It tells the program which sprites will be loaded, it binds the sprites
    into animation sequences and defines the behaviour of characters in the game.

    The script file is parsed by the game (and the editor) as it starts up, and any errors it detects will be reported at this stage, with a red and green error report (except in Linux and BeOS which are black-and-white).
     
     


     











    If you intend to start playing around with script files, It is a good idea to print this document out for reference.

    Here are some rules for writing script files:

    • The script file consists of several sections.
    • Each section starts with the statement 'SECTION: sprites' for example.  The colon is necessary.
    • # is used as a comment.  Anything following a # will be ignored.
    • The compiler will often IGNORE anything it does not understand.
    • The case of the letters in the script file does not matter.  For instance, 'WORD' is the same as 'word'.
    • Spaces, whitespace and commas are all treated as spaces, and will appear as a single space in the error dumps.  Comments will not appear in the error dump.

    3.2 - Script file sections

    Let's look at each section in turn.

    3.2.1 - Section: sprites

    The sprites section is used to declare sprites that will be used in the game.
    All moving images and map tiles that appear in the game must be declared here.

    The sprites section is basically a list consisting of the following form:
     

    SECTION: sprites
        name    filename
        name2   filename2
        name3   filename3

    'name' is the title of the sprite.  Every time you want to refer to this image,
    you should call it by this name.

    'filename' is the file containing the image.  Images are stored as autodesk animator .CEL files, or .PCX files.

    The list will continue until the next section is reached.
     

    EXAMPLE:

    SECTION: sprites
    left_frame      sprites\left01.cel
    left_frame2     sprites\left02.cel
    left_frame3     sprites\left03.cel

    right_frame     sprites\right01.cel
    right_frame2    sprites\right02.cel
    right_frame3    sprites\right03.cel

    up_frame        sprites\up01.cel
    up_frame2       sprites\up02.cel
    up_frame3       sprites\up03.cel

    down_frame      sprites\down01.cel
    down_frame2     sprites\down02.cel
    down_frame3     sprites\down03.cel
     

    3.2.2 - Section: sequences

    The sequences section is used to declare all animation sequences.
    Any animation, character or object that appears in the game must have its
    animation declared here.

    There are two ways to declare sequences, the 'traditional' way, and the Quick
    way.

    Traditionally, sequences are declared like this:

    SECTION: sequences

    name  sequence_name
    <options>
    framelist:
    frame1
    frame2
    ...
    END
    'name'
    NAME is the title of this animation.  Every time you want to refer to this animation, (in other parts of the script, or the Rooftops editor)  you will use this name.

    'framelist:'
    FRAMELIST: marks the start of the list of frames. All frames in the list are entries in the SPRITES section.

    'END'
    END marks the end of the list of frames.
    I.E, everything between framelist: and END will be treated as a frame, and the program will try to find it in the sprite list.

    <options>
    You don't literally type '<options>'.  Instead, this is the part where you can specify some flags to control the animation.

    The following flags are understood by the game:
     
    pingpong This makes the animation play backwards when it finishes. 
    E.g. frame 1, frame 2, frame 3, frame 2, frame 1
    loops This will make the animation repeat endlessly.
    stepped This makes the animation play only after each turn of the game, rather than continuously.
    overlay <sprite> This will make the specified sprite appear on top of the animation.  The overlay will be a single frame, not a real animation.  For example, the blood on the dead player is an overlay.

    'LOOPED' or 'LOOP' can be used as alternatives to 'LOOPS'.
     

    Quick sequences

    Although the sequence declarations are OK for most things, it is over-long for simple sequences which only need one frame.  For example, map tiles will usually consist of a single frame, and the above declaration is overkill.

    To speed this up, I added a quicker, easier way to define simple sequences
    for map tiles and other single-frame entities.

    These are called QuickNames, and they are a one-line sequence definition.

    Suppose you wanted to declare this sequence:

    name    GrassTile
    framelist:
    grasstile00
    END
    Using a QuickName to declare the tile, it would be done this way:
     
    quickname    GrassTile    grasstile00
    ..which is a lot simpler (though much less flexible).

    For reference only, it can be noted that the actual declaration of a QuickName
    consists of three words.
     
     
    1.  quickname Start the declaration
    2.  sequence_name Identifying name of the sequence being created
    3.  sprite_name A sprite from the SPRITES: section

    EXAMPLES:

        SECTION: sequences

        name    MoveLeft
        framelist:
        left_frame
        left_frame2
        left_frame3
        END

        name    Moveright
        framelist:
        right_frame
        right_frame2
        right_frame3
        END

        name    Moveup
        framelist:
        up_frame
        up_frame2
        up_frame3
        END

        name    Movedown
        framelist:
        down_frame
        down_frame2
        down_frame3
        END

        name    Dead_Guy
        overlay  blood
        framelist:
        dead_guy
        END

        lexible).

    For referenco the container.

    Creating and Removing objects

    'Create object' is the button used to create an object.  Clicking on this will bring up the familiar creation menu.

    To remove an object, first click on the object you want to remove in the list.  It will turn red, indicating that it has been selected.
    Then click on 'Remove object' and the chosen object will disappear.

    Moving Objects out of the container.

    First, highlight the object you want to move out of the container.
    Then click on 'Move Outside' and the object will disappear from the list.  When you leave the pocket editing window, you will
    find the object on top of the container.

    Bringing Objects in to the container.

    First, get out of the pocket editor.
    Select the container, and place it ON TOP of the object you want to be inside the container.
    Now, making sure the object is highlighted, click on 'Edit Pockets', and choose 'Bring Inside'.
    Press 'Y' to continue and the object will be there.

    CAVEAT: It is not currently possible to edit the properties of an object while it is inside a container.  If you wish to adjust the direction or tag number of an object in a container, you will have to move it out of the container first.
     

    2.2.9 - Setting an object's owner

    In release 0.5 objects can now have owners, who get angry if their object is stolen.
    In order for this to work, you must specify who owns the object.

    At the bottom of the panel is a field marked 'Object is property of:'.
    If you click on this while an object is selected, you will be asked to click on the person who owns the object.

    Here is the screen you will see:
     
     


     











    TYou can pan around the map to find the person who owns it, and click on them.  They will be highlighted red when an object they own has been selected.

    Alternatively you can choose the person from a list (of all objects which are marked as 'Person' and have an individual name).

    If you decide that the object should be public property, you can click on 'Make Public Property'.
     

    2.2.10 - Changing an object's statistics

    In release 0.5 it is now possible to change the statistics of a single object without using the scriptfile.
    This allows you to create special variations of an object by giving it individual properties.
    It also allows you to specify the number of objects in a pile if you have a group item, such as a heap of coins.

    This is done using the 'Statistics' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Statistics', which will display the properties you can edit.  You should see this:
     
     


     











    This should be self-explanatory.

    2.2.11 - Changing an object's behavior

    In release 0.5 you can also change the way an individual object interacts with the rest of the world, by giving it its own unique set of functions.

    This is done using the 'Behaviour' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Behaviour', which will display the properties you can edit.  You should see this:
     
     


     











    Each of the boxes (except Speech File) is a VRM function which is called when the event happens.  You can choose this from a list.

    Speech File is the only one which is not a VRM file: instead you enter the path to the file containing the conversation.
    In the current release, there is no list of files.  However the program will check if the filename you have entered is correct, and warn you if it does not exist.
     

    2.3 - Editing Rooftops

    2.3.1 - The editor in Rooftop mode

    This is a screenshot of the editor in Rooftop mode.
    As you can see, the editor is exactly the same as for Background Tiles, so familiarise yourself with the Background editor first.


     









    2.3.2 - Editing rooftops

    Rooftops are similar in concept to Background tiles, except that background tiles will interact with sprites.

    Rooftops are completely separate and are for decorative purposes only.

    As the name implies, Rooftops are special tiles that are drawn above everything else in the game.  They are not always drawn, and the rooftop layer can be shown or removed at will by VRM scripts.  By default, they will be removed if the player is underneath a tile.

    At the bottom of the screen is the set of tiles that can be used.  These are defined in the script file.
    Each tile is a single frame, and it may or may not cause the roof to disappear when the player is underneath it.
    (You don't want this to happen when the player is standing outside the building and the roof is overhanging.)

    Basically you just click and paint the roof tiles.  The first tile in the list is blank and can be used to erase bits of roof.



     
     

    Part 3 - The Script File


    Warning : the following chapters are out of date. They covers the old SEER language, which has now been removed.

    Some informations about new script language PEscript can be found here.
     

    3.1 - What is the script file and what does it do?

    Although you can use the default objects and their behaviours to good effect, as a 'super-ultima-6' engine, you will at some stage want to add your own graphics and objects to the game.

    To do this you must go into the main script file.
    You can either do this manually, or you can use the graphical Script editor, SCRIPTER.
    Scripter is not documented yet, but if you read this chapter and then play around with it, it should be easy enough to pick up.
     

    The IRE script file is a description file that describes a game written using
    IRE.  It tells the program which sprites will be loaded, it binds the sprites
    into animation sequences and defines the behaviour of characters in the game.

    The script file is parsed by the game (and the editor) as it starts up, and any errors it detects will be reported at this stage, with a red and green error report (except in Linux and BeOS which are black-and-white).
     
     


     











    If you intend to start playing around with script files, It is a good idea to print this document out for reference.

    Here are some rules for writing script files:

    • The script file consists of several sections.
    • Each section starts with the statement 'SECTION: sprites' for example.  The colon is necessary.
    • # is used as a comment.  Anything following a # will be ignored.
    • The compiler will often IGNORE anything it does not understand.
    • The case of the letters in the script file does not matter.  For instance, 'WORD' is the same as 'word'.
    • Spaces, whitespace and commas are all treated as spaces, and will appear as a single space in the error dumps.  Comments will not appear in the error dump.

    3.2 - Script file sections

    Let's look at each section in turn.

    3.2.1 - Section: sprites

    The sprites section is used to declare sprites that will be used in the game.
    All moving images and map tiles that appear in the game must be declared here.

    The sprites section is basically a list consisting of the following form:
     

    SECTION: sprites
        name    filename
        name2   filename2
        name3   filename3

    'name' is the title of the sprite.  Every time you want to refer to this image,
    you should call it by this name.

    'filename' is the file containing the image.  Images are stored as autodesk animator .CEL files, or .PCX files.

    The list will continue until the next section is reached.
     

    EXAMPLE:

    SECTION: sprites
    left_frame      sprites\left01.cel
    left_frame2     sprites\left02.cel
    left_frame3     sprites\left03.cel

    right_frame     sprites\right01.cel
    right_frame2    sprites\right02.cel
    right_frame3    sprites\right03.cel

    up_frame        sprites\up01.cel
    up_frame2       sprites\up02.cel
    up_frame3       sprites\up03.cel

    down_frame      sprites\down01.cel
    down_frame2     sprites\down02.cel
    down_frame3     sprites\down03.cel
     

    3.2.2 - Section: sequences

    The sequences section is used to declare all animation sequences.
    Any animation, character or object that appears in the game must have its
    animation declared here.

    There are two ways to declare sequences, the 'traditional' way, and the Quick
    way.

    Traditionally, sequences are declared like this:

    SECTION: sequences

    name  sequence_name
    <options>
    framelist:
    frame1
    frame2
    ...
    END
    'name'
    NAME is the title of this animation.  Every time you want to refer to this animation, (in other parts of the script, or the Rooftops editor)  you will use this name.

    'framelist:'
    FRAMELIST: marks the start of the list of frames. All frames in the list are entries in the SPRITES section.

    'END'
    END marks the end of the list of frames.
    I.E, everything between framelist: and END will be treated as a frame, and the program will try to find it in the sprite list.

    <options>
    You don't literally type '<options>'.  Instead, this is the part where you can specify some flags to control the animation.

    The following flags are understood by the game:
     
    pingpong This makes the animation play backwards when it finishes. 
    E.g. frame 1, frame 2, frame 3, frame 2, frame 1
    loops This will make the animation repeat endlessly.
    stepped This makes the animation play only after each turn of the game, rather than continuously.
    overlay <sprite> This will make the specified sprite appear on top of the animation.  The overlay will be a single frame, not a real animation.  For example, the blood on the dead player is an overlay.

    'LOOPED' or 'LOOP' can be used as alternatives to 'LOOPS'.
     

    Quick sequences

    Although the sequence declarations are OK for most things, it is over-long for simple sequences which only need one frame.  For example, map tiles will usually consist of a single frame, and the above declaration is overkill.

    To speed this up, I added a quicker, easier way to define simple sequences
    for map tiles and other single-frame entities.

    These are called QuickNames, and they are a one-line sequence definition.

    Suppose you wanted to declare this sequence:

    name    GrassTile
    framelist:
    grasstile00
    END
    Using a QuickName to declare the tile, it would be done this way:
     
    quickname    GrassTile    grasstile00
    ..which is a lot simpler (though much less flexible).

    For reference only, it can be noted that the actual declaration of a QuickName
    consists of three words.
     
     
    1.  quickname Start the declaration
    2.  sequence_name Identifying name of the sequence being created
    3.  sprite_name A sprite from the SPRITES: section

    EXAMPLES:

        SECTION: sequences

        name    MoveLeft
        framelist:
        left_frame
        left_frame2
        left_frame3
        END

        name    Moveright
        framelist:
        right_frame
        right_frame2
        right_frame3
        END

        name    Moveup
        framelist:
        up_frame
        up_frame2
        up_frame3
        END

        name    Movedown
        framelist:
        down_frame
        down_frame2
        down_frame3
        END

        name    Dead_Guy
        overlay  blood
        framelist:
        dead_guy
        END

        lexible).

    For referenco the container.

    Creating and Removing objects

    'Create object' is the button used to create an object.  Clicking on this will bring up the familiar creation menu.

    To remove an object, first click on the object you want to remove in the list.  It will turn red, indicating that it has been selected.
    Then click on 'Remove object' and the chosen object will disappear.

    Moving Objects out of the container.

    First, highlight the object you want to move out of the container.
    Then click on 'Move Outside' and the object will disappear from the list.  When you leave the pocket editing window, you will
    find the object on top of the container.

    Bringing Objects in to the container.

    First, get out of the pocket editor.
    Select the container, and place it ON TOP of the object you want to be inside the container.
    Now, making sure the object is highlighted, click on 'Edit Pockets', and choose 'Bring Inside'.
    Press 'Y' to continue and the object will be there.

    CAVEAT: It is not currently possible to edit the properties of an object while it is inside a container.  If you wish to adjust the direction or tag number of an object in a container, you will have to move it out of the container first.
     

    2.2.9 - Setting an object's owner

    In release 0.5 objects can now have owners, who get angry if their object is stolen.
    In order for this to work, you must specify who owns the object.

    At the bottom of the panel is a field marked 'Object is property of:'.
    If you click on this while an object is selected, you will be asked to click on the person who owns the object.

    Here is the screen you will see:
     
     


     











    TYou can pan around the map to find the person who owns it, and click on them.  They will be highlighted red when an object they own has been selected.

    Alternatively you can choose the person from a list (of all objects which are marked as 'Person' and have an individual name).

    If you decide that the object should be public property, you can click on 'Make Public Property'.
     

    2.2.10 - Changing an object's statistics

    In release 0.5 it is now possible to change the statistics of a single object without using the scriptfile.
    This allows you to create special variations of an object by giving it individual properties.
    It also allows you to specify the number of objects in a pile if you have a group item, such as a heap of coins.

    This is done using the 'Statistics' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Statistics', which will display the properties you can edit.  You should see this:
     
     


     











    This should be self-explanatory.

    2.2.11 - Changing an object's behavior

    In release 0.5 you can also change the way an individual object interacts with the rest of the world, by giving it its own unique set of functions.

    This is done using the 'Behaviour' button.

    First, select the object you wish to modify.  When it is highlighted, you can click on 'Behaviour', which will display the properties you can edit.  You should see this:
     
     


     











    Each of the boxes (except Speech File) is a VRM function which is called when the event happens.  You can choose this from a list.

    Speech File is the only one which is not a VRM file: instead you enter the path to the file containing the conversation.
    In the current release, there is no list of files.  However the program will check if the filename you have entered is correct, and warn you if it does not exist.
     

    2.3 - Editing Rooftops

    2.3.1 - The editor in Rooftop mode

    This is a screenshot of the editor in Rooftop mode.
    As you can see, the editor is exactly the same as for Background Tiles, so familiarise yourself with the Background editor first.


     









    2.3.2 - Editing rooftops

    Rooftops are similar in concept to Background tiles, except that background tiles will interact with sprites.

    Rooftops are completely separate and are for decorative purposes only.

    As the name implies, Rooftops are special tiles that are drawn above everything else in the game.  They are not always drawn, and the rooftop layer can be shown or removed at will by VRM scripts.  By default, they will be removed if the player is underneath a tile.

    At the bottom of the screen is the set of tiles that can be used.  These are defined in the script file.
    Each tile is a single frame, and it may or may not cause the roof to disappear when the player is underneath it.
    (You don't want this to happen when the player is standing outside the building and the roof is overhanging.)

    Basically you just click and paint the roof tiles.  The first tile in the list is blank and can be used to erase bits of roof.



     
     

    Part 3 - The Script File


    Warning : the following chapters are out of date. They covers the old SEER language, which has now been removed.

    Some informations about new script language PEscript can be found here.
     

    3.1 - What is the script file and what does it do?

    Although you can use the default objects and their behaviours to good effect, as a 'super-ultima-6' engine, you will at some stage want to add your own graphics and objects to the game.

    To do this you must go into the main script file.
    You can either do this manually, or you can use the graphical Script editor, SCRIPTER.
    Scripter is not documented yet, but if you read this chapter and then play around with it, it should be easy enough to pick up.
     

    The IRE script file is a description file that describes a game written using
    IRE.  It tells the program which sprites will be loaded, it binds the sprites
    into animation sequences and defines the behaviour of characters in the game.

    The script file is parsed by the game (and the editor) as it starts up, and any errors it detects will be reported at this stage, with a red and green error report (except in Linux and BeOS which are black-and-white).
     
     


     











    If you intend to start playing around with script files, It is a good idea to print this document out for reference.

    Here are some rules for writing script files:

    • The script file consists of several sections.
    • Each section starts with the statement 'SECTION: sprites' for example.  The colon is necessary.
    • # is used as a comment.  Anything following a # will be ignored.
    • The compiler will often IGNORE anything it does not understand.
    • The case of the letters in the script file does not matter.  For instance, 'WORD' is the same as 'word'.
    • Spaces, whitespace and commas are all treated as spaces, and will appear as a single space in the error dumps.  Comments will not appear in the error dump.

    3.2 - Script file sections

    Let's look at each section in turn.

    3.2.1 - Section: sprites

    The sprites section is used to declare sprites that will be used in the game.
    All moving images and map tiles that appear in the game must be declared here.

    The sprites section is basically a list consisting of the following form:
     

    SECTION: sprites
        name    filename
        name2   filename2
        name3   filename3

    'name' is the title of the sprite.  Every time you want to refer to this image,
    you should call it by this name.

    'filename' is the file containing the image.  Images are stored as autodesk animator .CEL files, or .PCX files.

    The list will continue until the next section is reached.
     

    EXAMPLE:

    SECTION: sprites
    left_frame      sprites\left01.cel
    left_frame2     sprites\left02.cel
    left_frame3     sprites\left03.cel

    right_frame     sprites\right01.cel
    right_frame2    sprites\right02.cel
    right_frame3    sprites\right03.cel

    up_frame        sprites\up01.cel
    up_frame2       sprites\up02.cel
    up_frame3       sprites\up03.cel

    down_frame      sprites\down01.cel
    down_frame2     sprites\down02.cel
    down_frame3     sprites\down03.cel
     

    3.2.2 - Section: sequences

    The sequences section is used to declare all animation sequences.
    Any animation, character or object that appears in the game must have its
    animation declared here.

    There are two ways to declare sequences, the 'traditional' way, and the Quick
    way.

    Traditionally, sequences are declared like this:

    SECTION: sequences

    name  sequence_name
    <options>
    framelist:
    frame1
    frame2
    ...
    END
    'name'
    NAME is the title of this animation.  Every time you want to refer to this animation, (in other parts of the script, or the Rooftops editor)  you will use this name.

    'framelist:'
    FRAMELIST: marks the start of the list of frames. All frames in the list are entries in the SPRITES section.

    'END'
    END marks the end of the list of frames.
    I.E, everything between framelist: and END will be treated as a frame, and the program will try to find it in the sprite list.

    <options>
    You don't literally type '<options>'.  Instead, this is the part where you can specify some flags to control the animation.

    The following flags are understood by the game:
     
    pingpong This makes the animation play backwards when it finishes. 
    E.g. frame 1, frame 2, frame 3, frame 2, frame 1
    loops This will make the animation repeat endlessly.
    stepped This makes the animation play only after each turn of the game, rather than continuously.
    overlay <sprite> This will make the specified sprite appear on top of the animation.  The overlay will be a single frame, not a real animation.  For example, the blood on the dead player is an overlay.

    'LOOPED' or 'LOOP' can be used as alternatives to 'LOOPS'.
     

    Quick sequences

    Although the sequence declarations are OK for most things, it is over-long for simple sequences which only need one frame.  For example, map tiles will usually consist of a single frame, and the above declaration is overkill.

    To speed this up, I added a quicker, easier way to define simple sequences
    for map tiles and other single-frame entities.

    These are called QuickNames, and they are a one-line sequence definition.

    Suppose you wanted to declare this sequence:

    name    GrassTile
    framelist:
    grasstile00
    END
    Using a QuickName to declare the tile, it would be done this way:
     
    quickname    GrassTile    grasstile00
    ..which is a lot simpler (though much less flexible).

    For reference only, it can be noted that the actual declaration of a QuickName
    consists of three words.
     
     
    1.  quickname Start the declaration
    2.  sequence_name Identifying name of the sequence being created
    3.  sprite_name A sprite from the SPRITES: section

    EXAMPLES:

        SECTION: sequences

        name    MoveLeft
        framelist:
        left_frame
        left_frame2
        left_frame3
        END

        name    Moveright
        framelist:
        right_frame
        right_frame2
        right_frame3
        END

        name    Moveup
        framelist:
        up_frame
        up_frame2
        up_frame3
        END

        name    Movedown
        framelist:
        down_frame
        down_frame2
        down_frame3
        END

        name    Dead_Guy
        overlay  blood
        framelist:
        dead_guy
        END

        lexible).

    For referenco the container.

    Creating and Removing objects

    'Create object' is the button used to create an object.  Clicking on this will bring up the familiar creation menu.

    To remove an object, first click on the object you want to remove in the list.  It will turn red, indicating that it has been selected.
    Then click on 'Remove object' and the chosen object will disappear.

    Moving Objects out of the container.

    First, highlight the object you want to move out of the container.
    Then click on 'Move Outside' and the object will disappear from the list.  When you leave the pocket editing window, you will
    find the object on top of the container.

    Bringing Objects in to the container.

    First, get out of the pocket editor.
    Select the container, and place it ON TOP of the object you want to be inside the container.
    Now, making sure the object is highlighted, click on 'Edit Pockets', and choose 'Bring Inside'.
    Press 'Y' to continue and the object will be there.

    CAVEAT: It is not currently possible to edit the properties of an object while it is inside a container.  If you wish to adjust the direction or tag number of an object in a container, you will have to move it out of the container first.
     

    2.2.9 - Setting an object's owner

    In release 0.5 objects can now have owners, who get angry if their object is stolen.
    In order for this to work, you must specify who owns the object.

    At the bottom of the panel is a field marked 'Object is property of:'.
    If you click on this while an object is selected, you will be asked to click on the person who owns the object.

    Here is the screen you will see:
     
     


     











    TYou can pan around the map to find the person who owns it, and click on them.  They will be highlighted red when an object t