int KyraEngine_HoF::cauldronClearButton(Button *button) { if (!queryGameFlag(2)) { updateCharFacing(); objectChat(getTableString(0xF0, _cCodeBuffer, 1), 0, 0x83, 0xF0); return 0; } if (queryGameFlag(0xE4)) { snd_playSoundEffect(0x0D); return 0; } _screen->hideMouse(); displayInvWsaLastFrame(); snd_playSoundEffect(0x25); loadInvWsa("PULL.WSA", 1, 6, 0, -1, -1, 1); loadInvWsa("CAULD00.WSA", 1, 7, 0, 0xD4, 0x0F, 1); showMessage(0, 0xCF); setCauldronState(0, 0); clearCauldronTable(); snd_playSoundEffect(0x57); loadInvWsa("CAULDFIL.WSA", 1, 7, 0, -1, -1, 1); _screen->showMouse(); return 0; }
bool KyraEngine_HoF::handleInputUnkSub(int x, int y) { if (y > 143 || _deathHandler > -1 || queryGameFlag(0x164)) return false; if (_mouseState <= -3 && findItem(_mainCharacter.sceneId, 13) >= 0) { updateCharFacing(); objectChat(getTableString(0xFC, _cCodeBuffer, 1), 0, 0x83, 0xFC); return true; } else { _emc->init(&_sceneScriptState, &_sceneScriptData); _sceneScriptState.regs[1] = x; _sceneScriptState.regs[2] = y; _sceneScriptState.regs[3] = 0; _sceneScriptState.regs[4] = _itemInHand; _emc->start(&_sceneScriptState, 1); while (_emc->isValid(&_sceneScriptState)) _emc->run(&_sceneScriptState); if (queryGameFlag(0x1ED)) { _sound->beginFadeOut(); _screen->fadeToBlack(); _showOutro = true; _runFlag = false; } return _sceneScriptState.regs[3] != 0; } }
void KyraEngine_MR::eelScript() { if (_chatText) return; _screen->hideMouse(); if (_inventoryState) hideInventory(); removeHandItem(); objectChat((const char *)getTableEntry(_cCodeFile, 35), 0, 204, 35); objectChat((const char *)getTableEntry(_cCodeFile, 40), 0, 204, 40); setGameFlag(0xD1); snd_playSoundEffect(0x2A, 0xC8); setGameFlag(0x171); switch (_characterShapeFile-1) { case 0: runAnimationScript("EELS01.EMC", 0, 0, 1, 1); break; case 1: runAnimationScript("EELS02.EMC", 0, 0, 1, 1); break; case 2: runAnimationScript("EELS03.EMC", 0, 0, 1, 1); break; case 3: runAnimationScript("EELS04.EMC", 0, 0, 1, 1); break; default: resetGameFlag(0x171); runAnimationScript("EELS00.EMC", 0, 0, 1, 1); } changeChapter(2, 29, 0, 4); _screen->showMouse(); }
int KyraEngine_MR::o3_objectChat(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_objectChat(%p) (%d)", (const void *)script, stackPos(0)); int id = stackPos(0); const char *str = (const char *)getTableEntry(_useActorBuffer ? _actorFile : _sceneStrings, id); if (str) { objectChat(str, 0, _vocHigh, id); playStudioSFX(str); } return 0; }
int KyraEngine_HoF::cauldronButton(Button *button) { if (!queryGameFlag(2)) { objectChat(getTableString(0xF0, _cCodeBuffer, 1), 0, 0x83, 0xF0); return 0; } if (!_screen->isMouseVisible() || _mouseState < -1) return 0; if (queryGameFlag(0xE4)) { snd_playSoundEffect(0x0D); return 0; } updateCharFacing(); for (int i = 0; _cauldronProtectedItems[i] != -1; ++i) { if (_itemInHand == _cauldronProtectedItems[i]) { objectChat(getTableString(0xF1, _cCodeBuffer, 1), 0, 0x83, 0xF1); return 0; } } if (_itemInHand == -1) { listItemsInCauldron(); return 0; } for (int i = 0; _cauldronBowlTable[i] != -1; i += 2) { if (_itemInHand == _cauldronBowlTable[i]) { addFrontCauldronTable(_itemInHand); setHandItem(_cauldronBowlTable[i+1]); if (!updateCauldron()) { _cauldronState = 0; cauldronRndPaletteFade(); } return 0; } } if (_itemInHand == 18) { const int16 *magicTable = (_mainCharacter.sceneId == 77) ? _cauldronMagicTableScene77 : _cauldronMagicTable; while (magicTable[0] != -1) { if (_cauldronState == magicTable[0]) { setHandItem(magicTable[1]); snd_playSoundEffect(0x6C); ++_cauldronUseCount; if (_cauldronStateTable[_cauldronState] <= _cauldronUseCount && _cauldronUseCount) { showMessage(0, 0xCF); setCauldronState(0, true); clearCauldronTable(); } return 0; } magicTable += 2; } } else if (_itemInHand >= 0) { int item = _itemInHand; cauldronItemAnim(item); addFrontCauldronTable(item); if (!updateCauldron()) { _cauldronState = 0; cauldronRndPaletteFade(); } } return 0; }
int KyraEngine_HoF::bookButton(Button *button) { if (!queryGameFlag(1)) { objectChat(getTableString(0xEB, _cCodeBuffer, 1), 0, 0x83, 0xEB); return 0; } if (!_screen->isMouseVisible()) return 0; if (queryGameFlag(0xE5)) { snd_playSoundEffect(0x0D); return 0; } if (_itemInHand == 72) { if (!queryGameFlag(0xE2)) { _bookMaxPage += 2; removeHandItem(); snd_playSoundEffect(0x6C); setGameFlag(0xE2); } if (!queryGameFlag(0x18A) && queryGameFlag(0x170)) { _bookMaxPage += 2; removeHandItem(); snd_playSoundEffect(0x6C); setGameFlag(0x18A); } return 0; } if (_mouseState != -1) { snd_playSoundEffect(0x0D); return 0; } _screen->hideMouse(); showMessage(0, 0xCF); displayInvWsaLastFrame(); _bookNewPage = _bookCurPage; if (_screenBuffer) { memcpy(_screenBuffer, _screen->getCPagePtr(0), 64000); } _screen->copyPalette(2, 0); _screen->fadeToBlack(7, &_updateFunctor); _screen->loadPalette("_BOOK.COL", _screen->getPalette(0)); loadBookBkgd(); showBookPage(); _screen->copyRegion(0, 0, 0, 0, 0x140, 0xC8, 2, 0, Screen::CR_NO_P_CHECK); _screen->updateScreen(); int oldItemInHand = _itemInHand; removeHandItem(); _screen->fadePalette(_screen->getPalette(0), 7); _screen->showMouse(); bookLoop(); _screen->fadeToBlack(7); _screen->hideMouse(); setHandItem(oldItemInHand); updateMouse(); restorePage3(); if (_screenBuffer) { _screen->copyBlockToPage(0, 0, 0, 320, 200, _screenBuffer); } setHandItem(_itemInHand); _screen->copyPalette(0, 2); _screen->fadePalette(_screen->getPalette(0), 7, &_updateFunctor); _screen->showMouse(); if (!queryGameFlag(4) && !queryGameFlag(0xB8)) { objectChat(getTableString(0xEC, _cCodeBuffer, 1), 0, 0x83, 0xEC); objectChat(getTableString(0xED, _cCodeBuffer, 1), 0, 0x83, 0xED); objectChat(getTableString(0xEE, _cCodeBuffer, 1), 0, 0x83, 0xEE); objectChat(getTableString(0xEF, _cCodeBuffer, 1), 0, 0x83, 0xEF); setGameFlag(4); } return 0; }