AGI Docs - 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.
<syntaxhighlight lang="agi">
// **************************************************************************** // // Logic 2: First room // // ****************************************************************************
</syntaxhighlight>
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, [defines.html click here].
<syntaxhighlight lang="agi">
- include "defines.txt"
</syntaxhighlight>
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.
<syntaxhighlight lang="agi">
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(); }
</syntaxhighlight>
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).
<syntaxhighlight lang="agi">
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); }
</syntaxhighlight>
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.
<syntaxhighlight lang="agi"> return(); </syntaxhighlight>
< Previous: DefinesNext: >