void Stoneship::o_hologramSelectionMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Hologram move", op); MystResourceType11 *handle = static_cast<MystResourceType11 *>(_invokingResource); const Common::Point &mouse = _vm->_system->getEventManager()->getMousePos(); if (handle->getRect().contains(mouse)) { int16 position = mouse.x - 143; position = CLIP<int16>(position, 0, 242); // Draw handle movie frame uint16 selectionPos = position * 1500 / 243; VideoHandle handleMovie = _hologramSelection->playMovie(); _vm->_video->setVideoBounds(handleMovie, Audio::Timestamp(0, selectionPos, 600), Audio::Timestamp(0, selectionPos, 600)); _hologramDisplayPos = position * 1450 / 243 + 350; // Draw display movie frame if (_hologramTurnedOn) { _hologramDisplay->setBlocking(false); VideoHandle displayMovie = _hologramDisplay->playMovie(); _vm->_video->setVideoBounds(displayMovie, Audio::Timestamp(0, _hologramDisplayPos, 600), Audio::Timestamp(0, _hologramDisplayPos, 600)); } } }
void Stoneship::o_generatorStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Generator stop", op); _batteryCharging = false; if (_state.generatorDuration) { // Clip battery power if (_state.generatorDuration > 600000) _state.generatorDuration = 600000; // Start depleting power _state.generatorDepletionTime = _vm->_system->getMillis() + _state.generatorDuration; _state.generatorPowerAvailable = 1; _batteryDepleting = true; _batteryNextTime = _vm->_system->getMillis() + 60000; } // Pause handle movie MystResourceType11 *handle = static_cast<MystResourceType11 *>(_invokingResource); MystResourceType6 *movie = static_cast<MystResourceType6 *>(handle->getSubResource(0)); movie->pauseMovie(true); uint16 soundId = handle->getList3(0); if (soundId) _vm->_sound->replaceSoundMyst(soundId); }
void Stoneship::o_generatorStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Generator start", op); MystResourceType11 *handle = static_cast<MystResourceType11 *>(_invokingResource); uint16 soundId = handle->getList1(0); if (soundId) _vm->_sound->replaceSoundMyst(soundId); if (_state.generatorDuration) _state.generatorDuration -= _vm->_system->getMillis() - _state.generatorDepletionTime; // Start charging the battery _batteryDepleting = false; _batteryCharging = true; _batteryNextTime = _vm->_system->getMillis() + 1000; // Start handle movie MystResourceType6 *movie = static_cast<MystResourceType6 *>(handle->getSubResource(0)); movie->playMovie(); soundId = handle->getList2(0); if (soundId) _vm->_sound->replaceSoundMyst(soundId, Audio::Mixer::kMaxChannelVolume, true); }
void Mechanical::o_birdCrankStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Mechanical bird crank start", op); MystResourceType11 *crank = static_cast<MystResourceType11 *>(_invokingResource); uint16 crankSoundId = crank->getList2(0); _vm->_sound->replaceSoundMyst(crankSoundId, Audio::Mixer::kMaxChannelVolume, true); _birdSingEndTime = 0; _birdCrankStartTime = _vm->_system->getMillis(); MystResourceType6 *crankMovie = static_cast<MystResourceType6 *>(crank->getSubResource(0)); crankMovie->playMovie(); }
void Mechanical::o_birdCrankStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Mechanical bird crank stop", op); MystResourceType11 *crank = static_cast<MystResourceType11 *>(_invokingResource); MystResourceType6 *crankMovie = static_cast<MystResourceType6 *>(crank->getSubResource(0)); crankMovie->pauseMovie(true); uint16 crankSoundId = crank->getList2(1); _vm->_sound->replaceSoundMyst(crankSoundId); _birdSingEndTime = 2 * _vm->_system->getMillis() - _birdCrankStartTime; _birdSinging = true; _bird->playMovie(); }
void Stoneship::o_telescopeMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) { debugC(kDebugScript, "Opcode %d: Telescope move", op); MystResourceType11 *display = static_cast<MystResourceType11 *>(_invokingResource); const Common::Point &mouse = _vm->_system->getEventManager()->getMousePos(); // Compute telescope position _telescopePosition = (_telescopePosition - (mouse.x - _telescopeOldMouse) / 2 + 3240) % 3240; _telescopeOldMouse = mouse.x; // Copy image to screen Common::Rect src = Common::Rect(_telescopePosition, 0, _telescopePosition + 112, 112); _vm->_gfx->copyImageSectionToScreen(_telescopePanorama, src, display->getRect()); // Draw lighthouse telescopeLighthouseDraw(); _vm->_system->updateScreen(); }