diff options
-rw-r--r-- | engines/sci/engine/guest_additions.cpp | 21 | ||||
-rw-r--r-- | engines/sci/engine/guest_additions.h | 1 | ||||
-rw-r--r-- | engines/sci/engine/selector.cpp | 1 | ||||
-rw-r--r-- | engines/sci/engine/selector.h | 1 |
4 files changed, 24 insertions, 0 deletions
diff --git a/engines/sci/engine/guest_additions.cpp b/engines/sci/engine/guest_additions.cpp index 2cfed136aa..0f4818d544 100644 --- a/engines/sci/engine/guest_additions.cpp +++ b/engines/sci/engine/guest_additions.cpp @@ -1023,6 +1023,10 @@ void GuestAdditions::syncInGameUI(const int16 musicVolume, const int16 sfxVolume } switch (g_sci->getGameId()) { + case GID_MOTHERGOOSEHIRES: + syncMGDXUI(musicVolume); + break; + case GID_PQ4: syncPQ4UI(musicVolume); break; @@ -1125,6 +1129,23 @@ void GuestAdditions::syncPhant1UI(const int16 oldMusicVolume, const int16 musicV } } +void GuestAdditions::syncMGDXUI(const int16 musicVolume) const { + const reg_t sliderId = _segMan->findObjectByName("icon1"); + if (!sliderId.isNull()) { + const int16 celNo = 7 - (musicVolume * 8 / (MUSIC_MASTERVOLUME_MAX + 1)); + writeSelectorValue(_segMan, sliderId, SELECTOR(mainCel), celNo); + writeSelectorValue(_segMan, sliderId, SELECTOR(cel), celNo); + + // There does not seem to be any good way to learn whether the + // volume slider is visible (and thus eligible for + // kUpdateScreenItem) + const reg_t planeId = readSelector(_segMan, sliderId, SELECTOR(plane)); + if (g_sci->_gfxFrameout->getPlanes().findByObject(planeId) != nullptr) { + g_sci->_gfxFrameout->kernelUpdateScreenItem(sliderId); + } + } +} + void GuestAdditions::syncPQ4UI(const int16 musicVolume) const { const SegmentId segment = _segMan->getScriptSegment(9, SCRIPT_GET_DONT_LOAD); if (segment != 0 && _segMan->getScript(segment)->getLocalsCount() > 2) { diff --git a/engines/sci/engine/guest_additions.h b/engines/sci/engine/guest_additions.h index c920fa74f5..79f498a04e 100644 --- a/engines/sci/engine/guest_additions.h +++ b/engines/sci/engine/guest_additions.h @@ -348,6 +348,7 @@ private: void syncGK1UI() const; void syncGK2UI() const; void syncLSL6HiresUI(const int16 musicVolume) const; + void syncMGDXUI(const int16 musicVolume) const; void syncPhant1UI(const int16 oldMusicVolume, const int16 musicVolume, reg_t &musicGlobal, const int16 oldDacVolume, const int16 dacVolume, reg_t &dacGlobal) const; void syncPQ4UI(const int16 musicVolume) const; void syncPQSWATUI() const; diff --git a/engines/sci/engine/selector.cpp b/engines/sci/engine/selector.cpp index 9c6921b181..77405578ed 100644 --- a/engines/sci/engine/selector.cpp +++ b/engines/sci/engine/selector.cpp @@ -218,6 +218,7 @@ void Kernel::mapSelectors() { FIND_SELECTOR(setSize); FIND_SELECTOR(displayValue); FIND_SELECTOR2(new_, "new"); + FIND_SELECTOR(mainCel); #endif } diff --git a/engines/sci/engine/selector.h b/engines/sci/engine/selector.h index d97a8832c0..b2232625f2 100644 --- a/engines/sci/engine/selector.h +++ b/engines/sci/engine/selector.h @@ -175,6 +175,7 @@ struct SelectorCache { Selector setSize; // for PQ4 volume sync Selector displayValue; // for PQ:SWAT volume sync Selector new_; // for Torin/LSL7 save/load patching + Selector mainCel; // for MGDX volume sync #endif }; |