renamed some opcodes and added sobopcode comments

svn-id: r11232
This commit is contained in:
Paweł Kołodziejski 2003-11-09 22:12:16 +00:00
parent 357cfb8aea
commit a657b8e7ba
3 changed files with 195 additions and 196 deletions

View File

@ -392,14 +392,14 @@ protected:
void o6_wordVarDec();
void o6_byteArrayDec();
void o6_wordArrayDec();
void o6_jumpTrue();
void o6_jumpFalse();
void o6_if();
void o6_ifNot();
void o6_jump();
void o6_startScriptEx();
void o6_startScript();
void o6_startObjectEx();
void o6_setObjectState();
void o6_setObjectXY();
void o6_startScriptQuick();
void o6_startObject();
void o6_drawObject();
void o6_drawObjectAt();
void o6_stopObjectCode();
void o6_endCutscene();
void o6_cutscene();
@ -407,7 +407,7 @@ protected:
void o6_freezeUnfreeze();
void o6_cursorCommand();
void o6_breakHere();
void o6_ifClassOfIs();
void o6_getClass();
void o6_setClass();
void o6_getState();
void o6_setState();
@ -424,7 +424,7 @@ protected:
void o6_stopScript();
void o6_walkActorToObj();
void o6_walkActorTo();
void o6_putActorInRoom();
void o6_putActorAtXY();
void o6_putActorAtObject();
void o6_faceActor();
void o6_animateActor();
@ -486,8 +486,8 @@ protected:
void o6_dim();
void o6_dummy();
void o6_startObjectQuick();
void o6_startScriptQuick();
void o6_dim2();
void o6_startScriptQuick2();
void o6_dim2dim();
void o6_abs();
void o6_distObjectObject();
void o6_distObjectPt();
@ -579,7 +579,7 @@ protected:
void o8_wait();
void o8_dim();
void o8_dim2();
void o8_dim2dim();
void o8_arrayOps();
void o8_blastText();

View File

