[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