Difference between revisions of "SCUMM/V5 opcodes"
Jestar jokin (talk | contribs) m (some line breaks) |
Jestar jokin (talk | contribs) (→SCUMM V5 opcodes: Entered about half the instructions, based on script_v5.cpp) |
||
Line 9: | Line 9: | ||
|result||A result pointer. (A standard word pointer, always a LE word.) | |result||A result pointer. (A standard word pointer, always a LE word.) | ||
|- | |- | ||
|var||A var pointer. | |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 17: | Line 17: | ||
|value[p8]||An 8-bit parameter. This may be encoded as a word LE if it's a pointer, or a byte if it's a constant. | |value[p8]||An 8-bit parameter. This may be encoded as a word LE if it's a pointer, or a byte if it's a constant. | ||
|- | |- | ||
|value[p16]||A 16-bit parameter. This is always encoded as a word LE. | |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. | |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. | ||
|- | |- | ||
|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. | ||
|- | |||
|value[s]||A null-terminated ASCII string. | |||
|- | |- | ||
|(term)||An optional term. | |(term)||An optional term. | ||
|- | |||
|term...||One or more terms. | |||
|} | |} | ||
Of course, due to the non-orthogonality of the opcodes, there are lots of exceptions. | Of course, due to the non-orthogonality of the opcodes, there are lots of exceptions. | ||
==actorFollowCamera ($52)== | ==actorFollowCamera ($52)== | ||
===Encoding=== | |||
''opcode actor[p8]'' | |||
===Operation=== | |||
Sets the camera to follow the given actor? | |||
==actorFromPos ($15)== | ==actorFromPos ($15)== | ||
== | ===Encoding=== | ||
''opcode result x[p16] y[p16]'' | |||
===Operation=== | |||
Returns the actor located at the given co-ordinates. | |||
==actorOps ($13)== | |||
parameters depend on auxiliary opcode; terminated by $FF | |||
===Encoding=== | |||
''opcode actor[p8] sub-opcode... $FF'' | |||
sub-opcode can be any of the following:<br> | |||
''$01 costume[p8]''<br> | |||
''$02 xspeed[p8] yspeed[p8]''<br> | |||
''$03 sound[p8]''<br> | |||
''$04 walkframe[p8]''<br> | |||
''$05 starttalk[p8] endtalk[p8]''<br> | |||
''$06 standframe[p8]''<br> | |||
''$07 arg1[p8] arg2[p8] arg3[p8]''<br> | |||
''$08''<br> | |||
''$09 elevation[p16]''<br> | |||
''$0A''<br> | |||
''$0B index[p8] value[p8]''<br> | |||
''$0C colour[p8]''<br> | |||
''$0D name[s]''<br> | |||
''$0E initframe[p8]''<br> | |||
''$10 width[p8]''<br> | |||
''$11 xscale[p8] yscale[p8]''<br> | |||
''$12''<br> | |||
''$13 zplane[p8]''<br> | |||
''$14''<br> | |||
''$15 animspeed[p8]''<br> | |||
''$16 mode[p8]''<br> | |||
===Operation=== | |||
Miscellaneous actions on actors. | |||
{| border="1" cellpadding="2" width=100% | |||
|- style="background:silver" | |||
|Opcode||Meaning||Description | |||
|- | |||
|$00||dummy||A dummy case, does nothing (in ScummVM). | |||
|- | |||
|$01||SO_COSTUME||Sets the actor's costume. | |||
|- | |||
|$02||SO_STEP_DIST||Sets the actor's walking speed for x and y. | |||
|- | |||
|$03||SO_SOUND||Associates a sound with the actor (footsteps?) | |||
|- | |||
|$04||SO_WALK_ANIMATION||Sets the current frame of the walking animation. | |||
|- | |||
|$05||SO_TALK_ANIMATION||Sets the start and stop frames of the talking animation. | |||
|- | |||
|$06||SO_STAND_ANIMATION||Sets the current frame of the standing animation. | |||
|- | |||
|$07||SO_ANIMATION||Unknown; seems to be unused in ScummVM. | |||
|- | |||
|$08||SO_DEFAULT||Initializes actor. | |||
|- | |||
|$09||SO_ELEVATION||Sets the actor's elevation to the given value. | |||
|- | |||
|$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). | |||
|- | |||
|$0C||SO_TALK_COLOR||Sets the actor's talk colour. | |||
|- | |||
|$0D||SO_ACTOR_NAME||Sets the actor's name to the given null-terminated string. | |||
|- | |||
|$0E||SO_INIT_ANIMATION||Sets the current frame of the initial animation. | |||
|- | |||
|$10||SO_ACTOR_WIDTH||Sets the actor's width. | |||
|- | |||
|$11||SO_ACTOR_SCALE||Sets the actor's X and Y scales. | |||
|- | |||
|$12||SO_NEVER_ZCLIP||Turns off all Z-clipping for the actor. | |||
|- | |||
|$13||SO_ALWAYS_ZCLIP||Forces the actor's Z-clipping for the given Z-plane? | |||
|- | |||
|$14||SO_IGNORE_BOXES||Ignores 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 | |||
|- | |||
|$17||SO_SHADOW||Sets the shadow mode. | |||
|} | |||
===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. | |||
==actorSetClass ($5D)== | ==actorSetClass ($5D)== | ||
===Encoding=== | |||
''opcode object[p16] classes[v16]...'' | |||
===Operation=== | |||
Makes object inherit from all of the given classes. A class of "0" will clear all of the object's existing class data. | |||
==add ($5A)== | ==add ($5A)== | ||
Line 45: | Line 156: | ||
The variable pointed to by result is read, value is added to it, and the result written back. | The variable pointed to by result is read, value is added to it, and the result written back. | ||
==and ($17)== | ==and ($17)== | ||
one parameter, uses result | one parameter, uses result | ||
Line 57: | Line 168: | ||
The variable pointed to by result is read, logically ANDed with value, and the result written back. | The variable pointed to by result is read, logically ANDed with value, and the result written back. | ||
==animateActor ($11)== | ==animateActor ($11)== | ||
===Encoding=== | |||
''opcode actor[p8] anim[p8]''' | |||
===Operation=== | |||
Starts the given animation for the given actor. | |||
==arrayOp ($27)== | ==arrayOp ($27)== | ||
parameters depend on auxiliary opcode | |||
parameters depend on | |||
===Encoding=== | ===Encoding=== | ||
Line 88: | Line 206: | ||
|$05||create entry||Allocates or frees an Array. The Array array is initialised to size size; if size is zero, the Array is freed. | |$05||create entry||Allocates or frees an Array. The Array array is initialised to size size; if size is zero, the Array is freed. | ||
|} | |} | ||
==breakHere ($80)== | ==breakHere ($80)== | ||
no parameters | no parameters | ||
Line 98: | Line 216: | ||
===Operation=== | ===Operation=== | ||
Deschedules the currently running thread. Execution continues at the next instruction when the thread's next timeslot comes around. | Deschedules the currently running thread. Execution continues at the next instruction when the thread's next timeslot comes around. | ||
==chainScript ($42)== | ==chainScript ($42)== | ||
one parameter plus varargs | one parameter plus varargs | ||
Line 108: | Line 226: | ||
===Operation=== | ===Operation=== | ||
Replaces the currently running script with another one. The current script is terminated immediately and the new script, resource number script, is executed in the same thread. The new script has its local variables initialised to the list args. Uninitialised variables have undefined values. | Replaces the currently running script with another one. The current script is terminated immediately and the new script, resource number script, is executed in the same thread. The new script has its local variables initialised to the list args. Uninitialised variables have undefined values. | ||
==cursorCommand ($2C)== | ==cursorCommand ($2C)== | ||
parameters depend on auxiliary opcode | |||
===Encoding=== | |||
''opcode sub-opcode'' | |||
sub-opcode can be any of the following: | |||
''$01''<br> | |||
''$02''<br> | |||
''$03''<br> | |||
''$04''<br> | |||
''$05''<br> | |||
''$06''<br> | |||
''$07''<br> | |||
''$08''<br> | |||
''$0A cursornum[p8] charletter[p8]''<br> | |||
''$0B index[p8] x[p8] y[p8]''<br> | |||
''$0C cursor[p8]''<br> | |||
''$0D charset[p8]''<br> | |||
''$0E colours[v16]...''<br> | |||
===Operation=== | |||
Miscellaneous actions on cursors & charsets. | |||
{| border="1" cellpadding="2" width=100% | |||
|- style="background:silver" | |||
|Opcode||Meaning||Description | |||
|- | |||
|$01||SO_CURSOR_ON||Turns the cursor on. | |||
|- | |||
|$02||SO_CURSOR_OFF||Turns the cursor off. | |||
|- | |||
|$03||SO_USERPUT_ON||??? Becomes 1 | |||
|- | |||
|$04||SO_USERPUT_OFF||??? Becomes 0 | |||
|- | |||
|$05||SO_CURSOR_SOFT_ON||Increments the cursor's state? | |||
|- | |||
|$06||SO_CURSOR_SOFT_OFF||Decrements the cursor's state? | |||
|- | |||
|$07||SO_USERPUT_SOFT_ON||??? Incremented | |||
|- | |||
|$08||SO_USERPUT_SOFT_OFF||??? Decremented | |||
|- | |||
|$0A||SO_CURSOR_IMAGE||Changes the cursor image to a new one, based on image in a character set. Only used in Loom. | |||
|- | |||
|$0B||SO_CURSOR_HOTSPOT||Changes the hotspot of a cursor. Only used in Loom. | |||
|- | |||
|$0C||SO_CURSOR_SET||Changes the current cursor. Must be between 0 and 3 inclusive. | |||
|- | |||
|$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? | |||
|} | |||
===Variants=== | |||
In SCUMM V3, sub-opcode $0E performs a different function, possibly initializing a character set. | |||
==cutScene ($40)== | ==cutScene ($40)== | ||
===Encoding=== | |||
''opcode args[v16]...'' | |||
===Operation=== | |||
??? If required, runs a script passing the given arguments. Cutscene data given by the first argument? | |||
==debug ($6B)== | ==debug ($6B)== | ||
one parameter, no result | one parameter, no result | ||
Line 122: | Line 304: | ||
===Operation=== | ===Operation=== | ||
Passes the parameter to the interpreter's debugger. What this does is entirely platform-specific (and may do nothing). | Passes the parameter to the interpreter's debugger. What this does is entirely platform-specific (and may do nothing). | ||
==decrement ($C6)== | ==decrement ($C6)== | ||
no parameters, uses result | no parameters, uses result | ||
Line 134: | Line 316: | ||
Reads the variable pointed to by result, decrements it, and writes it back. | Reads the variable pointed to by result, decrements it, and writes it back. | ||
==delay ($2E)== | ==delay ($2E)== | ||
one constant parameter | one constant parameter | ||
Line 144: | Line 326: | ||
===Operation=== | ===Operation=== | ||
Suspends the current thread for the appropriate number of 1/60ths of a second. Yes, that really is a 24-bit LE constant. | Suspends the current thread for the appropriate number of 1/60ths of a second. Yes, that really is a 24-bit LE constant. | ||
==delayVariable ($2E)== | ==delayVariable ($2E)== | ||
one constant parameter | one constant parameter | ||
===Encoding=== | ===Encoding=== | ||
''opcode | ''opcode var'' | ||
===Operation=== | ===Operation=== | ||
var is dereferenced and the current thread suspended for that number of 1/60ths of a second. | |||
==divide ($5B)== | ==divide ($5B)== | ||
one parameter, uses result | one parameter, uses result | ||
Line 166: | Line 348: | ||
The variable pointed to by result is read, divided by value, and the result written back. If value is zero, the result is undefined (and the interpeter may halt with an error). | The variable pointed to by result is read, divided by value, and the result written back. If value is zero, the result is undefined (and the interpeter may halt with an error). | ||
==doSentence ($19)== | ==doSentence ($19)== | ||
===Encoding=== | |||
''opcode verb[p8] objectA[p16] objectB[p16]'' | |||
===Operation=== | |||
Performs a verb sentence action. If verb is $FE, the current sentence script is stopped, status cleared etc. | |||
==drawBox ($3F)== | ==drawBox ($3F)== | ||
two parameters, does not use result, supplementary opcode byte with three more subsequent parameters | two parameters, does not use result, supplementary opcode byte with three more subsequent parameters | ||
Line 177: | Line 366: | ||
===Operation=== | ===Operation=== | ||
Draws a solid box on the backbuffer from (left, top)-(right, bottom) in the | Draws a solid box on the backbuffer from (left, top)-(right, bottom) in the given colour. | ||
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. | ||
==drawObject ($05)== | ==drawObject ($05)== | ||
==dummy ($ | |||
==dummy ($A7)== | |||
===Encoding=== | |||
''opcode'' | |||
===Operation=== | |||
V5 specific - The KIXX XL release of Monkey Island 2 (Amiga disk) used this opcode as a dummy, in order to remove copy protection and keep level selection. | |||
===Variants=== | |||
In SCUMM V3 and V4, this opcode is used for the saveLoadVars instruction. | |||
==endCutScene ($C0)== | ==endCutScene ($C0)== | ||
===Encoding=== | |||
''opcode''' | |||
===Operation=== | |||
Ends the cutscene, performing cleanup if necessary. | |||
==equalZero ($28)== | ==equalZero ($28)== | ||
Line 198: | Line 406: | ||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | ||
==expression ($AC)== | ==expression ($AC)== | ||
==faceActor ($09)== | ==faceActor ($09)== | ||
===Encoding=== | |||
''opcode actor[p8] object[p16]'' | |||
===Operation=== | |||
Dereferences actor, tells actor to face object (presumably based on X/Y co-ordinates). | |||
==findInventory ($3D)== | ==findInventory ($3D)== | ||
===Encoding=== | |||
''opcode result x[p8] y[p8]'' | |||
==findObject ($35)== | ==findObject ($35)== | ||
===Encoding=== | |||
''opcode result x[p8] y[p8]'' | |||
==freezeScripts ($60)== | ==freezeScripts ($60)== | ||
===Encoding=== | |||
''opcode script[p8]'' | |||
===Operation=== | |||
Freezes given script. Unfreezes all scripts if script is 0. | |||
==getActorCostume ($71)== | ==getActorCostume ($71)== | ||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the actor's current costume. | |||
==getActorElevation ($06)== | ==getActorElevation ($06)== | ||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the actor's current elevation. | |||
==getActorFacing ($63)== | ==getActorFacing ($63)== | ||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the current direction the actor is facing. | |||
==getActorMoving ($56)== | ==getActorMoving ($56)== | ||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the actor's moving status (0 or 1). | |||
==getActorRoom ($03)== | ==getActorRoom ($03)== | ||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the room the actor currently occupies? | |||
==getActorScale ($3B)== | ==getActorScale ($3B)== | ||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the actor's current scale. | |||
===Variants=== | |||
In Indy3, this opcode is used for waitForActor. | |||
==getActorWalkBox ($7B)== | ==getActorWalkBox ($7B)== | ||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the actor's walkbox. | |||
==getActorWidth ($6C)== | ==getActorWidth ($6C)== | ||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the actor's width. | |||
==getActorX ($43)== | ==getActorX ($43)== | ||
===Encoding=== | |||
''opcode result actor[p16]'' | |||
===Operation=== | |||
Returns the actor's current X co-ordinate. | |||
==getActorY ($23)== | ==getActorY ($23)== | ||
===Encoding=== | |||
''opcode result actor[p16]'' | |||
===Operation=== | |||
Returns the actor's current Y co-ordinate. | |||
==getAnimCounter ($22)== | ==getAnimCounter ($22)== | ||
This opcode is used for saveLoadGame in SCUMM V3. | |||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the actor's animation counter. | |||
==getClosestObjActor ($66)== | ==getClosestObjActor ($66)== | ||
===Encoding=== | |||
''opcode result actor[p16]'' | |||
===Operation=== | |||
Returns the object closest to the actor. Items that are more than 255 units (pixels in newer games, characters in older games) away from the actor will not be detected. | |||
==getDist ($34)== | ==getDist ($34)== | ||
===Encoding=== | |||
''opcode result objA[p16] objB[p16]'' | |||
===Operation=== | |||
Returns the distance between two actors/objects (objA and objB). | |||
==getInventoryCount ($31)== | ==getInventoryCount ($31)== | ||
===Encoding=== | |||
''opcode result actor[p8]'' | |||
===Operation=== | |||
Returns the number of items in an actor's inventory? | |||
==getObjectOwner ($10)== | ==getObjectOwner ($10)== | ||
===Encoding=== | |||
''opcode result actor[p16]'' | |||
===Operation=== | |||
Returns the owner of an object. | |||
==getObjectState ($0F)== | ==getObjectState ($0F)== | ||
This opcode behaves differently in small header V5 games. | |||
===Encoding=== | |||
''opcode result object[p16]'' | |||
===Operation=== | |||
Returns the state of the object. | |||
===Variants=== | |||
In small header games, the encoding becomes: | |||
''opcode object[p16] state[p8] target[16]'' | |||
operation becomes | |||
''unless (getState(object) == state) goto target'' | |||
==getRandomNumber ($16)== | ==getRandomNumber ($16)== | ||
===Encoding=== | |||
''opcode result seed[p8]'' | |||
===Operation=== | |||
Returns a new random number based on the given seed. | |||
==getScriptRunning ($68)== | ==getScriptRunning ($68)== | ||
===Encoding=== | |||
''opcode result script[p8]'' | |||
===Operation=== | |||
Returns 1 if the given script is running, 0 if it's not. | |||
==getStringWidth ($67)== | |||
===Encoding=== | |||
''opcode result strptr[p8]'' | |||
===Operation=== | |||
Gets the length of the string pointed to by strptr (either a variable or direct byte), stores the returned value in result. | |||
==getVerbEntryPoint ($0B)== | ==getVerbEntryPoint ($0B)== | ||
===Encoding=== | |||
''opcode result object[p16] verb[p16]'' | |||
===Operation=== | |||
Returns the entry point for the response code/script for when the given verb is applied to the given object? | |||
==ifClassOfIs ($1D)== | ==ifClassOfIs ($1D)== | ||
Line 260: | Line 645: | ||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | ||
==increment ($46)== | ==increment ($46)== | ||
Line 272: | Line 658: | ||
Reads the variable pointed to by result, increments it, and writes it back. | Reads the variable pointed to by result, increments it, and writes it back. | ||
==isActorInBox ($1F)== | ==isActorInBox ($1F)== | ||
===Encoding=== | |||
''opcode actor[p8] box[p8] target[16]'' | |||
===Operation=== | |||
If the actor's co-ordinates are not within the bounds of the given box, jump to target. | |||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | |||
==isEqual ($48)== | ==isEqual ($48)== | ||
Line 284: | Line 680: | ||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | ||
==isGreater ($78)== | ==isGreater ($78)== | ||
Line 294: | Line 691: | ||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | ||
==isGreaterEqual ($04)== | ==isGreaterEqual ($04)== | ||
Line 304: | Line 702: | ||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | ||
==isLess ($44)== | ==isLess ($44)== | ||
Line 314: | Line 713: | ||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | ||
==isNotEqual ($08)== | ==isNotEqual ($08)== | ||
Line 324: | Line 724: | ||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | ||
==isSoundRunning ($7C)== | ==isSoundRunning ($7C)== | ||
===Encoding=== | |||
''opcode result sound[p8]'' | |||
===Operation=== | |||
Returns 1 if sound is running, returns 0 if sound is not running given sound is 0. | |||
==jumpRelative ($18)== | ==jumpRelative ($18)== | ||
Line 338: | Line 746: | ||
The inline constant target is read as a signed word and added to the program counter after the instruction has been read. Therefore, if target is zero, the instruction will do nothing; if target is -3, an infinite loop will result. | The inline constant target is read as a signed word and added to the program counter after the instruction has been read. Therefore, if target is zero, the instruction will do nothing; if target is -3, an infinite loop will result. | ||
==lessOrEqual ($38)== | ==lessOrEqual ($38)== | ||
Line 350: | Line 759: | ||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | ||
==lights ($70)== | ==lights ($70)== | ||
==loadRoom ($72)== | ==loadRoom ($72)== | ||
==loadRoomWithEgo ($24)== | ==loadRoomWithEgo ($24)== | ||
==matrixOp ($30)== | ==matrixOp ($30)== | ||
==move ($1A)== | ==move ($1A)== | ||
Line 368: | Line 782: | ||
Value is moved into result. | Value is moved into result. | ||
==multiply ($1B)== | ==multiply ($1B)== | ||
Line 378: | Line 793: | ||
The variable pointed to by result is read, multiplied by value, and written back. | The variable pointed to by result is read, multiplied by value, and written back. | ||
==notEqualZero ($A8)== | ==notEqualZero ($A8)== | ||
Line 388: | Line 804: | ||
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer. | ||
==or ($57)== | ==or ($57)== | ||
Line 400: | Line 817: | ||
The variable pointed to by result is read, logically ORed with value, and the result written back. | The variable pointed to by result is read, logically ORed with value, and the result written back. | ||
==overRide ($58)== | ==overRide ($58)== | ||
==panCameraTo ($12)== | ==panCameraTo ($12)== | ||
==pickupObject ($25)== | ==pickupObject ($25)== | ||
==print ($14)== | ==print ($14)== | ||
==printEgo ($D8)== | ==printEgo ($D8)== | ||
==pseudoRoom ($CC)== | ==pseudoRoom ($CC)== | ||
==putActor ($01)== | ==putActor ($01)== | ||
==putActorAtObject ($0E)== | ==putActorAtObject ($0E)== | ||
==putActorInRoom ($2D)== | ==putActorInRoom ($2D)== | ||
==quitPauseRestart ($98)== | ==quitPauseRestart ($98)== | ||
==resourceRoutines ($0C)== | ==resourceRoutines ($0C)== | ||
==roomOp ($33)== | ==roomOp ($33)== | ||
==saveRestoreVerbs ($AB)== | ==saveRestoreVerbs ($AB)== | ||
==setCameraAt ($32)== | ==setCameraAt ($32)== | ||
==setObjectName ($54)== | ==setObjectName ($54)== | ||
==setOwnerOf ($29)== | ==setOwnerOf ($29)== | ||
==setState ($07)== | ==setState ($07)== | ||
==setVarRange ($26)== | ==setVarRange ($26)== | ||
Line 451: | Line 886: | ||
This sets variables 178 to 186 (inclusive) to 0. | This sets variables 178 to 186 (inclusive) to 0. | ||
==soundKludge ($4C)== | ==soundKludge ($4C)== | ||
==startMusic ($01)== | ==startMusic ($01)== | ||
==startObject ($37)== | ==startObject ($37)== | ||
==startScript ($0A)== | ==startScript ($0A)== | ||
Line 476: | Line 915: | ||
|P1||Q||F||$0A | |P1||Q||F||$0A | ||
|} | |} | ||
==startSound ($1C)== | ==startSound ($1C)== | ||
==stopMusic ($20)== | ==stopMusic ($20)== | ||
==stopObjectCode ($00)== | ==stopObjectCode ($00)== | ||
==stopObjectScript ($6E)== | ==stopObjectScript ($6E)== | ||
==stopScript ($62)== | ==stopScript ($62)== | ||
==stopSound ($3C)== | ==stopSound ($3C)== | ||
==subtract ($3A)== | ==subtract ($3A)== | ||
Line 498: | Line 944: | ||
The variable pointed to by result is read, value is subtracted from it, and the result written back. | The variable pointed to by result is read, value is subtracted from it, and the result written back. | ||
==animateActor ($11)== | ==animateActor ($11)== | ||
==wait ($AE)== | ==wait ($AE)== | ||
==walkActorTo ($1E)== | ==walkActorTo ($1E)== | ||
==walkActorToActor ($0D)== | ==walkActorToActor ($0D)== | ||
==walkActorToObject ($36)== | ==walkActorToObject ($36)== |
Revision as of 07:09, 25 March 2009
SCUMM V5 opcodes
The following conventions are used in the encoding descriptions.
opcode | The instruction's opcode, with the appropriate bits set according to the parameters. |
result | A result pointer. (A standard word pointer, always a LE word.) |
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[16] | A 16-bit constant (a word LE). |
value[p8] | An 8-bit parameter. This may be encoded as a word LE if it's a pointer, or a byte if it's a 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. |
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[s] | A null-terminated ASCII string. |
(term) | An optional term. |
term... | One or more terms. |
Of course, due to the non-orthogonality of the opcodes, there are lots of exceptions.
actorFollowCamera ($52)
Encoding
opcode actor[p8]
Operation
Sets the camera to follow the given actor?
actorFromPos ($15)
Encoding
opcode result x[p16] y[p16]
Operation
Returns the actor located at the given co-ordinates.
actorOps ($13)
parameters depend on auxiliary opcode; terminated by $FF
Encoding
opcode actor[p8] sub-opcode... $FF
sub-opcode can be any of the following:
$01 costume[p8]
$02 xspeed[p8] yspeed[p8]
$03 sound[p8]
$04 walkframe[p8]
$05 starttalk[p8] endtalk[p8]
$06 standframe[p8]
$07 arg1[p8] arg2[p8] arg3[p8]
$08
$09 elevation[p16]
$0A
$0B index[p8] value[p8]
$0C colour[p8]
$0D name[s]
$0E initframe[p8]
$10 width[p8]
$11 xscale[p8] yscale[p8]
$12
$13 zplane[p8]
$14
$15 animspeed[p8]
$16 mode[p8]
Operation
Miscellaneous actions on actors.
Opcode | Meaning | Description |
$00 | dummy | A dummy case, does nothing (in ScummVM). |
$01 | SO_COSTUME | Sets the actor's costume. |
$02 | SO_STEP_DIST | Sets the actor's walking speed for x and y. |
$03 | SO_SOUND | Associates a sound with the actor (footsteps?) |
$04 | SO_WALK_ANIMATION | Sets the current frame of the walking animation. |
$05 | SO_TALK_ANIMATION | Sets the start and stop frames of the talking animation. |
$06 | SO_STAND_ANIMATION | Sets the current frame of the standing animation. |
$07 | SO_ANIMATION | Unknown; seems to be unused in ScummVM. |
$08 | SO_DEFAULT | Initializes actor. |
$09 | SO_ELEVATION | Sets the actor's elevation to the given value. |
$0A | SO_ANIMATION_DEFAULT | Initializes the actor's animation frames. Init frame = 1 Walk frame = 2 Stand frame = 3 Talk start frame = 4 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). |
$0C | SO_TALK_COLOR | Sets the actor's talk colour. |
$0D | SO_ACTOR_NAME | Sets the actor's name to the given null-terminated string. |
$0E | SO_INIT_ANIMATION | Sets the current frame of the initial animation. |
$10 | SO_ACTOR_WIDTH | Sets the actor's width. |
$11 | SO_ACTOR_SCALE | Sets the actor's X and Y scales. |
$12 | SO_NEVER_ZCLIP | Turns off all Z-clipping for the actor. |
$13 | SO_ALWAYS_ZCLIP | Forces the actor's Z-clipping for the given Z-plane? |
$14 | SO_IGNORE_BOXES | Ignores 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 |
$17 | SO_SHADOW | Sets the shadow mode. |
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.
actorSetClass ($5D)
Encoding
opcode object[p16] classes[v16]...
Operation
Makes object inherit from all of the given classes. A class of "0" will clear all of the object's existing class data.
add ($5A)
Encoding
opcode result value[p16]
Operation
result := result + value
The variable pointed to by result is read, value is added to it, and the result written back.
and ($17)
one parameter, uses result
Encoding
opcode result value[p16]
Operation
result := result and value
The variable pointed to by result is read, logically ANDed with value, and the result written back.
animateActor ($11)
Encoding
opcode actor[p8] anim[p8]'
Operation
Starts the given animation for the given actor.
arrayOp ($27)
parameters depend on auxiliary opcode
Encoding
opcode $01 array[p8]
opcode $02 dest[p8] src[p8]
opcode $03 array[p8] index[p8] data[p8]
opcode $04 result array[p8] index[p8]
opcode $05 array[p8] size[p8]
Operation
Miscellaneous actions on Arrays (referred to by resource number).
Opcode | Meaning | Description |
$01 | load array | Ensures that the Array is loaded into memory. [I don't know what this does.] |
$02 | copy array | Creates a duplicate of src at resource number dest. The old Array at dest is lost. |
$03 | write entry | Writes the byte data at offset index of Array array. Out of bounds accesses cause undefined behaviour. |
$04 | read entry | Sets result to the byte of data at offset index of Array array. Out of bounds accesses cause undefined behaviour. |
$05 | create entry | Allocates or frees an Array. The Array array is initialised to size size; if size is zero, the Array is freed. |
breakHere ($80)
no parameters
Encoding
opcode
Operation
Deschedules the currently running thread. Execution continues at the next instruction when the thread's next timeslot comes around.
chainScript ($42)
one parameter plus varargs
Encoding
opcode script[p8] args[v16]...
Operation
Replaces the currently running script with another one. The current script is terminated immediately and the new script, resource number script, is executed in the same thread. The new script has its local variables initialised to the list args. Uninitialised variables have undefined values.
cursorCommand ($2C)
parameters depend on auxiliary opcode
Encoding
opcode sub-opcode
sub-opcode can be any of the following:
$01
$02
$03
$04
$05
$06
$07
$08
$0A cursornum[p8] charletter[p8]
$0B index[p8] x[p8] y[p8]
$0C cursor[p8]
$0D charset[p8]
$0E colours[v16]...
Operation
Miscellaneous actions on cursors & charsets.
Opcode | Meaning | Description |
$01 | SO_CURSOR_ON | Turns the cursor on. |
$02 | SO_CURSOR_OFF | Turns the cursor off. |
$03 | SO_USERPUT_ON | ??? Becomes 1 |
$04 | SO_USERPUT_OFF | ??? Becomes 0 |
$05 | SO_CURSOR_SOFT_ON | Increments the cursor's state? |
$06 | SO_CURSOR_SOFT_OFF | Decrements the cursor's state? |
$07 | SO_USERPUT_SOFT_ON | ??? Incremented |
$08 | SO_USERPUT_SOFT_OFF | ??? Decremented |
$0A | SO_CURSOR_IMAGE | Changes the cursor image to a new one, based on image in a character set. Only used in Loom. |
$0B | SO_CURSOR_HOTSPOT | Changes the hotspot of a cursor. Only used in Loom. |
$0C | SO_CURSOR_SET | Changes the current cursor. Must be between 0 and 3 inclusive. |
$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? |
Variants
In SCUMM V3, sub-opcode $0E performs a different function, possibly initializing a character set.
cutScene ($40)
Encoding
opcode args[v16]...
Operation
??? If required, runs a script passing the given arguments. Cutscene data given by the first argument?
debug ($6B)
one parameter, no result
Encoding
opcode param[p16]
Operation
Passes the parameter to the interpreter's debugger. What this does is entirely platform-specific (and may do nothing).
decrement ($C6)
no parameters, uses result
Encoding
opcode result
Operation
result := result - 1
Reads the variable pointed to by result, decrements it, and writes it back.
delay ($2E)
one constant parameter
Encoding
opcode param[24]
Operation
Suspends the current thread for the appropriate number of 1/60ths of a second. Yes, that really is a 24-bit LE constant.
delayVariable ($2E)
one constant parameter
Encoding
opcode var
Operation
var is dereferenced and the current thread suspended for that number of 1/60ths of a second.
divide ($5B)
one parameter, uses result
Encoding
opcode result value[p16]
Operation
result := result / value
The variable pointed to by result is read, divided by value, and the result written back. If value is zero, the result is undefined (and the interpeter may halt with an error).
doSentence ($19)
Encoding
opcode verb[p8] objectA[p16] objectB[p16]
Operation
Performs a verb sentence action. If verb is $FE, the current sentence script is stopped, status cleared etc.
drawBox ($3F)
two parameters, does not use result, supplementary opcode byte with three more subsequent parameters
Encoding
opcode left[p16] top[p16] auxopcode[8] right[p16] bottom[p16] colour[p8]
Operation
Draws a solid box on the backbuffer from (left, top)-(right, bottom) in the given colour.
The only part of auxopcode that is relevant are the parameter bits. The rest of the opcode is ignored.
drawObject ($05)
dummy ($A7)
Encoding
opcode
Operation
V5 specific - The KIXX XL release of Monkey Island 2 (Amiga disk) used this opcode as a dummy, in order to remove copy protection and keep level selection.
Variants
In SCUMM V3 and V4, this opcode is used for the saveLoadVars instruction.
endCutScene ($C0)
Encoding
opcode'
Operation
Ends the cutscene, performing cleanup if necessary.
equalZero ($28)
jumps
Encoding
opcode var target[16]
Operation
unless (var == 0) goto target
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
expression ($AC)
faceActor ($09)
Encoding
opcode actor[p8] object[p16]
Operation
Dereferences actor, tells actor to face object (presumably based on X/Y co-ordinates).
findInventory ($3D)
Encoding
opcode result x[p8] y[p8]
findObject ($35)
Encoding
opcode result x[p8] y[p8]
freezeScripts ($60)
Encoding
opcode script[p8]
Operation
Freezes given script. Unfreezes all scripts if script is 0.
getActorCostume ($71)
Encoding
opcode result actor[p8]
Operation
Returns the actor's current costume.
getActorElevation ($06)
Encoding
opcode result actor[p8]
Operation
Returns the actor's current elevation.
getActorFacing ($63)
Encoding
opcode result actor[p8]
Operation
Returns the current direction the actor is facing.
getActorMoving ($56)
Encoding
opcode result actor[p8]
Operation
Returns the actor's moving status (0 or 1).
getActorRoom ($03)
Encoding
opcode result actor[p8]
Operation
Returns the room the actor currently occupies?
getActorScale ($3B)
Encoding
opcode result actor[p8]
Operation
Returns the actor's current scale.
Variants
In Indy3, this opcode is used for waitForActor.
getActorWalkBox ($7B)
Encoding
opcode result actor[p8]
Operation
Returns the actor's walkbox.
getActorWidth ($6C)
Encoding
opcode result actor[p8]
Operation
Returns the actor's width.
getActorX ($43)
Encoding
opcode result actor[p16]
Operation
Returns the actor's current X co-ordinate.
getActorY ($23)
Encoding
opcode result actor[p16]
Operation
Returns the actor's current Y co-ordinate.
getAnimCounter ($22)
This opcode is used for saveLoadGame in SCUMM V3.
Encoding
opcode result actor[p8]
Operation
Returns the actor's animation counter.
getClosestObjActor ($66)
Encoding
opcode result actor[p16]
Operation
Returns the object closest to the actor. Items that are more than 255 units (pixels in newer games, characters in older games) away from the actor will not be detected.
getDist ($34)
Encoding
opcode result objA[p16] objB[p16]
Operation
Returns the distance between two actors/objects (objA and objB).
getInventoryCount ($31)
Encoding
opcode result actor[p8]
Operation
Returns the number of items in an actor's inventory?
getObjectOwner ($10)
Encoding
opcode result actor[p16]
Operation
Returns the owner of an object.
getObjectState ($0F)
This opcode behaves differently in small header V5 games.
Encoding
opcode result object[p16]
Operation
Returns the state of the object.
Variants
In small header games, the encoding becomes: opcode object[p16] state[p8] target[16] operation becomes unless (getState(object) == state) goto target
getRandomNumber ($16)
Encoding
opcode result seed[p8]
Operation
Returns a new random number based on the given seed.
getScriptRunning ($68)
Encoding
opcode result script[p8]
Operation
Returns 1 if the given script is running, 0 if it's not.
getStringWidth ($67)
Encoding
opcode result strptr[p8]
Operation
Gets the length of the string pointed to by strptr (either a variable or direct byte), stores the returned value in result.
getVerbEntryPoint ($0B)
Encoding
opcode result object[p16] verb[p16]
Operation
Returns the entry point for the response code/script for when the given verb is applied to the given object?
ifClassOfIs ($1D)
jumps
Encoding
opcode value[p16] args[p16]...
Operation
unless (value.class is one of [args.class]) goto target
Compares the value's class with all classes given in args.
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
increment ($46)
no parameters, uses result
Encoding
opcode result
Operation
result := result + 1
Reads the variable pointed to by result, increments it, and writes it back.
isActorInBox ($1F)
Encoding
opcode actor[p8] box[p8] target[16]
Operation
If the actor's co-ordinates are not within the bounds of the given box, jump to target.
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
isEqual ($48)
Encoding
opcode var value[p16] target[16]
Operation
unless (value == var) goto target
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
isGreater ($78)
Encoding
opcode var value[p16] target[16]
Operation
unless (value > var) goto target
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
isGreaterEqual ($04)
Encoding
opcode var value[p16] target[16]
Operation
unless (value >= var) goto target
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
isLess ($44)
Encoding
opcode var value[p16] target[16]
Operation
unless (value < var) goto target
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
isNotEqual ($08)
Encoding
opcode var value[p16] target[16]
Operation
unless (value != var) goto target
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
isSoundRunning ($7C)
Encoding
opcode result sound[p8]
Operation
Returns 1 if sound is running, returns 0 if sound is not running given sound is 0.
jumpRelative ($18)
jumps
Encoding
opcode target[16]
Operation
PC := PC + target
The inline constant target is read as a signed word and added to the program counter after the instruction has been read. Therefore, if target is zero, the instruction will do nothing; if target is -3, an infinite loop will result.
lessOrEqual ($38)
jumps
Encoding
opcode var value[p16] target[16]
Operation
unless (value <= var) goto target
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
lights ($70)
loadRoom ($72)
loadRoomWithEgo ($24)
matrixOp ($30)
move ($1A)
Encoding
opcode result value[p16]
Operation
result := value
Value is moved into result.
multiply ($1B)
Encoding
opcode result value[p16]
Operation
result := result * value
The variable pointed to by result is read, multiplied by value, and written back.
notEqualZero ($A8)
Encoding
opcode var target[16]
Operation
unless (var != 0) goto target
Target is a byte offset (measured from after this instruction), which will be added to the instruction pointer.
or ($57)
one parameter, uses result
Encoding
opcode result value[p16]
Operation
result := result or value
The variable pointed to by result is read, logically ORed with value, and the result written back.
overRide ($58)
panCameraTo ($12)
pickupObject ($25)
print ($14)
printEgo ($D8)
pseudoRoom ($CC)
putActor ($01)
putActorAtObject ($0E)
putActorInRoom ($2D)
quitPauseRestart ($98)
resourceRoutines ($0C)
roomOp ($33)
saveRestoreVerbs ($AB)
setCameraAt ($32)
setObjectName ($54)
setOwnerOf ($29)
setState ($07)
setVarRange ($26)
non-standard encoding
Encoding
opcode result number[8] values[8]...
or
opcode result number[8] values[16]...
Operation
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.
soundKludge ($4C)
startMusic ($01)
startObject ($37)
startScript ($0A)
one parameter plus varargs, extra encoding in opcode
Encoding
opcode script[p8] args[v16]...
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.
The opcode carries extra information:
7 | 6 | 5 | 4 0 |
P1 | Q | F | $0A |
startSound ($1C)
stopMusic ($20)
stopObjectCode ($00)
stopObjectScript ($6E)
stopScript ($62)
stopSound ($3C)
subtract ($3A)
Encoding
opcode result value[p16]
Operation
result := result - value
The variable pointed to by result is read, value is subtracted from it, and the result written back.
animateActor ($11)
wait ($AE)
walkActorTo ($1E)
walkActorToActor ($0D)
walkActorToObject ($36)
Table of Parameters
This is a work in progress and is missing opcodes.
This table shows a summary of the opcodes and their parameters in a concise fashion. The information has been gleaned from the descumm source code, so some instruction names might not match those listed above.
Currently it is missing:
comparisons (lessThan, greaterThanEqual, equalZero etc) drawObject do_resource do_if_state_code (comparisons) do_print_ego do_varset_code do_unconditional_jump loadRoomWithEgo do_cursor_command doSentence do_expr_code do_load_code_to_string (sub-opcode of 0x27) do_actorops do_pseudoRoom(buf) do_room_ops(buf) do_verbops(buf, opcode) setVarRange do_matrix_ops(buf, opcode)
Some instructions listed here are actually sub-opcodes, i.e. "WaitForCamera" is actually the "Wait" opcode with a sub-opcode representing "For Camera".
Argument types:
- V = variable
- B = byte
- W = word
- L = list
- J = jump (used by almost all boolean expressions, comparisons)
- D = delay; 24-bit constant (only used by delay instruction, funnily enough)
- A = ASCII (0-terminated string?); used by "setObjectName"
- V|B or V|W = either a variable or a byte/word
- None, if it does not take that argument.
If an instruction returns a value, the result pointer follows immediately after the opcode and before any arguments.
Instruction | Returns a Value | Arg 1 | Arg 2 | Arg 3 |
---|---|---|---|---|
actorFollowCamera | False | V|B | None | None |
actorFromPos | True | V|W | V|W | None |
animateCostume | False | V|B | V|B | None |
beginOverride | False | None | None | None |
breakHere | False | None | None | None |
chainScript | False | V|B | L | None |
classOfIs | False | V|W | L | J |
CopyString | False | V|B | V|B | None |
CreateString | False | V|B | V|B | None |
cutscene | False | L | None | None |
debug? | False | V|W | None | None |
delay | False | D | None | None |
delayVariable | False | V | None | None |
deleteVerbs | False | V|B | V|B | V|B |
dummy | False | None | None | None |
endCutscene | False | None | None | None |
endOverride | False | None | None | None |
faceActor | False | V|B | V|W | None |
findInventory | True | V|B | V|B | None |
findObject | True | V|W | V|W | None |
freezeScripts | False | V|B | None | None |
getActorCostume | True | V|B | None | None |
getActorElevation | True | V|B | None | None |
getActorFacing | True | V|B | None | None |
getActorMoving | True | V|B | None | None |
getActorRoom | True | V|B | None | None |
getActorScale | True | V|B | None | None |
getActorWalkBox | True | V|B | None | None |
getActorWidth | True | V|B | None | None |
getActorX | True | V|W | None | None |
getActorY | True | V|W | None | None |
getClosestObjActor | True | V|W | None | None |
getDist | True | V|W | V|W | None |
getInventoryCount | True | V|B | None | None |
getObjectOwner | True | V|W | None | None |
getObjectState | True | V|W | None | None |
getRandomNr | True | V|B | None | None |
GetStringChar | True | V|B | V|B | None |
getStringWidth | True | V|B | None | None |
getVerbEntryPoint | True | V|W | V|W | None |
isActorInBox | False | V|B | V|B | J |
isScriptRunning | True | V|B | None | None |
isSoundRunning | True | V|B | None | None |
lights | False | V|B | B | B |
loadRoom | False | V|B | None | None |
oldRoomEffect-fadein | False | V|W | None | None |
oldRoomEffect-set | False | V|W | None | None |
panCameraTo | False | V|W | None | None |
pickupObject | False | V|W | V|B | None |
putActor | False | V|B | V|W | V|W |
putActorAtObject | False | V|B | V|W | None |
putActorInRoom | False | V|B | V|B | None |
restoreVerbs | False | V|B | V|B | V|B |
saveLoadGame | True | V|B | None | None |
saveVerbs | False | V|B | V|B | V|B |
setCameraAt | False | V|W | None | None |
setClass | False | V|W | L | None |
setObjectName | False | V|W | A | None |
setOwnerOf | False | V|W | V|B | None |
setState | False | V|W | V|B | None |
SetStringChar | False | V|B | V|B | V|B |
soundKludge | False | L | None | None |
startMusic | False | V|B | None | None |
startObject | False | V|W | V|B | L |
startScript | False | V|B | L | None |
startSound | False | V|B | None | None |
stopMusic | False | None | None | None |
stopObjectCode | False | None | None | None |
stopObjectScript | False | V|W | None | None |
stopScript | False | V|B | None | None |
stopSound | False | V|B | None | None |
systemOps | False | B | None | None |
WaitForActor | False | V|B | None | None |
WaitForCamera | False | None | None | None |
WaitForMessage | False | None | None | None |
WaitForSentence | False | None | None | None |
walkActorTo | False | V|B | V|W | V|W |
walkActorToActor | False | V|B | V|B | B |
walkActorToObject | False | V|B | V|W | None |