@ -162,14 +162,14 @@ void ScummEngine_v6::setupOpcodes() {
OPCODE(o6_byteArrayDec),
OPCODE(o6_wordArrayDec),
/* 5C */
OPCODE(o6_jumpTrue),
OPCODE(o6_jumpFalse),
OPCODE(o6_startScriptEx),
OPCODE(o6_if),
OPCODE(o6_ifNot),
OPCODE(o6_startScript),
OPCODE(o6_startScriptQuick),
/* 60 */
OPCODE(o6_startObjectEx),
OPCODE(o6_setObjectState),
OPCODE(o6_setObjectXY),
OPCODE(o6_startObject),
OPCODE(o6_drawObject),
OPCODE(o6_drawObjectAt),
OPCODE(o6_drawBlastObject),
/* 64 */
OPCODE(o6_setBlastObjectWindow),
@ -183,7 +183,7 @@ void ScummEngine_v6::setupOpcodes() {
OPCODE(o6_cursorCommand),
/* 6C */
OPCODE(o6_breakHere),
OPCODE(o6_ifClassOfIs),
OPCODE(o6_getClass),
OPCODE(o6_setClass),
OPCODE(o6_getState),
/* 70 */
@ -205,7 +205,7 @@ void ScummEngine_v6::setupOpcodes() {
OPCODE(o6_stopScript),
OPCODE(o6_walkActorToObj),
OPCODE(o6_walkActorTo),
OPCODE(o6_putActorInRoom),
OPCODE(o6_putActorAtXY),
/* 80 */
OPCODE(o6_putActorAtObject),
OPCODE(o6_faceActor),
@ -285,9 +285,9 @@ void ScummEngine_v6::setupOpcodes() {
OPCODE(o6_dim),
OPCODE(o6_dummy),
OPCODE(o6_startObjectQuick),
OPCODE(o6_startScriptQuick),
OPCODE(o6_startScriptQuick2),
/* C0 */
OPCODE(o6_dim2),
OPCODE(o6_dim2dim),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
OPCODE(o6_invalid),
@ -666,14 +666,14 @@ void ScummEngine_v6::o6_wordArrayDec() {
writeArray(var, 0, base, readArray(var, 0, base) - 1);
}
void ScummEngine_v6::o6_jumpTrue() {
void ScummEngine_v6::o6_if() {
if (pop())
o6_jump();
else
fetchScriptWord();
}
void ScummEngine_v6::o6_jumpFalse() {
void ScummEngine_v6::o6_ifNot() {
if (!pop())
o6_jump();
else
@ -684,7 +684,7 @@ void ScummEngine_v6::o6_jump() {
_scriptPointer += fetchScriptWordSigned();
}
void ScummEngine_v6::o6_startScriptEx() {
void ScummEngine_v6::o6_startScript() {
int args[16];
int script, flags;
@ -705,7 +705,7 @@ void ScummEngine_v6::o6_jumpToScript() {
runScript(script, (flags & 1) != 0, (flags & 2) != 0, args);
}
void ScummEngine_v6::o6_startScript() {
void ScummEngine_v6::o6_startScriptQuick() {
int args[16];
int script;
getStackList(args, ARRAYSIZE(args));
@ -713,7 +713,7 @@ void ScummEngine_v6::o6_startScript() {
runScript(script, 0, 0, args);
}
void ScummEngine_v6::o6_startScriptQuick() {
void ScummEngine_v6::o6_startScriptQuick2() {
int args[16];
int script;
getStackList(args, ARRAYSIZE(args));
@ -721,7 +721,7 @@ void ScummEngine_v6::o6_startScriptQuick() {
runScript(script, 0, 1, args);
}
void ScummEngine_v6::o6_startObjectEx() {
void ScummEngine_v6::o6_startObject() {
int args[16];
int script, entryp;
int flags;
@ -741,21 +741,20 @@ void ScummEngine_v6::o6_startObjectQuick() {
runObjectScript(script, entryp, 0, 1, args);
}
void ScummEngine_v6::o6_setObjectState() {
void ScummEngine_v6::o6_drawObject() {
int a = pop();
int b = pop();
if (a == 0)
a = 1;
// debug(1, "setObjectState(%d,%d)", a, b);
setObjectState(b, a, -1, -1);
}
void ScummEngine_v6::o6_setObjectXY() {
void ScummEngine_v6::o6_drawObjectAt() {
int y = pop();
int x = pop();
int obj = pop();
// debug(1, "setObjectXY(%d,%d,%d)", obj, x, y);
setObjectState(obj, 1, x, y);
}
@ -779,6 +778,7 @@ void ScummEngine_v6::o6_stopMusic() {
void ScummEngine_v6::o6_freezeUnfreeze() {
int a = pop();
if (a)
freezeScripts(a);
else
@ -788,40 +788,40 @@ void ScummEngine_v6::o6_freezeUnfreeze() {
void ScummEngine_v6::o6_cursorCommand() {
int a, i;
int args[16];
int op = fetchScriptByte();
int subOp = fetchScriptByte();
switch (op) {
case 0x90:
switch (subOp) {
case 0x90: // SO_CURSOR_ON Turn cursor on
_cursor.state = 1;
verbMouseOver(0);
break;
case 0x91:
case 0x91: // SO_CURSOR_OFF Turn cursor off
_cursor.state = 0;
verbMouseOver(0);
break;
case 0x92:
case 0x92: // SO_USERPUT_ON
_userPut = 1;
break;
case 0x93:
case 0x93: // SO_USERPUT_OFF
_userPut = 0;
break;
case 0x94:
case 0x94: // SO_CURSOR_SOFT_ON Turn soft cursor on
_cursor.state++;
if (_cursor.state > 1)
error("Cursor state greater than 1 in script");
verbMouseOver(0);
break;
case 0x95:
case 0x95: // SO_CURSOR_SOFT_OFF Turn soft cursor off
_cursor.state--;
verbMouseOver(0);
break;
case 0x96:
case 0x96: // SO_USERPUT_SOFT_ON
_userPut++;
break;
case 0x97:
case 0x97: // SO_USERPUT_SOFT_OFF
_userPut--;
break;
case 0x99:{
case 0x99:{ // SO_CURSOR_IMAGE Set cursor image
if (_features & GF_AFTER_HEV7) {
warning("cursorCommand 0x99 PC_SetCursorToID(%d) stub", pop());
break;
@ -830,23 +830,23 @@ void ScummEngine_v6::o6_cursorCommand() {
setCursorImg(obj, room, 1);
break;
}
case 0x9A:
case 0x9A: // SO_CURSOR_HOTSPOT Set cursor hotspot
a = pop();
setCursorHotspot(pop(), a);
break;
case 0x9C: /* init charset */
case 0x9C: // SO_CHARSET_SET
initCharset(pop());
break;
case 0x9D: /* set charset colors */
case 0x9D: // SO_CHARSET_COLOR
getStackList(args, ARRAYSIZE(args));
for (i = 0; i < 16; i++)
_charsetColorMap[i] = _charsetData[_string[1].t_charset][i] = (unsigned char)args[i];
break;
case 0xD6:
case 0xD6: // SO_CURSOR_TRANSPARENT Set cursor transparent color
makeCursorColorTransparent(pop());
break;
default:
error("o6_cursorCommand: default case %x", op);
error("o6_cursorCommand: default case %x", subOp);
}
VAR(VAR_CURSORSTATE) = _cursor.state;
@ -858,7 +858,7 @@ void ScummEngine_v6::o6_breakHere() {
_currentScript = 0xFF;
}
void ScummEngine_v6::o6_ifClassOfIs() {
void ScummEngine_v6::o6_getClass() {
int args[16];
int num, obj, cls;
bool b;
@ -907,7 +907,6 @@ void ScummEngine_v6::o6_setState() {
putState(obj, state);
return;
}
// debug(1, "setState(%d,%d)", obj, state);
putState(obj, state);
removeObjectFromRoom(obj);
@ -1043,7 +1042,7 @@ void ScummEngine_v6::o6_walkActorTo() {
a->startWalkActor(x, y, -1);
}
void ScummEngine_v6::o6_putActorInRoom() {
void ScummEngine_v6::o6_putActorAtXY() {
int room, x, y, act;
Actor *a;
@ -1051,7 +1050,7 @@ void ScummEngine_v6::o6_putActorInRoom() {
y = pop();
x = pop();
act = pop();
a = derefActor(act, "o6_putActorInRoom");
a = derefActor(act, "o6_putActorAtXY");
if (room == 0xFF || room == 0x7FFFFFFF) {
room = a->room;
@ -1380,26 +1379,26 @@ void ScummEngine_v6::o6_resourceRoutines() {
op = fetchScriptByte();
switch (op) {
case 100: /* load script */
case 100: // SO_LOAD_SCRIPT
resid = pop();
if (_version >= 7)
if (resid >= _numGlobalScripts)
break;
ensureResourceLoaded(rtScript, resid);
break;
case 101: /* load sound */
case 101: // SO_LOAD_SOUND
resid = pop();
ensureResourceLoaded(rtSound, resid);
break;
case 102: /* load costume */
case 102: // SO_LOAD_COSTUME
resid = pop();
ensureResourceLoaded(rtCostume, resid);
break;
case 103: /* load room */
case 103: // SO_LOAD_ROOM
resid = pop();
ensureResourceLoaded(rtRoom, resid);
break;
case 104: /* nuke script */
case 104: // SO_NUKE_SCRIPT
resid = pop();
if (_version >= 7)
if (resid >= _numGlobalScripts)
@ -1407,71 +1406,71 @@ void ScummEngine_v6::o6_resourceRoutines() {
setResourceCounter(rtScript, resid, 0x7F);
debug(5, "nuke script %d", resid);
break;
case 105: /* nuke sound */
case 105: // SO_NUKE_SOUND
resid = pop();
setResourceCounter(rtSound, resid, 0x7F);
break;
case 106: /* nuke costume */
case 106: // SO_NUKE_COSTUME
resid = pop();
setResourceCounter(rtCostume, resid, 0x7F);
break;
case 107: /* nuke room */
case 107: // SO_NUKE_ROOM
resid = pop();
setResourceCounter(rtRoom, resid, 0x7F);
break;
case 108: /* lock script */
case 108: // SO_LOCK_SCRIPT
resid = pop();
if (resid >= _numGlobalScripts)
break;
lock(rtScript, resid);
break;
case 109: /* lock sound */
case 109: // SO_LOCK_SOUND
resid = pop();
lock(rtSound, resid);
break;
case 110: /* lock costume */
case 110: // SO_LOCK_COSTUME
resid = pop();
lock(rtCostume, resid);
break;
case 111: /* lock room */
case 111: // SO_LOCK_ROOM
resid = pop();
if (resid > 0x7F)
resid = _resourceMapper[resid & 0x7F];
lock(rtRoom, resid);
break;
case 112: /* unlock script */
case 112: // SO_UNLOCK_SCRIPT
resid = pop();
if (resid >= _numGlobalScripts)
break;
unlock(rtScript, resid);
break;
case 113: /* unlock sound */
case 113: // SO_UNLOCK_SOUND
resid = pop();
unlock(rtSound, resid);
break;
case 114: /* unlock costume */
case 114: // SO_UNLOCK_COSTUME
resid = pop();
unlock(rtCostume, resid);
break;
case 115: /* unlock room */
case 115: // SO_UNLOCK_ROOM
resid = pop();
if (resid > 0x7F)
resid = _resourceMapper[resid & 0x7F];
unlock(rtRoom, resid);
break;
case 116: /* clear heap */
case 116: // SO_CLEAR_HEAP
/* this is actually a scumm message */
error("clear heap not working yet");
break;
case 117: /* load charset */
case 117: // SO_LOAD_CHARSET
resid = pop();
loadCharset(resid);
break;
case 118: /* nuke charset */
case 118: // SO_NUKE_CHARSET
resid = pop();
nukeCharset(resid);
break;
case 119:{ /* load fl object */
case 119:{ // SO_LOAD_OBJECT
int room, obj = popRoomAndObj(&room);
loadFlObject(obj, room);
break;
@ -1495,7 +1494,7 @@ void ScummEngine_v6::o6_roomOps() {
op = fetchScriptByte();
switch (op) {
case 172: /* room scroll */
case 172: // SO_ROOM_SCROLL
b = pop();
a = pop();
if (a < (_screenWidth / 2))
@ -1510,13 +1509,13 @@ void ScummEngine_v6::o6_roomOps() {
VAR(VAR_CAMERA_MAX_X) = b;
break;
case 174: /* set screen */
case 174: // SO_ROOM_SCREEN
b = pop();
a = pop();
initScreens(0, a, _screenWidth, b);
break;
case 175: /* set palette color */
case 175: // SO_ROOM_PALETTE
d = pop();
c = pop();
b = pop();
@ -1524,29 +1523,29 @@ void ScummEngine_v6::o6_roomOps() {
setPalColor(d, a, b, c);
break;
case 176: /* shake on */
case 176: // SO_ROOM_SHAKE_ON
setShake(1);
break;
case 177: /* shake off */
case 177: // SO_ROOM_SHAKE_OFF
setShake(0);
break;
case 179:
case 179: // SO_ROOM_INTENSITY
c = pop();
b = pop();
a = pop();
darkenPalette(a, a, a, b, c);
break;
case 180:
case 180: // SO_ROOM_SAVEGAME
_saveLoadCompatible = true;
_saveLoadSlot = pop();
_saveLoadFlag = pop();
warning("o6_roomops:180: partially unimplemented");
break;
case 181:
case 181: // SO_ROOM_FADE
a = pop();
if (a) {
_switchRoomEffect = (byte)(a&0xFF);
@ -1556,7 +1555,7 @@ void ScummEngine_v6::o6_roomOps() {
}
break;
case 182:
case 182: // SO_RGB_ROOM_INTENSITY
e = pop();
d = pop();
c = pop();
@ -1565,7 +1564,7 @@ void ScummEngine_v6::o6_roomOps() {
darkenPalette(a, b, c, d, e);
break;
case 183:
case 183: // SO_ROOM_SHADOW
e = pop();
d = pop();
c = pop();
@ -1574,15 +1573,15 @@ void ScummEngine_v6::o6_roomOps() {
setupShadowPalette(a, b, c, d, e);
break;
case 184:
case 184: // SO_SAVE_STRING
error("save string not implemented");
break;
case 185:
case 185: // SO_LOAD_STRING
error("load string not implemented");
break;
case 186: /* palmanip? */
case 186: // SO_ROOM_TRANSFORM
d = pop();
c = pop();
b = pop();
@ -1590,14 +1589,14 @@ void ScummEngine_v6::o6_roomOps() {
palManipulateInit(a, b, c, d);
break;
case 187: /* color cycle delay */
case 187: // SO_CYCLE_SPEED
b = pop();
a = pop();
checkRange(16, 1, a, "o6_roomOps: 187: color cycle out of range (%d)");
_colorCycle[a - 1].delay = (b != 0) ? 0x4000 / (b * 0x4C) : 0;
break;
case 213: /* set palette */
case 213: // SO_ROOM_NEW_PALETTE
a = pop();
// This opcode is used when turning off noir mode in Sam & Max,
@ -1634,83 +1633,83 @@ void ScummEngine_v6::o6_actorOps() {
return;
switch (b) {
case 76: /* actor-costume */
case 76: // SO_COSTUME
a->setActorCostume(pop());
break;
case 77: /* actor-speed */
case 77: // SO_STEP_DIST
j = pop();
i = pop();
a->setActorWalkSpeed(i, j);
break;
case 78: /* actor-sound */
case 78: // SO_SOUND
k = getStackList(args, ARRAYSIZE(args));
for (i = 0; i < k; i++)
a->sound[i] = args[i];
break;
case 79: /* actor-walkframe */
case 79: // SO_WALK_ANIMATION
a->walkFrame = pop();
break;
case 80: /* actor-talkframe */
case 80: // SO_TALK_ANIMATION
a->talkStopFrame = pop();
a->talkStartFrame = pop();
break;
case 81: /* actor-standframe */
case 81: // SO_STAND_ANIMATION
a->standFrame = pop();
break;
case 82:
case 82: // SO_ANIMATION
// FIXME: what does this opcode do ???
pop();
pop();
pop();
break;
case 83:
case 83: // SO_DEFAULT
a->initActor(0);
break;
case 84: /* actor-elevation */
case 84: // SO_ELEVATION
i = pop();
if (i != a->elevation) {
a->elevation = i;
a->needRedraw = true;
}
break;
case 85: /* actor-defaultanims */
case 85: // SO_ANIMATION_DEFAULT
a->initFrame = 1;
a->walkFrame = 2;
a->standFrame = 3;
a->talkStartFrame = 4;
a->talkStopFrame = 5;
break;
case 86: /* actor-palette */
case 86: // SO_PALETTE
j = pop();
i = pop();
checkRange(255, 0, i, "Illegal palette slot %d");
a->palette[i] = j;
a->needRedraw = true;
break;
case 87: /* actor-talkcolor */
case 87: // SO_TALK_COLOR
a->talkColor = pop();
break;
case 88: /* actor-name */
case 88: // SO_ACTOR_NAME
loadPtrToResource(rtActorName, a->number, NULL);
break;
case 89: /* actor-initframe */
case 89: // SO_INIT_ANIMATION
a->initFrame = pop();
break;
case 91:
case 91: // SO_ACTOR_WIDTH
a->width = pop();
break;
case 92:
case 92: // SO_SCALE
a->scalex = a->scaley = pop();
a->needRedraw = true;
break;
case 93:
case 93: // SO_NEVER_ZCLIP
a->forceClip = 0;
break;
case 225: // FIXME: Is subop 225 really identical to subop 94
case 94:
case 225: // FIXME: Is subop 225 really identical to subop 94
case 94: // SO_ALWAYS_ZCLIP
a->forceClip = pop();
break;
case 95:
case 95: // SO_IGNORE_BOXES
a->ignoreBoxes = 1;
if (_version >= 7)
a->forceClip = 100;
@ -1719,7 +1718,7 @@ void ScummEngine_v6::o6_actorOps() {
if (a->isInCurrentRoom())
a->putActor(a->_pos.x, a->_pos.y, a->room);
break;
case 96:
case 96: // SO_FOLLOW_BOXES
a->ignoreBoxes = 0;
if (_version >= 7)
a->forceClip = 100;
@ -1728,31 +1727,31 @@ void ScummEngine_v6::o6_actorOps() {
if (a->isInCurrentRoom())
a->putActor(a->_pos.x, a->_pos.y, a->room);
break;
case 97:
case 97: // SO_ANIMATION_SPEED
a->setAnimSpeed(pop());
break;
case 98:
case 98: // SO_SHADOW
a->shadow_mode = pop();
break;
case 99:
case 99: // SO_TEXT_OFFSET
a->talkPosY = pop();
a->talkPosX = pop();
break;
case 198: /* set anim variable */
i = pop(); /* value */
case 198: // SO_ACTOR_VARIABLE
i = pop();
a->setAnimVar(pop(), i);
break;
case 215:
case 215: // SO_ACTOR_IGNORE_TURNS_ON
warning("ignoreTurns not yet implemented");
a->ignoreTurns = true;
break;
case 216:
case 216: // SO_ACTOR_IGNORE_TURNS_OFF
a->ignoreTurns = false;
break;
case 217:
case 217: // SO_ACTOR_NEW
a->initActor(2);
break;
case 218:
case 218:
{
// TODO: this opcode is used in the putt-putt fun pack, in 'checkers" mini game
warning("o6_actorOps(): unimplemented opcode 218");
@ -1775,13 +1774,13 @@ void ScummEngine_v6::o6_actorOps() {
}
}
break;
case 227: /* actor_layer */
case 227: // SO_ACTOR_DEPTH
a->layer = pop();
break;
case 228: /* walk script */
case 228: // SO_ACTOR_WALK_SCRIPT
a->walkScript = pop();
break;
case 229: /* stand */
case 229: // SO_ACTOR_STOP
a->stopActorMoving();
break;
case 230: /* set direction */
@ -1791,13 +1790,13 @@ void ScummEngine_v6::o6_actorOps() {
case 231: /* turn to direction */
a->turnToDirection(pop());
break;
case 233: /* freeze actor */
case 233: // SO_ACTOR_WALK_PAUSE
a->moving |= MF_FROZEN;
break;
case 234: /* unfreeze actor */
case 234: // SO_ACTOR_WALK_RESUME
a->moving &= ~MF_FROZEN;
break;
case 235: /* talkScript */
case 235: // SO_ACTOR_TALK_SCRIPT
a->talkScript = pop();
break;
default:
@ -1826,42 +1825,42 @@ void ScummEngine_v6::o6_verbOps() {
vs = &_verbs[_curVerbSlot];
slot = _curVerbSlot;
switch (op) {
case 124: /* load img */
case 124: // SO_VERB_IMAGE
a = pop();
if (_curVerbSlot) {
setVerbObject(_roomResource, a, slot);
vs->type = kImageVerbType;
}
break;
case 125:
case 125: // SO_VERB_NAME
loadPtrToResource(rtVerb, slot, NULL);
vs->type = kTextVerbType;
vs->imgindex = 0;
break;
case 126:
case 126: // SO_VERB_COLOR
vs->color = pop();
break;
case 127:
case 127: // SO_VERB_HICOLOR
vs->hicolor = pop();
break;
case 128:
case 128: // SO_VERB_AT
vs->y = pop();
vs->x = pop();
break;
case 129:
case 129: // SO_VERB_ON
vs->curmode = 1;
break;
case 130:
case 130: // SO_VERB_OFF
vs->curmode = 0;
break;
case 131:
case 131: // SO_VERB_DELETE
if (_features & GF_HUMONGOUS) {
// delete verb supposedly...
pop();
}
killVerb(slot);
break;
case 132:
case 132: // SO_VERB_NEW
slot = getVerbSlot(_curVerb, 0);
if (slot == 0) {
for (slot = 1; slot < _maxVerbs; slot++) {
@ -1885,19 +1884,19 @@ void ScummEngine_v6::o6_verbOps() {
vs->center = 0;
vs->imgindex = 0;
break;
case 133:
case 133: // SO_VERB_DIMCOLOR
vs->dimcolor = pop();
break;
case 134:
case 134: // SO_VERB_DIM
vs->curmode = 2;
break;
case 135:
case 135: // SO_VERB_KEY
vs->key = pop();
break;
case 136:
case 136: // SO_VERB_CENTER
vs->center = 1;
break;
case 137:
case 137: // SO_VERB_NAME_STR
a = pop();
if (a == 0) {
loadPtrToResource(rtVerb, slot, (const byte *)"");
@ -1907,7 +1906,7 @@ void ScummEngine_v6::o6_verbOps() {
vs->type = kTextVerbType;
vs->imgindex = 0;
break;
case 139:
case 139: // SO_VERB_IMAGE_IN_ROOM
b = pop();
a = pop();
if (slot && a != vs->imgindex) {
@ -1916,7 +1915,7 @@ void ScummEngine_v6::o6_verbOps() {
vs->imgindex = a;
}
break;
case 140:
case 140: // SO_VERB_BAKCOLOR
vs->bkcolor = pop();
break;
case 255:
@ -1969,14 +1968,14 @@ void ScummEngine_v6::o6_arrayOps() {
int list[128];
switch (subOp) {
case 205:
case 205: // SO_ASSIGN_STRING
b = pop();
len = resStrLen(_scriptPointer);
c = defineArray(array, 4, 0, len + 1);
ah = (ArrayHeader *)getResourceAddress(rtString, c);
copyScriptString(ah->data + b);
break;
case 208:
case 208: // SO_ASSIGN_INT_LIST
b = pop();
c = pop();
d = readVar(array);
@ -1987,7 +1986,7 @@ void ScummEngine_v6::o6_arrayOps() {
writeArray(array, 0, b + c, pop());
}
break;
case 212:
case 212: // SO_ASSIGN_2DIM_LIST
b = pop();
len = getStackList(list, ARRAYSIZE(list));
d = readVar(array);
@ -2017,7 +2016,7 @@ void ScummEngine_v6::o6_saveRestoreVerbs() {
}
switch (subOp) {
case 141:
case 141: // SO_SAVE_VERBS
while (a <= b) {
slot = getVerbSlot(a, 0);
if (slot && _verbs[slot].saveid == 0) {
@ -2028,7 +2027,7 @@ void ScummEngine_v6::o6_saveRestoreVerbs() {
a++;
}
break;
case 142:
case 142: // SO_RESTORE_VERBS
while (a <= b) {
slot = getVerbSlot(a, c);
if (slot) {
@ -2043,7 +2042,7 @@ void ScummEngine_v6::o6_saveRestoreVerbs() {
a++;
}
break;
case 143:
case 143: // SO_DELETE_VERBS
while (a <= b) {
slot = getVerbSlot(a, c);
if (slot)
@ -2073,18 +2072,18 @@ void ScummEngine_v6::o6_wait() {
byte subOp = fetchScriptByte();
switch (subOp) {
case 168:
case 168: // SO_WAIT_FOR_ACTOR Wait for actor
offs = fetchScriptWordSigned();
actnum = pop();
a = derefActor(actnum, "o6_wait:168");
if (a->isInCurrentRoom() && a->moving)
break;
return;
case 169:
case 169: // SO_WAIT_FOR_MESSAGE Wait for message
if (VAR(VAR_HAVE_MSG))
break;
return;
case 170:
case 170: // SO_WAIT_FOR_CAMERA Wait for camera
if (_version >= 7) {
if (camera._dest != camera._cur)
break;
@ -2094,7 +2093,7 @@ void ScummEngine_v6::o6_wait() {
}
return;
case 171:
case 171: // SO_WAIT_FOR_SENTENCE
if (_sentenceNum) {
if (_sentence[_sentenceNum - 1].freezeCount && !isScriptInUse(VAR(VAR_SENTENCE_SCRIPT)))
return;
@ -2103,14 +2102,14 @@ void ScummEngine_v6::o6_wait() {
if (!isScriptInUse(VAR(VAR_SENTENCE_SCRIPT)))
return;
break;
case 226: /* wait until actor drawn */
case 226: // SO_WAIT_FOR_ANIMATION
offs = fetchScriptWordSigned();
actnum = pop();
a = derefActor(actnum, "o6_wait:226");
if (a->isInCurrentRoom() && a->needRedraw)
break;
return;
case 232: /* wait until actor stops turning */
case 232: // SO_WAIT_FOR_TURN
// FIXME: This opcode is really odd. It's used a lot in The Dig.
// But sometimes it receives the actor ID as params, and sometimes an
// angle. However in (almost?) all cases, just before calling it, _curActor
@ -2166,13 +2165,13 @@ void ScummEngine_v6::o6_isAnyOf() {
void ScummEngine_v6::o6_quitPauseRestart() {
byte subOp = fetchScriptByte();
switch (subOp) {
case 158: // Restart
case 158: // SO_RESTART
restart();
break;
case 159: // Pause
case 159: // SO_PAUSE
pauseGame();
break;
case 160: // Quit
case 160: // SO_QUIT
shutDown();
break;
default:
@ -2264,22 +2263,22 @@ void ScummEngine_v6::o6_dim() {
int data;
switch (fetchScriptByte()) {
case 199:
case 199: // SO_INT_ARRAY
data = 5;
break;
case 200:
case 200: // SO_BIT_ARRAY
data = 1;
break;
case 201:
case 201: // SO_NIBBLE_ARRAY
data = 2;
break;
case 202:
case 202: // SO_BYTE_ARRAY
data = 3;
break;
case 203:
case 203: // SO_STRING_ARRAY
data = 4;
break;
case 204:
case 204: // SO_UNDIM_ARRAY
nukeArray(fetchScriptWord());
return;
default:
@ -2295,26 +2294,26 @@ void ScummEngine_v6::o6_dummy() {
stopObjectCode();
}
void ScummEngine_v6::o6_dim2() {
void ScummEngine_v6::o6_dim2dim() {
int a, b, data;
switch (fetchScriptByte()) {
case 199:
case 199: // SO_INT_ARRAY
data = 5;
break;
case 200:
case 200: // SO_BIT_ARRAY
data = 1;
break;
case 201:
case 201: // SO_NIBBLE_ARRAY
data = 2;
break;
case 202:
case 202: // SO_BYTE_ARRAY
data = 3;
break;
case 203:
case 203: // SO_STRING_ARRAY
data = 4;
break;
default:
error("o6_dim2: default case");
error("o6_dim2dim: default case");
}
b = pop();
@ -3188,36 +3187,36 @@ void ScummEngine_v6::decodeParseString(int m, int n) {
b = fetchScriptByte();
switch (b) {
case 65:
case 65: // SO_AT
_string[m].ypos = pop();
_string[m].xpos = pop();
_string[m].overhead = false;
break;
case 66:
case 66: // SO_COLOR
_string[m].color = pop();
break;
case 67:
case 67: // SO_CLIPPED
_string[m].right = pop();
break;
case 69:
case 69: // SO_CENTER
_string[m].center = true;
_string[m].overhead = false;
break;
case 71:
case 71: // SO_LEFT
_string[m].center = false;
_string[m].overhead = false;
break;
case 72:
case 72: // SO_OVERHEAD
_string[m].overhead = true;
_string[m].no_talk_anim = false;
break;
case 73:
case 73: // SO_SAY_VOICE
error("decodeParseString: case 73");
break;
case 74:
case 74: // SO_MUMBLE
_string[m].no_talk_anim = true;
break;
case 75:
case 75: // SO_TEXTSTRING
_messagePtr = translateTextAndPlaySpeech(_scriptPointer);
_scriptPointer += resStrLen(_scriptPointer)+ 1;

View File

@ -165,8 +165,8 @@ void ScummEngine_v8::setupOpcodes() {
OPCODE(o6_invalid),
OPCODE(o6_invalid),
/* 64 */
OPCODE(o6_jumpTrue),
OPCODE(o6_jumpFalse),
OPCODE(o6_if),
OPCODE(o6_ifNot),
OPCODE(o6_jump),
OPCODE(o6_breakHere),
/* 68 */
@ -185,20 +185,20 @@ void ScummEngine_v8::setupOpcodes() {
OPCODE(o6_wordArrayInc),
OPCODE(o6_wordArrayDec),
/* 74 */
OPCODE(o8_dim2),
OPCODE(o8_dim2dim),
OPCODE(o6_wordArrayIndexedWrite),
OPCODE(o8_arrayOps),
OPCODE(o6_invalid),
/* 78 */
OPCODE(o6_invalid),
OPCODE(o6_startScriptEx),
OPCODE(o6_startScript),
OPCODE(o6_startScriptQuick),
OPCODE(o6_stopObjectCode),
/* 7C */
OPCODE(o6_stopScript),
OPCODE(o6_jumpToScript),
OPCODE(o6_dummy), // O_RETURN boils down to a NOP
OPCODE(o6_startObjectEx),
OPCODE(o6_startObject),
/* 80 */
OPCODE(o6_stopObjectScript),
OPCODE(o6_cutscene),
@ -241,7 +241,7 @@ void ScummEngine_v8::setupOpcodes() {
OPCODE(o6_walkActorToObj),
/* A0 */
OPCODE(o6_walkActorTo),
OPCODE(o6_putActorInRoom),
OPCODE(o6_putActorAtXY),
OPCODE(o6_putActorAtObject),
OPCODE(o6_faceActor),
/* A4 */
@ -290,7 +290,7 @@ void ScummEngine_v8::setupOpcodes() {
OPCODE(o6_invalid),
OPCODE(o6_invalid),
/* C8 */
OPCODE(o6_startScriptQuick), // FIXME: are these really the "quick" (=recursive) variants,
OPCODE(o6_startScriptQuick2), // FIXME: are these really the "quick" (=recursive) variants,
OPCODE(o6_startObjectQuick), // or aren't these maybe supposed to be the "plain" versions, too?
OPCODE(o6_pickOneOf),
OPCODE(o6_pickOneOfDefault),
@ -300,7 +300,7 @@ void ScummEngine_v8::setupOpcodes() {
OPCODE(o6_getRandomNumber),
OPCODE(o6_getRandomNumberRange),
/* D0 */
OPCODE(o6_ifClassOfIs),
OPCODE(o6_getClass),
OPCODE(o6_getState),
OPCODE(o6_getOwner),
OPCODE(o6_isScriptRunning),
@ -458,12 +458,12 @@ void ScummEngine_v8::decodeParseString(int m, int n) {
b = fetchScriptByte();
switch (b) {
case 0xC8:
case 0xC8: // SO_PRINT_BASEOP
setStringVars(m);
if (n)
_actorToPrintStrFor = pop();
break;
case 0xC9:
case 0xC9: // SO_PRINT_END
_string[m].t_xpos = _string[m].xpos;
_string[m].t_ypos = _string[m].ypos;
_string[m].t_center = _string[m].center;
@ -473,33 +473,33 @@ void ScummEngine_v8::decodeParseString(int m, int n) {
_string[m].t_color = _string[m].color;
_string[m].t_charset = _string[m].charset;
break;
case 0xCA:
case 0xCA: // SO_PRINT_AT
_string[m].ypos = pop();
_string[m].xpos = pop();
_string[m].overhead = false;
break;
case 0xCB:
case 0xCB: // SO_PRINT_COLOR
_string[m].color = pop();
break;
case 0xCC:
case 0xCC: // SO_PRINT_CENTER
_string[m].center = true;
_string[m].overhead = false;
break;
case 0xCD: // SO_PRINT_CHARSET Set print character set
_string[m].charset = pop();
break;
case 0xCE:
case 0xCE: // SO_PRINT_LEFT
_string[m].center = false;
_string[m].overhead = false;
break;
case 0xCF:
case 0xCF: // SO_PRINT_OVERHEAD
_string[m].overhead = true;
_string[m].no_talk_anim = false;
break;
case 0xD0: // SO_PRINT_MUMBLE
_string[m].no_talk_anim = true;
break;
case 0xD1:
case 0xD1: // SO_PRINT_STRING
_messagePtr = translateTextAndPlaySpeech(_scriptPointer);
_scriptPointer += resStrLen(_scriptPointer)+ 1;
@ -610,7 +610,7 @@ void ScummEngine_v8::o8_dim() {
}
}
void ScummEngine_v8::o8_dim2() {
void ScummEngine_v8::o8_dim2dim() {
byte subOp = fetchScriptByte();
int array = fetchScriptWord(), a, b;
@ -629,7 +629,7 @@ void ScummEngine_v8::o8_dim2() {
nukeArray(array);
break;
default:
error("o8_dim2: default case 0x%x", subOp);
error("o8_dim2dim: default case 0x%x", subOp);
}
}
@ -732,7 +732,7 @@ void ScummEngine_v8::o8_cursorCommand() {
case 0xE6: // SO_CURSOR_TRANSPARENT Set cursor transparent color
makeCursorColorTransparent(pop());
break;
case 0xE7: { // SO_CHARSET_SET
case 0xE7: { // SO_CHARSET_SET
int charset = pop();
warning("Set userface charset to %d", charset);
// loadCharset(charset);
@ -991,10 +991,10 @@ void ScummEngine_v8::o8_actorOps() {
a->scalex = a->scaley = pop();
a->needRedraw = true;
break;
case 0x74: // SO_ACTOR_NEVER_ZCLIP ?
case 0x74: // SO_ACTOR_NEVER_ZCLIP
a->forceClip = 0;
break;
case 0x75: // SO_ACTOR_ALWAYS_ZCLIP ?
case 0x75: // SO_ACTOR_ALWAYS_ZCLIP
a->forceClip = pop();
// V8 uses 255 where we used to use 100
if (a->forceClip == 255)