aboutsummaryrefslogtreecommitdiff
path: root/engines/igor/parts/part_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/igor/parts/part_main.cpp')
-rw-r--r--engines/igor/parts/part_main.cpp990
1 files changed, 0 insertions, 990 deletions
diff --git a/engines/igor/parts/part_main.cpp b/engines/igor/parts/part_main.cpp
deleted file mode 100644
index 16f983e448..0000000000
--- a/engines/igor/parts/part_main.cpp
+++ /dev/null
@@ -1,990 +0,0 @@
-/* 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$
- *
- */
-
-#include "common/system.h"
-
-#include "igor/igor.h"
-
-namespace Igor {
-
-void IgorEngine::ADD_DIALOGUE_TEXT(int num, int count, int sound) {
- assert(_dialogueTextsCount < MAX_DIALOGUE_TEXTS);
- DialogueText *dt = &_dialogueTextsTable[_dialogueTextsCount];
- dt->num = num;
- dt->count = count;
- dt->sound = sound;
- ++_dialogueTextsCount;
-}
-
-void IgorEngine::SET_DIALOGUE_TEXT(int start, int count) {
- _dialogueTextsStart = start - 1;
- _dialogueTextsCount = count;
-}
-
-void IgorEngine::SET_EXEC_ACTION_FUNC(int i, ExecuteActionProc p) {
- switch (i) {
- case 0:
- _executeMainAction = p;
- break;
- case 1:
- _executeRoomAction = p;
- break;
- }
-}
-
-void IgorEngine::EXEC_MAIN_ACTION(int action) {
- switch (action) {
- case 0:
- case 1:
- break;
- case 2: {
- int num, rnd = getRandomNumber(100);
- if (rnd < 34) {
- num = 11;
- } else if (rnd < 69) {
- num = 12;
- } else if (rnd < 94) {
- num = 13;
- } else {
- num = 14;
- }
- ADD_DIALOGUE_TEXT(num, 1, num);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- }
- break;
- case 3:
- ADD_DIALOGUE_TEXT(15, 1, 15);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 4:
- ADD_DIALOGUE_TEXT(10, 1, 10);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 5:
- ADD_DIALOGUE_TEXT(9, 1, 9);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 6:
- ADD_DIALOGUE_TEXT(8, 1, 8);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 7:
- ADD_DIALOGUE_TEXT(6, 1, 6);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 8:
- ADD_DIALOGUE_TEXT(7, 1, 7);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 9: {
- int num = 16 + getRandomNumber(2);
- ADD_DIALOGUE_TEXT(num, 1, num);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- }
- break;
- case 10:
- ADD_DIALOGUE_TEXT(18, 1, 18);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 11:
- ADD_DIALOGUE_TEXT(19, 1, 19);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 12: {
- int num = 20 + getRandomNumber(2);
- ADD_DIALOGUE_TEXT(num, 1, num);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- }
- break;
- case 13:
- ADD_DIALOGUE_TEXT(22, 1, 22);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 14:
- ADD_DIALOGUE_TEXT(23, 1, 23);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 15:
- ADD_DIALOGUE_TEXT(24, 1, 24);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 16:
- ADD_DIALOGUE_TEXT(25, 1, 25);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 17: {
- int num = 26 + getRandomNumber(2);
- ADD_DIALOGUE_TEXT(num, 1, num);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- }
- break;
- case 18:
- ADD_DIALOGUE_TEXT(28, 1, 28);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 19:
- ADD_DIALOGUE_TEXT(4, 1, 4);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 20:
- ADD_DIALOGUE_TEXT(5, 1, 5);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 21: {
- int num = 1 + getRandomNumber(3);
- ADD_DIALOGUE_TEXT(num, 1, num);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- }
- break;
- case 22:
- ADD_DIALOGUE_TEXT(51, 1, 32);
- ADD_DIALOGUE_TEXT(52, 1, 33);
- SET_DIALOGUE_TEXT(1, 2);
- startIgorDialogue();
- break;
- case 23:
- ADD_DIALOGUE_TEXT(53, 1, 34);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 24:
- ADD_DIALOGUE_TEXT(54, 1, 35);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 25:
- ADD_DIALOGUE_TEXT(55, 3, 36);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 26:
- ADD_DIALOGUE_TEXT(58, 1, 37);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 27:
- ADD_DIALOGUE_TEXT(59, 2, 38);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 28:
- ADD_DIALOGUE_TEXT(61, 1, 39);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 29:
- ADD_DIALOGUE_TEXT(62, 1, 40);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 30:
- ADD_DIALOGUE_TEXT(64, 1, 42);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 31:
- ADD_DIALOGUE_TEXT(63, 1, 41);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 32:
- ADD_DIALOGUE_TEXT(65, 1, 43);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 33:
- ADD_DIALOGUE_TEXT(66, 1, 44);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 34:
- ADD_DIALOGUE_TEXT(30, 1, 30);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 35:
- ADD_DIALOGUE_TEXT(29, 1, 29);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 36:
- ADD_DIALOGUE_TEXT(67, 2, 45);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 37:
- ADD_DIALOGUE_TEXT(69, 1, 46);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 38:
- EXEC_MAIN_ACTION_38();
- break;
- case 39:
- ADD_DIALOGUE_TEXT(70, 1, 47);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 40:
- ADD_DIALOGUE_TEXT(71, 1, 48);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 41:
- ADD_DIALOGUE_TEXT(72, 1, 49);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 42:
- ADD_DIALOGUE_TEXT(73, 1, 50);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 43:
- EXEC_MAIN_ACTION_43();
- break;
- case 44:
- ADD_DIALOGUE_TEXT(156, 1, 80);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 45:
- ADD_DIALOGUE_TEXT(92, 1, 64);
- ADD_DIALOGUE_TEXT(93, 3, 65);
- SET_DIALOGUE_TEXT(1, 2);
- startIgorDialogue();
- break;
- case 46:
- if (_objectsState[3] == 0) {
- ADD_DIALOGUE_TEXT(85, 1, 60);
- } else {
- ADD_DIALOGUE_TEXT(86, 2, 61);
- }
- SET_DIALOGUE_TEXT(1, 2);
- startIgorDialogue();
- break;
- case 48:
- ADD_DIALOGUE_TEXT(77 + _objectsState[0], 1, 53 + _objectsState[0]);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- case 50:
- if (_objectsState[1] == 0) {
- ADD_DIALOGUE_TEXT(80, 1, 56);
- ADD_DIALOGUE_TEXT(81, 1, 57);
- SET_DIALOGUE_TEXT(1, 2);
- startIgorDialogue();
- } else {
- ADD_DIALOGUE_TEXT(82, 1, 58);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- }
- break;
- case 51:
- if (_objectsState[7] == 0) {
- ADD_DIALOGUE_TEXT(157, 1, 81);
- } else {
- ADD_DIALOGUE_TEXT(158, 1, 82);
- }
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 52:
- ADD_DIALOGUE_TEXT(89, 2, 63);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 53:
- ADD_DIALOGUE_TEXT(88, 1, 62);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 54:
- EXEC_MAIN_ACTION_54();
- break;
- case 55:
- ADD_DIALOGUE_TEXT(159, 1, 83);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 56:
- ADD_DIALOGUE_TEXT(160, 1, 84);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 57:
- ADD_DIALOGUE_TEXT(31, 1, 31);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 58:
- ADD_DIALOGUE_TEXT(140, 1, 70);
- ADD_DIALOGUE_TEXT(141, 1, 71);
- ADD_DIALOGUE_TEXT(142, 1, 72);
- ADD_DIALOGUE_TEXT(143, 1, 73);
- SET_DIALOGUE_TEXT(1, 4);
- startIgorDialogue();
- _objectsState[4] = 2;
- break;
- case 59:
- ADD_DIALOGUE_TEXT(97, 2, 67);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 60:
- ADD_DIALOGUE_TEXT(161, 1, 85);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 61:
- if (_inventoryInfo[51] != 0) {
- ADD_DIALOGUE_TEXT(76, 1, 52);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- } else {
- ADD_DIALOGUE_TEXT(74, 2, 51);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- addObjectToInventory(16, 51);
- }
- break;
- case 62:
- _inventoryImages[_inventoryInfo[52] - 1] = 0;
- _inventoryInfo[52] = 0;
- packInventory();
- _inventoryImages[_inventoryInfo[59] - 1] = 0;
- _inventoryInfo[59] = 0;
- packInventory();
- _objectsState[1] = 1;
- UPDATE_OBJECT_STATE(2);
- addObjectToInventory(24, 59);
- ADD_DIALOGUE_TEXT(169, 1, 93);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 63:
- ADD_DIALOGUE_TEXT(170, 1, 94);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- _inventoryImages[_inventoryInfo[68] - 1] = 0;
- _inventoryInfo[68] = 0;
- packInventory();
- _inventoryImages[_inventoryInfo[69] - 1] = 0;
- _inventoryInfo[69] = 0;
- packInventory();
- _objectsState[6] = 1;
- UPDATE_OBJECT_STATE(7);
- addObjectToInventory(34, 69);
- break;
- case 64:
- if (_objectsState[6] == 0) {
- ADD_DIALOGUE_TEXT(162, 1, 86);
- } else if (_objectsState[6] == 1) {
- ADD_DIALOGUE_TEXT(163, 1, 87);
- } else if (_objectsState[6] == 2) {
- ADD_DIALOGUE_TEXT(164, 1, 88);
- }
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 65:
- ADD_DIALOGUE_TEXT(165, 1, 89);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 66:
- ADD_DIALOGUE_TEXT(166, 1, 90);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 67:
- ADD_DIALOGUE_TEXT(167, 1, 91);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 68:
- ADD_DIALOGUE_TEXT(168, 1, 92);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- case 69:
- ADD_DIALOGUE_TEXT(96, 1, 66);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- break;
- default:
- warning("EXEC_MAIN_ACTION() Unhandled action %d", action);
- break;
- }
-}
-
-void IgorEngine::EXEC_MAIN_ACTION_38() {
- memcpy(_paletteBuffer, _currentPalette, 624);
- fadeOutPalette(624);
- uint8 *tmp = (uint8 *)malloc(64000 + 768);
- if (tmp) {
- memcpy(tmp, _screenVGA, 64000);
- memcpy(tmp + 64000, _paletteBuffer, 768);
- }
- loadData(IMG_NewsPaper, _screenVGA);
- loadData(PAL_NewsPaper, _paletteBuffer);
- fadeInPalette(624);
- WalkData *wd = &_walkData[_walkDataLastIndex - 1];
- int _walkDataCurrentPosX2 = wd->x;
- int _walkDataCurrentPosY2 = wd->y;
- int _walkDataCurrentWScale = wd->scaleWidth;
- wd->x = 80;
- wd->y = 130;
- wd->scaleWidth = 50;
- ADD_DIALOGUE_TEXT(144, 1, 74);
- ADD_DIALOGUE_TEXT(145, 3, 75);
- ADD_DIALOGUE_TEXT(148, 2, 76);
- ADD_DIALOGUE_TEXT(150, 2, 77);
- SET_DIALOGUE_TEXT(1, 4);
- startIgorDialogue();
- waitForEndOfIgorDialogue();
- wd->x = 240;
- wd->y = 130;
- ADD_DIALOGUE_TEXT(152, 1, 78);
- ADD_DIALOGUE_TEXT(153, 3, 79);
- SET_DIALOGUE_TEXT(1, 2);
- startIgorDialogue();
- waitForEndOfIgorDialogue();
- wd->x = _walkDataCurrentPosX2;
- wd->y = _walkDataCurrentPosY2;
- wd->scaleWidth = _walkDataCurrentWScale;
- fadeOutPalette(624);
- if (tmp) {
- memcpy(_screenVGA, tmp, 64000);
- memcpy(_paletteBuffer, tmp + 64000, 768);
- free(tmp);
- }
- fadeInPalette(624);
- _objectsState[2] = 1;
-}
-
-void IgorEngine::EXEC_MAIN_ACTION_43() {
- memcpy(_paletteBuffer, _currentPalette, 624);
- fadeOutPalette(624);
- uint8 *tmp = (uint8 *)malloc(64000 + 768);
- if (tmp) {
- memcpy(tmp, _screenVGA, 64000);
- memcpy(tmp + 64000, _paletteBuffer, 768);
- }
- loadData(IMG_PhotoHarrisonMargaret, _screenVGA);
- loadData(PAL_PhotoHarrisonMargaret, _paletteBuffer);
- fadeInPalette(624);
- WalkData *wd = &_walkData[_walkDataLastIndex - 1];
- int _walkDataCurrentPosX2 = wd->x;
- int _walkDataCurrentPosY2 = wd->y;
- int _walkDataCurrentWScale = wd->scaleWidth;
- wd->x = 160;
- wd->y = 130;
- wd->scaleWidth = 50;
- ADD_DIALOGUE_TEXT(83, 2, 59);
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- waitForEndOfIgorDialogue();
- _currentAction.object1Num = 0;
- wd->x = _walkDataCurrentPosX2;
- wd->y = _walkDataCurrentPosY2;
- wd->scaleWidth = _walkDataCurrentWScale;
- fadeOutPalette(624);
- if (tmp) {
- memcpy(_screenVGA, tmp, 64000);
- memcpy(_paletteBuffer, tmp + 64000, 768);
- free(tmp);
- }
- fadeInPalette(624);
-}
-
-void IgorEngine::EXEC_MAIN_ACTION_54() {
- memcpy(_paletteBuffer, _currentPalette, 624);
- fadeOutPalette(624);
- uint8 *tmp = (uint8 *)malloc(64000 + 768);
- if (tmp) {
- memcpy(tmp, _screenVGA, 64000);
- memcpy(tmp + 64000, _paletteBuffer, 768);
- }
- loadData(IMG_RomanNumbersPaper, _screenVGA);
- loadData(PAL_RomanNumbersPaper, _paletteBuffer);
- PART_UPDATE_FIGURES_ON_PAPER(0);
- fadeInPalette(624);
- WalkData *wd = &_walkData[_walkDataLastIndex - 1];
- int _walkDataCurrentPosX2 = wd->x;
- int _walkDataCurrentPosY2 = wd->y;
- int _walkDataCurrentWScale = wd->scaleWidth;
- wd->x = 160;
- wd->y = 130;
- wd->scaleWidth = 50;
- if (_objectsState[2] == 0) {
- ADD_DIALOGUE_TEXT(99, 1, 68);
- } else {
- ADD_DIALOGUE_TEXT(100, 2, 69);
- }
- SET_DIALOGUE_TEXT(1, 1);
- startIgorDialogue();
- waitForEndOfIgorDialogue();
- wd->x = _walkDataCurrentPosX2;
- wd->y = _walkDataCurrentPosY2;
- wd->scaleWidth = _walkDataCurrentWScale;
- fadeOutPalette(624);
- if (tmp) {
- memcpy(_screenVGA, tmp, 64000);
- memcpy(_paletteBuffer, tmp + 64000, 768);
- free(tmp);
- }
- fadeInPalette(624);
-}
-
-void IgorEngine::CHECK_FOR_END_OF_DEMO() {
- if (_demoActionsCounter >= 10) {
- ADD_DIALOGUE_TEXT(104, 2);
- ADD_DIALOGUE_TEXT(106, 2);
- SET_DIALOGUE_TEXT(1, 2);
- startIgorDialogue();
- }
-}
-
-void IgorEngine::SET_PAL_208_96_1() {
- memcpy(_paletteBuffer + 208 * 3, PAL_96_1, 96);
-}
-
-void IgorEngine::SET_PAL_240_48_1() {
- memcpy(_paletteBuffer + 240 * 3, PAL_48_1, 48);
-}
-
-void IgorEngine::UPDATE_OBJECT_STATE(int num) {
- if (num == 1 || num == 255) {
- switch (_objectsState[0]) {
- case 0:
- strcpy(_globalObjectNames[23], getString(STR_BottleOfWhisky));
- break;
- case 1:
- strcpy(_globalObjectNames[23], getString(STR_EmptyBottle));
- break;
- case 2:
- strcpy(_globalObjectNames[23], getString(STR_BottleOfWater));
- break;
- }
- }
- if (num == 2 || num == 255) {
- switch (_objectsState[1]) {
- case 0:
- _inventoryImages[23] = 27;
- strcpy(_globalObjectNames[24], getString(STR_Lizard));
- break;
- default:
- _inventoryImages[23] = 35;
- strcpy(_globalObjectNames[24], getString(STR_FatLizard));
- break;
- }
- }
- if (num == 4 || num == 255) {
- switch (_objectsState[3]) {
- case 0:
- strcpy(_globalObjectNames[22], getString(STR_CarolineFolder));
- break;
- case 1:
- strcpy(_globalObjectNames[22], getString(STR_PhilipFolder));
- break;
- }
- }
- if (num == 7 || num == 255) {
- switch (_objectsState[6]) {
- case 0:
- _inventoryImages[33] = 21;
- break;
- case 1:
- _inventoryImages[33] = 14;
- break;
- case 2:
- _inventoryImages[33] = 7;
- break;
- }
- }
- if (num == 8 || num == 255) {
- if (_objectsState[7] == 0) {
- strcpy(_globalObjectNames[25], getString(STR_Statuette));
- _inventoryImages[24] = 29;
- } else {
- strcpy(_globalObjectNames[25], getString(STR_Reward));
- _inventoryImages[24] = 39;
- }
- }
-}
-
-void IgorEngine::PART_MEANWHILE() {
- hideCursor();
- memset(_currentPalette, 0, 768);
- setPaletteRange(208, 255);
- loadData(IMG_Meanwhile, _screenVGA);
- _paletteBuffer[3] = 63;
- _paletteBuffer[4] = 32;
- _paletteBuffer[5] = 0;
- _paletteBuffer[6] = 44;
- _paletteBuffer[7] = 12;
- _paletteBuffer[8] = 0;
- fadeInPalette(9);
- for (int i = 0; i <= 5 && !_inputVars[kInputEscape]; ++i) {
- waitForTimer(250);
- }
- _inputVars[kInputEscape] = 0;
- fadeOutPalette(9);
-}
-
-static int VAR_MARGARET_ROOM_ANIM_COUNTER;
-
-void IgorEngine::PART_MARGARET_ROOM_CUTSCENE_HELPER_1() {
- const uint8 *src = _animFramesBuffer + READ_LE_UINT16(_animFramesBuffer + 0x2A63 + VAR_MARGARET_ROOM_ANIM_COUNTER * 2) - 1;
- decodeAnimFrame(src, _screenVGA);
-}
-
-void IgorEngine::PART_MARGARET_ROOM_CUTSCENE_HELPER_2(int frame) {
- const int offset = ((VAR_MARGARET_ROOM_ANIM_COUNTER - 1) * 5 + frame) * 2;
- const uint8 *src = _animFramesBuffer + 0x2A75 + READ_LE_UINT16(_animFramesBuffer + offset + 0xD887) - 1;
- decodeAnimFrame(src, _screenVGA);
-}
-
-void IgorEngine::PART_MARGARET_ROOM_CUTSCENE_UPDATE_DIALOGUE_MARGARET(int action) {
- switch (action) {
- case kUpdateDialogueAnimEndOfSentence:
- PART_MARGARET_ROOM_CUTSCENE_HELPER_2(1);
- break;
- case kUpdateDialogueAnimMiddleOfSentence:
- PART_MARGARET_ROOM_CUTSCENE_HELPER_2(getRandomNumber(5) + 1);
- break;
- }
-}
-
-void IgorEngine::PART_MARGARET_ROOM_CUTSCENE() {
- _gameState.enableLight = 1;
- VAR_MARGARET_ROOM_ANIM_COUNTER = _objectsState[110] + 1;
- if (VAR_MARGARET_ROOM_ANIM_COUNTER == 9) {
- VAR_MARGARET_ROOM_ANIM_COUNTER = 1;
- }
- loadRoomData(PAL_MargaretRoom, IMG_MargaretRoom, BOX_MargaretRoom, MSK_MargaretRoom, TXT_MargaretRoom);
- static const int anm[] = { FRM_MargaretRoom1, FRM_MargaretRoom2, FRM_MargaretRoom3, FRM_MargaretRoom4, 0 };
- loadAnimData(anm);
- memcpy(_screenVGA, _screenLayer1, 46080);
- _updateDialogue = &IgorEngine::PART_MARGARET_ROOM_CUTSCENE_UPDATE_DIALOGUE_MARGARET;
- PART_MARGARET_ROOM_CUTSCENE_HELPER_1();
- memset(_currentPalette, 0, 768);
- fadeInPalette(768);
- _gameState.igorMoving = false;
- switch (VAR_MARGARET_ROOM_ANIM_COUNTER) {
- case 1:
- ADD_DIALOGUE_TEXT(223, 1, 1118);
- ADD_DIALOGUE_TEXT(224, 1, 1119);
- ADD_DIALOGUE_TEXT(225, 1, 1120);
- break;
- case 2:
- ADD_DIALOGUE_TEXT(201, 1, 1097);
- ADD_DIALOGUE_TEXT(202, 1, 1098);
- ADD_DIALOGUE_TEXT(203, 1, 1099);
- break;
- case 3:
- ADD_DIALOGUE_TEXT(204, 1, 1100);
- ADD_DIALOGUE_TEXT(205, 1, 1101);
- ADD_DIALOGUE_TEXT(206, 1, 1102);
- break;
- case 4:
- ADD_DIALOGUE_TEXT(207, 1, 1103);
- ADD_DIALOGUE_TEXT(208, 1, 1104);
- ADD_DIALOGUE_TEXT(209, 1, 1105);
- break;
- case 5:
- ADD_DIALOGUE_TEXT(210, 1, 1106);
- ADD_DIALOGUE_TEXT(211, 1, 1107);
- ADD_DIALOGUE_TEXT(212, 1, 1108);
- break;
- case 6:
- ADD_DIALOGUE_TEXT(213, 2, 1109);
- ADD_DIALOGUE_TEXT(215, 1, 1110);
- ADD_DIALOGUE_TEXT(216, 1, 1111);
- break;
- case 7:
- ADD_DIALOGUE_TEXT(217, 1, 1112);
- ADD_DIALOGUE_TEXT(218, 1, 1113);
- ADD_DIALOGUE_TEXT(219, 1, 1114);
- break;
- case 8:
- ADD_DIALOGUE_TEXT(220, 1, 1115);
- ADD_DIALOGUE_TEXT(221, 1, 1116);
- ADD_DIALOGUE_TEXT(222, 1, 1117);
- break;
- }
- SET_DIALOGUE_TEXT(1, 3);
- startCutsceneDialogue(200, 73, 63, 32, 0);
- waitForEndOfCutsceneDialogue(200, 73, 63, 32, 0);
- waitForTimer(255);
- _updateDialogue = 0;
- ++_objectsState[110];
- memcpy(_paletteBuffer, _currentPalette, 768);
- fadeOutPalette(768);
- memset(_screenVGA, 0, 46080);
- if (_objectsState[110] < 9 && _currentPart != 331) {
- setupDefaultPalette();
- SET_PAL_240_48_1();
- SET_PAL_208_96_1();
- drawVerbsPanel();
- drawInventory(_inventoryInfo[72], 0);
- }
-}
-
-void IgorEngine::PART_UPDATE_FIGURES_ON_PAPER(int delay) {
- uint8 *framesData = loadData(FRM_NumbersPaper1);
- uint8 *framesOffsets = loadData(FRM_NumbersPaper2);
- for (int i = 1; i <= 20; ++i) {
- const uint8 *p = framesData + READ_LE_UINT16(framesOffsets + (i - 1) * 2) - 1;
- decodeAnimFrame(p, _screenVGA, true);
- waitForTimer(delay);
- }
- free(framesData);
- free(framesOffsets);
-}
-
-void IgorEngine::PART_MAIN() {
- SET_EXEC_ACTION_FUNC(0, &IgorEngine::EXEC_MAIN_ACTION);
- memset(_objectsState, 0, 112);
- _objectsState[21] = 1;
- _objectsState[49] = 1;
- memset(_inventoryInfo, 0, 36);
- _inventoryInfo[0] = 1; // ordering
- _inventoryInfo[1] = 2;
- _inventoryInfo[2] = 4;
- _inventoryInfo[36] = 1;
- _inventoryInfo[37] = 2;
- _inventoryInfo[39] = 3;
- _inventoryInfo[72] = 1; // first object
- _inventoryInfo[73] = 3; // last object
- UPDATE_OBJECT_STATE(255);
- if (_currentPart != kStartupPart) { // boot param
- SET_PAL_208_96_1();
- SET_PAL_240_48_1();
- drawVerbsPanel();
- drawInventory(1, 0);
- }
- do {
- debugC(9, kDebugGame, "PART_MAIN _currentPart %d", _currentPart);
- switch (_currentPart) {
- case 40:
- PART_04();
- break;
- case 50:
- case 51:
- case 52:
- PART_05();
- break;
- case 60:
- case 61:
- case 62:
- PART_06();
- break;
- case 120:
- case 121:
- case 122:
- PART_12();
- break;
- case 130:
- case 131:
- PART_13();
- break;
- case 140:
- case 141:
- case 142:
- PART_14();
- break;
- case 150:
- PART_15();
- break;
- case 160:
- PART_16();
- break;
- case 170:
- case 171:
- PART_17();
- break;
- case 180:
- case 181:
- PART_18();
- break;
- case 190:
- case 191:
- PART_19();
- break;
- case 210:
- case 211:
- case 212:
- PART_21();
- break;
- case 220:
- case 221:
- PART_22();
- break;
- case 230:
- case 231:
- case 232:
- PART_23();
- break;
- case 240:
- case 241:
- case 242:
- PART_24();
- break;
- case 250:
- case 251:
- case 252:
- PART_25();
- break;
- case 260:
- case 261:
- PART_26();
- break;
- case 270:
- case 271:
- PART_27();
- break;
- case 280:
- case 281:
- PART_28();
- break;
- case 300:
- case 301:
- case 302:
- case 303:
- PART_30();
- break;
- case 310:
- case 311:
- case 312:
- case 313:
- PART_31();
- break;
- case 330:
- case 331:
- PART_33();
- break;
- case 360:
- PART_36();
- break;
- case 370:
- PART_37();
- break;
- case 750:
- PART_75();
- break;
- case 850:
- memset(_screenVGA, 0, 64000);
- _screenVGAVOffset = 24;
- _system->copyRectToScreen(_screenVGA, 320, 0, 0, 320, _screenVGAVOffset);
- PART_85();
- memset(_screenVGA + 46080, 0, 17920);
- _nextTimer = _system->getMillis() + 1000 / 60;
- for (int y = _screenVGAVOffset; y >= 0; --y) {
- _system->copyRectToScreen(_screenVGA, 320, 0, y, 320, 145);
- _system->updateScreen();
- int diff = _nextTimer - _system->getMillis();
- if (diff > 0) {
- _system->delayMillis(diff);
- }
- _nextTimer = _system->getMillis() + 1000 / 60;
- }
- _screenVGAVOffset = 0;
- _inputVars[kInputCursorXPos] = 160;
- _inputVars[kInputCursorYPos] = 72;
- _system->warpMouse(_inputVars[kInputCursorXPos], _inputVars[kInputCursorYPos]);
- break;
- case 900:
- case 901:
- case 902:
- case 903:
- case 904:
- PART_90();
- break;
- default:
- warning("PART_MAIN() Unhandled part %d", _currentPart);
- _currentPart = kInvalidPart;
- break;
- }
- if (_currentPart >= 10) {
- if (_currentPart <= 24 || _currentPart == 51) {
- continue;
- }
- if (_currentPart == 60 || _currentPart == 102 || _currentPart == 110) {
- continue;
- }
- }
- if (_currentPart == 340 || _currentPart == 351 || _currentPart == 750) {
- continue;
- }
- if (_currentPart == 122 || _currentPart == 255) {
- continue;
- }
- if (_objectsState[110] < 1 || _objectsState[110] > 7) {
- continue;
- }
- if (_gameState.nextMusicCounter != 5) {
- ++_gameState.nextMusicCounter;
- } else {
- if (_gameState.musicNum != 11) {
- _previousMusic = _gameState.musicNum;
- playMusic(11);
- }
- PART_MEANWHILE();
- PART_MARGARET_ROOM_CUTSCENE();
- if (_previousMusic != 11) {
- playMusic(_previousMusic);
- }
- _gameState.nextMusicCounter = 0;
- }
- } while (_currentPart != kInvalidPart && !_eventQuitGame);
- if (_game.flags & kFlagDemo) {
- for (_currentPart = kSharewarePart; !_eventQuitGame && _currentPart <= kSharewarePart + 6; ++_currentPart) {
- PART_95();
- }
- }
-}
-
-} // namespace Igor