GRAC Introduction ----------------- Before you start looking through this file, I will point out that you won't find any instructions for actually using GRAC in here. Those details are in the reference file. This file is here to explain what GRAC is all about, particularly to non-programmers who may find the concepts unfamiliar. What is GRAC? ------------ GRAC is a slightly dodgy acronym for GRaphic Adventure Creator. As you would expect, it is used to create graphic adventures. I don't have to explain what a graphic adventure is do I? If you don't know, go to your local computer shop and buy Monkey Island 2 or Beneath a Steel Sky, play it all the way through then come back.... ...right, that's a graphic adventure. So why write an adventure game? --------------------------------------- Writing your own graphic adventure may seem a little daunting at first, but consider the following: 1. GRAC does a lot of the hard work, such as handling characters and the control panel. You won't have to become a programmer, so you can concentrate on the design. 2. You don't have to create a 15 disk monster, even a small adventure is worthwhile and could be released as PD. 3. The graphics don't have to be brilliant, what counts is the gameplay. Look at the early Lucasfilm games if you don't believe me. Above all, writing graphic adventures is an enjoyable and challenging hobby, and even a source of income if you're good enough at it. Making graphic adventures ------------------------- A graphic adventure is something like an interactive stage play. The actors (which I call characters) perform in front of a backdrop (a picture, drawn in a graphics package such as Dpaint). They use props (objects) and exit to other scenes. They also follow a script, and characters in graphic adventures can do this too. In fact, writing a graphic adventure is probably the closest you can come to making a film on your Amiga. Every production begins with a plot, and adventure games are no exception. The first thing that you have to do is decide on a scenario, and what is going to happen in the game. Then, give the player an objective, so that they know what they are trying to do. Of course, this could be hidden at first to add a sense of mystery, if that's what you want. After that you will need to create some characters. The most important character is the one controlled by the player. The others are commonly known as NPC's or non-player characters. Each character will need to have a personality, a purpose in the game, and a set of sprites showing what they look like, performing every action that they will need to make. Drawing characters ------------------ Load into a graphics program the file 'Character.iff'. These are the basic positions for a character. Note that each frame is replicated in three directions: facing right, into, and out of the screen. There is no need for the fourth direction because the right-facing frames can be flipped horizontally. There are 8 frames of the character walking, one reaching up, across and down (optional) and one of the character standing, with the head separate. The head is drawn in four positions, to animate it when the character speaks. To this you can add any other animations, but these will be in one direction only. Note that underneath each frame is a dot. This is the 'hot spot' (or the 'handle' as dpaint calls it). When the character is drawn at a point on screen, it is positioned using the hot spot. It is very, very important that the hot spot is set to the same relative position in every frame, otherwise the animation will jump all over the place. (technical note: characters move 5 pixels per frame when walking across the screen, and three pixels per frame walking into or out of the screen.) Animating characters takes practise, so use my character as a guide. You could even use the ready made character in your own game, until you are ready to draw your own. A brief note about the colour palette: This is taken from the room, not the character, so make sure that the colours are the same. I usually draw all of the characters using the last 16 colours, and keep these the same in every room. The first 16 colours can then be altered to suit the particular room without affecting the characters. Colours 17,18 and 19 are also used for the mouse pointer, and this applies to the control panel too. AGA is not supported yet by AMOS. As soon as it is, it will also be available in GRAC. To include the character in a game, each frame must be 'grabbed' in GRAC's character editor. This is something like picking up a brush in Dpaint. The character is then saved as a single file and is ready for use. Designing the control panel --------------------------- Most adventures have one of these. The control panel is a section of the screen which contains: 1. Buttons for all available verbs, 2. A window for the inventory and other text. 3. A message line. A verb, as you probably know, is an action word. Consequently, the verbs control all of the actions that the player's character can make. For example, If the player selected the verb 'examine', then clicked on an object, GRAC would print a piece of text describing that object. Other verbs could be 'use', 'take' (no need for 'drop', usually), or 'talk'. The player's inventory (a list of all object currently being carried) will be printed in the text window. No graphical inventory in this version of GRAC, sorry. Text will also be printed here when required. The message line is for GRAC's own use, for printing the name of the object under the mouse pointer, among other things. (Graphical note: the control panel has its own colour palette, independent of the room or characters. However, colours 17,18 and 19 are still used for the mouse pointer. If you are using Dpaint you will have to pick up the panel and save it as a brush so that it is smaller then the full screen.) The inventory ------------- This is a list of every item that the player can possess during the adventure. These items are similar to any other kind of object, but they don't have a physical position and are always available to the player. The player can acquire items by picking them up. There are also script (see 'scripts', next section) commands for adding or removing inventory items. Drawing a room -------------- This is the real test of your artistic talent. If you can't draw you could: 1. Get someone else who can, or 2. Buy a scanner and use photographs, or artwork on paper, or 3. Draw it anyway. As I have said before, top-class artwork is nice but not essential, or 4. Go and write a text adventure (sad person). When you are producing a picture, note that: 1. You must keep the palette consistent with any characters to be used on that screen. 3. Strong shadows and reflections should be avoided or the characters will look like vampires. (ie. they don't have shadows or reflections.) 4. Any object that the characters can go behind will need to be cut out as a brush and saved on a separate screen. (More on this later.) Moving characters (Walk zones) ------------------------------ When the player clicks on a point on the screen, the PC (player character) has to walk there. This sounds simple enough, and so it is, but first GRAC needs to know which parts of the screen the character can walk on. These areas are defined using zones. A zone is a rectangular area on the screen. Of course, floors are not always rectangular so it is possible to join several zones together to cover the entire area. Zones are edited in the room editor of GRAC. Points ------ A point is a composite entity comprising the following: 1. An X and Y coordinate on the screen (set using the mouse) 2. A direction for a character to face. Characters can be positioned at points or can be made to walk to them. Every game will need at least one point in the starting room, for the initial position of the character. The starting position is set using the 'start' button in the main menu. At this point you should be able to put together a running GRAC game featuring a character walking around a room. Hardly ground-breaking stuff, but it's a start. The problem now is that the player cannot interact with anything. This is achieved by adding objects. Objects ------- The main purposes of objects are: 1. As something that characters can walk behind, to make a scene appear more three dimensional. 2. To add a background animation. 3. To be combined with verbs so that the player can interact with the game environment. The first and second uses require foreground objects. The third could use foreground or background objects. The difference between the two is that foreground objects are displayed in front of the picture while background objects are part of the picture. Foreground objects need to be grabbed in the same way as characters, but using the object editor. Set the hot spot to the bottom centre, where the object touches the ground. Objects higher up on the screen are displayed behind objects lower down. This applies to characters too. This effect provides a kind of perspective so that objects in front will appear closer. Objects can also be animated. This will be explained later. Foreground objects have two disadvantages. The first is that they take up a lot of memory, the second is that if too many are displayed at once the game will slow down. If an object does not need to be animated or appear in front of anything a background object can be used instead. Background objects do not need to be grabbed and take up no processor time. In most ways the two types of object are identical; in fact the player will not know the difference. Interaction ----------- For an object to register under the mouse pointer it needs to have a name. For example, if you create an object and call it 'toothbrush', the word 'toothbrush' will appear in the message line when the mouse pointer is moved over the object. Generally, a character will need to walk up to an object before doing anything with it, so GRAC needs to know where the character has to walk to. This is achieved by giving the object a 'base', which is a position on the floor near the object. This is all very well; now the player can look at the toothbrush and walk up to it. It is a good idea to give all relevant objects descriptions which are printed when the player selects examine (or a verb to that effect). The description is known as a 'string' (a string of letters). You may want the player to be able to pick up the toothbrush. This requires two things. 1. An inventory item called 'toothbrush'. 2. A flag. Oh no, what's a flag? And what has it got to do with toothbrushes? Well, flags are used for signalling. In this case it is a signal to GRAC that the toothbrush has been taken, so to make it disappear from the screen. Flags are referred to by number. This is the first flag, so call it number 1. So flag number 1 means 'the toothbrush isn't there any more'. Flag number 2 may mean something completely different. There are 1000 flags; plenty for all occasions. You actually have to input '-1' for the flag number, for reasons explained in the reference file. (technical note: A flag is actually a variable, and the numbers refer to an array with 1000 elements. A value of zero means FALSE, any other value means TRUE. The default is FALSE.) Having picked up the toothbrush, the player may want to use it. Any actions except for examining something or picking it up are dealt with using scripts, described in the section below. Scripts ------- A script is a short program in GRAC's built-in language. There are many commands available, designed to cope with almost anything that could happen in an adventure. Scripts can be called by a variety of events, such as: A new room being loaded, A character performing an action, A character walking into a certain area on screen, Another script. Once the script is running, you are in complete control of what happens next. Scripts can make characters walk and talk, start animations, control sound effects.... the possibilities are endless. For a list of all of the commands, look at the 'commands' file. In this file I have provided an overview of GRAC, which should be enough to get you started. Full instructions are available in the 'reference' file.