Difference between revisions of "SCUMM/V5 opcodes"

Jump to navigation Jump to search
37,438 bytes removed ,  03:05, 23 January 2011
m
behaviour -> behavior
m (→‎oldRoomEffect ($5C): don't know how this works)
m (behaviour -> behavior)
 
(22 intermediate revisions by 2 users not shown)
Line 8: Line 8:
|opcode||The instruction's opcode, with the appropriate bits set according to the parameters.
|opcode||The instruction's opcode, with the appropriate bits set according to the parameters.
|-
|-
|aux||An aux opcode that stores parameter bits and no other information.
|aux||An aux opcode that stores parameter bits and no other information. (the base aux opcode is usually $01, but can differ for each instruction)
|-
|sub-opcode||An aux opcode that indicates a specific function to perform (e.g. the "wait" instruction has sub-opcodes to "wait for message", "wait for actor" etc), as well as storing parameter bits if necessary.
|-
|-
|result||A result pointer. (A standard word pointer, always a LE word.)
|result||A result pointer. (A standard word pointer, always a LE word.)
|-
|-
|sub-opcode||An aux opcode that indicates a specific function to perform (e.g. the "wait" instruction has sub-opcodes to "wait for message", "wait for actor" etc), as well as storing parameter bits if necessary
|var||A variable pointer. Same as above, but is not written to. Because this is always a variable, the opcode is not affected like it would be with a normal parameter (described below).
|-
|var||A var pointer. Same as above, but is not written to. Because this is always a var, the opcode is not affected like with normal parameter/pointers.
|-
|-
|value[8]||An 8-bit constant (a byte).
|value[8]||An 8-bit constant (a byte).
Line 24: Line 24:
|value[p16]||A 16-bit parameter. This is always encoded as a word LE, and may be a pointer or constant.
|value[p16]||A 16-bit parameter. This is always encoded as a word LE, and may be a pointer or constant.
|-
|-
|value[v16]||A variable number of word LE parameters. These are encoded as a sequence of aux[8] param[p16]; param; aux contains the parameter bit to describe param. A byte of $FF terminates the sequence. (actually always shown as "value[v16]...")
|value[v16]||A variable number of word LE parameters. These are encoded as a sequence of aux[8] param[p16]; param; aux contains the parameter bit to describe param (and is always $01, ignoring the parameter bits). A byte of $FF terminates the sequence. (actually always shown as "value[v16]...")
|-
|-
|value[o]||The offset word for parameter value. This is only encoded if needed, but always at the position indicated. If not specified, the offset word occurs immediately after the parameter.
|value[o]||The offset word for parameter value. This is only encoded if needed, but always at the position indicated. If not specified, the offset word occurs immediately after the parameter.
Line 73: Line 73:
  $0A
  $0A
  $0B index[p8] value[p8]
  $0B index[p8] value[p8]
  $0C colour[p8]
  $0C color[p8]
  $0D name[c]... $00
  $0D name[c]... $00
  $0E initframe[p8]
  $0E initframe[p8]
Line 81: Line 81:
  $13 zplane[p8]
  $13 zplane[p8]
  $14
  $14
  $15 animspeed[p8]
  $15  
  $16 mode[p8]
  $16 animspeed[p8]
  $17 shadow[p8]
  $17 shadow[p8]


Line 114: Line 114:
|$0A||SO_ANIMATION_DEFAULT||Initializes the actor's animation frames.<br>Init frame = 1<br>Walk frame = 2<br>Stand frame = 3<br>Talk start frame = 4<br>Talk stop frame = 5
|$0A||SO_ANIMATION_DEFAULT||Initializes the actor's animation frames.<br>Init frame = 1<br>Walk frame = 2<br>Stand frame = 3<br>Talk start frame = 4<br>Talk stop frame = 5
|-
|-
|$0B||SO_PALETTE||Sets the colour at the given index to a new value (another entry in the colour lookup table/CLUT). Index must be between 0 and 31 (the number of colours in a costume).
|$0B||SO_PALETTE||Sets the color at the given index to a new value (another entry in the color lookup table/CLUT). Index must be between 0 and 31 (the number of colors in a costume).
|-
|-
|$0C||SO_TALK_COLOR||Sets the actor's talk colour.
|$0C||SO_TALK_COLOR||Sets the actor's talk color.
|-
|-
|$0D||SO_ACTOR_NAME||Sets the actor's name to the given null-terminated string.
|$0D||SO_ACTOR_NAME||Sets the actor's name to the given null-terminated string.
Line 134: Line 134:
|$15||SO_FOLLOW_BOXES||Follows boxes, turns off Z-clipping, and puts actor somewhere if the actor is in the current room?
|$15||SO_FOLLOW_BOXES||Follows boxes, turns off Z-clipping, and puts actor somewhere if the actor is in the current room?
|-
|-
|$16||SO_ANIMATION_SPEED||Sets the animatino speed
|$16||SO_ANIMATION_SPEED||Sets the animation speed.
|-
|-
|$17||SO_SHADOW||Sets the shadow mode.
|$17||SO_SHADOW||Sets the shadow mode.
Line 140: Line 140:


===Variants===
===Variants===
In SCUMM V4, sub-opcode $11 (SO_ACTOR_SCALE) only takes one parameter, so X and Y scaling is done at a 1:1 ratio.
In SCUMM V3 and V4, the opcode values are slightly different.
 
{| border="1" cellpadding="2" width=50%
|- style="background:whitesmoke"
|Opcode||Meaning
|-
|$00||dummy
|-
|$01||SO_COSTUME
|-
|$04||SO_STEP_DIST
|-
|$05||SO_SOUND
|-
|$06||SO_WALK_ANIMATION
|-
|$07||SO_TALK_ANIMATION
|-
|$08||SO_STAND_ANIMATION
|-
|$09||SO_ANIMATION
|-
|$0A||SO_DEFAULT
|-
|$0B||SO_ELEVATION
|-
|$0C||SO_ANIMATION_DEFAULT
|-
|$0D||SO_PALETTE
|-
|$0E||SO_TALK_COLOR
|-
|$0F||SO_ACTOR_NAME
|-
|$10||SO_INIT_ANIMATION
|-
|$12||SO_ACTOR_WIDTH
|-
|$13||SO_ACTOR_SCALE
|-
|$14||SO_IGNORE_BOXES
|}
 
Also in V3 and V4, sub-opcode $13 (SO_ACTOR_SCALE) only takes one parameter, so X and Y scaling is done at a 1:1 ratio.
 


==actorSetClass ($5D)==
==actorSetClass ($5D)==
Line 217: Line 261:
  $0C cursor[p8]
  $0C cursor[p8]
  $0D charset[p8]
  $0D charset[p8]
  $0E colours[v16]...
  $0E colors[v16]...


===Operation===
===Operation===
Line 250: Line 294:
|$0D||SO_CHARSET_SET||Initializes the given character set.
|$0D||SO_CHARSET_SET||Initializes the given character set.
|-
|-
|$0E||SO_CHARSET_COLORS||Initializes the character set data & colours to the given arguments? Must have 16 arguments?
|$0E||SO_CHARSET_COLORS||Initializes the character set data & colors to the given arguments? Must have 16 arguments?
|}
|}


Line 257: Line 301:


  opcode $0E arg1[p8] arg2[p8]
  opcode $0E arg1[p8] arg2[p8]


==cutScene ($40)==
==cutScene ($40)==
Line 307: Line 352:
===Operation===
===Operation===
var is dereferenced and the current thread suspended for that number of 1/60ths of a second.
var is dereferenced and the current thread suspended for that number of 1/60ths of a second.


==divide ($5B)==
==divide ($5B)==
Line 333: Line 379:


===Encoding===
===Encoding===
  opcode left[p16] top[p16] auxopcode[8] right[p16] bottom[p16] colour[p8]
  opcode left[p16] top[p16] auxopcode[8] right[p16] bottom[p16] color[p8]


