/* 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. * */ #include "dragons/minigame2.h" #include "dragons/actor.h" #include "dragons/actorresource.h" #include "dragons/dragons.h" #include "dragons/dragonini.h" #include "dragons/font.h" #include "dragons/talk.h" #include "dragons/inventory.h" #include "dragons/scene.h" #include "dragons/screen.h" #include "dragons/cursor.h" #include "dragons/sound.h" namespace Dragons { Minigame2::Minigame2(DragonsEngine *vm) : _vm(vm), _dat_80093c70(false), _dat_80093c72(false), _dat_80093c74(0), _dat_80093ca8(false) { _dat_80093cb4 = 0; _dat_80093cbc = 0; _dat_80093cb8 = 0; _dat_80093cc0 = 0; _dat_80093ca4 = 0; _dat_80093c90 = 0; _dat_80093c94 = 0; _dat_80093cac = 0; _dat_80093cb0 = false; _dat_80093c9c = 0; _dat_80093c98 = 0; _dat_80093ca0 = 0; _dat_80093cc4 = 0; _dat_80093cc8 = 0; } static const uint16 unkArray[5] = { 0xC, 0xA, 0x8, 0x6, 0x4 }; void Minigame2::run(int16 param_1, uint16 param_2, int16 param_3) { short sVar2; short sVar3; bool bVar4; DragonINI *flicker; uint32 origEngineFlags; Actor *loungealotBigPunchActor; Actor *loungealotHeadActor; Actor *loungealotLeftUpperArm; Actor *loungealotLegActor; Actor *loungealotRightArm; Actor *flickerArm; Actor *loungealotThumb; Actor *uVar12; Actor *uVar13; Actor *flickerPortrait; Actor *loungealotPortrait; uint uVar18; //uint uVar19; //int iVar20; bool shouldShakeScreen; uint16 local_2e6; int16 actorSequenceIdTbl [15]; uint32 textIdTbl [4]; uint16 local_2b0 [8]; uint16 local_288; uint16 local_286; uint16 local_284; uint16 local_282; uint16 local_27a; uint16 local_278; short local_272; short local_26c; uint16 local_268; uint16 local_264; uint16 local_262; short local_260; short local_258; short local_256; int16 screenShakeTbl [10]; uint16 screenShakeCounter; uint8 paletteData [0x200]; uint16 local_28; InventoryState originalInventoryType; origEngineFlags = _vm->getAllFlags(); originalInventoryType = _vm->_inventory->getState(); flicker = _vm->_dragonINIResource->getFlickerRecord(); Common::File *fd = new Common::File(); if (!fd->open("arc2.bin")) { error("Failed to open arc2.bin"); } for (int i = 0; i < 15; i++) { actorSequenceIdTbl[i] = fd->readSint16LE(); } fd->skip(2); for (int i = 0; i < 6; i++) { local_2b0[i] = fd->readSint16LE(); } for (int i = 0; i < 9; i++) { screenShakeTbl[i] = fd->readSint16LE(); } fd->close(); textIdTbl[0] = _vm->getDialogTextId(0x4500); textIdTbl[1] = _vm->getDialogTextId(0x454A); textIdTbl[2] = _vm->getDialogTextId(0x4576); bVar4 = false; local_27a = 0; local_278 = 0; local_272 = 0; local_26c = 0x1e; shouldShakeScreen = false; local_264 = 0; local_262 = 0; local_260 = 300; local_258 = 0; local_256 = 0; screenShakeCounter = 0; local_2e6 = param_2; if (param_2 > 4) { local_2e6 = 4; } _dat_80093ca4 = unkArray[local_2e6]; _dat_80093c90 = unkArray[local_2e6]; _dat_80093c94 = 0; _vm->_inventory->setState(Closed); _dat_80093cb4 = 2; _dat_80093cbc = 0; _dat_80093cb8 = 2; _dat_80093cc0 = 0; _dat_80093cac = 0; _dat_80093cb0 = false; _dat_80093c9c = 0; _vm->_talk->_dat_8008e874_dialogBox_y2 = 0; _vm->_talk->_dat_8008e844_dialogBox_y1 = 0; _vm->_talk->_dat_8008e848_dialogBox_x2 = 0; _vm->_talk->_dat_8008e7e8_dialogBox_x1 = 0; _dat_80093c98 = _dat_80093c90; _dat_80093ca0 = param_1; _dat_80093cc4 = _dat_80093ca4; _dat_80093cc8 = _dat_80093ca4; _vm->fadeToBlack(); _vm->reset_screen_maybe(); _vm->_inventory->setState(Closed); flicker->sceneId = 0; _vm->_dragonINIResource->setFlickerRecord(nullptr); _vm->setFlags(ENGINE_FLAG_800); _vm->_scene->setSceneId(5); _vm->_scene->loadSceneData(5 | 0x8000, 0); //DisableVSyncEvent(); _vm->clearFlags(ENGINE_FLAG_8); _vm->clearFlags(ENGINE_FLAG_10); _vm->clearFlags(ENGINE_FLAG_20); _vm->clearFlags(ENGINE_FLAG_80); memcpy(paletteData, _vm->_scene->getPalette() + 0x180, 0x80); memcpy(paletteData + 0x80, _vm->_scene->getPalette() + 0x180, 0x80); _vm->_screen->loadPalette(1, paletteData); _vm->_screen->updatePaletteTransparency(1, 0x40, 0x7f, true); loungealotBigPunchActor = _vm->_actorManager->loadActor(0x11, 0, 0, 0, 6); loungealotHeadActor = _vm->_actorManager->loadActor(0xd, 0, 0x7d, 199, 4); loungealotLeftUpperArm = _vm->_actorManager->loadActor(0xb, 2, 0x7d, 199, 4); loungealotLegActor = _vm->_actorManager->loadActor(0xf, 0, 0x7d, 199, 4); loungealotRightArm = _vm->_actorManager->loadActor(0x10, 0, 0x7d, 199, 4); flickerArm = _vm->_actorManager->loadActor(9, (uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb4 * 3 + (uint)_dat_80093cbc], loungealotLeftUpperArm->_x_pos, loungealotLeftUpperArm->_y_pos, 4); loungealotThumb = _vm->_actorManager->loadActor(0x12, (uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb4 * 3 + (uint)_dat_80093cbc], loungealotLeftUpperArm->_x_pos, loungealotLeftUpperArm->_y_pos, 4); uVar12 = _vm->_actorManager->loadActor(10, (uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb8 * 3 + (uint)_dat_80093cc0], flickerArm->_x_pos, flickerArm->_y_pos, 4); uVar13 = _vm->_actorManager->loadActor(0x13, (uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb8 * 3 + (uint)_dat_80093cc0], flickerArm->_x_pos, flickerArm->_y_pos, 4); flickerPortrait = _vm->_actorManager->loadActor(0x27, 0, 0x10, 0xac, 4); loungealotPortrait = _vm->_actorManager->loadActor(0x27, 1, 0x10, 0x8c, 4); loungealotBigPunchActor->setFlag(ACTOR_FLAG_100); loungealotHeadActor->setFlag(ACTOR_FLAG_100); loungealotLeftUpperArm->setFlag(ACTOR_FLAG_100); loungealotLegActor->setFlag(ACTOR_FLAG_100); loungealotRightArm->setFlag(ACTOR_FLAG_100); flickerArm->setFlag(ACTOR_FLAG_100); loungealotThumb->setFlag(ACTOR_FLAG_100); uVar12->setFlag(ACTOR_FLAG_100); uVar13->setFlag(ACTOR_FLAG_100); flickerPortrait->setFlag(ACTOR_FLAG_100); loungealotPortrait->setFlag(ACTOR_FLAG_100); loungealotBigPunchActor->_priorityLayer = 6; flickerArm->_priorityLayer = 5; uVar12->_priorityLayer = 5; loungealotThumb->_priorityLayer = 4; uVar13->_priorityLayer = 3; loungealotRightArm->_priorityLayer = 3; loungealotLeftUpperArm->_priorityLayer = 2; loungealotHeadActor->_priorityLayer = 2; loungealotLegActor->_priorityLayer = 1; flickerPortrait->_priorityLayer = 0; loungealotPortrait->_priorityLayer = 0; FlatQuad *flickerPowerMeter = _vm->_screen->getFlatQuad(_vm->_screen->addFlatQuad(0x28, 0xa8, 0x67, 0xa8, 0x67, 0xaf, 0x28, 0xaf, 0x1f, 7, 0)); FlatQuad *loungealotPowerMeter = _vm->_screen->getFlatQuad(_vm->_screen->addFlatQuad(0x28, 0x88, 0x67, 0x88, 0x67, 0x8f, 0x28, 0x8f, 0x3e0, 7, 0)); flickerPowerMeter->flags &= ~1u; loungealotPowerMeter->flags &= ~1u; // EnableVSyncEvent(); loungealotHeadActor->setFlag(ACTOR_FLAG_1); loungealotLeftUpperArm->setFlag(ACTOR_FLAG_1); loungealotLegActor->setFlag(ACTOR_FLAG_1); loungealotRightArm->setFlag(ACTOR_FLAG_1); flickerArm->setFlag(ACTOR_FLAG_1); loungealotThumb->setFlag(ACTOR_FLAG_1); uVar12->setFlag(ACTOR_FLAG_1); uVar13->setFlag(ACTOR_FLAG_1); flickerArm->waitUntilFlag8And4AreSet(); uVar12->waitUntilFlag8And4AreSet(); loungealotThumb->waitUntilFlag8And4AreSet(); uVar13->waitUntilFlag8And4AreSet(); loungealotLeftUpperArm->waitUntilFlag8And4AreSet(); loungealotRightArm->waitUntilFlag8And4AreSet(); loungealotHeadActor->waitUntilFlag8And4AreSet(); loungealotLegActor->waitUntilFlag8And4AreSet(); loungealotBigPunchActor->setFlag(ACTOR_FLAG_400); flickerArm->_x_pos = loungealotLeftUpperArm->_x_pos - loungealotLeftUpperArm->_frame->field_e; flickerArm->_y_pos = loungealotLeftUpperArm->_y_pos - loungealotLeftUpperArm->_frame->field_10; loungealotThumb->_x_pos = loungealotLeftUpperArm->_x_pos - loungealotLeftUpperArm->_frame->field_e; loungealotThumb->_y_pos = loungealotLeftUpperArm->_y_pos - loungealotLeftUpperArm->_frame->field_10; uVar12->_x_pos = loungealotLeftUpperArm->_x_pos - flickerArm->_frame->field_e; uVar12->_y_pos = loungealotLeftUpperArm->_y_pos - flickerArm->_frame->field_10; uVar13->_x_pos = loungealotLeftUpperArm->_x_pos - flickerArm->_frame->field_e; uVar13->_y_pos = loungealotLeftUpperArm->_y_pos - flickerArm->_frame->field_10; _vm->waitForFrames(2); _vm->fadeFromBlack(); do { _vm->waitForFrames(1); if ((_dat_80093c9c != 0) && !_vm->isFlagSet(ENGINE_FLAG_8000)) { loungealotHeadActor->updateSequence(0); _vm->_talk->FUN_8001a7c4_clearDialogBoxMaybe(); _dat_80093c9c = 0; } if (_dat_80093c94 != 0) { local_264 = 0; } if (loungealotLegActor->_field_7a == 1) { shouldShakeScreen = true; loungealotLegActor->_field_7a = 0; screenShakeCounter = 0; } if (shouldShakeScreen) { _vm->_screen->setScreenShakeOffset(0, screenShakeTbl[screenShakeCounter]); if (screenShakeTbl[screenShakeCounter] == 0) { shouldShakeScreen = false; } screenShakeCounter = screenShakeCounter + 1; } if (_dat_80093ca4 == 0) { _dat_80093ca4 = _dat_80093cc8; } else { _dat_80093ca4 = _dat_80093ca4 - 1; } if (_dat_80093c90 == 0) { _dat_80093c90 = _dat_80093c98; } else { _dat_80093c90 = _dat_80093c90 - 1; } if (_dat_80093cc4 == 0) { _dat_80093cc4 = _dat_80093cc8; } else { _dat_80093cc4 = _dat_80093cc4 - 1; } if (local_27a == 0) { flickerPowerMeter->flags &= ~1u; } else { flickerPowerMeter->points[1].x = local_27a + 0x27; flickerPowerMeter->points[3].x = local_27a + 0x27; flickerPowerMeter->colour = (uint16)(((int)((uint)local_27a - 1) >> 1) << 5) | (uint16)(((int)(0x40 - (uint)local_27a) >> 1) << 10); flickerPowerMeter->flags |= 1; } if (local_278 == 0) { loungealotPowerMeter->flags &= ~1u; if ((local_27a != 0) || (local_258 != 0)) goto LAB_800907c4; } else { loungealotPowerMeter->points[1].x = local_278 + 0x27; loungealotPowerMeter->points[3].x = local_278 + 0x27; loungealotPowerMeter->colour = (uint16)(((int)((uint)local_278 - 1) >> 1) << 5) | (uint16)(((int)(0x40 - (uint)local_278) >> 1) << 10); loungealotPowerMeter->flags |= 1; LAB_800907c4: if (!bVar4) { _vm->_fontManager->drawTextDialogBox(4, 0x14, 0xd, 0x16); _vm->_fontManager->drawTextDialogBox(4, 0x10, 0xd, 0x12); flickerPortrait->_priorityLayer = 6; loungealotPortrait->_priorityLayer = 6; bVar4 = true; } } if ((((local_278 == 0) && (local_27a == 0)) && (local_258 == 0)) && (bVar4)) { _vm->_fontManager->clearTextDialog(4, 0x14, 0xd, 0x16); _vm->_fontManager->clearTextDialog(4, 0x10, 0xd, 0x12); flickerPortrait->_priorityLayer = 0; loungealotPortrait->_priorityLayer = 0; bVar4 = false; } //DisableVSyncEvent(); loungealotThumb->_x_pos = loungealotLeftUpperArm->_x_pos - loungealotLeftUpperArm->_frame->field_e; flickerArm->_x_pos = loungealotThumb->_x_pos; sVar2 = flickerArm->_x_pos; loungealotThumb->_y_pos = loungealotLeftUpperArm->_y_pos - loungealotLeftUpperArm->_frame->field_10; flickerArm->_y_pos = loungealotThumb->_y_pos; sVar3 = flickerArm->_y_pos; uVar13->_x_pos = sVar2 - flickerArm->_frame->field_e; uVar12->_x_pos = uVar13->_x_pos; uVar13->_y_pos = sVar3 - flickerArm->_frame->field_10; uVar12->_y_pos = uVar13->_y_pos; // EnableVSyncEvent(); local_282 = _dat_80093cc0; local_286 = _dat_80093cbc; local_284 = _dat_80093cb8; local_288 = _dat_80093cb4; if (_dat_80093c94 != 1) { if (_dat_80093c94 < 2) { if (_dat_80093c94 == 0) { if (((local_264 < 300) || (_dat_80093ca0 != 0)) || (_dat_80093cbc == 2)) { if ((local_260 != 0) && (local_260 = local_260 + -1, local_260 == 0)) { if (local_262 != 0) { local_262 = local_262 - 1; } local_260 = 300; } } else { local_264 = 0; local_260 = 300; // playSoundFromTxtIndex(textIdTbl[local_262]); loungealotHeadActor->updateSequence((uint)local_2b0[(uint)local_262 * 2]); uVar18 = (uint)local_262; local_262 = local_262 + 1; fun_80093aec_dialog(textIdTbl[uVar18], 0x14, 1); if (local_262 == 3) { while (((_dat_80093cb4 != 2 || (_dat_80093cbc != 0)) || ((_dat_80093cb8 != 2 || (_dat_80093cc0 != 0))))) { _vm->waitForFrames(1); if (flickerArm->isFlagSet(ACTOR_FLAG_4)) { if (_dat_80093cbc != 0) { _dat_80093cbc = _dat_80093cbc - 1; } if (2 < _dat_80093cb4) { _dat_80093cb4 = _dat_80093cb4 - 1; } if (_dat_80093cb4 < 2) { _dat_80093cb4 = _dat_80093cb4 + 1; } } if ((uVar12->_flags & 4) != 0) { if (_dat_80093cc0 != 0) { _dat_80093cc0 = _dat_80093cc0 - 1; } if (2 < _dat_80093cb8) { _dat_80093cb8 = _dat_80093cb8 - 1; } if (_dat_80093cb8 < 2) { _dat_80093cb8 = _dat_80093cb8 + 1; } } if (flickerArm->_sequenceID != actorSequenceIdTbl[(uint)_dat_80093cb4 * 3 + (uint)_dat_80093cbc]) { flickerArm->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb4 * 3 + (uint)_dat_80093cbc]); loungealotThumb->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb4 * 3 + (uint)_dat_80093cbc]); } if (uVar12->_sequenceID != actorSequenceIdTbl[(uint)_dat_80093cb8 * 3 + (uint)_dat_80093cc0]) { uVar12->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb8 * 3 + (uint)_dat_80093cc0]); uVar13->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb8 * 3 + (uint)_dat_80093cc0]); } } _vm->waitForFrames(2 * 0x3c); // DisableVSyncEvent(); memset(paletteData, 0, 0x200); loungealotBigPunchActor->_flags = loungealotBigPunchActor->_flags & 0xfbff; loungealotHeadActor->setFlag(ACTOR_FLAG_400); loungealotLeftUpperArm->setFlag(ACTOR_FLAG_400); loungealotRightArm->setFlag(ACTOR_FLAG_400); loungealotLegActor->_flags = loungealotLegActor->_flags | 0x400; flickerArm->setFlag(ACTOR_FLAG_400); loungealotThumb->setFlag(ACTOR_FLAG_400); uVar12->setFlag(ACTOR_FLAG_400); uVar13->setFlag(ACTOR_FLAG_400); // EnableVSyncEvent(); _vm->waitForFrames(6); loungealotBigPunchActor->updateSequence(1); loungealotBigPunchActor->waitUntilFlag4IsSet(); _vm->waitForFrames(1); _vm->_screen->loadPalette(0, paletteData); _vm->_screen->loadPalette(1, paletteData); _vm->_talk->FUN_8001a7c4_clearDialogBoxMaybe(); //punched in the face. break; } } if (local_26c != 0) { local_26c = local_26c + -1; } if (local_278 != 0) { local_278 = local_278 - 1; } if (local_27a != 0) { local_27a = local_27a - 1; } local_268 = 2; if (_vm->isLeftKeyPressed()) { local_268 = 1; } if (fun_80093520()) { local_268 = local_268 - 1; } if (_vm->isRightKeyPressed()) { local_268 = local_268 + 1; } if (fun_80093248()) { local_268 = local_268 + 1; } if (loungealotLeftUpperArm->_sequenceID != local_268) { loungealotLeftUpperArm->updateSequence(local_268); } if ((flickerArm->_flags & 4) != 0) { if (_vm->isRightKeyPressed() && (local_288 != 0)) { local_288 = local_288 - 1; } if (_vm->isLeftKeyPressed() && (local_288 < 4)) { local_288 = local_288 + 1; } if ((!_vm->isLeftKeyPressed() && !_vm->isRightKeyPressed()) && (local_288 != 2)) { if (local_288 < 2) { local_288 = local_288 + 1; } else { local_288 = local_288 - 1; } } if (!_vm->isActionButtonPressed() || (local_26c != 0)) { if (local_286 != 0) { local_286 = local_286 - 1; } } else { if (local_286 < 2) { local_286 = local_286 + 1; } } } if (local_286 == 2) { if (local_256 < 0x14) { local_256 = local_256 + 1; } else { local_256 = 0; } } if (local_256 < 0x14) { local_264 = local_264 + 1; } else { local_264 = 0; } if ((uVar12->_flags & 4) != 0) { if (fun_80093248() && (local_284 != 0)) { local_284 = local_284 - 1; } if (fun_80093520() && (local_284 < 4)) { local_284 = local_284 + 1; } if ((!fun_80093520() && !fun_80093248()) && (local_284 != 2)) { if (local_284 < 2) { local_284 = local_284 + 1; } else { local_284 = local_284 - 1; } } if (!fun_80093800() || (local_26c != 0)) { if (local_282 != 0) { local_282 = local_282 - 1; } } else { if (local_282 < 2) { local_282 = local_282 + 1; } } } if (((local_286 == 2) && (local_282 == 2)) && (local_288 == local_284)) { if ((_dat_80093cbc == 2) && (_dat_80093cc0 != 2)) { local_258 = 2; } else { if ((_dat_80093cbc == 2) || (_dat_80093cc0 != 2)) { local_288 = _dat_80093cb4; local_286 = _dat_80093cbc; local_284 = _dat_80093cb8; local_282 = _dat_80093cc0; } else { local_258 = 1; } } } if (local_258 == 0) { if ((local_286 != _dat_80093cbc) || (local_288 != _dat_80093cb4)) { _dat_80093cb4 = local_288; _dat_80093cbc = local_286; flickerArm->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)local_288 * 3 + (uint)local_286]); loungealotThumb->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb4 * 3 + (uint)_dat_80093cbc]); } if ((local_282 != _dat_80093cc0) || (local_284 != _dat_80093cb8)) { _dat_80093cb8 = local_284; _dat_80093cc0 = local_282; uVar12->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)local_284 * 3 + (uint)local_282]); uVar13->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb8 * 3 + (uint)_dat_80093cc0]); } } else { if (local_258 == 1) { loungealotHeadActor->updateSequence(1); loungealotLegActor->updateSequence(1); if (local_288 == 2) { local_28 = 1; } else { if (local_288 < 3) { if (local_288 == 0) { local_28 = 0; } else { LAB_800926a4: local_28 = 2; } } else { if (local_288 != 4) goto LAB_800926a4; local_28 = 2; } } } else { loungealotHeadActor->updateSequence(3); loungealotRightArm->updateSequence(1); if (local_284 == 2) { local_28 = 4; } else { if (local_284 < 3) { if (local_284 == 0) { local_28 = 3; } else { LAB_80092754: local_28 = 4; } } else { if (local_284 != 4) goto LAB_80092754; local_28 = 5; } } } uVar12->_flags = uVar12->_flags | 0x400; uVar13->_flags = uVar13->_flags | 0x400; flickerArm->updateSequence((uint)local_28 + 0xf); loungealotThumb->updateSequence((uint)local_28 + 0xf); _dat_80093c94 = 1; _dat_80093c90 = 0x1e; } } } else { if (_dat_80093c94 == 2) { // Flicker loses by being pinned uVar12->_flags = uVar12->_flags | 0x1000; uVar13->_flags = uVar13->_flags | 0x1000; flickerArm->_flags = flickerArm->_flags | 0x1000; loungealotThumb->_flags = loungealotThumb->_flags | 0x1000; _vm->_screen->setScreenShakeOffset(0, 0); if (local_258 == 1) { // playSoundFromTxtIndex(DAT_80063ad0); loungealotHeadActor->updateSequence(9); fun_80093aec_dialog(_vm->getDialogTextId(0x46BC), 0x14, 1); do { _vm->waitForFrames(1); } while (_vm->isFlagSet(ENGINE_FLAG_8000)); loungealotHeadActor->updateSequence(2); loungealotRightArm->updateSequence(3); } else { // playSoundFromTxtIndex(DAT_80063ad4); loungealotHeadActor->updateSequence(10); fun_80093aec_dialog(_vm->getDialogTextId(0x4718), 0x14, 1); loungealotRightArm->updateSequence(2); do { _vm->waitForFrames(1); } while (_vm->isFlagSet(ENGINE_FLAG_8000)); loungealotHeadActor->updateSequence(4); } _vm->waitForFrames(2 * 0x3c); break; } } continue; } if (local_272 == 0) { local_272 = 1; if (local_27a != 0) { local_27a = local_27a - 1; } if (local_278 != 0) { local_278 = local_278 - 1; } } else { local_272 = local_272 + -1; } if (_vm->isR1ButtonPressed()) { //TODO || _vm->isR2ButtonPressed()) { local_27a = local_27a + 4; } if (_vm->isL1ButtonPressed()) { //TODO || _vm->isL2ButtonPressed()) { local_27a = local_27a + 4; } if (fun_80093990()) { if (param_1 == 1) { local_278 = local_278 + 4; } else { local_278 = local_278 + 6; } } if (fun_80093a30()) { if (param_1 == 1) { local_278 = local_278 + 4; } else { local_278 = local_278 + 6; } } if ((0x3f < local_278) || (0x3f < local_27a)) { loungealotHeadActor->setFlag(ACTOR_FLAG_1000); loungealotLegActor->setFlag(ACTOR_FLAG_1000); loungealotRightArm->setFlag(ACTOR_FLAG_1000); if (0x40 < local_27a) { local_27a = 0x40; } if (0x40 < local_278) { local_278 = 0x40; } if (((local_278 == local_27a) || ((local_258 == 2 && (local_278 < local_27a)))) || ((local_258 == 1 && (local_27a < local_278)))) { if (local_258 == 1) { // playSoundFromTxtIndex(DAT_80063ad8); loungealotHeadActor->updateSequence(0xb); fun_80093aec_dialog(_vm->getDialogTextId(0x475E), 0x14, 1); } else { // playSoundFromTxtIndex(DAT_80063adc); loungealotHeadActor->updateSequence(0xc); fun_80093aec_dialog(_vm->getDialogTextId(0x4774), 0x14, 1); } local_258 = 0; _dat_80093cb4 = 2; _dat_80093cbc = 1; _dat_80093cb8 = 0; _dat_80093cc0 = 1; uVar12->_flags = uVar12->_flags & 0xfbff; uVar13->_flags = uVar13->_flags & 0xfbff; flickerArm->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb4 * 3 + (uint)_dat_80093cbc]); loungealotThumb->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb4 * 3 + (uint)_dat_80093cbc]); uVar12->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb8 * 3 + (uint)_dat_80093cc0]); uVar13->updateSequence((uint)(uint16)actorSequenceIdTbl[(uint)_dat_80093cb8 * 3 + (uint)_dat_80093cc0]); _dat_80093c94 = 0; local_26c = 0x1e; } else { _dat_80093c94 = 2; } } } while (true); _vm->fadeToBlack(); _vm->_fontManager->clearText(); _vm->_sound->resumeMusic(); // DisableVSyncEvent(); _vm->_dragonINIResource->getRecord(0)->x = 0x91; _vm->_dragonINIResource->getRecord(0)->y = 0x9b; _vm->_dragonINIResource->getRecord(0x123)->x = 0xc3; _vm->_dragonINIResource->getRecord(0x123)->y = 0x9b; _vm->_screen->loadPalette(1, _vm->_cursor->getPalette()); _vm->setupPalette1(); _vm->_screen->clearAllFlatQuads(); _vm->_dragonINIResource->setFlickerRecord(flicker); _vm->_inventory->setState(originalInventoryType); flicker->objectState = local_258 + -1; if (flicker->objectState == 0) { _vm->setVar(0xb, 1); flicker->actorResourceId = 0xd2; //TODO is this correct? _vm->_actorManager->loadActor(0xd2, flicker->actor->_actorID); _vm->_dragonINIResource->getRecord(0x120)->sceneId = 0x17; } loungealotHeadActor->clearFlag(ACTOR_FLAG_40); loungealotLeftUpperArm->clearFlag(ACTOR_FLAG_40); loungealotLegActor->clearFlag(ACTOR_FLAG_40); loungealotRightArm->clearFlag(ACTOR_FLAG_40); flickerArm->clearFlag(ACTOR_FLAG_40); loungealotThumb->clearFlag(ACTOR_FLAG_40); uVar12->clearFlag(ACTOR_FLAG_40); uVar13->clearFlag(ACTOR_FLAG_40); // EnableVSyncEvent(); if (param_3 == 0) { _vm->fadeToBlack(); _vm->_screen->clearAllFlatQuads(); flickerPortrait->clearFlag(ACTOR_FLAG_40); loungealotPortrait->clearFlag(ACTOR_FLAG_40); _vm->reset_screen_maybe(); } else { _vm->reset_screen_maybe(); _vm->_scene->setSceneId(0x17); flicker->sceneId = 0x17; _vm->_scene->loadSceneData((uint)(0x17 | 0x8000), 0); _vm->setAllFlags((origEngineFlags & 0xfefdffff) | (_vm->getAllFlags() & 0x1000000) | 0x40); _vm->fadeFromBlack(); } _vm->_fontManager->clearText(); } void Minigame2::fun_80093aec_dialog(uint32 textId, int16 x, int16 y) { uint16 auStack4024 [2000]; _vm->_talk->FUN_8001a7c4_clearDialogBoxMaybe(); _vm->_talk->loadText(textId, auStack4024, 2000); _vm->_talk->displayDialogAroundPoint(auStack4024, x, y, 0, 0, textId); _dat_80093c9c = 1; } bool Minigame2::fun_80093520() { bool uVar2; if (_dat_80093ca0 == 0) { if (!_dat_80093c70) { if (!_dat_80093c72 || (3 < _dat_80093cb8)) { _dat_80093c72 = false; _dat_80093c74 = _dat_80093c74 + 1; if (_dat_80093c74 < 2) { _dat_80093c70 = true; _dat_80093cac = 0; uVar2 = false; } else { if (_dat_80093ca4 == 0) { _dat_80093cac = 0; if (_dat_80093cb8 == _dat_80093cb4) { if (_dat_80093cbc < _dat_80093cc0) { _dat_80093cac = (uint16)(_dat_80093cb8 < 4); } else { if (!_dat_80093cb0 && _vm->getRand(8) < 3) { if (_vm->getRand(8) < 3) { _dat_80093c72 = 1; _dat_80093c74 = 0; _dat_80093cac = 1; } else { _dat_80093ca4 = _dat_80093cc8 + _vm->getRand(10); _dat_80093cac = 1; } return true; } if (_dat_80093cb4 == 4) { _dat_80093cac = 1; } } } else { if ((_dat_80093cb8 < _dat_80093cb4) && (_dat_80093cb4 != 2)) { _dat_80093cac = 1; } } } uVar2 = (uint)_dat_80093cac; } } else { _dat_80093cac = 1; uVar2 = true; } } else { _dat_80093cac = 0; uVar2 = false; } } else { uVar2 = _vm->isLeftKeyPressed(); } return uVar2; } bool Minigame2::fun_80093248() { bool uVar2; if (_dat_80093ca0 == 0) { if (!_dat_80093c72) { if (!_dat_80093c70 || (_dat_80093cb8 == 0)) { _dat_80093c70 = false; _dat_80093c74 = _dat_80093c74 + 1; if (_dat_80093c74 < 2) { _dat_80093c72 = true; _dat_80093cb0 = false; uVar2 = false; } else { if (_dat_80093ca4 == 0) { _dat_80093cb0 = false; if (_dat_80093cb8 == _dat_80093cb4) { if (_dat_80093cbc < _dat_80093cc0) { _dat_80093cb0 = (bool)(_dat_80093cb8 != 0); } else { if ((_dat_80093cac == 0) && _vm->getRand(8) < 3) { if (_vm->getRand(8) < 3) { _dat_80093c70 = true; _dat_80093c74 = 0; _dat_80093cb0 = true; } else { _dat_80093ca4 = _dat_80093cc8 + _vm->getRand(10); _dat_80093cb0 = true; } return true; } if (_dat_80093cb4 == 0) { _dat_80093cb0 = true; } } } else { if ((_dat_80093cb4 < _dat_80093cb8) && (_dat_80093cb4 != 2)) { _dat_80093cb0 = true; } } } uVar2 = _dat_80093cb0; } } else { _dat_80093cb0 = true; uVar2 = true; } } else { _dat_80093cb0 = false; uVar2 = false; } } else { uVar2 = _vm->isRightKeyPressed(); } return uVar2; } bool Minigame2::fun_80093800() { bool uVar2; if (_dat_80093ca0 == 0) { if (_dat_80093ca4 == 0) { _dat_80093ca8 = false; if ((_dat_80093cb8 == _dat_80093cb4) && (_dat_80093cc0 < _dat_80093cbc)) { _dat_80093ca8 = true; } else { if (_vm->getRand(8) < 3) { _dat_80093ca4 = _vm->getRand(10); _dat_80093ca4 = _dat_80093cc8 + _dat_80093ca4; _dat_80093ca8 = true; } } } uVar2 = _dat_80093ca8; } else { uVar2 = false; if (_vm->isSquareButtonPressed() || _vm->isCrossButtonPressed() || _vm->isCircleButtonPressed() || _vm->isTriangleButtonPressed()) { uVar2 = true; } } return uVar2; } bool Minigame2::fun_80093a30() { bool uVar1; if (_dat_80093ca0 == 0) { uVar1 = (uint) _dat_80093c90 == (uint) _dat_80093cc8 / 3; } else { uVar1 = _vm->isL1ButtonPressed(); // TODO || _vm->isL2ButtonPressed(); } return uVar1; } bool Minigame2::fun_80093990() { bool uVar1; if (_dat_80093ca0 == 0) { uVar1 = _dat_80093c90 == 0; } else { uVar1 = _vm->isR1ButtonPressed(); // TODO || _vm->isR2ButtonPressed(); } return uVar1; } } // End of namespace Dragons