AGIWiki/Indirect command

From ScummVM :: Wiki
Jump to navigation Jump to search
AGIWiki


An indirect command is a logic command that requires the number of a resource to be specified but uses a variable to specify the resource number. For example compare the direct command load.view to the indirect command load.view.v:

<syntax type = "C++">

load.view(20);
v200 = 20;
load.view.v(v200);

</syntax>

In the above code, both commands load VIEW.020, but load.view is direct because it accepts the actual number of the view resource that should be loaded. The load.view.v command is indirect because it does not accept the actual number of the resource that should be loaded. You have to put the number into a variable and give that to the load.view.v command.

This probably seems like more work than is necessary, and in many cases it is. But indirect commands do have an advantage over direct commands, namely that they are more flexible. For example, the following code, from the AGI Studio Template Game, allows the player to teleport to any room in the game by entering the room number:

<syntax type = "C++">

if (said("tp")) {
  get.num("new room: ", v255);
  new.room.v(v255);
}

</syntax>

This function is not possible without indirect commands, because there is no way to know ahead of time which room the player will want to teleport to. The alternate approach of having up to 254 different commands for teleporting to each of the possible rooms in the game is obviously no good.

Indirect command listing

The following is a list of all the indirect commands in AGI logic. Most indirect commands end in .v, but there are exceptions to this rule. Also, not all commands that end in .v are indirect commands.