[Scummvm-git-logs] scummvm master -> 0c6c59768e0735e6a18ed8c3dfa43dccbd1067ea

sev- noreply at scummvm.org
Sat Sep 2 08:55:58 UTC 2023


This automated email contains information about 17 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
f572c1b60c CRAB: Move noisy warning to debug
d8e1f78e46 CRAB: Implement missing functionality in MusicManager
f95ee46dda CRAB: Start implementing missing functionality in GeneralSettingsMenu
e0e5ac2305 CRAB: Fix bugs in slider.cpp
7a5e1f0d75 CRAB: Implement OptionMenu::handleTabs()
d1ce8e38e4 CRAB: Fix fps drop when opening OptionsMenu
2cd0d2018e CRAB: Fix unsigned/signed comparision warning in OptionMenu
1727750cbe CRAB: Allow greying out slider
d713ba5824 CRAB: Set brightness slider in GfxSettingsMenu to disabled
582f429cfc CRAB: STUB ScreenSettings::saveState()
43dc8f8a1d CRAB: Implement toggling of vsync and fullScreen from OptionMenu
fd1110d534 CRAB: Add more kemappings for UI elements
677367ec72 CRAB: Add and fix keymaps
86c27bf69a CRAB: Save action description to variable for later use in keybind menu
6c142050a6 CRAB: Implement stubbed out funcs in KeyBindMenu
8992eafdd6 CRAB: JANITORIAL: Code cleanup in KeyBindMenu.cpp
0c6c59768e CRAB: Save keymaps to disk when required


Commit: f572c1b60c204e2c434ffb54632af23a1137c420
    https://github.com/scummvm/scummvm/commit/f572c1b60c204e2c434ffb54632af23a1137c420
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Move noisy warning to debug

Changed paths:
    engines/crab/image/Image.h


diff --git a/engines/crab/image/Image.h b/engines/crab/image/Image.h
index f83bb6d1141..d7adadb79e4 100644
--- a/engines/crab/image/Image.h
+++ b/engines/crab/image/Image.h
@@ -84,7 +84,7 @@ public:
 #if 0
 		return SDL_SetTextureAlphaMod(texture, alpha);
 #endif
-		warning("Setting alpha modulation for texture: %d ", alpha);
+		debug(5, "Setting alpha modulation for texture: %d ", alpha);
 		return 0;
 	}
 


Commit: d8e1f78e460e3eee4cadd40bd27b2be0af9e3caa
    https://github.com/scummvm/scummvm/commit/d8e1f78e460e3eee4cadd40bd27b2be0af9e3caa
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Implement missing functionality in MusicManager

Changed paths:
    engines/crab/music/MusicManager.cpp
    engines/crab/music/MusicManager.h


diff --git a/engines/crab/music/MusicManager.cpp b/engines/crab/music/MusicManager.cpp
index 9a9bf8efb84..9ae77dd66e0 100644
--- a/engines/crab/music/MusicManager.cpp
+++ b/engines/crab/music/MusicManager.cpp
@@ -149,8 +149,20 @@ bool MusicManager::load(rapidxml::xml_node<char> *node) {
 	return true;
 }
 
-// Function is not needed as of now, keeping it incase its needed in future.
-void MusicManager::saveState(rapidxml::xml_document<> &doc, rapidxml::xml_node<char> *root) {
+void MusicManager::saveState() {
+	bool unmute = volEffects() > 0 || volMusic() > 0;
+
+	// set flag in case either value is greater than 0
+	if (ConfMan.hasKey("mute"))
+		ConfMan.setBool("mute", !unmute);
+
+	ConfMan.setInt("sfx_volume", volEffects());
+	ConfMan.setInt("music_volume", volMusic());
+
+	ConfMan.flushToDisk();
+
+	g_engine->syncSoundSettings();
+
 #if 0
 	rapidxml::xml_node<char> *child = doc.allocate_node(rapidxml::node_element, "sound");
 	child->append_attribute(doc.allocate_attribute("music", g_engine->_stringPool->Get(Mix_VolumeMusic(-1))));
diff --git a/engines/crab/music/MusicManager.h b/engines/crab/music/MusicManager.h
index dc4aa4eb5eb..463dcdef383 100644
--- a/engines/crab/music/MusicManager.h
+++ b/engines/crab/music/MusicManager.h
@@ -85,7 +85,9 @@ public:
 		g_system->getMixer()->stopAll();
 	}
 
-	static void volEffects(const int &volume) {
+	static void volEffects(const int &volume, const bool &unmute = false) {
+		if (unmute)
+			g_system->getMixer()->muteSoundType(Audio::Mixer::kSFXSoundType, false);
 		g_system->getMixer()->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, volume);
 	}
 
@@ -93,7 +95,9 @@ public:
 		return g_system->getMixer()->getVolumeForSoundType(Audio::Mixer::kSFXSoundType);
 	}
 
-	static void volMusic(const int &volume) {
+	static void volMusic(const int &volume, const bool &unmute = false) {
+		if (unmute)
+			g_system->getMixer()->muteSoundType(Audio::Mixer::kMusicSoundType, false);
 		g_system->getMixer()->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, volume);
 	}
 
@@ -101,7 +105,7 @@ public:
 		return g_system->getMixer()->getVolumeForSoundType(Audio::Mixer::kMusicSoundType);
 	}
 
-	void saveState(rapidxml::xml_document<> &doc, rapidxml::xml_node<char> *root);
+	void saveState();
 
 	void freeMusic();
 	void freeChunk();


Commit: f95ee46dda93c376b11d1bee38a95a929993f684
    https://github.com/scummvm/scummvm/commit/f95ee46dda93c376b11d1bee38a95a929993f684
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Start implementing missing functionality in GeneralSettingsMenu

