[Scummvm-git-logs] scummvm master -> b9ad81692cc274c999e11f0c4f8078bac7087bfa
eriktorbjorn
noreply at scummvm.org
Fri Jan 10 06:04:53 UTC 2025
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:
9b79e3136e SCUMM: MACGUI: Move comment to more appropriate spot
b9ad81692c SCUMM: MACGUI: Move menu updating (disabling save etc) into subclasses
Commit: 9b79e3136e25b907db40c51bd11ef4a0998a7b9d
https://github.com/scummvm/scummvm/commit/9b79e3136e25b907db40c51bd11ef4a0998a7b9d
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-01-10T06:31:45+01:00
Commit Message:
SCUMM: MACGUI: Move comment to more appropriate spot
Changed paths:
engines/scumm/macgui/macgui_impl.cpp
diff --git a/engines/scumm/macgui/macgui_impl.cpp b/engines/scumm/macgui/macgui_impl.cpp
index 4ba407bc9f8..9d357df88b2 100644
--- a/engines/scumm/macgui/macgui_impl.cpp
+++ b/engines/scumm/macgui/macgui_impl.cpp
@@ -439,11 +439,6 @@ void MacGuiImpl::updateWindowManager() {
if (!menu)
return;
- // We want the arrow cursor for menus. Note that the menu triggers even
- // when the mouse is invisible, which may or may not be a bug. But the
- // original did allow you to open the menu with Alt even when the
- // cursor was visible, so for now it's a feature.
-
bool saveCondition = true;
bool loadCondition = true;
@@ -560,6 +555,11 @@ void MacGuiImpl::updateWindowManager() {
}
void MacGuiImpl::onMenuOpen() {
+ // We want the arrow cursor for menus. Note that the menu triggers even
+ // when the mouse is invisible, which may or may not be a bug. But the
+ // original did allow you to open the menu with Alt even when the
+ // cursor was visible, so for now it's a feature.
+
if (!_menuIsActive) {
_menuIsActive = true;
_cursorWasVisible = CursorMan.showMouse(true);
Commit: b9ad81692cc274c999e11f0c4f8078bac7087bfa
https://github.com/scummvm/scummvm/commit/b9ad81692cc274c999e11f0c4f8078bac7087bfa
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-01-10T07:02:38+01:00
Commit Message:
SCUMM: MACGUI: Move menu updating (disabling save etc) into subclasses
The only thing that remains in MacGuiImpl is the simplest form of
save/load disabling. Neither Loom nor Last Crusade use that, as they
have additional conditions imposed on them.
Changed paths:
engines/scumm/macgui/macgui_impl.cpp
engines/scumm/macgui/macgui_impl.h
engines/scumm/macgui/macgui_indy3.cpp
engines/scumm/macgui/macgui_indy3.h
engines/scumm/macgui/macgui_loom.cpp
engines/scumm/macgui/macgui_loom.h
engines/scumm/macgui/macgui_v5.cpp
engines/scumm/macgui/macgui_v5.h
engines/scumm/macgui/macgui_v6.cpp
engines/scumm/macgui/macgui_v6.h
diff --git a/engines/scumm/macgui/macgui_impl.cpp b/engines/scumm/macgui/macgui_impl.cpp
index 9d357df88b2..e53ed05296b 100644
--- a/engines/scumm/macgui/macgui_impl.cpp
+++ b/engines/scumm/macgui/macgui_impl.cpp
@@ -350,6 +350,20 @@ void MacGuiImpl::addMenu(Graphics::MacMenu *menu, int menuId) {
resource.close();
}
+void MacGuiImpl::updateMenus() {
+ // We can't use the name of the menus here, because there are
+ // non-English versions. Let's hope the menu positions are always the
+ // same, at least!
+
+ Graphics::MacMenu *menu = _windowManager->getMenu();
+ Graphics::MacMenuItem *gameMenu = menu->getMenuItem(1);
+ Graphics::MacMenuItem *loadMenu = menu->getSubMenuItem(gameMenu, 0);
+ Graphics::MacMenuItem *saveMenu = menu->getSubMenuItem(gameMenu, 1);
+
+ loadMenu->enabled = _vm->canLoadGameStateCurrently();
+ saveMenu->enabled = _vm->canSaveGameStateCurrently();
+}
+
bool MacGuiImpl::handleMenu(int id, Common::String &name) {
// This menu item (e.g. a menu separator) has no action, so it's
// handled trivially.
@@ -439,115 +453,11 @@ void MacGuiImpl::updateWindowManager() {
if (!menu)
return;
- bool saveCondition = true;
- bool loadCondition = true;
-
- if (_vm->_game.id == GID_INDY3) {
- // Taken from Mac disasm...
- // The VAR(94) part tells us whether the copy protection has
- // failed or not, while the VAR(58) part uses bitmasks to enable
- // or disable saving and loading during normal gameplay.
- saveCondition = (_vm->VAR(58) & 0x01) && !(_vm->VAR(94) & 0x10);
- loadCondition = (_vm->VAR(58) & 0x02) && !(_vm->VAR(94) & 0x10);
- } else if (_vm->_game.id == GID_LOOM) {
- // TODO: Complete LOOM with the rest of the proper code from disasm,
- // for now we only have the copy protection code and a best guess in place...
- //
- // Details:
- // VAR(221) & 0x4000: Copy protection bit (the only thing I could confirm from the disasm)
- // VAR(VAR_VERB_SCRIPT) == 5: Best guess... it prevents saving/loading from e.g. difficulty selection screen
- // _userPut > 0: Best guess... it prevents saving/loading during cutscenes
-
- saveCondition = loadCondition =
- !(_vm->VAR(221) & 0x4000) &&
- (_vm->VAR(_vm->VAR_VERB_SCRIPT) == 5) &&
- (_vm->_userPut > 0);
- } else {
- saveCondition = true;
- loadCondition = true;
- }
-
- bool canLoad = _vm->canLoadGameStateCurrently() && loadCondition;
- bool canSave = _vm->canSaveGameStateCurrently() && saveCondition;
-
- Graphics::MacMenuItem *gameMenu = menu->getMenuItem(1);
- Graphics::MacMenuItem *loadMenu = menu->getSubMenuItem(gameMenu, 0);
- Graphics::MacMenuItem *saveMenu = menu->getSubMenuItem(gameMenu, 1);
-
- if (loadMenu)
- loadMenu->enabled = canLoad;
-
- if (saveMenu)
- saveMenu->enabled = canSave;
+ updateMenus();
if (!_windowManager->isMenuActive() && _menuIsActive)
onMenuClose();
- if (_vm->_game.version > 3 && _vm->_game.version < 6) {
- Graphics::MacMenuItem *windowMenu = menu->getMenuItem("Window");
-
- if (menu->numberOfMenuItems(windowMenu) >= 8)
- menu->getSubMenuItem(windowMenu, 7)->checked = _vm->_useMacGraphicsSmoothing;
-
- Graphics::MacMenuItem *speechMenu = menu->getMenuItem("Speech");
-
- if (speechMenu) {
- menu->getSubMenuItem(speechMenu, 0)->checked = false; // Voice Only
- menu->getSubMenuItem(speechMenu, 1)->checked = false; // Text Only
- menu->getSubMenuItem(speechMenu, 2)->checked = false; // Voice and Text
-
- switch (_vm->_voiceMode) {
- case 0: // Voice Only
- menu->getSubMenuItem(speechMenu, 0)->checked = true;
- break;
- case 1: // Voice and Text
- menu->getSubMenuItem(speechMenu, 2)->checked = true;
- break;
- case 2: // Text Only
- menu->getSubMenuItem(speechMenu, 1)->checked = true;
- break;
- default:
- warning("MacGuiImpl::updateWindowManager(): Invalid voice mode %d", _vm->_voiceMode);
- break;
- }
- }
- } else if (_vm->_game.version >= 6 || _vm->_game.id == GID_MANIAC) {
- // We can't use the name of the menus here, because there are
- // non-English versions. Let's hope the menu positions are
- // always the same, at least!
-
- Graphics::MacMenuItem *videoMenu = menu->getMenuItem(3);
-
- menu->getSubMenuItem(videoMenu, 2)->checked = true;
-
- if (_vm->_game.id != GID_MANIAC)
- menu->getSubMenuItem(videoMenu, 3)->checked = _vm->_useMacGraphicsSmoothing;
-
- Graphics::MacMenuItem *soundMenu = menu->getMenuItem(4);
-
- menu->getSubMenuItem(soundMenu, 0)->checked = (_vm->_soundEnabled & 2); // Music
- menu->getSubMenuItem(soundMenu, 1)->checked = (_vm->_soundEnabled & 1); // Effects
- menu->getSubMenuItem(soundMenu, 5)->checked = false; // Text Only
- menu->getSubMenuItem(soundMenu, 6)->checked = false; // Voice Only
- menu->getSubMenuItem(soundMenu, 7)->checked = false; // Text & Voice
-
- switch (_vm->_voiceMode) {
- case 0: // Voice Only
-
- menu->getSubMenuItem(soundMenu, 6)->checked = true;
- break;
- case 1: // Voice and Text
- menu->getSubMenuItem(soundMenu, 7)->checked = true;
- break;
- case 2: // Text Only
- menu->getSubMenuItem(soundMenu, 5)->checked = true;
- break;
- default:
- warning("MacGuiImpl::updateWindowManager(): Invalid voice mode %d", _vm->_voiceMode);
- break;
- }
- }
-
if (menu->isVisible())
updatePalette();
diff --git a/engines/scumm/macgui/macgui_impl.h b/engines/scumm/macgui/macgui_impl.h
index d5a5ed455f7..504f3daeadd 100644
--- a/engines/scumm/macgui/macgui_impl.h
+++ b/engines/scumm/macgui/macgui_impl.h
@@ -807,6 +807,7 @@ public:
static void menuCallback(int id, Common::String &name, void *data);
virtual bool initialize();
void updateWindowManager();
+ virtual void updateMenus();
const Graphics::Font *getFont(FontId fontId);
virtual const Graphics::Font *getFontByScummId(int32 id) = 0;
diff --git a/engines/scumm/macgui/macgui_indy3.cpp b/engines/scumm/macgui/macgui_indy3.cpp
index 424c0fa6d2a..9647167d3d6 100644
--- a/engines/scumm/macgui/macgui_indy3.cpp
+++ b/engines/scumm/macgui/macgui_indy3.cpp
@@ -1079,6 +1079,23 @@ void MacIndy3Gui::printCharToTextArea(int chr, int x, int y, int color) {
font->drawChar(&_textArea, chr, x + 5, y + 11, color);
}
+void MacIndy3Gui::updateMenus() {
+ // Taken from Mac disasm...
+ // The VAR(94) part tells us whether the copy protection has
+ // failed or not, while the VAR(58) part uses bitmasks to enable
+ // or disable saving and loading during normal gameplay.
+ bool saveCondition = (_vm->VAR(58) & 0x01) && !(_vm->VAR(94) & 0x10);
+ bool loadCondition = (_vm->VAR(58) & 0x02) && !(_vm->VAR(94) & 0x10);
+
+ Graphics::MacMenu *menu = _windowManager->getMenu();
+ Graphics::MacMenuItem *gameMenu = menu->getMenuItem(1);
+ Graphics::MacMenuItem *loadMenu = menu->getSubMenuItem(gameMenu, 0);
+ Graphics::MacMenuItem *saveMenu = menu->getSubMenuItem(gameMenu, 1);
+
+ loadMenu->enabled = _vm->canLoadGameStateCurrently() && loadCondition;
+ saveMenu->enabled = _vm->canSaveGameStateCurrently() && saveCondition;
+}
+
bool MacIndy3Gui::handleMenu(int id, Common::String &name) {
if (MacGuiImpl::handleMenu(id, name))
return true;
diff --git a/engines/scumm/macgui/macgui_indy3.h b/engines/scumm/macgui/macgui_indy3.h
index d32eaae50c5..26cc6548b6d 100644
--- a/engines/scumm/macgui/macgui_indy3.h
+++ b/engines/scumm/macgui/macgui_indy3.h
@@ -78,6 +78,7 @@ public:
protected:
bool getFontParams(FontId fontId, int &id, int &size, int &slant) const override;
+ void updateMenus() override;
bool handleMenu(int id, Common::String &name) override;
void runAboutDialog() override;
diff --git a/engines/scumm/macgui/macgui_loom.cpp b/engines/scumm/macgui/macgui_loom.cpp
index 8efb930ad0a..78a83d5d446 100644
--- a/engines/scumm/macgui/macgui_loom.cpp
+++ b/engines/scumm/macgui/macgui_loom.cpp
@@ -130,6 +130,31 @@ void MacLoomGui::setupCursor(int &width, int &height, int &hotspotX, int &hotspo
resource.close();
}
+void MacLoomGui::updateMenus() {
+ bool saveCondition, loadCondition;
+
+ // TODO: Complete LOOM with the rest of the proper code from disasm,
+ // for now we only have the copy protection code and a best guess in place...
+ //
+ // Details:
+ // VAR(221) & 0x4000: Copy protection bit (the only thing I could confirm from the disasm)
+ // VAR(VAR_VERB_SCRIPT) == 5: Best guess... it prevents saving/loading from e.g. difficulty selection screen
+ // _userPut > 0: Best guess... it prevents saving/loading during cutscenes
+
+ saveCondition = loadCondition =
+ !(_vm->VAR(221) & 0x4000) &&
+ (_vm->VAR(_vm->VAR_VERB_SCRIPT) == 5) &&
+ (_vm->_userPut > 0);
+
+ Graphics::MacMenu *menu = _windowManager->getMenu();
+ Graphics::MacMenuItem *gameMenu = menu->getMenuItem(1);
+ Graphics::MacMenuItem *loadMenu = menu->getSubMenuItem(gameMenu, 0);
+ Graphics::MacMenuItem *saveMenu = menu->getSubMenuItem(gameMenu, 1);
+
+ loadMenu->enabled = _vm->canLoadGameStateCurrently() && loadCondition;
+ saveMenu->enabled = _vm->canSaveGameStateCurrently() && saveCondition;
+}
+
bool MacLoomGui::handleMenu(int id, Common::String &name) {
if (MacGuiImpl::handleMenu(id, name))
return true;
diff --git a/engines/scumm/macgui/macgui_loom.h b/engines/scumm/macgui/macgui_loom.h
index d5fcb706887..914ae21192c 100644
--- a/engines/scumm/macgui/macgui_loom.h
+++ b/engines/scumm/macgui/macgui_loom.h
@@ -52,6 +52,7 @@ public:
protected:
bool getFontParams(FontId fontId, int &id, int &size, int &slant) const override;
+ void updateMenus() override;
bool handleMenu(int id, Common::String &name) override;
void runAboutDialog() override;
diff --git a/engines/scumm/macgui/macgui_v5.cpp b/engines/scumm/macgui/macgui_v5.cpp
index a22021b44a2..181972d7830 100644
--- a/engines/scumm/macgui/macgui_v5.cpp
+++ b/engines/scumm/macgui/macgui_v5.cpp
@@ -149,6 +149,39 @@ void MacV5Gui::setupCursor(int &width, int &height, int &hotspotX, int &hotspotY
resource.close();
}
+void MacV5Gui::updateMenus() {
+ MacGuiImpl::updateMenus();
+
+ Graphics::MacMenu *menu = _windowManager->getMenu();
+ Graphics::MacMenuItem *windowMenu = menu->getMenuItem("Window");
+
+ if (menu->numberOfMenuItems(windowMenu) >= 8)
+ menu->getSubMenuItem(windowMenu, 7)->checked = _vm->_useMacGraphicsSmoothing;
+
+ Graphics::MacMenuItem *speechMenu = menu->getMenuItem("Speech");
+
+ if (speechMenu) {
+ menu->getSubMenuItem(speechMenu, 0)->checked = false; // Voice Only
+ menu->getSubMenuItem(speechMenu, 1)->checked = false; // Text Only
+ menu->getSubMenuItem(speechMenu, 2)->checked = false; // Voice and Text
+
+ switch (_vm->_voiceMode) {
+ case 0: // Voice Only
+ menu->getSubMenuItem(speechMenu, 0)->checked = true;
+ break;
+ case 1: // Voice and Text
+ menu->getSubMenuItem(speechMenu, 2)->checked = true;
+ break;
+ case 2: // Text Only
+ menu->getSubMenuItem(speechMenu, 1)->checked = true;
+ break;
+ default:
+ warning("MacV5Gui::updateMenus(): Invalid voice mode %d", _vm->_voiceMode);
+ break;
+ }
+ }
+}
+
bool MacV5Gui::handleMenu(int id, Common::String &name) {
if (MacGuiImpl::handleMenu(id, name))
return true;
diff --git a/engines/scumm/macgui/macgui_v5.h b/engines/scumm/macgui/macgui_v5.h
index 0ea1bcba46b..0d2f2da9269 100644
--- a/engines/scumm/macgui/macgui_v5.h
+++ b/engines/scumm/macgui/macgui_v5.h
@@ -52,6 +52,7 @@ public:
protected:
bool getFontParams(FontId fontId, int &id, int &size, int &slant) const override;
+ void updateMenus() override;
bool handleMenu(int id, Common::String &name) override;
void runAboutDialog() override;
diff --git a/engines/scumm/macgui/macgui_v6.cpp b/engines/scumm/macgui/macgui_v6.cpp
index 46be6e540f3..785eba96f3b 100644
--- a/engines/scumm/macgui/macgui_v6.cpp
+++ b/engines/scumm/macgui/macgui_v6.cpp
@@ -153,6 +153,41 @@ void MacV6Gui::setupCursor(int &width, int &height, int &hotspotX, int &hotspotY
hotspotY = 1;
}
+void MacV6Gui::updateMenus() {
+ MacGuiImpl::updateMenus();
+
+ Graphics::MacMenu *menu = _windowManager->getMenu();
+ Graphics::MacMenuItem *videoMenu = menu->getMenuItem(3);
+
+ menu->getSubMenuItem(videoMenu, 2)->checked = true;
+
+ if (_vm->_game.id != GID_MANIAC)
+ menu->getSubMenuItem(videoMenu, 3)->checked = _vm->_useMacGraphicsSmoothing;
+
+ Graphics::MacMenuItem *soundMenu = menu->getMenuItem(4);
+
+ menu->getSubMenuItem(soundMenu, 0)->checked = (_vm->_soundEnabled & 2); // Music
+ menu->getSubMenuItem(soundMenu, 1)->checked = (_vm->_soundEnabled & 1); // Effects
+ menu->getSubMenuItem(soundMenu, 5)->checked = false; // Text Only
+ menu->getSubMenuItem(soundMenu, 6)->checked = false; // Voice Only
+ menu->getSubMenuItem(soundMenu, 7)->checked = false; // Text & Voice
+
+ switch (_vm->_voiceMode) {
+ case 0: // Voice Only
+ menu->getSubMenuItem(soundMenu, 6)->checked = true;
+ break;
+ case 1: // Voice and Text
+ menu->getSubMenuItem(soundMenu, 7)->checked = true;
+ break;
+ case 2: // Text Only
+ menu->getSubMenuItem(soundMenu, 5)->checked = true;
+ break;
+ default:
+ warning("MacV6Gui::updateMenus(): Invalid voice mode %d", _vm->_voiceMode);
+ break;
+ }
+}
+
bool MacV6Gui::handleMenu(int id, Common::String &name) {
// Don't call the original method. The menus are too different.
// TODO: Separate the common code into its own method?
diff --git a/engines/scumm/macgui/macgui_v6.h b/engines/scumm/macgui/macgui_v6.h
index 0956130b66f..b127f16d92b 100644
--- a/engines/scumm/macgui/macgui_v6.h
+++ b/engines/scumm/macgui/macgui_v6.h
@@ -67,6 +67,7 @@ public:
protected:
bool getFontParams(FontId fontId, int &id, int &size, int &slant) const override;
+ void updateMenus() override;
bool handleMenu(int id, Common::String &name) override;
void saveScreen() override;
More information about the Scummvm-git-logs
mailing list