===Operation===
===Operation===
Draws a solid box on the backbuffer from (left, top)-(right, bottom) in the given colour.
Draws a solid box on the backbuffer from (left, top) to (right, bottom) in the given color.


The only part of auxopcode that is relevant are the parameter bits. The rest of the opcode is ignored.  
The only part of auxopcode that is relevant are the parameter bits. The rest of the opcode is ignored. However, the aux opcode's initial value is $05.




Line 349: Line 395:
  $01 xpos[p16] ypos[p16]
  $01 xpos[p16] ypos[p16]
  $02 state[p16]
  $02 state[p16]
  $1F
  $FF


===Operation===
===Operation===
Line 360: Line 406:
|$02||Set State||Sets the state of the object, adds it to the drawing queue.
|$02||Set State||Sets the state of the object, adds it to the drawing queue.
|-
|-
|$1F||Draw||Does not change the object's position (or state?), still adds it to the drawing queue.
|$FF||Draw||Does not change the object's position (or state?), still adds it to the drawing queue.
|}
|}


===Variants===
===Variants===
Small header games only support the parameters used with sub-opcode $01, e.g:
Small header games (v3 and v4) only support the parameters used with sub-opcode $01, e.g:
  opcode object[p16] xpos[p16] ypos[p16]
  opcode object[p16] xpos[p16] ypos[p16]
Accordingly, they have three parameter bits, and hence more possible opcodes.




Line 557: Line 604:
In Indy3, actor is only one byte.
In Indy3, actor is only one byte.
  opcode result actor[p8]
  opcode result actor[p8]


==getActorY ($23)==
==getActorY ($23)==
Line 569: Line 617:
In Indy3, actor is only one byte.
In Indy3, actor is only one byte.
  opcode result actor[p8]
  opcode result actor[p8]


==getAnimCounter ($22)==
==getAnimCounter ($22)==
Line 627: Line 676:


===Variants===
===Variants===
In small header games, the encoding becomes:
In small header games, this opcode is used for the "ifState" instruction.
opcode object[p16] state[p8] target[16]
operation becomes
unless (getState(object) == state) goto target




Line 673: Line 719:


===Encoding===
===Encoding===
  opcode value[p16] args[p16]... $FF target[16]
  opcode value[p16] args[v16]... target[16]


===Operation===
===Operation===
Line 683: Line 729:




==ifNotState ($2F)==
==ifNotState ($2F) (V3-4)==
This opcode is not present in SCUMM V5.


===Encoding===
===Encoding===
Line 689: Line 736:


===Operation===
===Operation===
  unless (stateOf(object) != state) goto target
  unless (getState(object) != state) goto target




==ifState ($4F)==
==ifState ($0F) (V3-4)==
This opcode is not present in SCUMM V5.


===Encoding===
===Encoding===
Line 698: Line 746:


===Operation===
===Operation===
  unless (stateOf(object) == state) goto target
  unless (getState(object) == state) goto target




Line 906: Line 954:




==oldRoomEffect ($5C)==
==oldRoomEffect ($5C) (V3-4)==
This opcode/instruction not present in SCUMM V5.


===Encoding===
===Encoding===
Line 913: Line 962:
sub-opcodes:
sub-opcodes:
  $03 effect[p16]
  $03 effect[p16]
$?? effect[p16]


===Operation===
===Operation===
Line 921: Line 971:
===Variants===
===Variants===
FM-Towns SCUMM V3 performs a different effect, not fully implemented in ScummVM. At the moment ScummVM just forces a redraw of the screen background.
FM-Towns SCUMM V3 performs a different effect, not fully implemented in ScummVM. At the moment ScummVM just forces a redraw of the screen background.


==or ($57)==
==or ($57)==
Line 944: Line 995:


===Operation===
===Operation===
If the sub-opcode is 0, marks the end of an override section.
If the sub-opcode is 0, marks the end of an override section.<br>
If the sub-opcode is not 0, marks the beginning of an override section.
If the sub-opcode is not 0, marks the beginning of an override section. The instruction is immediately followed by a "jumpRelative" instruction.<br>
Overrides are used by cutscenes; if a cutscene is skipped (if the user presses the ESC key), the script will jump by the given target (offset from this instruction).
Overrides are used by cutscenes; if a cutscene is skipped (if the user presses the ESC key), the script will jump by the given target (offset from the beginOverride instruction).




Line 958: Line 1,009:




==pickupObject ($25)==
==pickupObject ($25) (v5)==
This instruction is only present in SCUMM V5.


===Encoding===
===Encoding===
Line 970: Line 1,022:




==pickupObjectOld ($50)==
==pickupObject ($50) (V3-4)==
This opcode/instruction is not present in SCUMM V5.


===Encoding===
===Encoding===
Line 986: Line 1,039:
sub-opcodes
sub-opcodes
  $00 xpos[p16] ypos[p16]
  $00 xpos[p16] ypos[p16]
  $01 colour[p8]
  $01 color[p8]
  $02 right[p16]
  $02 right[p16]
  $03 width[p16] height[p16]
  $03 width[p16] height[p16]
Line 993: Line 1,046:
  $07
  $07
  $08 offset[p16] delay[p16]
  $08 offset[p16] delay[p16]
  $15 string[c]... $FF
  $0F string[c]... $FF


===Operation===
===Operation===
Line 1,004: Line 1,057:
|$00||SO_AT||Sets the position of the text that follows.
|$00||SO_AT||Sets the position of the text that follows.
|-
|-
|$01||SO_COLOR||Sets the colour of the text.
|$01||SO_COLOR||Sets the color of the text.
|-
|-
|$02||SO_CLIPPED||Clips the text's right-hand side (for wrapping?).
|$02||SO_CLIPPED||Clips the text's right-hand side (for wrapping?).
Line 1,016: Line 1,069:
|$07||SO_OVERHEAD||Overhead-aligns the text.
|$07||SO_OVERHEAD||Overhead-aligns the text.
|-
|-
|$15||SO_TEXTSTRING||Prints the text string that follows. Terminated by $FF.
|$0F||SO_TEXTSTRING||Prints the text string that follows. Terminated by $FF.
|}
|}


Line 1,049: Line 1,102:


What does this actually do? We may never know.
What does this actually do? We may never know.
It looks like res values always have the high bit set, e.g. 0x01 becomes 0x81.


==putActor ($01)==
==putActor ($01)==
Line 1,084: Line 1,140:
sub-opcodes:
sub-opcodes:
  $01 resID[p8]
  $01 resID[p8]
  ... $01 through $13 take the same arguments ...
  ... $01 through $10 take the same arguments ...
$10 resID[p8]
$11
$12 resID[p8]
  $13 resID[p8]
  $13 resID[p8]
  $14 room[p8] object[p16]
  $14 room[p8] object[p16]
Line 1,166: Line 1,225:
  $06
  $06
  $07 scale1[p8] y1[p8] aux scale2[p8] y2[p8] aux slot[p8]
  $07 scale1[p8] y1[p8] aux scale2[p8] y2[p8] aux slot[p8]
  $08 scale[p8] startcolour[p8] endcolour[p8]
  $08 scale[p8] startcolor[p8] endcolor[p8]
  $09 loadflag[p8] loadslot[p8]
  $09 loadflag[p8] loadslot[p8]
  $0A effect[p16]
  $0A effect[p16]
  $0B redscale[p16] bluescale[p16] greenscale[p16] aux startcolour[p8] endcolour[p8]
  $0B redscale[p16] greenscale[p16] bluescale[p16] aux startcolor[p8] endcolor[p8]
  $0C redscale[p16] bluescale[p16] greenscale[p16] aux startcolour[p8] endcolour[p8]
  $0C redscale[p16] greenscale[p16] bluescale[p16] aux startcolor[p8] endcolor[p8]
  $0D resID[p8] filename[c]... $00
  $0D resID[p8] filename[c]... $00
  $0E resID[p8] filename[c]... $00
  $0E resID[p8] filename[c]... $00
