1 /* ScummVM - Graphic Adventure Engine 2 * 3 * ScummVM is the legal property of its developers, whose names 4 * are too numerous to list here. Please refer to the COPYRIGHT 5 * file distributed with this source distribution. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 20 * 21 */ 22 23 #ifndef KYRA_KYRA_HOF_H 24 #define KYRA_KYRA_HOF_H 25 26 #include "kyra/engine/kyra_v2.h" 27 #include "kyra/script/script.h" 28 #include "kyra/script/script_tim.h" 29 #include "kyra/graphics/screen_hof.h" 30 #include "kyra/text/text_hof.h" 31 #include "kyra/gui/gui_hof.h" 32 33 #include "common/list.h" 34 #include "common/func.h" 35 36 namespace Kyra { 37 38 //class WSAMovie_v2; 39 //class KyraEngine_HoF; 40 class TextDisplayer_HoF; 41 class SeqPlayer_HOF; 42 43 struct TIM; 44 45 class KyraEngine_HoF : public KyraEngine_v2 { 46 friend class Debugger_HoF; 47 friend class TextDisplayer_HoF; 48 friend class GUI_HoF; 49 public: 50 KyraEngine_HoF(OSystem *system, const GameFlags &flags); 51 ~KyraEngine_HoF(); 52 53 void pauseEngineIntern(bool pause); 54 screen()55 Screen *screen() { return _screen; } screen_v2()56 Screen_v2 *screen_v2() const { return _screen; } gui()57 GUI *gui() const { return _gui; } text()58 virtual TextDisplayer *text() { return _text; } language()59 int language() const { return _lang; } 60 61 protected: 62 static const EngineDesc _hofEngineDesc; 63 64 // intro/outro 65 void seq_showStarcraftLogo(); 66 67 int seq_playIntro(); 68 int seq_playOutro(); 69 int seq_playDemo(); 70 71 void seq_pausePlayer(bool toggle); 72 73 Common::Error init(); 74 Common::Error go(); 75 76 Screen_HoF *_screen; 77 TextDisplayer_HoF *_text; 78 TIMInterpreter *_tim; 79 80 static const int8 _dosTrackMap[]; 81 static const int _dosTrackMapSize; 82 static const int8 _mt32SfxMap[]; 83 static const int _mt32SfxMapSize; 84 static const int8 _gmSfxMap[]; 85 static const int _gmSfxMapSize; 86 static const int8 _pcSpkSfxMap[]; 87 static const int _pcSpkSfxMapSize; 88 89 protected: 90 // game initialization 91 void startup(); 92 void runLoop(); 93 void cleanup(); 94 95 void registerDefaultSettings(); 96 void writeSettings(); 97 void readSettings(); 98 uint8 _configTextspeed; 99 100 // TODO: get rid of all variables having pointers to the static resources if possible 101 // i.e. let them directly use the _staticres functions 102 void initStaticResource(); 103 104 void setupTimers(); 105 void setupOpcodeTable(); 106 107 void loadMouseShapes(); 108 void loadItemShapes(); 109 110 // run 111 void update(); 112 void updateWithText(); 113 114 Common::Functor0Mem<void, KyraEngine_HoF> _updateFunctor; 115 116 void updateMouse(); 117 118 void dinoRide(); 119 120 void handleInput(int x, int y); 121 bool handleInputUnkSub(int x, int y); 122 123 int inputSceneChange(int x, int y, int unk1, int unk2); 124 125 // special case 126 void processKeyboardSfx(int inputFlag); 127 128 static const int16 _keyboardSounds[190]; 129 130 // gfx/animation specific 131 bool _inventorySaved; 132 void backUpPage0(); 133 void restorePage0(); 134 135 uint8 *_gfxBackUpRect; 136 137 void backUpGfxRect24x24(int x, int y); 138 void restoreGfxRect24x24(int x, int y); 139 void backUpGfxRect32x32(int x, int y); 140 void restoreGfxRect32x32(int x, int y); 141 142 uint8 *_sceneShapeTable[50]; 143 144 WSAMovie_v2 *_wsaSlots[10]; 145 146 void freeSceneShapePtrs(); 147 148 struct ShapeDesc { 149 uint8 unk0, unk1, unk2, unk3, unk4; 150 uint16 width, height; 151 int16 xAdd, yAdd; 152 }; 153 154 ShapeDesc *_shapeDescTable; 155 156 void loadCharacterShapes(int shapes); 157 void loadInventoryShapes(); 158 159 void resetScaleTable(); 160 void setScaleTableItem(int item, int data); 161 int getScale(int x, int y); 162 uint16 _scaleTable[15]; 163 164 void setDrawLayerTableEntry(int entry, int data); 165 int getDrawLayer(int x, int y); 166 int _drawLayerTable[15]; 167 168 int _layerFlagTable[16]; // seems to indicate layers where items get destroyed when dropped to (TODO: check this!) 169 170 int initAnimationShapes(uint8 *filedata); 171 void uninitAnimationShapes(int count, uint8 *filedata); 172 173 // animator 174 uint8 *_gamePlayBuffer; 175 void restorePage3(); 176 177 void clearAnimObjects(); 178 179 void refreshAnimObjects(int force); 180 181 void drawAnimObjects(); 182 void drawSceneAnimObject(AnimObj *obj, int x, int y, int drawLayer); 183 void drawCharacterAnimObject(AnimObj *obj, int x, int y, int drawLayer); 184 185 void updateItemAnimations(); 186 187 void updateCharFacing(); 188 void updateCharacterAnim(int); 189 void updateSceneAnim(int anim, int newFrame); 190 191 int _animObj0Width, _animObj0Height; 192 void setCharacterAnimDim(int w, int h); 193 void resetCharacterAnimDim(); 194 195 // scene 196 const char *_sceneCommentString; 197 uint8 _scenePal[688]; 198 199 void enterNewScene(uint16 newScene, int facing, int unk1, int unk2, int unk3); 200 void enterNewSceneUnk1(int facing, int unk1, int unk2); 201 void enterNewSceneUnk2(int unk1); 202 void unloadScene(); 203 204 void loadScenePal(); 205 void loadSceneMsc(); 206 207 void fadeScenePal(int srcIndex, int delay); 208 209 void startSceneScript(int unk1); 210 void runSceneScript2(); 211 void runSceneScript4(int unk1); 212 void runSceneScript7(); 213 214 void initSceneAnims(int unk1); 215 void initSceneScreen(int unk1); 216 217 int trySceneChange(int *moveTable, int unk1, int updateChar); 218 int checkSceneChange(); 219 220 // pathfinder 221 bool lineIsPassable(int x, int y); 222 223 // item 224 void setMouseCursor(Item item); 225 226 uint8 _itemHtDat[176]; 227 228 int checkItemCollision(int x, int y); 229 void updateWaterFlasks(); 230 231 bool dropItem(int unk1, Item item, int x, int y, int unk2); 232 bool processItemDrop(uint16 sceneId, Item item, int x, int y, int unk1, int unk2); 233 void itemDropDown(int startX, int startY, int dstX, int dstY, int itemSlot, Item item); 234 void exchangeMouseItem(int itemPos); 235 bool pickUpItem(int x, int y); 236 237 bool isDropable(int x, int y); 238 239 static const byte _itemStringMap[]; 240 static const int _itemStringMapSize; 241 242 static const Item _flaskTable[]; 243 bool itemIsFlask(Item item); 244 245 // inventory 246 static const int _inventoryX[]; 247 static const int _inventoryY[]; 248 static const uint16 _itemMagicTable[]; 249 250 int getInventoryItemSlot(Item item); 251 void removeSlotFromInventory(int slot); 252 bool checkInventoryItemExchange(Item item, int slot); 253 void drawInventoryShape(int page, Item item, int slot); 254 void clearInventorySlot(int slot, int page); 255 void redrawInventory(int page); 256 void scrollInventoryWheel(); 257 int findFreeVisibleInventorySlot(); 258 259 ActiveItemAnim _activeItemAnim[15]; 260 int _nextAnimItem; 261 262 // gui 263 bool _menuDirectlyToLoad; 264 GUI_HoF *_gui; 265 266 void loadButtonShapes(); 267 void setupLangButtonShapes(); 268 uint8 *_buttonShapes[19]; 269 270 void initInventoryButtonList(); 271 Button *_inventoryButtons; 272 Button *_buttonList; 273 274 int scrollInventory(Button *button); 275 int buttonInventory(Button *button); 276 int bookButton(Button *button); 277 int cauldronButton(Button *button); 278 int cauldronClearButton(Button *button); 279 280 // book 281 static const int _bookPageYOffset[]; 282 static const byte _bookTextColorMap[]; 283 284 int _bookMaxPage; 285 int _bookNewPage; 286 int _bookCurPage; 287 int _bookBkgd; 288 bool _bookShown; 289 290 void loadBookBkgd(); 291 void showBookPage(); 292 void bookLoop(); 293 294 void bookDecodeText(uint8 *text); 295 void bookPrintText(int dstPage, const uint8 *text, int x, int y, uint8 color); 296 297 int bookPrevPage(Button *button); 298 int bookNextPage(Button *button); 299 int bookClose(Button *button); 300 301 // cauldron 302 uint8 _cauldronState; 303 int16 _cauldronUseCount; 304 int16 _cauldronTable[25]; 305 int16 _cauldronStateTables[23][7]; 306 307 static const int16 _cauldronProtectedItems[]; 308 static const int16 _cauldronBowlTable[]; 309 static const int16 _cauldronMagicTable[]; 310 static const int16 _cauldronMagicTableScene77[]; 311 static const uint8 _cauldronStateTable[]; 312 313 void resetCauldronStateTable(int idx); 314 bool addToCauldronStateTable(int data, int idx); 315 316 void setCauldronState(uint8 state, bool paletteFade); 317 void clearCauldronTable(); 318 void addFrontCauldronTable(int item); 319 void cauldronItemAnim(int item); 320 void cauldronRndPaletteFade(); 321 bool updateCauldron(); 322 void listItemsInCauldron(); 323 324 // localization 325 void loadCCodeBuffer(const char *file); 326 void loadOptionsBuffer(const char *file); 327 void loadChapterBuffer(int chapter); 328 uint8 *_optionsBuffer; 329 uint8 *_cCodeBuffer; 330 331 uint8 *_chapterBuffer; 332 int _currentChapter; 333 int _newChapterFile; 334 335 uint8 *getTableEntry(uint8 *buffer, int id); 336 char *getTableString(int id, uint8 *buffer, int decode); 337 const char *getChapterString(int id); 338 339 void changeFileExtension(char *buffer); 340 341 // - Just used in French version 342 int getItemCommandStringDrop(Item item); 343 int getItemCommandStringPickUp(Item item); 344 int getItemCommandStringInv(Item item); 345 // - 346 347 char _internStringBuf[200]; 348 static const char *const _languageExtension[]; 349 static const char *const _scriptLangExt[]; 350 351 // character 352 bool _useCharPal; 353 bool _setCharPalFinal; 354 int _charPalEntry; 355 uint8 _charPalTable[16]; 356 void updateCharPal(int unk1); 357 void setCharPalEntry(int entry, int value); 358 359 int _characterFacingCountTable[2]; 360 361 int getCharacterWalkspeed() const; 362 void updateCharAnimFrame(int *table); 363 364 bool checkCharCollision(int x, int y); 365 366 static const uint8 _characterFrameTable[]; 367 368 // text 369 void showMessageFromCCode(int id, int16 palIndex, int); 370 void showMessage(const char *string, int16 palIndex); 371 void showChapterMessage(int id, int16 palIndex); 372 373 void updateCommandLineEx(int str1, int str2, int16 palIndex); 374 375 const char *_shownMessage; 376 377 byte _messagePal[3]; 378 bool _fadeMessagePalette; 379 void fadeMessagePalette(); 380 381 // chat 382 bool _chatIsNote; 383 384 int chatGetType(const char *text); 385 int chatCalcDuration(const char *text); 386 387 void objectChat(const char *text, int object, int vocHigh = -1, int vocLow = -1); 388 void objectChatInit(const char *text, int object, int vocHigh = -1, int vocLow = -1); 389 void objectChatPrintText(const char *text, int object); 390 void objectChatProcess(const char *script); 391 void objectChatWaitToFinish(); 392 393 void startDialogue(int dlgIndex); 394 395 void zanthSceneStartupChat(); 396 void randomSceneChat(); 397 void updateDlgBuffer(); 398 void loadDlgHeader(int &csEntry, int &vocH, int &scIndex1, int &scIndex2); 399 void processDialogue(int dlgOffset, int vocH = 0, int csEntry = 0); 400 void npcChatSequence(const char *str, int objectId, int vocHigh = -1, int vocLow = -1); 401 void setDlgIndex(int dlgIndex); 402 403 int _npcTalkChpIndex; 404 int _npcTalkDlgIndex; 405 uint8 _newSceneDlgState[32]; 406 int8 **_conversationState; 407 uint8 *_dlgBuffer; 408 409 // Talk object handling 410 void initTalkObject(int index); 411 void deinitTalkObject(int index); 412 413 struct TalkObject { 414 char filename[13]; 415 int8 scriptId; 416 int16 x, y; 417 int8 color; 418 }; 419 TalkObject *_talkObjectList; 420 421 struct TalkSections { 422 TIM *STATim; 423 TIM *TLKTim; 424 TIM *ENDTim; 425 }; 426 TalkSections _currentTalkSections; 427 428 char _TLKFilename[13]; 429 430 // tim 431 void playTim(const char *filename); 432 433 int t2_initChat(const TIM *tim, const uint16 *param); 434 int t2_updateSceneAnim(const TIM *tim, const uint16 *param); 435 int t2_resetChat(const TIM *tim, const uint16 *param); 436 int t2_playSoundEffect(const TIM *tim, const uint16 *param); 437 438 Common::Array<const TIMOpcode *> _timOpcodes; 439 440 // sound 441 int _oldTalkFile; 442 int _currentTalkFile; 443 void openTalkFile(int newFile); 444 int _lastSfxTrack; 445 446 virtual void snd_playVoiceFile(int id); 447 void snd_loadSoundFile(int id); 448 449 void playVoice(int high, int low); 450 void snd_playSoundEffect(int track, int volume=0xFF); 451 452 // timer 453 void timerFadeOutMessage(int); 454 void timerCauldronAnimation(int); 455 void timerFunc4(int); 456 void timerFunc5(int); 457 void timerBurnZanthia(int); 458 459 void setTimer1DelaySecs(int secs); 460 461 uint32 _nextIdleAnim; 462 int _lastIdleScript; 463 bool _useSceneIdleAnim; 464 465 void setNextIdleAnimTimer(); 466 void showIdleAnim(); 467 void runIdleScript(int script); 468 469 void setWalkspeed(uint8 speed); 470 471 // ingame static sequence handling 472 void seq_makeBookOrCauldronAppear(int type); 473 void seq_makeBookAppear(); 474 475 struct InventoryWsa { 476 int x, y, x2, y2, w, h; 477 int page; 478 int curFrame, lastFrame, specialFrame; 479 int sfx; 480 int delay; 481 bool running; 482 uint32 timer; 483 WSAMovie_v2 *wsa; 484 } _invWsa; 485 486 // TODO: move inside KyraEngine_HoF::InventoryWsa? 487 void loadInvWsa(const char *filename, int run, int delay, int page, int sfx, int sFrame, int flags); 488 void closeInvWsa(); 489 490 void updateInvWsa(); 491 void displayInvWsaLastFrame(); 492 493 // opcodes 494 int o2_setCharacterFacingRefresh(EMCState *script); 495 int o2_setCharacterPos(EMCState *script); 496 int o2_defineObject(EMCState *script); 497 int o2_refreshCharacter(EMCState *script); 498 int o2_setSceneComment(EMCState *script); 499 int o2_setCharacterAnimFrame(EMCState *script); 500 int o2_setCharacterFacing(EMCState *script); 501 int o2_customCharacterChat(EMCState *script); 502 int o2_soundFadeOut(EMCState *script); 503 int o2_showChapterMessage(EMCState *script); 504 int o2_restoreTalkTextMessageBkgd(EMCState *script); 505 int o2_wsaClose(EMCState *script); 506 int o2_meanWhileScene(EMCState *script); 507 int o2_backUpScreen(EMCState *script); 508 int o2_restoreScreen(EMCState *script); 509 int o2_displayWsaFrame(EMCState *script); 510 int o2_displayWsaSequentialFramesLooping(EMCState *script); 511 int o2_wsaOpen(EMCState *script); 512 int o2_displayWsaSequentialFrames(EMCState *script); 513 int o2_displayWsaSequence(EMCState *script); 514 int o2_addItemToInventory(EMCState *script); 515 int o2_drawShape(EMCState *script); 516 int o2_addItemToCurScene(EMCState *script); 517 int o2_loadSoundFile(EMCState *script); 518 int o2_removeSlotFromInventory(EMCState *script); 519 int o2_removeItemFromInventory(EMCState *script); 520 int o2_countItemInInventory(EMCState *script); 521 int o2_countItemsInScene(EMCState *script); 522 int o2_wipeDownMouseItem(EMCState *script); 523 int o2_getElapsedSecs(EMCState *script); 524 int o2_getTimerDelay(EMCState *script); 525 int o2_delaySecs(EMCState *script); 526 int o2_setTimerDelay(EMCState *script); 527 int o2_setScaleTableItem(EMCState *script); 528 int o2_setDrawLayerTableItem(EMCState *script); 529 int o2_setCharPalEntry(EMCState *script); 530 int o2_loadZShapes(EMCState *script); 531 int o2_drawSceneShape(EMCState *script); 532 int o2_drawSceneShapeOnPage(EMCState *script); 533 int o2_disableAnimObject(EMCState *script); 534 int o2_enableAnimObject(EMCState *script); 535 int o2_loadPalette384(EMCState *script); 536 int o2_setPalette384(EMCState *script); 537 int o2_restoreBackBuffer(EMCState *script); 538 int o2_backUpInventoryGfx(EMCState *script); 539 int o2_disableSceneAnim(EMCState *script); 540 int o2_enableSceneAnim(EMCState *script); 541 int o2_restoreInventoryGfx(EMCState *script); 542 int o2_setSceneAnimPos2(EMCState *script); 543 int o2_fadeScenePal(EMCState *script); 544 int o2_enterNewScene(EMCState *script); 545 int o2_switchScene(EMCState *script); 546 int o2_setPathfinderFlag(EMCState *script); 547 int o2_getSceneExitToFacing(EMCState *script); 548 int o2_setLayerFlag(EMCState *script); 549 int o2_setZanthiaPos(EMCState *script); 550 int o2_loadMusicTrack(EMCState *script); 551 int o2_setSceneAnimPos(EMCState *script); 552 int o2_setCauldronState(EMCState *script); 553 int o2_showItemString(EMCState *script); 554 int o2_isAnySoundPlaying(EMCState *script); 555 int o2_setDrawNoShapeFlag(EMCState *script); 556 int o2_setRunFlag(EMCState *script); 557 int o2_showLetter(EMCState *script); 558 int o2_playFireflyScore(EMCState *script); 559 int o2_encodeShape(EMCState *script); 560 int o2_defineSceneAnim(EMCState *script); 561 int o2_updateSceneAnim(EMCState *script); 562 int o2_addToSceneAnimPosAndUpdate(EMCState *script); 563 int o2_useItemOnMainChar(EMCState *script); 564 int o2_startDialogue(EMCState *script); 565 int o2_addCauldronStateTableEntry(EMCState *script); 566 int o2_setCountDown(EMCState *script); 567 int o2_getCountDown(EMCState *script); 568 int o2_pressColorKey(EMCState *script); 569 int o2_objectChat(EMCState *script); 570 int o2_changeChapter(EMCState *script); 571 int o2_getColorCodeFlag1(EMCState *script); 572 int o2_setColorCodeFlag1(EMCState *script); 573 int o2_getColorCodeFlag2(EMCState *script); 574 int o2_setColorCodeFlag2(EMCState *script); 575 int o2_getColorCodeValue(EMCState *script); 576 int o2_setColorCodeValue(EMCState *script); 577 int o2_countItemInstances(EMCState *script); 578 int o2_removeItemFromScene(EMCState *script); 579 int o2_initObject(EMCState *script); 580 int o2_npcChat(EMCState *script); 581 int o2_deinitObject(EMCState *script); 582 int o2_playTimSequence(EMCState *script); 583 int o2_makeBookOrCauldronAppear(EMCState *script); 584 int o2_resetInputColorCode(EMCState *script); 585 int o2_mushroomEffect(EMCState *script); 586 int o2_customChat(EMCState *script); 587 int o2_customChatFinish(EMCState *script); 588 int o2_setupSceneAnimation(EMCState *script); 589 int o2_stopSceneAnimation(EMCState *script); 590 int o2_processPaletteIndex(EMCState *script); 591 int o2_updateTwoSceneAnims(EMCState *script); 592 int o2_getRainbowRoomData(EMCState *script); 593 int o2_drawSceneShapeEx(EMCState *script); 594 int o2_midiSoundFadeout(EMCState *script); 595 int o2_getSfxDriver(EMCState *script); 596 int o2_getVocSupport(EMCState *script); 597 int o2_getMusicDriver(EMCState *script); 598 int o2_zanthiaChat(EMCState *script); 599 int o2_isVoiceEnabled(EMCState *script); 600 int o2_isVoicePlaying(EMCState *script); 601 int o2_stopVoicePlaying(EMCState *script); 602 int o2_getGameLanguage(EMCState *script); 603 int o2_demoFinale(EMCState *script); 604 int o2_dummy(EMCState *script); 605 606 // animation opcodes 607 int o2a_setCharacterFrame(EMCState *script); 608 609 // script 610 void runStartScript(int script, int unk1); 611 void loadNPCScript(); 612 613 bool _noScriptEnter; 614 615 EMCData _npcScriptData; 616 617 // pathfinder 618 uint8 *_unkBuf500Bytes; 619 uint8 *_unkBuf200kByte; 620 bool _chatAltFlag; 621 622 // sequence player 623 /* ActiveWSA *_activeWSA; 624 ActiveText *_activeText; 625 */ 626 /*const char *const *_sequencePakList; 627 int _sequencePakListSize;*/ 628 const char *const *_ingamePakList; 629 int _ingamePakListSize; 630 631 const char *const *_musicFileListIntro; 632 int _musicFileListIntroSize; 633 const char *const *_musicFileListFinale; 634 int _musicFileListFinaleSize; 635 const char *const *_musicFileListIngame; 636 int _musicFileListIngameSize; 637 const uint8 *_cdaTrackTableIntro; 638 int _cdaTrackTableIntroSize; 639 const uint8 *_cdaTrackTableIngame; 640 int _cdaTrackTableIngameSize; 641 const uint8 *_cdaTrackTableFinale; 642 int _cdaTrackTableFinaleSize; 643 const char *const *_ingameSoundList; 644 int _ingameSoundListSize; 645 const int16 *_ingameSoundIndex; 646 int _ingameSoundIndexSize; 647 const uint16 *_ingameTalkObjIndex; 648 int _ingameTalkObjIndexSize; 649 const char *const *_ingameTimJpStr; 650 int _ingameTimJpStrSize; 651 652 const ItemAnimDefinition *_itemAnimDefinition; 653 int _itemAnimDefinitionSize; 654 655 /*const HofSeqData *_sequences; 656 657 const ItemAnimData_v1 *_demoAnimData; 658 int _demoAnimSize; 659 660 int _sequenceStringsDuration[33];*/ 661 662 /* static const uint8 _seqTextColorPresets[]; 663 char *_seqProcessedString; 664 WSAMovie_v2 *_seqWsa; 665 666 bool _abortIntroFlag; 667 int _menuChoice;*/ 668 669 /*uint32 _seqFrameDelay; 670 uint32 _seqStartTime; 671 uint32 _seqSubFrameStartTime; 672 uint32 _seqEndTime; 673 uint32 _seqSubFrameEndTimeInternal; 674 uint32 _seqWsaChatTimeout; 675 uint32 _seqWsaChatFrameTimeout; 676 677 int _seqFrameCounter; 678 int _seqScrollTextCounter; 679 int _seqWsaCurrentFrame; 680 bool _seqSpecialFlag; 681 bool _seqSubframePlaying; 682 uint8 _seqTextColor[2]; 683 uint8 _seqTextColorMap[16];*/ 684 685 static const uint8 _rainbowRoomData[]; 686 687 // color code related vars 688 int _colorCodeFlag1; 689 int _colorCodeFlag2; 690 uint8 _presetColorCode[7]; 691 uint8 _inputColorCode[7]; 692 uint32 _scriptCountDown; 693 int _dbgPass; 694 695 // save/load specific 696 Common::Error saveGameStateIntern(int slot, const char *saveName, const Graphics::Surface *thumbnail); 697 Common::Error loadGameState(int slot); 698 }; 699 700 } // End of namespace Kyra 701 702 #endif 703