diff options
author | Chris Apers | 2005-11-05 19:06:01 +0000 |
---|---|---|
committer | Chris Apers | 2005-11-05 19:06:01 +0000 |
commit | cb12c0c1da39b8be9054e3debb5108846a354bae (patch) | |
tree | c0e3ac9d14dbc566c08b17a8cf2c91c40b603bb5 | |
parent | 35748cfe92afabbd5b97aa837e70dd9d545ef069 (diff) | |
download | scummvm-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.cpp | 283 | ||||
-rw-r--r-- | sky/logic.h | 8 |
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); |