Line 1,185: Line 1,244:
|$03||SO_ROOM_SCREEN||Initialises a screen.
|$03||SO_ROOM_SCREEN||Initialises a screen.
|-
|-
|$04||SO_ROOM_PALETTE||Adjusts the room's palette.
|$04||SO_ROOM_PALETTE||Adjusts the room's palette. Aux opcode's initial value is $04.
|-
|-
|$05||SO_ROOM_SHAKE_ON||Starts the room shaking.
|$05||SO_ROOM_SHAKE_ON||Starts the room shaking.
Line 1,199: Line 1,258:
|$0A||SO_ROOM_FADE||If effect is 0, fades in the room. Otherwise, fades out with the given effect (taken from the high byte of effect).<br>1 = iris effect<br>2 = box wipe (upper-left to bottom-right)<br>3 = box wipe (upper-right to bottem-left)<br>4 = inverse box wipe.
|$0A||SO_ROOM_FADE||If effect is 0, fades in the room. Otherwise, fades out with the given effect (taken from the high byte of effect).<br>1 = iris effect<br>2 = box wipe (upper-left to bottom-right)<br>3 = box wipe (upper-right to bottem-left)<br>4 = inverse box wipe.
|-
|-
|$0B||SO_RGB_ROOM_INTENSITY||Lightens/darkens the room's palette, with different scales for red, green and blue.
|$0B||SO_RGB_ROOM_INTENSITY||Lightens/darkens the room's palette, with different scales for red, green and blue. Aux opcode's initial value is $0B.
|-
|-
|$0C||SO_ROOM_SHADOW||Lightens/darkens the shadow palette, with different scales for red, green, and blue.
|$0C||SO_ROOM_SHADOW||Lightens/darkens the shadow palette, with different scales for red, green, and blue.
Line 1,209: Line 1,268:
|$0F||SO_ROOM_TRANSFORM||Manipulates palettes, strings?
|$0F||SO_ROOM_TRANSFORM||Manipulates palettes, strings?
|-
|-
|$10||SO_CYCLE_SPEED||Starts colour cycling with delay? colIndex is between 0 and 16
|$10||SO_CYCLE_SPEED||Starts color cycling with delay? colIndex is between 0 and 16
|}
|}


Line 1,216: Line 1,275:
  opcode arg1[p16] arg2[p16] sub-opcode
  opcode arg1[p16] arg2[p16] sub-opcode


Small header games include an extra sub-opcode, $02 (SO_ROOM_COLOR), which adjusts the room's palette:
Small header games (V3 and V4) include an extra sub-opcode, $02 (SO_ROOM_COLOR), which adjusts the room's palette:
  opcode $02 colour[p16] index[p16]
  opcode $02 color[p16] index[p16]
  ... or for V3 games ...
  ... or for V3 games ...
  opcode colour[p16] index[p16] $02
  opcode color[p16] index[p16] $02


In small header games, sub-opcode $04 (SO_ROOM_PALETTE) affects the shadow palette, and only accepts two arguments, a "room colour slot" (palette entry? between 0 and 256) and an index:
In small header games, sub-opcode $04 (SO_ROOM_PALETTE) affects the shadow palette, and only accepts two arguments, a "room color slot" (palette entry? between 0 and 256) and an index:
  opcode $04 colour[p16] index[p16]
  opcode $04 color[p16] index[p16]
  ... or for V3 games ...
  ... or for V3 games ...
  opcode colour[p16] index[p16] $04
  opcode color[p16] index[p16] $04


In FM-Towns games, sub-opcode $0A performs a different function and has its own sub-opcodes (some unknown and all not yet implemented in ScummVM):
In FM-Towns games, sub-opcode $0A performs a different function and has its own sub-opcodes (some unknown and all not yet implemented in ScummVM):
Line 1,263: Line 1,322:




==saveRestoreVerbs ($AB)==
==saveLoadGame ($22) (V3-4)==
This instruction is not present in SCUMM V5; its opcode is used for "getAnimCounter".


===Encoding===  
===Encoding===
  opcode aux start[p8] end[p8] mode[p8] sub-opcode
  opcode result arg1[p8]


sub-opcodes:
===Operation===
$01
The slot is determined by taking the lower 5 bits of arg1. The upper 3 bits determine an aux opcode, that performs an action described in the table below.
$02
$03


===Operation===
{| border="1" cellpadding="2" width=100%
{| border="1" cellpadding="2" width=100%
|- style="background:whitesmoke"
|- style="background:whitesmoke"
|Opcode||Meaning||Description
|Opcode||Meaning||Description
|-
|-
|$01||SO_SAVE_VERBS||For all verbs between start and end, sets the "saveid" to mode.  
|$00||Num. Available Slots||Returns the number of save slots available.
|-
|$20||Drive||In V3, returns the type of drive (0 = ???, 1 = A or B [floppy], 2 = hard drive).<br>In V4, sets the current drive (returns 1).
|-
|$40||Load Game||Loads a game from the given slot (returns 3 if successful, 5 otherwise).
|-
|-
|$02||SO_RESTORE_VERBS||For all verbs between start and end and matching mode, kills any existing verb, sets the saveid to 0 and generally inits the verb.
|$80||Save Game||Saves a game to the given slot (returns 0 if successful, 2 otherwise).
|-
|-
|$03||SO_DELETE_VERBS||For all verbs between start and end and matching mode, kills any existing verb.
|$C0||Test For Game||Tests if a save exists in the given slot (returns 6 if so, 7 otherwise).
|}
|}




==setCameraAt ($32)==
==saveLoadVars ($A7) (V3-4)==
This instruction is not present in SCUMM V5; its opcode is used as a dummy.


===Encoding===
===Encoding===
  opcode x[p16]
  opcode sub-opcode


===Operation===
sub-opcodes:
Sets the camera's x position.
$01 sub-sub-opcode... $00
$02 sub-sub-opcode... $00


$01 (save) sub-sub-opcodes:
$01 resultA resultB
$02 arg1[p8] arg2[p8]
$03 filename[c]... $00
$04
$1F


==setObjectName ($54)==
$02 (load) sub-sub-opcodes:
 
$01 resultA resultB
===Encoding===
  $02 arg1[p8] arg2[p8]
  opcode object[p16] name[c]... $00
$03 filename[c]... $00
$04
$1F


===Operation===
===Operation===
Sets the given object's name.
{| border="1" cellpadding="2" width=100%
|- style="background:whitesmoke"
|Opcode||Meaning||Description
|-
|$01||SO_SAVE_VARS||Saves variables (for saving games?)
|-
|$02?||SO_RESTORE_VERBS||Loads variables (for saving games?)<br>(I have not verified that restore vars is $02, as the ScummVM code only compares to $01.)
|}


{| border="1" cellpadding="2" width=100%
|- style="background:whitesmoke"
|Opcode||Meaning||Description
|-
|$01||Write Vars||Writes a range of variables.
|-
|$02||Write Strings||Writes a range of string variables.
|-
|$03||Open File||Opens a file for writing.
|-
|$04||Dummy||Does nothing.
|-
|$1F||Close File||Closes the last opened file.
|}


==setOwnerOf ($29)==
{| border="1" cellpadding="2" width=100%
 
|- style="background:whitesmoke"
===Encoding===
|Opcode||Meaning||Description
opcode object[p16] owner[p8]
|-
|$01||Read Vars||Reads a range of variables.
|-
|$02||Read Strings||Reads a range of string variables.
|-
|$03||Open File||Opens a file for reading.
|-
|$04||Dummy||Does nothing.
|-
|$1F||Close File||Closes the last opened file.
|}


