[Scummvm-git-logs] scummvm master -> 39bb5084070962e8a045d41bd0a13c8997519e01

yuv422 noreply at scummvm.org
Tue Nov 19 11:24:37 UTC 2024


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:
39bb508407 DARKSEED: Wire up actions in menu.


Commit: 39bb5084070962e8a045d41bd0a13c8997519e01
    https://github.com/scummvm/scummvm/commit/39bb5084070962e8a045d41bd0a13c8997519e01
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2024-11-19T22:22:38+11:00

Commit Message:
DARKSEED: Wire up actions in menu.

Changed paths:
    engines/darkseed/console.cpp
    engines/darkseed/console.h
    engines/darkseed/darkseed.cpp
    engines/darkseed/darkseed.h
    engines/darkseed/menu.cpp
    engines/darkseed/sound.cpp
    engines/darkseed/sound.h


diff --git a/engines/darkseed/console.cpp b/engines/darkseed/console.cpp
index 0b08cbed82c..bbe9b715d22 100644
--- a/engines/darkseed/console.cpp
+++ b/engines/darkseed/console.cpp
@@ -56,8 +56,8 @@ void Console::addToCurrentLine(const Common::String &text) {
 	addTextLine(_text[_startIdx] + text);
 }
 
-void Console::draw() {
-	if (!_redrawRequired) {
+void Console::draw(bool forceRedraw) {
+	if (!_redrawRequired && !forceRedraw) {
 		return;
 	}
 
diff --git a/engines/darkseed/console.h b/engines/darkseed/console.h
index bd5524d279f..432057d7965 100644
--- a/engines/darkseed/console.h
+++ b/engines/darkseed/console.h
@@ -45,7 +45,7 @@ public:
 	void addTextLine(const Common::String &text);
 	void addToCurrentLine(const Common::String &text);
 
-	void draw();
+	void draw(bool forceRedraw = false);
 	void drawStringAt(int x, int y, const Common::String &text) const;
 
 private:
diff --git a/engines/darkseed/darkseed.cpp b/engines/darkseed/darkseed.cpp
index 4e8ac609294..ff7219eaaa0 100644
--- a/engines/darkseed/darkseed.cpp
+++ b/engines/darkseed/darkseed.cpp
@@ -367,6 +367,7 @@ void DarkseedEngine::updateEvents() {
 			if (event.kbd.keycode == Common::KEYCODE_t) {
 				_timeAdvanceEventSelected = true;
 			}
+			_lastKeyPressed = event.kbd.keycode;
 			break;
 		default:
 			break;
@@ -652,6 +653,7 @@ void DarkseedEngine::handleInput() {
 	}
 	if (_isLeftMouseClicked && _cursor.getY() < 41) {
 		_inventory.handleClick();
+		return;
 	}
 	_room->calculateScaledSpriteDimensions(_player->getWidth(), _player->getHeight(), _player->_position.y);
 
diff --git a/engines/darkseed/darkseed.h b/engines/darkseed/darkseed.h
index e5af69c7183..dbc1614d6e7 100644
--- a/engines/darkseed/darkseed.h
+++ b/engines/darkseed/darkseed.h
@@ -29,6 +29,7 @@
 #include "common/random.h"
 #include "common/serializer.h"
 #include "common/util.h"
+#include "common/keyboard.h"
 #include "engines/engine.h"
 #include "graphics/screen.h"
 
@@ -90,6 +91,7 @@ public:
 	bool _ct_voice_status = false;
 	bool _isRightMouseClicked = false;
 	bool _isLeftMouseClicked = false;
+	Common::KeyCode _lastKeyPressed = Common::KeyCode::KEYCODE_INVALID;
 
 	Sound *_sound = nullptr;
 	Nsp _baseSprites;
diff --git a/engines/darkseed/menu.cpp b/engines/darkseed/menu.cpp
index 983f1bff84a..475b155ee61 100644
--- a/engines/darkseed/menu.cpp
+++ b/engines/darkseed/menu.cpp
@@ -19,23 +19,33 @@
 *
 */
 
+#include "common/keyboard.h"
 #include "darkseed/menu.h"
 #include "darkseed/darkseed.h"
 
 namespace Darkseed {
 
+void drawSoundMenuItem() {
+	g_engine->_screen->fillRect({{117, 136}, 55, 11}, 0);
+	if (g_engine->_sound->isMuted()) {
+		g_engine->_console->drawStringAt(123, 136, "Silent");
+	} else {
+		g_engine->_console->drawStringAt(117, 136, "Sounds");
+	}
+}
+
 void loadMenu() {
+	Graphics::Surface screenCopy;
+	screenCopy.copyFrom(*g_engine->_screen);
+
 	g_engine->showFullscreenPic(g_engine->_room->isGiger() ? "glady.pic" : "clady.pic");
 	g_engine->_frame.draw();
 	g_engine->drawFullscreenPic();
+	g_engine->_console->draw(true);
 
 	g_engine->_console->drawStringAt(127, 62, "Load");
 	g_engine->_console->drawStringAt(127, 99, "Save");
-	if (true) { // TODO check if sound is enabled
-		g_engine->_console->drawStringAt(117, 136, "Sounds");
-	} else {
-		g_engine->_console->drawStringAt(123, 136, "Silent");
-	}
+	drawSoundMenuItem();
 	g_engine->_console->drawStringAt(118, 173, "Resume");
 	g_engine->_console->drawStringAt(129, 210, "Quit");
 
@@ -44,42 +54,80 @@ void loadMenu() {
 
 	g_engine->zeroMouseButtons();
 
+	g_engine->_lastKeyPressed = Common::KeyCode::KEYCODE_INVALID;
+
 	while (!g_engine->shouldQuit()) {
 		g_engine->updateEvents();
+		int menuItemIdx = -1;
 
 		if (g_engine->_isLeftMouseClicked) {
 			g_engine->zeroMouseButtons();
 
-			int menuItemIdx = -1;
 			Common::Point cursorPos = g_engine->_cursor.getPosition();
 
 			if (cursorPos.x > 111 && cursorPos.x < 178 && cursorPos.y > 50 && cursorPos.y < 235) {
 				menuItemIdx = (cursorPos.y - 50) / 37;
 			}
-			if (menuItemIdx > -1 && menuItemIdx < 5) {
-				// FUN_1208_0dac_sound_related(14);
-			}
+		}
 
-			if (menuItemIdx == 0) {
-				g_engine->loadGameDialog();
-				break;
-			}
-			if (menuItemIdx == 1) {
-				g_engine->saveGameDialog();
-				break;
-			}
-			if (menuItemIdx == 3) { // Resume
-				break;
+		if (g_engine->_lastKeyPressed != Common::KeyCode::KEYCODE_INVALID) {
+			switch (g_engine->_lastKeyPressed) {
+				case Common::KeyCode::KEYCODE_l: menuItemIdx = 0; break;
+				case Common::KeyCode::KEYCODE_s: menuItemIdx = 1; break;
+				case Common::KeyCode::KEYCODE_r: menuItemIdx = 3; break;
+				case Common::KeyCode::KEYCODE_q: menuItemIdx = 4; break;
+				default: break;
 			}
+			g_engine->_lastKeyPressed = Common::KeyCode::KEYCODE_INVALID;
+		}
 
-			if (menuItemIdx == 4) {
-				g_engine->quitGame();
-				break;
-			}
+		if (menuItemIdx > -1 && menuItemIdx < 5) {
+			g_engine->_sound->playSfx(5, 0, -1);
+			g_engine->waitForSpeechOrSfx();
+		}
 
+		if (menuItemIdx == 0) {
+			g_engine->loadGameDialog();
+			break;
+		}
+		if (menuItemIdx == 1) {
+			// restore game screen back for the save game thumbnail
+			g_engine->_screen->copyRectToSurface(screenCopy, 0, 0, {screenCopy.w, screenCopy.h});
+			g_engine->_screen->update();
+			g_engine->saveGameDialog();
+			break;
+		}
+		if (menuItemIdx == 2) { // sound settings
+			g_engine->flipMute();
+			drawSoundMenuItem();
+		}
+		if (menuItemIdx == 3) { // Resume
+			break;
+		}
+		if (menuItemIdx == 4) {
+			g_engine->_console->printTosText(16);
+			g_engine->_console->draw();
+			g_engine->_screen->update();
+			g_engine->_lastKeyPressed = Common::KeyCode::KEYCODE_INVALID;
+			while (!g_engine->shouldQuit()) {
+				g_engine->updateEvents();
+				if (g_engine->_lastKeyPressed == Common::KeyCode::KEYCODE_y) {
+					g_engine->quitGame();
+					break;
+				}
+				if (g_engine->_lastKeyPressed == Common::KeyCode::KEYCODE_n || g_engine->_lastKeyPressed == Common::KeyCode::KEYCODE_ESCAPE) {
+					g_engine->_console->printTosText(17);
+					g_engine->_console->draw();
+					g_engine->_screen->update();
+					break;
+				}
+				g_engine->_screen->update();
+				g_engine->wait();
+			}
 		}
 
 		g_engine->_screen->update();
+		g_engine->wait();
 	}
 
 	g_engine->removeFullscreenPic();
diff --git a/engines/darkseed/sound.cpp b/engines/darkseed/sound.cpp
index 1050a77625d..b0657a80829 100644
--- a/engines/darkseed/sound.cpp
+++ b/engines/darkseed/sound.cpp
@@ -22,6 +22,7 @@
 #include "audio/audiostream.h"
 #include "audio/decoders/raw.h"
 #include "audio/decoders/voc.h"
+#include "common/config-manager.h"
 #include "darkseed/sound.h"
 #include "darkseed/darkseed.h"
 
@@ -220,7 +221,7 @@ void Sound::playMusic(Common::String const &filename, bool loop) {
 		debug("Failed to load %s", path.toString().c_str());
 		return;
 	}
-	_musicPlayer->load(&file, file.size());
+	_musicPlayer->load(&file, (int32)file.size());
 	file.close();
 
 	_musicPlayer->play(loop);
@@ -245,6 +246,14 @@ Common::Error Sound::sync(Common::Serializer &s) {
 	return Common::kNoError;
 }
 
+bool Sound::isMuted() const {
+	bool soundIsMuted = false;
+	if (ConfMan.hasKey("mute")) {
+		soundIsMuted = ConfMan.getBool("mute");
+	}
+	return soundIsMuted;
+}
+
 void Sound::playSfx(uint8 sfxId, int unk1, int unk2) {
 	if (g_engine->isCdVersion()) {
 		playDosCDSfx(sfxId);
diff --git a/engines/darkseed/sound.h b/engines/darkseed/sound.h
index a51a572ca3e..cec4bdd3eab 100644
--- a/engines/darkseed/sound.h
+++ b/engines/darkseed/sound.h
@@ -72,6 +72,7 @@ public:
 
 	Common::Error sync(Common::Serializer &s);
 
+	bool isMuted() const;
 	void playTosSpeech(int tosIdx);
 	void stopSpeech();
 	bool isPlayingSpeech() const;




More information about the Scummvm-git-logs mailing list