scummvm/sky/logic.h

338 lines
10 KiB
C
Raw Normal View History

/* ScummVM - Scumm Interpreter
2006-01-18 17:39:49 +00:00
* 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.
*
* $Header$
*
*/
#ifndef SKYLOGIC_H
#define SKYLOGIC_H
#include "common/stdafx.h"
#include "common/util.h"
namespace Sky {
struct Compact;
2003-05-26 17:56:17 +00:00
enum scriptVariableOffsets {
RESULT = 0,
SCREEN = 1,
LOGIC_LIST_NO = 2,
2003-06-04 17:13:24 +00:00
MOUSE_LIST_NO = 6,
DRAW_LIST_NO = 8,
2003-05-26 17:56:17 +00:00
CUR_ID = 12,
MOUSE_STATUS = 13,
MOUSE_STOP = 14,
2003-06-04 17:13:24 +00:00
BUTTON = 15,
SPECIAL_ITEM = 17,
2003-05-26 17:56:17 +00:00
GET_OFF = 18,
CURSOR_ID = 22,
SAFEX = 25,
SAFEY = 26,
2003-05-26 17:56:17 +00:00
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,
2003-05-26 17:56:17 +00:00
THE_CHOSEN_ONE = 51,
TEXT1 = 53,
MENU_LENGTH = 100,
SCROLL_OFFSET = 101,
MENU = 102,
OBJECT_HELD = 103,
LAMB_GREET = 109,
2003-06-06 20:54:52 +00:00
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
2003-05-26 17:56:17 +00:00
};
2004-12-16 04:22:32 +00:00
#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;
2004-12-16 04:22:32 +00:00
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; };
2004-12-16 04:22:32 +00:00
uint16 mouseScript(uint32 scrNum, Compact *scriptComp);
2004-12-16 04:22:32 +00:00
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;
2004-12-16 04:22:32 +00:00
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);
2003-05-30 13:47:33 +00:00
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);
2003-05-30 14:20:32 +00:00
void stdSpeak(Compact *target, uint32 textNum, uint32 animNum, uint32 base);
void fnExec(uint16 num, uint32 a, uint32 b, uint32 c);
2003-04-26 14:00:59 +00:00
uint16 *_moduleList[16];
uint32 _stack[20];
byte _stackPtr;
Compact *_compact;
2003-05-26 17:41:19 +00:00
uint32 _objectList[30];
uint32 _currentSection;
2003-06-06 20:54:52 +00:00
Common::RandomSource _rnd;
SkyCompact *_skyCompact;
Screen *_skyScreen;
Disk *_skyDisk;
Text *_skyText;
MusicBase *_skyMusic;
Sound *_skySound;
AutoRoute *_skyAutoRoute;
Mouse *_skyMouse;
Control *_skyControl;
2004-12-16 04:22:32 +00:00
friend class Debugger;
};
} // End of namespace Sky
#endif