aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorChris Apers2006-09-09 09:30:16 +0000
committerChris Apers2006-09-09 09:30:16 +0000
commit7efd027fed890a06830263e16fe943205bb186fc (patch)
tree9d3d8ae1b6bc6529e5e915343de16d2a60b12ec1 /engines
parent8b13bce6e991b752b90d330e767e7939cd4bf7d7 (diff)
downloadscummvm-rg350-7efd027fed890a06830263e16fe943205bb186fc.tar.gz
scummvm-rg350-7efd027fed890a06830263e16fe943205bb186fc.tar.bz2
scummvm-rg350-7efd027fed890a06830263e16fe943205bb186fc.zip
Fixed crashes on Zodiac and add support for this device
svn-id: r23837
Diffstat (limited to 'engines')
-rw-r--r--engines/sword1/logic.cpp210
-rw-r--r--engines/sword1/logic.h3
-rw-r--r--engines/sword1/memman.h4
3 files changed, 114 insertions, 103 deletions
diff --git a/engines/sword1/logic.cpp b/engines/sword1/logic.cpp
index b6210edd63..13b2e1afb0 100644
--- a/engines/sword1/logic.cpp
+++ b/engines/sword1/logic.cpp
@@ -64,6 +64,8 @@ Logic::Logic(ObjectMan *pObjMan, ResMan *resMan, Screen *pScreen, Mouse *pMouse,
_eventMan = NULL;
_system = system;
_mixer = mixer;
+
+ setupMcodeTable();
}
Logic::~Logic(void) {
@@ -682,108 +684,112 @@ int Logic::interpretScript(Object *compact, int id, Header *scriptModule, int sc
}
}
-BSMcodeTable Logic::_mcodeTable[100] = {
- &Logic::fnBackground,
- &Logic::fnForeground,
- &Logic::fnSort,
- &Logic::fnNoSprite,
- &Logic::fnMegaSet,
- &Logic::fnAnim,
- &Logic::fnSetFrame,
- &Logic::fnFullAnim,
- &Logic::fnFullSetFrame,
- &Logic::fnFadeDown,
- &Logic::fnFadeUp,
- &Logic::fnCheckFade,
- &Logic::fnSetSpritePalette,
- &Logic::fnSetWholePalette,
- &Logic::fnSetFadeTargetPalette,
- &Logic::fnSetPaletteToFade,
- &Logic::fnSetPaletteToCut,
- &Logic::fnPlaySequence,
- &Logic::fnIdle,
- &Logic::fnPause,
- &Logic::fnPauseSeconds,
- &Logic::fnQuit,
- &Logic::fnKillId,
- &Logic::fnSuicide,
- &Logic::fnNewScript,
- &Logic::fnSubScript,
- &Logic::fnRestartScript,
- &Logic::fnSetBookmark,
- &Logic::fnGotoBookmark,
- &Logic::fnSendSync,
- &Logic::fnWaitSync,
- &Logic::cfnClickInteract,
- &Logic::cfnSetScript,
- &Logic::cfnPresetScript,
- &Logic::fnInteract,
- &Logic::fnIssueEvent,
- &Logic::fnCheckForEvent,
- &Logic::fnWipeHands,
- &Logic::fnISpeak,
- &Logic::fnTheyDo,
- &Logic::fnTheyDoWeWait,
- &Logic::fnWeWait,
- &Logic::fnChangeSpeechText,
- &Logic::fnTalkError,
- &Logic::fnStartTalk,
- &Logic::fnCheckForTextLine,
- &Logic::fnAddTalkWaitStatusBit,
- &Logic::fnRemoveTalkWaitStatusBit,
- &Logic::fnNoHuman,
- &Logic::fnAddHuman,
- &Logic::fnBlankMouse,
- &Logic::fnNormalMouse,
- &Logic::fnLockMouse,
- &Logic::fnUnlockMouse,
- &Logic::fnSetMousePointer,
- &Logic::fnSetMouseLuggage,
- &Logic::fnMouseOn,
- &Logic::fnMouseOff,
- &Logic::fnChooser,
- &Logic::fnEndChooser,
- &Logic::fnStartMenu,
- &Logic::fnEndMenu,
- &Logic::cfnReleaseMenu,
- &Logic::fnAddSubject,
- &Logic::fnAddObject,
- &Logic::fnRemoveObject,
- &Logic::fnEnterSection,
- &Logic::fnLeaveSection,
- &Logic::fnChangeFloor,
- &Logic::fnWalk,
- &Logic::fnTurn,
- &Logic::fnStand,
- &Logic::fnStandAt,
- &Logic::fnFace,
- &Logic::fnFaceXy,
- &Logic::fnIsFacing,
- &Logic::fnGetTo,
- &Logic::fnGetToError,
- &Logic::fnGetPos,
- &Logic::fnGetGamepadXy,
- &Logic::fnPlayFx,
- &Logic::fnStopFx,
- &Logic::fnPlayMusic,
- &Logic::fnStopMusic,
- &Logic::fnInnerSpace,
- &Logic::fnRandom,
- &Logic::fnSetScreen,
- &Logic::fnPreload,
- &Logic::fnCheckCD,
- &Logic::fnRestartGame,
- &Logic::fnQuitGame,
- &Logic::fnDeathScreen,
- &Logic::fnSetParallax,
- &Logic::fnTdebug,
- &Logic::fnRedFlash,
- &Logic::fnBlueFlash,
- &Logic::fnYellow,
- &Logic::fnGreen,
- &Logic::fnPurple,
- &Logic::fnBlack
-};
+void Logic::setupMcodeTable() {
+ static const BSMcodeTable mcodeTable[100] = {
+ &Logic::fnBackground,
+ &Logic::fnForeground,
+ &Logic::fnSort,
+ &Logic::fnNoSprite,
+ &Logic::fnMegaSet,
+ &Logic::fnAnim,
+ &Logic::fnSetFrame,
+ &Logic::fnFullAnim,
+ &Logic::fnFullSetFrame,
+ &Logic::fnFadeDown,
+ &Logic::fnFadeUp,
+ &Logic::fnCheckFade,
+ &Logic::fnSetSpritePalette,
+ &Logic::fnSetWholePalette,
+ &Logic::fnSetFadeTargetPalette,
+ &Logic::fnSetPaletteToFade,
+ &Logic::fnSetPaletteToCut,
+ &Logic::fnPlaySequence,
+ &Logic::fnIdle,
+ &Logic::fnPause,
+ &Logic::fnPauseSeconds,
+ &Logic::fnQuit,
+ &Logic::fnKillId,
+ &Logic::fnSuicide,
+ &Logic::fnNewScript,
+ &Logic::fnSubScript,
+ &Logic::fnRestartScript,
+ &Logic::fnSetBookmark,
+ &Logic::fnGotoBookmark,
+ &Logic::fnSendSync,
+ &Logic::fnWaitSync,
+ &Logic::cfnClickInteract,
+ &Logic::cfnSetScript,
+ &Logic::cfnPresetScript,
+ &Logic::fnInteract,
+ &Logic::fnIssueEvent,
+ &Logic::fnCheckForEvent,
+ &Logic::fnWipeHands,
+ &Logic::fnISpeak,
+ &Logic::fnTheyDo,
+ &Logic::fnTheyDoWeWait,
+ &Logic::fnWeWait,
+ &Logic::fnChangeSpeechText,
+ &Logic::fnTalkError,
+ &Logic::fnStartTalk,
+ &Logic::fnCheckForTextLine,
+ &Logic::fnAddTalkWaitStatusBit,
+ &Logic::fnRemoveTalkWaitStatusBit,
+ &Logic::fnNoHuman,
+ &Logic::fnAddHuman,
+ &Logic::fnBlankMouse,
+ &Logic::fnNormalMouse,
+ &Logic::fnLockMouse,
+ &Logic::fnUnlockMouse,
+ &Logic::fnSetMousePointer,
+ &Logic::fnSetMouseLuggage,
+ &Logic::fnMouseOn,
+ &Logic::fnMouseOff,
+ &Logic::fnChooser,
+ &Logic::fnEndChooser,
+ &Logic::fnStartMenu,
+ &Logic::fnEndMenu,
+ &Logic::cfnReleaseMenu,
+ &Logic::fnAddSubject,
+ &Logic::fnAddObject,
+ &Logic::fnRemoveObject,
+ &Logic::fnEnterSection,
+ &Logic::fnLeaveSection,
+ &Logic::fnChangeFloor,
+ &Logic::fnWalk,
+ &Logic::fnTurn,
+ &Logic::fnStand,
+ &Logic::fnStandAt,
+ &Logic::fnFace,
+ &Logic::fnFaceXy,
+ &Logic::fnIsFacing,
+ &Logic::fnGetTo,
+ &Logic::fnGetToError,
+ &Logic::fnGetPos,
+ &Logic::fnGetGamepadXy,
+ &Logic::fnPlayFx,
+ &Logic::fnStopFx,
+ &Logic::fnPlayMusic,
+ &Logic::fnStopMusic,
+ &Logic::fnInnerSpace,
+ &Logic::fnRandom,
+ &Logic::fnSetScreen,
+ &Logic::fnPreload,
+ &Logic::fnCheckCD,
+ &Logic::fnRestartGame,
+ &Logic::fnQuitGame,
+ &Logic::fnDeathScreen,
+ &Logic::fnSetParallax,
+ &Logic::fnTdebug,
+ &Logic::fnRedFlash,
+ &Logic::fnBlueFlash,
+ &Logic::fnYellow,
+ &Logic::fnGreen,
+ &Logic::fnPurple,
+ &Logic::fnBlack
+ };
+
+ _mcodeTable = mcodeTable;
+}
int Logic::fnBackground(Object *cpt, int32 id, int32 c, int32 d, int32 e, int32 f, int32 z, int32 x) {
diff --git a/engines/sword1/logic.h b/engines/sword1/logic.h
index 32977dc83c..8d1815305c 100644
--- a/engines/sword1/logic.h
+++ b/engines/sword1/logic.h
@@ -89,7 +89,8 @@ private:
int fullAnimDriver(Object *compact);
int animDriver(Object *compact);
- static BSMcodeTable _mcodeTable[100];
+ void setupMcodeTable();
+ const BSMcodeTable *_mcodeTable;
uint16 inRange(uint16 a, uint16 b, uint16 c);
diff --git a/engines/sword1/memman.h b/engines/sword1/memman.h
index e230fac1af..1a9659a8d7 100644
--- a/engines/sword1/memman.h
+++ b/engines/sword1/memman.h
@@ -39,7 +39,11 @@ struct MemHandle {
#define MEM_CAN_FREE 1
#define MEM_DONT_FREE 2
+#ifdef PALMOS_MODE
+#define MAX_ALLOC (3*1024*1024) // max amount of mem we want to alloc().
+#else
#define MAX_ALLOC (6*1024*1024) // max amount of mem we want to alloc().
+#endif
class MemMan {
public: