aboutsummaryrefslogtreecommitdiff
path: root/engines/sky/logic.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sky/logic.h')
-rw-r--r--engines/sky/logic.h338
1 files changed, 338 insertions, 0 deletions
diff --git a/engines/sky/logic.h b/engines/sky/logic.h
new file mode 100644
index 0000000000..7d10be6d8c
--- /dev/null
+++ b/engines/sky/logic.h
@@ -0,0 +1,338 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2003-2006 The ScummVM project
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef SKYLOGIC_H
+#define SKYLOGIC_H
+
+#include "common/stdafx.h"
+#include "common/util.h"
+
+namespace Sky {
+
+struct Compact;
+
+enum scriptVariableOffsets {
+ RESULT = 0,
+ SCREEN = 1,
+ LOGIC_LIST_NO = 2,
+ MOUSE_LIST_NO = 6,
+ DRAW_LIST_NO = 8,
+ CUR_ID = 12,
+ MOUSE_STATUS = 13,
+ MOUSE_STOP = 14,
+ BUTTON = 15,
+ SPECIAL_ITEM = 17,
+ GET_OFF = 18,
+ CURSOR_ID = 22,
+ SAFEX = 25,
+ SAFEY = 26,
+ PLAYER_X = 27,
+ PLAYER_Y = 28,
+ PLAYER_MOOD = 29,
+ PLAYER_SCREEN = 30,
+ HIT_ID = 37,
+ LAYER_0_ID = 41,
+ LAYER_1_ID = 42,
+ LAYER_2_ID = 43,
+ LAYER_3_ID = 44,
+ GRID_1_ID = 45,
+ GRID_2_ID = 46,
+ GRID_3_ID = 47,
+ THE_CHOSEN_ONE = 51,
+ TEXT1 = 53,
+ MENU_LENGTH = 100,
+ SCROLL_OFFSET = 101,
+ MENU = 102,
+ OBJECT_HELD = 103,
+ LAMB_GREET = 109,
+ RND = 115,
+ CUR_SECTION = 143,
+ JOEY_SECTION = 145,
+ LAMB_SECTION = 146,
+ KNOWS_PORT = 190,
+ GOT_SPONSOR = 240,
+ GOT_JAMMER = 258,
+ CONSOLE_TYPE = 345,
+ S15_FLOOR = 450,
+ FOREMAN_FRIEND = 451,
+ REICH_DOOR_FLAG = 470,
+ CARD_STATUS = 479,
+ CARD_FIX = 480,
+ GUARDIAN_THERE = 640,
+ FS_COMMAND = 643,
+ ENTER_DIGITS = 644,
+ LINC_DIGIT_0 = 646,
+ LINC_DIGIT_1 = 647,
+ LINC_DIGIT_2 = 648,
+ LINC_DIGIT_3 = 649,
+ LINC_DIGIT_4 = 650,
+ LINC_DIGIT_5 = 651,
+ LINC_DIGIT_6 = 651,
+ LINC_DIGIT_7 = 653,
+ LINC_DIGIT_8 = 654,
+ LINC_DIGIT_9 = 655,
+ DOOR_67_68_FLAG = 678,
+ SC70_IRIS_FLAG = 693,
+ DOOR_73_75_FLAG = 704,
+ SC76_CABINET1_FLAG = 709,
+ SC76_CABINET2_FLAG = 710,
+ SC76_CABINET3_FLAG = 711,
+ DOOR_77_78_FLAG = 719,
+ SC80_EXIT_FLAG = 720,
+ SC31_LIFT_FLAG = 793,
+ SC32_LIFT_FLAG = 797,
+ SC33_SHED_DOOR_FLAG = 798,
+ BAND_PLAYING = 804,
+ COLSTON_AT_TABLE = 805,
+ SC36_NEXT_DEALER = 806,
+ SC36_DOOR_FLAG = 807,
+ SC37_DOOR_FLAG = 808,
+ SC40_LOCKER_1_FLAG = 817,
+ SC40_LOCKER_2_FLAG = 818,
+ SC40_LOCKER_3_FLAG = 819,
+ SC40_LOCKER_4_FLAG = 820,
+ SC40_LOCKER_5_FLAG = 821
+};
+
+#define NUM_SKY_SCRIPTVARS 838
+
+class AutoRoute;
+class Control;
+class Disk;
+class Grid;
+class Mouse;
+class MusicBase;
+class Screen;
+class Sound;
+class Text;
+class SkyCompact;
+
+class Logic;
+
+typedef void (Logic::*LogicTable) ();
+typedef bool (Logic::*McodeTable) (uint32, uint32, uint32);
+
+class Logic {
+public:
+ Logic(
+ SkyCompact *skyCompact,
+ Screen *skyScreen,
+ Disk *skyDisk,
+ Text *skyText,
+ MusicBase *skyMusic,
+ Mouse *skyMouse,
+ Sound *skySound);
+ ~Logic(void);
+ void engine();
+ void useControlInstance(Control *control) { _skyControl = control; };
+
+ uint16 mouseScript(uint32 scrNum, Compact *scriptComp);
+
+ static uint32 _scriptVariables[NUM_SKY_SCRIPTVARS];
+ Grid *_skyGrid;
+
+ uint16 script(uint16 scriptNo, uint16 offset);
+ void initScreen0(void);
+ void parseSaveData(uint32 *data);
+
+private:
+ void setupLogicTable();
+ void setupMcodeTable();
+ const LogicTable *_logicTable;
+ const McodeTable *_mcodeTable;
+
+protected:
+ void push(uint32);
+ uint32 pop();
+ void checkModuleLoaded(uint16 moduleNo);
+ bool collide(Compact *cpt);
+ void initScriptVariables();
+ void mainAnim();
+ void runGetOff();
+ void stopAndWait();
+ bool checkProtection(void);
+
+ void nop();
+ void logicScript();
+ void autoRoute();
+ void arAnim();
+ void arTurn();
+ void alt();
+ void anim();
+ void turn();
+ void cursor();
+ void talk();
+ void listen();
+ void stopped();
+ void choose();
+ void frames();
+ void pause();
+ void waitSync();
+ void simpleAnim();
+
+ bool fnCacheChip(uint32 a, uint32 b, uint32 c);
+ bool fnCacheFast(uint32 a, uint32 b, uint32 c);
+ bool fnDrawScreen(uint32 a, uint32 b, uint32 c);
+ bool fnAr(uint32 a, uint32 b, uint32 c);
+ bool fnArAnimate(uint32 a, uint32 b, uint32 c);
+ bool fnIdle(uint32 a, uint32 b, uint32 c);
+ bool fnInteract(uint32 a, uint32 b, uint32 c);
+ bool fnStartSub(uint32 a, uint32 b, uint32 c);
+ bool fnTheyStartSub(uint32 a, uint32 b, uint32 c);
+ bool fnAssignBase(uint32 a, uint32 b, uint32 c);
+ bool fnDiskMouse(uint32 a, uint32 b, uint32 c);
+ bool fnNormalMouse(uint32 a, uint32 b, uint32 c);
+ bool fnBlankMouse(uint32 a, uint32 b, uint32 c);
+ bool fnCrossMouse(uint32 a, uint32 b, uint32 c);
+ bool fnCursorRight(uint32 a, uint32 b, uint32 c);
+ bool fnCursorLeft(uint32 a, uint32 b, uint32 c);
+ bool fnCursorDown(uint32 a, uint32 b, uint32 c);
+ bool fnOpenHand(uint32 a, uint32 b, uint32 c);
+ bool fnCloseHand(uint32 a, uint32 b, uint32 c);
+ bool fnGetTo(uint32 a, uint32 b, uint32 c);
+ bool fnSetToStand(uint32 a, uint32 b, uint32 c);
+ bool fnTurnTo(uint32 a, uint32 b, uint32 c);
+ bool fnArrived(uint32 a, uint32 b, uint32 c);
+ bool fnLeaving(uint32 a, uint32 b, uint32 c);
+ bool fnSetAlternate(uint32 a, uint32 b, uint32 c);
+ bool fnAltSetAlternate(uint32 a, uint32 b, uint32 c);
+ bool fnKillId(uint32 a, uint32 b, uint32 c);
+ bool fnNoHuman(uint32 a, uint32 b, uint32 c);
+ bool fnAddHuman(uint32 a, uint32 b, uint32 c);
+ bool fnAddButtons(uint32 a, uint32 b, uint32 c);
+ bool fnNoButtons(uint32 a, uint32 b, uint32 c);
+ bool fnSetStop(uint32 a, uint32 b, uint32 c);
+ bool fnClearStop(uint32 a, uint32 b, uint32 c);
+ bool fnPointerText(uint32 a, uint32 b, uint32 c);
+ bool fnQuit(uint32 a, uint32 b, uint32 c);
+ bool fnSpeakMe(uint32 targetId, uint32 mesgNum, uint32 animNum);
+ bool fnSpeakMeDir(uint32 targetId, uint32 mesgNum, uint32 animNum);
+ bool fnSpeakWait(uint32 a, uint32 b, uint32 c);
+ bool fnSpeakWaitDir(uint32 a, uint32 b, uint32 c);
+ bool fnChooser(uint32 a, uint32 b, uint32 c);
+ bool fnHighlight(uint32 a, uint32 b, uint32 c);
+ bool fnTextKill(uint32 a, uint32 b, uint32 c);
+ bool fnStopMode(uint32 a, uint32 b, uint32 c);
+ bool fnWeWait(uint32 a, uint32 b, uint32 c);
+ bool fnSendSync(uint32 a, uint32 b, uint32 c);
+ bool fnSendFastSync(uint32 a, uint32 b, uint32 c);
+ bool fnSendRequest(uint32 a, uint32 b, uint32 c);
+ bool fnClearRequest(uint32 a, uint32 b, uint32 c);
+ bool fnCheckRequest(uint32 a, uint32 b, uint32 c);
+ bool fnStartMenu(uint32 a, uint32 b, uint32 c);
+ bool fnUnhighlight(uint32 a, uint32 b, uint32 c);
+ bool fnFaceId(uint32 a, uint32 b, uint32 c);
+ bool fnForeground(uint32 a, uint32 b, uint32 c);
+ bool fnBackground(uint32 a, uint32 b, uint32 c);
+ bool fnNewBackground(uint32 a, uint32 b, uint32 c);
+ bool fnSort(uint32 a, uint32 b, uint32 c);
+ bool fnNoSpriteEngine(uint32 a, uint32 b, uint32 c);
+ bool fnNoSpritesA6(uint32 a, uint32 b, uint32 c);
+ bool fnResetId(uint32 a, uint32 b, uint32 c);
+ bool fnToggleGrid(uint32 a, uint32 b, uint32 c);
+ bool fnPause(uint32 a, uint32 b, uint32 c);
+ bool fnRunAnimMod(uint32 a, uint32 b, uint32 c);
+ bool fnSimpleMod(uint32 a, uint32 b, uint32 c);
+ bool fnRunFrames(uint32 a, uint32 b, uint32 c);
+ bool fnAwaitSync(uint32 a, uint32 b, uint32 c);
+ bool fnIncMegaSet(uint32 a, uint32 b, uint32 c);
+ bool fnDecMegaSet(uint32 a, uint32 b, uint32 c);
+ bool fnSetMegaSet(uint32 a, uint32 b, uint32 c);
+ bool fnMoveItems(uint32 a, uint32 b, uint32 c);
+ bool fnNewList(uint32 a, uint32 b, uint32 c);
+ bool fnAskThis(uint32 a, uint32 b, uint32 c);
+ bool fnRandom(uint32 a, uint32 b, uint32 c);
+ bool fnPersonHere(uint32 a, uint32 b, uint32 c);
+ bool fnToggleMouse(uint32 a, uint32 b, uint32 c);
+ bool fnMouseOn(uint32 a, uint32 b, uint32 c);
+ bool fnMouseOff(uint32 a, uint32 b, uint32 c);
+ bool fnFetchX(uint32 a, uint32 b, uint32 c);
+ bool fnFetchY(uint32 a, uint32 b, uint32 c);
+ bool fnTestList(uint32 a, uint32 b, uint32 c);
+ bool fnFetchPlace(uint32 a, uint32 b, uint32 c);
+ bool fnCustomJoey(uint32 a, uint32 b, uint32 c);
+ bool fnSetPalette(uint32 a, uint32 b, uint32 c);
+ bool fnTextModule(uint32 a, uint32 b, uint32 c);
+ bool fnChangeName(uint32 a, uint32 b, uint32 c);
+ bool fnMiniLoad(uint32 a, uint32 b, uint32 c);
+ bool fnFlushBuffers(uint32 a, uint32 b, uint32 c);
+ bool fnFlushChip(uint32 a, uint32 b, uint32 c);
+ bool fnSaveCoods(uint32 a, uint32 b, uint32 c);
+ bool fnPlotGrid(uint32 a, uint32 b, uint32 c);
+ bool fnRemoveGrid(uint32 a, uint32 b, uint32 c);
+ bool fnEyeball(uint32 a, uint32 b, uint32 c);
+ bool fnCursorUp(uint32 a, uint32 b, uint32 c);
+ bool fnLeaveSection(uint32 a, uint32 b, uint32 c);
+ bool fnEnterSection(uint32 sectionNo, uint32 b, uint32 c);
+ bool fnRestoreGame(uint32 a, uint32 b, uint32 c);
+ bool fnRestartGame(uint32 a, uint32 b, uint32 c);
+ bool fnNewSwingSeq(uint32 a, uint32 b, uint32 c);
+ bool fnWaitSwingEnd(uint32 a, uint32 b, uint32 c);
+ bool fnSkipIntroCode(uint32 a, uint32 b, uint32 c);
+ bool fnBlankScreen(uint32 a, uint32 b, uint32 c);
+ bool fnPrintCredit(uint32 a, uint32 b, uint32 c);
+ bool fnLookAt(uint32 a, uint32 b, uint32 c);
+ bool fnLincTextModule(uint32 a, uint32 b, uint32 c);
+ bool fnTextKill2(uint32 a, uint32 b, uint32 c);
+ bool fnSetFont(uint32 a, uint32 b, uint32 c);
+ bool fnStartFx(uint32 a, uint32 b, uint32 c);
+ bool fnStopFx(uint32 a, uint32 b, uint32 c);
+ bool fnStartMusic(uint32 a, uint32 b, uint32 c);
+ bool fnStopMusic(uint32 a, uint32 b, uint32 c);
+ bool fnFadeDown(uint32 a, uint32 b, uint32 c);
+ bool fnFadeUp(uint32 a, uint32 b, uint32 c);
+ bool fnQuitToDos(uint32 a, uint32 b, uint32 c);
+ bool fnPauseFx(uint32 a, uint32 b, uint32 c);
+ bool fnUnPauseFx(uint32 a, uint32 b, uint32 c);
+ bool fnPrintf(uint32 a, uint32 b, uint32 c);
+
+ void stdSpeak(Compact *target, uint32 textNum, uint32 animNum, uint32 base);
+ void fnExec(uint16 num, uint32 a, uint32 b, uint32 c);
+
+ uint16 *_moduleList[16];
+ uint32 _stack[20];
+ byte _stackPtr;
+
+ Compact *_compact;
+
+ uint32 _objectList[30];
+
+ uint32 _currentSection;
+
+ Common::RandomSource _rnd;
+
+ SkyCompact *_skyCompact;
+ Screen *_skyScreen;
+ Disk *_skyDisk;
+ Text *_skyText;
+ MusicBase *_skyMusic;
+ Sound *_skySound;
+ AutoRoute *_skyAutoRoute;
+ Mouse *_skyMouse;
+ Control *_skyControl;
+
+ friend class Debugger;
+};
+
+} // End of namespace Sky
+
+#endif