/* ScummVM - Scumm Interpreter * Copyright (C) 2003 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * $Header$ * */ #ifndef SKYLOGIC_H #define SKYLOGIC_H #include "sky/sky.h" #include "sky/disk.h" #include "sky/grid.h" #include "sky/autoroute.h" #include "sky/music/musicbase.h" #include "sky/mouse.h" #include "sky/screen.h" enum scriptVariableOffsets { RESULT = 0, SCREEN = 1, LOGIC_LIST_NO = 2, DRAW_LIST_NO = 8, CUR_ID = 12, MOUSE_STATUS = 13, MOUSE_STOP = 14, GET_OFF = 18, 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, CUR_SECTION = 143 }; class SkyAutoRoute; class SkyScreen; class SkyLogic { public: SkyLogic(SkyScreen *skyScreen, SkyDisk *skyDisk, SkyGrid *skyGrid, SkyText *skyText, SkyMusicBase *skyMusic, SkyMouse *skyMouse, SkySound *skySound, uint32 gameVersion); void engine(); 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); static uint32 _scriptVariables[838]; protected: void push(uint32); uint32 pop(); void checkModuleLoaded(uint16 moduleNo); uint16 script(uint16 scriptNo, uint16 offset); bool collide(Compact *cpt); void initScriptVariables(); void mainAnim(); void runGetOff(); void stopAndWait(); uint16 *_moduleList[16]; uint32 _stack[20]; byte _stackPtr; Compact *_compact; uint32 _objectList[30]; uint32 _currentSection; uint32 _saveCurrentSection; uint32 _gameVersion; SkyScreen *_skyScreen; SkyDisk *_skyDisk; SkyGrid *_skyGrid; SkyText *_skyText; SkyMusicBase *_skyMusic; SkySound *_skySound; SkyAutoRoute *_skyAutoRoute; SkyMouse *_skyMouse; }; #endif