Changed opcodeDraw to be functor-based
svn-id: r41601
This commit is contained in:
parent
3bfca53709
commit
25c92dfdef
10 changed files with 243 additions and 2787 deletions
|
@ -37,6 +37,7 @@
|
|||
namespace Gob {
|
||||
|
||||
#define OPCODE(x) _OPCODE(Inter_v3, x)
|
||||
#define OPCODEDRAW(i, x) _opcodesDraw[i]._OPCODEDRAW(Inter_v3, x)
|
||||
|
||||
const int Inter_v3::_goblinFuncLookUp[][2] = {
|
||||
{0, 0},
|
||||
|
@ -114,332 +115,14 @@ const int Inter_v3::_goblinFuncLookUp[][2] = {
|
|||
|
||||
Inter_v3::Inter_v3(GobEngine *vm) : Inter_v2(vm) {
|
||||
setupOpcodes();
|
||||
NsetupOpcodes();
|
||||
}
|
||||
|
||||
void Inter_v3::setupOpcodesDraw() {
|
||||
Inter_v2::setupOpcodesDraw();
|
||||
}
|
||||
|
||||
void Inter_v3::setupOpcodes() {
|
||||
static const OpcodeDrawEntryV3 opcodesDraw[256] = {
|
||||
/* 00 */
|
||||
OPCODE(o1_loadMult),
|
||||
OPCODE(o2_playMult),
|
||||
OPCODE(o2_freeMultKeys),
|
||||
{0, ""},
|
||||
/* 04 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
OPCODE(o1_initCursor),
|
||||
/* 08 */
|
||||
OPCODE(o1_initCursorAnim),
|
||||
OPCODE(o1_clearCursorAnim),
|
||||
OPCODE(o2_setRenderFlags),
|
||||
{0, ""},
|
||||
/* 0C */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 10 */
|
||||
OPCODE(o1_loadAnim),
|
||||
OPCODE(o1_freeAnim),
|
||||
OPCODE(o1_updateAnim),
|
||||
OPCODE(o2_multSub),
|
||||
/* 14 */
|
||||
OPCODE(o2_initMult),
|
||||
OPCODE(o1_freeMult),
|
||||
OPCODE(o1_animate),
|
||||
OPCODE(o2_loadMultObject),
|
||||
/* 18 */
|
||||
OPCODE(o1_getAnimLayerInfo),
|
||||
OPCODE(o1_getObjAnimSize),
|
||||
OPCODE(o1_loadStatic),
|
||||
OPCODE(o1_freeStatic),
|
||||
/* 1C */
|
||||
OPCODE(o2_renderStatic),
|
||||
OPCODE(o2_loadCurLayer),
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 20 */
|
||||
OPCODE(o2_playCDTrack),
|
||||
OPCODE(o2_waitCDTrackEnd),
|
||||
OPCODE(o2_stopCD),
|
||||
OPCODE(o2_readLIC),
|
||||
/* 24 */
|
||||
OPCODE(o2_freeLIC),
|
||||
OPCODE(o2_getCDTrackPos),
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 28 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 2C */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 30 */
|
||||
OPCODE(o2_loadFontToSprite),
|
||||
OPCODE(o1_freeFontToSprite),
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 34 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 38 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 3C */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 40 */
|
||||
OPCODE(o2_totSub),
|
||||
OPCODE(o2_switchTotSub),
|
||||
OPCODE(o2_pushVars),
|
||||
OPCODE(o2_popVars),
|
||||
/* 44 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 48 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 4C */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 50 */
|
||||
OPCODE(o2_loadMapObjects),
|
||||
OPCODE(o2_freeGoblins),
|
||||
OPCODE(o2_moveGoblin),
|
||||
OPCODE(o2_writeGoblinPos),
|
||||
/* 54 */
|
||||
OPCODE(o2_stopGoblin),
|
||||
OPCODE(o2_setGoblinState),
|
||||
OPCODE(o2_placeGoblin),
|
||||
{0, ""},
|
||||
/* 58 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 5C */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 60 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 64 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 68 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 6C */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 70 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 74 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 78 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 7C */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 80 */
|
||||
OPCODE(o2_initScreen),
|
||||
OPCODE(o2_scroll),
|
||||
OPCODE(o2_setScrollOffset),
|
||||
OPCODE(o2_playImd),
|
||||
/* 84 */
|
||||
OPCODE(o2_getImdInfo),
|
||||
OPCODE(o2_openItk),
|
||||
OPCODE(o2_closeItk),
|
||||
OPCODE(o2_setImdFrontSurf),
|
||||
/* 88 */
|
||||
OPCODE(o2_resetImdFrontSurf),
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 8C */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 90 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 94 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 98 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* 9C */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* A0 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* A4 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* A8 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* AC */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* B0 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* B4 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* B8 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* BC */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* C0 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* C4 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* C8 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* CC */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* D0 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* D4 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* D8 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* DC */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* E0 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* E4 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* E8 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* EC */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* F0 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* F4 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* F8 */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
/* FC */
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""},
|
||||
{0, ""}
|
||||
};
|
||||
|
||||
static const OpcodeFuncEntryV3 opcodesFunc[80] = {
|
||||
/* 00 */
|
||||
OPCODE(o1_callSub),
|
||||
|
@ -635,23 +318,10 @@ void Inter_v3::setupOpcodes() {
|
|||
{0, ""},
|
||||
};
|
||||
|
||||
_opcodesDrawV3 = opcodesDraw;
|
||||
_opcodesFuncV3 = opcodesFunc;
|
||||
_opcodesGoblinV3 = opcodesGoblin;
|
||||
}
|
||||
|
||||
void Inter_v3::executeDrawOpcode(byte i) {
|
||||
debugC(1, kDebugDrawOp, "opcodeDraw %d [0x%X] (%s)",
|
||||
i, i, getOpcodeDrawDesc(i));
|
||||
|
||||
OpcodeDrawProcV3 op = _opcodesDrawV3[i].proc;
|
||||
|
||||
if (op == 0)
|
||||
warning("unimplemented opcodeDraw: %d", i);
|
||||
else
|
||||
(this->*op) ();
|
||||
}
|
||||
|
||||
bool Inter_v3::executeFuncOpcode(byte i, byte j, OpFuncParams ¶ms) {
|
||||
debugC(1, kDebugFuncOp, "opcodeFunc %d.%d [0x%X.0x%X] (%s)",
|
||||
i, j, i, j, getOpcodeFuncDesc(i, j));
|
||||
|
@ -693,10 +363,6 @@ void Inter_v3::executeGoblinOpcode(int i, OpGobParams ¶ms) {
|
|||
(this->*op) (params);
|
||||
}
|
||||
|
||||
const char *Inter_v3::getOpcodeDrawDesc(byte i) {
|
||||
return _opcodesDrawV3[i].desc;
|
||||
}
|
||||
|
||||
const char *Inter_v3::getOpcodeFuncDesc(byte i, byte j) {
|
||||
if ((i > 4) || (j > 15))
|
||||
return "";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue