[Scummvm-git-logs] scummvm master -> e06f3c9a5aa444de5422365fb44ae7c9316b4344

eriktorbjorn noreply at scummvm.org
Thu Apr 21 09:07:24 UTC 2022


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:
0f4881214b SCUMM: Add semi-smooth scrolling for the FM Towns Loom intro
e06f3c9a5a GUI: Allow game option checkboxes to be disabled


Commit: 0f4881214bc004c801e9d64b22f61d7b507a463b
    https://github.com/scummvm/scummvm/commit/0f4881214bc004c801e9d64b22f61d7b507a463b
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2022-04-21T11:07:17+02:00

Commit Message:
SCUMM: Add semi-smooth scrolling for the FM Towns Loom intro

Scrolling four pixels at a time is smoother than eight, and able to
keep up with the fast camera move in the FM Towns Loom intro.

Changed paths:
    engines/scumm/detection.cpp
    engines/scumm/gfx.h
    engines/scumm/gfx_towns.cpp


diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index f68473a9d1a..662b57fd51c 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -206,6 +206,13 @@ static const ExtraGuiOption smoothScrolling = {
 	true
 };
 
+static const ExtraGuiOption semiSmoothScrolling = {
+	_s("Allow semi-smooth scrolling"),
+	_s("Allow scrolling to be less smooth during the fast camera movement in the intro."),
+	"semi_smooth_scroll",
+	false
+};
+
 static const ExtraGuiOption enableEnhancements {
 	_s("Enable game-specific enhancements"),
 	_s("Allow ScummVM to make small enhancements to the game, usually based on other versions of the same game."),
@@ -241,6 +248,8 @@ const ExtraGuiOptions ScummMetaEngineDetection::getExtraGuiOptions(const Common:
 	}
 	if (target.empty() || platform == Common::kPlatformFMTowns) {
 		options.push_back(smoothScrolling);
+		if (target.empty() || gameid == "loom")
+			options.push_back(semiSmoothScrolling);
 		if (guiOptions.contains(GUIO_TRIM_FMTOWNS_TO_200_PIXELS))
 			options.push_back(fmtownsTrimTo200);
 	}
diff --git a/engines/scumm/gfx.h b/engines/scumm/gfx.h
index 6c5b544ae8f..e3754a152c8 100644
--- a/engines/scumm/gfx.h
+++ b/engines/scumm/gfx.h
@@ -482,7 +482,7 @@ public:
 	void fillLayerRect(int layer, int x, int y, int w, int h, int col);
 	void addDirtyRect(int x, int y, int w, int h);
 	void toggleLayers(int flags);
-	void scrollLayers(int flags, int offset);
+	void scrollLayers(int flags, int offset, bool fast);
 	void update();
 	bool isScrolling(int direction, int threshold = 0) const { return (direction == 0) ? _scrollRemainder != threshold : (direction == 1 ? _scrollRemainder > threshold : _scrollRemainder < threshold); }
 
@@ -526,6 +526,7 @@ private:
 	int _pitch;
 	uint16 _scrollOffset;
 	int _scrollRemainder;
+	bool _semiSmoothScroll;
 	Graphics::PixelFormat _pixelFormat;
 
 	int _numDirtyRects;
diff --git a/engines/scumm/gfx_towns.cpp b/engines/scumm/gfx_towns.cpp
index 7375b48b390..e154e77df6b 100644
--- a/engines/scumm/gfx_towns.cpp
+++ b/engines/scumm/gfx_towns.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "common/endian.h"
+#include "common/config-manager.h"
 
 #include "scumm/scumm.h"
 #include "scumm/charset.h"
@@ -202,7 +203,7 @@ void ScummEngine::towns_updateGfx() {
 			if (!_scrollTimer)
 				_scrollTimer = cur;
 			_scrollTimer += 1000 / 60;
-			_townsScreen->scrollLayers(1, _scrollRequest);
+			_townsScreen->scrollLayers(1, _scrollRequest, VAR(VAR_TIMER_NEXT) == 0);
 			if (_scrollNeedDeltaAdjust && _townsScreen->isScrolling(0))
 				_scrollDeltaAdjust++;
 			_scrollRequest = 0;
@@ -250,7 +251,7 @@ void ScummEngine::towns_scriptScrollEffect(int dir) {
 		uint32 nextFrame = _system->getMillis() + 1000 / 60;
 		// Same as in requestScroll(): This prevents glitches from graphics layer wrapping.
 		towns_waitForScroll(dir, threshold);
-		_townsScreen->scrollLayers(0, dir << 3);
+		_townsScreen->scrollLayers(0, dir << 3, false);
 		towns_drawStripToScreen(vs, destX << 3, vs->topline, (srcX + (-dir * x)) << 3, 0, stripWidth, vs->h);
 		waitForTimer(nextFrame - _system->getMillis());
 	}
@@ -340,6 +341,8 @@ TownsScreen::TownsScreen(OSystem *system) :	_system(system), _width(0), _height(
 	_pitch = s->pitch;
 	_system->unlockScreen();
 
+	_semiSmoothScroll = ConfMan.getBool("semi_smooth_scroll");
+
 	setupLayer(0, _width, _height, 1, 1, 256);
 }
 
@@ -523,13 +526,21 @@ void TownsScreen::toggleLayers(int flags) {
 	_system->updateScreen();
 }
 
-void TownsScreen::scrollLayers(int flags, int offset) {
+void TownsScreen::scrollLayers(int flags, int offset, bool fast) {
 	// This actually supports layer 0 only, since this is all we need.
 	_scrollRemainder += offset;
 	if (!_scrollRemainder)
 		return;
 
 	int step = (_scrollRemainder > 0) ? -1 : 1;
+
+	// Smooth scrolling isn't fast enough to keep up with the fast camera
+	// movement in the Loom intro. Non-smooth scrolling is eight pixels at
+	// at time, so two or four should be safe to use. Two is too slow, so
+	// four it is.
+	if (fast && _semiSmoothScroll)
+		step *= 4;
+
 	_scrollRemainder += step;
 	_scrollOffset = (_scrollOffset + step) % _layers[0].width;
 


Commit: e06f3c9a5aa444de5422365fb44ae7c9316b4344
    https://github.com/scummvm/scummvm/commit/e06f3c9a5aa444de5422365fb44ae7c9316b4344
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2022-04-21T11:07:17+02:00

Commit Message:
GUI: Allow game option checkboxes to be disabled

Depending on other game option checkboxes. This is used to
enable/disable the semi-smooth scrolling checkboxes for FM Towns Loom,
since it's only used when smooth scrolling is enabled.

Changed paths:
    engines/adl/detection.cpp
    engines/advancedDetector.h
    engines/agi/detection.cpp
    engines/bladerunner/detection.cpp
    engines/buried/detection.cpp
    engines/cge/detection.cpp
    engines/cge2/detection.cpp
    engines/chewy/detection.cpp
    engines/cine/detection.cpp
    engines/dialogs.cpp
    engines/dialogs.h
    engines/drascula/detection.cpp
    engines/dreamweb/detection.cpp
    engines/glk/detection.cpp
    engines/griffon/detection.cpp
    engines/grim/detection.cpp
    engines/groovie/detection.cpp
    engines/hdb/detection.cpp
    engines/hopkins/detection.cpp
    engines/hypno/detection.cpp
    engines/kyra/detection.cpp
    engines/lure/detection.cpp
    engines/made/detection.cpp
    engines/mads/detection.cpp
    engines/metaengine.h
    engines/myst3/detection.cpp
    engines/neverhood/detection.cpp
    engines/queen/detection.cpp
    engines/sci/detection_options.h
    engines/scumm/detection.cpp
    engines/sherlock/detection.cpp
    engines/sky/detection.cpp
    engines/stark/detection.cpp
    engines/supernova/detection.cpp
    engines/sword2/detection.cpp
    engines/sword25/detection.cpp
    engines/toltecs/detection.cpp
    engines/trecision/detection.cpp
    engines/twine/detection.cpp
    engines/ultima/detection.cpp
    engines/wintermute/detection.cpp
    engines/xeen/detection.cpp
    engines/zvision/detection_tables.h


diff --git a/engines/adl/detection.cpp b/engines/adl/detection.cpp
index 6230ff9573f..0355b6b8232 100644
--- a/engines/adl/detection.cpp
+++ b/engines/adl/detection.cpp
@@ -53,7 +53,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("TV emulation"),
 			_s("Emulate composite output to an NTSC TV"),
 			"ntsc",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -63,7 +65,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Color graphics"),
 			_s("Use color graphics instead of monochrome"),
 			"color",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -73,7 +77,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Color graphics"),
 			_s("Use color graphics instead of monochrome"),
 			"color",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -83,7 +89,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Show scanlines"),
 			_s("Darken every other scanline to mimic the look of a CRT"),
 			"scanlines",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -93,7 +101,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Always use sharp monochrome text"),
 			_s("Do not emulate NTSC artifacts for text"),
 			"monotext",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/advancedDetector.h b/engines/advancedDetector.h
index 95c7a259e9f..5e78b0c9380 100644
--- a/engines/advancedDetector.h
+++ b/engines/advancedDetector.h
@@ -252,7 +252,7 @@ struct ADExtraGuiOptionsMap {
 	ExtraGuiOption option; /*!< The associated option. */
 };
 
-#define AD_EXTRA_GUI_OPTIONS_TERMINATOR { 0, { 0, 0, 0, 0 } }
+#define AD_EXTRA_GUI_OPTIONS_TERMINATOR { 0, { 0, 0, 0, 0, 0, 0 } }
 
 /**
  * A @ref MetaEngineDetection implementation based on the Advanced Detector code.
diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp
index 1e4053b4d0a..6479c3b783f 100644
--- a/engines/agi/detection.cpp
+++ b/engines/agi/detection.cpp
@@ -86,7 +86,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"originalsaveload",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -96,7 +98,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use an alternative palette"),
 			_s("Use an alternative palette, common for all Amiga games. This was the old behavior"),
 			"altamigapalette",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -106,7 +110,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Mouse support"),
 			_s("Enables mouse support. Allows to use mouse for movement and in game menus."),
 			"mousesupport",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -116,7 +122,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use Hercules hires font"),
 			_s("Uses Hercules hires font, when font file is available."),
 			"herculesfont",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -126,7 +134,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Pause when entering commands"),
 			_s("Shows a command prompt window and pauses the game (like in SCI) instead of a real-time prompt."),
 			"commandpromptwindow",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -136,7 +146,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Add speed menu"),
 			_s("Add game speed menu (similar to PC version)"),
 			"apple2gs_speedmenu",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/bladerunner/detection.cpp b/engines/bladerunner/detection.cpp
index 90958c961c7..60d89491aed 100644
--- a/engines/bladerunner/detection.cpp
+++ b/engines/bladerunner/detection.cpp
@@ -52,7 +52,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Sitcom mode"),
 			_s("Game will add laughter after actor's line or narration"),
 			"sitcom",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	{
@@ -61,7 +63,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Shorty mode"),
 			_s("Game will shrink the actors and make their voices high pitched"),
 			"shorty",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	{
@@ -70,7 +74,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Frame limiter high performance mode"),
 			_s("This mode may result in high CPU usage! It avoids use of delayMillis() function."),
 			"nodelaymillisfl",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	{
@@ -79,7 +85,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Max frames per second limit"),
 			_s("This mode targets a maximum of 120 fps. When disabled, the game targets 60 fps"),
 			"frames_per_secondfl",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	{
@@ -88,7 +96,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Disable McCoy's quick stamina drain"),
 			_s("When running, McCoy won't start slowing down as soon as the player stops clicking the mouse"),
 			"disable_stamina_drain",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	AD_EXTRA_GUI_OPTIONS_TERMINATOR
diff --git a/engines/buried/detection.cpp b/engines/buried/detection.cpp
index 03ec13670bc..84f73a137ec 100644
--- a/engines/buried/detection.cpp
+++ b/engines/buried/detection.cpp
@@ -53,7 +53,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Skip support"),
 			_s("Allow cutscenes to be skipped"),
 			"skip_support",
-			true
+			true,
+			0,
+			0
 		}
 	},
 	AD_EXTRA_GUI_OPTIONS_TERMINATOR
diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp
index 457e84f83c0..dec88201da9 100644
--- a/engines/cge/detection.cpp
+++ b/engines/cge/detection.cpp
@@ -113,7 +113,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Color Blind Mode"),
 			_s("Enable Color Blind Mode by default"),
 			"enable_color_blind",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -124,7 +126,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable Text to Speech"),
 			_s("Use TTS to read text in the game (if TTS is available)"),
 			"tts_enabled",
-			false
+			false,
+			0,
+			0
 		}
 	},
 #endif
diff --git a/engines/cge2/detection.cpp b/engines/cge2/detection.cpp
index 56ba292d358..99b60fc240c 100644
--- a/engines/cge2/detection.cpp
+++ b/engines/cge2/detection.cpp
@@ -105,7 +105,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 				_s("Color Blind Mode"),
 				_s("Enable Color Blind Mode by default"),
 				"enable_color_blind",
-				false
+				false,
+				0,
+				0
 			}
 		},
 
@@ -116,7 +118,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable Text to Speech for Objects and Options"),
 			_s("Use TTS to read the descriptions (if TTS is available)"),
 			"tts_enabled_objects",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -126,7 +130,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable Text to Speech for Subtitles"),
 			_s("Use TTS to read the subtitles (if TTS is available)"),
 			"tts_enabled_speech",
-			false
+			false,
+			0,
+			0
 		}
 	},
 #endif
diff --git a/engines/chewy/detection.cpp b/engines/chewy/detection.cpp
index 05ad381910a..15f1597f7a5 100644
--- a/engines/chewy/detection.cpp
+++ b/engines/chewy/detection.cpp
@@ -113,7 +113,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"original_menus",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/cine/detection.cpp b/engines/cine/detection.cpp
index 1e353e7d065..f969c162a8c 100644
--- a/engines/cine/detection.cpp
+++ b/engines/cine/detection.cpp
@@ -51,7 +51,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"originalsaveload",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	{
@@ -60,7 +62,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use transparent dialog boxes in 16 color scenes"),
 			_s("Use transparent dialog boxes in 16 color scenes even if the original game version did not support them"),
 			"transparentdialogboxes",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/dialogs.cpp b/engines/dialogs.cpp
index b57f20c9ade..c3acf1345e8 100644
--- a/engines/dialogs.cpp
+++ b/engines/dialogs.cpp
@@ -382,14 +382,48 @@ ExtraGuiOptionsWidget::ExtraGuiOptionsWidget(GuiObject *containerBoss, const Com
 
 	for (uint i = 0; i < _options.size(); i++) {
 		Common::String id = Common::String::format("%d", i + 1);
+		uint32 cmd = _options[i].groupLeaderId ? kClickGroupLeaderCmd : 0;
 		_checkboxes.push_back(new CheckboxWidget(widgetsBoss(),
-			_dialogLayout + ".customOption" + id + "Checkbox", _(_options[i].label), _(_options[i].tooltip)));
+			_dialogLayout + ".customOption" + id + "Checkbox", _(_options[i].label), _(_options[i].tooltip), cmd));
 	}
 }
 
 ExtraGuiOptionsWidget::~ExtraGuiOptionsWidget() {
 }
 
+void ExtraGuiOptionsWidget::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) {
+	switch (cmd) {
+	case kClickGroupLeaderCmd: {
+		byte groupLeaderId = 0;
+
+		for (uint i = 0; i < _checkboxes.size(); i++) {
+			if (_checkboxes[i] == (CheckboxWidget *)sender) {
+				groupLeaderId = _options[i].groupLeaderId;
+				break;
+			}
+		}
+
+		if (!groupLeaderId)
+			break;
+
+		// We have found the "group leader" checkbox. Enable or disable
+		// all checkboxes in the group. Theoretically, this could mean
+		// that we disable another group leader, so its group should
+		// also be disabled. But that seems overkill for now.
+
+		for (uint i = 0; i < _options.size(); i++) {
+			if (_options[i].groupId == groupLeaderId) {
+				_checkboxes[i]->setEnabled(data != 0);
+			}
+		}
+		break;
+	}
+	default:
+		OptionsContainerWidget::handleCommand(sender, cmd, data);
+		break;
+	}
+}
+
 Common::String ExtraGuiOptionsWidget::dialogLayout(const Common::String &domain) {
 	if (ConfMan.getActiveDomainName().equals(domain)) {
 		return "GlobalConfig_Engine_Container";
@@ -417,7 +451,7 @@ void ExtraGuiOptionsWidget::load() {
 bool ExtraGuiOptionsWidget::save() {
 	// Set the state of engine-specific checkboxes
 	for (uint i = 0; i < _options.size() && i < _checkboxes.size(); i++) {
-		ConfMan.setBool(_options[i].configOption, _checkboxes[i]->getState(), _domain);
+		ConfMan.setBool(_options[i].configOption, _checkboxes[i]->isEnabled() && _checkboxes[i]->getState(), _domain);
 	}
 
 	return true;
diff --git a/engines/dialogs.h b/engines/dialogs.h
index ad3cbb7b92a..3bf05ec5434 100644
--- a/engines/dialogs.h
+++ b/engines/dialogs.h
@@ -93,10 +93,17 @@ private:
 };
 
 class ExtraGuiOptionsWidget : public OptionsContainerWidget {
+public:
+	enum {
+		kClickGroupLeaderCmd = 'CGLC'
+	};
+
 public:
 	ExtraGuiOptionsWidget(GuiObject *widgetsBoss, const Common::String &name, const Common::String &domain, const ExtraGuiOptions &options);
 	~ExtraGuiOptionsWidget() override;
 
+	virtual void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data);
+
 	// OptionsContainerWidget API
 	void load() override;
 	bool save() override;
diff --git a/engines/drascula/detection.cpp b/engines/drascula/detection.cpp
index bb783786cc3..f9995c20c1f 100644
--- a/engines/drascula/detection.cpp
+++ b/engines/drascula/detection.cpp
@@ -298,7 +298,9 @@ static const ExtraGuiOption drasculaExtraGuiOption = {
 	_s("Use original save/load screens"),
 	_s("Use the original save/load screens instead of the ScummVM ones"),
 	"originalsaveload",
-	false
+	false,
+	0,
+	0
 };
 
 class DrasculaMetaEngineDetection : public AdvancedMetaEngineDetection {
diff --git a/engines/dreamweb/detection.cpp b/engines/dreamweb/detection.cpp
index 0018084732a..0782e6aa204 100644
--- a/engines/dreamweb/detection.cpp
+++ b/engines/dreamweb/detection.cpp
@@ -54,7 +54,9 @@ static const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"originalsaveload",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -64,7 +66,9 @@ static const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Use bright palette mode"),
 			_s("Display graphics using the game's bright palette"),
 			"bright_palette",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -75,7 +79,9 @@ static const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Enable Text to Speech for Objects, Options, and the Bible Quote"),
 			_s("Use TTS to read the descriptions (if TTS is available)"),
 			"tts_enabled_objects",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -85,7 +91,9 @@ static const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Enable Text to Speech for Subtitles"),
 			_s("Use TTS to read the subtitles (if TTS is available)"),
 			"tts_enabled_speech",
-			false
+			false,
+			0,
+			0
 		}
 	},
 #endif
diff --git a/engines/glk/detection.cpp b/engines/glk/detection.cpp
index d09c0e2bce5..eaccd819e46 100644
--- a/engines/glk/detection.cpp
+++ b/engines/glk/detection.cpp
@@ -238,13 +238,17 @@ const ExtraGuiOptions GlkMetaEngineDetection::getExtraGuiOptions(const Common::S
 		_s("Enable Text to Speech"),
 		_s("Use TTS to read the text"),
 		"speak",
-		false
+		false,
+	        0,
+		0
 	};
 	static const ExtraGuiOption ttsSpeakInputOptions = {
 		_s("Also read input text"),
 		_s("Use TTS to read the input text"),
 		"speak_input",
-		false
+		false,
+		0,
+		0
 	};
 	options.push_back(ttsSpeakOptions);
 	options.push_back(ttsSpeakInputOptions);
diff --git a/engines/griffon/detection.cpp b/engines/griffon/detection.cpp
index f6bbc6f46c7..3cd5bb4c223 100644
--- a/engines/griffon/detection.cpp
+++ b/engines/griffon/detection.cpp
@@ -41,7 +41,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable Text to Speech"),
 			_s("Use TTS to read the descriptions (if TTS is available)"),
 			"tts_enabled",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	AD_EXTRA_GUI_OPTIONS_TERMINATOR
diff --git a/engines/grim/detection.cpp b/engines/grim/detection.cpp
index f06c776b213..b001b5e92e7 100644
--- a/engines/grim/detection.cpp
+++ b/engines/grim/detection.cpp
@@ -69,7 +69,9 @@ static const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Load user patch (unsupported)"),
 			_s("Load an user patch. Please note that the ScummVM team doesn't provide support for using such patches."),
 			"datausr_load",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	{
@@ -78,7 +80,9 @@ static const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Show FPS"),
 			_s("Show the current FPS-rate, while you play."),
 			"show_fps",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/groovie/detection.cpp b/engines/groovie/detection.cpp
index abefe33a351..5eba136ea15 100644
--- a/engines/groovie/detection.cpp
+++ b/engines/groovie/detection.cpp
@@ -275,7 +275,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Fast movie speed"),
 			_s("Play movies at an increased speed"),
 			"fast_movie_speed",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -285,7 +287,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"originalsaveload",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -295,7 +299,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Easier AI"),
 			_s("Decrease the difficulty of AI puzzles"),
 			"easier_ai",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -305,7 +311,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Updated Credits Music"),
 			_s("Play the song The Final Hour during the credits instead of reusing MIDI songs"),
 			"credits_music",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/hdb/detection.cpp b/engines/hdb/detection.cpp
index 1a27334ec22..54546e89b0a 100644
--- a/engines/hdb/detection.cpp
+++ b/engines/hdb/detection.cpp
@@ -123,7 +123,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 						_s("Enable cheat mode"),
 						_s("Debug info and level selection becomes available"),
 						"hypercheat",
-						false
+						false,
+						0,
+						0
 				}
 		},
 
diff --git a/engines/hopkins/detection.cpp b/engines/hopkins/detection.cpp
index 9f804d37d97..c6915bf17ec 100644
--- a/engines/hopkins/detection.cpp
+++ b/engines/hopkins/detection.cpp
@@ -46,7 +46,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Gore Mode"),
 			_s("Enable Gore Mode when available"),
 			"enable_gore",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -56,7 +58,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Gore Mode"),
 			_s("Enable Gore Mode when available"),
 			"enable_gore",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/hypno/detection.cpp b/engines/hypno/detection.cpp
index 5389c88410d..4e8c04d3ea8 100644
--- a/engines/hypno/detection.cpp
+++ b/engines/hypno/detection.cpp
@@ -190,14 +190,18 @@ static const ExtraGuiOption hypnoExtraGuiOptionCheats = {
 	_s("Enable cheats"),
 	_s("Allow cheats using the C key."),
 	"cheats",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption hypnoExtraGuiOptionRestoredContent = {
 	_s("Enable restored content"),
 	_s("Add additional content that is not enabled the original implementation."),
 	"restored",
-	false
+	false,
+	0,
+	0
 };
 
 class HypnoMetaEngineDetection : public AdvancedMetaEngineDetection {
diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp
index cdffe00e424..20f05f0c0af 100644
--- a/engines/kyra/detection.cpp
+++ b/engines/kyra/detection.cpp
@@ -61,7 +61,9 @@ const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Studio audience"),
 			_s("Enable studio audience"),
 			"studio_audience",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -72,7 +74,9 @@ const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Skip support"),
 			_s("Allow text and cutscenes to be skipped"),
 			"skip_support",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -83,7 +87,9 @@ const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Helium mode"),
 			_s("Enable helium mode"),
 			"helium_mode",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -97,7 +103,9 @@ const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Smooth scrolling"),
 			_s("Enable smooth scrolling when walking"),
 			"smooth_scrolling",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -110,7 +118,9 @@ const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Floating cursors"),
 			_s("Enable floating cursors"),
 			"floating_cursors",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -122,7 +132,9 @@ const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Suggest save names"),
 			_s("Autogenerated naming suggestions for savegames"),
 			"auto_savenames",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -135,7 +147,9 @@ const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("HP bar graphs"),
 			_s("Enable hit point bar graphs"),
 			"hpbargraphs",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -146,7 +160,9 @@ const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Fight Button L/R Swap"),
 			_s("Left button to attack, right button to pick up items"),
 			"mousebtswap",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/lure/detection.cpp b/engines/lure/detection.cpp
index bfc1b74727b..a8066314ffc 100644
--- a/engines/lure/detection.cpp
+++ b/engines/lure/detection.cpp
@@ -44,7 +44,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("TTS Narrator"),
 			_s("Use TTS to read the descriptions (if TTS is available)"),
 			"tts_narrator",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/made/detection.cpp b/engines/made/detection.cpp
index 632473fa1c6..09d4d0c2bf1 100644
--- a/engines/made/detection.cpp
+++ b/engines/made/detection.cpp
@@ -62,7 +62,9 @@ static const ExtraGuiOption introMusicDigital = {
 	_s("Play a digital soundtrack during the opening movie"),
 	_s("If selected, the game will use a digital soundtrack during the introduction. Otherwise, it will play MIDI music."),
 	"intro_music_digital",
-	true
+	true,
+	0,
+	0
 };
 
 const ExtraGuiOptions MadeMetaEngineDetection::getExtraGuiOptions(const Common::String &target) const {
diff --git a/engines/mads/detection.cpp b/engines/mads/detection.cpp
index f7c7baae762..58de349756d 100644
--- a/engines/mads/detection.cpp
+++ b/engines/mads/detection.cpp
@@ -62,7 +62,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Easy mouse interface"),
 			_s("Shows object names when hovering the mouse over them"),
 			"EasyMouse",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -72,7 +74,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Animated inventory items"),
 			_s("Animated inventory items"),
 			"InvObjectsAnimated",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -82,7 +86,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Animated game interface"),
 			_s("Animated game interface"),
 			"TextWindowAnimated",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -92,7 +98,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Naughty game mode"),
 			_s("Naughty game mode"),
 			"NaughtyMode",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -102,7 +110,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Graphics dithering"),
 			_s("Graphics dithering"),
 			"GraphicsDithering",
-			true
+			true,
+			0,
+			0
 		}
 	},*/
 
@@ -113,7 +123,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("TTS Narrator"),
 			_s("Use TTS to read the descriptions (if TTS is available)"),
 			"tts_narrator",
-			false
+			false,
+			0,
+			0
 		}
 	},
 #endif
diff --git a/engines/metaengine.h b/engines/metaengine.h
index 49ad9a77a29..f35ff98a618 100644
--- a/engines/metaengine.h
+++ b/engines/metaengine.h
@@ -71,6 +71,8 @@ struct ExtraGuiOption {
 	const char *tooltip;       /*!< Option tooltip shown when the mouse cursor hovers over it. */
 	const char *configOption;  /*!< confMan key, e.g. "fullscreen". */
 	bool defaultState;         /*!< Default state of the checkbox (checked or not). */
+	byte groupId;        /*!< Id for the checkbox's group, or 0 for no group. */
+	byte groupLeaderId;  /*!< When this checkbox is unchecked, disable all checkboxes in this group. One leader per group. */
 };
 
 /**
diff --git a/engines/myst3/detection.cpp b/engines/myst3/detection.cpp
index 2ee06eb7190..4e68f4a365e 100644
--- a/engines/myst3/detection.cpp
+++ b/engines/myst3/detection.cpp
@@ -212,7 +212,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Widescreen mod"),
 			_s("Enable widescreen rendering in fullscreen mode."),
 			"widescreen_mod",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/neverhood/detection.cpp b/engines/neverhood/detection.cpp
index 1fd05b1d68d..a34e3e30d42 100644
--- a/engines/neverhood/detection.cpp
+++ b/engines/neverhood/detection.cpp
@@ -134,21 +134,27 @@ static const ExtraGuiOption neverhoodExtraGuiOption1 = {
 	_s("Use original save/load screens"),
 	_s("Use the original save/load screens instead of the ScummVM ones"),
 	"originalsaveload",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption neverhoodExtraGuiOption2 = {
 	_s("Skip the Hall of Records storyboard scenes"),
 	_s("Allows the player to skip past the Hall of Records storyboard scenes"),
 	"skiphallofrecordsscenes",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption neverhoodExtraGuiOption3 = {
 	_s("Scale the making of videos to full screen"),
 	_s("Scale the making of videos, so that they use the whole screen"),
 	"scalemakingofvideos",
-	false
+	false,
+	0,
+	0
 };
 
 
diff --git a/engines/queen/detection.cpp b/engines/queen/detection.cpp
index 37a055ce1cf..439ea0a7e67 100644
--- a/engines/queen/detection.cpp
+++ b/engines/queen/detection.cpp
@@ -44,7 +44,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Alternative intro"),
 			_s("Use an alternative game intro (CD version only)"),
 			"alt_intro",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/sci/detection_options.h b/engines/sci/detection_options.h
index e846a57b666..01d4a50fa36 100644
--- a/engines/sci/detection_options.h
+++ b/engines/sci/detection_options.h
@@ -31,7 +31,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Skip EGA dithering pass (full color backgrounds)"),
 			_s("Skip dithering pass in EGA games, graphics are shown with full colors"),
 			"disable_dithering",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -41,7 +43,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable high resolution graphics"),
 			_s("Enable high resolution graphics/content"),
 			"enable_high_resolution_graphics",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -51,7 +55,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable black-lined video"),
 			_s("Draw black lines over videos to increase their apparent sharpness"),
 			"enable_black_lined_video",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -62,7 +68,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use high-quality video scaling"),
 			_s("Use linear interpolation when upscaling videos, where possible"),
 			"enable_hq_video",
-			true
+			true,
+			0,
+			0
 		}
 	},
 #endif
@@ -73,7 +81,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use high-quality \"LarryScale\" cel scaling"),
 			_s("Use special cartoon scaler for drawing character sprites"),
 			"enable_larryscale",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -83,7 +93,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Prefer digital sound effects"),
 			_s("Prefer digital sound effects instead of synthesized ones"),
 			"prefer_digitalsfx",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -93,7 +105,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"originalsaveload",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	// Jones in the Fast Lane - CD audio tracks or resource.snd
@@ -103,7 +117,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use CD audio"),
 			_s("Use CD audio instead of in-game audio, if available"),
 			"use_cdaudio",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -114,7 +130,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use Windows cursors"),
 			_s("Use the Windows cursors (smaller and monochrome) instead of the DOS ones"),
 			"windows_cursors",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -125,7 +143,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use silver cursors"),
 			_s("Use the alternate set of silver cursors instead of the normal golden ones"),
 			"silver_cursors",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -136,7 +156,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable content censoring"),
 			_s("Enable the game's built-in optional content censoring"),
 			"enable_censoring",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -147,7 +169,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Upscale videos"),
 			_s("Upscale videos to double their size"),
 			"enable_video_upscale",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -158,7 +182,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use RGB rendering"),
 			_s("Use RGB rendering to improve screen transitions"),
 			"rgb_rendering",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -169,7 +195,9 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use per-resource modified palettes"),
 			_s("Use custom per-resource palettes to improve visuals"),
 			"palette_mods",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -180,19 +208,23 @@ const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable bearded musicians"),
 			_s("Enable graphics that were disabled for legal reasons"),
 			"enable_bearded_musicians",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
 #ifdef USE_TTS
- 	{
- 		GAMEOPTION_TTS,
- 		{
- 			_s("Enable Text to Speech"),
- 			_s("Use TTS to read the descriptions (if TTS is available)"),
- 			"tts_enabled",
- 			false
- 		}
+	{
+		GAMEOPTION_TTS,
+		{
+			_s("Enable Text to Speech"),
+			_s("Use TTS to read the descriptions (if TTS is available)"),
+			"tts_enabled",
+			false,
+			0,
+			0
+		}
  	},
 #endif
 
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index 662b57fd51c..4f1d4277474 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -175,49 +175,63 @@ static const ExtraGuiOption comiObjectLabelsOption = {
 	_s("Show Object Line"),
 	_s("Show the names of objects at the bottom of the screen"),
 	"object_labels",
-	true
+	true,
+	0,
+	0
 };
 
 static const ExtraGuiOption mmnesObjectLabelsOption = {
 	_s("Use NES Classic Palette"),
 	_s("Use a more neutral color palette that closely emulates the NES Classic"),
 	"mm_nes_classic_palette",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption fmtownsTrimTo200 = {
 	_s("Trim FM-TOWNS games to 200 pixels height"),
 	_s("Cut the extra 40 pixels at the bottom of the screen, to make it standard 200 pixels height, allowing using 'aspect ratio correction'"),
 	"trim_fmtowns_to_200_pixels",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption macV3LowQualityMusic = {
 	_s("Play simplified music"),
 	_s("This music was presumably intended for low-end Macs, and uses only one channel."),
 	"mac_v3_low_quality_music",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption smoothScrolling = {
 	_s("Enable smooth scrolling"),
 	_s("(instead of the normal 8-pixels steps scrolling)"),
 	"smooth_scroll",
-	true
+	true,
+	0,
+	1
 };
 
 static const ExtraGuiOption semiSmoothScrolling = {
 	_s("Allow semi-smooth scrolling"),
 	_s("Allow scrolling to be less smooth during the fast camera movement in the intro."),
 	"semi_smooth_scroll",
-	false
+	false,
+	1,
+	0
 };
 
 static const ExtraGuiOption enableEnhancements {
 	_s("Enable game-specific enhancements"),
 	_s("Allow ScummVM to make small enhancements to the game, usually based on other versions of the same game."),
 	"enable_enhancements",
-	true
+	true,
+	0,
+	0
 };
 
 const ExtraGuiOptions ScummMetaEngineDetection::getExtraGuiOptions(const Common::String &target) const {
diff --git a/engines/sherlock/detection.cpp b/engines/sherlock/detection.cpp
index 44face6b02d..e461c427816 100644
--- a/engines/sherlock/detection.cpp
+++ b/engines/sherlock/detection.cpp
@@ -58,7 +58,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"originalsaveload",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -68,7 +70,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Pixellated scene transitions"),
 			_s("When changing scenes, a randomized pixel transition is done"),
 			"fade_style",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -78,7 +82,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Don't show hotspots when moving mouse"),
 			_s("Only show hotspot names after you actually click on a hotspot or action button"),
 			"help_style",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -88,7 +94,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Show character portraits"),
 			_s("Show portraits for the characters when conversing"),
 			"portraits_on",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -98,7 +106,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Slide dialogs into view"),
 			_s("Slide UI dialogs into view, rather than simply showing them immediately"),
 			"window_style",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -108,7 +118,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Transparent windows"),
 			_s("Show windows with a partially transparent background"),
 			"transparent_windows",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -119,7 +131,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("TTS Narrator"),
 			_s("Use TTS to read the descriptions (if TTS is available)"),
 			"tts_narrator",
-			false
+			false,
+			0,
+			0
 		}
 	},
 #endif
diff --git a/engines/sky/detection.cpp b/engines/sky/detection.cpp
index 2c23b56700e..bd0d971a948 100644
--- a/engines/sky/detection.cpp
+++ b/engines/sky/detection.cpp
@@ -36,7 +36,9 @@ static const ExtraGuiOption skyExtraGuiOption = {
 	_s("Floppy intro"),
 	_s("Use the floppy version's intro (CD version only)"),
 	"alt_intro",
-	false
+	false,
+	0,
+	0
 };
 
 struct SkyVersion {
diff --git a/engines/stark/detection.cpp b/engines/stark/detection.cpp
index 018cb07e776..ced8a286e84 100644
--- a/engines/stark/detection.cpp
+++ b/engines/stark/detection.cpp
@@ -375,7 +375,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Load modded assets"),
 			_s("Enable loading of external replacement assets."),
 			"enable_assets_mod",
-			true
+			true,
+			0,
+			0
 		}
 	},
 	{
@@ -384,7 +386,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable linear filtering of the backgrounds images"),
 			_s("When linear filtering is enabled the background graphics are smoother in full screen mode, at the cost of some details."),
 			"use_linear_filtering",
-			true
+			true,
+			0,
+			0
 		}
 	},
 	{
@@ -393,7 +397,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable font anti-aliasing"),
 			_s("When font anti-aliasing is enabled, the text is smoother."),
 			"enable_font_antialiasing",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/supernova/detection.cpp b/engines/supernova/detection.cpp
index f8d274d56a3..87923683054 100644
--- a/engines/supernova/detection.cpp
+++ b/engines/supernova/detection.cpp
@@ -41,7 +41,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Improved mode"),
 			_s("Removes some repetitive actions, adds possibility to change verbs by keyboard"),
 			"improved",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -51,7 +53,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable Text to Speech"),
 			_s("Use TTS to read the descriptions (if TTS is available)"),
 			"tts_enabled",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/sword2/detection.cpp b/engines/sword2/detection.cpp
index b7138b8b5b3..5ac8914220f 100644
--- a/engines/sword2/detection.cpp
+++ b/engines/sword2/detection.cpp
@@ -32,7 +32,9 @@ static const ExtraGuiOption sword2ExtraGuiOption = {
 	_s("Show object labels"),
 	_s("Show labels for objects on mouse hover"),
 	"object_labels",
-	false
+	false,
+	0,
+	0
 };
 
 class Sword2MetaEngineDetection : public MetaEngineDetection {
diff --git a/engines/sword25/detection.cpp b/engines/sword25/detection.cpp
index 1c855953a32..480c4bdd7c3 100644
--- a/engines/sword25/detection.cpp
+++ b/engines/sword25/detection.cpp
@@ -47,7 +47,9 @@ static const ExtraGuiOption sword25ExtraGuiOption = {
 	_s("Use English speech"),
 	_s("Use English speech instead of German for every language other than German"),
 	"english_speech",
-	false
+	false,
+	0,
+	0
 };
 
 class Sword25MetaEngineDetection : public AdvancedMetaEngineDetection {
diff --git a/engines/toltecs/detection.cpp b/engines/toltecs/detection.cpp
index 54f5a32ce25..3662ae096ea 100644
--- a/engines/toltecs/detection.cpp
+++ b/engines/toltecs/detection.cpp
@@ -212,7 +212,9 @@ static const ExtraGuiOption toltecsExtraGuiOption = {
 	_s("Use original save/load screens"),
 	_s("Use the original save/load screens instead of the ScummVM ones"),
 	"originalsaveload",
-	false
+	false,
+	0,
+	0
 };
 
 class ToltecsMetaEngineDetection : public AdvancedMetaEngineDetection {
diff --git a/engines/trecision/detection.cpp b/engines/trecision/detection.cpp
index 5cbcf75517a..cbb52a3244f 100644
--- a/engines/trecision/detection.cpp
+++ b/engines/trecision/detection.cpp
@@ -219,7 +219,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"originalsaveload",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	AD_EXTRA_GUI_OPTIONS_TERMINATOR
diff --git a/engines/twine/detection.cpp b/engines/twine/detection.cpp
index 718599a2cce..2290f30778b 100644
--- a/engines/twine/detection.cpp
+++ b/engines/twine/detection.cpp
@@ -673,7 +673,9 @@ static const ExtraGuiOption OptWallCollision = {
 	_s("Enable wall collisions"),
 	_s("Enable the original wall collision damage"),
 	"wallcollision",
-	false
+	false,
+	0,
+	0
 };
 
 // this only changes the menu and doesn't change the autosave behaviour - as scummvm is handling this now
@@ -681,70 +683,90 @@ static const ExtraGuiOption OptDisableSaveMenu = {
 	_s("Disable save menu"),
 	_s("The original only had autosaves. This allows you to save whenever you want."),
 	"useautosaving",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption OptDebug = {
 	_s("Enable debug mode"),
 	_s("Enable the debug mode"),
 	"debug",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption OptUseCD = {
 	_s("Enable audio CD"),
 	_s("Enable the original audio cd track"),
 	"usecd",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption OptSound = {
 	_s("Enable sound"),
 	_s("Enable the sound for the game"),
 	"sound",
-	true
+	true,
+	0,
+	0
 };
 
 static const ExtraGuiOption OptVoices = {
 	_s("Enable voices"),
 	_s("Enable the voices for the game"),
 	"voice",
-	true
+	true,
+	0,
+	0
 };
 
 static const ExtraGuiOption OptText = {
 	_s("Enable text"),
 	_s("Enable the text for the game"),
 	"displaytext",
-	true
+	true,
+	0,
+	0
 };
 
 static const ExtraGuiOption OptMovies = {
 	_s("Enable movies"),
 	_s("Enable the cutscenes for the game"),
 	"movie",
-	true
+	true,
+	0,
+	0
 };
 
 static const ExtraGuiOption OptMouse = {
 	_s("Enable mouse"),
 	_s("Enable the mouse for the UI"),
 	"mouse",
-	true
+	true,
+	0,
+	0
 };
 
 static const ExtraGuiOption OptUSAVersion = {
 	_s("Use the USA version"),
 	_s("Enable the USA specific version flags"),
 	"version",
-	false
+	false,
+	0,
+	0
 };
 
 static const ExtraGuiOption OptHighRes = {
 	_s("Enable high resolution"),
 	_s("Enable a higher resolution for the game"),
 	"usehighres",
-	false
+	false,
+	0,
+	0
 };
 
 #ifdef USE_TTS
@@ -752,7 +774,9 @@ static const ExtraGuiOption OptTextToSpeech = {
 	_s("TTS Narrator"),
 	_s("Use TTS to read the descriptions (if TTS is available)"),
 	"tts_narrator",
-	false
+	false,
+	0,
+	0
 };
 #endif
 
diff --git a/engines/ultima/detection.cpp b/engines/ultima/detection.cpp
index e84931e6538..4c4e96971f0 100644
--- a/engines/ultima/detection.cpp
+++ b/engines/ultima/detection.cpp
@@ -55,7 +55,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"originalsaveload",
-			false
+			false,
+			0,
+			0
 		}
 	},
 	AD_EXTRA_GUI_OPTIONS_TERMINATOR
@@ -66,27 +68,35 @@ static const ExtraGuiOption COMMON_OPTIONS[] = {
 		_s("Enable frame skipping"),
 		_s("Allow the game to skip animation frames when running too slow."),
 		"frameSkip",
-		false
+		false,
+		0,
+		0
 	},
 	{
 		_s("Enable frame limiting"),
 		_s("Limits the speed of the game to prevent running too fast."),
 		"frameLimit",
-		true
+		true,
+		0,
+		0
 	},
 	{
 		_s("Enable cheats"),
 		_s("Allow cheats by commands and a menu when player is clicked."),
 		"cheat",
-		false
+		false,
+		0,
+		0
 	},
 	{
 		_s("Enable high resolution"),
 		_s("Enable a higher resolution for the game"),
 		"usehighres",
-		false
+		false,
+		0,
+		0
 	},
-	{ nullptr, nullptr, nullptr, false }
+	{ nullptr, nullptr, nullptr, false, 0, 0 }
 };
 
 static const ExtraGuiOption U8_OPTIONS[] = {
@@ -94,33 +104,43 @@ static const ExtraGuiOption U8_OPTIONS[] = {
 		_s("Play foot step sounds"),
 		_s("Plays sound when the player moves."),
 		"footsteps",
-		true
+		true,
+		0,
+		0
 	},
 	{
 		_s("Enable jump to mouse position"),
 		_s("Jumping while not moving targets the mouse cursor rather than direction only."),
 		"targetedjump",
-		true
+		true,
+		0,
+		0
 	},
 	{
 		_s("Use original save/load screens"),
 		_s("Use the original save/load screens instead of the ScummVM ones"),
 		"originalsaveload",
-		false
+		false,
+		0,
+		0
 	},
 	{
 		_s("Enable font replacement"),
 		_s("Replaces game fonts with rendered fonts"),
 		"font_override",
-		false
+		false,
+		0,
+		0
 	},
 	{
 		_s("Enable font anti-aliasing"),
 		_s("When font anti-aliasing is enabled, the text is smoother."),
 		"font_antialiasing",
-		false
+		false,
+		0,
+		0
 	},
-	{ nullptr, nullptr, nullptr, false }
+	{ nullptr, nullptr, nullptr, false, 0, 0 }
 };
 
 static const ExtraGuiOption CAMERA_WITH_SILENCER = {
@@ -128,12 +148,14 @@ static const ExtraGuiOption CAMERA_WITH_SILENCER = {
 	_s("Camera moves with Silencer"),
 	_s("Camera tracks the player movement rather than snapping to defined positions."),
 	"camera_on_player",
-	true
+	true,
+	0,
+	0
 };
 
 static const ExtraGuiOption REMORSE_OPTIONS[] = {
 	CAMERA_WITH_SILENCER,
-	{ nullptr, nullptr, nullptr, false }
+	{ nullptr, nullptr, nullptr, false, 0, 0 }
 };
 
 static const ExtraGuiOption REGRET_OPTIONS[] = {
@@ -142,9 +164,11 @@ static const ExtraGuiOption REGRET_OPTIONS[] = {
 		_s("Always enable Christmas easter-egg"),
 		_s("Enable the Christmas music at any time of year."),
 		"always_christmas",
-		true
+		true,
+		0,
+		0
 	},
-	{ nullptr, nullptr, nullptr, false }
+	{ nullptr, nullptr, nullptr, false, 0, 0 }
 };
 
 } // End of namespace Ultima
diff --git a/engines/wintermute/detection.cpp b/engines/wintermute/detection.cpp
index c55aebcd28d..72444c8a42d 100644
--- a/engines/wintermute/detection.cpp
+++ b/engines/wintermute/detection.cpp
@@ -52,7 +52,9 @@ static const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Show FPS-counter"),
 			_s("Show the current number of frames per second in the upper left corner"),
 			"show_fps",
-			false
+			false,
+			0,
+			0
 		},
 	},
 
@@ -62,7 +64,9 @@ static const ADExtraGuiOptionsMap gameGuiOptions[] = {
 			_s("Sprite bilinear filtering (SLOW)"),
 			_s("Apply bilinear filtering to individual sprites"),
 			"bilinear_filtering",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/xeen/detection.cpp b/engines/xeen/detection.cpp
index bd9aa2fc231..09ac24a340f 100644
--- a/engines/xeen/detection.cpp
+++ b/engines/xeen/detection.cpp
@@ -55,7 +55,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Show item costs in standard inventory mode"),
 			_s("Shows item costs in standard inventory mode, allowing the value of items to be compared"),
 			"ShowItemCosts",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -65,7 +67,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("More durable armor"),
 			_s("Armor won't break until character is at -80HP, rather than merely -10HP"),
 			"DurableArmor",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
diff --git a/engines/zvision/detection_tables.h b/engines/zvision/detection_tables.h
index ac4001810ae..3f9711ad243 100644
--- a/engines/zvision/detection_tables.h
+++ b/engines/zvision/detection_tables.h
@@ -50,7 +50,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use original save/load screens"),
 			_s("Use the original save/load screens instead of the ScummVM ones"),
 			"originalsaveload",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -60,7 +62,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Double FPS"),
 			_s("Increase framerate from 30 to 60 FPS"),
 			"doublefps",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -70,7 +74,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Enable Venus"),
 			_s("Enable the Venus help system"),
 			"venusenabled",
-			true
+			true,
+			0,
+			0
 		}
 	},
 
@@ -80,7 +86,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Disable animation while turning"),
 			_s("Disable animation while turning in panorama mode"),
 			"noanimwhileturning",
-			false
+			false,
+			0,
+			0
 		}
 	},
 
@@ -90,7 +98,9 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			_s("Use high resolution MPEG video"),
 			_s("Use MPEG video from the DVD version instead of lower resolution AVI"),
 			"mpegmovies",
-			true
+			true,
+			0,
+			0
 		}
 	},
 




More information about the Scummvm-git-logs mailing list