[Scummvm-git-logs] scummvm master -> 14a7cc7c182a997f0f5386e1b4c32972923052f1
athrxx
noreply at scummvm.org
Fri Mar 8 03:00:05 UTC 2024
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
74c3c69f71 SCUMM: (MI1/Mac) - minor sound player fixes
14a7cc7c18 SCUMM: (MI1/Mac) - add music quality slider
Commit: 74c3c69f715bbd16e6f74438cef61e91faad48b3
https://github.com/scummvm/scummvm/commit/74c3c69f715bbd16e6f74438cef61e91faad48b3
Author: athrxx (athrxx at scummvm.org)
Date: 2024-03-08T03:59:17+01:00
Commit Message:
SCUMM: (MI1/Mac) - minor sound player fixes
Changed paths:
engines/scumm/players/player_mac_loom_monkey.cpp
engines/scumm/players/player_v5m.cpp
diff --git a/engines/scumm/players/player_mac_loom_monkey.cpp b/engines/scumm/players/player_mac_loom_monkey.cpp
index dfc3b8b065c..24ddbfaa847 100644
--- a/engines/scumm/players/player_mac_loom_monkey.cpp
+++ b/engines/scumm/players/player_mac_loom_monkey.cpp
@@ -44,8 +44,9 @@ public:
virtual bool init() = 0;
virtual bool checkResource(const byte *data, uint32 dataSize) const = 0;
virtual bool blocked(const byte *data, uint32 dataSize) const = 0;
- virtual bool loadSound(byte synthType, const byte *data, uint32 dataSize) = 0;
+ virtual bool loadSound(const byte *data, uint32 dataSize) = 0;
virtual void unblock() = 0;
+ void setSynthType(byte type) { _synth = type; }
const MacLowLevelPCMDriver::PCMSound *getInstrData(uint16 chan);
virtual bool isInstrUsable(uint16 chan) const = 0;
@@ -104,7 +105,7 @@ public:
bool init() override;
bool checkResource(const byte *data, uint32 dataSize) const override;
bool blocked(const byte *data, uint32 dataSize) const override { return false; }
- bool loadSound(byte synthType, const byte *data, uint32 dataSize) override;
+ bool loadSound(const byte *data, uint32 dataSize) override;
void unblock() override {}
bool isInstrUsable(uint16 chan) const override;
@@ -125,7 +126,7 @@ public:
bool init() override;
bool checkResource(const byte *data, uint32 dataSize) const override;
bool blocked(const byte *data, uint32 dataSize) const override;
- bool loadSound(byte synthType, const byte *data, uint32 dataSize) override;
+ bool loadSound(const byte *data, uint32 dataSize) override;
void unblock() override { _blockSfx = false; }
bool isInstrUsable(uint16 chan) const override;
@@ -240,7 +241,7 @@ bool LoomMacSndLoader::checkResource(const byte *data, uint32 dataSize) const {
return (dataSize >= 14 && READ_BE_UINT16(data + 4) == 'so' && !READ_BE_UINT32(data + 10));
}
-bool LoomMacSndLoader::loadSound(byte synthType, const byte *data, uint32 dataSize) {
+bool LoomMacSndLoader::loadSound(const byte *data, uint32 dataSize) {
if (dataSize < 40)
return false;
@@ -256,8 +257,6 @@ bool LoomMacSndLoader::loadSound(byte synthType, const byte *data, uint32 dataSi
_chanCurEvent[i] = 0;
}
- _synth = synthType;
-
return true;
}
@@ -308,7 +307,7 @@ bool MonkeyMacSndLoader::blocked(const byte *data, uint32 dataSize) const {
return (dataSize < 14 || (_blockSfx && !data[13]));
}
-bool MonkeyMacSndLoader::loadSound(byte synthType, const byte *data, uint32 dataSize) {
+bool MonkeyMacSndLoader::loadSound(const byte *data, uint32 dataSize) {
if (dataSize < 32)
return false;
@@ -345,7 +344,6 @@ bool MonkeyMacSndLoader::loadSound(byte synthType, const byte *data, uint32 data
}
_blockSfx = (_isMusic && _loop);
- _synth = synthType;
return true;
}
@@ -504,8 +502,8 @@ void LoomMonkeyMacSnd::setSfxVolume(int vol) {
}
void LoomMonkeyMacSnd::startSound(int id, int jumpToTick) {
- if (_sdrv == nullptr || id < 0 || id >= _idRangeMax) {
- warning("LoomMonkeyMacSnd::startSound(): sound id '%d' out of range (0 - %d)", id, _idRangeMax - 1);
+ if (_sdrv == nullptr || id < 1 || id >= _idRangeMax) {
+ warning("LoomMonkeyMacSnd::startSound(): sound id '%d' out of range (1 - %d)", id, _idRangeMax - 1);
return;
}
@@ -530,7 +528,7 @@ void LoomMonkeyMacSnd::startSound(int id, int jumpToTick) {
if (!_defaultChanConfig)
detectQuality();
- if (!_loader->loadSound(_curSynthType, ptr, size)) {
+ if (!_loader->loadSound(ptr, size)) {
warning("LoomMonkeyMacSnd::startSound(): Sound resource '%d' cannot be played", id);
return;
}
@@ -668,9 +666,9 @@ const MacSoundDriver::Status &LoomMonkeyMacSnd::getDriverStatus(uint8, Audio::Mi
}
void LoomMonkeyMacSnd::sndChannelCallback(uint16 arg1, const void*) {
- // We do this a little smarter than the original player which would stop the track immediately when
- // the first channel invoked its end-of-track callback. This would cut of the playback early, in an
- // unpleasant way. Instead, we stop the playback not before all channels have finished.
+ // The original Loom player stops the track immediately when the first channel invoked its end-of-track
+ // callback. This cuts of the playback early, in an unpleasant way. The Monkey Island player stops the
+ // playback not before all channels have finished. We do the same here for both games.
_chanPlaying &= ~arg1;
if (_chanPlaying)
return;
@@ -796,6 +794,7 @@ void LoomMonkeyMacSnd::setupChannels() {
_curSynthType = synthType[_curChanConfig];
_chanUse = numChan[_curChanConfig];
_lastSndType = _curSndType;
+ _loader->setSynthType(_curSynthType);
switch (_curSynthType) {
case 1:
diff --git a/engines/scumm/players/player_v5m.cpp b/engines/scumm/players/player_v5m.cpp
index 3126984e92e..46c0d79436d 100644
--- a/engines/scumm/players/player_v5m.cpp
+++ b/engines/scumm/players/player_v5m.cpp
@@ -83,6 +83,7 @@ namespace Scumm {
Player_V5M::Player_V5M(ScummEngine *scumm, Audio::Mixer *mixer)
: Player_Mac(scumm, mixer, 3, 0x07, false) {
assert(_vm->_game.id == GID_MONKEY);
+ memset(_lastNoteSamples, 0, sizeof(_lastNoteSamples));
_lastVersionBeforeSaveFormatChange = VER(114);
}
Commit: 14a7cc7c182a997f0f5386e1b4c32972923052f1
https://github.com/scummvm/scummvm/commit/14a7cc7c182a997f0f5386e1b4c32972923052f1
Author: athrxx (athrxx at scummvm.org)
Date: 2024-03-08T03:59:22+01:00
Commit Message:
SCUMM: (MI1/Mac) - add music quality slider
The layout is not good and needs more work. I haven't
yet understood how the theme layout code has to be used.
I commit this nonetheless, since it is the only way to access
the music quality settings for MI1.
Changed paths:
engines/scumm/dialogs.cpp
engines/scumm/dialogs.h
engines/scumm/metaengine.cpp
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index 52e3c80f1a3..e00c08ccf1f 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -1370,24 +1370,26 @@ void LoomEgaGameOptionsWidget::updateOvertureTicksValue() {
_overtureTicksValue->setLabel(Common::String::format("%d:%02d.%d", ticks / 600, (ticks % 600) / 10, ticks % 10));
}
-// Mac Loom options
-LoomMacGameOptionsWidget::LoomMacGameOptionsWidget(GuiObject *boss, const Common::String &name, const Common::String &domain) :
- ScummOptionsContainerWidget(boss, name, "LoomMacGameOptionsWidget", domain), _sndQualitySlider(nullptr), _sndQualityValue(nullptr), _enableOriginalGUICheckbox(nullptr), _quality(0) {
- GUI::StaticTextWidget *text = new GUI::StaticTextWidget(widgetsBoss(), "LoomMacGameOptionsWidget.SndQualityLabel", _("Music Quality:"));
+// Mac Loom/MI1 options
+LoomMonkeyMacGameOptionsWidget::LoomMonkeyMacGameOptionsWidget(GuiObject *boss, const Common::String &name, const Common::String &domain, int gameId) :
+ ScummOptionsContainerWidget(boss, name, "LoomMonkeyMacGameOptionsWidget", domain), _sndQualitySlider(nullptr), _sndQualityValue(nullptr), _enableOriginalGUICheckbox(nullptr), _quality(0) {
+ GUI::StaticTextWidget *text = new GUI::StaticTextWidget(widgetsBoss(), "LoomMonkeyMacGameOptionsWidget.SndQualityLabel", _("Music Quality:"));
text->setAlign(Graphics::TextAlign::kTextAlignEnd);
- _sndQualitySlider = new GUI::SliderWidget(widgetsBoss(), "LoomMacGameOptionsWidget.SndQuality", _("Select music quality. The original would determine the basic setup by hardware detection and speed tests, but it could also be changed in the game menu to some degree."), kQualitySliderUpdate);
- _sndQualitySlider->setMinValue(0);
+ _sndQualitySlider = new GUI::SliderWidget(widgetsBoss(), "LoomMonkeyMacGameOptionsWidget.SndQuality", gameId == GID_MONKEY ?
+ _("Select music quality. The original lets you choose this from the Game menu.") :
+ _("Select music quality. The original determines the basic setup by hardware detection and speed tests, "
+ "but also allows changes through the Game menu to some degree."), kQualitySliderUpdate);
+ _sndQualitySlider->setMinValue(gameId == GID_MONKEY ? 6 : 0);
_sndQualitySlider->setMaxValue(9);
- _sndQualityValue = new GUI::StaticTextWidget(widgetsBoss(), "LoomMacGameOptionsWidget.SndQualityValue", Common::U32String());
+ _sndQualityValue = new GUI::StaticTextWidget(widgetsBoss(), "LoomMonkeyMacGameOptionsWidget.SndQualityValue", Common::U32String());
_sndQualityValue->setFlags(GUI::WIDGET_CLEARBG);
updateQualitySlider();
-
- createEnhancementsWidget(widgetsBoss(), "LoomMacGameOptionsWidget");
- _enableOriginalGUICheckbox = createOriginalGUICheckbox(widgetsBoss(), "LoomMacGameOptionsWidget.EnableOriginalGUI");
+ createEnhancementsWidget(widgetsBoss(), "LoomMonkeyMacGameOptionsWidget");
+ _enableOriginalGUICheckbox = createOriginalGUICheckbox(widgetsBoss(), "LoomMonkeyMacGameOptionsWidget.EnableOriginalGUI");
}
-void LoomMacGameOptionsWidget::load() {
+void LoomMonkeyMacGameOptionsWidget::load() {
ScummOptionsContainerWidget::load();
_quality = 0;
@@ -1407,14 +1409,14 @@ void LoomMacGameOptionsWidget::load() {
_enableOriginalGUICheckbox->setState(ConfMan.getBool("original_gui", _domain));
}
-bool LoomMacGameOptionsWidget::save() {
+bool LoomMonkeyMacGameOptionsWidget::save() {
bool res = ScummOptionsContainerWidget::save();
ConfMan.setInt("mac_snd_quality", _quality, _domain);
ConfMan.setBool("original_gui", _enableOriginalGUICheckbox->getState(), _domain);
return res;
}
-void LoomMacGameOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Common::String &layoutName, const Common::String &overlayedLayout) const {
+void LoomMonkeyMacGameOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Common::String &layoutName, const Common::String &overlayedLayout) const {
layouts.addDialog(layoutName, overlayedLayout)
.addLayout(GUI::ThemeLayout::kLayoutVertical, 5)
.addPadding(0, 0, 0, 0)
@@ -1427,13 +1429,15 @@ void LoomMacGameOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Commo
.addPadding(0, 0, 10, 0)
.addWidget("SndQualityLabel", "OptionsLabel")
.addWidget("SndQuality", "Slider")
- .addWidget("SndQualityValue", "ShortOptionsLabel")
.closeLayout()
+ .addLayout(GUI::ThemeLayout::kLayoutVertical, 0)
+ .addPadding(200, 50, -20, 0)
+ .addWidget("SndQualityValue", "", -1, -1, Graphics::kTextAlignCenter)
.closeLayout()
.closeDialog();
}
-void LoomMacGameOptionsWidget::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
+void LoomMonkeyMacGameOptionsWidget::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
switch (cmd) {
case kQualitySliderUpdate:
updateQualitySlider();
@@ -1444,9 +1448,17 @@ void LoomMacGameOptionsWidget::handleCommand(GUI::CommandSender *sender, uint32
}
}
-void LoomMacGameOptionsWidget::updateQualitySlider() {
+void LoomMonkeyMacGameOptionsWidget::updateQualitySlider() {
_quality = _sndQualitySlider->getValue();
- Common::U32String label(_quality == 0 ? "auto" : Common::String::format("%4d", _quality));
+ static const char *const descr1[] = { _s("auto"), _s("Low"), _s("Medium"), _s("High") };
+ static const char *const descr2[] = { _s("auto"), _s("Good"), _s("Better"), _s("Best") };
+ static const char *const pattern[] = { _s("Hardware Rating: %s - "), _s("Quality Selection: %s") };
+
+ Common::String pt1(Common::String::format(pattern[1], descr2[_quality == _sndQualitySlider->getMinValue() ? 0 : ((_quality - 1) % 3) + 1]));
+ if (_sndQualitySlider->getMinValue() == 0)
+ pt1.insertString(Common::String::format(pattern[0], descr1[_quality == _sndQualitySlider->getMinValue() ? 0 : ((_quality - 1) / 3) + 1]), 0);
+
+ Common::U32String label(pt1);
_sndQualityValue->setLabel(label);
}
diff --git a/engines/scumm/dialogs.h b/engines/scumm/dialogs.h
index eeeeb373d84..ea146520447 100644
--- a/engines/scumm/dialogs.h
+++ b/engines/scumm/dialogs.h
@@ -301,10 +301,10 @@ private:
/**
* Options widget for Mac Loom.
*/
-class LoomMacGameOptionsWidget : public ScummOptionsContainerWidget {
+class LoomMonkeyMacGameOptionsWidget : public ScummOptionsContainerWidget {
public:
- LoomMacGameOptionsWidget(GuiObject *boss, const Common::String &name, const Common::String &domain);
- ~LoomMacGameOptionsWidget() override {};
+ LoomMonkeyMacGameOptionsWidget(GuiObject *boss, const Common::String &name, const Common::String &domain, int gameId);
+ ~LoomMonkeyMacGameOptionsWidget() override {};
void load() override;
bool save() override;
diff --git a/engines/scumm/metaengine.cpp b/engines/scumm/metaengine.cpp
index 51badcb06aa..aae7c0ef5a7 100644
--- a/engines/scumm/metaengine.cpp
+++ b/engines/scumm/metaengine.cpp
@@ -581,7 +581,7 @@ GUI::OptionsContainerWidget *ScummMetaEngine::buildLoomOptionsWidget(GUI::GuiObj
if (extra == "Steam")
return MetaEngine::buildEngineOptionsWidget(boss, name, target);
else if (platform == Common::kPlatformMacintosh)
- return new Scumm::LoomMacGameOptionsWidget(boss, name, target);
+ return new Scumm::LoomMonkeyMacGameOptionsWidget(boss, name, target, GID_LOOM);
// These EGA Loom settings are only relevant for the EGA
// version, since that is the only one that has an overture.
@@ -590,6 +590,10 @@ GUI::OptionsContainerWidget *ScummMetaEngine::buildLoomOptionsWidget(GUI::GuiObj
GUI::OptionsContainerWidget *ScummMetaEngine::buildMI1OptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const {
Common::String extra = ConfMan.get("extra", target);
+ Common::Platform platform = Common::parsePlatform(ConfMan.get("platform", target));
+
+ if (platform == Common::kPlatformMacintosh && extra != "Steam")
+ return new Scumm::LoomMonkeyMacGameOptionsWidget(boss, name, target, GID_MONKEY);
if (extra != "CD" && extra != "FM-TOWNS" && extra != "SEGA")
return nullptr;
More information about the Scummvm-git-logs
mailing list