[Scummvm-git-logs] scummvm master -> 9b3b00b598aaea156208dfd1cae2cd3d5a3f0dbc

dreammaster noreply at scummvm.org
Thu Feb 9 03:44:17 UTC 2023


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:
779a1c76ea MM: MM1: Handle escape/select actions in messages view
9b3b00b598 MM: MM1: update remaining views to use Escape/Select actions


Commit: 779a1c76ea10de377c65a1f6397e336d7da3c410
    https://github.com/scummvm/scummvm/commit/779a1c76ea10de377c65a1f6397e336d7da3c410
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-02-08T18:49:40-08:00

Commit Message:
MM: MM1: Handle escape/select actions in messages view

Changed paths:
    engines/mm/mm1/views/game_messages.cpp
    engines/mm/mm1/views_enh/game_messages.cpp


diff --git a/engines/mm/mm1/views/game_messages.cpp b/engines/mm/mm1/views/game_messages.cpp
index 493d9df1b76..994bf1255ff 100644
--- a/engines/mm/mm1/views/game_messages.cpp
+++ b/engines/mm/mm1/views/game_messages.cpp
@@ -121,11 +121,19 @@ bool GameMessages::msgAction(const ActionMessage &msg) {
 
 		switch (msg._action) {
 		case KEYBIND_ESCAPE:
-			close();
+			if (_keyCallback) {
+				_keyCallback(Common::KeyState(Common::KEYCODE_ESCAPE));
+			} else {
+				close();
+			}
 			return true;
 		case KEYBIND_SELECT:
-			close();
-			_ynCallback();
+			if (_keyCallback) {
+				_keyCallback(Common::KeyState(Common::KEYCODE_RETURN));
+			} else {
+				close();
+				_ynCallback();
+			}
 			return true;
 		default:
 			break;
diff --git a/engines/mm/mm1/views_enh/game_messages.cpp b/engines/mm/mm1/views_enh/game_messages.cpp
index c6039d6c349..6f01c5a5cb7 100644
--- a/engines/mm/mm1/views_enh/game_messages.cpp
+++ b/engines/mm/mm1/views_enh/game_messages.cpp
@@ -111,13 +111,21 @@ bool GameMessages::msgAction(const ActionMessage &msg) {
 	if (g_events->focusedView()) {
 		switch (msg._action) {
 		case KEYBIND_ESCAPE:
-			close();
-			g_events->drawElements();
+			if (_keyCallback) {
+				_keyCallback(Common::KeyState(Common::KEYCODE_ESCAPE));
+			} else {
+				close();
+				g_events->drawElements();
+			}
 			return true;
 		case KEYBIND_SELECT:
-			close();
-			g_events->drawElements();
-			_ynCallback();
+			if (_keyCallback) {
+				_keyCallback(Common::KeyState(Common::KEYCODE_RETURN));
+			} else {
+				close();
+				g_events->drawElements();
+				_ynCallback();
+			}
 			return true;
 		default:
 			break;


Commit: 9b3b00b598aaea156208dfd1cae2cd3d5a3f0dbc
    https://github.com/scummvm/scummvm/commit/9b3b00b598aaea156208dfd1cae2cd3d5a3f0dbc
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-02-08T19:43:59-08:00

Commit Message:
MM: MM1: update remaining views to use Escape/Select actions

Changed paths:
    engines/mm/mm1/views/character_base.cpp
    engines/mm/mm1/views/character_base.h
    engines/mm/mm1/views/character_manage.cpp
    engines/mm/mm1/views/characters.cpp
    engines/mm/mm1/views/characters.h
    engines/mm/mm1/views/combat.cpp
    engines/mm/mm1/views/locations/blacksmith_subview.cpp
    engines/mm/mm1/views/locations/blacksmith_subview.h
    engines/mm/mm1/views/maps/dog_statue.cpp
    engines/mm/mm1/views/maps/dog_statue.h
    engines/mm/mm1/views/rest.cpp
    engines/mm/mm1/views/rest.h
    engines/mm/mm1/views/search.cpp
    engines/mm/mm1/views/search.h
    engines/mm/mm1/views/spells/cast_spell.cpp
    engines/mm/mm1/views/spells/cast_spell.h
    engines/mm/mm1/views/spells/duplication.cpp
    engines/mm/mm1/views/spells/duplication.h
    engines/mm/mm1/views/spells/fly.cpp
    engines/mm/mm1/views/spells/fly.h
    engines/mm/mm1/views/spells/recharge_item.cpp
    engines/mm/mm1/views/spells/recharge_item.h
    engines/mm/mm1/views/spells/teleport.cpp
    engines/mm/mm1/views/spells/teleport.h
    engines/mm/mm1/views/text_entry.cpp
    engines/mm/mm1/views/text_entry.h
    engines/mm/mm1/views/unlock.cpp
    engines/mm/mm1/views/unlock.h
    engines/mm/mm1/views_enh/locations/market.cpp
    engines/mm/mm1/views_enh/locations/market.h
    engines/mm/mm1/views_enh/locations/temple.cpp
    engines/mm/mm1/views_enh/locations/temple.h


diff --git a/engines/mm/mm1/views/character_base.cpp b/engines/mm/mm1/views/character_base.cpp
index 75b6f9bcdd8..5706081faae 100644
--- a/engines/mm/mm1/views/character_base.cpp
+++ b/engines/mm/mm1/views/character_base.cpp
@@ -165,8 +165,8 @@ void CharacterBase::draw() {
 	printStats();
 }
 
-bool CharacterBase::msgKeypress(const KeypressMessage &msg) {
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
+bool CharacterBase::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
 		close();
 		return true;
 	}
diff --git a/engines/mm/mm1/views/character_base.h b/engines/mm/mm1/views/character_base.h
index 44e7bac42c5..7ddc4140f3b 100644
--- a/engines/mm/mm1/views/character_base.h
+++ b/engines/mm/mm1/views/character_base.h
@@ -48,7 +48,7 @@ public:
 	CharacterBase(const Common::String &name) : TextView(name) {}
 	~CharacterBase() {}
 
-	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 	void draw() override;
 };
 
diff --git a/engines/mm/mm1/views/character_manage.cpp b/engines/mm/mm1/views/character_manage.cpp
index 454b558cb7e..3fc45a4ba7c 100644
--- a/engines/mm/mm1/views/character_manage.cpp
+++ b/engines/mm/mm1/views/character_manage.cpp
@@ -51,17 +51,6 @@ void CharacterManage::draw() {
 }
 
 bool CharacterManage::msgKeypress(const KeypressMessage &msg) {
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
-		if (_state != DISPLAY) {
-			redraw();
-		} else {
-			close();
-		}
-
-		_state = DISPLAY;
-		return true;
-	}
-
 	switch (_state) {
 	case DISPLAY:
 		if ((msg.flags & Common::KBD_CTRL) && msg.keycode == Common::KEYCODE_n) {
@@ -108,7 +97,16 @@ bool CharacterManage::msgKeypress(const KeypressMessage &msg) {
 }
 
 bool CharacterManage::msgAction(const ActionMessage &msg) {
-	if (msg._action >= KEYBIND_VIEW_PARTY1 &&
+	if (msg._action == KEYBIND_ESCAPE) {
+		if (_state != DISPLAY) {
+			redraw();
+		} else {
+			close();
+		}
+
+		_state = DISPLAY;
+		return true;
+	} else if (msg._action >= KEYBIND_VIEW_PARTY1 &&
 			msg._action <= KEYBIND_VIEW_PARTY6 &&
 			_state == DISPLAY) {
 		g_globals->_currCharacter = &g_globals->_party[
diff --git a/engines/mm/mm1/views/characters.cpp b/engines/mm/mm1/views/characters.cpp
index bc8eeb07b6b..93b0ce69694 100644
--- a/engines/mm/mm1/views/characters.cpp
+++ b/engines/mm/mm1/views/characters.cpp
@@ -73,9 +73,7 @@ void Characters::draw() {
 }
 
 bool Characters::msgKeypress(const KeypressMessage &msg) {
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
-		close();
-	} else if (msg.keycode >= Common::KEYCODE_a &&
+	if (msg.keycode >= Common::KEYCODE_a &&
 		msg.keycode <= (Common::KEYCODE_a + (int)_charIndexes.size() - 1)) {
 		// Character selected
 		uint charIndex = _charIndexes[msg.keycode - Common::KEYCODE_a];
@@ -86,6 +84,15 @@ bool Characters::msgKeypress(const KeypressMessage &msg) {
 	return false;
 }
 
+bool Characters::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		close();
+		return true;
+	}
+
+	return false;
+}
+
 } // namespace Views
 } // namespace MM1
 } // namespace MM
diff --git a/engines/mm/mm1/views/characters.h b/engines/mm/mm1/views/characters.h
index 637af201acd..7196995cae6 100644
--- a/engines/mm/mm1/views/characters.h
+++ b/engines/mm/mm1/views/characters.h
@@ -43,6 +43,7 @@ public:
 
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Views
diff --git a/engines/mm/mm1/views/combat.cpp b/engines/mm/mm1/views/combat.cpp
index 45c4db65828..dd9913b8697 100644
--- a/engines/mm/mm1/views/combat.cpp
+++ b/engines/mm/mm1/views/combat.cpp
@@ -232,11 +232,6 @@ bool Combat::msgKeypress(const KeypressMessage &msg) {
 		return true;
 
 	if (_mode == SELECT_OPTION && _option != OPTION_NONE) {
-		if (msg.keycode == Common::KEYCODE_ESCAPE) {
-			combatLoop();
-			return true;
-		}
-
 		switch (_option) {
 		case OPTION_FIGHT:
 		case OPTION_SHOOT:
diff --git a/engines/mm/mm1/views/locations/blacksmith_subview.cpp b/engines/mm/mm1/views/locations/blacksmith_subview.cpp
index ec6869900ee..3e6db4516d3 100644
--- a/engines/mm/mm1/views/locations/blacksmith_subview.cpp
+++ b/engines/mm/mm1/views/locations/blacksmith_subview.cpp
@@ -58,9 +58,6 @@ void BlacksmithSubview::drawIsAllowed() {
 
 bool BlacksmithSubview::msgKeypress(const KeypressMessage &msg) {
 	switch (msg.keycode) {
-	case Common::KEYCODE_ESCAPE:
-		close();
-		break;
 	case Common::KEYCODE_a:
 	case Common::KEYCODE_b:
 	case Common::KEYCODE_c:
@@ -77,6 +74,15 @@ bool BlacksmithSubview::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool BlacksmithSubview::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		close();
+		return true;
+	}
+
+	return false;
+}
+
 void BlacksmithSubview::selectItem(uint index) {
 	switch (g_globals->_currCharacter->buyItem(
 		_items[index])) {
diff --git a/engines/mm/mm1/views/locations/blacksmith_subview.h b/engines/mm/mm1/views/locations/blacksmith_subview.h
index 8fac8ced4bf..1e680ac60dd 100644
--- a/engines/mm/mm1/views/locations/blacksmith_subview.h
+++ b/engines/mm/mm1/views/locations/blacksmith_subview.h
@@ -53,6 +53,7 @@ public:
 	BlacksmithSubview(const Common::String &name) : Location(name) {}
 
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Locations
diff --git a/engines/mm/mm1/views/maps/dog_statue.cpp b/engines/mm/mm1/views/maps/dog_statue.cpp
index db87f6179ba..bb71443a676 100644
--- a/engines/mm/mm1/views/maps/dog_statue.cpp
+++ b/engines/mm/mm1/views/maps/dog_statue.cpp
@@ -65,8 +65,7 @@ void DogStatue::draw() {
 }
 
 bool DogStatue::msgKeypress(const KeypressMessage &msg) {
-	if (msg.keycode == Common::KEYCODE_y || msg.keycode == Common::KEYCODE_n ||
-			msg.keycode == Common::KEYCODE_ESCAPE) {
+	if (msg.keycode == Common::KEYCODE_y || msg.keycode == Common::KEYCODE_n) {
 		MM1::Maps::Map42 &map = *static_cast<MM1::Maps::Map42 *>(g_maps->_currentMap);
 		close();
 
@@ -78,6 +77,21 @@ bool DogStatue::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool DogStatue::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE || msg._action == KEYBIND_SELECT) {
+		MM1::Maps::Map42 &map = *static_cast<MM1::Maps::Map42 *>(g_maps->_currentMap);
+		close();
+
+		if (msg._action == KEYBIND_SELECT)
+			map.dogDesecrate();
+
+		return true;
+	}
+
+	return false;
+}
+
+
 } // namespace Maps
 } // namespace Views
 } // namespace MM1
diff --git a/engines/mm/mm1/views/maps/dog_statue.h b/engines/mm/mm1/views/maps/dog_statue.h
index 18076bcbc7d..74ce5192ace 100644
--- a/engines/mm/mm1/views/maps/dog_statue.h
+++ b/engines/mm/mm1/views/maps/dog_statue.h
@@ -39,6 +39,7 @@ public:
 	bool msgFocus(const FocusMessage &msg) override;
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Maps
diff --git a/engines/mm/mm1/views/rest.cpp b/engines/mm/mm1/views/rest.cpp
index 7752f27e8f6..77afd761240 100644
--- a/engines/mm/mm1/views/rest.cpp
+++ b/engines/mm/mm1/views/rest.cpp
@@ -57,8 +57,7 @@ void Rest::draw() {
 
 bool Rest::msgKeypress(const KeypressMessage &msg) {
 	if (_mode == CONFIRM) {
-		if (msg.keycode == Common::KEYCODE_ESCAPE ||
-			msg.keycode == Common::KEYCODE_n) {
+		if (msg.keycode == Common::KEYCODE_n) {
 			close();
 		} else if (msg.keycode == Common::KEYCODE_y) {
 			close();
@@ -69,6 +68,19 @@ bool Rest::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool Rest::msgAction(const ActionMessage &msg) {
+	if (_mode == CONFIRM) {
+		if (msg._action == KEYBIND_ESCAPE) {
+			close();
+		} else if (msg._action == KEYBIND_SELECT) {
+			close();
+			Game::Rest::check();
+		}
+	}
+
+	return true;
+}
+
 void Rest::tooDangerous() {
 	_mode = TOO_DANGEROUS;
 	clearSurface();
diff --git a/engines/mm/mm1/views/rest.h b/engines/mm/mm1/views/rest.h
index 85c3effe68d..de204cf6d32 100644
--- a/engines/mm/mm1/views/rest.h
+++ b/engines/mm/mm1/views/rest.h
@@ -41,6 +41,7 @@ public:
 	bool msgFocus(const FocusMessage &msg) override;
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 	bool msgGame(const GameMessage &msg) override;
 	void timeout() override;
 };
diff --git a/engines/mm/mm1/views/search.cpp b/engines/mm/mm1/views/search.cpp
index 2d6bff703cd..6f99f8df561 100644
--- a/engines/mm/mm1/views/search.cpp
+++ b/engines/mm/mm1/views/search.cpp
@@ -122,9 +122,6 @@ bool Search::msgKeypress(const KeypressMessage &msg) {
 
 	case OPTIONS:
 		switch (msg.keycode) {
-		case Common::KEYCODE_ESCAPE:
-			close();
-			break;
 		case Common::KEYCODE_1:
 			openContainer();
 			break;
@@ -144,11 +141,7 @@ bool Search::msgKeypress(const KeypressMessage &msg) {
 		break;
 
 	case WHO_WILL_TRY:
-		if (msg.keycode == Common::KEYCODE_ESCAPE) {
-			_mode = OPTIONS;
-			draw();
-
-		} else if (msg.keycode >= Common::KEYCODE_1 &&
+		if (msg.keycode >= Common::KEYCODE_1 &&
 			msg.keycode <= (Common::KEYCODE_0 + (int)g_globals->_party.size())) {
 			// Character selected
 			g_globals->_currCharacter = &g_globals->_party[
@@ -167,7 +160,7 @@ bool Search::msgKeypress(const KeypressMessage &msg) {
 		break;
 
 	case GET_TREASURE:
-
+		break;
 
 	default:
 		break;
@@ -176,6 +169,29 @@ bool Search::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool Search::msgAction(const ActionMessage &msg) {
+	if (endDelay())
+		return true;
+
+	if (msg._action == KEYBIND_ESCAPE) {
+		switch (_mode) {
+		case OPTIONS:
+			close();
+			break;
+		case WHO_WILL_TRY:
+			_mode = OPTIONS;
+			draw();
+			break;
+		default:
+			break;
+		}
+
+		return true;
+	}
+
+	return true;
+}
+
 void Search::timeout() {
 	switch (_mode) {
 	case INITIAL: {
diff --git a/engines/mm/mm1/views/search.h b/engines/mm/mm1/views/search.h
index 6c18b6cd2d4..5ab9fa6569e 100644
--- a/engines/mm/mm1/views/search.h
+++ b/engines/mm/mm1/views/search.h
@@ -85,6 +85,7 @@ public:
 	bool msgFocus(const FocusMessage &msg) override;
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 	void timeout() override;
 };
 
diff --git a/engines/mm/mm1/views/spells/cast_spell.cpp b/engines/mm/mm1/views/spells/cast_spell.cpp
index bfed318fb8a..09b09b81a3e 100644
--- a/engines/mm/mm1/views/spells/cast_spell.cpp
+++ b/engines/mm/mm1/views/spells/cast_spell.cpp
@@ -160,21 +160,15 @@ void CastSpell::spellNumberEntered(uint num) {
 	}
 }
 
-bool CastSpell::msgKeypress(const KeypressMessage &msg) {
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
+bool CastSpell::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
 		close();
-	} else if (_state == PRESS_ENTER) {
-		if (msg.keycode == Common::KEYCODE_RETURN) {
-			// Time to execute the spell
-			performSpell();
-		}
-	}
 
-	return true;
-}
+	} else if (msg._action == KEYBIND_SELECT) {
+		// Time to execute the spell
+		performSpell();
 
-bool CastSpell::msgAction(const ActionMessage &msg) {
-	if (_state == SELECT_CHAR &&
+	} else if (_state == SELECT_CHAR &&
 		msg._action >= KEYBIND_VIEW_PARTY1 &&
 		msg._action <= KEYBIND_VIEW_PARTY6) {
 		uint charIndex = (int)(msg._action - KEYBIND_VIEW_PARTY1);
diff --git a/engines/mm/mm1/views/spells/cast_spell.h b/engines/mm/mm1/views/spells/cast_spell.h
index 21275e20487..1c8e44a0f12 100644
--- a/engines/mm/mm1/views/spells/cast_spell.h
+++ b/engines/mm/mm1/views/spells/cast_spell.h
@@ -74,7 +74,6 @@ public:
 	bool msgValue(const ValueMessage &msg) override;
 	bool msgUnfocus(const UnfocusMessage &msg) override;
 	void draw() override;
-	bool msgKeypress(const KeypressMessage &msg) override;
 	bool msgAction(const ActionMessage &msg) override;
 	void timeout() override;
 };
diff --git a/engines/mm/mm1/views/spells/duplication.cpp b/engines/mm/mm1/views/spells/duplication.cpp
index 7a291c48c69..fb5b01ed19a 100644
--- a/engines/mm/mm1/views/spells/duplication.cpp
+++ b/engines/mm/mm1/views/spells/duplication.cpp
@@ -49,10 +49,7 @@ void Duplication::draw() {
 bool Duplication::msgKeypress(const KeypressMessage &msg) {
 	Inventory &inv = g_globals->_currCharacter->_backpack;
 
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
-		spellFailed();
-
-	} else if (msg.keycode >= Common::KEYCODE_a &&
+	if (msg.keycode >= Common::KEYCODE_a &&
 		msg.keycode < (Common::KEYCODE_a + (int)inv.size())) {
 		int itemIndex = msg.keycode - Common::KEYCODE_a;
 
@@ -79,6 +76,15 @@ bool Duplication::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool Duplication::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		spellFailed();
+		return true;
+	}
+
+	return false;
+}
+
 } // namespace Spells
 } // namespace Views
 } // namespace MM1
diff --git a/engines/mm/mm1/views/spells/duplication.h b/engines/mm/mm1/views/spells/duplication.h
index 72035b665cb..949f056b6d9 100644
--- a/engines/mm/mm1/views/spells/duplication.h
+++ b/engines/mm/mm1/views/spells/duplication.h
@@ -67,6 +67,11 @@ public:
 	 * Keypress handler
 	 */
 	bool msgKeypress(const KeypressMessage &msg) override;
+
+	/**
+	 * Action handler
+	 */
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Spells
diff --git a/engines/mm/mm1/views/spells/fly.cpp b/engines/mm/mm1/views/spells/fly.cpp
index 31c726a29be..fcf4195c359 100644
--- a/engines/mm/mm1/views/spells/fly.cpp
+++ b/engines/mm/mm1/views/spells/fly.cpp
@@ -65,11 +65,7 @@ void Fly::draw() {
 }
 
 bool Fly::msgKeypress(const KeypressMessage &msg) {
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
-		close();
-		_callback(-1);
-
-	} else if (_mode == SELECT_X && msg.keycode >= Common::KEYCODE_a
+	if (_mode == SELECT_X && msg.keycode >= Common::KEYCODE_a
 		&& msg.keycode <= Common::KEYCODE_d) {
 		// X map selected
 		_mode = SELECT_Y;
@@ -93,6 +89,16 @@ bool Fly::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool Fly::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		close();
+		_callback(-1);
+		return true;
+	}
+
+	return false;
+}
+
 } // namespace Spells
 } // namespace Views
 } // namespace MM1
diff --git a/engines/mm/mm1/views/spells/fly.h b/engines/mm/mm1/views/spells/fly.h
index 7d178eb8bcc..cdf5abdede6 100644
--- a/engines/mm/mm1/views/spells/fly.h
+++ b/engines/mm/mm1/views/spells/fly.h
@@ -74,6 +74,11 @@ public:
 	 * Keypress handler
 	 */
 	bool msgKeypress(const KeypressMessage &msg) override;
+
+	/**
+	 * Action handler
+	 */
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Spells
diff --git a/engines/mm/mm1/views/spells/recharge_item.cpp b/engines/mm/mm1/views/spells/recharge_item.cpp
index 70976a88944..79a6c9fe807 100644
--- a/engines/mm/mm1/views/spells/recharge_item.cpp
+++ b/engines/mm/mm1/views/spells/recharge_item.cpp
@@ -49,10 +49,7 @@ void RechargeItem::draw() {
 bool RechargeItem::msgKeypress(const KeypressMessage &msg) {
 	Inventory &inv = g_globals->_currCharacter->_backpack;
 
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
-		spellFailed();
-
-	} else if (msg.keycode >= Common::KEYCODE_a &&
+	if (msg.keycode >= Common::KEYCODE_a &&
 			msg.keycode < (Common::KEYCODE_a + (int)inv.size())) {
 		int itemIndex = msg.keycode - Common::KEYCODE_a;
 		Item *item = g_globals->_items.getItem(inv[itemIndex]._id);
@@ -73,6 +70,15 @@ bool RechargeItem::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool RechargeItem::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		spellFailed();
+		return true;
+	}
+
+	return false;
+}
+
 } // namespace Spells
 } // namespace Views
 } // namespace MM1
diff --git a/engines/mm/mm1/views/spells/recharge_item.h b/engines/mm/mm1/views/spells/recharge_item.h
index 3f08909e1d8..4982b08efc7 100644
--- a/engines/mm/mm1/views/spells/recharge_item.h
+++ b/engines/mm/mm1/views/spells/recharge_item.h
@@ -55,6 +55,11 @@ public:
 	 * Keypress handler
 	 */
 	bool msgKeypress(const KeypressMessage &msg) override;
+
+	/**
+	 * Action handler
+	 */
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Spells
diff --git a/engines/mm/mm1/views/spells/teleport.cpp b/engines/mm/mm1/views/spells/teleport.cpp
index c3605fd522a..56713cbda4c 100644
--- a/engines/mm/mm1/views/spells/teleport.cpp
+++ b/engines/mm/mm1/views/spells/teleport.cpp
@@ -62,10 +62,7 @@ void Teleport::draw() {
 }
 
 bool Teleport::msgKeypress(const KeypressMessage &msg) {
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
-		close();
-
-	} else if (_mode == SELECT_DIRECTION && (
+	if (_mode == SELECT_DIRECTION && (
 			msg.keycode == Common::KEYCODE_n ||
 			msg.keycode == Common::KEYCODE_s ||
 			msg.keycode == Common::KEYCODE_e ||
@@ -88,6 +85,15 @@ bool Teleport::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool Teleport::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		close();
+		return true;
+	}
+
+	return false;
+}
+
 void Teleport::teleport() {
 	Maps::Maps &maps = *g_maps;
 	Maps::Map &map = *maps._currentMap;
diff --git a/engines/mm/mm1/views/spells/teleport.h b/engines/mm/mm1/views/spells/teleport.h
index bd7c0d5fec4..8917d0948fc 100644
--- a/engines/mm/mm1/views/spells/teleport.h
+++ b/engines/mm/mm1/views/spells/teleport.h
@@ -72,6 +72,11 @@ public:
 	 * Keypress handler
 	 */
 	bool msgKeypress(const KeypressMessage &msg) override;
+
+	/**
+	 * Action handler
+	 */
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Spells
diff --git a/engines/mm/mm1/views/text_entry.cpp b/engines/mm/mm1/views/text_entry.cpp
index ef0b6bc0447..a04694d2ce5 100644
--- a/engines/mm/mm1/views/text_entry.cpp
+++ b/engines/mm/mm1/views/text_entry.cpp
@@ -51,12 +51,7 @@ void TextEntry::drawText() {
 bool TextEntry::msgKeypress(const KeypressMessage &msg) {
 	Common::KeyCode kc = msg.keycode;
 
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
-		drawText();
-		close();
-		_abortFn();
-		return true;
-	} else if (msg.keycode == Common::KEYCODE_BACKSPACE &&
+	if (msg.keycode == Common::KEYCODE_BACKSPACE &&
 			!_text.empty()) {
 		_text.deleteLastChar();
 		drawText();
@@ -85,6 +80,17 @@ bool TextEntry::msgKeypress(const KeypressMessage &msg) {
 	return false;
 }
 
+bool TextEntry::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		drawText();
+		close();
+		_abortFn();
+		return true;
+	}
+
+	return false;
+}
+
 } // namespace Views
 } // namespace MM1
 } // namespace MM
diff --git a/engines/mm/mm1/views/text_entry.h b/engines/mm/mm1/views/text_entry.h
index a1faddeb373..ed7f39fcf4b 100644
--- a/engines/mm/mm1/views/text_entry.h
+++ b/engines/mm/mm1/views/text_entry.h
@@ -52,6 +52,8 @@ public:
 
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
+
 	void display(int x, int y, int maxLen, bool isNumeric,
 		Abort abortFn, Enter enterFn);
 };
diff --git a/engines/mm/mm1/views/unlock.cpp b/engines/mm/mm1/views/unlock.cpp
index bef7d72c39e..01f9849b493 100644
--- a/engines/mm/mm1/views/unlock.cpp
+++ b/engines/mm/mm1/views/unlock.cpp
@@ -80,10 +80,7 @@ void Unlock::draw() {
 }
 
 bool Unlock::msgKeypress(const KeypressMessage &msg) {
-	if (msg.keycode == Common::KEYCODE_ESCAPE) {
-		close();
-
-	} else if (msg.keycode >= Common::KEYCODE_1 &&
+	if (msg.keycode >= Common::KEYCODE_1 &&
 		msg.keycode <= (Common::KEYCODE_0 + (int)g_globals->_party.size())) {
 		// Character selected
 		charSelected(msg.keycode - Common::KEYCODE_1);
@@ -92,6 +89,15 @@ bool Unlock::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool Unlock::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		close();
+		return true;
+	}
+
+	return false;
+}
+
 void Unlock::charSelected(uint charIndex) {
 	Character &c = g_globals->_party[charIndex];
 	g_globals->_currCharacter = &c;
diff --git a/engines/mm/mm1/views/unlock.h b/engines/mm/mm1/views/unlock.h
index 41db9d33ed0..c2d4fa837b8 100644
--- a/engines/mm/mm1/views/unlock.h
+++ b/engines/mm/mm1/views/unlock.h
@@ -40,6 +40,7 @@ public:
 	bool msgFocus(const FocusMessage &msg) override;
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Views
diff --git a/engines/mm/mm1/views_enh/locations/market.cpp b/engines/mm/mm1/views_enh/locations/market.cpp
index 04178149743..15818feb1d8 100644
--- a/engines/mm/mm1/views_enh/locations/market.cpp
+++ b/engines/mm/mm1/views_enh/locations/market.cpp
@@ -71,7 +71,6 @@ bool Market::msgKeypress(const KeypressMessage &msg) {
 			buyFood();
 			return true;
 		case Common::KEYCODE_n:
-		case Common::KEYCODE_ESCAPE:
 			leave();
 			return true;
 		default:
@@ -82,6 +81,19 @@ bool Market::msgKeypress(const KeypressMessage &msg) {
 	return false;
 }
 
+bool Market::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_SELECT) {
+		buyFood();
+		return true;
+	} else if (msg._action == KEYBIND_ESCAPE) {
+		leave();
+		return true;
+	}
+
+	return false;
+}
+
+
 void Market::buyFood() {
 	int numPurchases = 0;
 
diff --git a/engines/mm/mm1/views_enh/locations/market.h b/engines/mm/mm1/views_enh/locations/market.h
index 3399ccd2aca..365360b0c65 100644
--- a/engines/mm/mm1/views_enh/locations/market.h
+++ b/engines/mm/mm1/views_enh/locations/market.h
@@ -51,6 +51,7 @@ public:
 	bool msgFocus(const FocusMessage &msg) override;
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Locations
diff --git a/engines/mm/mm1/views_enh/locations/temple.cpp b/engines/mm/mm1/views_enh/locations/temple.cpp
index f3cda000f18..19a29e47984 100644
--- a/engines/mm/mm1/views_enh/locations/temple.cpp
+++ b/engines/mm/mm1/views_enh/locations/temple.cpp
@@ -38,12 +38,18 @@ Temple::Temple() : Location("Temple") {
 }
 
 bool Temple::msgFocus(const FocusMessage &msg) {
+	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_PARTY_MENUS);
 	send("View", ValueMessage(LOC_TEMPLE));
 	changeCharacter(0);
 
 	return true;
 }
 
+bool Temple::msgUnfocus(const UnfocusMessage &msg) {
+	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MENUS);
+	return true;
+}
+
 void Temple::draw() {
 	Location::draw();
 
@@ -77,9 +83,6 @@ void Temple::draw() {
 
 bool Temple::msgKeypress(const KeypressMessage &msg) {
 	switch (msg.keycode) {
-	case Common::KEYCODE_ESCAPE:
-		leave();
-		break;
 	case Common::KEYCODE_h:
 		restoreHealth();
 		break;
@@ -96,14 +99,6 @@ bool Temple::msgKeypress(const KeypressMessage &msg) {
 		g_globals->_currCharacter->gatherGold();
 		redraw();
 		break;
-	case Common::KEYCODE_1:
-	case Common::KEYCODE_2:
-	case Common::KEYCODE_3:
-	case Common::KEYCODE_4:
-	case Common::KEYCODE_5:
-	case Common::KEYCODE_6:
-		changeCharacter(msg.keycode - Common::KEYCODE_1);
-		break;
 	default:
 		break;
 	}
@@ -111,6 +106,26 @@ bool Temple::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool Temple::msgAction(const ActionMessage &msg) {
+	switch (msg._action) {
+	case KEYBIND_ESCAPE:
+		leave();
+		return true;
+	case KEYBIND_VIEW_PARTY1:
+	case KEYBIND_VIEW_PARTY2:
+	case KEYBIND_VIEW_PARTY3:
+	case KEYBIND_VIEW_PARTY4:
+	case KEYBIND_VIEW_PARTY5:
+	case KEYBIND_VIEW_PARTY6:
+		changeCharacter(msg._action - KEYBIND_VIEW_PARTY1);
+		return true;
+	default:
+		break;
+	}
+
+	return false;
+}
+
 void Temple::changeCharacter(uint index) {
 	Maps::Map &map = *g_maps->_currentMap;
 	int i;
diff --git a/engines/mm/mm1/views_enh/locations/temple.h b/engines/mm/mm1/views_enh/locations/temple.h
index 9b578c7e2f1..3c485e76687 100644
--- a/engines/mm/mm1/views_enh/locations/temple.h
+++ b/engines/mm/mm1/views_enh/locations/temple.h
@@ -52,8 +52,10 @@ public:
 	Temple();
 
 	bool msgFocus(const FocusMessage &msg) override;
+	bool msgUnfocus(const UnfocusMessage &msg) override;
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace Locations




More information about the Scummvm-git-logs mailing list