[Scummvm-git-logs] scummvm master -> 33b065bfc54bb2faa2387d3bcf1843ad324a9cf5
bluegr
noreply at scummvm.org
Thu Jan 23 19:42:29 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
33b065bfc5 SCUMM: Add option for gamma correction
Commit: 33b065bfc54bb2faa2387d3bcf1843ad324a9cf5
https://github.com/scummvm/scummvm/commit/33b065bfc54bb2faa2387d3bcf1843ad324a9cf5
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-01-23T21:42:25+02:00
Commit Message:
SCUMM: Add option for gamma correction
This is currently only used for Macintosh games, but I kept the name of
the setting anonymous in case we ever need gamma correction for
something else.
Changed paths:
engines/scumm/dialogs.cpp
engines/scumm/dialogs.h
engines/scumm/macgui/macgui_impl.cpp
engines/scumm/macgui/macgui_v6.cpp
engines/scumm/metaengine.cpp
engines/scumm/palette.cpp
engines/scumm/scumm.cpp
engines/scumm/scumm.h
engines/scumm/smush/smush_player.cpp
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index ab12a1abc7e..929cbc9cd73 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -1183,6 +1183,13 @@ GUI::CheckboxWidget *ScummOptionsContainerWidget::createOriginalGUICheckbox(GuiO
);
}
+GUI::CheckboxWidget *ScummOptionsContainerWidget::createGammaCorrectionCheckbox(GuiObject *boss, const Common::String &name) {
+ return new GUI::CheckboxWidget(boss, name,
+ _("Enable gamma correction"),
+ _("Brighten the graphics to simulate a Macintosh monitor.")
+ );
+}
+
GUI::CheckboxWidget *ScummOptionsContainerWidget::createCopyProtectionCheckbox(GuiObject *boss, const Common::String &name) {
return new GUI::CheckboxWidget(boss, name,
_("Enable copy protection"),
@@ -1207,9 +1214,7 @@ void ScummOptionsContainerWidget::updateAdjustmentSlider(GUI::SliderWidget *slid
// SCUMM game settings
ScummGameOptionsWidget::ScummGameOptionsWidget(GuiObject *boss, const Common::String &name, const Common::String &domain, const ExtraGuiOptions &options) :
- ScummOptionsContainerWidget(boss, name, "ScummGameOptionsDialog", domain),
- _options(options), _smoothScrollCheckbox(nullptr),
- _semiSmoothScrollCheckbox(nullptr) {
+ ScummOptionsContainerWidget(boss, name, "ScummGameOptionsDialog", domain), _options(options) {
for (uint i = 0; i < _options.size(); i++) {
GUI::CheckboxWidget *checkbox = nullptr;
if (strcmp(_options[i].configOption, "enhancements") == 0) {
@@ -1387,7 +1392,7 @@ void LoomEgaGameOptionsWidget::updateOvertureTicksValue() {
// Options for various Mac games
MacGameOptionsWidget::MacGameOptionsWidget(GuiObject *boss, const Common::String &name, const Common::String &domain, int gameId, const Common::String &extra) :
- ScummOptionsContainerWidget(boss, name, "MacGameOptionsWidget", domain), _sndQualitySlider(nullptr), _sndQualityValue(nullptr), _enableOriginalGUICheckbox(nullptr), _enableCopyProtectionCheckbox(nullptr), _quality(0) {
+ ScummOptionsContainerWidget(boss, name, "MacGameOptionsWidget", domain) {
GUI::StaticTextWidget *text = new GUI::StaticTextWidget(widgetsBoss(), "MacGameOptionsWidget.SndQualityLabel", _("Music Quality:"));
text->setAlign(Graphics::TextAlign::kTextAlignEnd);
@@ -1402,6 +1407,7 @@ MacGameOptionsWidget::MacGameOptionsWidget(GuiObject *boss, const Common::String
updateQualitySlider();
createEnhancementsWidget(widgetsBoss(), "MacGameOptionsWidget");
_enableOriginalGUICheckbox = createOriginalGUICheckbox(widgetsBoss(), "MacGameOptionsWidget.EnableOriginalGUI");
+ _enableGammaCorrectionCheckbox = createGammaCorrectionCheckbox(widgetsBoss(), "MacGameOptionsWidget.EnableGammaCorrection");
if (gameId == GID_MONKEY || gameId == GID_MONKEY2 || (gameId == GID_INDY4 && extra == "Floppy"))
_enableCopyProtectionCheckbox = createCopyProtectionCheckbox(widgetsBoss(), "MacGameOptionsWidget.EnableCopyProtection");
@@ -1425,6 +1431,7 @@ void MacGameOptionsWidget::load() {
_sndQualitySlider->setValue(_quality);
updateQualitySlider();
_enableOriginalGUICheckbox->setState(ConfMan.getBool("original_gui", _domain));
+ _enableGammaCorrectionCheckbox->setState(ConfMan.getBool("gamma_correction", _domain));
if (_enableCopyProtectionCheckbox)
_enableCopyProtectionCheckbox->setState(ConfMan.getBool("copy_protection", _domain));
@@ -1434,6 +1441,7 @@ bool MacGameOptionsWidget::save() {
bool res = ScummOptionsContainerWidget::save();
ConfMan.setInt("mac_snd_quality", _quality, _domain);
ConfMan.setBool("original_gui", _enableOriginalGUICheckbox->getState(), _domain);
+ ConfMan.setBool("gamma_correction", _enableGammaCorrectionCheckbox->getState(), _domain);
if (_enableCopyProtectionCheckbox)
ConfMan.setBool("copy_protection", _enableCopyProtectionCheckbox->getState(), _domain);
@@ -1447,7 +1455,8 @@ void MacGameOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Common::S
.addPadding(0, 0, 0, 0)
.addLayout(GUI::ThemeLayout::kLayoutVertical, 4)
.addPadding(0, 0, 10, 0)
- .addWidget("EnableOriginalGUI", "Checkbox");
+ .addWidget("EnableOriginalGUI", "Checkbox")
+ .addWidget("EnableGammaCorrection", "Checkbox");
if (_enableCopyProtectionCheckbox)
layouts.addWidget("EnableCopyProtection", "Checkbox");
diff --git a/engines/scumm/dialogs.h b/engines/scumm/dialogs.h
index 877a3ec6eca..a61f6f6f4db 100644
--- a/engines/scumm/dialogs.h
+++ b/engines/scumm/dialogs.h
@@ -239,11 +239,11 @@ protected:
void createEnhancementsWidget(GuiObject *boss, const Common::String &name);
GUI::ThemeEval &addEnhancementsLayout(GUI::ThemeEval &layouts) const;
GUI::CheckboxWidget *createOriginalGUICheckbox(GuiObject *boss, const Common::String &name);
+ GUI::CheckboxWidget *createGammaCorrectionCheckbox(GuiObject *boss, const Common::String &name);
GUI::CheckboxWidget *createCopyProtectionCheckbox(GuiObject *boss, const Common::String &name);
void updateAdjustmentSlider(GUI::SliderWidget *slider, GUI::StaticTextWidget *value);
Common::Array<GUI::CheckboxWidget *> _enhancementsCheckboxes;
-
};
/**
@@ -262,8 +262,8 @@ private:
kSmoothScrollCmd = 'SMSC'
};
- GUI::CheckboxWidget *_smoothScrollCheckbox;
- GUI::CheckboxWidget *_semiSmoothScrollCheckbox;
+ GUI::CheckboxWidget *_smoothScrollCheckbox = nullptr;
+ GUI::CheckboxWidget *_semiSmoothScrollCheckbox = nullptr;
void defineLayout(GUI::ThemeEval &layouts, const Common::String &layoutName, const Common::String &overlayedLayout) const override;
void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
@@ -291,11 +291,11 @@ private:
void defineLayout(GUI::ThemeEval &layouts, const Common::String &layoutName, const Common::String &overlayedLayout) const override;
void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
- GUI::CheckboxWidget *_enableOriginalGUICheckbox;
- GUI::CheckboxWidget *_enableCopyProtectionCheckbox;
+ GUI::CheckboxWidget *_enableOriginalGUICheckbox = nullptr;
+ GUI::CheckboxWidget *_enableCopyProtectionCheckbox = nullptr;
- GUI::SliderWidget *_overtureTicksSlider;
- GUI::StaticTextWidget *_overtureTicksValue;
+ GUI::SliderWidget *_overtureTicksSlider = nullptr;
+ GUI::StaticTextWidget *_overtureTicksValue = nullptr;
void updateOvertureTicksValue();
};
@@ -318,11 +318,12 @@ private:
void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
void updateQualitySlider();
- GUI::CheckboxWidget *_enableOriginalGUICheckbox;
- GUI::CheckboxWidget *_enableCopyProtectionCheckbox;
- GUI::SliderWidget *_sndQualitySlider;
- GUI::StaticTextWidget *_sndQualityValue;
- int _quality;
+ GUI::CheckboxWidget *_enableOriginalGUICheckbox = nullptr;
+ GUI::CheckboxWidget *_enableGammaCorrectionCheckbox = nullptr;
+ GUI::CheckboxWidget *_enableCopyProtectionCheckbox = nullptr;
+ GUI::SliderWidget *_sndQualitySlider = nullptr;
+ GUI::StaticTextWidget *_sndQualityValue = nullptr;
+ int _quality = 0;
};
/**
@@ -344,10 +345,10 @@ private:
void defineLayout(GUI::ThemeEval &layouts, const Common::String &layoutName, const Common::String &overlayedLayout) const override;
void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
- GUI::CheckboxWidget *_enableOriginalGUICheckbox;
+ GUI::CheckboxWidget *_enableOriginalGUICheckbox = nullptr;
- GUI::SliderWidget *_playbackAdjustmentSlider;
- GUI::StaticTextWidget *_playbackAdjustmentValue;
+ GUI::SliderWidget *_playbackAdjustmentSlider = nullptr;
+ GUI::StaticTextWidget *_playbackAdjustmentValue = nullptr;
void updatePlaybackAdjustmentValue();
};
@@ -372,12 +373,12 @@ private:
void defineLayout(GUI::ThemeEval &layouts, const Common::String &layoutName, const Common::String &overlayedLayout) const override;
void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
- GUI::CheckboxWidget *_enableOriginalGUICheckbox;
+ GUI::CheckboxWidget *_enableOriginalGUICheckbox = nullptr;
- GUI::SliderWidget *_introAdjustmentSlider;
- GUI::StaticTextWidget *_introAdjustmentValue;
- GUI::SliderWidget *_outlookAdjustmentSlider;
- GUI::StaticTextWidget *_outlookAdjustmentValue;
+ GUI::SliderWidget *_introAdjustmentSlider = nullptr;
+ GUI::StaticTextWidget *_introAdjustmentValue = nullptr;
+ GUI::SliderWidget *_outlookAdjustmentSlider = nullptr;
+ GUI::StaticTextWidget *_outlookAdjustmentValue = nullptr;
void updateIntroAdjustmentValue();
void updateOutlookAdjustmentValue();
@@ -408,24 +409,24 @@ private:
void defineLayout(GUI::ThemeEval &layouts, const Common::String &layoutName, const Common::String &overlayedLayout) const override;
void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
- GUI::CheckboxWidget *_audioOverride;
+ GUI::CheckboxWidget *_audioOverride = nullptr;
- GUI::CheckboxWidget *_enableSessionServer;
+ GUI::CheckboxWidget *_enableSessionServer = nullptr;
- GUI::EditTextWidget *_sessionServerAddr;
- GUI::ButtonWidget *_serverResetButton;
+ GUI::EditTextWidget *_sessionServerAddr = nullptr;
+ GUI::ButtonWidget *_serverResetButton = nullptr;
- GUI::CheckboxWidget *_enableLANBroadcast;
+ GUI::CheckboxWidget *_enableLANBroadcast = nullptr;
- GUI::CheckboxWidget *_generateRandomMaps;
+ GUI::CheckboxWidget *_generateRandomMaps = nullptr;
- GUI::EditTextWidget *_lobbyServerAddr;
+ GUI::EditTextWidget *_lobbyServerAddr = nullptr;
#ifdef USE_LIBCURL
- GUI::CheckboxWidget *_enableCompetitiveMods;
+ GUI::CheckboxWidget *_enableCompetitiveMods = nullptr;
#endif
- GUI::StaticTextWidget *_networkVersion;
+ GUI::StaticTextWidget *_networkVersion = nullptr;
};
#endif
diff --git a/engines/scumm/macgui/macgui_impl.cpp b/engines/scumm/macgui/macgui_impl.cpp
index e70ba1f8780..0d6b3541d5a 100644
--- a/engines/scumm/macgui/macgui_impl.cpp
+++ b/engines/scumm/macgui/macgui_impl.cpp
@@ -868,14 +868,16 @@ MacGuiImpl::MacDialogWindow *MacGuiImpl::createDialog(int dialogId, Common::Rect
_windowManager->passPalette(palette.data(), 256);
- for (int i = 0; i < 256; i++) {
- byte r, g, b;
-
- palette.get(i, r, g, b);
- r = _vm->_macGammaCorrectionLookUp[r];
- g = _vm->_macGammaCorrectionLookUp[g];
- b = _vm->_macGammaCorrectionLookUp[b];
- palette.set(i, r, g, b);
+ if (_vm->_useGammaCorrection) {
+ for (int i = 0; i < 256; i++) {
+ byte r, g, b;
+
+ palette.get(i, r, g, b);
+ r = _vm->_macGammaCorrectionLookUp[r];
+ g = _vm->_macGammaCorrectionLookUp[g];
+ b = _vm->_macGammaCorrectionLookUp[b];
+ palette.set(i, r, g, b);
+ }
}
_system->getPaletteManager()->setPalette(palette);
diff --git a/engines/scumm/macgui/macgui_v6.cpp b/engines/scumm/macgui/macgui_v6.cpp
index 6b95b8737f4..aed941efdc3 100644
--- a/engines/scumm/macgui/macgui_v6.cpp
+++ b/engines/scumm/macgui/macgui_v6.cpp
@@ -355,14 +355,16 @@ void MacV6Gui::saveScreen() {
_windowManager->passPalette(palette.data(), 256);
- for (int i = 0; i < 256; i++) {
- byte r, g, b;
-
- palette.get(i, r, g, b);
- r = _vm->_macGammaCorrectionLookUp[r];
- g = _vm->_macGammaCorrectionLookUp[g];
- b = _vm->_macGammaCorrectionLookUp[b];
- palette.set(i, r, g, b);
+ if (_vm->_useGammaCorrection) {
+ for (int i = 0; i < 256; i++) {
+ byte r, g, b;
+
+ palette.get(i, r, g, b);
+ r = _vm->_macGammaCorrectionLookUp[r];
+ g = _vm->_macGammaCorrectionLookUp[g];
+ b = _vm->_macGammaCorrectionLookUp[b];
+ palette.set(i, r, g, b);
+ }
}
screen->fillRect(Common::Rect(screen->w, screen->h), getBlack());
@@ -556,9 +558,11 @@ void MacV6Gui::runAboutDialog() {
if (r == 0 && g == 0 && b == 0)
black = i;
- r = _vm->_macGammaCorrectionLookUp[r];
- g = _vm->_macGammaCorrectionLookUp[g];
- b = _vm->_macGammaCorrectionLookUp[b];
+ if (_vm->_useGammaCorrection) {
+ r = _vm->_macGammaCorrectionLookUp[r];
+ g = _vm->_macGammaCorrectionLookUp[g];
+ b = _vm->_macGammaCorrectionLookUp[b];
+ }
palette.set(i, r, g, b);
}
diff --git a/engines/scumm/metaengine.cpp b/engines/scumm/metaengine.cpp
index ceb7b3cd86f..b0cc4e9862c 100644
--- a/engines/scumm/metaengine.cpp
+++ b/engines/scumm/metaengine.cpp
@@ -752,6 +752,15 @@ static const ExtraGuiOption enableOriginalGUI = {
0
};
+static const ExtraGuiOption enableMacintoshGamma = {
+ _s("Enable gamma correction"),
+ _s("Brighten the graphics to simulate a Macintosh monitor."),
+ "gamma_correction",
+ true,
+ 0,
+ 0
+};
+
static const ExtraGuiOption enableLowLatencyAudio = {
_s("Enable low latency audio mode"),
_s("Allows the game to use low latency audio, at the cost of sound accuracy. "
@@ -811,6 +820,10 @@ const ExtraGuiOptions ScummMetaEngine::getExtraGuiOptions(const Common::String &
if (target.empty() || guiOptions.contains(GAMEOPTION_ORIGINALGUI)) {
options.push_back(enableOriginalGUI);
+
+ if (platform == Common::kPlatformMacintosh) {
+ options.push_back(enableMacintoshGamma);
+ }
}
if (target.empty() || guiOptions.contains(GAMEOPTION_COPY_PROTECTION)) {
options.push_back(enableCopyProtection);
@@ -881,6 +894,7 @@ void ScummMetaEngine::registerDefaultSettings(const Common::String &) const {
else
ConfMan.registerDefault(engineOptions[i].configOption, engineOptions[i].defaultState);
}
+ ConfMan.registerDefault("gamma_correction", true);
}
Common::KeymapArray ScummMetaEngine::initKeymaps(const char *target) const {
diff --git a/engines/scumm/palette.cpp b/engines/scumm/palette.cpp
index 349ae14fb7c..f3d7e6707fe 100644
--- a/engines/scumm/palette.cpp
+++ b/engines/scumm/palette.cpp
@@ -1726,7 +1726,7 @@ void ScummEngine::updatePalette() {
#endif
#endif
- if (_game.platform == Common::kPlatformMacintosh && _game.heversion == 0) {
+ if (_game.platform == Common::kPlatformMacintosh && _game.heversion == 0 && _useGammaCorrection) {
for (int i = 0; i < 3 * num; ++i)
paletteColors[i] = _macGammaCorrectionLookUp[paletteColors[i]];
}
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 74a2f776098..9d354c6e39c 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -195,11 +195,16 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
if (_game.platform == Common::kPlatformMacintosh) {
ConfMan.registerDefault("mac_graphics_smoothing", true);
+ ConfMan.registerDefault("gamma_correction", true);
if (ConfMan.hasKey("mac_graphics_smoothing", _targetName)) {
_useMacGraphicsSmoothing = ConfMan.getBool("mac_graphics_smoothing");
}
}
+ if (ConfMan.hasKey("gamma_correction", _targetName)) {
+ _useGammaCorrection = ConfMan.getBool("gamma_correction");
+ }
+
setTimerAndShakeFrequency();
camera.reset();
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 6cd834dc465..5720127e227 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -1614,6 +1614,8 @@ public:
Graphics::Surface _textSurface;
int _textSurfaceMultiplier = 0;
+ bool _useGammaCorrection = true;
+
Graphics::Surface *_macScreen = nullptr;
MacGui *_macGui = nullptr;
bool _useMacGraphicsSmoothing = true;
diff --git a/engines/scumm/smush/smush_player.cpp b/engines/scumm/smush/smush_player.cpp
index 30c35b4c89d..45108c09133 100644
--- a/engines/scumm/smush/smush_player.cpp
+++ b/engines/scumm/smush/smush_player.cpp
@@ -1288,8 +1288,11 @@ void SmushPlayer::play(const char *filename, int32 speed, int32 offset, int32 st
if (_vm->_macScreen) {
byte palette[768];
memcpy(palette, _pal, 768);
- for (int i = 0; i < ARRAYSIZE(palette); i++) {
- palette[i] = _vm->_macGammaCorrectionLookUp[_pal[i]];
+
+ if (_vm->_useGammaCorrection) {
+ for (int i = 0; i < ARRAYSIZE(palette); i++) {
+ palette[i] = _vm->_macGammaCorrectionLookUp[_pal[i]];
+ }
}
_vm->_system->getPaletteManager()->setPalette(palette + _palDirtyMin * 3, _palDirtyMin, _palDirtyMax - _palDirtyMin + 1);
More information about the Scummvm-git-logs
mailing list