===Operation===
Sets the owner of the object.


==saveRestoreVerbs ($AB)==


==setState ($07)==
===Encoding===
opcode sub-opcode


===Encoding===
sub-opcodes:
  opcode object[p16] state[p8]
  $01 start[p8] end[p8] mode[p8]
$02 start[p8] end[p8] mode[p8]
$03 start[p8] end[p8] mode[p8]


===Operation===
===Operation===
Sets the state of the object.
{| border="1" cellpadding="2" width=100%
|- style="background:whitesmoke"
|Opcode||Meaning||Description
|-
|$01||SO_SAVE_VERBS||For all verbs between start and end, sets the "saveid" to mode.
|-
|$02||SO_RESTORE_VERBS||For all verbs between start and end and matching mode, kills any existing verb, sets the saveid to 0 and generally inits the verb.
|-
|$03||SO_DELETE_VERBS||For all verbs between start and end and matching mode, kills any existing verb.
|}




==setVarRange ($26)==
==setCameraAt ($32)==
non-standard encoding


===Encoding===
===Encoding===
  opcode result number[8] values[8]...
  opcode x[p16]
or
opcode result number[8] values[16]...


===Operation===
===Operation===
for (i = 0; i < number; i++) {
Sets the camera's x position.
  &#42;result + i := values[i];
 
}


This sets a number of variables to the given parameters. The starting variable is given as "result", and the number of variables to modify is given as "number". This is followed by the same number of values, which will be put into the variable locations. The values are constants, and can be either 16-bit, if the highest bit of the opcode is set, i.e. $A6; or 8-bit, if the highest bit of the opcode is not set, i.e. $26. Note that all values are affected by the opcode's high bit; you can't mix 8 and 16-bit values.
==setObjectName ($54)==


descumm example:
===Encoding===
  setVarRange(Var[178],9,[0,0,0,0,0,0,0,0,0]);
  opcode object[p16] name[c]... $00


This sets variables 178 to 186 (inclusive) to 0.
===Operation===
Sets the given object's name.




==soundKludge ($4C)==
==setOwnerOf ($29)==


===Encoding===
===Encoding===
  opcode items[v16]...
  opcode object[p16] owner[p8]


===Operation===
===Operation===
If the first item is -1, the existing sound queue is processed. Otherwise, the list of items is added to the queue.
Sets the owner of the object.


===Variants===
In SCUMM V3 (small header) games, this opcode is used for the WaitForSentence instruction.


 
==setState ($07)==
==startMusic ($01)==


===Encoding===
===Encoding===
  opcode music[p8]
  opcode object[p16] state[p8]


===Operation===
===Operation===
Adds the music in to the queue to be played.
Sets the state of the object.


===Variants===
In FM-Towns (SCUMM V3) games, this instruction performs different functions (some kind of Audio CD status query function; some partially implemented in ScummVM):
opcode result sub-opcode
{| border="1" cellpadding="2" width=100%
|- style="background:whitesmoke"
|Opcode||Meaning||Description
|-
|$00||Is Playing||Returns true if a CD audio track is currently playing.
|-
|$FC||Unpause CD||Unpauses the CD audio track.
|-
|$FD||Pause CD||Pauses the CD audio track.
|-
|$FE||Get CD Sound||Returns the current CD sound.
|-
|$FF||CD Volume||Might return the the current CD volume in FM-Towns Loom.
|-
|other||Track Length||Returns the track length in seconds.
|}


 
==setVarRange ($26)==
==startObject ($37)==
non-standard encoding


===Encoding===
===Encoding===
  opcode object[p16] script[p8] args[v16]...
  opcode result number[8] values[8]...
or
opcode result number[8] values[16]...


===Operation===
===Operation===
Starts the object's script (OBCD blocks), passing the given arguments.
for (i = 0; i < number; i++) {
  &#42;result + i := values[i];
}
 
This sets a number of variables to the given parameters. The starting variable is given as "result", and the number of variables to modify is given as "number". This is followed by the same number of values, which will be put into the variable locations. The values are constants, and can be either 16-bit, if the highest bit of the opcode is set, i.e. $A6; or 8-bit, if the highest bit of the opcode is not set, i.e. $26. Note that all values are affected by the opcode's high bit; you can't mix 8 and 16-bit values.
 
descumm example:
setVarRange(Var[178],9,[0,0,0,0,0,0,0,0,0]);
 
This sets variables 178 to 186 (inclusive) to 0.




==startScript ($0A)==
==soundKludge ($4C)==
one parameter plus varargs, extra encoding in opcode


===Encoding===
===Encoding===
  opcode script[p8] args[v16]...
  opcode items[v16]...


===Operation===
===Operation===
Spawns a new thread running the code in script script. The new script has its local variables initialised to the list args. Uninitialised variables have undefined values.
If the first item is -1, the existing sound queue is processed. Otherwise, the list of items is added to the queue.
 
===Variants===
In SCUMM V3 and V4 (small header) games, this opcode is used for the WaitForSentence instruction.


The opcode carries extra information:


{| border="1" cellpadding="2" width=10%
==startMusic ($02)==
|- style="background:whitesmoke"
|7||6||5||4  0
|-
|P1||R||F||$0A
|}
 
P1 = standard parameter bit<br>
R = indicates that the script is recursive<br>
F = indicates that the script is freeze resistant (a call to freezeScripts will skip this script, unless the "force freeze" bit of the freezeScripts opcode is set).
 
 
==startSound ($1C)==


===Encoding===
===Encoding===
  opcode sound[p8]
  opcode music[p8]


===Operation===
===Operation===
Adds the given sound to the sound queue to be played.
Adds the music in to the queue to be played.


===Variants===
In FM-Towns (SCUMM V3) games, this instruction performs different functions (some kind of Audio CD status query function; some partially implemented in ScummVM):
opcode result sub-opcode


==stopMusic ($20)==
{| border="1" cellpadding="2" width=100%
 
|- style="background:whitesmoke"
===Encoding===
|Opcode||Meaning||Description
opcode
|-
 
|$00||Is Playing||Returns true if a CD audio track is currently playing.
===Operation===
|-
Stops all sounds.
|$FC||Unpause CD||Unpauses the CD audio track.
|-
|$FD||Pause CD||Pauses the CD audio track.
|-
|$FE||Get CD Sound||Returns the current CD sound.
|-
|$FF||CD Volume||Might return the the current CD volume in FM-Towns Loom.
|-
|other||Track Length||Returns the track length in seconds.
|}




==stopObjectCode ($00)==
==startObject ($37)==


===Encoding===
===Encoding===
  opcode
  opcode object[p16] script[p8] args[v16]...


===Operation===
===Operation===
Marks the calling script as dead, to be later pruned from the thread pool. Cleans up residual arrays.
Starts the object's script (OBCD blocks), passing the given arguments.




==stopObjectScript ($6E)==
==startScript ($0A)==
one parameter plus varargs, extra encoding in opcode


===Encoding===
===Encoding===
  opcode script[p16]
  opcode script[p8] args[v16]...


===Operation===
===Operation===
Marks the given object script as dead, to be later pruned from the thread pool. Cleans up residual arrays.
Spawns a new thread running the code in script script. The new script has its local variables initialised to the list args. Uninitialised variables have undefined values.


The opcode carries extra information:


==stopScript ($62)==
{| border="1" cellpadding="2" width=10%
|- style="background:whitesmoke"
|7||6||5||4  0
|-
|P1||R||F||$0A
|}


===Encoding===
P1 = standard parameter bit<br>
  opcode script[p8]
R = indicates that the script is recursive<br>
F = indicates that the script is freeze resistant (a call to freezeScripts will skip this script, unless the "force freeze" bit of the freezeScripts opcode is set).
 
 
==startSound ($1C)==
 
===Encoding===
  opcode sound[p8]


