int KyraEngine_MR::o3_removeItemInstances(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_removeItemInstances(%p) (%d)", (const void *)script, stackPos(0)); const int16 item = stackPos(0); int deleted = 0; for (int i = 0; i < 10; ++i) { if (_mainCharacter.inventory[i] == item) { _mainCharacter.inventory[i] = kItemNone; ++deleted; } } if (_itemInHand == item) { removeHandItem(); ++deleted; } for (int i = 0; i < 50; ++i) { if (_itemList[i].id == item) { _itemList[i].id = kItemNone; ++deleted; } } return deleted; }
void KyraEngine_MR::runLoop() { _eventList.clear(); _runFlag = true; while (_runFlag && !shouldQuit()) { if (_deathHandler >= 0) { removeHandItem(); delay(5); _drawNoShapeFlag = 0; _gui->optionsButton(0); _deathHandler = -1; if (!_runFlag || shouldQuit()) break; } if (_system->getMillis() >= _nextIdleAnim) showIdleAnim(); int inputFlag = checkInput(_mainButtonList, true); removeInputTop(); update(); _timer->update(); if (inputFlag == 198 || inputFlag == 199) { _savedMouseState = _mouseState; Common::Point mouse = getMousePos(); handleInput(mouse.x, mouse.y); } _system->delayMillis(10); } }
int KyraEngine_MR::o3_wipeDownMouseItem(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o3_wipeDownMouseItem(%p) (-, %d, %d)", (const void *)script, stackPos(1), stackPos(2)); _screen->hideMouse(); const int x = stackPos(1) - 12; const int y = stackPos(2) - 19; if (_itemInHand >= 0) { backUpGfxRect32x32(x, y); uint8 *shape = getShapePtr(_itemInHand+248); for (int curY = y, height = 20; height > 0; height -= 2, curY += 2) { restoreGfxRect32x32(x, y); _screen->setNewShapeHeight(shape, height); const uint32 waitTime = _system->getMillis() + _tickLength; _screen->drawShape(0, shape, x, curY, 0, 0); _screen->updateScreen(); delayUntil(waitTime); } restoreGfxRect32x32(x, y); _screen->resetShapeHeight(shape); } _screen->showMouse(); removeHandItem(); return 0; }
bool KyraEngine_HoF::checkInventoryItemExchange(Item handItem, int slot) { bool removeItem = false; Item newItem = kItemNone; Item invItem = _mainCharacter.inventory[slot]; for (const uint16 *table = _itemMagicTable; *table != 0xFFFF; table += 4) { if (table[0] != handItem || table[1] != (uint16)invItem) continue; if (table[3] == 0xFFFF) continue; removeItem = (table[3] == 1); newItem = (Item)table[2]; snd_playSoundEffect(0x68); _mainCharacter.inventory[slot] = newItem; clearInventorySlot(slot, 0); drawInventoryShape(0, newItem, slot); if (removeItem) removeHandItem(); if (_lang != 1) updateCommandLineEx(newItem+54, 0x2E, 0xD6); return true; } return false; }
void KyraEngine_LoK::mainLoop() { // Initialize debugger since how it should be fully usable _debugger->initialize(); _eventList.clear(); while (!shouldQuit()) { int32 frameTime = (int32)_system->getMillis(); if (_currentCharacter->sceneId == 210) { updateKyragemFading(); if (seq_playEnd() && _deathHandler != 8) break; } if (_deathHandler != -1) { snd_playWanderScoreViaMap(0, 1); snd_playSoundEffect(49); _screen->hideMouse(); _screen->setMouseCursor(1, 1, _shapes[0]); removeHandItem(); _screen->showMouse(); _gui->buttonMenuCallback(0); _deathHandler = -1; } if ((_brandonStatusBit & 2) && _brandonStatusBit0x02Flag) _animator->animRefreshNPC(0); if ((_brandonStatusBit & 0x20) && _brandonStatusBit0x20Flag) { _animator->animRefreshNPC(0); _brandonStatusBit0x20Flag = 0; } // FIXME: Why is this here? _screen->showMouse(); int inputFlag = checkInput(_buttonList, _currentCharacter->sceneId != 210); removeInputTop(); updateMousePointer(); _timer->update(); _sound->process(); updateTextFade(); if (inputFlag == 198 || inputFlag == 199) processInput(_mouseX, _mouseY); if (skipFlag()) resetSkipFlag(); delay((frameTime + _gameSpeed) - _system->getMillis(), true, true); } }
void KyraEngine_v2::setHandItem(Item item) { Screen *scr = screen(); scr->hideMouse(); if (item == kItemNone) { removeHandItem(); } else { setMouseCursor(item); _itemInHand = item; } scr->showMouse(); }
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_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; }
void KyraEngine_HoF::runLoop() { _screen->updateScreen(); _runFlag = true; while (!shouldQuit() && _runFlag) { if (_deathHandler >= 0) { removeHandItem(); delay(5); _drawNoShapeFlag = 0; _gui->optionsButton(0); _deathHandler = -1; if (!_runFlag || shouldQuit()) break; } if (_system->getMillis() > _nextIdleAnim) showIdleAnim(); if (queryGameFlag(0x159)) { dinoRide(); resetGameFlag(0x159); } if (queryGameFlag(0x124) && !queryGameFlag(0x125)) { _mainCharacter.animFrame = 32; enterNewScene(39, -1, 0, 0, 0); } if (queryGameFlag(0xD8)) { resetGameFlag(0xD8); if (_mainCharacter.sceneId == 34) { if (queryGameFlag(0xD1)) { initTalkObject(28); npcChatSequence(getTableString(0xFA, _cCodeBuffer, 1), 28, 0x83, 0xFA); deinitTalkObject(28); enterNewScene(35, 4, 0, 0, 0); } else if (queryGameFlag(0xD0)) { initTalkObject(29); npcChatSequence(getTableString(0xFB, _cCodeBuffer, 1), 29, 0x83, 0xFB); deinitTalkObject(29); enterNewScene(33, 6, 0, 0, 0); } } } int inputFlag = checkInput(_buttonList, true); removeInputTop(); update(); if (inputFlag == 198 || inputFlag == 199) { _savedMouseState = _mouseState; handleInput(_mouseX, _mouseY); } //if (queryGameFlag(0x1EE) && inputFlag) // sub_13B19(inputFlag); _system->delayMillis(10); } }
int KyraEngine_v1::o1_removeHandItem(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v1::o1_removeHandItem(%p) ()", (const void *)script); removeHandItem(); return 0; }
void KyraEngine_MR::handleInput(int x, int y) { if (_inventoryState) return; setNextIdleAnimTimer(); if (_unk5) { _unk5 = 0; return; } if (!_screen->isMouseVisible()) return; if (_savedMouseState == -3) { snd_playSoundEffect(0x0D, 0x80); return; } setNextIdleAnimTimer(); int skip = 0; if (checkCharCollision(x, y) && _savedMouseState >= -1 && runSceneScript2()) { return; } else if (_itemInHand != 27 && pickUpItem(x, y, 1)) { return; } else if (checkItemCollision(x, y) == -1) { resetGameFlag(1); skip = runSceneScript1(x, y); if (queryGameFlag(1)) { resetGameFlag(1); return; } else if (_unk5) { _unk5 = 0; return; } } if (_deathHandler >= 0) skip = 1; if (skip) return; if (checkCharCollision(x, y)) { if (runSceneScript2()) return; } else if (_itemInHand >= 0 && _savedMouseState >= 0) { if (_itemInHand == 27) { makeCharFacingMouse(); } else if (y <= 187) { if (_itemInHand == 43) removeHandItem(); else dropItem(0, _itemInHand, x, y, 1); } return; } else if (_savedMouseState == -3) { return; } else { if (y > 187 && _savedMouseState > -4) return; if (_unk5) { _unk5 = 0; return; } } inputSceneChange(x, y, 1, 1); }