Changed paths:
    engines/crab/ui/GeneralSettingMenu.cpp
    engines/crab/ui/GeneralSettingMenu.h


diff --git a/engines/crab/ui/GeneralSettingMenu.cpp b/engines/crab/ui/GeneralSettingMenu.cpp
index b4c65f648df..86ec994efe6 100644
--- a/engines/crab/ui/GeneralSettingMenu.cpp
+++ b/engines/crab/ui/GeneralSettingMenu.cpp
@@ -47,11 +47,19 @@ void GeneralSettingMenu::load(rapidxml::xml_node<char> *node) {
 		if (nodeValid("desc", musnode))
 			_noticeVolume.load(musnode->first_node("desc"));
 
-	//	if (nodeValid("music", musnode))
-	//		vol_music.load(musnode->first_node("music"), 0, MIX_MAX_VOLUME, g_engine->_musicManager->VolMusic());
-
-	//	if (nodeValid("effects", musnode))
-	//		vol_effects.load(musnode->first_node("effects"), 0, MIX_MAX_VOLUME, g_engine->_musicManager->VolEffects());
+		if (nodeValid("music", musnode)) {
+			int val = g_engine->_musicManager->volMusic();
+			if (ConfMan.hasKey("mute") && ConfMan.getBool("mute"))
+				val = 0;
+			_volMusic.load(musnode->first_node("music"), 0, 255, val);
+		}
+
+		if (nodeValid("effects", musnode)) {
+			int val = g_engine->_musicManager->volEffects();
+			if (ConfMan.hasKey("mute") && ConfMan.getBool("mute"))
+				val = 0;
+			_volEffects.load(musnode->first_node("effects"), 0, 255, val);
+		}
 	}
 
 	if (nodeValid("mouse_trap", node))