===Operation===
===Operation===
Marks the given script as dead, to be later pruned from the thread pool. Cleans up residual arrays.
Adds the given sound to the sound queue to be played.




==stopSound ($3C)==
==stopMusic ($20)==


===Encoding===
===Encoding===
  opcode sound[p8]
  opcode


===Operation===
===Operation===
Stops the given sound.
Stops all sounds.




==stringOps ($27)==
==stopObjectCode ($A0 or $00)==
parameters depend on sub-opcode


===Encoding===
===Encoding===
  opcode sub-opcode
  opcode
 
sub-opcodes:
$01 stringID[p8] string[c]... $00
$02 destID[p8] srcID[p8]
$03 stringID[p8] index[p8] char[c]
$04 result stringID[p8] index[p8]
$05 stringID[p8] size[p8]


===Operation===
===Operation===
Miscellaneous actions on strings (Arrays, referred to by resource number).
Marks the calling script as dead, to be later pruned from the thread pool. Cleans up residual arrays. Should always be the last instruction in a script.


{| border="1" cellpadding="2" width=100%
$A0 is used in local and global scripts (LSCR and SCRP blocks in the V5 resource files), $00 is used in room entry, room exit, and verb/object scripts (ENCD, EXCD, VERB blocks).
|- style="background:whitesmoke"
|Opcode||Meaning||Description
|-
|$01||Load String||Loads the inline null-terminated string into the resource slot given by stringID.
|-
|$02||Copy String||Creates a duplicate of the string at resource slot srcID into destID. The old string at destID is lost.
|-
|$03||Write Character||Writes char at the given index (offset) of the string resource located at slot stringID. Out of bounds accesses cause undefined behaviour.
|-
|$04||Read Character||Reads a byte (character) at the given index (offset) of the string resource located at slot stringID, and writes it to result. Out of bounds accesses cause undefined behaviour.
|-
|$05||New String||Allocates or frees a string (Array), located at resource slot stringID. The string is initialised to size; if size is zero, the string is freed.
|}




==subtract ($3A)==
==stopObjectScript ($6E)==


===Encoding===
===Encoding===
  opcode result value[p16]
  opcode script[p16]


===Operation===
===Operation===
result := result - value
Marks the given object script as dead, to be later pruned from the thread pool. Cleans up residual arrays.


The variable pointed to by result is read, value is subtracted from it, and the result written back.


 
==stopScript ($62)==
==systemOps ($98)==


===Encoding===
===Encoding===
  opcode sub-opcode
  opcode script[p8]
 
sub-opcodes:
$01
$02
$03


===Operation===
===Operation===
{| border="1" cellpadding="2" width=100%
Marks the given script as dead, to be later pruned from the thread pool. Cleans up residual arrays.
|- style="background:whitesmoke"
 
|Opcode||Meaning||Description
 
|-
==stopSound ($3C)==
|$01||SO_RESTART||Restarts the game.
 
|-
===Encoding===
|$02||SO_PAUSE||Pauses/unpauses the game.
opcode sound[p8]
|-
 
|$03||SO_QUIT||Quits the game.
===Operation===
|}
Stops the given sound.




==verbOps ($7A)==
==stringOps ($27)==
parameters depend on sub-opcode


===Encoding===
===Encoding===
  opcode verbID[p8] sub-opcode... $FF
  opcode sub-opcode


sub-opcodes:
sub-opcodes:
  $01 object[p16]
  $01 stringID[p8] string[c]... $00
$02 name[c]... $00
  $02 destID[p8] srcID[p8]
  $03 colour[p8]
  $03 stringID[p8] index[p8] char[c]
  $04 hicolour[p8]
  $04 result stringID[p8] index[p8]
$05 left[p16] top[p16]
  $05 stringID[p8] size[p8]
  $06
$07
$08
$09
$10 colour[p8]
$11
$12 key[p8]
  $13
$14 stringID[p16]
$16 object[p16] room[p8]
$17 colour[p8]


===Operation===
===Operation===
Miscellaneous actions on strings (Arrays, referred to by resource number).
{| border="1" cellpadding="2" width=100%
{| border="1" cellpadding="2" width=100%
|- style="background:whitesmoke"
|- style="background:whitesmoke"
|Opcode||Meaning||Description
|Opcode||Meaning||Description
|-
|-
|$01||SO_VERB_IMAGE||Assigns an object (image) to a verb.
|$01||Load String||Loads the inline null-terminated string into the resource slot given by stringID.
|-
|-
|$02||SO_VERB_NAME||Assigns the in-line name to the verb slot.
|$02||Copy String||Creates a duplicate of the string at resource slot srcID into destID. The old string at destID is lost.
|-
|-
|$03||SO_VERB_COLOR||Sets the colour of the verb.
|$03||Write Character||Writes char at the given index (offset) of the string resource located at slot stringID. Out of bounds accesses cause undefined behavior.
|-
|-
|$04||SO_VERB_HICOLOR||Sets the high colour of the verb.
|$04||Read Character||Reads a byte (character) at the given index (offset) of the string resource located at slot stringID, and writes it to result. Out of bounds accesses cause undefined behavior.
|-
|-
|$05||SO_VERB_AT||Sets the verb's top-left co-ordinates.
|$05||New String||Allocates or frees a string (Array), located at resource slot stringID. The string is initialised to size; if size is zero, the string is freed.
|-
|}
|$06||SO_VERB_ON||Makes this verb active.
 
|-
 
|$07||SO_VERB_OFF||Makes this verb inactive.
==subtract ($3A)==
|-
 
|$08||SO_VERB_DELETE||Kills this verb.
===Encoding===
|-
opcode result value[p16]
|$09||SO_VERB_NEW||Creates a verb in the slot for the given verbID. If the slot is 0 (verb doesn't already exist), will add it to the next unusued slot; if this exceeds the global maximum number of verbs an error will be raised.
 
|-
===Operation===
|$10||SO_VERB_DIMCOLOR||Sets the dim colour of the verb.
result := result - value
|-
 
|$11||SO_VERB_DIM||Dims this verb.
The variable pointed to by result is read, value is subtracted from it, and the result written back.
|-
|$12||SO_VERB_KEY||Sets the key code (maybe ASCII char?) associated with this verb.
|-
|$13||SO_VERB_CENTER||Centres the verb?
|-
|$14||SO_VERB_NAME_STR||Loads the given string resource into the verb's slot. If either the string resource or verb slot is not found (0), the verb resource is nuked.
|-
|$16||Assign Object||Assigns an object from the given room to the verb (if the object's image index is not already assigned to the given object).
|-
|$17||Set Back Colour||Sets the background colour of the verb?
|}




==wait ($AE)==
==systemOps ($98)==


===Encoding===
===Encoding===
Line 1,605: Line 1,671:


sub-opcodes:
sub-opcodes:
  $01 actor[p8]
  $01
  $02  
  $02
  $03
  $03
$04


===Operation===
===Operation===
Line 1,615: Line 1,680:
|Opcode||Meaning||Description
|Opcode||Meaning||Description
|-
|-
|$01||SO_WAIT_FOR_ACTOR||If the given actor is moving, breaks and resumes at this instruction again.
|$01||SO_RESTART||Restarts the game.
|-
|-
|$02||SO_WAIT_FOR_MESSAGE||If the global variable VAR_HAVE_MSG (Var[3]) is not zero, breaks and resumes at this instruction again.
|$02||SO_PAUSE||Pauses/unpauses the game.
|-
|-
|$03||SO_WAIT_FOR_CAMERA||If the camera has not reached its destination x position, breaks and resumes at this instruction again.
|$03||SO_QUIT||Quits the game.
|-
|$04||SO_WAIT_FOR_SENTENCE||If there is a sentence present?, breaks and resumes at this instruction again
|}
|}


===Variants===
In Indy3 (non-Macintosh), this opcode only acts as SO_WAIT_FOR_MESSAGE and omits the sub-opcode.
opcode


 
==verbOps ($7A)==
==walkActorTo ($1E)==


