Difference between revisions of "AGI/Specifications/Resources"

Jump to navigation Jump to search
→‎How the interpreter handles the code: -- fix syntax highlighting
(→‎Inner loops: -- Fix code)
(→‎How the interpreter handles the code: -- fix syntax highlighting)
 
(6 intermediate revisions by the same user not shown)
Line 45: Line 45:
<span id="CmdList"></span>
<span id="CmdList"></span>
==Command list and argument types==
==Command list and argument types==
<xref linkend="tab-test-commands"> and <xref linkend="tab-action-commands">
[[AGI/Specifications/Resources#test-commands | Table 6-1]] and [[AGI/Specifications/Resources#action-commands|  Table 6-2]]
show a list of all AGI commands and their argument types. The
show a list of all AGI commands and their argument types. The
command names have been taken from debug messages contained in
command names have been taken from debug messages contained in
some AGI games.
some AGI games.


<pre>
<table id="tab-test-commands">
  <title>Test commands</title>
  <tgroup cols="8">
    <thead>
      <row>
        <entry/Opcode/ <entry/Command/ <entry/Args/ &p1; &p2; &p3; &p4; &p5;
      </row>
    </thead>
    <tbody>
      <row/<entry/01/ <entry/'''equaln'''/    &p2; &v; &n;/
      <row/<entry/02/ <entry/'''equalv'''/    &p2; &v; &v;/
      <row/<entry/03/ <entry/'''lessn'''/      &p2; &v; &n;/
      <row/<entry/04/ <entry/'''lessv'''/      &p2; &v; &v;/
      <row/<entry/05/ <entry/'''greatern'''/  &p2; &v; &n;/
      <row/<entry/06/ <entry/'''greaterv'''/  &p2; &v; &v;/
      <row/<entry/07/ <entry/'''isset'''/      &p1; &f;/
      <row/<entry/08/ <entry/'''issetv'''/    &p1; &v;/
      <row/<entry/09/ <entry/'''has'''/        &p1; &i;/
      <row/<entry/0A/ <entry/'''obj.in.room'''/&p2; &i; &v;/
      <row/<entry/0B/ <entry/'''posn'''/      &p5; &o; &n; &n; &n; &n;/
      <row/<entry/0C/ <entry/'''controller'''/ &p1; &c;/
      <row/<entry/0D/ <entry/'''have.key'''/  &p0;/
      <row/<entry/0E/ <entry/'''said'''/      <entry/-/ <entry/.../
      <row/<entry/0F/ <entry/'''compare.strings'''/&p2; &s; &s;/
      <row/<entry/10/ <entry/'''obj.in.box'''/ &p5; &o; &n; &n; &n; &n;/
      <row/<entry/11/ <entry/'''center.posn'''/&p5; &o; &n; &n; &n; &n;/
      <row/<entry/12/ <entry/'''right.posn'''/ &p5; &o; &n; &n; &n; &n;/
    </tbody>
  </tgroup>
</table>


<table id="tab-action-commands">
<span id="test-commands"></span>
  <title>Action commands</title>
{| border="1"  cellspacing="0" cellpadding="5"
  <tgroup cols="10">
|+ '''Table 6-1: Test commands'''
    <thead>
|-
      <row/ <entry/Opcode/ <entry/Command/ <entry/Args/
! Opcode
      &p1; &p2; &p4; &p4; &p5; &p6; &p7; /
! Command
    </thead>
! Args
    <tbody>
! 1
      <row/<entry/00/ <entry/'''return'''/        &p0;/
! 2
      <row/<entry/01/ <entry/'''increment'''/      &p1; &v;/
! 3
      <row/<entry/02/ <entry/'''decrement'''/      &p1; &v;/
! 4
      <row/<entry/03/ <entry/'''assignn'''/        &p2; &v; &n;/
! 5
      <row/<entry/04/ <entry/'''assignv'''/        &p2; &v; &v;/
|-
      <row/<entry/05/ <entry/'''addn'''/          &p2; &v; &n;/
| 01
      <row/<entry/06/ <entry/'''addv'''/          &p2; &v; &v;/
| '''equaln'''
      <row/<entry/07/ <entry/'''subn'''/          &p2; &v; &n;/
| 2
      <row/<entry/08/ <entry/'''subv'''/          &p2; &v; &v;/
| var
      <row/<entry/09/ <entry/'''lindirectv'''/    &p2; &v; &v;/
| num
      <row/<entry/0A/ <entry/'''rindirect'''/      &p2; &v; &v;/
| &nbsp;
      <row/<entry/0B/ <entry/'''lindirectn'''/    &p2; &v; &n;/
| &nbsp;
      <row/<entry/0C/ <entry/'''set'''/            &p1; &f;/
| &nbsp;
      <row/<entry/0D/ <entry/'''reset'''/          &p1; &f;/
|-
      <row/<entry/0E/ <entry/'''toggle'''/        &p1; &f;/
| 02
      <row/<entry/0F/ <entry/'''set.v'''/          &p1; &v;/
| '''equalv'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 03
| '''lessn'''
| 2
| var
| num
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 04
| '''lessv'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 05
| '''greatern'''
| 2
| var
| num
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 06
| '''greaterv'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 07
| '''isset'''
| 1
| flag
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 08
| '''issetv'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 09
| '''has'''
| 1
| item
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0A
| '''obj.in.room'''
| 2
| item
| var
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0B
| '''posn'''
| 5
| obj
| num
| num
| num
| num
|-
| 0C
| '''controller'''
| 1
| ctr
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0D
| '''have.key'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0E
| '''said'''
| -
| ...
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0F
| '''compare.strings'''
| 2
| str
| str
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 10
| '''obj.in.box'''
| 5
| obj
| num
| num
| num
| num
|-
| 11
| '''center.posn'''
| 5
| obj
| num
| num
| num
| num
|-
| 12
| '''right.posn'''
| 5
| obj
| num
| num
| num
| num
|}


      <row/<entry/10/ <entry/'''reset.v'''        &p1; &v;/
<span id="action-commands"></span>
      <row/<entry/11/ <entry/'''toggle.v'''/      &p1; &v;/
      <row/<entry/12/ <entry/'''new.room'''/      &p1; &n;/
      <row/<entry/13/ <entry/'''new.room.v'''/    &p1; &v;/
      <row/<entry/14/ <entry/'''load.logics'''/    &p1; &n;/
      <row/<entry/15/ <entry/'''load.logics.v'''/  &p1; &v;/
      <row/<entry/16/ <entry/'''call'''/          &p1; &n;/
      <row/<entry/17/ <entry/'''call.v'''/        &p1; &v;/
      <row/<entry/18/ <entry/'''load.pic'''/      &p1; &v;/
      <row/<entry/19/ <entry/'''draw.pic'''/      &p1; &v;/
      <row/<entry/1A/ <entry/'''show.pic'''/      &p0;/
      <row/<entry/1B/ <entry/'''discard.pic'''/    &p1; &v;/
      <row/<entry/1C/ <entry/'''overlay.pic'''/    &p1; &v;/
      <row/<entry/1D/ <entry/'''show.pri.screen'''/&p0;/
      <row/<entry/1E/ <entry/'''load.view'''/      &p1; &n;/
      <row/<entry/1F/ <entry/'''load.view.v'''/    &p1; &v;/


      <row/<entry/20/ <entry/'''discard.view'''&p1; &n;/
{|  border="1"  cellspacing="0" cellpadding="5"
      <row/<entry/21/ <entry/'''animate.obj'''/    &p1; &o;/
|+ '''Table 6-2: Action Commands'''
      <row/<entry/22/ <entry/'''unanimate.all'''&p0;/
|-
      <row/<entry/23/ <entry/'''draw'''/          &p1; &o;/
! Opcode
      <row/<entry/24/ <entry/'''erase'''/          &p1; &o;/
! Command
      <row/<entry/25/ <entry/'''position'''/      &p3; &o; &n; &n;/
! Args
      <row/<entry/26/ <entry/'''position.v'''/    &p3; &o; &v; &v;/
! 1
      <row/<entry/27/ <entry/'''get.posn'''/      &p3; &o; &v; &v;/
! 2
      <row/<entry/28/ <entry/'''reposition'''/    &p3; &o; &v; &v;/
! 4
      <row/<entry/29/ <entry/'''set.view'''/      &p2; &o; &n;/
! 4
      <row/<entry/2A/ <entry/'''set.view.v'''/    &p2; &o; &v;/
! 5
      <row/<entry/2B/ <entry/'''set.loop'''/      &p2; &o; &n;/
! 6
      <row/<entry/2C/ <entry/'''set.loop.v'''/    &p2; &o; &v;/
! 7
      <row/<entry/2D/ <entry/'''fix.loop'''/      &p1; &o;/
|-
      <row/<entry/2E/ <entry/'''release.loop'''&p1; &o;/
| 00
      <row/<entry/2F/ <entry/'''set.cel'''/        &p2; &o; &n;/
| '''return'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 01
| '''increment'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 02
| '''decrement'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 03
| '''assignn'''
| 2
| var
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 04
| '''assignv'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 05
| '''addn'''
| 2
| var
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 06
| '''addv'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 07
| '''subn'''
| 2
| var
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 08
| '''subv'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 09
| '''lindirectv'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0A
| '''rindirect'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0B
| '''lindirectn'''
| 2
| var
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0C
| '''set'''
| 1
| flag
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0D
| '''reset'''
| 1
| flag
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0E
| '''toggle'''
| 1
| flag
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 0F
| '''set.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 10
| '''reset.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 11
| '''toggle.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 12
| '''new.room'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 13
| '''new.room.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 14
| '''load.logics'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 15
| '''load.logics.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 16
| '''call'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 17
| '''call.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 18
| '''load.pic'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 19
| '''draw.pic'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 1A
| '''show.pic'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 1B
| '''discard.pic'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 1C
| '''overlay.pic'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 1D
| '''show.pri.screen'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 1E
| '''load.view'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 1F
| '''load.view.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 20
| '''discard.view'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 21
| '''animate.obj'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 22
| '''unanimate.all'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 23
| '''draw'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 24
| '''erase'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 25
| '''position'''
| 3
| obj
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 26
| '''position.v'''
| 3
| obj
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 27
| '''get.posn'''
| 3
| obj
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 28
| '''reposition'''
| 3
| obj
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 29
| '''set.view'''
| 2
| obj
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 2A
| '''set.view.v'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 2B
| '''set.loop'''
| 2
| obj
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 2C
| '''set.loop.v'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 2D
| '''fix.loop'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 2E
| '''release.loop'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 2F
| '''set.cel'''
| 2
| obj
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 30
| '''set.cel.v'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 31
| '''last.cel'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 32
| '''current.cel'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 33
| '''current.loop'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 34
| '''current.view'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 35
| '''number.of.loops'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 36
| '''set.priority'''
| 2
| obj
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 37
| '''set.priority.v'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 38
| '''release.priority'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 39
| '''get.priority'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 3A
| '''stop.update'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 3B
| '''start.update'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 3C
| '''force.update'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 3D
| '''ignore.horizon'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 3E
| '''observe.horizon'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 3F
| '''set.horizon'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 40
| '''object.on.water'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 41
| '''object.on.land'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 42
| '''object.on.anything'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 43
| '''ignore.objs'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 44
| '''observe.objs'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 45
| '''distance'''
| 3
| obj
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 46
| '''stop.cycling'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 47
| '''start.cycling'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 48
| '''normal.cycle'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 49
| '''end.of.loop'''
| 2
| obj
| flag
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 4A
| '''reverse.cycle'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 4B
| '''reverse.loop'''
| 2
| obj
| flag
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 4C
| '''cycle.time'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 4D
| '''stop.motion'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 4E
| '''start.motion'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 4F
| '''step.size'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 50
| '''step.time'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 51
| '''move.obj'''
| 5
| obj
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 52
| '''move.obj.v'''
| 5
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 53
| '''follow.ego'''
| 3
| obj
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 54
| '''wander'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 55
| '''normal.motion'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 56
| '''set.dir'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 57
| '''get.dir'''
| 2
| obj
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 58
| '''ignore.blocks'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 59
| '''observe.blocks'''
| 1
| obj
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 5A
| '''block'''
| 4
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 5B
| '''unblock'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 5C
| '''get'''
| 1
| item
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 5D
| '''get.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 5E
| '''drop'''
| 1
| item
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 5F
| '''put'''
| 2
| item
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 60
| '''put.v'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 61
| '''get.room.v'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 62
| '''load.sound'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 63
| '''sound'''
| 2
| num
| flag
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 64
| '''stop.sound'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 65
| '''print'''
| 1
| msg
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 66
| '''print.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 67
| '''display'''
| 3
| num
| num
| msg
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 68
| '''display.v'''
| 3
| var
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 69
| '''clear.lines'''
| 3
| num
| num
| msg
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 6A
| '''text.screen'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 6B
| '''graphics'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 6C
| '''set.cursor.char'''
| 1
| msg
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 6D
| '''set.text.attribute'''
| 2
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 6E
| '''shake.screen'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 6F
| '''configure.screen'''
| 3
| num
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 70
| '''status.line.on'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 71
| '''status.line.off'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 72
| '''set.string'''
| 2
| str
| msg
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 73
| '''get.string'''
| 2
| str
| msg
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 74
| '''word.to.string'''
| 2
| word
| str
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 75
| '''parse'''
| 1
| str
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 76
| '''get.num'''
| 2
| str
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 77
| '''prevent.input'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 78
| '''accept.input'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 79
| '''set.key'''
| 3
| num
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 7A
| '''add.to.pic'''
| 7
| num
| num
| num
| num
| num
| num
| num
|-
| 7B
| '''add.to.pic.v'''
| 7
| var
| var
| var
| var
| var
| var
| var
|-
| 7C
| '''status'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 7D
| '''save.game'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 7E
| '''restore.game'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 7F
| '''init.disk'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 80
| '''restart.game'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 81
| '''show.obj'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 82
| '''random'''
| 3
| num
| num
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 83
| '''program.control'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 84
| '''player.control'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 85
| '''obj.status.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 86
| '''quit'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 87
| '''show.mem'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 88
| '''pause'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 89
| '''echo.line'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 8A
| '''cancel.line'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 8B
| '''init.joy'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 8C
| '''toggle.monitor'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 8D
| '''version'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 8E
| '''script.size'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 8F
| '''set.game.id'''
| 1
| msg
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 90
| '''log'''
| 1
| msg
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 91
| '''set.scan.start'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 92
| '''reset.scan.start'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 93
| '''reposition.to'''
| 3
| obj
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 94
| '''reposition.to.v'''
| 3
| obj
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 95
| '''trace.on'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 96
| '''trace.info'''
| 3
| num
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 97
| '''print.at'''
| 4
| msg
| num
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 98
| '''print.at.v'''
| 4
| var
| num
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 99
| '''discard.view.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 9A
| '''clear.text.rect'''
| 5
| num
| num
| num
| num
| num
| &nbsp;
| &nbsp;
|-
| 9B
| '''set.upper.left'''
| 2
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 9C
| '''set.menu'''
| 1
| msg
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 9D
| '''set.menu.member'''
| 2
| msg
| ctr
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 9E
| '''submit.menu'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| 9F
| '''enable.member'''
| 1
| ctr
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A0
| '''disable.member'''
| 1
| ctr
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A1
| '''menu.input'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A2
| '''show.obj.v'''
| 1
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A3
| '''open.dialogue'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A4
| '''close.dialogue'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A5
| '''mul.n'''
| 2
| var
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A6
| '''mul.v'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A7
| '''div.n'''
| 2
| var
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A8
| '''div.v'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| A9
| '''close.window'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| AA
| '''set.simple'''
| 1
| ???
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| AB
| '''push.script'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| AC
| '''pop.script'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| AD
| '''hold.key'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| AE
| '''set.pri.base'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| AF
| '''discard.sound'''
| 1
| num
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| B0
| '''hide.mouse'''
| 0&#124;1
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| B1
| '''allow.menu'''
| 1
| ???
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| B2
| '''show.mouse'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| B3
| '''fence.mouse'''
| 4
| num
| num
| num
| num
| &nbsp;
| &nbsp;
| &nbsp;
|-
| B4
| '''mouse.posn'''
| 2
| var
| var
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| B5
| '''release.key'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|-
| B6
| '''adj.ego.move.to.xy'''
| 0
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
| &nbsp;
|}


      <row/<entry/30/ <entry/'''set.cel.v'''/      &p2; &o; &v;/
<span id="LogicFormat"></span>
      <row/<entry/31/ <entry/'''last.cel'''/      &p2; &o; &v;/
      <row/<entry/32/ <entry/'''current.cel'''/    &p2; &o; &v;/
      <row/<entry/33/ <entry/'''current.loop'''/  &p2; &o; &v;/
      <row/<entry/34/ <entry/'''current.view'''/  &p2; &o; &v;/
      <row/<entry/35/ <entry/'''number.of.loops'''/&p2; &o; &v;/
      <row/<entry/36/ <entry/'''set.priority'''/  &p2; &o; &n;/
      <row/<entry/37/ <entry/'''set.priority.v'''/ &p2; &o; &v;/
      <row/<entry/38/ <entry/'''release.priority'''/&p1; &o;/
      <row/<entry/39/ <entry/'''get.priority'''/  &p2; &o; &v;/
      <row/<entry/3A/ <entry/'''stop.update'''/    &p1; &o;/
      <row/<entry/3B/ <entry/'''start.update'''/  &p1; &o;/
      <row/<entry/3C/ <entry/'''force.update'''/  &p1; &o;/
      <row/<entry/3D/ <entry/'''ignore.horizon'''/ &p1; &o;/
      <row/<entry/3E/ <entry/'''observe.horizon'''/&p1; &o;/
      <row/<entry/3F/ <entry/'''set.horizon'''/    &p1; &n;/
 
      <row/<entry/40/ <entry/'''object.on.water'''/&p1; &o;/
      <row/<entry/41/ <entry/'''object.on.land'''/ &p1; &o;/
      <row/<entry/42/ <entry/'''object.on.anything'''/ &p1; &o;/
      <row/<entry/43/ <entry/'''ignore.objs'''/    &p1; &o;/
      <row/<entry/44/ <entry/'''observe.objs'''/  &p1; &o;/
      <row/<entry/45/ <entry/'''distance'''/      &p3; &o; &o; &v;/
      <row/<entry/46/ <entry/'''stop.cycling'''/  &p1; &o;/
      <row/<entry/47/ <entry/'''start.cycling'''/  &p1; &o;/
      <row/<entry/48/ <entry/'''normal.cycle'''/  &p1; &o;/
      <row/<entry/49/ <entry/'''end.of.loop'''/    &p2; &o; &f;/
      <row/<entry/4A/ <entry/'''reverse.cycle'''/  &p1; &o;/
      <row/<entry/4B/ <entry/'''reverse.loop'''/  &p2; &o; &f;/
      <row/<entry/4C/ <entry/'''cycle.time'''/    &p2; &o; &v;/
      <row/<entry/4D/ <entry/'''stop.motion'''/    &p1; &o;/
      <row/<entry/4E/ <entry/'''start.motion'''/  &p1; &o;/
      <row/<entry/4F/ <entry/'''step.size'''/      &p2; &o; &v;/
 
      <row/<entry/50/ <entry/'''step.time'''/      &p2; &o; &v;/
      <row/<entry/51/ <entry/'''move.obj'''/      &p5; &o; &n;/
      <row/<entry/52/ <entry/'''move.obj.v'''/    &p5; &o; &v;/
      <row/<entry/53/ <entry/'''follow.ego'''/    &p3; &o; &n;/
      <row/<entry/54/ <entry/'''wander'''/        &p1; &o;/
      <row/<entry/55/ <entry/'''normal.motion'''/  &p1; &o;/
      <row/<entry/56/ <entry/'''set.dir'''/        &p2; &o; &v;/
      <row/<entry/57/ <entry/'''get.dir'''/        &p2; &o; &v;/
      <row/<entry/58/ <entry/'''ignore.blocks'''/  &p1; &o;/
      <row/<entry/59/ <entry/'''observe.blocks'''/ &p1; &o;/
      <row/<entry/5A/ <entry/'''block'''/          &p4; &n; &n;/
      <row/<entry/5B/ <entry/'''unblock'''/        &p0;/
      <row/<entry/5C/ <entry/'''get'''/            &p1; &i;/
      <row/<entry/5D/ <entry/'''get.v'''/          &p1; &v;/
      <row/<entry/5E/ <entry/'''drop'''/          &p1; &i;/
      <row/<entry/5F/ <entry/'''put'''/            &p2; &i;/
 
      <row/<entry/60/ <entry/'''put.v'''/          &p2; &v; &v;/
      <row/<entry/61/ <entry/'''get.room.v'''/    &p2; &v; &v;/
      <row/<entry/62/ <entry/'''load.sound'''/    &p1; &n;/
      <row/<entry/63/ <entry/'''sound'''/          &p2; &n; &f;/
      <row/<entry/64/ <entry/'''stop.sound'''/    &p0;/
      <row/<entry/65/ <entry/'''print'''/          &p1; &m;/
      <row/<entry/66/ <entry/'''print.v'''/        &p1; &v;/
      <row/<entry/67/ <entry/'''display'''/        &p3; &n; &n; &m;/
      <row/<entry/68/ <entry/'''display.v'''/      &p3; &v; &v; &v;/
      <row/<entry/69/ <entry/'''clear.lines'''/    &p3; &n; &n; &m;/
      <row/<entry/6A/ <entry/'''text.screen'''/    &p0;/
      <row/<entry/6B/ <entry/'''graphics'''/      &p0;/
      <row/<entry/6C/ <entry/'''set.cursor.char'''/&p1; &m;/
      <row/<entry/6D/ <entry/'''set.text.attribute'''/ &p2; &n; &n;/
      <row/<entry/6E/ <entry/'''shake.screen'''/  &p1; &n;/
      <row/<entry/6F/ <entry/'''configure.screen'''/ &p3; &n; &n; &n;/
 
      <row/<entry/70/ <entry/'''status.line.on'''/ &p0;/
      <row/<entry/71/ <entry/'''status.line.off'''/&p0;/
      <row/<entry/72/ <entry/'''set.string'''/    &p2; &s; &m;/
      <row/<entry/73/ <entry/'''get.string'''/    &p2; &s; &m;/
      <row/<entry/74/ <entry/'''word.to.string'''/ &p2; &w; &s;/
      <row/<entry/75/ <entry/'''parse'''/          &p1; &s;/
      <row/<entry/76/ <entry/'''get.num'''/        &p2; &s; &v;/
      <row/<entry/77/ <entry/'''prevent.input'''/  &p0;/
      <row/<entry/78/ <entry/'''accept.input'''/  &p0;/
      <row/<entry/79/ <entry/'''set.key'''/        &p3; &n; &n; &n;/
      <row/<entry/7A/ <entry/'''add.to.pic'''/  &p7; &n;&n;&n;&n;&n;&n;&n;/
      <row/<entry/7B/ <entry/'''add.to.pic.v'''/&p7; &v;&v;&v;&v;&v;&v;&v;/
      <row/<entry/7C/ <entry/'''status'''/        &p0;/
      <row/<entry/7D/ <entry/'''save.game'''/      &p0;/
      <row/<entry/7E/ <entry/'''restore.game'''/  &p0;/
      <row/<entry/7F/ <entry/'''init.disk'''/      &p0;/
 
      <row/<entry/80/ <entry/'''restart.game'''/  &p0;/
      <row/<entry/81/ <entry/'''show.obj'''/      &p1; &n;/
      <row/<entry/82/ <entry/'''random'''/        &p3; &n; &n; &v/
      <row/<entry/83/ <entry/'''program.control'''/&p0;/
      <row/<entry/84/ <entry/'''player.control'''/ &p0;/
      <row/<entry/85/ <entry/'''obj.status.v'''/  &p1; &v;/
      <row/<entry/86/ <entry/'''quit'''/          &p1; &n;/
      <row/<entry/87/ <entry/'''show.mem'''/      &p0;/
      <row/<entry/88/ <entry/'''pause'''/          &p0;/
      <row/<entry/89/ <entry/'''echo.line'''/      &p0;/
      <row/<entry/8A/ <entry/'''cancel.line'''/    &p0;/
      <row/<entry/8B/ <entry/'''init.joy'''/      &p0;/
      <row/<entry/8C/ <entry/'''toggle.monitor'''/ &p0;/
      <row/<entry/8D/ <entry/'''version'''/        &p0;/
      <row/<entry/8E/ <entry/'''script.size'''/    &p1; &n;/
      <row/<entry/8F/ <entry/'''set.game.id'''/    &p1; &m;/
 
      <row/<entry/90/ <entry/'''log'''/            &p1; &m;/
      <row/<entry/91/ <entry/'''set.scan.start'''/ &p0;/
      <row/<entry/92/ <entry/'''reset.scan.start'''/ &p0;/
      <row/<entry/93/ <entry/'''reposition.to'''/  &p3; &o; &n; &n;/
      <row/<entry/94/ <entry/'''reposition.to.v'''/&p3; &o; &v; &v;/
      <row/<entry/95/ <entry/'''trace.on'''/      &p0;/
      <row/<entry/96/ <entry/'''trace.info'''/    &p3; &n; &n; &n;/
      <row/<entry/97/ <entry/'''print.at'''/      &p4; &m; &n; &n; &n/
      <row/<entry/98/ <entry/'''print.at.v'''/    &p4; &v; &n; &n; &n/
      <row/<entry/99/ <entry/'''discard.view.v'''/ &p1; &v;/
      <row/<entry/9A/ <entry/'''clear.text.rect'''/&p5; &n; &n; &n; &n;&n;/
      <row/<entry/9B/ <entry/'''set.upper.left'''/ &p2; &n; &n;/
      <row/<entry/9C/ <entry/'''set.menu'''/      &p1; &m;/
      <row/<entry/9D/ <entry/'''set.menu.member'''/&p2; &m; &c;/
      <row/<entry/9E/ <entry/'''submit.menu'''/    &p0;/
      <row/<entry/9F/ <entry/'''enable.member'''/  &p1; &c;/
 
      <row/<entry/A0/ <entry/'''disable.member'''/ &p1; &c;/
      <row/<entry/A1/ <entry/'''menu.input'''/    &p0;/
      <row/<entry/A2/ <entry/'''show.obj.v'''/    &p1; &v;/
      <row/<entry/A3/ <entry/'''open.dialogue'''/  &p0;/
      <row/<entry/A4/ <entry/'''close.dialogue'''/ &p0;/
      <row/<entry/A5/ <entry/'''mul.n'''/          &p2; &v; &n;/
      <row/<entry/A6/ <entry/'''mul.v'''/          &p2; &v; &v;/
      <row/<entry/A7/ <entry/'''div.n'''/          &p2; &v; &n;/
      <row/<entry/A8/ <entry/'''div.v'''/          &p2; &v; &v;/
      <row/<entry/A9/ <entry/'''close.window'''/  &p0;/
      <row/<entry/AA/ <entry/'''set.simple'''/    &p1; <entry/???//
      <row/<entry/AB/ <entry/'''push.script'''/    &p0;/
      <row/<entry/AC/ <entry/'''pop.script'''/    &p0;/
      <row/<entry/AD/ <entry/'''hold.key'''/      &p0;/
      <row/<entry/AE/ <entry/'''set.pri.base'''/  &p1; &n;/
      <row/<entry/AF/ <entry/'''discard.sound'''/  &p1; &n;/
 
      <row/<entry/B0/ <entry/'''hide.mouse'''/    <entry>0|1</entry>/
      <row/<entry/B1/ <entry/'''allow.menu'''/    &p1; <entry/???//
      <row/<entry/B2/ <entry/'''show.mouse'''/    &p0;/
      <row/<entry/B3/ <entry/'''fence.mouse'''/    &p4; &n; &n; &n; &n;/
      <row/<entry/B4/ <entry/'''mouse.posn'''/    &p2; &v; &v;/
      <row/<entry/B5/ <entry/'''release.key'''/    &p0;/
      <row/<entry/B6/ <entry/'''adj.ego.move.to.xy'''/ &p0;/
    </tbody>
  </tgroup>
</table>  
</pre>


<span id="LogicFormat"></span>
==Logic resource format==
==Logic resource format==


Line 298: Line 2,267:
discussed at a later stage.
discussed at a later stage.


  <informaltable>
{| border="1"  cellspacing="0" cellpadding="5"
    <tgroup cols="2">
|-
      <thead>
! Offset
        <row/ <entry/Offset/ <entry/Command/ /
! Command
      </thead>
|-
      <tbody>
| 0-1
        <row/ <entry/0-1/ <entry/Signature (0x12--0x34)//
| Signature (0x12--0x34)
        <row/ <entry/ 2 / <entry/Vol number that the resource is contained in//
|-
        <row/ <entry/3-4/ <entry/Length of the resource without the header//
2  
        <row/ <entry/5-6/ <entry/Offset of logic code message section//
| Vol number that the resource is contained in
      </tbody>
|-
    </tgroup>
| 3-4
  </informaltable>
| Length of the resource without the header
|-
| 5-6
| Offset of logic code message section
|}


All text that can be printed to the screen from within a logic script
All text that can be printed to the screen from within a logic script
Line 328: Line 2,301:
between one and seven arguments inclusive. This is discussed later on.
between one and seven arguments inclusive. This is discussed later on.
The first set of codes is the AGI commands themselves listed in
The first set of codes is the AGI commands themselves listed in
<xref linkend="tab-action-commands">, and they have the range 0x00--0xB6.
[[AGI/Specifications/Resources#action-commands|  Table 6-2]], and they have the range 0x00--0xB6.
 
The second set of codes is as follows:
The second set of codes is as follows:
  <informaltable>
 
    <tgroup cols="2">
{| border="1"  cellspacing="0" cellpadding="5"
      <thead>
! Code
        <row/ <entry/Code/ <entry/Command/ /
! Command
      </thead>
|-
      <tbody>
| FF
        <row/ <entry/FF/ <entry/'''if'''/ /
| '''if'''
        <row/ <entry/FE/ <entry/'''else''' or '''goto'''/ /
|-
        <row/ <entry/FD/ <entry/'''not'''/ /
| FE
        <row/ <entry/FC/ <entry/'''or'''/ /
| '''else''' or '''goto'''
      </tbody>
|-
    </tgroup>
| FD
  </informaltable>
| '''not'''
|-
| FC
| '''or'''
|}


At present these are the only high value codes encountered. The
At present these are the only high value codes encountered. The
Line 364: Line 2,342:
which tests whether flag number 5 is set. The 0xFF effectively switches
which tests whether flag number 5 is set. The 0xFF effectively switches
the interpreter into a condition checking mode which leads us to the
the interpreter into a condition checking mode which leads us to the
set of codes listed in <xref linkend="tab-test-commands">
set of codes listed in [[AGI/Specifications/Resources#test-commands|  Table 6-1]]


  0x00 - 0x12    Condition codes.
  0x00 - 0x12    Condition codes.
Line 467: Line 2,445:
follows:
follows:


  <informaltable>
{| border="1"  cellspacing="0" cellpadding="5"
    <tgroup cols="2">
|-
      <thead>
! Offset
        <row/ <entry/Offset/ <entry/Description/ /
! Description
      </thead>
|-
      <tbody>
| 0-1
        <row/ <entry/0-1/ <entry/Pointer to implementation code/ /
| Pointer to implementation code
        <row/ <entry/ 2 / <entry/Number of arguments/ /
|-
        <row/ <entry/ 3 / <entry/Type of arguments/ /
2  
      </tbody>
| Number of arguments
    </tgroup>
|-
  </informaltable>
3  
| Type of arguments
|}


The type of arguments value is interpreted as follows:
The type of arguments value is interpreted as follows:
Line 516: Line 2,496:
The format of the message section is as follows:
The format of the message section is as follows:


  <informaltable>
{| border="1"  cellspacing="0" cellpadding="5"
    <tgroup cols="2">
|-
      <thead>
! Offset
        <row/ <entry/Offset/ <entry/Description/ /
! Description
      </thead>
|-
      <tbody>
|  0
        <row/ <entry/ 0 / <entry/Number of messages//
| Number of messages
        <row/ <entry/1-2/ <entry/Pointer to the end of the messages//
|-
        <row/ <entry/3-4/ <entry/Array of message pointers//
| 1-2
        <row/ <entry/.../ <entry/Array of message pointers//
| Pointer to the end of the messages
        <row/ <entry/ ? / <entry/Start of the text data. From this point
|-
              the messages are encrypted with Avis Durgan (in their
| 3-4
              unencrypted form, each message is separated by a 0x00 value)//
| Array of message pointers
      </tbody>
|-
    </tgroup>
| ...
  </informaltable>
| Array of message pointers
|-
?  
| Start of the text data. From this point the messages are encrypted with Avis Durgan (in their unencrypted form, each message is separated by a 0x00 value)
|}


===Implementation===
===Implementation===
Line 541: Line 2,525:
Example: MH2, equaln.
Example: MH2, equaln.


<syntax type="ASM (x86)">
<syntax type="ASM">
;equaln  (eg.  if (work = 3)  )
;equaln  (eg.  if (work = 3)  )
0D71 AC            LODSB                      ;get variable number
0D71 AC            LODSB                      ;get variable number
Line 556: Line 2,540:
Example: MH2, equalv.
Example: MH2, equalv.


<syntax type="ASM (x86)">
<syntax type="ASM">
;equalv  (eg.  if (work = maxwork)  )
;equalv  (eg.  if (work = maxwork)  )
0D82 AC            LODSB                      ;get first var number
0D82 AC            LODSB                      ;get first var number
Line 584: Line 2,568:
on, I'll explain the interpretation in steps after the code block.
on, I'll explain the interpretation in steps after the code block.


<syntax type="ASM (x86)">
<syntax type="ASM">
;Decoding a LOGIC file.
;Decoding a LOGIC file.
1E6C:2EF2 56            PUSH  SI
1E6C:2EF2 56            PUSH  SI
Line 709: Line 2,693:
treating each test separately and calling the relevant test command
treating each test separately and calling the relevant test command
routines using the jump table in the <tt>agidata.ovl</tt> file.
routines using the jump table in the <tt>agidata.ovl</tt> file.
Each test command routine will return a value in <literal/AL/ which
Each test command routine will return a value in <tt>AL</tt> which
says whether it is true or not. Depending on the NOTs and ORs, the
says whether it is true or not. Depending on the NOTs and ORs, the
whole expression is evaluated. If at any stage during the evaluation
whole expression is evaluated. If at any stage during the evaluation

Navigation menu