SCUMM: Compacted various setupOpcodes() implementations by using the fact that opcode tables tend not to change much between most SCUMM versions

svn-id: r39958
This commit is contained in:
Max Horn 2009-04-16 09:27:22 +00:00
parent 99df028d35
commit cbe9e520d3
7 changed files with 32 additions and 1370 deletions

View File

@ -66,235 +66,31 @@ static int virtScreenSavePack(byte *dst, byte *src, int len, int unk);
#define OPCODE(i, x) _opcodes[i]._OPCODE(ScummEngine_v60he, x)
void ScummEngine_v60he::setupOpcodes() {
/* 00 */
OPCODE(0x00, o6_pushByte);
OPCODE(0x01, o6_pushWord);
OPCODE(0x02, o6_pushByteVar);
OPCODE(0x03, o6_pushWordVar);
/* 04 */
OPCODE(0x06, o6_byteArrayRead);
OPCODE(0x07, o6_wordArrayRead);
/* 08 */
OPCODE(0x0a, o6_byteArrayIndexedRead);
OPCODE(0x0b, o6_wordArrayIndexedRead);
/* 0C */
OPCODE(0x0c, o6_dup);
OPCODE(0x0d, o6_not);
OPCODE(0x0e, o6_eq);
OPCODE(0x0f, o6_neq);
/* 10 */
OPCODE(0x10, o6_gt);
OPCODE(0x11, o6_lt);
OPCODE(0x12, o6_le);
OPCODE(0x13, o6_ge);
/* 14 */
OPCODE(0x14, o6_add);
OPCODE(0x15, o6_sub);
OPCODE(0x16, o6_mul);
OPCODE(0x17, o6_div);
/* 18 */
OPCODE(0x18, o6_land);
OPCODE(0x19, o6_lor);
OPCODE(0x1a, o6_pop);
/* 1C */
/* 20 */
/* 24 */
/* 28 */
/* 2C */
/* 30 */
/* 34 */
/* 38 */
/* 3C */
/* 40 */
OPCODE(0x42, o6_writeByteVar);
OPCODE(0x43, o6_writeWordVar);
/* 44 */
OPCODE(0x46, o6_byteArrayWrite);
OPCODE(0x47, o6_wordArrayWrite);
/* 48 */
OPCODE(0x4a, o6_byteArrayIndexedWrite);
OPCODE(0x4b, o6_wordArrayIndexedWrite);
/* 4C */
OPCODE(0x4e, o6_byteVarInc);
OPCODE(0x4f, o6_wordVarInc);
/* 50 */
OPCODE(0x52, o6_byteArrayInc);
OPCODE(0x53, o6_wordArrayInc);
/* 54 */
OPCODE(0x56, o6_byteVarDec);
OPCODE(0x57, o6_wordVarDec);
/* 58 */
OPCODE(0x5a, o6_byteArrayDec);
OPCODE(0x5b, o6_wordArrayDec);
/* 5C */
OPCODE(0x5c, o6_if);
OPCODE(0x5d, o6_ifNot);
OPCODE(0x5e, o6_startScript);
OPCODE(0x5f, o6_startScriptQuick);
/* 60 */
OPCODE(0x60, o6_startObject);
OPCODE(0x61, o6_drawObject);
OPCODE(0x62, o6_drawObjectAt);
/* 64 */
OPCODE(0x65, o6_stopObjectCode);
OPCODE(0x66, o6_stopObjectCode);
OPCODE(0x67, o6_endCutscene);
/* 68 */
OPCODE(0x68, o6_cutscene);
OPCODE(0x69, o6_stopMusic);
OPCODE(0x6a, o6_freezeUnfreeze);
OPCODE(0x6b, o6_cursorCommand);
/* 6C */
OPCODE(0x6c, o6_breakHere);
OPCODE(0x6d, o6_ifClassOfIs);
OPCODE(0x6e, o6_setClass);
OPCODE(0x6f, o6_getState);
/* 70 */
ScummEngine_v6::setupOpcodes();
_opcodes[0x63].setProc(0, 0);
_opcodes[0x64].setProc(0, 0);
OPCODE(0x70, o60_setState);
OPCODE(0x71, o6_setOwner);
OPCODE(0x72, o6_getOwner);
OPCODE(0x73, o6_jump);
/* 74 */
OPCODE(0x74, o6_startSound);
OPCODE(0x75, o6_stopSound);
OPCODE(0x76, o6_startMusic);
OPCODE(0x77, o6_stopObjectScript);
/* 78 */
OPCODE(0x78, o6_panCameraTo);
OPCODE(0x79, o6_actorFollowCamera);
OPCODE(0x7a, o6_setCameraAt);
OPCODE(0x7b, o6_loadRoom);
/* 7C */
OPCODE(0x7c, o6_stopScript);
OPCODE(0x7d, o6_walkActorToObj);
OPCODE(0x7e, o6_walkActorTo);
OPCODE(0x7f, o6_putActorAtXY);
/* 80 */
OPCODE(0x80, o6_putActorAtObject);
OPCODE(0x81, o6_faceActor);
OPCODE(0x82, o6_animateActor);
OPCODE(0x83, o6_doSentence);
/* 84 */
OPCODE(0x84, o6_pickupObject);
OPCODE(0x85, o6_loadRoomWithEgo);
OPCODE(0x87, o6_getRandomNumber);
/* 88 */
OPCODE(0x88, o6_getRandomNumberRange);
OPCODE(0x8a, o6_getActorMoving);
OPCODE(0x8b, o6_isScriptRunning);
/* 8C */
OPCODE(0x8c, o6_getActorRoom);
OPCODE(0x8d, o6_getObjectX);
OPCODE(0x8e, o6_getObjectY);
OPCODE(0x8f, o6_getObjectOldDir);
/* 90 */
OPCODE(0x90, o6_getActorWalkBox);
OPCODE(0x91, o6_getActorCostume);
OPCODE(0x92, o6_findInventory);
OPCODE(0x93, o6_getInventoryCount);
/* 94 */
OPCODE(0x94, o6_getVerbFromXY);
OPCODE(0x95, o6_beginOverride);
OPCODE(0x96, o6_endOverride);
OPCODE(0x97, o6_setObjectName);
/* 98 */
OPCODE(0x98, o6_isSoundRunning);
OPCODE(0x99, o6_setBoxFlags);
OPCODE(0x9b, o6_resourceRoutines);
/* 9C */
_opcodes[0x9a].setProc(0, 0);
OPCODE(0x9c, o60_roomOps);
OPCODE(0x9d, o60_actorOps);
OPCODE(0x9e, o6_verbOps);
OPCODE(0x9f, o6_getActorFromXY);
/* A0 */
OPCODE(0xa0, o6_findObject);
OPCODE(0xa1, o6_pseudoRoom);
OPCODE(0xa2, o6_getActorElevation);
OPCODE(0xa3, o6_getVerbEntrypoint);
/* A4 */
OPCODE(0xa4, o6_arrayOps);
OPCODE(0xa5, o6_saveRestoreVerbs);
OPCODE(0xa6, o6_drawBox);
OPCODE(0xa7, o6_pop);
/* A8 */
OPCODE(0xa8, o6_getActorWidth);
OPCODE(0xa9, o6_wait);
OPCODE(0xaa, o6_getActorScaleX);
OPCODE(0xab, o6_getActorAnimCounter);
/* AC */
OPCODE(0xad, o6_isAnyOf);
OPCODE(0xae, o6_systemOps);
OPCODE(0xaf, o6_isActorInBox);
/* B0 */
OPCODE(0xb0, o6_delay);
OPCODE(0xb1, o6_delaySeconds);
OPCODE(0xb2, o6_delayMinutes);
OPCODE(0xb3, o6_stopSentence);
/* B4 */
OPCODE(0xb4, o6_printLine);
OPCODE(0xb5, o6_printText);
OPCODE(0xb6, o6_printDebug);
OPCODE(0xb7, o6_printSystem);
/* B8 */
OPCODE(0xb8, o6_printActor);
OPCODE(0xb9, o6_printEgo);
OPCODE(0xba, o6_talkActor);
OPCODE(0xbb, o6_talkEgo);
/* BC */
OPCODE(0xbc, o6_dimArray);
_opcodes[0xac].setProc(0, 0);
OPCODE(0xbd, o6_stopObjectCode);
OPCODE(0xbe, o6_startObjectQuick);
OPCODE(0xbf, o6_startScriptQuick2);
/* C0 */
OPCODE(0xc0, o6_dim2dimArray);
/* C4 */
OPCODE(0xc4, o6_abs);
OPCODE(0xc5, o6_distObjectObject);
OPCODE(0xc6, o6_distObjectPt);
OPCODE(0xc7, o6_distPtPt);
/* C8 */
OPCODE(0xc8, o60_kernelGetFunctions);
OPCODE(0xc9, o60_kernelSetFunctions);
OPCODE(0xca, o6_delayFrames);
OPCODE(0xcb, o6_pickOneOf);
/* CC */
OPCODE(0xcc, o6_pickOneOfDefault);
OPCODE(0xcd, o6_stampObject);
/* D0 */
OPCODE(0xd0, o6_getDateTime);
OPCODE(0xd1, o6_stopTalking);
OPCODE(0xd2, o6_getAnimateVariable);
/* D4 */
OPCODE(0xd4, o6_shuffle);
OPCODE(0xd5, o6_jumpToScript);
OPCODE(0xd6, o6_band);
OPCODE(0xd7, o6_bor);
/* D8 */
OPCODE(0xd8, o6_isRoomScriptRunning);
OPCODE(0xd9, o60_closeFile);
OPCODE(0xda, o60_openFile);
OPCODE(0xdb, o60_readFile);
/* DC */
OPCODE(0xdc, o60_writeFile);
OPCODE(0xdd, o6_findAllObjects);
OPCODE(0xde, o60_deleteFile);
OPCODE(0xdf, o60_rename);
/* E0 */
OPCODE(0xe0, o60_soundOps);
OPCODE(0xe1, o6_getPixel);
OPCODE(0xe2, o60_localizeArrayToScript);
OPCODE(0xe3, o6_pickVarRandom);
/* E4 */
OPCODE(0xe4, o6_setBoxSet);
/* E8 */
OPCODE(0xe9, o60_seekFilePos);
OPCODE(0xea, o60_redimArray);
OPCODE(0xeb, o60_readFilePos);
/* EC */
/* F0 */
/* F4 */
/* F8 */
/* FC */
_opcodes[0xec].setProc(0, 0);
_opcodes[0xed].setProc(0, 0);
}
int ScummEngine_v60he::convertFilePath(byte *dst) {

View File

@ -41,241 +41,19 @@ namespace Scumm {
#define OPCODE(i, x) _opcodes[i]._OPCODE(ScummEngine_v70he, x)
void ScummEngine_v70he::setupOpcodes() {
/* 00 */
OPCODE(0x00, o6_pushByte);
OPCODE(0x01, o6_pushWord);
OPCODE(0x02, o6_pushByteVar);
OPCODE(0x03, o6_pushWordVar);
/* 04 */
OPCODE(0x06, o6_byteArrayRead);
OPCODE(0x07, o6_wordArrayRead);
/* 08 */
OPCODE(0x0a, o6_byteArrayIndexedRead);
OPCODE(0x0b, o6_wordArrayIndexedRead);
/* 0C */
OPCODE(0x0c, o6_dup);
OPCODE(0x0d, o6_not);
OPCODE(0x0e, o6_eq);
OPCODE(0x0f, o6_neq);
/* 10 */
OPCODE(0x10, o6_gt);
OPCODE(0x11, o6_lt);
OPCODE(0x12, o6_le);
OPCODE(0x13, o6_ge);
/* 14 */
OPCODE(0x14, o6_add);
OPCODE(0x15, o6_sub);
OPCODE(0x16, o6_mul);
OPCODE(0x17, o6_div);
/* 18 */
OPCODE(0x18, o6_land);
OPCODE(0x19, o6_lor);
OPCODE(0x1a, o6_pop);
/* 1C */
/* 20 */
/* 24 */
/* 28 */
/* 2C */
/* 30 */
/* 34 */
/* 38 */
/* 3C */
/* 40 */
OPCODE(0x42, o6_writeByteVar);
OPCODE(0x43, o6_writeWordVar);
/* 44 */
OPCODE(0x46, o6_byteArrayWrite);
OPCODE(0x47, o6_wordArrayWrite);
/* 48 */
OPCODE(0x4a, o6_byteArrayIndexedWrite);
OPCODE(0x4b, o6_wordArrayIndexedWrite);
/* 4C */
OPCODE(0x4e, o6_byteVarInc);
OPCODE(0x4f, o6_wordVarInc);
/* 50 */
OPCODE(0x52, o6_byteArrayInc);
OPCODE(0x53, o6_wordArrayInc);
/* 54 */
OPCODE(0x56, o6_byteVarDec);
OPCODE(0x57, o6_wordVarDec);
/* 58 */
OPCODE(0x5a, o6_byteArrayDec);
OPCODE(0x5b, o6_wordArrayDec);
/* 5C */
OPCODE(0x5c, o6_if);
OPCODE(0x5d, o6_ifNot);
OPCODE(0x5e, o6_startScript);
OPCODE(0x5f, o6_startScriptQuick);
/* 60 */
OPCODE(0x60, o6_startObject);
OPCODE(0x61, o6_drawObject);
OPCODE(0x62, o6_drawObjectAt);
/* 64 */
OPCODE(0x65, o6_stopObjectCode);
OPCODE(0x66, o6_stopObjectCode);
OPCODE(0x67, o6_endCutscene);
/* 68 */
OPCODE(0x68, o6_cutscene);
OPCODE(0x69, o6_stopMusic);
OPCODE(0x6a, o6_freezeUnfreeze);
OPCODE(0x6b, o6_cursorCommand);
/* 6C */
OPCODE(0x6c, o6_breakHere);
OPCODE(0x6d, o6_ifClassOfIs);
OPCODE(0x6e, o6_setClass);
OPCODE(0x6f, o6_getState);
/* 70 */
OPCODE(0x70, o60_setState);
OPCODE(0x71, o6_setOwner);
OPCODE(0x72, o6_getOwner);
OPCODE(0x73, o6_jump);
/* 74 */
ScummEngine_v60he::setupOpcodes();
OPCODE(0x74, o70_startSound);
OPCODE(0x75, o6_stopSound);
OPCODE(0x76, o6_startMusic);
OPCODE(0x77, o6_stopObjectScript);
/* 78 */
OPCODE(0x78, o6_panCameraTo);
OPCODE(0x79, o6_actorFollowCamera);
OPCODE(0x7a, o6_setCameraAt);
OPCODE(0x7b, o6_loadRoom);
/* 7C */
OPCODE(0x7c, o6_stopScript);
OPCODE(0x7d, o6_walkActorToObj);
OPCODE(0x7e, o6_walkActorTo);
OPCODE(0x7f, o6_putActorAtXY);
/* 80 */
OPCODE(0x80, o6_putActorAtObject);
OPCODE(0x81, o6_faceActor);
OPCODE(0x82, o6_animateActor);
OPCODE(0x83, o6_doSentence);
/* 84 */
OPCODE(0x84, o70_pickupObject);
OPCODE(0x85, o6_loadRoomWithEgo);
OPCODE(0x87, o6_getRandomNumber);
/* 88 */
OPCODE(0x88, o6_getRandomNumberRange);
OPCODE(0x8a, o6_getActorMoving);
OPCODE(0x8b, o6_isScriptRunning);
/* 8C */
OPCODE(0x8c, o70_getActorRoom);
OPCODE(0x8d, o6_getObjectX);
OPCODE(0x8e, o6_getObjectY);
OPCODE(0x8f, o6_getObjectOldDir);
/* 90 */
OPCODE(0x90, o6_getActorWalkBox);
OPCODE(0x91, o6_getActorCostume);
OPCODE(0x92, o6_findInventory);
OPCODE(0x93, o6_getInventoryCount);
/* 94 */
OPCODE(0x94, o6_getVerbFromXY);
OPCODE(0x95, o6_beginOverride);
OPCODE(0x96, o6_endOverride);
OPCODE(0x97, o6_setObjectName);
/* 98 */
OPCODE(0x98, o6_isSoundRunning);
OPCODE(0x99, o6_setBoxFlags);
OPCODE(0x9b, o70_resourceRoutines);
/* 9C */
OPCODE(0x9c, o60_roomOps);
OPCODE(0x9d, o60_actorOps);
OPCODE(0x9e, o6_verbOps);
OPCODE(0x9f, o6_getActorFromXY);
/* A0 */
OPCODE(0xa0, o6_findObject);
OPCODE(0xa1, o6_pseudoRoom);
OPCODE(0xa2, o6_getActorElevation);
OPCODE(0xa3, o6_getVerbEntrypoint);
/* A4 */
OPCODE(0xa4, o6_arrayOps);
OPCODE(0xa5, o6_saveRestoreVerbs);
OPCODE(0xa6, o6_drawBox);
OPCODE(0xa7, o6_pop);
/* A8 */
OPCODE(0xa8, o6_getActorWidth);
OPCODE(0xa9, o6_wait);
OPCODE(0xaa, o6_getActorScaleX);
OPCODE(0xab, o6_getActorAnimCounter);
/* AC */
OPCODE(0xad, o6_isAnyOf);
OPCODE(0xae, o70_systemOps);
OPCODE(0xaf, o6_isActorInBox);
/* B0 */
OPCODE(0xb0, o6_delay);
OPCODE(0xb1, o6_delaySeconds);
OPCODE(0xb2, o6_delayMinutes);
OPCODE(0xb3, o6_stopSentence);
/* B4 */
OPCODE(0xb4, o6_printLine);
OPCODE(0xb5, o6_printText);
OPCODE(0xb6, o6_printDebug);
OPCODE(0xb7, o6_printSystem);
/* B8 */
OPCODE(0xb8, o6_printActor);
OPCODE(0xb9, o6_printEgo);
OPCODE(0xba, o6_talkActor);
OPCODE(0xbb, o6_talkEgo);
/* BC */
OPCODE(0xbc, o6_dimArray);
OPCODE(0xbd, o6_stopObjectCode);
OPCODE(0xbe, o6_startObjectQuick);
OPCODE(0xbf, o6_startScriptQuick2);
/* C0 */
OPCODE(0xc0, o6_dim2dimArray);
/* C4 */
OPCODE(0xc4, o6_abs);
OPCODE(0xc5, o6_distObjectObject);
OPCODE(0xc6, o6_distObjectPt);
OPCODE(0xc7, o6_distPtPt);
/* C8 */
OPCODE(0xc8, o60_kernelGetFunctions);
OPCODE(0xc9, o60_kernelSetFunctions);
OPCODE(0xca, o6_delayFrames);
OPCODE(0xcb, o6_pickOneOf);
/* CC */
OPCODE(0xcc, o6_pickOneOfDefault);
OPCODE(0xcd, o6_stampObject);
/* D0 */
OPCODE(0xd0, o6_getDateTime);
OPCODE(0xd1, o6_stopTalking);
OPCODE(0xd2, o6_getAnimateVariable);
/* D4 */
OPCODE(0xd4, o6_shuffle);
OPCODE(0xd5, o6_jumpToScript);
OPCODE(0xd6, o6_band);
OPCODE(0xd7, o6_bor);
/* D8 */
OPCODE(0xd8, o6_isRoomScriptRunning);
OPCODE(0xd9, o60_closeFile);
OPCODE(0xda, o60_openFile);
OPCODE(0xdb, o60_readFile);
/* DC */
OPCODE(0xdc, o60_writeFile);
OPCODE(0xdd, o6_findAllObjects);
OPCODE(0xde, o60_deleteFile);
OPCODE(0xdf, o60_rename);
/* E0 */
OPCODE(0xe0, o60_soundOps);
OPCODE(0xe1, o6_getPixel);
OPCODE(0xe2, o60_localizeArrayToScript);
OPCODE(0xe3, o6_pickVarRandom);
/* E4 */
OPCODE(0xe4, o6_setBoxSet);
/* E8 */
OPCODE(0xe9, o60_seekFilePos);
OPCODE(0xea, o60_redimArray);
OPCODE(0xeb, o60_readFilePos);
/* EC */
OPCODE(0xee, o70_getStringLen);
/* F0 */
OPCODE(0xf2, o70_isResourceLoaded);
OPCODE(0xf3, o70_readINI);
/* F4 */
OPCODE(0xf4, o70_writeINI);
/* F8 */
OPCODE(0xf9, o70_createDirectory);
OPCODE(0xfa, o70_setSystemMessage);
/* FC */
}
void ScummEngine_v70he::o70_startSound() {

View File

@ -33,250 +33,18 @@ namespace Scumm {
#define OPCODE(i, x) _opcodes[i]._OPCODE(ScummEngine_v71he, x)
void ScummEngine_v71he::setupOpcodes() {
/* 00 */
OPCODE(0x00, o6_pushByte);
OPCODE(0x01, o6_pushWord);
OPCODE(0x02, o6_pushByteVar);
OPCODE(0x03, o6_pushWordVar);
/* 04 */
OPCODE(0x06, o6_byteArrayRead);
OPCODE(0x07, o6_wordArrayRead);
/* 08 */
OPCODE(0x0a, o6_byteArrayIndexedRead);
OPCODE(0x0b, o6_wordArrayIndexedRead);
/* 0C */
OPCODE(0x0c, o6_dup);
OPCODE(0x0d, o6_not);
OPCODE(0x0e, o6_eq);
OPCODE(0x0f, o6_neq);
/* 10 */
OPCODE(0x10, o6_gt);
OPCODE(0x11, o6_lt);
OPCODE(0x12, o6_le);
OPCODE(0x13, o6_ge);
/* 14 */
OPCODE(0x14, o6_add);
OPCODE(0x15, o6_sub);
OPCODE(0x16, o6_mul);
OPCODE(0x17, o6_div);
/* 18 */
OPCODE(0x18, o6_land);
OPCODE(0x19, o6_lor);
OPCODE(0x1a, o6_pop);
/* 1C */
/* 20 */
/* 24 */
/* 28 */
/* 2C */
/* 30 */
/* 34 */
/* 38 */
/* 3C */
/* 40 */
OPCODE(0x42, o6_writeByteVar);
OPCODE(0x43, o6_writeWordVar);
/* 44 */
OPCODE(0x46, o6_byteArrayWrite);
OPCODE(0x47, o6_wordArrayWrite);
/* 48 */
OPCODE(0x4a, o6_byteArrayIndexedWrite);
OPCODE(0x4b, o6_wordArrayIndexedWrite);
/* 4C */
OPCODE(0x4e, o6_byteVarInc);
OPCODE(0x4f, o6_wordVarInc);
/* 50 */
OPCODE(0x52, o6_byteArrayInc);
OPCODE(0x53, o6_wordArrayInc);
/* 54 */
OPCODE(0x56, o6_byteVarDec);
OPCODE(0x57, o6_wordVarDec);
/* 58 */
OPCODE(0x5a, o6_byteArrayDec);
OPCODE(0x5b, o6_wordArrayDec);
/* 5C */
OPCODE(0x5c, o6_if);
OPCODE(0x5d, o6_ifNot);
OPCODE(0x5e, o6_startScript);
OPCODE(0x5f, o6_startScriptQuick);
/* 60 */
OPCODE(0x60, o6_startObject);
OPCODE(0x61, o6_drawObject);
OPCODE(0x62, o6_drawObjectAt);
/* 64 */
OPCODE(0x65, o6_stopObjectCode);
OPCODE(0x66, o6_stopObjectCode);
OPCODE(0x67, o6_endCutscene);
/* 68 */
OPCODE(0x68, o6_cutscene);
OPCODE(0x69, o6_stopMusic);
OPCODE(0x6a, o6_freezeUnfreeze);
OPCODE(0x6b, o6_cursorCommand);
/* 6C */
OPCODE(0x6c, o6_breakHere);
OPCODE(0x6d, o6_ifClassOfIs);
OPCODE(0x6e, o6_setClass);
OPCODE(0x6f, o6_getState);
/* 70 */
OPCODE(0x70, o60_setState);
OPCODE(0x71, o6_setOwner);
OPCODE(0x72, o6_getOwner);
OPCODE(0x73, o6_jump);
/* 74 */
OPCODE(0x74, o70_startSound);
OPCODE(0x75, o6_stopSound);
OPCODE(0x76, o6_startMusic);
OPCODE(0x77, o6_stopObjectScript);
/* 78 */
OPCODE(0x78, o6_panCameraTo);
OPCODE(0x79, o6_actorFollowCamera);
OPCODE(0x7a, o6_setCameraAt);
OPCODE(0x7b, o6_loadRoom);
/* 7C */
OPCODE(0x7c, o6_stopScript);
OPCODE(0x7d, o6_walkActorToObj);
OPCODE(0x7e, o6_walkActorTo);
OPCODE(0x7f, o6_putActorAtXY);
/* 80 */
OPCODE(0x80, o6_putActorAtObject);
OPCODE(0x81, o6_faceActor);
OPCODE(0x82, o6_animateActor);
OPCODE(0x83, o6_doSentence);
/* 84 */
OPCODE(0x84, o70_pickupObject);
OPCODE(0x85, o6_loadRoomWithEgo);
OPCODE(0x87, o6_getRandomNumber);
/* 88 */
OPCODE(0x88, o6_getRandomNumberRange);
OPCODE(0x8a, o6_getActorMoving);
OPCODE(0x8b, o6_isScriptRunning);
/* 8C */
OPCODE(0x8c, o70_getActorRoom);
OPCODE(0x8d, o6_getObjectX);
OPCODE(0x8e, o6_getObjectY);
OPCODE(0x8f, o6_getObjectOldDir);
/* 90 */
OPCODE(0x90, o6_getActorWalkBox);
OPCODE(0x91, o6_getActorCostume);
OPCODE(0x92, o6_findInventory);
OPCODE(0x93, o6_getInventoryCount);
/* 94 */
OPCODE(0x94, o6_getVerbFromXY);
OPCODE(0x95, o6_beginOverride);
OPCODE(0x96, o6_endOverride);
OPCODE(0x97, o6_setObjectName);
/* 98 */
OPCODE(0x98, o6_isSoundRunning);
OPCODE(0x99, o6_setBoxFlags);
OPCODE(0x9b, o70_resourceRoutines);
/* 9C */
OPCODE(0x9c, o60_roomOps);
OPCODE(0x9d, o60_actorOps);
OPCODE(0x9e, o6_verbOps);
OPCODE(0x9f, o6_getActorFromXY);
/* A0 */
OPCODE(0xa0, o6_findObject);
OPCODE(0xa1, o6_pseudoRoom);
OPCODE(0xa2, o6_getActorElevation);
OPCODE(0xa3, o6_getVerbEntrypoint);
/* A4 */
OPCODE(0xa4, o6_arrayOps);
OPCODE(0xa5, o6_saveRestoreVerbs);
OPCODE(0xa6, o6_drawBox);
OPCODE(0xa7, o6_pop);
/* A8 */
OPCODE(0xa8, o6_getActorWidth);
OPCODE(0xa9, o6_wait);
OPCODE(0xaa, o6_getActorScaleX);
OPCODE(0xab, o6_getActorAnimCounter);
/* AC */
OPCODE(0xad, o6_isAnyOf);
OPCODE(0xae, o70_systemOps);
OPCODE(0xaf, o6_isActorInBox);
/* B0 */
OPCODE(0xb0, o6_delay);
OPCODE(0xb1, o6_delaySeconds);
OPCODE(0xb2, o6_delayMinutes);
OPCODE(0xb3, o6_stopSentence);
/* B4 */
OPCODE(0xb4, o6_printLine);
OPCODE(0xb5, o6_printText);
OPCODE(0xb6, o6_printDebug);
OPCODE(0xb7, o6_printSystem);
/* B8 */
OPCODE(0xb8, o6_printActor);
OPCODE(0xb9, o6_printEgo);
OPCODE(0xba, o6_talkActor);
OPCODE(0xbb, o6_talkEgo);
/* BC */
OPCODE(0xbc, o6_dimArray);
OPCODE(0xbd, o6_stopObjectCode);
OPCODE(0xbe, o6_startObjectQuick);
OPCODE(0xbf, o6_startScriptQuick2);
/* C0 */
OPCODE(0xc0, o6_dim2dimArray);
/* C4 */
OPCODE(0xc4, o6_abs);
OPCODE(0xc5, o6_distObjectObject);
OPCODE(0xc6, o6_distObjectPt);
OPCODE(0xc7, o6_distPtPt);
/* C8 */
OPCODE(0xc8, o60_kernelGetFunctions);
ScummEngine_v70he::setupOpcodes();
OPCODE(0xc9, o71_kernelSetFunctions);
OPCODE(0xca, o6_delayFrames);
OPCODE(0xcb, o6_pickOneOf);
/* CC */
OPCODE(0xcc, o6_pickOneOfDefault);
OPCODE(0xcd, o6_stampObject);
/* D0 */
OPCODE(0xd0, o6_getDateTime);
OPCODE(0xd1, o6_stopTalking);
OPCODE(0xd2, o6_getAnimateVariable);
/* D4 */
OPCODE(0xd4, o6_shuffle);
OPCODE(0xd5, o6_jumpToScript);
OPCODE(0xd6, o6_band);
OPCODE(0xd7, o6_bor);
/* D8 */
OPCODE(0xd8, o6_isRoomScriptRunning);
OPCODE(0xd9, o60_closeFile);
OPCODE(0xda, o60_openFile);
OPCODE(0xdb, o60_readFile);
/* DC */
OPCODE(0xdc, o60_writeFile);
OPCODE(0xdd, o6_findAllObjects);
OPCODE(0xde, o60_deleteFile);
OPCODE(0xdf, o60_rename);
/* E0 */
OPCODE(0xe0, o60_soundOps);
OPCODE(0xe1, o6_getPixel);
OPCODE(0xe2, o60_localizeArrayToScript);
OPCODE(0xe3, o6_pickVarRandom);
/* E4 */
OPCODE(0xe4, o6_setBoxSet);
/* E8 */
OPCODE(0xe9, o60_seekFilePos);
OPCODE(0xea, o60_redimArray);
OPCODE(0xeb, o60_readFilePos);
/* EC */
OPCODE(0xec, o71_copyString);
OPCODE(0xed, o71_getStringWidth);
OPCODE(0xee, o70_getStringLen);
OPCODE(0xef, o71_appendString);
/* F0 */
OPCODE(0xf0, o71_concatString);
OPCODE(0xf1, o71_compareString);
OPCODE(0xf2, o70_isResourceLoaded);
OPCODE(0xf3, o70_readINI);
/* F4 */
OPCODE(0xf4, o70_writeINI);
OPCODE(0xf5, o71_getStringLenForWidth);
OPCODE(0xf6, o71_getCharIndexInString);
OPCODE(0xf7, o71_findBox);
/* F8 */
OPCODE(0xf9, o70_createDirectory);
OPCODE(0xfa, o70_setSystemMessage);
OPCODE(0xfb, o71_polygonOps);
/* FC */
OPCODE(0xfc, o71_polygonHit);
}

View File

@ -45,257 +45,60 @@ namespace Scumm {
#define OPCODE(i, x) _opcodes[i]._OPCODE(ScummEngine_v72he, x)
void ScummEngine_v72he::setupOpcodes() {
/* 00 */
OPCODE(0x00, o6_pushByte);
OPCODE(0x01, o6_pushWord);
ScummEngine_v71he::setupOpcodes();
OPCODE(0x02, o72_pushDWord);
OPCODE(0x03, o6_pushWordVar);
/* 04 */
OPCODE(0x04, o72_getScriptString);
OPCODE(0x07, o6_wordArrayRead);
/* 08 */
OPCODE(0x0b, o6_wordArrayIndexedRead);
/* 0C */
OPCODE(0x0c, o6_dup);
OPCODE(0x0d, o6_not);
OPCODE(0x0e, o6_eq);
OPCODE(0x0f, o6_neq);
/* 10 */
OPCODE(0x10, o6_gt);
OPCODE(0x11, o6_lt);
OPCODE(0x12, o6_le);
OPCODE(0x13, o6_ge);
/* 14 */
OPCODE(0x14, o6_add);
OPCODE(0x15, o6_sub);
OPCODE(0x16, o6_mul);
OPCODE(0x17, o6_div);
/* 18 */
OPCODE(0x18, o6_land);
OPCODE(0x19, o6_lor);
OPCODE(0x1a, o6_pop);
_opcodes[0x0a].setProc(0, 0);
OPCODE(0x1b, o72_isAnyOf);
/* 1C */
/* 20 */
/* 24 */
/* 28 */
/* 2C */
/* 30 */
/* 34 */
/* 38 */
/* 3C */
/* 40 */
OPCODE(0x43, o6_writeWordVar);
/* 44 */
OPCODE(0x47, o6_wordArrayWrite);
/* 48 */
OPCODE(0x4b, o6_wordArrayIndexedWrite);
/* 4C */
OPCODE(0x4f, o6_wordVarInc);
/* 50 */
_opcodes[0x42].setProc(0, 0);
_opcodes[0x46].setProc(0, 0);
_opcodes[0x4a].setProc(0, 0);
_opcodes[0x4e].setProc(0, 0);
OPCODE(0x50, o72_resetCutscene);
OPCODE(0x52, o72_findObjectWithClassOf);
OPCODE(0x53, o6_wordArrayInc);
/* 54 */
OPCODE(0x54, o72_getObjectImageX);
OPCODE(0x55, o72_getObjectImageY);
OPCODE(0x56, o72_captureWizImage);
OPCODE(0x57, o6_wordVarDec);
/* 58 */
OPCODE(0x58, o72_getTimer);
OPCODE(0x59, o72_setTimer);
OPCODE(0x5a, o72_getSoundPosition);
OPCODE(0x5b, o6_wordArrayDec);
/* 5C */
OPCODE(0x5c, o6_if);
OPCODE(0x5d, o6_ifNot);
OPCODE(0x5e, o72_startScript);
OPCODE(0x5f, o6_startScriptQuick);
/* 60 */
OPCODE(0x60, o72_startObject);
OPCODE(0x61, o72_drawObject);
OPCODE(0x62, o72_printWizImage);
OPCODE(0x63, o72_getArrayDimSize);
/* 64 */
OPCODE(0x64, o72_getNumFreeArrays);
OPCODE(0x65, o6_stopObjectCode);
OPCODE(0x66, o6_stopObjectCode);
OPCODE(0x67, o6_endCutscene);
/* 68 */
OPCODE(0x68, o6_cutscene);
OPCODE(0x69, o6_stopMusic);
OPCODE(0x6a, o6_freezeUnfreeze);
OPCODE(0x6b, o6_cursorCommand);
/* 6C */
OPCODE(0x6c, o6_breakHere);
OPCODE(0x6d, o6_ifClassOfIs);
OPCODE(0x6e, o6_setClass);
OPCODE(0x6f, o6_getState);
/* 70 */
OPCODE(0x70, o60_setState);
OPCODE(0x71, o6_setOwner);
OPCODE(0x72, o6_getOwner);
OPCODE(0x73, o6_jump);
/* 74 */
OPCODE(0x74, o70_startSound);
OPCODE(0x75, o6_stopSound);
OPCODE(0x76, o6_startMusic);
OPCODE(0x77, o6_stopObjectScript);
/* 78 */
OPCODE(0x78, o6_panCameraTo);
OPCODE(0x79, o6_actorFollowCamera);
OPCODE(0x7a, o6_setCameraAt);
OPCODE(0x7b, o6_loadRoom);
/* 7C */
OPCODE(0x7c, o6_stopScript);
OPCODE(0x7d, o6_walkActorToObj);
OPCODE(0x7e, o6_walkActorTo);
OPCODE(0x7f, o6_putActorAtXY);
/* 80 */
OPCODE(0x80, o6_putActorAtObject);
OPCODE(0x81, o6_faceActor);
OPCODE(0x82, o6_animateActor);
OPCODE(0x83, o6_doSentence);
/* 84 */
OPCODE(0x84, o70_pickupObject);
OPCODE(0x85, o6_loadRoomWithEgo);
OPCODE(0x87, o6_getRandomNumber);
/* 88 */
OPCODE(0x88, o6_getRandomNumberRange);
OPCODE(0x8a, o6_getActorMoving);
OPCODE(0x8b, o6_isScriptRunning);
/* 8C */
OPCODE(0x8c, o70_getActorRoom);
OPCODE(0x8d, o6_getObjectX);
OPCODE(0x8e, o6_getObjectY);
OPCODE(0x8f, o6_getObjectOldDir);
/* 90 */
OPCODE(0x90, o6_getActorWalkBox);
OPCODE(0x91, o6_getActorCostume);
OPCODE(0x92, o6_findInventory);
OPCODE(0x93, o6_getInventoryCount);
/* 94 */
OPCODE(0x94, o6_getVerbFromXY);
OPCODE(0x95, o6_beginOverride);
OPCODE(0x96, o6_endOverride);
/* 98 */
OPCODE(0x98, o6_isSoundRunning);
OPCODE(0x99, o6_setBoxFlags);
OPCODE(0x9b, o70_resourceRoutines);
/* 9C */
_opcodes[0x97].setProc(0, 0); // was: o6_setObjectName
OPCODE(0x9c, o72_roomOps);
OPCODE(0x9d, o72_actorOps);
OPCODE(0x9e, o72_verbOps);
OPCODE(0x9f, o6_getActorFromXY);
/* A0 */
OPCODE(0xa0, o72_findObject);
OPCODE(0xa1, o6_pseudoRoom);
OPCODE(0xa2, o6_getActorElevation);
OPCODE(0xa3, o6_getVerbEntrypoint);
/* A4 */
OPCODE(0xa4, o72_arrayOps);
OPCODE(0xa5, o6_saveRestoreVerbs);
OPCODE(0xa6, o6_drawBox);
OPCODE(0xa7, o6_pop);
/* A8 */
OPCODE(0xa8, o6_getActorWidth);
OPCODE(0xa9, o6_wait);
OPCODE(0xaa, o6_getActorScaleX);
OPCODE(0xab, o6_getActorAnimCounter);
/* AC */
OPCODE(0xad, o6_isAnyOf);
OPCODE(0xae, o72_systemOps);
OPCODE(0xaf, o6_isActorInBox);
/* B0 */
OPCODE(0xb0, o6_delay);
OPCODE(0xb1, o6_delaySeconds);
OPCODE(0xb2, o6_delayMinutes);
OPCODE(0xb3, o6_stopSentence);
/* B4 */
OPCODE(0xb4, o6_printLine);
OPCODE(0xb5, o6_printText);
OPCODE(0xb6, o6_printDebug);
OPCODE(0xb7, o6_printSystem);
/* B8 */
OPCODE(0xb8, o6_printActor);
OPCODE(0xb9, o6_printEgo);
OPCODE(0xba, o72_talkActor);
OPCODE(0xbb, o72_talkEgo);
/* BC */
OPCODE(0xbc, o72_dimArray);
OPCODE(0xbd, o6_stopObjectCode);
OPCODE(0xbe, o6_startObjectQuick);
OPCODE(0xbf, o6_startScriptQuick2);
/* C0 */
OPCODE(0xc0, o72_dim2dimArray);
OPCODE(0xc1, o72_traceStatus);
/* C4 */
OPCODE(0xc4, o6_abs);
OPCODE(0xc5, o6_distObjectObject);
OPCODE(0xc6, o6_distObjectPt);
OPCODE(0xc7, o6_distPtPt);
/* C8 */
OPCODE(0xc8, o72_kernelGetFunctions);
OPCODE(0xc9, o71_kernelSetFunctions);
OPCODE(0xca, o6_delayFrames);
OPCODE(0xcb, o6_pickOneOf);
/* CC */
OPCODE(0xcc, o6_pickOneOfDefault);
OPCODE(0xcd, o6_stampObject);
OPCODE(0xce, o72_drawWizImage);
OPCODE(0xcf, o72_debugInput);
/* D0 */
OPCODE(0xd0, o6_getDateTime);
OPCODE(0xd1, o6_stopTalking);
OPCODE(0xd2, o6_getAnimateVariable);
/* D4 */
OPCODE(0xd4, o6_shuffle);
OPCODE(0xd5, o72_jumpToScript);
OPCODE(0xd6, o6_band);
OPCODE(0xd7, o6_bor);
/* D8 */
OPCODE(0xd8, o6_isRoomScriptRunning);
OPCODE(0xd9, o60_closeFile);
OPCODE(0xda, o72_openFile);
OPCODE(0xdb, o72_readFile);
/* DC */
OPCODE(0xdc, o72_writeFile);
OPCODE(0xdd, o72_findAllObjects);
OPCODE(0xde, o72_deleteFile);
OPCODE(0xdf, o72_rename);
/* E0 */
OPCODE(0xe0, o60_soundOps);
OPCODE(0xe1, o72_getPixel);
OPCODE(0xe2, o60_localizeArrayToScript);
OPCODE(0xe3, o72_pickVarRandom);
/* E4 */
OPCODE(0xe4, o6_setBoxSet);
/* E8 */
OPCODE(0xe9, o60_seekFilePos);
OPCODE(0xea, o72_redimArray);
OPCODE(0xeb, o60_readFilePos);
/* EC */
OPCODE(0xec, o71_copyString);
OPCODE(0xed, o71_getStringWidth);
OPCODE(0xee, o70_getStringLen);
OPCODE(0xef, o71_appendString);
/* F0 */
OPCODE(0xf0, o71_concatString);
OPCODE(0xf1, o71_compareString);
OPCODE(0xf2, o70_isResourceLoaded);
OPCODE(0xf3, o72_readINI);
/* F4 */
OPCODE(0xf4, o72_writeINI);
OPCODE(0xf5, o71_getStringLenForWidth);
OPCODE(0xf6, o71_getCharIndexInString);
OPCODE(0xf7, o71_findBox);
/* F8 */
OPCODE(0xf8, o72_getResourceSize);
OPCODE(0xf9, o72_createDirectory);
OPCODE(0xfa, o72_setSystemMessage);
OPCODE(0xfb, o71_polygonOps);
/* FC */
OPCODE(0xfc, o71_polygonHit);
}
static const int arrayDataSizes[] = { 0, 1, 4, 8, 8, 16, 32 };

View File

@ -42,264 +42,28 @@ namespace Scumm {
#define OPCODE(i, x) _opcodes[i]._OPCODE(ScummEngine_v80he, x)
void ScummEngine_v80he::setupOpcodes() {
/* 00 */
OPCODE(0x00, o6_pushByte);
OPCODE(0x01, o6_pushWord);
OPCODE(0x02, o72_pushDWord);
OPCODE(0x03, o6_pushWordVar);
/* 04 */
OPCODE(0x04, o72_getScriptString);
OPCODE(0x07, o6_wordArrayRead);
/* 08 */
OPCODE(0x0b, o6_wordArrayIndexedRead);
/* 0C */
OPCODE(0x0c, o6_dup);
OPCODE(0x0d, o6_not);
OPCODE(0x0e, o6_eq);
OPCODE(0x0f, o6_neq);
/* 10 */
OPCODE(0x10, o6_gt);
OPCODE(0x11, o6_lt);
OPCODE(0x12, o6_le);
OPCODE(0x13, o6_ge);
/* 14 */
OPCODE(0x14, o6_add);
OPCODE(0x15, o6_sub);
OPCODE(0x16, o6_mul);
OPCODE(0x17, o6_div);
/* 18 */
OPCODE(0x18, o6_land);
OPCODE(0x19, o6_lor);
OPCODE(0x1a, o6_pop);
OPCODE(0x1b, o72_isAnyOf);
/* 1C */
/* 20 */
/* 24 */
/* 28 */
/* 2C */
/* 30 */
/* 34 */
/* 38 */
/* 3C */
/* 40 */
OPCODE(0x43, o6_writeWordVar);
/* 44 */
ScummEngine_v72he::setupOpcodes();
OPCODE(0x45, o80_createSound);
OPCODE(0x46, o80_getFileSize);
OPCODE(0x47, o6_wordArrayWrite);
/* 48 */
OPCODE(0x48, o80_stringToInt);
OPCODE(0x49, o80_getSoundVar);
OPCODE(0x4a, o80_localizeArrayToRoom);
OPCODE(0x4b, o6_wordArrayIndexedWrite);
/* 4C */
OPCODE(0x4c, o80_sourceDebug);
OPCODE(0x4d, o80_readConfigFile);
OPCODE(0x4e, o80_writeConfigFile);
OPCODE(0x4f, o6_wordVarInc);
/* 50 */
OPCODE(0x50, o72_resetCutscene);
OPCODE(0x52, o72_findObjectWithClassOf);
OPCODE(0x53, o6_wordArrayInc);
/* 54 */
OPCODE(0x54, o72_getObjectImageX);
OPCODE(0x55, o72_getObjectImageY);
OPCODE(0x56, o72_captureWizImage);
OPCODE(0x57, o6_wordVarDec);
/* 58 */
OPCODE(0x58, o72_getTimer);
OPCODE(0x59, o72_setTimer);
OPCODE(0x5a, o72_getSoundPosition);
OPCODE(0x5b, o6_wordArrayDec);
/* 5C */
OPCODE(0x5c, o6_if);
OPCODE(0x5d, o6_ifNot);
OPCODE(0x5e, o72_startScript);
OPCODE(0x5f, o6_startScriptQuick);
/* 60 */
OPCODE(0x60, o72_startObject);
OPCODE(0x61, o72_drawObject);
OPCODE(0x62, o72_printWizImage);
OPCODE(0x63, o72_getArrayDimSize);
/* 64 */
OPCODE(0x64, o72_getNumFreeArrays);
OPCODE(0x65, o6_stopObjectCode);
OPCODE(0x66, o6_stopObjectCode);
OPCODE(0x67, o6_endCutscene);
/* 68 */
OPCODE(0x68, o6_cutscene);
OPCODE(0x6a, o6_freezeUnfreeze);
_opcodes[0x69].setProc(0, 0);
OPCODE(0x6b, o80_cursorCommand);
/* 6C */
OPCODE(0x6c, o6_breakHere);
OPCODE(0x6d, o6_ifClassOfIs);
OPCODE(0x6e, o6_setClass);
OPCODE(0x6f, o6_getState);
/* 70 */
OPCODE(0x70, o80_setState);
OPCODE(0x71, o6_setOwner);
OPCODE(0x72, o6_getOwner);
OPCODE(0x73, o6_jump);
/* 74 */
OPCODE(0x74, o70_startSound);
OPCODE(0x75, o6_stopSound);
OPCODE(0x77, o6_stopObjectScript);
/* 78 */
OPCODE(0x78, o6_panCameraTo);
OPCODE(0x79, o6_actorFollowCamera);
OPCODE(0x7a, o6_setCameraAt);
OPCODE(0x7b, o6_loadRoom);
/* 7C */
OPCODE(0x7c, o6_stopScript);
OPCODE(0x7d, o6_walkActorToObj);
OPCODE(0x7e, o6_walkActorTo);
OPCODE(0x7f, o6_putActorAtXY);
/* 80 */
OPCODE(0x80, o6_putActorAtObject);
OPCODE(0x81, o6_faceActor);
OPCODE(0x82, o6_animateActor);
OPCODE(0x83, o6_doSentence);
/* 84 */
OPCODE(0x84, o70_pickupObject);
OPCODE(0x85, o6_loadRoomWithEgo);
OPCODE(0x87, o6_getRandomNumber);
/* 88 */
OPCODE(0x88, o6_getRandomNumberRange);
OPCODE(0x8a, o6_getActorMoving);
OPCODE(0x8b, o6_isScriptRunning);
/* 8C */
OPCODE(0x8c, o70_getActorRoom);
OPCODE(0x8d, o6_getObjectX);
OPCODE(0x8e, o6_getObjectY);
OPCODE(0x8f, o6_getObjectOldDir);
/* 90 */
OPCODE(0x90, o6_getActorWalkBox);
OPCODE(0x91, o6_getActorCostume);
OPCODE(0x92, o6_findInventory);
OPCODE(0x93, o6_getInventoryCount);
/* 94 */
OPCODE(0x95, o6_beginOverride);
OPCODE(0x96, o6_endOverride);
/* 98 */
OPCODE(0x98, o6_isSoundRunning);
OPCODE(0x99, o6_setBoxFlags);
OPCODE(0x9b, o70_resourceRoutines);
/* 9C */
OPCODE(0x9c, o72_roomOps);
OPCODE(0x9d, o72_actorOps);
OPCODE(0x9f, o6_getActorFromXY);
/* A0 */
OPCODE(0xa0, o72_findObject);
OPCODE(0xa1, o6_pseudoRoom);
OPCODE(0xa2, o6_getActorElevation);
OPCODE(0xa3, o6_getVerbEntrypoint);
/* A4 */
OPCODE(0xa4, o72_arrayOps);
OPCODE(0xa6, o6_drawBox);
OPCODE(0xa7, o6_pop);
/* A8 */
OPCODE(0xa8, o6_getActorWidth);
OPCODE(0xa9, o6_wait);
OPCODE(0xaa, o6_getActorScaleX);
OPCODE(0xab, o6_getActorAnimCounter);
/* AC */
_opcodes[0x76].setProc(0, 0);
_opcodes[0x94].setProc(0, 0);
_opcodes[0x9e].setProc(0, 0);
_opcodes[0xa5].setProc(0, 0);
OPCODE(0xac, o80_drawWizPolygon);
OPCODE(0xad, o6_isAnyOf);
OPCODE(0xae, o72_systemOps);
OPCODE(0xaf, o6_isActorInBox);
/* B0 */
OPCODE(0xb0, o6_delay);
OPCODE(0xb1, o6_delaySeconds);
OPCODE(0xb2, o6_delayMinutes);
OPCODE(0xb3, o6_stopSentence);
/* B4 */
OPCODE(0xb4, o6_printLine);
OPCODE(0xb5, o6_printText);
OPCODE(0xb6, o6_printDebug);
OPCODE(0xb7, o6_printSystem);
/* B8 */
OPCODE(0xb8, o6_printActor);
OPCODE(0xb9, o6_printEgo);
OPCODE(0xba, o72_talkActor);
OPCODE(0xbb, o72_talkEgo);
/* BC */
OPCODE(0xbc, o72_dimArray);
OPCODE(0xbd, o6_stopObjectCode);
OPCODE(0xbe, o6_startObjectQuick);
OPCODE(0xbf, o6_startScriptQuick2);
/* C0 */
OPCODE(0xc0, o72_dim2dimArray);
OPCODE(0xc1, o72_traceStatus);
/* C4 */
OPCODE(0xc4, o6_abs);
OPCODE(0xc5, o6_distObjectObject);
OPCODE(0xc6, o6_distObjectPt);
OPCODE(0xc7, o6_distPtPt);
/* C8 */
OPCODE(0xc8, o72_kernelGetFunctions);
OPCODE(0xc9, o71_kernelSetFunctions);
OPCODE(0xca, o6_delayFrames);
OPCODE(0xcb, o6_pickOneOf);
/* CC */
OPCODE(0xcc, o6_pickOneOfDefault);
OPCODE(0xcd, o6_stampObject);
OPCODE(0xce, o72_drawWizImage);
OPCODE(0xcf, o72_debugInput);
/* D0 */
OPCODE(0xd0, o6_getDateTime);
OPCODE(0xd1, o6_stopTalking);
OPCODE(0xd2, o6_getAnimateVariable);
/* D4 */
OPCODE(0xd4, o6_shuffle);
OPCODE(0xd5, o72_jumpToScript);
OPCODE(0xd6, o6_band);
OPCODE(0xd7, o6_bor);
/* D8 */
OPCODE(0xd8, o6_isRoomScriptRunning);
OPCODE(0xd9, o60_closeFile);
OPCODE(0xda, o72_openFile);
OPCODE(0xdb, o72_readFile);
/* DC */
OPCODE(0xdc, o72_writeFile);
OPCODE(0xdd, o72_findAllObjects);
OPCODE(0xde, o72_deleteFile);
OPCODE(0xdf, o72_rename);
/* E0 */
OPCODE(0xe0, o80_drawLine);
OPCODE(0xe1, o72_getPixel);
OPCODE(0xe2, o60_localizeArrayToScript);
OPCODE(0xe3, o80_pickVarRandom);
/* E4 */
OPCODE(0xe4, o6_setBoxSet);
/* E8 */
OPCODE(0xe9, o60_seekFilePos);
OPCODE(0xea, o72_redimArray);
OPCODE(0xeb, o60_readFilePos);
/* EC */
OPCODE(0xec, o71_copyString);
OPCODE(0xed, o71_getStringWidth);
OPCODE(0xee, o70_getStringLen);
OPCODE(0xef, o71_appendString);
/* F0 */
OPCODE(0xf0, o71_concatString);
OPCODE(0xf1, o71_compareString);
OPCODE(0xf2, o70_isResourceLoaded);
OPCODE(0xf3, o72_readINI);
/* F4 */
OPCODE(0xf4, o72_writeINI);
OPCODE(0xf5, o71_getStringLenForWidth);
OPCODE(0xf6, o71_getCharIndexInString);
OPCODE(0xf7, o71_findBox);
/* F8 */
OPCODE(0xf8, o72_getResourceSize);
OPCODE(0xf9, o72_createDirectory);
OPCODE(0xfa, o72_setSystemMessage);
OPCODE(0xfb, o71_polygonOps);
/* FC */
OPCODE(0xfc, o71_polygonHit);
}
void ScummEngine_v80he::o80_createSound() {
byte subOp = fetchScriptByte();

View File

@ -41,37 +41,10 @@ namespace Scumm {
#define OPCODE(i, x) _opcodes[i]._OPCODE(ScummEngine_v90he, x)
void ScummEngine_v90he::setupOpcodes() {
/* 00 */
OPCODE(0x00, o6_pushByte);
OPCODE(0x01, o6_pushWord);
OPCODE(0x02, o72_pushDWord);
OPCODE(0x03, o6_pushWordVar);
/* 04 */
OPCODE(0x04, o72_getScriptString);
OPCODE(0x07, o6_wordArrayRead);
/* 08 */
ScummEngine_v80he::setupOpcodes();
OPCODE(0x0a, o90_dup_n);
OPCODE(0x0b, o6_wordArrayIndexedRead);
/* 0C */
OPCODE(0x0c, o6_dup);
OPCODE(0x0d, o6_not);
OPCODE(0x0e, o6_eq);
OPCODE(0x0f, o6_neq);
/* 10 */
OPCODE(0x10, o6_gt);
OPCODE(0x11, o6_lt);
OPCODE(0x12, o6_le);
OPCODE(0x13, o6_ge);
/* 14 */
OPCODE(0x14, o6_add);
OPCODE(0x15, o6_sub);
OPCODE(0x16, o6_mul);
OPCODE(0x17, o6_div);
/* 18 */
OPCODE(0x18, o6_land);
OPCODE(0x19, o6_lor);
OPCODE(0x1a, o6_pop);
OPCODE(0x1b, o72_isAnyOf);
/* 1C */
OPCODE(0x1c, o90_wizImageOps);
OPCODE(0x1d, o90_min);
@ -111,227 +84,15 @@ void ScummEngine_v90he::setupOpcodes() {
OPCODE(0x38, o90_redim2dimArray);
OPCODE(0x39, o90_getLinesIntersectionPoint);
OPCODE(0x3a, o90_sortArray);
/* 3C */
/* 40 */
OPCODE(0x43, o6_writeWordVar);
/* 44 */
OPCODE(0x44, o90_getObjectData);
OPCODE(0x45, o80_createSound);
OPCODE(0x46, o80_getFileSize);
OPCODE(0x47, o6_wordArrayWrite);
/* 48 */
OPCODE(0x48, o80_stringToInt);
OPCODE(0x49, o80_getSoundVar);
OPCODE(0x4a, o80_localizeArrayToRoom);
OPCODE(0x4b, o6_wordArrayIndexedWrite);
/* 4C */
OPCODE(0x4c, o80_sourceDebug);
OPCODE(0x4d, o80_readConfigFile);
OPCODE(0x4e, o80_writeConfigFile);
OPCODE(0x4f, o6_wordVarInc);
/* 50 */
OPCODE(0x50, o72_resetCutscene);
OPCODE(0x52, o72_findObjectWithClassOf);
OPCODE(0x53, o6_wordArrayInc);
/* 54 */
OPCODE(0x54, o72_getObjectImageX);
OPCODE(0x55, o72_getObjectImageY);
OPCODE(0x56, o72_captureWizImage);
OPCODE(0x57, o6_wordVarDec);
/* 58 */
OPCODE(0x58, o72_getTimer);
OPCODE(0x59, o72_setTimer);
OPCODE(0x5a, o72_getSoundPosition);
OPCODE(0x5b, o6_wordArrayDec);
/* 5C */
OPCODE(0x5c, o6_if);
OPCODE(0x5d, o6_ifNot);
OPCODE(0x5e, o72_startScript);
OPCODE(0x5f, o6_startScriptQuick);
/* 60 */
OPCODE(0x60, o72_startObject);
OPCODE(0x61, o72_drawObject);
OPCODE(0x62, o72_printWizImage);
OPCODE(0x63, o72_getArrayDimSize);
/* 64 */
OPCODE(0x64, o72_getNumFreeArrays);
OPCODE(0x65, o6_stopObjectCode);
OPCODE(0x66, o6_stopObjectCode);
OPCODE(0x67, o6_endCutscene);
/* 68 */
OPCODE(0x68, o6_cutscene);
OPCODE(0x6a, o6_freezeUnfreeze);
OPCODE(0x6b, o80_cursorCommand);
/* 6C */
OPCODE(0x6c, o6_breakHere);
OPCODE(0x6d, o6_ifClassOfIs);
OPCODE(0x6e, o6_setClass);
OPCODE(0x6f, o6_getState);
/* 70 */
OPCODE(0x70, o80_setState);
OPCODE(0x71, o6_setOwner);
OPCODE(0x72, o6_getOwner);
OPCODE(0x73, o6_jump);
/* 74 */
OPCODE(0x74, o70_startSound);
OPCODE(0x75, o6_stopSound);
OPCODE(0x77, o6_stopObjectScript);
/* 78 */
OPCODE(0x78, o6_panCameraTo);
OPCODE(0x79, o6_actorFollowCamera);
OPCODE(0x7a, o6_setCameraAt);
OPCODE(0x7b, o6_loadRoom);
/* 7C */
OPCODE(0x7c, o6_stopScript);
OPCODE(0x7d, o6_walkActorToObj);
OPCODE(0x7e, o6_walkActorTo);
OPCODE(0x7f, o6_putActorAtXY);
/* 80 */
OPCODE(0x80, o6_putActorAtObject);
OPCODE(0x81, o6_faceActor);
OPCODE(0x82, o6_animateActor);
OPCODE(0x83, o6_doSentence);
/* 84 */
OPCODE(0x84, o70_pickupObject);
OPCODE(0x85, o6_loadRoomWithEgo);
OPCODE(0x87, o6_getRandomNumber);
/* 88 */
OPCODE(0x88, o6_getRandomNumberRange);
OPCODE(0x8a, o6_getActorMoving);
OPCODE(0x8b, o6_isScriptRunning);
/* 8C */
OPCODE(0x8c, o70_getActorRoom);
OPCODE(0x8d, o6_getObjectX);
OPCODE(0x8e, o6_getObjectY);
OPCODE(0x8f, o6_getObjectOldDir);
/* 90 */
OPCODE(0x90, o6_getActorWalkBox);
OPCODE(0x91, o6_getActorCostume);
OPCODE(0x92, o6_findInventory);
OPCODE(0x93, o6_getInventoryCount);
/* 94 */
OPCODE(0x94, o90_getPaletteData);
OPCODE(0x95, o6_beginOverride);
OPCODE(0x96, o6_endOverride);
/* 98 */
OPCODE(0x98, o6_isSoundRunning);
OPCODE(0x99, o6_setBoxFlags);
OPCODE(0x9b, o70_resourceRoutines);
/* 9C */
OPCODE(0x9c, o72_roomOps);
OPCODE(0x9d, o72_actorOps);
OPCODE(0x9e, o90_paletteOps);
OPCODE(0x9f, o6_getActorFromXY);
/* A0 */
OPCODE(0xa0, o72_findObject);
OPCODE(0xa1, o6_pseudoRoom);
OPCODE(0xa2, o6_getActorElevation);
OPCODE(0xa3, o6_getVerbEntrypoint);
/* A4 */
OPCODE(0xa4, o72_arrayOps);
OPCODE(0xa5, o90_fontUnk);
OPCODE(0xa6, o6_drawBox);
OPCODE(0xa7, o6_pop);
/* A8 */
OPCODE(0xa8, o6_getActorWidth);
OPCODE(0xa9, o6_wait);
OPCODE(0xaa, o6_getActorScaleX);
OPCODE(0xab, o90_getActorAnimProgress);
/* AC */
OPCODE(0xac, o80_drawWizPolygon);
OPCODE(0xad, o6_isAnyOf);
OPCODE(0xae, o72_systemOps);
OPCODE(0xaf, o6_isActorInBox);
/* B0 */
OPCODE(0xb0, o6_delay);
OPCODE(0xb1, o6_delaySeconds);
OPCODE(0xb2, o6_delayMinutes);
OPCODE(0xb3, o6_stopSentence);
/* B4 */
OPCODE(0xb4, o6_printLine);
OPCODE(0xb5, o6_printText);
OPCODE(0xb6, o6_printDebug);
OPCODE(0xb7, o6_printSystem);
/* B8 */
OPCODE(0xb8, o6_printActor);
OPCODE(0xb9, o6_printEgo);
OPCODE(0xba, o72_talkActor);
OPCODE(0xbb, o72_talkEgo);
/* BC */
OPCODE(0xbc, o72_dimArray);
OPCODE(0xbd, o6_stopObjectCode);
OPCODE(0xbe, o6_startObjectQuick);
OPCODE(0xbf, o6_startScriptQuick2);
/* C0 */
OPCODE(0xc0, o72_dim2dimArray);
OPCODE(0xc1, o72_traceStatus);
/* C4 */
OPCODE(0xc4, o6_abs);
OPCODE(0xc5, o6_distObjectObject);
OPCODE(0xc6, o6_distObjectPt);
OPCODE(0xc7, o6_distPtPt);
/* C8 */
OPCODE(0xc8, o90_kernelGetFunctions);
OPCODE(0xc9, o90_kernelSetFunctions);
OPCODE(0xca, o6_delayFrames);
OPCODE(0xcb, o6_pickOneOf);
/* CC */
OPCODE(0xcc, o6_pickOneOfDefault);
OPCODE(0xcd, o6_stampObject);
OPCODE(0xce, o72_drawWizImage);
OPCODE(0xcf, o72_debugInput);
/* D0 */
OPCODE(0xd0, o6_getDateTime);
OPCODE(0xd1, o6_stopTalking);
OPCODE(0xd2, o6_getAnimateVariable);
/* D4 */
OPCODE(0xd4, o6_shuffle);
OPCODE(0xd5, o72_jumpToScript);
OPCODE(0xd6, o6_band);
OPCODE(0xd7, o6_bor);
/* D8 */
OPCODE(0xd8, o6_isRoomScriptRunning);
OPCODE(0xd9, o60_closeFile);
OPCODE(0xda, o72_openFile);
OPCODE(0xdb, o72_readFile);
/* DC */
OPCODE(0xdc, o72_writeFile);
OPCODE(0xdd, o72_findAllObjects);
OPCODE(0xde, o72_deleteFile);
OPCODE(0xdf, o72_rename);
/* E0 */
OPCODE(0xe0, o80_drawLine);
OPCODE(0xe1, o72_getPixel);
OPCODE(0xe2, o60_localizeArrayToScript);
OPCODE(0xe3, o80_pickVarRandom);
/* E4 */
OPCODE(0xe4, o6_setBoxSet);
/* E8 */
OPCODE(0xe9, o60_seekFilePos);
OPCODE(0xea, o72_redimArray);
OPCODE(0xeb, o60_readFilePos);
/* EC */
OPCODE(0xec, o71_copyString);
OPCODE(0xed, o71_getStringWidth);
OPCODE(0xee, o70_getStringLen);
OPCODE(0xef, o71_appendString);
/* F0 */
OPCODE(0xf0, o71_concatString);
OPCODE(0xf1, o71_compareString);
OPCODE(0xf2, o70_isResourceLoaded);
OPCODE(0xf3, o72_readINI);
/* F4 */
OPCODE(0xf4, o72_writeINI);
OPCODE(0xf5, o71_getStringLenForWidth);
OPCODE(0xf6, o71_getCharIndexInString);
OPCODE(0xf7, o71_findBox);
/* F8 */
OPCODE(0xf8, o72_getResourceSize);
OPCODE(0xf9, o72_createDirectory);
OPCODE(0xfa, o72_setSystemMessage);
OPCODE(0xfb, o71_polygonOps);
/* FC */
OPCODE(0xfc, o71_polygonHit);
}
void ScummEngine_v90he::o90_dup_n() {

View File

@ -232,7 +232,6 @@ void ScummEngine_v6::setupOpcodes() {
OPCODE(0xbb, o6_talkEgo);
/* BC */
OPCODE(0xbc, o6_dimArray);
OPCODE(0xbd, o6_dummy);
OPCODE(0xbe, o6_startObjectQuick);
OPCODE(0xbf, o6_startScriptQuick2);
/* C0 */
@ -272,10 +271,6 @@ void ScummEngine_v6::setupOpcodes() {
/* EC */
OPCODE(0xec, o6_getActorLayer);
OPCODE(0xed, o6_getObjectNewDir);
/* F0 */
/* F4 */
/* F8 */
/* FC */
}
int ScummEngine_v6::popRoomAndObj(int *room) {
@ -2357,9 +2352,6 @@ void ScummEngine_v6::o6_dimArray() {
}
void ScummEngine_v6::o6_dummy() {
if (_game.heversion >= 60) {
stopObjectCode();
}
}
void ScummEngine_v6::o6_dim2dimArray() {