===Encoding===
===Encoding===
  opcode actor[p8] x[p16] y[p16]
  opcode verbID[p8] sub-opcode... $FF


===Operation===
sub-opcodes:
Sets the actor to begin walking to the given position.
$01 object[p16]
 
$02 name[c]... $00
 
$03 color[p8]
==walkActorToActor ($0D)==
$04 hicolor[p8]
 
$05 left[p16] top[p16]
===Encoding===
$06
  opcode walker[p8] walkee[p8] distance[8]
$07
$08
$09
$10 color[p8]
$11
  $12 key[p8]
$13
$14 stringID[p16]
$16 object[p16] room[p8]
$17 color[p8]


===Operation===
===Operation===
Walks walker towards walkee's position by the given distance. Walker and walkee are both actors.
{| border="1" cellpadding="2" width=100%
 
|- style="background:whitesmoke"
 
|Opcode||Meaning||Description
==walkActorToObject ($36)==
|-
 
|$01||SO_VERB_IMAGE||Assigns an object (image) to a verb.
===Encoding===
|-
opcode actor[p8] object[p16]
|$02||SO_VERB_NAME||Assigns the in-line name to the verb slot.
 
|-
===Operation===
|$03||SO_VERB_COLOR||Sets the color of the verb.
Sets the actor to begin walking to the given object's position.
|-
|$04||SO_VERB_HICOLOR||Sets the highlight color of the verb.
|-
|$05||SO_VERB_AT||Sets the verb's top-left co-ordinates.
|-
|$06||SO_VERB_ON||Makes this verb active.
|-
|$07||SO_VERB_OFF||Makes this verb inactive.
|-
|$08||SO_VERB_DELETE||Kills this verb.
|-
|$09||SO_VERB_NEW||Creates a verb in the slot for the given verbID. If the slot is 0 (verb doesn't already exist), will add it to the next unusued slot; if this exceeds the global maximum number of verbs an error will be raised.
|-
|$10||SO_VERB_DIMCOLOR||Sets the dim color of the verb.
|-
|$11||SO_VERB_DIM||Dims this verb.
|-
|$12||SO_VERB_KEY||Sets the key code (maybe ASCII char?) associated with this verb.
|-
|$13||SO_VERB_CENTER||Centres the verb?
|-
|$14||SO_VERB_NAME_STR||Loads the given string resource into the verb's slot. If either the string resource or verb slot is not found (0), the verb resource is nuked.
|-
|$16||Assign Object||Assigns an object from the given room to the verb (if the object's image index is not already assigned to the given object).
|-
|$17||Set Back Color||Sets the background color of the verb?
|}


=Variables=


A number of variables are reserved for use by the SPUTM/SCUMM engine. Here is a list of known variables and their corresponding numbers, taken from the ScummVM source code.
==wait ($AE)==


VAR_RESULT = 0; // descumm claims var 0 is the result var (for expressions)
===Encoding===
  VAR_KEYPRESS = 0; // script_v5_.cpp claims var 0 is for keypresses...
  opcode sub-opcode
  VAR_EGO = 1;
 
  VAR_CAMERA_POS_X = 2;
sub-opcodes:
  VAR_HAVE_MSG = 3;
  $01 actor[p8]
  VAR_ROOM = 4;
  $02
VAR_OVERRIDE = 5;
  $03
VAR_MACHINE_SPEED = 6;
  $04
VAR_ME = 7;
 
VAR_NUM_ACTOR = 8;
===Operation===
VAR_CURRENT_LIGHTS = 9;
{| border="1" cellpadding="2" width=100%
VAR_CURRENTDRIVE = 10;
|- style="background:whitesmoke"
VAR_TMR_1 = 11;
|Opcode||Meaning||Description
VAR_TMR_2 = 12;
|-
VAR_TMR_3 = 13;
|$01||SO_WAIT_FOR_ACTOR||If the given actor is moving, breaks and resumes at this instruction again.
VAR_MUSIC_TIMER = 14;
|-
VAR_ACTOR_RANGE_MIN = 15;
|$02||SO_WAIT_FOR_MESSAGE||If the global variable VAR_HAVE_MSG (Var[3]) is not zero, breaks and resumes at this instruction again.
  VAR_ACTOR_RANGE_MAX = 16;
|-
VAR_CAMERA_MIN_X = 17;
|$03||SO_WAIT_FOR_CAMERA||If the camera has not reached its destination x position, breaks and resumes at this instruction again.
VAR_CAMERA_MAX_X = 18;
|-
VAR_TIMER_NEXT = 19;
|$04||SO_WAIT_FOR_SENTENCE||If there is a sentence present?, breaks and resumes at this instruction again
VAR_VIRT_MOUSE_X = 20;
|}
VAR_VIRT_MOUSE_Y = 21;
 
VAR_ROOM_RESOURCE = 22;
===Variants===
VAR_LAST_SOUND = 23;
In Indy3 (non-Macintosh), this opcode only acts as SO_WAIT_FOR_MESSAGE and omits the sub-opcode.
VAR_CUTSCENEEXIT_KEY = 24;
  opcode
VAR_TALK_ACTOR = 25;
 
VAR_CAMERA_FAST_X = 26;
 
VAR_SCROLL_SCRIPT = 27;
==walkActorTo ($1E)==
VAR_ENTRY_SCRIPT = 28;
 
VAR_ENTRY_SCRIPT2 = 29;
===Encoding===
  VAR_EXIT_SCRIPT = 30;
  opcode actor[p8] x[p16] y[p16]
VAR_EXIT_SCRIPT2 = 31;
 
VAR_VERB_SCRIPT = 32;
===Operation===
VAR_SENTENCE_SCRIPT = 33;
Sets the actor to begin walking to the given position.
VAR_INVENTORY_SCRIPT = 34;
 
VAR_CUTSCENE_START_SCRIPT = 35;
 
VAR_CUTSCENE_END_SCRIPT = 36;
==walkActorToActor ($0D)==
VAR_CHARINC = 37;
 
VAR_WALKTO_OBJ = 38;
===Encoding===
VAR_DEBUGMODE = 39;
  opcode walker[p8] walkee[p8] distance[8]
VAR_HEAPSPACE = 40;
 
VAR_RESTART_KEY = 42;
===Operation===
VAR_PAUSE_KEY = 43;
Walks walker towards walkee's position by the given distance. Walker and walkee are both actors.
VAR_MOUSE_X = 44;
 
VAR_MOUSE_Y = 45;
 
VAR_TIMER = 46;
==walkActorToObject ($36)==
VAR_TIMER_TOTAL = 47;
VAR_SOUNDCARD = 48;
VAR_VIDEOMODE = 49;
VAR_MAINMENU_KEY = 50;
VAR_FIXEDDISK = 51;
VAR_CURSORSTATE = 52;
  VAR_USERPUT = 53;
VAR_V5_TALK_STRING_Y = 54;
VAR_SOUNDRESULT = 56;
VAR_TALKSTOP_KEY = 57;
VAR_FADE_DELAY = 59;
VAR_NOSUBTITLES = 60;
VAR_SOUNDPARAM = 64;
VAR_SOUNDPARAM2 = 65;
VAR_SOUNDPARAM3 = 66;
VAR_INPUTMODE = 67; // 1 is keyboard, 2 is joystick, 3 is mouse
VAR_MEMORY_PERFORMANCE = 68;
VAR_VIDEO_PERFORMANCE = 69;
VAR_ROOM_FLAG = 70;
VAR_GAME_LOADED = 71;
VAR_NEW_ROOM = 72;


=Table of Parameters=
===Encoding===
opcode actor[p8] object[p16]


This table shows a summary of the opcodes and their parameters in a concise fashion. Further information that could be added: the opcode values, equivalent output from descumm.
===Operation===
Sets the actor to begin walking to the given object's position.


Argument types:
=Variables=
* V = variable
* B = byte constant
* W = word constant
* P8 = variable or byte
* P16 = variable or word
* L = list
* J = jump (used by almost all boolean expressions, comparisons) (equivalent to W)
* D = delay; 24-bit constant (only used by delay instruction, strangely enough)
* A0 = ASCII string, null-terminated
* A1 = ASCII string, $FF terminated
* FF = the hex value $FF, used for terminating some lists, strings etc.
* SO = sub-opcode, variants listed underneath as "opcode$sub-opcode"
* NS = non-standard encoding that cannot be sufficiently expressed in this table
* + = one or more of the preceding argument (parameter bits usually don't matter)
* None = does not take that argument argument


A number of variables are reserved for use by the SPUTM/SCUMM engine. Here is a list of known variables and their corresponding numbers, taken from the ScummVM source code.


{| border="1" style="text-align:center" width=100% cellpadding=2
VAR_RESULT = 0; // descumm claims var 0 is the result var (for expressions)
|- style="background:whitesmoke"
VAR_KEYPRESS = 0; // script_v5_.cpp claims var 0 is for keypresses...
|Instruction||Returns a Value||Arg 1||Arg 2||Arg 3
VAR_EGO = 1;
|-
VAR_CAMERA_POS_X = 2;
|align="left" |actorFollowCamera
VAR_HAVE_MSG = 3;
|style="color:silver; background:whitesmoke" |False
VAR_ROOM = 4;
|P8
VAR_OVERRIDE = 5;
|style="color:silver; background:whitesmoke" |None
VAR_MACHINE_SPEED = 6;
|style="color:silver; background:whitesmoke" |None
VAR_ME = 7;
|-
VAR_NUM_ACTOR = 8;
|align="left" |actorFromPos
VAR_CURRENT_LIGHTS = 9;
|True
VAR_CURRENTDRIVE = 10;
|P16
VAR_TMR_1 = 11;
|P16
VAR_TMR_2 = 12;
|style="color:silver; background:whitesmoke" |None
VAR_TMR_3 = 13;
|-
VAR_MUSIC_TIMER = 14;
|align="left" |actorOps
VAR_ACTOR_RANGE_MIN = 15;
|style="color:silver; background:whitesmoke" |False
VAR_ACTOR_RANGE_MAX = 16;
|P8
VAR_CAMERA_MIN_X = 17;
|SO+
VAR_CAMERA_MAX_X = 18;
|FF
VAR_TIMER_NEXT = 19;
|-
VAR_VIRT_MOUSE_X = 20;
|align="left" |actorOps$00
VAR_VIRT_MOUSE_Y = 21;
|style="color:silver; background:whitesmoke" |False
VAR_ROOM_RESOURCE = 22;
|P8
VAR_LAST_SOUND = 23;
|style="color:silver; background:whitesmoke" |None
VAR_CUTSCENEEXIT_KEY = 24;
|style="color:silver; background:whitesmoke" |None
VAR_TALK_ACTOR = 25;
|-
VAR_CAMERA_FAST_X = 26;
|align="left" |actorOps$01
VAR_SCROLL_SCRIPT = 27;
|style="color:silver; background:whitesmoke" |False
VAR_ENTRY_SCRIPT = 28;
|P8
VAR_ENTRY_SCRIPT2 = 29;
|style="color:silver; background:whitesmoke" |None
VAR_EXIT_SCRIPT = 30;
|style="color:silver; background:whitesmoke" |None
VAR_EXIT_SCRIPT2 = 31;
|-
VAR_VERB_SCRIPT = 32;
|align="left" |actorOps$02
VAR_SENTENCE_SCRIPT = 33;
|style="color:silver; background:whitesmoke" |False
VAR_INVENTORY_SCRIPT = 34;
|P8
VAR_CUTSCENE_START_SCRIPT = 35;
|P8
VAR_CUTSCENE_END_SCRIPT = 36;
|style="color:silver; background:whitesmoke" |None
VAR_CHARINC = 37;
|-
VAR_WALKTO_OBJ = 38;
|align="left" |actorOps$03
VAR_DEBUGMODE = 39;
|style="color:silver; background:whitesmoke" |False
VAR_HEAPSPACE = 40;
|P8
VAR_RESTART_KEY = 42;
|style="color:silver; background:whitesmoke" |None
VAR_PAUSE_KEY = 43;
|style="color:silver; background:whitesmoke" |None
VAR_MOUSE_X = 44;
|-
VAR_MOUSE_Y = 45;
|align="left" |actorOps$04
VAR_TIMER = 46;
|style="color:silver; background:whitesmoke" |False
VAR_TIMER_TOTAL = 47;
|P8
VAR_SOUNDCARD = 48;
|style="color:silver; background:whitesmoke" |None
VAR_VIDEOMODE = 49;
|style="color:silver; background:whitesmoke" |None
VAR_MAINMENU_KEY = 50;
|-
VAR_FIXEDDISK = 51;
|align="left" |actorOps$05
VAR_CURSORSTATE = 52;
|style="color:silver; background:whitesmoke" |False
VAR_USERPUT = 53;
|P8
VAR_V5_TALK_STRING_Y = 54;
|P8
VAR_SOUNDRESULT = 56;
|style="color:silver; background:whitesmoke" |None
VAR_TALKSTOP_KEY = 57;
|-
VAR_FADE_DELAY = 59;
|align="left" |actorOps$06
VAR_NOSUBTITLES = 60;
|style="color:silver; background:whitesmoke" |False
VAR_SOUNDPARAM = 64;
|P8
VAR_SOUNDPARAM2 = 65;
|style="color:silver; background:whitesmoke" |None
VAR_SOUNDPARAM3 = 66;
|style="color:silver; background:whitesmoke" |None
VAR_INPUTMODE = 67; // 1 is keyboard, 2 is joystick, 3 is mouse
|-
VAR_MEMORY_PERFORMANCE = 68;
|align="left" |actorOps$07
VAR_VIDEO_PERFORMANCE = 69;
|style="color:silver; background:whitesmoke" |False
VAR_ROOM_FLAG = 70;
|P8
VAR_GAME_LOADED = 71;
|P8
VAR_NEW_ROOM = 72;
|P8
 
|-
 
|align="left" |actorOps$08
=Table of Parameters=
|style="color:silver; background:whitesmoke" |False
Please see the wiki page [[SCUMM/V5_opcodes/Table]] for a concise rendition of the above information (with a few omissions dues to the complexity of the instructions).
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$09
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$0A
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$0B
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$0C
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$0D
|style="color:silver; background:whitesmoke" |False
|A0
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$0E
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$10
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$11
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$12
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$13
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$14
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$15
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorOps$16
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |actorSetClass
|style="color:silver; background:whitesmoke" |False
|P16
|L
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |add
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |and
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |animateActor
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |breakHere
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |chainScript
|style="color:silver; background:whitesmoke" |False
|P8
|L
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand
|style="color:silver; background:whitesmoke" |False
|SO
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$01
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$02
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$03
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$04
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$05
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$06
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$07
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$08
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$0A
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$0B
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|P8
|-
|align="left" |cursorCommand$0C
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$0D
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cursorCommand$0E
|style="color:silver; background:whitesmoke" |False
|L
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |cutscene
|style="color:silver; background:whitesmoke" |False
|L
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |debug
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |decrement
|True
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |delay
|style="color:silver; background:whitesmoke" |False
|D
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |delayVariable
|style="color:silver; background:whitesmoke" |False
|V
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |divide
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |doSentence
|style="color:silver; background:whitesmoke" |False
|P8
|P16
|P16
|-
|align="left" |drawBox
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|NS
|-
|align="left" |drawObject
|style="color:silver; background:whitesmoke" |False
|P16
|SO
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |drawObject$01
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |drawObject$02
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |drawObject$1F
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |dummy
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |endCutscene
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |equalZero
|style="color:silver; background:whitesmoke" |False
|V
|J
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |expression
|True
|SO+
|FF
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |expression$01
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |expression$02
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |expression$03
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |expression$04
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |expression$05
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |expression$06
|style="color:silver; background:whitesmoke" |False
|NS
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |faceActor
|style="color:silver; background:whitesmoke" |False
|P8
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |findInventory
|True
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |findObject
|True
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |freezeScripts
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorCostume
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorElevation
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorFacing
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorMoving
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorRoom
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorScale
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorWalkBox
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorWidth
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorX
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getActorY
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getAnimCounter
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getClosestObjActor
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getDist
|True
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getInventoryCount
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getObjectOwner
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getObjectState
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getRandomNumberr
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getScriptRunning
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getStringWidth
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |getVerbEntryPoint
|True
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |ifClassOfIs
|style="color:silver; background:whitesmoke" |False
|P16
|NS
|J
|-
|align="left" |ifNotState
|style="color:silver; background:whitesmoke" |False
|P16
|P8
|J
|-
|align="left" |ifState
|style="color:silver; background:whitesmoke" |False
|P16
|P8
|J
|-
|align="left" |increment
|True
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |isActorInBox
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|J
|-
|align="left" |isEqual
|style="color:silver; background:whitesmoke" |False
|V
|P16
|J
|-
|align="left" |isGreater
|style="color:silver; background:whitesmoke" |False
|V
|P16
|J
|-
|align="left" |isGreaterEqual
|style="color:silver; background:whitesmoke" |False
|V
|P16
|J
|-
|align="left" |isLess
|style="color:silver; background:whitesmoke" |False
|V
|P16
|J
|-
|align="left" |isNotEqual
|style="color:silver; background:whitesmoke" |False
|V
|P16
|J
|-
|align="left" |isSoundRunning
|True
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |jumpRelative
|style="color:silver; background:whitesmoke" |False
|J
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |lessOrEqual
|style="color:silver; background:whitesmoke" |False
|V
|P16
|J
|-
|align="left" |lights
|style="color:silver; background:whitesmoke" |False
|P8
|B
|B
|-
|align="left" |loadRoom
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |loadRoomWithEgo
|style="color:silver; background:whitesmoke" |False
|P16
|P8
|NS
|-
|align="left" |matrixOp
|style="color:silver; background:whitesmoke" |False
|SO
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |matrixOp$01
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |matrixOp$02
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |matrixOp$03
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |matrixOp$04
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |move
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |multiply
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |notEqualZero
|style="color:silver; background:whitesmoke" |False
|V
|J
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |oldRoomEffect
|style="color:silver; background:whitesmoke" |False
|SO
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |oldRoomEffect$03
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |or
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |override
|style="color:silver; background:whitesmoke" |False
|SO
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |override$00
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |override$01
|style="color:silver; background:whitesmoke" |False
|NS
|J
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |panCameraTo
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |pickupObject
|style="color:silver; background:whitesmoke" |False
|P16
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |pickupObjectOld
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print
|style="color:silver; background:whitesmoke" |False
|P8
|SO
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print$00
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print$01
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print$02
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print$03
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print$04
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print$06
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print$07
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print$08
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |print$15
|style="color:silver; background:whitesmoke" |False
|A1
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo$00
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo$01
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo$02
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo$03
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo$04
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo$06
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo$07
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo$08
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |printEgo$15
|style="color:silver; background:whitesmoke" |False
|A1
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |pseudoRoom
|style="color:silver; background:whitesmoke" |False
|B
|NS
|NS
|-
|align="left" |putActor
|style="color:silver; background:whitesmoke" |False
|P8
|P16
|P16
|-
|align="left" |putActorAtObject
|style="color:silver; background:whitesmoke" |False
|P8
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |putActorInRoom
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourceRoutines
|style="color:silver; background:whitesmoke" |False
|SO
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$01
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$02
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$03
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$04
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$05
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$06
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$07
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$08
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$09
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$0A
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$0B
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$0C
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$0D
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$0E
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$0F
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$10
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$11
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$12
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$13
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |resourcesRoutines$14
|style="color:silver; background:whitesmoke" |False
|P8
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |roomOps
|style="color:silver; background:whitesmoke" |False
|SO
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |roomOps$01
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |roomOps$03
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |roomOps$04
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|NS
|-
|align="left" |roomOps$05
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |roomOps$06
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |roomOps$07
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|NS
|-
|align="left" |roomOps$08
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|P8
|-
|align="left" |roomOps$09
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |roomOps$0A
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |roomOps$0B
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|NS
|-
|align="left" |roomOps$0C
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|NS
|-
|align="left" |roomOps$0D
|style="color:silver; background:whitesmoke" |False
|P8
|NS
|NS
|-
|align="left" |roomOps$0E
|style="color:silver; background:whitesmoke" |False
|P8
|NS
|NS
|-
|align="left" |roomOps$0F
|style="color:silver; background:whitesmoke" |False
|P8
|NS
|NS
|-
|align="left" |roomOps$10
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |saveRestoreVerbs
|style="color:silver; background:whitesmoke" |False
|NS
|NS
|NS
|-
|align="left" |saveRestoreVerbs$01
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |saveRestoreVerbs$02
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |saveRestoreVerbs$03
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |setCameraAt
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |setObjectName
|style="color:silver; background:whitesmoke" |False
|P16
|A
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |setOwnerOf
|style="color:silver; background:whitesmoke" |False
|P16
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |setState
|style="color:silver; background:whitesmoke" |False
|P16
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |setVarRange
|True
|B
|NS
|NS
|-
|align="left" |soundKludge
|style="color:silver; background:whitesmoke" |False
|L
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |startMusic
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |startObject
|style="color:silver; background:whitesmoke" |False
|P16
|P8
|L
|-
|align="left" |startScript
|style="color:silver; background:whitesmoke" |False
|P8
|L
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |startSound
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stopMusic
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stopObjectCode
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stopObjectScript
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stopScript
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stopSound
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stringOps
|style="color:silver; background:whitesmoke" |False
|SO
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stringOps$01
|style="color:silver; background:whitesmoke" |False
|P8
|A0
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stringOps$02
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stringOps$03
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|B
|-
|align="left" |stringOps$04
|True
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |stringOps$05
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |subtract
|True
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |systemOps
|style="color:silver; background:whitesmoke" |False
|SO
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |systemOps$01
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |systemOps$02
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |systemOps$03
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps
|style="color:silver; background:whitesmoke" |False
|P8
|SO+
|FF
|-
|align="left" |verbOps$01
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$02
|style="color:silver; background:whitesmoke" |False
|A0
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$03
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$04
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$05
|style="color:silver; background:whitesmoke" |False
|P16
|P16
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$06
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$07
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$08
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$09
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$10
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$11
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$12
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$13
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$14
|style="color:silver; background:whitesmoke" |False
|P16
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$16
|style="color:silver; background:whitesmoke" |False
|P16
|P8
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |verbOps$17
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |wait
|style="color:silver; background:whitesmoke" |False
|SO
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |wait$01
|style="color:silver; background:whitesmoke" |False
|P8
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |wait$02
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |wait$03
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |wait$04
|style="color:silver; background:whitesmoke" |False
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|style="color:silver; background:whitesmoke" |None
|-
|align="left" |walkActorTo
|style="color:silver; background:whitesmoke" |False
|P8
|P16
|P16
|-
|align="left" |walkActorToActor
|style="color:silver; background:whitesmoke" |False
|P8
|P8
|B
|-
|align="left" |walkActorToObject
|style="color:silver; background:whitesmoke" |False
|P8
|P16
|style="color:silver; background:whitesmoke" |None
|}
2,051

edits

Navigation menu