aboutsummaryrefslogtreecommitdiff
path: root/engines/touche/touche.h
diff options
context:
space:
mode:
authorGregory Montoir2006-11-03 21:23:07 +0000
committerGregory Montoir2006-11-03 21:23:07 +0000
commit13d9cdbd26b1c07edf47b9e4731b9d652a294ba5 (patch)
tree4ecb39b0e40f592b36fbd5ef427e2ad4ea29ebd1 /engines/touche/touche.h
parentc71e6599bc160329319c0c05ca453184a45fb0f7 (diff)
downloadscummvm-rg350-13d9cdbd26b1c07edf47b9e4731b9d652a294ba5.tar.gz
scummvm-rg350-13d9cdbd26b1c07edf47b9e4731b9d652a294ba5.tar.bz2
scummvm-rg350-13d9cdbd26b1c07edf47b9e4731b9d652a294ba5.zip
added 'touche' engine for the game 'Touche: The Adventures of the 5th Musketeer'
svn-id: r24592
Diffstat (limited to 'engines/touche/touche.h')
-rw-r--r--engines/touche/touche.h778
1 files changed, 778 insertions, 0 deletions
diff --git a/engines/touche/touche.h b/engines/touche/touche.h
new file mode 100644
index 0000000000..d7dd188ac7
--- /dev/null
+++ b/engines/touche/touche.h
@@ -0,0 +1,778 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 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 TOUCHE_ENGINE_H
+#define TOUCHE_ENGINE_H
+
+#include "common/array.h"
+#include "common/endian.h"
+#include "common/file.h"
+#include "common/rect.h"
+#include "common/util.h"
+
+#include "sound/mixer.h"
+
+#include "engines/engine.h"
+
+namespace Touche {
+
+struct Area {
+ Common::Rect r;
+ int16 srcX, srcY;
+
+ Area() {
+ srcX = srcY = 0;
+ }
+
+ Area(int16 x, int16 y, int16 w, int16 h) {
+ r = Common::Rect(x, y, x + w, y + h);
+ srcX = srcY = 0;
+ }
+
+ bool clip(const Common::Rect &rect) {
+ const int dx = r.left - rect.left;
+ if (dx < 0) {
+ srcX -= dx;
+ }
+ const int dy = r.top - rect.top;
+ if (dy < 0) {
+ srcY -= dy;
+ }
+ if (rect.left > r.left) {
+ r.left = rect.left;
+ }
+ if (rect.top > r.top) {
+ r.top = rect.top;
+ }
+ if (rect.right < r.right) {
+ r.right = rect.right;
+ }
+ if (rect.bottom < r.bottom) {
+ r.bottom = rect.bottom;
+ }
+ return (r.right > r.left && r.bottom > r.top);
+ }
+};
+
+struct KeyChar {
+ uint16 num;
+ uint16 flags;
+ int16 currentAnimCounter;
+ int16 strNum;
+ int16 walkDataNum;
+ int16 spriteNum;
+ Common::Rect prevBoundingRect;
+ Common::Rect boundingRect;
+ int16 xPos;
+ int16 yPos;
+ int16 zPos;
+ int16 xPosPrev;
+ int16 yPosPrev;
+ int16 zPosPrev;
+ int16 prevWalkDataNum;
+ uint16 textColor;
+ int16 inventoryItems[4];
+ int16 money;
+ int16 pointsDataNum;
+ int16 currentWalkBox;
+ uint16 prevPointsDataNum;
+ int16 currentAnim;
+ int16 facingDirection;
+ int16 currentAnimSpeed;
+ int16 framesList[16];
+ int16 framesListCount;
+ int16 currentFrame;
+ int16 anim1Start;
+ int16 anim1Count;
+ int16 anim2Start;
+ int16 anim2Count;
+ int16 anim3Start;
+ int16 anim3Count;
+ int16 followingKeyCharNum;
+ int16 followingKeyCharPos;
+ uint16 sequenceDataIndex;
+ uint16 sequenceDataOffset;
+ int16 walkPointsListCount;
+ int16 walkPointsList[40];
+ uint16 scriptDataStartOffset;
+ uint16 scriptDataOffset;
+ int16 *scriptStackPtr;
+ int16 delay;
+ int16 waitingKeyChar;
+ int16 waitingKeyCharPosTable[3];
+ int16 scriptStackTable[40];
+};
+
+struct Script {
+ uint8 opcodeNum;
+ uint32 dataOffset;
+ int16 keyCharNum;
+ uint8 *dataPtr;
+ int16 *stackDataPtr;
+ int16 *stackDataBasePtr;
+ int16 quitFlag;
+ int16 stackDataTable[500];
+
+ void init(uint8 *data) {
+ dataPtr = data;
+ stackDataPtr = stackDataBasePtr = &stackDataTable[499];
+ dataOffset = 0;
+ quitFlag = 0;
+ }
+
+ uint8 readByte(uint32 offs) const {
+ return *(dataPtr + offs);
+ }
+
+ int16 readWord(uint32 offs) const {
+ return READ_LE_UINT16(dataPtr + offs);
+ }
+
+ uint8 readNextByte() {
+ uint8 val = readByte(dataOffset);
+ ++dataOffset;
+ return val;
+ }
+
+ int16 readNextWord() {
+ int16 val = readWord(dataOffset);
+ dataOffset += 2;
+ return val;
+ }
+};
+
+struct TalkEntry {
+ int16 otherKeyChar;
+ int16 talkingKeyChar;
+ int16 num;
+};
+
+struct ConversationChoice {
+ int16 num;
+ int16 msg;
+};
+
+struct AnimationEntry {
+ int16 num;
+ int16 x;
+ int16 y;
+ int16 dx;
+ int16 dy;
+ int16 posNum;
+ int16 delayCounter;
+ int16 displayCounter;
+ Common::Rect displayRect;
+};
+
+struct SequenceEntry {
+ int16 sprNum;
+ int16 seqNum;
+};
+
+struct SpriteData {
+ uint32 size;
+ uint8 *ptr;
+ uint16 bitmapWidth;
+ uint16 bitmapHeight;
+ uint16 w;
+ uint16 h;
+};
+
+struct MidiContext {
+ uint8 unk2;
+ uint8 unkA;
+ uint8 unkB;
+ uint16 volume;
+ uint8 unkF;
+ uint16 currentVolume;
+};
+
+struct ProgramPointData {
+ int16 x, y, z;
+ int16 priority;
+};
+
+struct ProgramWalkData {
+ int16 point1;
+ int16 point2;
+ int16 clippingRect;
+ int16 area1;
+ int16 area2;
+};
+
+struct ProgramAreaData {
+ Area area;
+ int16 id;
+ int16 state;
+ int16 animCount;
+ int16 animNext;
+};
+
+struct ProgramBackgroundData {
+ Area area;
+ int16 type;
+ int16 offset;
+ int16 scaleMul;
+ int16 scaleDiv;
+};
+
+struct ProgramHitBoxData {
+ int16 item;
+ int16 talk;
+ uint16 state;
+ int16 str;
+ int16 defaultStr;
+ int16 actions[8];
+ Common::Rect hitBoxes[2];
+};
+
+struct ProgramActionScriptOffsetData {
+ int16 object1;
+ int16 action;
+ int16 object2;
+ uint16 offset;
+};
+
+struct ProgramKeyCharScriptOffsetData {
+ int16 keyChar;
+ uint16 offset;
+};
+
+struct ProgramConversationData {
+ int16 num;
+ uint16 offset;
+ int16 msg;
+};
+
+enum {
+ kDebugEngine = 1 << 0,
+ kDebugGraphics = 1 << 1,
+ kDebugResource = 1 << 2,
+ kDebugOpcodes = 1 << 3,
+ kDebugUserIntf = 1 << 4
+};
+
+enum ResourceType {
+ kResourceTypeRoomImage = 0,
+ kResourceTypeSequence,
+ kResourceTypeSpriteImage,
+ kResourceTypeIconImage,
+ kResourceTypeRoomInfo,
+ kResourceTypeProgram,
+ kResourceTypeMusic,
+ kResourceTypeSound
+};
+
+enum TalkMode {
+ kTalkModeTextOnly = 0,
+ kTalkModeVoiceOnly,
+ kTalkModeVoiceAndText,
+ kTalkModeCount
+};
+
+enum ScriptFlag {
+ kScriptStopped = 1 << 0,
+ kScriptPaused = 1 << 1
+};
+
+class ToucheEngine: public Engine {
+public:
+
+ enum {
+ NUM_OPCODES = 135,
+ NUM_FLAGS = 2000,
+ NUM_KEYCHARS = 32,
+ NUM_AREAS = 10,
+ NUM_SPRITES = 5,
+ NUM_SEQUENCES = 7,
+ NUM_CONVERSATION_CHOICES = 40,
+ NUM_TALK_ENTRIES = 16,
+ NUM_ANIMATION_ENTRIES = 4,
+ NUM_INVENTORY_ITEMS = 100,
+ NUM_DIRTY_RECTS = 50,
+ NUM_GAMESTATE_FILES = 100
+ };
+
+ typedef void (ToucheEngine::*OpcodeProc)();
+
+ ToucheEngine(OSystem *system, Common::Language language);
+ virtual ~ToucheEngine();
+
+ virtual int init();
+ virtual int go();
+
+protected:
+
+ void restart();
+ void mainLoop();
+ void processEvents();
+ void runCycle();
+ int16 getRandomNumber(int max);
+ void changePaletteRange();
+ void playSoundInRange();
+ void resetSortedKeyCharsTable();
+ void setupEpisode(int num);
+ void setupNewEpisode();
+ void drawKeyChar(KeyChar *key);
+ void sortKeyChars();
+ void runKeyCharScript(KeyChar *key);
+ void runCurrentKeyCharScript(int mode);
+ void executeScriptOpcode(int16 param);
+ void initKeyChars(int keyChar);
+ void setKeyCharTextColor(int keyChar, uint16 color);
+ void waitForKeyCharPosition(int keyChar);
+ void setKeyCharBox(int keyChar, int value);
+ void setKeyCharFrame(int keyChar, int16 type, int16 value1, int16 value2);
+ void setKeyCharFacingDirection(int keyChar, int16 dir);
+ void initKeyCharScript(int keyChar, int16 spriteNum, int16 seqDataIndex, int16 seqDataOffs);
+ uint16 findProgramKeyCharScriptOffset(int keyChar) const;
+ bool scrollRoom(int keyChar);
+ void drawIcon(int x, int y, int num);
+ void centerScreenToKeyChar(int keyChar);
+ void waitForKeyCharsSet();
+ void redrawRoom();
+ void fadePalette(int firstColor, int lastColor, int scale, int scaleInc, int fadingStepsCount);
+ void fadePaletteFromFlags();
+ void moveKeyChar(uint8 *dst, int dstPitch, KeyChar *key);
+ void changeKeyCharFrame(KeyChar *key, int keyChar);
+ void setKeyCharRandomFrame(KeyChar *key);
+ void setKeyCharMoney();
+ const char *getString(int num) const;
+ int getStringWidth(int m, int num) const;
+ void drawString(uint8 *dst, int dstPitch, int m, uint16 color, int x, int y, int16 num);
+ void drawGameString(int m, uint16 color, int x1, int y, const char *str);
+ int restartKeyCharScriptOnAction(int action, int obj1, int obj2);
+ void buildSpriteScalingTable(int z1, int z2);
+ void drawSpriteOnBackdrop(int num, int x, int y);
+ void updateTalkFrames(int keyChar);
+ void setKeyCharTalkingFrame(int keyChar);
+ void lockUnlockHitBox(int num, int lock);
+ void drawHitBoxes();
+ void setCursor(int num);
+ void updateCursor(int num);
+ void handleMouseButtonClicked();
+ void handleMouseButtonPressed();
+ void handleMouseInput(int flag);
+ void handleMouseInputRoomArea(int flag);
+ void handleMouseInputInventoryArea(int flag);
+ void scrollScreenToPos(int num);
+ void clearRoomArea();
+ void startNewMusic();
+ void startNewSound();
+ void updateSpeech();
+ int handleActionMenuUnderCursor(const int16 *actions, int offs, int y, int str);
+
+ void redrawBackground();
+ void processAreaTable();
+ void clearAreaTable();
+ void addToAreaTable(const Area *area);
+ void addRoomArea(int num, int flag);
+ void updateRoomAreas(int num, int flags);
+ void setRoomAreaState(int num, uint16 state);
+ void findAndRedrawRoomRegion(int num);
+ void updateRoomRegions();
+ void redrawRoomRegion(int num, bool markForRedraw);
+
+ void initInventoryObjectsTable();
+ void initInventoryLists();
+ void drawInventory(int index, int flag);
+ void drawAmountOfMoneyInInventory();
+ void packInventoryItems(int index);
+ void appendItemToInventoryList(int index);
+ void addItemToInventory(int inventory, int16 item);
+ void removeItemFromInventory(int inventory, int16 item);
+ void changeInventoryItemState(int flag, int itemNum, int itemRnd, int inventoryItem);
+
+ void resetTalkingVars();
+ int updateKeyCharTalk(int pauseFlag);
+ const char *formatTalkText(int mode, int *y, int *h, const char *text);
+ void addToTalkTable(int talkingKeyChar, int num, int otherKeyChar);
+ void removeFromTalkTable(int keyChar);
+ void addConversationChoice(int16 num);
+ void removeConversationChoice(int16 num);
+ void runConversationScript(uint16 offset);
+ void findConversationByNum(int16 num);
+ void clearConversationChoices();
+ void drawCharacterConversationRepeat2();
+ void drawCharacterConversationRepeat();
+ void drawCharacterConversation();
+ void drawConversationString(int num, uint16 color);
+ void clearConversationArea();
+ void setupConversationScript(int num);
+ void handleConversation();
+
+ void buildWalkPointsList(int keyChar);
+ int findWalkDataNum(int pointNum1, int pointNum2);
+ void changeWalkPath(int num1, int num2, int16 val);
+ void adjustKeyCharPosToWalkBox(KeyChar *key, int moveType);
+ void lockWalkPath(int num1, int num2);
+ void unlockWalkPath(int num1, int num2);
+ void resetPointsData(int num);
+ bool sortPointsData(int num1, int num2);
+ void updateKeyCharWalkPath(KeyChar *key, int16 dx, int16 dy, int16 dz);
+ void markWalkPoints(int keyChar);
+ void buildWalkPath(int dstPosX, int dstPosY, int keyChar);
+
+ void addToAnimationTable(int num, int posNum, int keyChar, int delayCounter);
+ void copyAnimationImage(int dstX, int dstY, int w, int h, const uint8 *src, int srcX, int srcY, int fillColor);
+ void drawAnimationImage(AnimationEntry *anim);
+ void processAnimationTable();
+ void clearAnimationTable();
+
+ void addToDirtyRect(const Common::Rect &r);
+ void clearDirtyRects();
+ void setPalette(int firstColor, int colorCount, int redScale, int greenScale, int blueScale);
+ void copyPaletteColor(int srcColorIndex, int dstColorIndex);
+ void updateScreenArea(const uint8 *src, int srcPitch, int srcX, int srcY, int dstX, int dstY, int w, int h);
+ void updateEntireScreen();
+ void updateDirtyScreenAreas();
+ void updatePalette();
+
+ void saveGameStateData(Common::WriteStream *stream);
+ void loadGameStateData(Common::ReadStream *stream);
+ bool saveGameState(int num, const char *description);
+ bool loadGameState(int num, const char *description);
+ void readGameStateDescription(int num, char *description, int len);
+ void generateGameStateFileName(int num, char *dst, int len, bool prefixOnly = false) const;
+
+ void op_nop();
+ void op_jnz();
+ void op_jz();
+ void op_jmp();
+ void op_true();
+ void op_false();
+ void op_push();
+ void op_testFalse();
+ void op_add();
+ void op_sub();
+ void op_mul();
+ void op_div();
+ void op_mod();
+ void op_and();
+ void op_or();
+ void op_not();
+ void op_testGreater();
+ void op_testEquals();
+ void op_testLower();
+ void op_fetchScriptWord();
+ void op_testGreaterOrEquals();
+ void op_testLowerOrEquals();
+ void op_testNotEquals();
+ void op_endConversation();
+ void op_stopScript();
+ void op_getFlag();
+ void op_setFlag();
+ void op_fetchScriptByte();
+ void op_getScriptValue();
+ void op_setScriptValue();
+ void op_getKeyCharWalkBox();
+ void op_startSound();
+ void op_initKeyCharTalk();
+ void op_loadRoom();
+ void op_updateRoom();
+ void op_startTalk();
+ void op_loadSprite();
+ void op_loadSequence();
+ void op_setKeyCharBox();
+ void op_initKeyCharScript();
+ void op_setKeyCharFrame();
+ void op_setKeyCharDirection();
+ void op_clearConversationChoices();
+ void op_addConversationChoice();
+ void op_removeConversationChoice();
+ void op_getInventoryItem();
+ void op_setInventoryItem();
+ void op_startEpisode();
+ void op_setConversationNum();
+ void op_enableInventoryItem();
+ void op_enableInput();
+ void op_disableInput();
+ void op_faceKeyChar();
+ void op_getKeyCharCurrentAnim();
+ void op_getCurrentKeyChar();
+ void op_isKeyCharActive();
+ void op_setPalette();
+ void op_changeWalkPath();
+ void op_lockWalkPath();
+ void op_initializeKeyChar();
+ void op_setupWaitingKeyChars();
+ void op_updateRoomAreas();
+ void op_unlockWalkPath();
+ void op_addItemToInventoryAndRedraw();
+ void op_giveItemTo();
+ void op_resetHitBoxes();
+ void op_fadePalette();
+ void op_disableInventoryItem();
+ void op_getInventoryItemFlags();
+ void op_drawInventory();
+ void op_stopKeyCharScript();
+ void op_restartKeyCharScript();
+ void op_getKeyCharCurrentWalkBox();
+ void op_getKeyCharPointsDataNum();
+ void op_setupFollowingKeyChar();
+ void op_startAnimation();
+ void op_setKeyCharTextColor();
+ void op_startMusic();
+ void op_copyPaletteColor();
+ void op_delay();
+ void op_lockHitBox();
+ void op_removeItemFromInventory();
+ void op_unlockHitBox();
+ void op_addRoomArea();
+ void op_setKeyCharFlags();
+ void op_unsetKeyCharFlags();
+ void op_loadVoice();
+ void op_drawSpriteOnBackdrop();
+ void op_startPaletteFadeIn();
+ void op_startPaletteFadeOut();
+ void op_setRoomAreaState();
+
+ void res_openDataFile();
+ void res_closeDataFile();
+ void res_allocateTables();
+ void res_deallocateTables();
+ uint32 res_getDataOffset(ResourceType type, int num, uint32 *size = NULL);
+ void res_loadSpriteImage(int num, uint8 *dst);
+ void res_loadProgram(int num);
+ void res_decodeProgramData();
+ void res_loadRoom(int num);
+ void res_loadSprite(int num, int index);
+ void res_loadSequence(int num, int index);
+ void res_decodeScanLineImageRLE(uint8 *dst, int lineWidth);
+ void res_loadBackdrop();
+ void res_loadImage(int num, uint8 *dst);
+ void res_loadImageHelper(uint8 *imgData, int imgWidth, int imgHeight);
+ void res_loadSound(int flag, int num);
+ void res_loadMusic(int num);
+ void res_loadSpeech(int num);
+ void res_loadSpeechSegment(int num);
+ void res_stopSpeech();
+
+ bool ui_processEvents();
+ void ui_drawButtonBorders(const Common::Rect *r, int count);
+ void ui_drawMusicVolumeBar();
+ void ui_drawTalkMode();
+ void ui_drawAllBorders();
+ void ui_drawSaveGamesList(int page);
+ void ui_drawSaveLoadMenu(int page, int saveOrLoad);
+ int ui_getButtonPressed(const Common::Rect *r, int count) const;
+ void ui_drawButtonText(const int16 *texts, const Common::Rect *r, int count, bool centerTexts);
+ void ui_drawArrow(int x, int y, int dx, uint8 color);
+ void ui_drawOptionsMenu();
+ void ui_drawCurrentGameStateDescription();
+ int ui_handleSaveLoad(int saveOrLoad);
+ void ui_handleOptions(int forceDisplay);
+ void ui_drawActionsPanel(int dstX, int dstY, int deltaX, int deltaY);
+ void ui_drawConversationPanelBorder(int dstY, int srcX, int srcY);
+ void ui_drawConversationPanel();
+ void ui_printStatusString(const char *str);
+ void ui_clearStatusString();
+ int ui_displayQuitDialog();
+ void ui_displayTextMode(int str);
+
+
+ Common::Language _language;
+ Common::RandomSource _rnd;
+
+ Common::Point _inp_mousePos;
+ bool _inp_mouseButtonClicked;
+ bool _inp_mouseButtonPressed;
+ int _disabledInputCounter;
+ bool _hideInventoryTexts;
+
+ bool _displayQuitDialog;
+ int _saveLoadCurrentPage;
+ int _saveLoadCurrentSlot;
+ bool _saveLoadMarks[NUM_GAMESTATE_FILES];
+ char _saveLoadCurrentDescription[33];
+ int _saveLoadCurrentDescriptionLen;
+
+ int _defaultSoundPriority;
+ int _newMusicNum;
+ int _currentMusicNum;
+ int _newSoundNum;
+ int _newSoundDelay;
+ int _newSoundPriority;
+ int _playSoundCounter;
+ Audio::SoundHandle _sfxHandle;
+ Audio::SoundHandle _speechHandle;
+ MidiContext _snd_midiContext;
+
+ int16 _inventoryList1[101];
+ int16 _inventoryList2[101];
+ int16 _inventoryList3[7];
+ int16 *_inventoryListPtrs[3];
+ int16 _inventoryListCount[9];
+ int16 _inventoryItemsInfoTable[NUM_INVENTORY_ITEMS];
+ int16 *_inventoryVar1;
+ int16 *_inventoryVar2;
+ int _currentCursorObject;
+
+ int _talkTextMode;
+ int _talkListEnd;
+ int _talkListCurrent;
+ bool _talkTextRectDefined;
+ bool _talkTextDisplayed;
+ bool _talkTextInitialized;
+ bool _skipTalkText;
+ int _talkTextSpeed;
+ int _keyCharTalkCounter;
+ int _talkTableLastTalkingKeyChar;
+ int _talkTableLastOtherKeyChar;
+ int _talkTableLastStringNum;
+ int _objectDescriptionNum;
+ char _talkTextBuffer[200];
+ TalkEntry _talkTable[NUM_TALK_ENTRIES];
+
+ bool _conversationChoicesUpdated;
+ int _conversationReplyNum;
+ bool _conversationEnded;
+ int _conversationNum;
+ int _drawCharacterConversionRepeatCounter;
+ int _currentConversation;
+ bool _disableConversationScript;
+ bool _conversationAreaCleared;
+ ConversationChoice _conversationChoicesTable[NUM_CONVERSATION_CHOICES];
+
+ int16 _flagsTable[NUM_FLAGS];
+ KeyChar _keyCharsTable[NUM_KEYCHARS];
+ KeyChar *_sortedKeyCharsTable[NUM_KEYCHARS];
+ int _currentKeyCharNum;
+
+ int _newEpisodeNum;
+ int _currentEpisodeNum;
+
+ Area _areaTable[NUM_AREAS];
+ int _areaTableCount;
+
+ int _currentAmountOfMoney;
+ int _giveItemToKeyCharNum;
+ int _giveItemToObjectNum;
+ int _giveItemToCounter;
+ int _currentRoomNum;
+ int _waitingSetKeyCharNum1;
+ int _waitingSetKeyCharNum2;
+ int _waitingSetKeyCharNum3;
+ uint8 _updatedRoomAreasTable[200];
+ Common::Rect _moveKeyCharRect;
+ Common::Point _screenOffset;
+ int _currentObjectNum;
+ int _processRandomPaletteCounter;
+ int16 _spriteScalingIndex[1000];
+ int16 _spriteScalingTable[1000];
+
+ bool _fastWalkMode;
+
+ AnimationEntry _animationTable[NUM_ANIMATION_ENTRIES];
+
+ Script _script;
+
+ Common::File _fData;
+ Common::File _fSpeech[2];
+ int _compressedSpeechData;
+
+ uint8 *_textData;
+ uint8 *_backdropBuffer;
+ uint8 *_menuKitData;
+ uint8 *_convKitData;
+ uint8 *_sequenceDataTable[5];
+ uint8 *_programData;
+ uint32 _programDataSize;
+ uint8 *_mouseData;
+ uint8 *_iconData;
+
+ SequenceEntry _sequenceEntryTable[NUM_SEQUENCES];
+ int _currentBitmapWidth;
+ int _currentBitmapHeight;
+ int _currentImageWidth;
+ int _currentImageHeight;
+ bool _speechPlaying;
+ int _roomWidth;
+
+ uint8 *_programTextDataPtr;
+ Common::Array<Common::Rect> _programRectsTable;
+ Common::Array<ProgramPointData> _programPointsTable;
+ Common::Array<ProgramWalkData> _programWalkTable;
+ Common::Array<ProgramAreaData> _programAreaTable;
+ Common::Array<ProgramBackgroundData> _programBackgroundTable;
+ Common::Array<ProgramHitBoxData> _programHitBoxTable;
+ Common::Array<ProgramActionScriptOffsetData> _programActionScriptOffsetTable;
+ Common::Array<ProgramKeyCharScriptOffsetData> _programKeyCharScriptOffsetTable;
+ Common::Array<ProgramConversationData> _programConversationTable;
+ Common::Rect _cursorObjectRect;
+ Common::Rect _talkTextRect, _talkTextRect2;
+ Common::Rect _screenRect;
+ Common::Rect _roomAreaRect;
+
+ bool _roomNeedRedraw;
+ int _fullRedrawCounter;
+ int _redrawScreenCounter1;
+ uint8 *_offscreenBuffer;
+ uint8 _paletteBuffer[256 * 4];
+
+ static OpcodeProc _opcodesTable[NUM_OPCODES];
+ static SpriteData _spritesTable[NUM_SPRITES];
+ static const uint8 _directionsTable[];
+ static char _saveLoadDescriptionsTable[10][33];
+ static const Common::Rect _inventoryAreasTable[13];
+};
+
+/*
+ FLAGS LIST
+
+ 115 : don't set backdrop palette on room loading
+ 118 : current amount of money
+ 119 : current cursor object
+ 176 : keychar max direction
+ 266 : keychar direction override
+ 267 : don't decode picture/sprite images (in load_image_helper)
+ 268 : don't decode picture/sprite images
+ 270 : play random sound
+ 290 : process random palette
+ 295 : game cycle counter (incremented)
+ 296 : game cycle counter (incremented)
+ 297 : game cycle counter (incremented)
+ 298 : game cycle counter (decremented)
+ 299 : game cycle counter (decremented)
+ 600 : last ascii key press
+ 603 : fade palette "scale" increment (in vbl handler)
+ 605 : fade palette "scale"
+ 606 : inventory redraw disabled
+ 607 : first palette color to fade
+ 608 : last palette color to fade
+ 609 : max fade palette "scale"
+ 610 : min fade palette "scale"
+ 611 : quit game
+ 612 : random number modulo
+ 613 : last generated random number
+ 614 : room scroll x offset
+ 615 : room scroll y offset
+ 616 : disable room scrolling
+ 617 : current speech file number
+ 621 : enable french version "features"
+ 902 : debug/draw walk boxes
+ 911 : load scripts/programs from external files
+*/
+
+} // namespace Touche
+
+#endif