@@ -66,17 +74,24 @@ void GeneralSettingMenu::load(rapidxml::xml_node<char> *node) {
 	// Sync popup text value with actual value
 	for (auto &i : _textSpeed._element)
 		i._state = (i._val == g_engine->_screenSettings->_textSpeed);
+
+	setUI();
+	createBackup();
 }
 
 //------------------------------------------------------------------------
 // Purpose: Handle user input
 //------------------------------------------------------------------------
 void GeneralSettingMenu::handleEvents(const Common::Event &event) {
-	if (_volMusic.handleEvents(event))
-		g_engine->_musicManager->volMusic(_volMusic.Value());
+	if (_volMusic.handleEvents(event)) {
+		bool unmute = _volMusic.Value() > 0 && ConfMan.hasKey("mute") && ConfMan.getBool("mute");
+		g_engine->_musicManager->volMusic(_volMusic.Value(), unmute);
+	}
 
-	if (_volEffects.handleEvents(event))
-		g_engine->_musicManager->volEffects(_volEffects.Value());
+	if (_volEffects.handleEvents(event)) {
+		bool unmute = _volEffects.Value() > 0 && ConfMan.hasKey("mute") && ConfMan.getBool("mute");
+		g_engine->_musicManager->volEffects(_volEffects.Value(), unmute);
+	}
 
 	// No need to change screen here
 	if (_saveOnExit.handleEvents(event) != BUAC_IGNORE)
@@ -119,7 +134,7 @@ void GeneralSettingMenu::draw() {
 //------------------------------------------------------------------------
 // Purpose: Revert to previously backed up settings
 //------------------------------------------------------------------------
-void GeneralSettingMenu::RestoreBackup() {
+void GeneralSettingMenu::restoreBackup() {
 	_volMusic.restoreBackup();
 	g_engine->_musicManager->volMusic(_volMusic.Value());
 
diff --git a/engines/crab/ui/GeneralSettingMenu.h b/engines/crab/ui/GeneralSettingMenu.h
index be9d6d97b52..52464355874 100644
--- a/engines/crab/ui/GeneralSettingMenu.h
+++ b/engines/crab/ui/GeneralSettingMenu.h
@@ -63,12 +63,12 @@ public:
 	void draw();
 	void setUI();
 
-	void CreateBackup() {
+	void createBackup() {
 		_volMusic.createBackup();
 		_volEffects.createBackup();
 	}
 
-	void RestoreBackup();
+	void restoreBackup();
 };
 } // End of namespace ui
 } // End of namespace pyrodactyl


Commit: e0e5ac23056272927a74bf5c57b0bf6c5056b462
    https://github.com/scummvm/scummvm/commit/e0e5ac23056272927a74bf5c57b0bf6c5056b462
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Fix bugs in slider.cpp

Changed paths:
    engines/crab/ui/slider.cpp
    engines/crab/ui/slider.h


diff --git a/engines/crab/ui/slider.cpp b/engines/crab/ui/slider.cpp
index 0a406c00442..b6ee0c70f65 100644
--- a/engines/crab/ui/slider.cpp
+++ b/engines/crab/ui/slider.cpp
@@ -43,6 +43,7 @@ void Slider::load(rapidxml::xml_node<char> *node, const int &min, const int &max
 		_knob.load(node->first_node("knob"), false);
 		_bar.load(node->first_node("bar"));
 
+		_knob.x = _bar.x + ((_bar.w - _knob.w) * _value / (_max - _min));
 		_knob.y = _bar.y;
 		_knob.w = g_engine->_imageManager->getTexture(_knob._img._normal).w();
 		_knob.h = g_engine->_imageManager->getTexture(_knob._img._normal).h();
@@ -54,8 +55,6 @@ void Slider::load(rapidxml::xml_node<char> *node, const int &min, const int &max
 
 		_caption.load(node->first_node("caption"), &_bar);
 	}
-
-	createBackup();
 }
 
 bool Slider::handleEvents(const Common::Event &Event) {
diff --git a/engines/crab/ui/slider.h b/engines/crab/ui/slider.h
index 261bd06990c..5a78b6239da 100644
--- a/engines/crab/ui/slider.h
+++ b/engines/crab/ui/slider.h
@@ -80,6 +80,7 @@ public:
 
 	void restoreBackup() {
 		_value = _backup;
+		setUI();
 	}
 
 	void setUI();


Commit: 7a5e1f0d7569d6e5063402506f2db596cc8665ad
    https://github.com/scummvm/scummvm/commit/7a5e1f0d7569d6e5063402506f2db596cc8665ad
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Implement OptionMenu::handleTabs()

Changed paths:
    engines/crab/ui/OptionMenu.cpp


diff --git a/engines/crab/ui/OptionMenu.cpp b/engines/crab/ui/OptionMenu.cpp
index 5baeed0aab4..7f923c5e3ba 100644
--- a/engines/crab/ui/OptionMenu.cpp
+++ b/engines/crab/ui/OptionMenu.cpp
@@ -221,7 +221,52 @@ bool OptionMenu::handleEvents(Button &back, const Common::Event &event) {
 }
 
 bool OptionMenu::handleTabs(Button &back, const Common::Event &event) {
-	warning("STUB: OptionMenu::handleTabs()");
+	if (back.handleEvents(event) == BUAC_LCLICK) {
+		reset();
+		return true;
+	}
+
+	int choice = _menu.handleEvents(event);
+	if (choice >= 0) {
+		if (choice < 4)
+			for (uint i = 0; i < _menu._element.size(); ++i)
+				_menu._element[i].state(i == choice);
+
+		switch (choice) {
+		case 0:
+			_state = STATE_GENERAL;
+			break;
+		case 1:
+			_state = STATE_GRAPHICS;
+			break;
+		case 2:
+			_state = STATE_KEYBOARD;
+			break;
+		case 3:
+			_state = STATE_CONTROLLER;
+			break;
+
+		case 4:
+			// Save settings to file
+			//g_engine->_inputManager->Save();
+			g_engine->_musicManager->saveState();
+			saveState();
+			//general.CreateBackup();
+			//g_engine->_screenSettings->CreateBackup();
+			return true;
+
+		case 5:
+			// Revert all changes made to settings and exit
+			//g_engine->_inputManager->RestoreBackup();
+			//keybind.SetCaption();
+			//g_engine->_screenSettings->RestoreBackup();
+			_general.restoreBackup();
+			_general.setUI();
+			return true;
+		default:
+			break;
+		}
+	}
 
 	return false;
 }


Commit: d1ce8e38e4c67b23dc2009a11281086928fa53b4
    https://github.com/scummvm/scummvm/commit/d1ce8e38e4c67b23dc2009a11281086928fa53b4
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Fix fps drop when opening OptionsMenu

Changed paths:
    engines/crab/ui/OptionMenu.cpp


diff --git a/engines/crab/ui/OptionMenu.cpp b/engines/crab/ui/OptionMenu.cpp
index 7f923c5e3ba..6e989791404 100644
--- a/engines/crab/ui/OptionMenu.cpp
+++ b/engines/crab/ui/OptionMenu.cpp
@@ -152,8 +152,6 @@ void OptionMenu::draw(Button &back) {
 
 bool OptionMenu::handleEvents(Button &back, const Common::Event &event) {
 	if (_state < STATE_ENTER_W) {
-		_bg.draw();
-
 		switch (_state) {
 		case STATE_GENERAL:
 			_general.handleEvents(event);


Commit: 2cd0d2018ec9348bdf93bec7543b2ec04475ccc0
    https://github.com/scummvm/scummvm/commit/2cd0d2018ec9348bdf93bec7543b2ec04475ccc0
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Fix unsigned/signed comparision warning in OptionMenu

Changed paths:
    engines/crab/ui/OptionMenu.cpp


diff --git a/engines/crab/ui/OptionMenu.cpp b/engines/crab/ui/OptionMenu.cpp
index 6e989791404..125c4e7b578 100644
--- a/engines/crab/ui/OptionMenu.cpp
+++ b/engines/crab/ui/OptionMenu.cpp
@@ -227,7 +227,7 @@ bool OptionMenu::handleTabs(Button &back, const Common::Event &event) {
 	int choice = _menu.handleEvents(event);
 	if (choice >= 0) {
 		if (choice < 4)
-			for (uint i = 0; i < _menu._element.size(); ++i)
+			for (int i = 0; i < (int)_menu._element.size(); ++i)
 				_menu._element[i].state(i == choice);
 
 		switch (choice) {


Commit: 1727750cbe58b78cde3389d8d2acf290fd9268c2
    https://github.com/scummvm/scummvm/commit/1727750cbe58b78cde3389d8d2acf290fd9268c2
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Allow greying out slider

Changed paths:
    engines/crab/ui/slider.cpp
    engines/crab/ui/slider.h


diff --git a/engines/crab/ui/slider.cpp b/engines/crab/ui/slider.cpp
index b6ee0c70f65..266b83947a8 100644
--- a/engines/crab/ui/slider.cpp
+++ b/engines/crab/ui/slider.cpp
@@ -28,6 +28,7 @@
  *
  */
 
+#include "graphics/screen.h"
 #include "crab/crab.h"
 #include "crab/input/cursor.h"
 #include "crab/ui/slider.h"
@@ -58,6 +59,9 @@ void Slider::load(rapidxml::xml_node<char> *node, const int &min, const int &max
 }
 
 bool Slider::handleEvents(const Common::Event &Event) {
+	if (_isGreyed) // do not entertain events when greyed is set
+		return false;
+
 	// A person is moving the knob
 	if (_knob.handleEvents(Event) == BUAC_GRABBED) {
 		int dx = g_engine->_mouse->_motion.x - _bar.x;
@@ -91,6 +95,36 @@ void Slider::draw() {
 	_bar.draw();
 	_caption.draw(false);
 	_knob.draw();
+	greyOut();
+}
+
+// This function only works when slider is drawn over the textured background in Unrest
+// Constants have been found by hit and trial
+void Slider::greyOut() {
+	if (!_isGreyed)
+		return;
+
+	int w = _bar.w + _bar.x - _caption.x;
+	int h = _knob.h > _caption.h ? _knob.h : _caption.h;
+
+	byte a, r, g, b;
+	for (int y = _caption.y; y < _caption.y + h; y++) {
+		uint32 *ptr = (uint32 *)g_engine->_screen->getBasePtr(_caption.x, y);
+		for (int x = 0; x < w; x++, ptr++) {
+			g_engine->_format->colorToARGB(*ptr, a, r, g, b);
+			if (x >= _knob.x - _caption.x && x <= _knob.w + _knob.x - _caption.x) {
+				r /= 3;
+				g /= 3;
+				b /= 2;
+				*ptr = g_engine->_format->ARGBToColor(a, r, g, b);
+			} else if (g > 0x37) {
+				r >>= 1;
+				g >>= 1;
+				b >>= 1;
+				*ptr = g_engine->_format->ARGBToColor(a, r, g, b);
+			}
+		}
+	}
 }
 
 void Slider::value(const int val) {
diff --git a/engines/crab/ui/slider.h b/engines/crab/ui/slider.h
index 5a78b6239da..2628053f6a1 100644
--- a/engines/crab/ui/slider.h
+++ b/engines/crab/ui/slider.h
@@ -55,12 +55,16 @@ class Slider {
 	// The maximum and minimum values for the slider
 	int _max, _min;
 
+	// Grey out?
+	bool _isGreyed;
+
 public:
 	Slider() {
 		_max = 100;
 		_min = 0;
 		_value = ((_max - _min) / 2);
 		_backup = _value;
+		_isGreyed = false;
 	}
 
 	~Slider() {}
@@ -83,6 +87,12 @@ public:
 		setUI();
 	}
 
+	void setEnabled(bool enabled) {
+		_isGreyed = !enabled;
+	}
+
+	void greyOut();
+
 	void setUI();
 };
 } // End of namespace ui


Commit: d713ba5824d79da10a41d41445194b5b0a1cb2dc
    https://github.com/scummvm/scummvm/commit/d713ba5824d79da10a41d41445194b5b0a1cb2dc
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Set brightness slider in GfxSettingsMenu to disabled

Changed paths:
    engines/crab/ui/GfxSettingMenu.cpp


diff --git a/engines/crab/ui/GfxSettingMenu.cpp b/engines/crab/ui/GfxSettingMenu.cpp
index 90690967e15..5084829f488 100644
--- a/engines/crab/ui/GfxSettingMenu.cpp
+++ b/engines/crab/ui/GfxSettingMenu.cpp
@@ -61,6 +61,9 @@ void GfxSettingMenu::load(rapidxml::xml_node<char> *node) {
 
 	if (nodeValid("brightness", node))
 		_brightness.load(node->first_node("brightness"), 0, 100, g_engine->_screenSettings->_gamma * 100);
+
+	// This functionality has been disabled in ScummVM.
+	_brightness.setEnabled(false);
 }
 
 //------------------------------------------------------------------------


Commit: 582f429cfcb5cd7c17edb9efeaada330e2152099
    https://github.com/scummvm/scummvm/commit/582f429cfcb5cd7c17edb9efeaada330e2152099
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: STUB ScreenSettings::saveState()

Changed paths:
    engines/crab/ScreenSettings.cpp
    engines/crab/ScreenSettings.h


diff --git a/engines/crab/ScreenSettings.cpp b/engines/crab/ScreenSettings.cpp
index 79de7e4b312..303aff63394 100644
--- a/engines/crab/ScreenSettings.cpp
+++ b/engines/crab/ScreenSettings.cpp
@@ -50,7 +50,8 @@ void ScreenSettings::load(rapidxml::xml_node<char> *node) {
 	loadBool(_quality, "quality", node);
 }
 
-void ScreenSettings::saveState(rapidxml::xml_document<> &doc, rapidxml::xml_node<char> *root) {
+void ScreenSettings::saveState() {
+#if 0
 	root->append_attribute(doc.allocate_attribute("version", g_engine->_stringPool->get(_version)));
 
 	rapidxml::xml_node<char> *child = doc.allocate_node(rapidxml::node_element, "screen");
@@ -69,6 +70,7 @@ void ScreenSettings::saveState(rapidxml::xml_document<> &doc, rapidxml::xml_node
 	saveBool(_mouseTrap, "mouse_trap", doc, child);
 
 	root->append_node(child);
+#endif
 }
 
 } // End of namespace Crab
diff --git a/engines/crab/ScreenSettings.h b/engines/crab/ScreenSettings.h
index 40c3b399566..64f4738bb8d 100644
--- a/engines/crab/ScreenSettings.h
+++ b/engines/crab/ScreenSettings.h
@@ -126,7 +126,7 @@ public:
 	}
 
 	void load(rapidxml::xml_node<char> *node);
-	void saveState(rapidxml::xml_document<> &doc, rapidxml::xml_node<char> *root);
+	void saveState();
 };
 
 }


Commit: 43dc8f8a1df6cc0220951521491174dde14dd7b8
    https://github.com/scummvm/scummvm/commit/43dc8f8a1df6cc0220951521491174dde14dd7b8
Author: hax0kartik (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Implement toggling of vsync and fullScreen from OptionMenu

Changed paths:
    engines/crab/ScreenSettings.cpp
    engines/crab/ScreenSettings.h
    engines/crab/ui/GfxSettingMenu.cpp
    engines/crab/ui/OptionMenu.cpp


diff --git a/engines/crab/ScreenSettings.cpp b/engines/crab/ScreenSettings.cpp
index 303aff63394..b842c15cb10 100644
--- a/engines/crab/ScreenSettings.cpp
+++ b/engines/crab/ScreenSettings.cpp
@@ -28,6 +28,8 @@
  *
  */
 
+#include "common/config-manager.h"
+#include "common/system.h"
 #include "crab/crab.h"
 #include "crab/GameParam.h"
 #include "crab/loaders.h"
@@ -42,15 +44,43 @@ void ScreenSettings::load(rapidxml::xml_node<char> *node) {
 	loadNum(_gamma, "gamma", node);
 	loadNum(_textSpeed, "text_speed", node);
 
-	loadBool(_vsync, "vsync", node);
+	// The following values are read from ConfMan instead of the XML
+	//loadBool(_vsync, "vsync", node);
+	//loadBool(_fullscreen, "fullscreen", node);
 	loadBool(_border, "border", node);
-	loadBool(_fullscreen, "fullscreen", node);
 	loadBool(_saveOnExit, "save_on_exit", node);
 	loadBool(_mouseTrap, "mouse_trap", node);
 	loadBool(_quality, "quality", node);
+
+	if (ConfMan.hasKey("fullscreen"))
+		_fullscreen = ConfMan.getBool("fullscreen");
+
+	if (ConfMan.hasKey("vsync"))
+		_vsync = ConfMan.getBool("vsync");
+}
+
+void ScreenSettings::toggleFullScreen() {
+	if (g_system->hasFeature(OSystem::kFeatureFullscreenMode)) {
+		_fullscreen = !_fullscreen;
+		g_system->beginGFXTransaction();
+			g_system->setFeatureState(OSystem::kFeatureFullscreenMode, _fullscreen);
+		g_system->endGFXTransaction();
+	}
+}
+
+void ScreenSettings::toggleVsync() {
+	if (g_system->hasFeature(OSystem::kFeatureVSync)) {
+		_vsync = !_vsync;
+		g_system->beginGFXTransaction();
+			g_system->setFeatureState(OSystem::kFeatureVSync, _vsync);
+		g_system->endGFXTransaction();
+	}
 }
 
 void ScreenSettings::saveState() {
+	ConfMan.setBool("fullscreen", _fullscreen);
+	ConfMan.setBool("vsync", _vsync);
+
 #if 0
 	root->append_attribute(doc.allocate_attribute("version", g_engine->_stringPool->get(_version)));
 
diff --git a/engines/crab/ScreenSettings.h b/engines/crab/ScreenSettings.h
index 64f4738bb8d..e799898f533 100644
--- a/engines/crab/ScreenSettings.h
+++ b/engines/crab/ScreenSettings.h
@@ -126,6 +126,10 @@ public:
 	}
 
 	void load(rapidxml::xml_node<char> *node);
+
+	void toggleFullScreen();
+	void toggleVsync();
+
 	void saveState();
 };
 
diff --git a/engines/crab/ui/GfxSettingMenu.cpp b/engines/crab/ui/GfxSettingMenu.cpp
index 5084829f488..08160c1e793 100644
--- a/engines/crab/ui/GfxSettingMenu.cpp
+++ b/engines/crab/ui/GfxSettingMenu.cpp
@@ -94,15 +94,11 @@ void GfxSettingMenu::draw() {
 // Purpose: Handle input
 //------------------------------------------------------------------------
 int GfxSettingMenu::handleEvents(const Common::Event &event) {
-	if (_fullscreen.handleEvents(event) != BUAC_IGNORE) {
-		// Setting video flags is necessary when toggling fullscreen
-		g_engine->_screenSettings->_fullscreen = !g_engine->_screenSettings->_fullscreen;
-	}
+	if (_fullscreen.handleEvents(event) != BUAC_IGNORE)
+		g_engine->_screenSettings->toggleFullScreen();
 
-	// Vsync doesn't need to set the change value
-	if (_vsync.handleEvents(event) != BUAC_IGNORE) {
-		g_engine->_screenSettings->_vsync = !g_engine->_screenSettings->_vsync;
-	}
+	if (_vsync.handleEvents(event) != BUAC_IGNORE)
+		g_engine->_screenSettings->toggleVsync();
 
 	// Quality and resolution can only be changed in the main menu
 	if (!g_engine->_screenSettings->_inGame) {
diff --git a/engines/crab/ui/OptionMenu.cpp b/engines/crab/ui/OptionMenu.cpp
index 125c4e7b578..29369e7b65e 100644
--- a/engines/crab/ui/OptionMenu.cpp
+++ b/engines/crab/ui/OptionMenu.cpp
@@ -247,6 +247,7 @@ bool OptionMenu::handleTabs(Button &back, const Common::Event &event) {
 		case 4:
 			// Save settings to file
 			//g_engine->_inputManager->Save();
+			g_engine->_screenSettings->saveState();
 			g_engine->_musicManager->saveState();
 			saveState();
 			//general.CreateBackup();


Commit: fd1110d53453291fe39c5080d6d2a02771764f7c
    https://github.com/scummvm/scummvm/commit/fd1110d53453291fe39c5080d6d2a02771764f7c
Author: Kartik Agarwala (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Add more kemappings for UI elements

Changed paths:
    engines/crab/input/input.cpp


diff --git a/engines/crab/input/input.cpp b/engines/crab/input/input.cpp
index 71c907e13cc..0477ae6450e 100644
--- a/engines/crab/input/input.cpp
+++ b/engines/crab/input/input.cpp
@@ -161,6 +161,22 @@ Common::Keymap* InputManager::getDefaultKeyMapsForUI() {
 	act->addDefaultInputMapping("JOY_A");
 	uiKeymap->addAction(act);
 
+	act = new Action("UI_BACK", _("Back"));
+	act->setCustomEngineActionEvent(IU_BACK);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("JOY_B");
+	uiKeymap->addAction(act);
+
+	act = new Action("UI_NEXT", _("Next"));
+	act->setCustomEngineActionEvent(IU_NEXT);
+	act->addDefaultInputMapping("TAB");
+	uiKeymap->addAction(act);
+
+	act = new Action("UI_PREV", _("Previous"));
+	act->setCustomEngineActionEvent(IU_PREV);
+	act->addDefaultInputMapping("r");
+	uiKeymap->addAction(act);
+
 	act = new Action("REPLY1", _("Reply 1"));
 	act->setCustomEngineActionEvent(IU_REPLY_0);
 	act->addDefaultInputMapping("1");
@@ -191,6 +207,16 @@ Common::Keymap* InputManager::getDefaultKeyMapsForUI() {
 	act->addDefaultInputMapping("6");
 	uiKeymap->addAction(act);
 
+	act = new Action("NEXTPAGE", _("Next Page"));
+	act->setCustomEngineActionEvent(IU_PAGE_NEXT);
+	act->addDefaultInputMapping(".");
+	uiKeymap->addAction(act);
+
+	act = new Action("PREVPAGE", _("Previous Page"));
+	act->setCustomEngineActionEvent(IU_PAGE_PREV);
+	act->addDefaultInputMapping(",");
+	uiKeymap->addAction(act);
+
 	return uiKeymap;
 }
 


Commit: 677367ec7227a3e2067c00c41e1fcf37605c136d
    https://github.com/scummvm/scummvm/commit/677367ec7227a3e2067c00c41e1fcf37605c136d
Author: Kartik Agarwala (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Add and fix keymaps

Changed paths:
    engines/crab/input/input.cpp


diff --git a/engines/crab/input/input.cpp b/engines/crab/input/input.cpp
index 0477ae6450e..515b33d52be 100644
--- a/engines/crab/input/input.cpp
+++ b/engines/crab/input/input.cpp
@@ -121,6 +121,16 @@ Common::Keymap* InputManager::getDefaultKeyMapsForGame() {
 	act->addDefaultInputMapping("JOY_A");
 	keymap->addAction(act);
 
+	act = new Action("ATTACK", _("Attack"));
+	act->setCustomEngineActionEvent(IG_ATTACK);
+	act->addDefaultInputMapping("z");
+	keymap->addAction(act);
+
+	act = new Action("BLOCK", _("Block"));
+	act->setCustomEngineActionEvent(IG_BLOCK);
+	act->addDefaultInputMapping("x");
+	keymap->addAction(act);
+
 	return keymap;
 }
 
@@ -209,12 +219,12 @@ Common::Keymap* InputManager::getDefaultKeyMapsForUI() {
 
 	act = new Action("NEXTPAGE", _("Next Page"));
 	act->setCustomEngineActionEvent(IU_PAGE_NEXT);
-	act->addDefaultInputMapping(".");
+	act->addDefaultInputMapping("PERIOD");
 	uiKeymap->addAction(act);
 
 	act = new Action("PREVPAGE", _("Previous Page"));
 	act->setCustomEngineActionEvent(IU_PAGE_PREV);
-	act->addDefaultInputMapping(",");
+	act->addDefaultInputMapping("COMMA");
 	uiKeymap->addAction(act);
 
 	return uiKeymap;
@@ -247,6 +257,21 @@ Common::Keymap* InputManager::getDefaultKeyMapsForHUD() {
 	act->addDefaultInputMapping("t");
 	hudKeymap->addAction(act);
 
+	act = new Action("PAUSE", _("Pause"));
+	act->setCustomEngineActionEvent(IG_PAUSE);
+	act->addDefaultInputMapping("p");
+	hudKeymap->addAction(act);
+
+	act = new Action("QUICKSAVE", _("Quick Save"));
+	act->setCustomEngineActionEvent(IG_QUICKSAVE);
+	act->addDefaultInputMapping("F5");
+	hudKeymap->addAction(act);
+
+	act = new Action("QUICKLOAD", _("Quick Load"));
+	act->setCustomEngineActionEvent(IG_QUICKLOAD);
+	act->addDefaultInputMapping("F9");
+	hudKeymap->addAction(act);
+
 	return hudKeymap;
 }
 


Commit: 86c27bf69a1d407f9fc132246a6c5da090851875
    https://github.com/scummvm/scummvm/commit/86c27bf69a1d407f9fc132246a6c5da090851875
Author: Kartik Agarwala (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Save action description to variable for later use in keybind menu

Changed paths:
    engines/crab/input/input.cpp


diff --git a/engines/crab/input/input.cpp b/engines/crab/input/input.cpp
index 515b33d52be..752b727182c 100644
--- a/engines/crab/input/input.cpp
+++ b/engines/crab/input/input.cpp
@@ -76,6 +76,7 @@ Common::String InputManager::getAssociatedKey(const InputType &type) {
 			if ((int)action->event.customType == type) {
 				_keyDescs[type] = Common::String(keymap->getActionMapping(action)[0].description);
 				_keyDescs[type].toUppercase();
+				_iv[type] = Common::String(action->description);
 				break;
 			}
 		}


Commit: 6c142050a66ab027534b61f7653c1bb190200a18
    https://github.com/scummvm/scummvm/commit/6c142050a66ab027534b61f7653c1bb190200a18
Author: Kartik Agarwala (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Implement stubbed out funcs in KeyBindMenu

Changed paths:
    engines/crab/ui/KeyBindMenu.cpp
    engines/crab/ui/KeyBindMenu.h


diff --git a/engines/crab/ui/KeyBindMenu.cpp b/engines/crab/ui/KeyBindMenu.cpp
index 682a5679226..4bd8183651c 100644
--- a/engines/crab/ui/KeyBindMenu.cpp
+++ b/engines/crab/ui/KeyBindMenu.cpp
@@ -90,25 +90,21 @@ void KeyBindMenu::startAndSize(const int &type, int &start, int &size) {
 }
 
 void KeyBindMenu::initMenu(const int &type) {
-	warning("STUB: KeyBindMenu::initMenu()");
-
-#if 0
 	int start = 0, size = 0;
-	StartAndSize(type, start, size);
+	startAndSize(type, start, size);
 
 	// Initialize the menu
-	menu[type].element.resize(size * 2);
-	for (int i = 0; i < size * 2; i += 2) {
-		int xoffset = inc.x * (i / 2) + divide.x * ((i / 2) / dim.x);
-		int yoffset = inc.y * ((i / 2) % dim.x) + divide.y * ((i / 2) / dim.x);
+	_menu[type]._element.resize(size);
+	for (int i = 0; i < size; i++) {
+		int xoffset = _inc.x * i + _divide.x * (i / _dim.x);
+		int yoffset = _inc.y * (i % _dim.x) + _divide.y * (i / _dim.x);
 
-		menu[type].element[i].Init(prim, xoffset, yoffset);
-		menu[type].element[i].caption.text = SDL_GetScancodeName(g_engine->_inputManager->iv[start + (i / 2)].key);
+		_menu[type]._element[i].init(_prim, xoffset, yoffset);
+		_menu[type]._element[i]._caption._text = g_engine->_inputManager->getAssociatedKey((InputType)(start + i));
 
-		menu[type].element[i + 1].Init(alt, xoffset, yoffset);
-		menu[type].element[i + 1].caption.text = SDL_GetScancodeName(g_engine->_inputManager->iv[start + (i / 2)].alt);
+		//_menu[type]._element[i + 1].init(_alt, xoffset, yoffset);
+		//_menu[type]._element[i + 1]._caption._text = SDL_GetScancodeName(g_engine->_inputManager->iv[start + (i / 2)].alt);
 	}
-#endif
 }
 
 void KeyBindMenu::drawDesc(const int &type) {
@@ -131,48 +127,68 @@ void KeyBindMenu::draw() {
 }
 
 void KeyBindMenu::setCaption() {
-	warning("STUB: KeyBindMenu::setCaption()");
-
-#if 0
 	int start = 0, size = 0;
-	StartAndSize(sel_controls.cur, start, size);
+	startAndSize(_selControls._cur, start, size);
 
-	for (int i = 0; i < size * 2; i += 2) {
-		menu[sel_controls.cur].element[i].caption.text = SDL_GetScancodeName(g_engine->_inputManager->iv[start + (i / 2)].key);
-		menu[sel_controls.cur].element[i + 1].caption.text = SDL_GetScancodeName(g_engine->_inputManager->iv[start + (i / 2)].alt);
-	}
-#endif
+	for (int i = 0; i < size; i++)
+		_menu[_selControls._cur]._element[i]._caption._text = g_engine->_inputManager->getAssociatedKey((InputType)(start + i));
 }
 
 void KeyBindMenu::handleEvents(const Common::Event &event) {
-	warning("STUB: KeyBindMenu::handleEvents()");
+	if (_selControls.handleEvents(event))
+		setCaption();
 
-	/*
-	if (sel_controls.handleEvents(Event))
-		SetCaption();
-
-	switch (state) {
+	switch (_state) {
 	case STATE_NORMAL:
-		choice = menu[sel_controls.cur].handleEvents(Event);
-		if (choice >= 0) {
-			prompt.Swap(menu[sel_controls.cur].element[choice].caption);
-			state = STATE_KEY;
+		_choice = _menu[_selControls._cur].handleEvents(event);
+		if (_choice >= 0) {
+			_prompt.swap(_menu[_selControls._cur]._element[_choice]._caption);
+			_state = STATE_KEY;
+			g_system->getEventManager()->getKeymapper()->setEnabled(false);
 			break;
 		}
 
 		break;
 	case STATE_KEY:
-		if (Event.type == SDL_KEYDOWN) {
-			SwapKey(Event.key.keysym.scancode);
-			SetCaption();
-			menu[sel_controls.cur].element[choice].caption.col = prompt.col_prev;
-			state = STATE_NORMAL;
+		if (setKey(event)) { // if key remapped successfully
+			g_engine->_inputManager->populateKeyTable(); // repopulate key table
+			g_system->getEventManager()->getKeymapper()->setEnabled(true);
+
+			setCaption();
+			_menu[_selControls._cur]._element[_choice]._caption._col = _prompt._colPrev;
+			_state = STATE_NORMAL;
 		}
+
 		break;
 	default:
 		break;
 	}
-	*/
+}
+
+bool KeyBindMenu::setKey(const Common::Event &event) {
+	Common::HardwareInput hwInput = g_system->getEventManager()->getKeymapper()->findHardwareInput(event);
+	if (hwInput.type != Common::kHardwareInputTypeInvalid) {
+		int ch = _choice;
+		if (_selControls._cur == CON_UI)
+			ch += IG_SIZE;
+
+		Common::KeymapArray keymapArr = g_system->getEventManager()->getKeymapper()->getKeymaps();
+		for (Common::Keymap *keymap : keymapArr) {
+			if (keymap->getType() != Common::Keymap::kKeymapTypeGame)
+				continue;
+
+			const Common::Keymap::ActionArray actions = keymap->getActions();
+			for (Common::Action *action : actions) {
+				if ((int)action->event.customType == ch) {
+					keymap->unregisterMapping(action);
+					keymap->registerMapping(action, hwInput);
+					return true;
+				}
+			}
+		}
+	}
+
+	return false;
 }
 
 #if 0
diff --git a/engines/crab/ui/KeyBindMenu.h b/engines/crab/ui/KeyBindMenu.h
index 3d59e257902..5955b194547 100644
--- a/engines/crab/ui/KeyBindMenu.h
+++ b/engines/crab/ui/KeyBindMenu.h
@@ -42,7 +42,7 @@ namespace ui {
 class KeyBindMenu {
 	// The keyboard controls menu has 2 types of inputs
 	enum Controls {
-		CON_GAME,
+		CON_GAME = 0,
 		CON_UI,
 		CON_TOTAL
 	};
@@ -92,7 +92,7 @@ class KeyBindMenu {
 			}
 		}
 
-		void Swap(Caption &c) {
+		void swap(Caption &c) {
 			_colPrev = c._col;
 			c._text = _text;
 			c._col = _col;
@@ -124,6 +124,8 @@ public:
 
 	void setCaption();
 
+	bool setKey(const Common::Event &event);
+
 	void draw();
 	void setUI();
 };


Commit: 8992eafdd609b12929dbbef075009e51dd498e5c
    https://github.com/scummvm/scummvm/commit/8992eafdd609b12929dbbef075009e51dd498e5c
Author: Kartik Agarwala (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: JANITORIAL: Code cleanup in KeyBindMenu.cpp

Changed paths:
    engines/crab/ui/KeyBindMenu.cpp


diff --git a/engines/crab/ui/KeyBindMenu.cpp b/engines/crab/ui/KeyBindMenu.cpp
index 4bd8183651c..4b06e70c08b 100644
--- a/engines/crab/ui/KeyBindMenu.cpp
+++ b/engines/crab/ui/KeyBindMenu.cpp
@@ -192,33 +192,6 @@ bool KeyBindMenu::setKey(const Common::Event &event) {
 }
 
 #if 0
-void KeyBindMenu::handleEvents(const SDL_Event &Event) {
-	if (sel_controls.handleEvents(Event))
-		SetCaption();
-
-	switch (state) {
-	case STATE_NORMAL:
-		choice = menu[sel_controls.cur].handleEvents(Event);
-		if (choice >= 0) {
-			prompt.Swap(menu[sel_controls.cur].element[choice].caption);
-			state = STATE_KEY;
-			break;
-		}
-
-		break;
-	case STATE_KEY:
-		if (Event.type == SDL_KEYDOWN) {
-			SwapKey(Event.key.keysym.scancode);
-			SetCaption();
-			menu[sel_controls.cur].element[choice].caption.col = prompt.col_prev;
-			state = STATE_NORMAL;
-		}
-		break;
-	default:
-		break;
-	}
-}
-
 void KeyBindMenu::SwapKey(const SDL_Scancode &find) {
 	int start = 0, size = 0;
 	StartAndSize(sel_controls.cur, start, size);


Commit: 0c6c59768e0735e6a18ed8c3dfa43dccbd1067ea
    https://github.com/scummvm/scummvm/commit/0c6c59768e0735e6a18ed8c3dfa43dccbd1067ea
Author: Kartik Agarwala (agarwala.kartik at gmail.com)
Date: 2023-09-02T10:55:47+02:00

Commit Message:
CRAB: Save keymaps to disk when required

Changed paths:
    engines/crab/input/input.cpp
    engines/crab/input/input.h
    engines/crab/ui/OptionMenu.cpp


diff --git a/engines/crab/input/input.cpp b/engines/crab/input/input.cpp
index 752b727182c..22441c99ced 100644
--- a/engines/crab/input/input.cpp
+++ b/engines/crab/input/input.cpp
@@ -298,4 +298,16 @@ void InputManager::setKeyBindingMode(KeyBindingMode mode) {
 	clearInputs();
 }
 
+void InputManager::save() {
+	Common::KeymapArray keymapArr = g_system->getEventManager()->getKeymapper()->getKeymaps();
+	for(Common::Keymap *keymap : keymapArr) {
+		if (keymap->getType() != Common::Keymap::kKeymapTypeGame)
+			continue;
+
+		keymap->saveMappings();
+	}
+
+	ConfMan.flushToDisk();
+}
+
 } // End of namespace Crab
diff --git a/engines/crab/input/input.h b/engines/crab/input/input.h
index cf03d73455c..9983516ccdb 100644
--- a/engines/crab/input/input.h
+++ b/engines/crab/input/input.h
@@ -139,6 +139,9 @@ public:
 	bool state(const InputType &val);
 
 	Common::String getAssociatedKey(const InputType &type);
+
+	// Save and flush the keymaps to disk
+	void save();
 };
 
 } // End of namespace input
diff --git a/engines/crab/ui/OptionMenu.cpp b/engines/crab/ui/OptionMenu.cpp
index 29369e7b65e..8d931192b4b 100644
--- a/engines/crab/ui/OptionMenu.cpp
+++ b/engines/crab/ui/OptionMenu.cpp
@@ -246,7 +246,7 @@ bool OptionMenu::handleTabs(Button &back, const Common::Event &event) {
 
 		case 4:
 			// Save settings to file
-			//g_engine->_inputManager->Save();
+			g_engine->_inputManager->save();
 			g_engine->_screenSettings->saveState();
 			g_engine->_musicManager->saveState();
 			saveState();




More information about the Scummvm-git-logs mailing list