The Wayback Machine - http://web.archive.org/web/20011213034104/http://members.ozemail.com.au:80/~ptrkelly/agi/docs/room_structure.html

Basic structure of a room


Each room in a game has it's own individual logic (except in special cases which I won't go into here). Room 2 of the template game gives you an example of the basic structure of a room, which I will go through in detail here. Note that these sections are not required in each room - but it is recommended that you follow this structure. Once you get more experience with AGI you might like to experiment with this a bit.

The header

This section doesn't actually do anything for the room, as it's all commented out - it's just to remind you what the room is. You might like to put a description of what happens in the room or something.

// ****************************************************************************
//
// Logic 2: First room
//
// ****************************************************************************

Defines

All your defines should be placed together at the top of the logic. There aren't any actual defines in this room, but it does include the defines.txt file so the include statement goes here.

For more info on defines and include statements, click here.

#include "defines.txt"

The initialization section

When the player first enters the room, there are some things that need to be set up. The background picture needs be loaded, drawn, and discarded from memory. The horizon is set to the appropriate value, and ego is positioned on screen at the desired location. Objects such as background animations, props and other characters are also set up here.

Since the interpreter operates in cycles (and the logic for the current room is executed on each cycle), we only want to do the initialization on the first cycle in the room. This is done by testing for the new_room flag. If this is set, then it means that this is the first cycle in this room. Otherwise, the initialization section is skipped over.

if (new_room) {
  load.pic(room_no);
  draw.pic(room_no);
  discard.pic(room_no);
  set.horizon(50);

  // The next 6 lines need only be in the first room of the game
  if ((prev_room_no == 1 ||    // just come from intro screen
      prev_room_no == 0)) {    // or just started game
    position(ego,120,140);
    status.line.on();
    accept.input();
  }

// Check what room the player came from and position them on the
// screen accordingly here, e.g:
// if (prev_room_no == 5) {
//   position(ego,12,140);
// }

  draw(ego);
  show.pic();
}

The main bit

This is where the code goes that controls all the things that happen in the room. In room 2 of the template game, it just consists of a simple text response to the "look" command and a test for ego touching the edge of the screen to switch to the next room (this room just loops back on itself).

if (said("look")) {
  print("This is an empty room.");
}

if (ego_edge_code == horizon_edge) {  // ego touching horizon
  new.room(2);
}

if (ego_edge_code == right_edge) {    // ego touching right edge of screen
  new.room(2);
}

if (ego_edge_code == bottom_edge) {   // ego touching bottom edge of screen
  new.room(2);
}

if (ego_edge_code == left_edge) {     // ego touching left edge of screen
  new.room(2);
}

The return command

The return command must be present at the end of every logic. In the case of a room, it returns execution to logic 0 (which calls the room's logic on every cycle). In the case of logic 0 (the main logic), it tells the interpreter to go on to the next cycle.

return();