[Scummvm-git-logs] scummvm master -> 0cc95232c4f03afa7dfa384d324207987660afc3
athrxx
athrxx at scummvm.org
Thu Jun 3 13:24:36 UTC 2021
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:
0cc95232c4 KYRA: (LOL) - fix bug no. 12595
Commit: 0cc95232c4f03afa7dfa384d324207987660afc3
https://github.com/scummvm/scummvm/commit/0cc95232c4f03afa7dfa384d324207987660afc3
Author: athrxx (athrxx at scummvm.org)
Date: 2021-06-03T15:23:33+02:00
Commit Message:
KYRA: (LOL) - fix bug no. 12595
("LANDS OF LORE: gamepad input doesn't work in some menus")
The current code would just disable the keymapper setting for all menus, although the single purpose of this is allowing text input (including from previously mapped keys) in the save name menu. I've split up the mapping in two, one mapping for the mouse clicks and one for the keyboard keys. Now, I disable only the keyboard part during the save name input process. Mouse clicks on the confirm/cancel buttons remain still possible through mapped keys.
Changed paths:
engines/kyra/engine/lol.cpp
engines/kyra/engine/lol.h
engines/kyra/gui/gui_lol.cpp
diff --git a/engines/kyra/engine/lol.cpp b/engines/kyra/engine/lol.cpp
index 14b5191c4b..f344350989 100644
--- a/engines/kyra/engine/lol.cpp
+++ b/engines/kyra/engine/lol.cpp
@@ -42,7 +42,8 @@
namespace Kyra {
-const char *const LoLEngine::kKeymapName = "lol";
+const char *const LoLEngine::kMouseKeymapName = "lolmouse";
+const char *const LoLEngine::kKeyboardKeymapName = "lolkeyb";
LoLEngine::LoLEngine(OSystem *system, const GameFlags &flags) : KyraRpgEngine(system, flags) {
_screen = 0;
@@ -465,25 +466,30 @@ Common::Error LoLEngine::init() {
}
Common::KeymapArray LoLEngine::initKeymaps() {
- Common::Keymap *keyMap = new Common::Keymap(Common::Keymap::kKeymapTypeGame, kKeymapName, "Lands of Lore");
-
- addKeymapAction(keyMap, Common::kStandardActionLeftClick, _("Interact via Left Click"), &Common::Action::setLeftClickEvent, "MOUSE_LEFT", "JOY_A");
- addKeymapAction(keyMap, Common::kStandardActionRightClick, _("Interact via Right Click"), &Common::Action::setRightClickEvent, "MOUSE_RIGHT", "JOY_B");
- addKeymapAction(keyMap, "AT1", _("Attack 1"), Common::KeyState(Common::KEYCODE_F1, Common::ASCII_F1), "F1", "JOY_X");
- addKeymapAction(keyMap, "AT2", _("Attack 2"), Common::KeyState(Common::KEYCODE_F2, Common::ASCII_F2), "F2", "JOY_Y");
- addKeymapAction(keyMap, "AT3", _("Attack 3"), Common::KeyState(Common::KEYCODE_F3, Common::ASCII_F3), "F3", "JOY_LEFT_SHOULDER");
- addKeymapAction(keyMap, "MAP", _("Show Map"), Common::KeyState(Common::KEYCODE_m, 'm'), "m", "");
- addKeymapAction(keyMap, "MVF", _("Move Forward"), Common::KeyState(Common::KEYCODE_UP), "UP", "JOY_UP");
- addKeymapAction(keyMap, "MVB", _("Move Back"), Common::KeyState(Common::KEYCODE_DOWN), "DOWN", "JOY_DOWN");
- addKeymapAction(keyMap, "SLL", _("Slide Left"), Common::KeyState(Common::KEYCODE_LEFT), "LEFT", "JOY_LEFT_TRIGGER");
- addKeymapAction(keyMap, "SLR", _("Slide Right"), Common::KeyState(Common::KEYCODE_RIGHT), "RIGHT", "JOY_RIGHT_TRIGGER");
- addKeymapAction(keyMap, "TL", _("Turn Left"), Common::KeyState(Common::KEYCODE_HOME), "HOME", "JOY_LEFT");
- addKeymapAction(keyMap, "TR", _("Turn Right"), Common::KeyState(Common::KEYCODE_PAGEUP), "PAGEUP", "JOY_RIGHT");
- addKeymapAction(keyMap, "RST", _("Rest"), Common::KeyState(Common::KEYCODE_r, 'r'), "r", "");
- addKeymapAction(keyMap, "OPT", _("Options"), Common::KeyState(Common::KEYCODE_o, 'o'), "o", "");
- addKeymapAction(keyMap, "SPL", _("Choose Spell"), Common::KeyState(Common::KEYCODE_SLASH, '/'), "SLASH", "");
-
- return Common::Keymap::arrayOf(keyMap);
+ Common::Keymap *keyMap1 = new Common::Keymap(Common::Keymap::kKeymapTypeGame, kMouseKeymapName, "Lands of Lore - Mouse");
+ Common::Keymap *keyMap2 = new Common::Keymap(Common::Keymap::kKeymapTypeGame, kKeyboardKeymapName, "Lands of Lore - Keyboard");
+ Common::KeymapArray res;
+
+ addKeymapAction(keyMap1, Common::kStandardActionLeftClick, _("Interact via Left Click"), &Common::Action::setLeftClickEvent, "MOUSE_LEFT", "JOY_A");
+ addKeymapAction(keyMap1, Common::kStandardActionRightClick, _("Interact via Right Click"), &Common::Action::setRightClickEvent, "MOUSE_RIGHT", "JOY_B");
+ res.push_back(keyMap1);
+
+ addKeymapAction(keyMap2, "AT1", _("Attack 1"), Common::KeyState(Common::KEYCODE_F1, Common::ASCII_F1), "F1", "JOY_X");
+ addKeymapAction(keyMap2, "AT2", _("Attack 2"), Common::KeyState(Common::KEYCODE_F2, Common::ASCII_F2), "F2", "JOY_Y");
+ addKeymapAction(keyMap2, "AT3", _("Attack 3"), Common::KeyState(Common::KEYCODE_F3, Common::ASCII_F3), "F3", "JOY_LEFT_SHOULDER");
+ addKeymapAction(keyMap2, "MAP", _("Show Map"), Common::KeyState(Common::KEYCODE_m, 'm'), "m", "");
+ addKeymapAction(keyMap2, "MVF", _("Move Forward"), Common::KeyState(Common::KEYCODE_UP), "UP", "JOY_UP");
+ addKeymapAction(keyMap2, "MVB", _("Move Back"), Common::KeyState(Common::KEYCODE_DOWN), "DOWN", "JOY_DOWN");
+ addKeymapAction(keyMap2, "SLL", _("Slide Left"), Common::KeyState(Common::KEYCODE_LEFT), "LEFT", "JOY_LEFT_TRIGGER");
+ addKeymapAction(keyMap2, "SLR", _("Slide Right"), Common::KeyState(Common::KEYCODE_RIGHT), "RIGHT", "JOY_RIGHT_TRIGGER");
+ addKeymapAction(keyMap2, "TL", _("Turn Left"), Common::KeyState(Common::KEYCODE_HOME), "HOME", "JOY_LEFT");
+ addKeymapAction(keyMap2, "TR", _("Turn Right"), Common::KeyState(Common::KEYCODE_PAGEUP), "PAGEUP", "JOY_RIGHT");
+ addKeymapAction(keyMap2, "RST", _("Rest"), Common::KeyState(Common::KEYCODE_r, 'r'), "r", "");
+ addKeymapAction(keyMap2, "OPT", _("Options"), Common::KeyState(Common::KEYCODE_o, 'o'), "o", "");
+ addKeymapAction(keyMap2, "SPL", _("Choose Spell"), Common::KeyState(Common::KEYCODE_SLASH, '/'), "SLASH", "");
+ res.push_back(keyMap2);
+
+ return res;
}
void LoLEngine::pauseEngineIntern(bool pause) {
diff --git a/engines/kyra/engine/lol.h b/engines/kyra/engine/lol.h
index 72c6a38c48..f6458bb511 100644
--- a/engines/kyra/engine/lol.h
+++ b/engines/kyra/engine/lol.h
@@ -302,7 +302,8 @@ private:
void writeSettings() override;
void readSettings() override;
- static const char *const kKeymapName;
+ static const char *const kMouseKeymapName;
+ static const char *const kKeyboardKeymapName;
const char *const *_pakFileList;
int _pakFileListSize;
diff --git a/engines/kyra/gui/gui_lol.cpp b/engines/kyra/gui/gui_lol.cpp
index fa71897f31..25ec40469b 100644
--- a/engines/kyra/gui/gui_lol.cpp
+++ b/engines/kyra/gui/gui_lol.cpp
@@ -2233,6 +2233,9 @@ int GUI_LoL::runMenu(Menu &menu) {
uint8 hasSpecialButtons = 0;
_saveSlotsListUpdateNeeded = true;
+ Common::Keymap *const lolKeyboardKeymap = _vm->_eventMan->getKeymapper()->getKeymap(LoLEngine::kKeyboardKeymapName);
+ assert(lolKeyboardKeymap);
+
while (_displayMenu) {
_vm->_mouseX = _vm->_mouseY = 0;
@@ -2397,6 +2400,12 @@ int GUI_LoL::runMenu(Menu &menu) {
f = _screen->setFont(f);
_screen->fillRect((d->sx << 3) + fC, d->sy, (d->sx << 3) + fC + wW, d->sy + d->h - (_vm->gameFlags().use16ColorMode ? 2 : 1), d->unk8, 0);
_screen->setCurPage(pg);
+
+ // Disable keyboard keymap during text input (save menu)
+ lolKeyboardKeymap->setEnabled(false);
+ } else if (_lastMenu == &_savenameMenu) {
+ // Restore keyboard keymap after text input (save menu)
+ lolKeyboardKeymap->setEnabled(true);
}
while (!_newMenu && _displayMenu) {
@@ -2558,11 +2567,6 @@ int GUI_LoL::getInput() {
if (!_displayMenu)
return 0;
- // Disable the keymap during text input
- Common::Keymapper *const mapper = _vm->_eventMan->getKeymapper();
- Common::Keymap *const lolKeymap = mapper->getKeymap(LoLEngine::kKeymapName);
- lolKeymap->setEnabled(false);
-
Common::Point p = _vm->getMousePos();
_vm->_mouseX = p.x;
_vm->_mouseY = p.y;
@@ -2600,8 +2604,6 @@ int GUI_LoL::getInput() {
_vm->delay(8);
- lolKeymap->setEnabled(true);
-
return inputFlag & 0x8000 ? 1 : 0;
}
More information about the Scummvm-git-logs
mailing list