aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/kyra_mr.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/kyra_mr.h')
-rw-r--r--engines/kyra/kyra_mr.h733
1 files changed, 733 insertions, 0 deletions
diff --git a/engines/kyra/kyra_mr.h b/engines/kyra/kyra_mr.h
new file mode 100644
index 0000000000..e166998bc8
--- /dev/null
+++ b/engines/kyra/kyra_mr.h
@@ -0,0 +1,733 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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 KYRA_KYRA_V3_H
+#define KYRA_KYRA_V3_H
+
+#include "kyra/kyra_v2.h"
+#include "kyra/screen_mr.h"
+#include "kyra/script.h"
+
+#include "common/hashmap.h"
+#include "common/list.h"
+
+namespace Kyra {
+
+class SoundDigital;
+class Screen_MR;
+class MainMenu;
+class WSAMovieV2;
+class TextDisplayer_MR;
+class Debugger_v3;
+class GUI_v3;
+struct Button;
+
+class KyraEngine_MR : public KyraEngine_v2 {
+friend class Debugger_v3;
+friend class TextDisplayer_MR;
+friend class GUI_v3;
+public:
+ KyraEngine_MR(OSystem *system, const GameFlags &flags);
+ ~KyraEngine_MR();
+
+ Screen *screen() { return _screen; }
+ Screen_v2 *screen_v2() const { return _screen; }
+ SoundDigital *soundDigital() { return _soundDigital; }
+ int language() const { return _lang; }
+
+ int go();
+
+ void playVQA(const char *name);
+
+protected:
+ // KyraEngine_v2 API
+ int getFirstSpecialSceneScript() const { return 9; }
+
+ // --
+ Screen_MR *_screen;
+ SoundDigital *_soundDigital;
+
+ int init();
+
+ void preinit();
+ void startup();
+ void runStartupScript(int script, int unk1);
+
+ void setupOpcodeTable();
+
+ // run
+ bool _showOutro;
+ bool _runFlag;
+ int _deathHandler;
+
+ void runLoop();
+ void handleInput(int x, int y);
+ bool _unkHandleSceneChangeFlag;
+ int inputSceneChange(int x, int y, int unk1, int unk2);
+
+ void update();
+ void updateWithText();
+ void updateMouse();
+
+ void delay(uint32 millis, bool update = false, bool isMainLoop = false);
+
+ // - Input
+ int checkInput(Button *buttonList, bool mainLoop = false);
+
+ // sound specific
+private:
+ void playMenuAudioFile();
+
+ int _musicSoundChannel;
+ int _fadeOutMusicChannel;
+ const char *_menuAudioFile;
+
+ static const char *_soundList[];
+ static const int _soundListSize;
+
+ void snd_playWanderScoreViaMap(int track, int force);
+ void stopMusicTrack();
+
+ int musicUpdate(int forceRestart);
+ void fadeOutMusic(int ticks);
+
+ void snd_playSoundEffect(int item, int volume);
+
+ static const uint8 _sfxFileMap[];
+ static const int _sfxFileMapSize;
+ static const char *_sfxFileList[];
+ static const int _sfxFileListSize;
+
+ int _voiceSoundChannel;
+
+ void playVoice(int high, int low);
+ void snd_playVoiceFile(int file);
+ bool snd_voiceIsPlaying();
+ void snd_stopVoice();
+
+ int _curStudioSFX;
+ void playStudioSFX(const char *str);
+
+ // gui
+ GUI_v3 *_gui;
+
+ Button *_mainButtonData;
+ Button *_mainButtonList;
+ bool _mainButtonListInitialized;
+ void initMainButtonList(bool disable);
+
+ bool _enableInventory;
+ int buttonInventory(Button *button);
+ int buttonMoodChange(Button *button);
+ int buttonShowScore(Button *button);
+ int buttonJesterStaff(Button *button);
+
+ // -> main menu
+ void initMainMenu();
+ void uninitMainMenu();
+
+ WSAMovieV2 *_menuAnim;
+
+ // timer
+ void setupTimers();
+
+ void setWalkspeed(uint8);
+ void setCommandLineRestoreTimer(int secs);
+
+ void timerRestoreCommandLine(int arg);
+ void timerRunSceneScript7(int arg);
+ void timerFleaDeath(int arg);
+
+ uint32 _nextIdleAnim;
+ void setNextIdleAnimTimer();
+
+ // pathfinder
+ bool lineIsPassable(int x, int y);
+
+private:
+ // main menu
+ static const char *_mainMenuStrings[];
+
+ // animator
+ uint8 *_gamePlayBuffer;
+ void restorePage3();
+
+ AnimObj *_animObjects;
+
+ void clearAnimObjects();
+
+ void animSetupPaletteEntry(AnimObj *anim);
+
+ void drawAnimObjects();
+ void drawSceneAnimObject(AnimObj *obj, int x, int y, int drawLayer);
+ void drawCharacterAnimObject(AnimObj *obj, int x, int y, int drawLayer);
+
+ void refreshAnimObjects(int force);
+
+ bool _loadingState;
+ void updateCharacterAnim(int charId);
+
+ void updateSceneAnim(int anim, int newFrame);
+ void setupSceneAnimObject(int anim, uint16 flags, int x, int y, int x2, int y2, int w, int h, int unk10, int specialSize, int unk14, int shape, const char *filename);
+ void removeSceneAnimObject(int anim, int refresh);
+
+ int _charBackUpWidth2, _charBackUpHeight2;
+ int _charBackUpWidth, _charBackUpHeight;
+
+ void setCharacterAnimDim(int w, int h);
+ void resetCharacterAnimDim();
+
+ bool _nextIdleType;
+ void showIdleAnim();
+
+ void addItemToAnimList(int item);
+ void deleteItemAnimEntry(int item);
+
+ // interface
+ uint8 *_interface;
+ uint8 *_interfaceCommandLine;
+
+ void loadInterfaceShapes();
+ void loadInterface();
+
+ void showMessage(const char *string, uint8 c0, uint8 c1);
+ void showMessageFromCCode(int string, uint8 c0, int);
+ void updateItemCommand(int item, int str, uint8 c0);
+
+ void updateCommandLine();
+ void restoreCommandLine();
+ void updateCLState();
+
+ int _commandLineY;
+ const char *_shownMessage;
+ bool _restoreCommandLine;
+ bool _inventoryState;
+ int _inventoryScrollSpeed;
+
+ void showInventory();
+ void hideInventory();
+
+ void drawMalcolmsMoodText();
+ void drawMalcolmsMoodPointer(int frame, int page);
+ void drawJestersStaff(int type, int page);
+
+ void drawScore(int page, int x, int y);
+ void drawScoreCounting(int oldScore, int newScore, int drawOld, const int x);
+ int getScoreX(const char *str);
+
+ static const uint8 _inventoryX[];
+ static const uint8 _inventoryY[];
+ void redrawInventory(int page);
+ void clearInventorySlot(int slot, int page);
+ void drawInventorySlot(int page, int item, int slot);
+
+ WSAMovieV2 *_invWsa;
+ int _invWsaFrame;
+
+ // localization
+ uint8 *_scoreFile;
+ uint8 *_cCodeFile;
+ uint8 *_scenesFile;
+ uint8 *_itemFile;
+ uint8 *_actorFile;
+ uint32 _actorFileSize;
+ uint8 *_sceneStrings;
+
+ uint8 *getTableEntry(uint8 *buffer, int id);
+ void getTableEntry(Common::SeekableReadStream *stream, int id, char *dst);
+
+ // items
+ int8 *_itemBuffer1;
+ int8 *_itemBuffer2;
+ struct Item {
+ uint16 id;
+ uint16 sceneId;
+ int16 x, y;
+ uint16 unk8;
+ };
+
+ Item *_itemList;
+ uint16 _hiddenItems[100];
+
+ void resetItem(int index);
+ void resetItemList();
+ static const uint8 _trashItemList[];
+ void removeTrashItems();
+
+ int findFreeItem();
+ int findItem(uint16 item, uint16 scene);
+ int findItem(uint16 item);
+
+ int countAllItems();
+
+ void initItems();
+
+ int checkItemCollision(int x, int y);
+
+ bool dropItem(int unk1, uint16 item, int x, int y, int unk2);
+ bool processItemDrop(uint16 sceneId, uint16 item, int x, int y, int unk1, int unk2);
+ void itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, uint16 item, int remove);
+ void exchangeMouseItem(int itemPos, int runScript);
+ bool pickUpItem(int x, int y, int runScript);
+
+ bool isDropable(int x, int y);
+
+ static const uint8 _itemMagicTable[];
+ bool itemListMagic(int handItem, int itemSlot);
+ bool itemInventoryMagic(int handItem, int invSlot);
+
+ static const uint8 _itemStringMap[];
+ static const uint _itemStringMapSize;
+ static const uint8 _itemStringPickUp[];
+ static const uint8 _itemStringDrop[];
+ static const uint8 _itemStringInv[];
+
+ int getItemCommandStringPickUp(uint16 item);
+ int getItemCommandStringDrop(uint16 item);
+ int getItemCommandStringInv(uint16 item);
+
+ // -> hand item
+ void setMouseCursor(uint16 item);
+
+ void setHandItem(uint16 item);
+ void removeHandItem();
+ void setItemMouseCursor();
+
+ int _itemInHand;
+ int _handItemSet;
+
+ // shapes
+ void initMouseShapes();
+
+ int _malcolmShapes;
+ void loadMalcolmShapes(int newShapes);
+ void updateMalcolmShapes();
+
+ int _malcolmShapeXOffset, _malcolmShapeYOffset;
+
+ struct ShapeDesc {
+ uint8 width, height;
+ int8 xOffset, yOffset;
+ };
+ static const ShapeDesc _shapeDescs[];
+ static const int _shapeDescsSize;
+
+ // scene animation
+ uint8 *_sceneShapes[20];
+
+ void freeSceneShapes();
+
+ // voice
+ int _currentTalkFile;
+ void openTalkFile(int file);
+
+ // scene
+ bool _noScriptEnter;
+ void enterNewScene(uint16 scene, int facing, int unk1, int unk2, int unk3);
+ void enterNewSceneUnk1(int facing, int unk1, int unk2);
+ void enterNewSceneUnk2(int unk1);
+ int _enterNewSceneLock;
+
+ void unloadScene();
+
+ void loadScenePal();
+ void loadSceneMsc();
+ void initSceneScript(int unk1);
+ void initSceneAnims(int unk1);
+ void initSceneScreen(int unk1);
+
+ int runSceneScript1(int x, int y);
+ int runSceneScript2();
+ bool _noStartupChat;
+ void runSceneScript4(int unk1);
+ void runSceneScript6();
+ void runSceneScript8();
+
+ int _sceneMinX, _sceneMaxX;
+ int _maskPageMinY, _maskPageMaxY;
+
+ EMCState _sceneScriptState;
+ EMCData _sceneScriptData;
+
+ int trySceneChange(int *moveTable, int unk1, int unk2);
+ int checkSceneChange();
+
+ int8 _sceneDatPalette[45];
+ int8 _sceneDatLayerTable[15];
+ struct SceneShapeDesc {
+ // the original saves those variables, we don't, since
+ // they are just needed on scene load
+ /*int x, y;
+ int w, h;*/
+ int drawX, drawY;
+ };
+ SceneShapeDesc _sceneShapeDescs[20];
+
+ int getDrawLayer(int x, int y);
+
+ int getScale(int x, int y);
+ int _scaleTable[15];
+
+ bool _unkSceneScreenFlag1;
+
+ // character
+ struct Character {
+ uint16 sceneId;
+ uint16 dlgIndex;
+ uint8 height;
+ uint8 facing;
+ uint16 animFrame;
+ //uint8 unk8, unk9;
+ byte walkspeed;
+ uint16 inventory[10];
+ int16 x1, y1;
+ int16 x2, y2;
+ int16 x3, y3;
+ };
+
+ Character _mainCharacter;
+ int _mainCharX, _mainCharY;
+ int _charScale;
+
+ void moveCharacter(int facing, int x, int y);
+
+ void updateCharPosWithUpdate();
+ int updateCharPos(int *table, int force);
+
+ uint32 _updateCharPosNextUpdate;
+ static const int8 _updateCharPosXTable[];
+ static const int8 _updateCharPosYTable[];
+
+ void updateCharAnimFrame(int character, int *table);
+ int8 _characterAnimTable[2];
+ static const uint8 _characterFrameTable[];
+
+ bool _overwriteSceneFacing;
+
+ void updateCharPal(int unk1);
+ int _lastCharPalLayer;
+ bool _charPalUpdate;
+
+ bool checkCharCollision(int x, int y);
+
+ int _malcolmsMood;
+
+ void makeCharFacingMouse();
+
+ int findFreeInventorySlot();
+
+ // talk object
+ struct TalkObject {
+ char filename[13];
+ int8 sceneAnim;
+ int8 sceneScript;
+ int16 x, y;
+ uint8 color;
+ uint8 sceneId;
+ };
+
+ TalkObject *_talkObjectList;
+
+ bool talkObjectsInCurScene();
+
+ // chat
+ int _vocHigh;
+
+ const char *_chatText;
+ int _chatObject;
+ uint32 _chatEndTime;
+ int _chatVocHigh, _chatVocLow;
+
+ EMCData _chatScriptData;
+ EMCState _chatScriptState;
+
+ int chatGetType(const char *text);
+ int chatCalcDuration(const char *text);
+
+ void objectChat(const char *text, int object, int vocHigh, int vocLow);
+ void objectChatInit(const char *text, int object, int vocHigh, int vocLow);
+ void objectChatPrintText(const char *text, int object);
+ void objectChatProcess(const char *script);
+ void objectChatWaitToFinish();
+
+ void badConscienceChat(const char *str, int vocHigh, int vocLow);
+ void badConscienceChatWaitToFinish();
+
+ void goodConscienceChat(const char *str, int vocHigh, int vocLow);
+ void goodConscienceChatWaitToFinish();
+
+ void malcolmSceneStartupChat();
+
+ byte _newSceneDlgState[40];
+ int8 _conversationState[30][30];
+ bool _chatAltFlag;
+ void setDlgIndex(uint16 index);
+ void updateDlgIndex();
+
+ Common::SeekableReadStream *_cnvFile;
+ Common::SeekableReadStream *_dlgBuffer;
+ int _curDlgChapter, _curDlgIndex, _curDlgLang;
+ void updateDlgBuffer();
+ void loadDlgHeader(int &vocHighBase, int &vocHighIndex, int &index1, int &index2);
+
+ static const uint8 _vocHighTable[];
+ bool _isStartupDialog;
+ void processDialog(int vocHighIndex, int vocHighBase, int funcNum);
+
+ EMCData _dialogScriptData;
+ EMCState _dialogScriptState;
+ int _dialogSceneAnim;
+ int _dialogSceneScript;
+ int _dialogScriptFuncStart, _dialogScriptFuncProc, _dialogScriptFuncEnd;
+
+ void dialogStartScript(int object, int funcNum);
+ void dialogEndScript(int object);
+
+ void npcChatSequence(const char *str, int object, int vocHigh, int vocLow);
+
+ Common::Array<const Opcode *> _opcodesDialog;
+
+ int o3d_updateAnim(EMCState *script);
+ int o3d_delay(EMCState *script);
+
+ void malcolmRandomChat();
+ void runDialog(int dlgIndex, int funcNum);
+
+ // conscience
+ bool _badConscienceShown;
+ int _badConscienceAnim;
+ bool _badConsciencePosition;
+
+ static const uint8 _badConscienceFrameTable[];
+
+ void showBadConscience();
+ void hideBadConscience();
+
+ bool _goodConscienceShown;
+ int _goodConscienceAnim;
+ bool _goodConsciencePosition;
+
+ static const uint8 _goodConscienceFrameTable[];
+
+ void showGoodConscience();
+ void hideGoodConscience();
+
+ // special script code
+ bool _temporaryScriptExecBit;
+ bool _useFrameTable;
+
+ Common::Array<const Opcode *> _opcodesTemporary;
+
+ int o3t_defineNewShapes(EMCState *script);
+ int o3t_setCurrentFrame(EMCState *script);
+ int o3t_setNewShapeFlag(EMCState *script);
+
+ EMCData _temporaryScriptData;
+ EMCState _temporaryScriptState;
+
+ void runTemporaryScript(const char *filename, int allowSkip, int resetChar, int newShapes, int shapeUnload);
+
+ // special shape code
+ char _newShapeFilename[13];
+ int _newShapeLastEntry;
+ int _newShapeWidth, _newShapeHeight;
+ int _newShapeXAdd, _newShapeYAdd;
+
+ int _newShapeAnimFrame;
+ int _newShapeDelay;
+
+ int _newShapeFlag;
+ uint8 *_newShapeFiledata;
+ int _newShapeCount;
+
+ int initNewShapes(uint8 *filedata);
+ void processNewShapes(int allowSkip, int resetChar);
+ void resetNewShapes(int count, uint8 *filedata);
+
+ // unk
+ uint8 *_costPalBuffer;
+ uint8 *_screenBuffer;
+ uint8 *_paletteOverlay;
+ bool _useActorBuffer;
+
+ int _currentChapter;
+ void changeChapter(int newChapter, int sceneId, int malcolmShapes, int facing);
+
+ static const uint8 _chapterLowestScene[];
+
+ int _unk3, _unk4, _unk5;
+
+ void loadCostPal();
+ void loadShadowShape();
+ void loadExtrasShapes();
+
+ uint8 *_gfxBackUpRect;
+ void backUpGfxRect32x32(int x, int y);
+ void restoreGfxRect32x32(int x, int y);
+
+ char *_stringBuffer;
+
+ int _score;
+ int _scoreMax;
+
+ static const int8 _scoreTable[];
+ static const int _scoreTableSize;
+ int8 _scoreFlagTable[26];
+ bool updateScore(int scoreId, int strId);
+ void scoreIncrease(int count, const char *str);
+
+ void eelScript();
+
+ // save/load
+ void saveGame(const char *fileName, const char *saveName);
+ void loadGame(const char *fileName);
+
+ // opcodes
+ int o3_getMalcolmShapes(EMCState *script);
+ int o3_setCharacterPos(EMCState *script);
+ int o3_defineObject(EMCState *script);
+ int o3_refreshCharacter(EMCState *script);
+ int o3_getCharacterX(EMCState *script);
+ int o3_getCharacterY(EMCState *script);
+ int o3_getCharacterFacing(EMCState *script);
+ int o3_getCharacterScene(EMCState *script);
+ int o3_getMalcolmsMood(EMCState *script);
+ int o3_getCharacterFrameFromFacing(EMCState *script);
+ int o3_setCharacterFacingOverwrite(EMCState *script);
+ int o3_trySceneChange(EMCState *script);
+ int o3_moveCharacter(EMCState *script);
+ int o3_setCharacterFacing(EMCState *script);
+ int o3_showSceneFileMessage(EMCState *script);
+ int o3_setCharacterAnimFrameFromFacing(EMCState *script);
+ int o3_showBadConscience(EMCState *script);
+ int o3_hideBadConscience(EMCState *script);
+ int o3_setInventorySlot(EMCState *script);
+ int o3_getInventorySlot(EMCState *script);
+ int o3_addItemToInventory(EMCState *script);
+ int o3_addItemToCurScene(EMCState *script);
+ int o3_objectChat(EMCState *script);
+ int o3_checkForItem(EMCState *script);
+ int o3_resetInventory(EMCState *script);
+ int o3_defineItem(EMCState *script);
+ int o3_removeInventoryItemInstances(EMCState *script);
+ int o3_countInventoryItemInstances(EMCState *script);
+ int o3_npcChatSequence(EMCState *script);
+ int o3_queryGameFlag(EMCState *script);
+ int o3_resetGameFlag(EMCState *script);
+ int o3_setGameFlag(EMCState *script);
+ int o3_setHandItem(EMCState *script);
+ int o3_removeHandItem(EMCState *script);
+ int o3_handItemSet(EMCState *script);
+ int o3_hideMouse(EMCState *script);
+ int o3_addSpecialExit(EMCState *script);
+ int o3_setMousePos(EMCState *script);
+ int o3_showMouse(EMCState *script);
+ int o3_badConscienceChat(EMCState *script);
+ int o3_wipeDownMouseItem(EMCState *script);
+ int o3_setMalcolmsMood(EMCState *script);
+ int o3_delay(EMCState *script);
+ int o3_updateScore(EMCState *script);
+ int o3_makeSecondChanceSave(EMCState *script);
+ int o3_setSceneFilename(EMCState *script);
+ int o3_removeItemsFromScene(EMCState *script);
+ int o3_disguiseMalcolm(EMCState *script);
+ int o3_drawSceneShape(EMCState *script);
+ int o3_drawSceneShapeOnPage(EMCState *script);
+ int o3_checkInRect(EMCState *script);
+ int o3_updateConversations(EMCState *script);
+ int o3_setSceneDim(EMCState *script);
+ int o3_update(EMCState *script);
+ int o3_setSceneAnimPosAndFrame(EMCState *script);
+ int o3_removeItemInstances(EMCState *script);
+ int o3_disableInventory(EMCState *script);
+ int o3_enableInventory(EMCState *script);
+ int o3_enterNewScene(EMCState *script);
+ int o3_switchScene(EMCState *script);
+ int o3_getShapeFlag1(EMCState *script);
+ int o3_setMalcolmPos(EMCState *script);
+ int o3_stopMusic(EMCState *script);
+ int o3_playWanderScoreViaMap(EMCState *script);
+ int o3_playSoundEffect(EMCState *script);
+ int o3_getScore(EMCState *script);
+ int o3_blockOutRegion(EMCState *script);
+ int o3_showSceneStringsMessage(EMCState *script);
+ int o3_getRand(EMCState *script);
+ int o3_setDeathHandler(EMCState *script);
+ int o3_showGoodConscience(EMCState *script);
+ int o3_goodConscienceChat(EMCState *script);
+ int o3_hideGoodConscience(EMCState *script);
+ int o3_waitForConfirmationClick(EMCState *script);
+ int o3_defineRoomEntrance(EMCState *script);
+ int o3_runTemporaryScript(EMCState *script);
+ int o3_setSpecialSceneScriptRunTime(EMCState *script);
+ int o3_defineSceneAnim(EMCState *script);
+ int o3_updateSceneAnim(EMCState *script);
+ int o3_runActorScript(EMCState *script);
+ int o3_runDialog(EMCState *script);
+ int o3_malcolmRandomChat(EMCState *script);
+ int o3_setDlgIndex(EMCState *script);
+ int o3_getDlgIndex(EMCState *script);
+ int o3_defineScene(EMCState *script);
+ int o3_setConversationState(EMCState *script);
+ int o3_getConversationState(EMCState *script);
+ int o3_changeChapter(EMCState *script);
+ int o3_countItemInstances(EMCState *script);
+ int o3_dialogStartScript(EMCState *script);
+ int o3_dialogEndScript(EMCState *script);
+ int o3_setSpecialSceneScriptState(EMCState *script);
+ int o3_clearSpecialSceneScriptState(EMCState *script);
+ int o3_querySpecialSceneScriptState(EMCState *script);
+ int o3_setHiddenItemsEntry(EMCState *script);
+ int o3_getHiddenItemsEntry(EMCState *script);
+ int o3_customChat(EMCState *script);
+ int o3_customChatFinish(EMCState *script);
+ int o3_setupSceneAnimObject(EMCState *script);
+ int o3_removeSceneAnimObject(EMCState *script);
+ int o3_disableTimer(EMCState *script);
+ int o3_enableTimer(EMCState *script);
+ int o3_setTimerCountdown(EMCState *script);
+ int o3_setVocHigh(EMCState *script);
+ int o3_getVocHigh(EMCState *script);
+ int o3_dummy(EMCState *script);
+
+ // misc
+ TextDisplayer_MR *_text;
+ Debugger_v3 *_debugger;
+ bool _wsaPlayingVQA;
+
+ // resource specific
+private:
+ static const char *_languageExtension[];
+ static const int _languageExtensionSize;
+
+ char *appendLanguage(char *buf, int lang, int bufSize);
+
+ int loadLanguageFile(const char *file, uint8 *&buffer);
+};
+
+} // end of namespace Kyra
+
+#endif
+