Logo Search packages:      
Sourcecode: scummvm version File versions  Download package

logic.h

/* ScummVM - Scumm Interpreter
 * Copyright (C) 2003-2005 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.
 *
 * $Header: /cvsroot/scummvm/scummvm/sky/logic.h,v 1.44.2.1 2005/10/18 02:11:26 sev Exp $
 *
 */

#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);
      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);

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);

      static const LogicTable _logicTable[];
      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();

      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);
      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

Generated by  Doxygen 1.6.0   Back to index