Changed opcodeDraw to be functor-based

svn-id: r41601
This commit is contained in:
Sven Hesse 2009-06-17 04:15:45 +00:00
parent 3bfca53709
commit 25c92dfdef
10 changed files with 243 additions and 2787 deletions

View file

@ -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 &params) {
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 &params) {
(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 "";