aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Apers2005-11-05 19:06:01 +0000
committerChris Apers2005-11-05 19:06:01 +0000
commitcb12c0c1da39b8be9054e3debb5108846a354bae (patch)
treec0e3ac9d14dbc566c08b17a8cf2c91c40b603bb5
parent35748cfe92afabbd5b97aa837e70dd9d545ef069 (diff)
downloadscummvm-rg350-cb12c0c1da39b8be9054e3debb5108846a354bae.tar.gz
scummvm-rg350-cb12c0c1da39b8be9054e3debb5108846a354bae.tar.bz2
scummvm-rg350-cb12c0c1da39b8be9054e3debb5108846a354bae.zip
- Move opcode tables to methods so that they are correctly initialized with PalmOS ARM
svn-id: r19474
-rw-r--r--sky/logic.cpp283
-rw-r--r--sky/logic.h8
2 files changed, 153 insertions, 138 deletions
diff --git a/sky/logic.cpp b/sky/logic.cpp
index 3189f3bdb5..00f7ace25b 100644
--- a/sky/logic.cpp
+++ b/sky/logic.cpp
@@ -39,25 +39,29 @@ namespace Sky {
uint32 Logic::_scriptVariables[NUM_SKY_SCRIPTVARS];
-const LogicTable Logic::_logicTable[] = {
- &Logic::nop,
- &Logic::logicScript, // 1 script processor
- &Logic::autoRoute, // 2 Make a route
- &Logic::arAnim, // 3 Follow a route
- &Logic::arTurn, // 4 Mega turns araound
- &Logic::alt, // 5 Set up new get-to script
- &Logic::anim, // 6 Follow a sequence
- &Logic::turn, // 7 Mega turning
- &Logic::cursor, // 8 id tracks the pointer
- &Logic::talk, // 9 count down and animate
- &Logic::listen, // 10 player waits for talking id
- &Logic::stopped, // 11 wait for id to move
- &Logic::choose, // 12 wait for player to click
- &Logic::frames, // 13 animate just frames
- &Logic::pause, // 14 Count down to 0 and go
- &Logic::waitSync, // 15 Set to l_script when sync!=0
- &Logic::simpleAnim, // 16 Module anim without x,y's
-};
+void Logic::setupLogicTable() {
+ static const LogicTable logicTable[] = {
+ &Logic::nop,
+ &Logic::logicScript, // 1 script processor
+ &Logic::autoRoute, // 2 Make a route
+ &Logic::arAnim, // 3 Follow a route
+ &Logic::arTurn, // 4 Mega turns araound
+ &Logic::alt, // 5 Set up new get-to script
+ &Logic::anim, // 6 Follow a sequence
+ &Logic::turn, // 7 Mega turning
+ &Logic::cursor, // 8 id tracks the pointer
+ &Logic::talk, // 9 count down and animate
+ &Logic::listen, // 10 player waits for talking id
+ &Logic::stopped, // 11 wait for id to move
+ &Logic::choose, // 12 wait for player to click
+ &Logic::frames, // 13 animate just frames
+ &Logic::pause, // 14 Count down to 0 and go
+ &Logic::waitSync, // 15 Set to l_script when sync!=0
+ &Logic::simpleAnim, // 16 Module anim without x,y's
+ };
+
+ _logicTable = logicTable;
+}
Logic::Logic(SkyCompact *skyCompact, Screen *skyScreen, Disk *skyDisk, Text *skyText, MusicBase *skyMusic, Mouse *skyMouse, Sound *skySound) {
_skyCompact = skyCompact;
@@ -70,6 +74,9 @@ Logic::Logic(SkyCompact *skyCompact, Screen *skyScreen, Disk *skyDisk, Text *sky
_skyGrid = new Grid(_skyDisk, _skyCompact);
_skyAutoRoute = new AutoRoute(_skyGrid, _skyCompact);
+ setupLogicTable();
+ setupMcodeTable();
+
memset(_objectList, 0, 30 * sizeof(uint32));
for (int i = 0; i < ARRAYSIZE(_moduleList); i++)
@@ -820,123 +827,127 @@ uint32 Logic::pop() {
return _stack[--_stackPtr];
}
-const McodeTable Logic::_mcodeTable[] = {
- &Logic::fnCacheChip,
- &Logic::fnCacheFast,
- &Logic::fnDrawScreen,
- &Logic::fnAr,
- &Logic::fnArAnimate,
- &Logic::fnIdle,
- &Logic::fnInteract,
- &Logic::fnStartSub,
- &Logic::fnTheyStartSub,
- &Logic::fnAssignBase,
- &Logic::fnDiskMouse,
- &Logic::fnNormalMouse,
- &Logic::fnBlankMouse,
- &Logic::fnCrossMouse,
- &Logic::fnCursorRight,
- &Logic::fnCursorLeft,
- &Logic::fnCursorDown,
- &Logic::fnOpenHand,
- &Logic::fnCloseHand,
- &Logic::fnGetTo,
- &Logic::fnSetToStand,
- &Logic::fnTurnTo,
- &Logic::fnArrived,
- &Logic::fnLeaving,
- &Logic::fnSetAlternate,
- &Logic::fnAltSetAlternate,
- &Logic::fnKillId,
- &Logic::fnNoHuman,
- &Logic::fnAddHuman,
- &Logic::fnAddButtons,
- &Logic::fnNoButtons,
- &Logic::fnSetStop,
- &Logic::fnClearStop,
- &Logic::fnPointerText,
- &Logic::fnQuit,
- &Logic::fnSpeakMe,
- &Logic::fnSpeakMeDir,
- &Logic::fnSpeakWait,
- &Logic::fnSpeakWaitDir,
- &Logic::fnChooser,
- &Logic::fnHighlight,
- &Logic::fnTextKill,
- &Logic::fnStopMode,
- &Logic::fnWeWait,
- &Logic::fnSendSync,
- &Logic::fnSendFastSync,
- &Logic::fnSendRequest,
- &Logic::fnClearRequest,
- &Logic::fnCheckRequest,
- &Logic::fnStartMenu,
- &Logic::fnUnhighlight,
- &Logic::fnFaceId,
- &Logic::fnForeground,
- &Logic::fnBackground,
- &Logic::fnNewBackground,
- &Logic::fnSort,
- &Logic::fnNoSpriteEngine,
- &Logic::fnNoSpritesA6,
- &Logic::fnResetId,
- &Logic::fnToggleGrid,
- &Logic::fnPause,
- &Logic::fnRunAnimMod,
- &Logic::fnSimpleMod,
- &Logic::fnRunFrames,
- &Logic::fnAwaitSync,
- &Logic::fnIncMegaSet,
- &Logic::fnDecMegaSet,
- &Logic::fnSetMegaSet,
- &Logic::fnMoveItems,
- &Logic::fnNewList,
- &Logic::fnAskThis,
- &Logic::fnRandom,
- &Logic::fnPersonHere,
- &Logic::fnToggleMouse,
- &Logic::fnMouseOn,
- &Logic::fnMouseOff,
- &Logic::fnFetchX,
- &Logic::fnFetchY,
- &Logic::fnTestList,
- &Logic::fnFetchPlace,
- &Logic::fnCustomJoey,
- &Logic::fnSetPalette,
- &Logic::fnTextModule,
- &Logic::fnChangeName,
- &Logic::fnMiniLoad,
- &Logic::fnFlushBuffers,
- &Logic::fnFlushChip,
- &Logic::fnSaveCoods,
- &Logic::fnPlotGrid,
- &Logic::fnRemoveGrid,
- &Logic::fnEyeball,
- &Logic::fnCursorUp,
- &Logic::fnLeaveSection,
- &Logic::fnEnterSection,
- &Logic::fnRestoreGame,
- &Logic::fnRestartGame,
- &Logic::fnNewSwingSeq,
- &Logic::fnWaitSwingEnd,
- &Logic::fnSkipIntroCode,
- &Logic::fnBlankScreen,
- &Logic::fnPrintCredit,
- &Logic::fnLookAt,
- &Logic::fnLincTextModule,
- &Logic::fnTextKill2,
- &Logic::fnSetFont,
- &Logic::fnStartFx,
- &Logic::fnStopFx,
- &Logic::fnStartMusic,
- &Logic::fnStopMusic,
- &Logic::fnFadeDown,
- &Logic::fnFadeUp,
- &Logic::fnQuitToDos,
- &Logic::fnPauseFx,
- &Logic::fnUnPauseFx,
- &Logic::fnPrintf
-};
+void Logic::setupMcodeTable() {
+ static const McodeTable mcodeTable[] = {
+ &Logic::fnCacheChip,
+ &Logic::fnCacheFast,
+ &Logic::fnDrawScreen,
+ &Logic::fnAr,
+ &Logic::fnArAnimate,
+ &Logic::fnIdle,
+ &Logic::fnInteract,
+ &Logic::fnStartSub,
+ &Logic::fnTheyStartSub,
+ &Logic::fnAssignBase,
+ &Logic::fnDiskMouse,
+ &Logic::fnNormalMouse,
+ &Logic::fnBlankMouse,
+ &Logic::fnCrossMouse,
+ &Logic::fnCursorRight,
+ &Logic::fnCursorLeft,
+ &Logic::fnCursorDown,
+ &Logic::fnOpenHand,
+ &Logic::fnCloseHand,
+ &Logic::fnGetTo,
+ &Logic::fnSetToStand,
+ &Logic::fnTurnTo,
+ &Logic::fnArrived,
+ &Logic::fnLeaving,
+ &Logic::fnSetAlternate,
+ &Logic::fnAltSetAlternate,
+ &Logic::fnKillId,
+ &Logic::fnNoHuman,
+ &Logic::fnAddHuman,
+ &Logic::fnAddButtons,
+ &Logic::fnNoButtons,
+ &Logic::fnSetStop,
+ &Logic::fnClearStop,
+ &Logic::fnPointerText,
+ &Logic::fnQuit,
+ &Logic::fnSpeakMe,
+ &Logic::fnSpeakMeDir,
+ &Logic::fnSpeakWait,
+ &Logic::fnSpeakWaitDir,
+ &Logic::fnChooser,
+ &Logic::fnHighlight,
+ &Logic::fnTextKill,
+ &Logic::fnStopMode,
+ &Logic::fnWeWait,
+ &Logic::fnSendSync,
+ &Logic::fnSendFastSync,
+ &Logic::fnSendRequest,
+ &Logic::fnClearRequest,
+ &Logic::fnCheckRequest,
+ &Logic::fnStartMenu,
+ &Logic::fnUnhighlight,
+ &Logic::fnFaceId,
+ &Logic::fnForeground,
+ &Logic::fnBackground,
+ &Logic::fnNewBackground,
+ &Logic::fnSort,
+ &Logic::fnNoSpriteEngine,
+ &Logic::fnNoSpritesA6,
+ &Logic::fnResetId,
+ &Logic::fnToggleGrid,
+ &Logic::fnPause,
+ &Logic::fnRunAnimMod,
+ &Logic::fnSimpleMod,
+ &Logic::fnRunFrames,
+ &Logic::fnAwaitSync,
+ &Logic::fnIncMegaSet,
+ &Logic::fnDecMegaSet,
+ &Logic::fnSetMegaSet,
+ &Logic::fnMoveItems,
+ &Logic::fnNewList,
+ &Logic::fnAskThis,
+ &Logic::fnRandom,
+ &Logic::fnPersonHere,
+ &Logic::fnToggleMouse,
+ &Logic::fnMouseOn,
+ &Logic::fnMouseOff,
+ &Logic::fnFetchX,
+ &Logic::fnFetchY,
+ &Logic::fnTestList,
+ &Logic::fnFetchPlace,
+ &Logic::fnCustomJoey,
+ &Logic::fnSetPalette,
+ &Logic::fnTextModule,
+ &Logic::fnChangeName,
+ &Logic::fnMiniLoad,
+ &Logic::fnFlushBuffers,
+ &Logic::fnFlushChip,
+ &Logic::fnSaveCoods,
+ &Logic::fnPlotGrid,
+ &Logic::fnRemoveGrid,
+ &Logic::fnEyeball,
+ &Logic::fnCursorUp,
+ &Logic::fnLeaveSection,
+ &Logic::fnEnterSection,
+ &Logic::fnRestoreGame,
+ &Logic::fnRestartGame,
+ &Logic::fnNewSwingSeq,
+ &Logic::fnWaitSwingEnd,
+ &Logic::fnSkipIntroCode,
+ &Logic::fnBlankScreen,
+ &Logic::fnPrintCredit,
+ &Logic::fnLookAt,
+ &Logic::fnLincTextModule,
+ &Logic::fnTextKill2,
+ &Logic::fnSetFont,
+ &Logic::fnStartFx,
+ &Logic::fnStopFx,
+ &Logic::fnStartMusic,
+ &Logic::fnStopMusic,
+ &Logic::fnFadeDown,
+ &Logic::fnFadeUp,
+ &Logic::fnQuitToDos,
+ &Logic::fnPauseFx,
+ &Logic::fnUnPauseFx,
+ &Logic::fnPrintf
+ };
+
+ _mcodeTable = mcodeTable;
+}
static const uint32 forwardList1b[] = {
JOBS_SPEECH,
diff --git a/sky/logic.h b/sky/logic.h
index 1e90901b65..d00abbe43e 100644
--- a/sky/logic.h
+++ b/sky/logic.h
@@ -152,6 +152,12 @@ public:
void initScreen0(void);
void parseSaveData(uint32 *data);
+private:
+ void setupLogicTable();
+ void setupMcodeTable();
+ const LogicTable *_logicTable;
+ const McodeTable *_mcodeTable;
+
protected:
void push(uint32);
uint32 pop();
@@ -163,7 +169,6 @@ protected:
void stopAndWait();
bool checkProtection(void);
- static const LogicTable _logicTable[];
void nop();
void logicScript();
void autoRoute();
@@ -182,7 +187,6 @@ protected:
void waitSync();
void simpleAnim();
- static const McodeTable _mcodeTable[];
bool fnCacheChip(uint32 a, uint32 b, uint32 c);
bool fnCacheFast(uint32 a, uint32 b, uint32 c);
bool fnDrawScreen(uint32 a, uint32 b, uint32 c);