[Scummvm-git-logs] scummvm master -> e7b6593e7820df89774272d4f24eed7d75e06df7

dreammaster noreply at scummvm.org
Mon Feb 20 06:21:15 UTC 2023


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
7cea92d83d MM: MM1: Remove old debug code
70b65410e4 MM: MM1: Beginnings of selected spell casting
3792c23854 MM: MM1: Creating base class for views that allow switching character
e7b6593e78 MM: MM1: CharacterInfo now derives from PartyView class


Commit: 7cea92d83dd44479e4c2a707198edc4b0b331764
    https://github.com/scummvm/scummvm/commit/7cea92d83dd44479e4c2a707198edc4b0b331764
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-02-19T19:15:03-08:00

Commit Message:
MM: MM1: Remove old debug code

Changed paths:
    engines/mm/shared/utils/strings_data.cpp


diff --git a/engines/mm/shared/utils/strings_data.cpp b/engines/mm/shared/utils/strings_data.cpp
index eac84a94baa..7538337245c 100644
--- a/engines/mm/shared/utils/strings_data.cpp
+++ b/engines/mm/shared/utils/strings_data.cpp
@@ -62,10 +62,6 @@ bool StringsData::load(const Common::String &filename) {
 		key.trim();
 		value.trim();
 
-		if (value.contains("quick")) {
-			warning("%s", value.c_str());
-		}
-
 		// Strip quotes from start and end of string
 		if (value.hasPrefix("\"") && value.hasSuffix("\"")) {
 			value.deleteChar(0);


Commit: 70b65410e4f4f5e0eccdded40dc8905132f539de
    https://github.com/scummvm/scummvm/commit/70b65410e4f4f5e0eccdded40dc8905132f539de
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-02-19T19:15:03-08:00

Commit Message:
MM: MM1: Beginnings of selected spell casting

Changed paths:
    engines/mm/mm1/game/spells_party.h
    engines/mm/mm1/views_enh/spells/spellbook.cpp
    engines/mm/mm1/views_enh/spells/spellbook.h


diff --git a/engines/mm/mm1/game/spells_party.h b/engines/mm/mm1/game/spells_party.h
index ec50673d2f2..d31f14a67b6 100644
--- a/engines/mm/mm1/game/spells_party.h
+++ b/engines/mm/mm1/game/spells_party.h
@@ -30,7 +30,8 @@ namespace MM {
 namespace MM1 {
 namespace Game {
 
-#define SPELLS_COUNT (47 * 2)
+#define CATEGORY_SPELLS_COUNT 47
+#define SPELLS_COUNT (CATEGORY_SPELLS_COUNT * 2)
 
 enum SpellResult {
 	SR_SUCCESS_DONE, SR_SUCCESS_SILENT, SR_FAILED
@@ -178,7 +179,6 @@ public:
 	 * Casts a spell
 	 */
 	static SpellResult cast(uint spell, Character *destChar);
-	static SpellResult cast(uint spellx);
 };
 
 } // namespace Game
diff --git a/engines/mm/mm1/views_enh/spells/spellbook.cpp b/engines/mm/mm1/views_enh/spells/spellbook.cpp
index eb442711a39..ef6c41ed0be 100644
--- a/engines/mm/mm1/views_enh/spells/spellbook.cpp
+++ b/engines/mm/mm1/views_enh/spells/spellbook.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mm/mm1/views_enh/spells/spellbook.h"
+#include "mm/mm1/game/spells_party.h"
 #include "mm/mm1/globals.h"
 
 namespace MM {
@@ -115,7 +116,7 @@ void Spellbook::draw() {
 
 			// Spell requirements
 			int lvl, num;
-			getSpellLevelNum(47 * (_isWizard ? 1 : 0) + spellIndex, lvl, num);
+			getSpellLevelNum(CATEGORY_SPELLS_COUNT * (_isWizard ? 1 : 0) + spellIndex, lvl, num);
 			setSpell(g_globals->_currCharacter, lvl, num);
 
 			writeString(152, yp, Common::String::format("%d/%d",
@@ -165,17 +166,36 @@ bool Spellbook::msgKeypress(const KeypressMessage &msg) {
 }
 
 bool Spellbook::msgAction(const ActionMessage &msg) {
-	if (msg._action == KEYBIND_ESCAPE) {
+	switch (msg._action) {
+	case KEYBIND_ESCAPE:
 		close();
 		return true;
 
-	} else if (msg._action >= KEYBIND_VIEW_PARTY1 &&
-		msg._action <= KEYBIND_VIEW_PARTY6 && !g_events->isInCombat()) {
-		uint charNum = msg._action - KEYBIND_VIEW_PARTY1;
+	case KEYBIND_SELECT:
+		close();
+		castSpell();
+		return true;
 
-		if (charNum < g_globals->_party.size())
-			selectChar(charNum);
+	case KEYBIND_VIEW_PARTY1:
+	case KEYBIND_VIEW_PARTY2:
+	case KEYBIND_VIEW_PARTY3:
+	case KEYBIND_VIEW_PARTY4:
+	case KEYBIND_VIEW_PARTY5:
+	case KEYBIND_VIEW_PARTY6:
+		// This is unlikely to be triggered. Since normally '1' to '6'
+		// changes the selected character, but in this dialog,
+		// numeric keys are used to select a spell number
+		if (!g_events->isInCombat()) {
+			uint charNum = msg._action - KEYBIND_VIEW_PARTY1;
+
+			if (charNum < g_globals->_party.size())
+				selectChar(charNum);
+			return true;
+		}
 		return true;
+
+	default:
+		break;
 	}
 
 	return false;
@@ -196,7 +216,7 @@ void Spellbook::updateChar() {
 
 	// Update fields
 	const Character &c = *g_globals->_currCharacter;
-	_selectedIndex = (g_events->isInCombat() ? c._combatSpell : c._nonCombatSpell) % 47;
+	_selectedIndex = (g_events->isInCombat() ? c._combatSpell : c._nonCombatSpell) % CATEGORY_SPELLS_COUNT;
 	if (_selectedIndex == -1)
 		_selectedIndex = 0;
 	_topIndex = (_selectedIndex / 10) * 10;
@@ -212,6 +232,35 @@ void Spellbook::updateChar() {
 	redraw();
 }
 
+void Spellbook::castSpell() {
+	Character &c = *g_globals->_currCharacter;
+	int spellIndex = (_isWizard ? CATEGORY_SPELLS_COUNT : 0) + _selectedIndex;
+
+	// Set the selected spell for the character
+	if (g_events->isInCombat())
+		c._combatSpell = spellIndex;
+	else
+		c._nonCombatSpell = spellIndex;
+
+	// Set the spell
+	int lvl, num;
+	getSpellLevelNum(spellIndex, lvl, num);
+	setSpell(&c, lvl, num);
+	assert(getSpellIndex(&c, lvl, num) == spellIndex);
+
+	if (!canCast()) {
+		Common::String msg = getSpellError();
+		warning("TODO: Show error - %s", msg.c_str());
+
+	} else {
+		if (hasCharTarget()) {
+			// TODO: select a character target
+		} else {
+			// TODO: Cast spell
+		}
+	}
+}
+
 } // namespace Spells
 } // namespace ViewsEnh
 } // namespace MM1
diff --git a/engines/mm/mm1/views_enh/spells/spellbook.h b/engines/mm/mm1/views_enh/spells/spellbook.h
index bb2ddeb4b44..fe3594de27e 100644
--- a/engines/mm/mm1/views_enh/spells/spellbook.h
+++ b/engines/mm/mm1/views_enh/spells/spellbook.h
@@ -56,6 +56,11 @@ private:
 	 */
 	void updateChar();
 
+	/**
+	 * Performs the selected spell
+	 */
+	void castSpell();
+
 public:
 	Spellbook();
 	virtual ~Spellbook() {


Commit: 3792c23854b09e65ac34e1ede0e719e43f70811b
    https://github.com/scummvm/scummvm/commit/3792c23854b09e65ac34e1ede0e719e43f70811b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-02-19T22:07:41-08:00

Commit Message:
MM: MM1: Creating base class for views that allow switching character

Changed paths:
  A engines/mm/mm1/views_enh/party_view.cpp
  A engines/mm/mm1/views_enh/party_view.h
    engines/mm/mm1/events.h
    engines/mm/mm1/views_enh/game.cpp
    engines/mm/mm1/views_enh/game_party.cpp
    engines/mm/mm1/views_enh/game_party.h
    engines/mm/mm1/views_enh/spells/cast_spell.cpp
    engines/mm/mm1/views_enh/spells/cast_spell.h
    engines/mm/module.mk


diff --git a/engines/mm/mm1/events.h b/engines/mm/mm1/events.h
index 6dd8a13e98e..c08402d6f24 100644
--- a/engines/mm/mm1/events.h
+++ b/engines/mm/mm1/events.h
@@ -176,6 +176,11 @@ public:
 	int getRandomNumber(int minNumber, int maxNumber);
 	int getRandomNumber(int maxNumber);
 
+	/**
+	 * Gets the element's name
+	 */
+	Common::String getName() const { return _name; }
+
 	/**
 	 * Sets the element's bounds
 	 */
diff --git a/engines/mm/mm1/views_enh/game.cpp b/engines/mm/mm1/views_enh/game.cpp
index 54aa57d4299..6ceed2843c1 100644
--- a/engines/mm/mm1/views_enh/game.cpp
+++ b/engines/mm/mm1/views_enh/game.cpp
@@ -71,21 +71,6 @@ bool Game::msgAction(const ActionMessage &msg) {
 	case KEYBIND_SPELL:
 		addView("CastSpell");
 		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:
-	{
-		uint charNum = msg._action - KEYBIND_VIEW_PARTY1;
-		if (charNum < g_globals->_party.size()) {
-			g_globals->_currCharacter = &g_globals->_party[charNum];
-			addView("CharacterInfo");
-		}
-		return true;
-	}
 	default:
 		break;
 	}
diff --git a/engines/mm/mm1/views_enh/game_party.cpp b/engines/mm/mm1/views_enh/game_party.cpp
index cf76b06451e..6cc9e9e84f3 100644
--- a/engines/mm/mm1/views_enh/game_party.cpp
+++ b/engines/mm/mm1/views_enh/game_party.cpp
@@ -19,7 +19,7 @@
  *
  */
 
-#include "mm/mm1/views_enh/game_party.h"
+#include "mm/mm1/views_enh/game.h"
 #include "mm/mm1/events.h"
 #include "mm/mm1/globals.h"
 
@@ -31,13 +31,13 @@ static const byte CONDITION_COLORS[17] = {
 	9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, 32, 6, 6, 6, 6, 15
 };
 
-const byte FACE_CONDITION_FRAMES[17] = {
+static const byte FACE_CONDITION_FRAMES[17] = {
 	2, 2, 2, 1, 1, 4, 4, 4, 3, 2, 4, 3, 3, 5, 6, 7, 0
 };
 
-const byte CHAR_FACES_X[6] = { 10, 45, 81, 117, 153, 189 };
+static const byte CHAR_FACES_X[6] = { 10, 45, 81, 117, 153, 189 };
 
-const byte HP_BARS_X[6] = { 13, 50, 86, 122, 158, 194 };
+static const byte HP_BARS_X[6] = { 13, 50, 86, 122, 158, 194 };
 
 GameParty::GameParty(UIElement *owner) : TextView("GameParty", owner),
 		_restoreSprites("restorex.icn"),
@@ -106,6 +106,43 @@ bool GameParty::msgGame(const GameMessage &msg) {
 	return false;
 }
 
+bool GameParty::msgMouseDown(const MouseDownMessage &msg) {
+	for (uint i = 0; i < g_globals->_party.size(); ++i) {
+		const Common::Rect r(CHAR_FACES_X[i], 150, CHAR_FACES_X[i] + 30, 180);
+		if (r.contains(msg._pos)) {
+			msgAction(ActionMessage((KeybindingAction)(KEYBIND_VIEW_PARTY1 + i)));
+			return true;
+		}
+	}
+
+	return false;
+}
+
+bool GameParty::msgAction(const ActionMessage &msg) {
+	if (msg._action >= KEYBIND_VIEW_PARTY1 &&
+			msg._action <= KEYBIND_VIEW_PARTY6) {
+		uint charNum = msg._action - KEYBIND_VIEW_PARTY1;
+		if (charNum < g_globals->_party.size()) {
+			// Change the selected character
+			g_globals->_currCharacter = &g_globals->_party[charNum];
+			_highlightOn = true;
+			draw();
+
+			if (dynamic_cast<ViewsEnh::Game *>(g_events->focusedView()) != nullptr) {
+				// Open character info dialog
+				addView("CharacterInfo");
+
+			} else {
+				// Another view is focused, so simply call it to update
+				send(g_events->focusedView()->getName(), GameMessage("UPDATE"));
+			}
+
+			return true;
+		}
+	}
+
+	return false;
+}
 
 } // namespace ViewsEnh
 } // namespace MM1
diff --git a/engines/mm/mm1/views_enh/game_party.h b/engines/mm/mm1/views_enh/game_party.h
index 65a2afd98eb..5085e4e9536 100644
--- a/engines/mm/mm1/views_enh/game_party.h
+++ b/engines/mm/mm1/views_enh/game_party.h
@@ -52,6 +52,10 @@ public:
 	 * Handle game messages
 	 */
 	bool msgGame(const GameMessage &msg) override;
+
+	bool msgMouseDown(const MouseDownMessage &msg) override;
+
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace ViewsEnh
diff --git a/engines/mm/mm1/views_enh/party_view.cpp b/engines/mm/mm1/views_enh/party_view.cpp
new file mode 100644
index 00000000000..83a89e59a17
--- /dev/null
+++ b/engines/mm/mm1/views_enh/party_view.cpp
@@ -0,0 +1,56 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "mm/mm1/views_enh/party_view.h"
+#include "mm/mm1/views_enh/game_party.h"
+#include "mm/mm1/events.h"
+#include "mm/mm1/globals.h"
+#include "mm/mm1/mm1.h"
+
+namespace MM {
+namespace MM1 {
+namespace ViewsEnh {
+
+bool PartyView::msgFocus(const FocusMessage &msg) {
+	// Turn on highlight for selected character
+	if (!g_globals->_currCharacter)
+		g_globals->_currCharacter = &g_globals->_party[0];
+
+	g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)true));
+	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_PARTY_MENUS);
+	return true;
+}
+
+bool PartyView::msgUnfocus(const UnfocusMessage &msg) {
+	// Turn off highlight for selected character
+	g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)false));
+
+	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MENUS);
+	return true;
+}
+
+bool PartyView::msgMouseDown(const MouseDownMessage &msg) {
+	return send("GameParty", msg);
+}
+
+} // namespace ViewsEnh
+} // namespace MM1
+} // namespace MM
diff --git a/engines/mm/mm1/views_enh/party_view.h b/engines/mm/mm1/views_enh/party_view.h
new file mode 100644
index 00000000000..b92bfd54ee3
--- /dev/null
+++ b/engines/mm/mm1/views_enh/party_view.h
@@ -0,0 +1,47 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef MM1_VIEWS_ENH_PARTY_VIEW_H
+#define MM1_VIEWS_ENH_PARTY_VIEW_H
+
+#include "mm/mm1/views_enh/scroll_view.h"
+
+namespace MM {
+namespace MM1 {
+namespace ViewsEnh {
+
+class PartyView : public ScrollView {
+public:
+	PartyView(const Common::String &name) : ScrollView(name) {}
+	PartyView(const Common::String &name, UIElement *owner) :
+		ScrollView(name, owner) {}
+	virtual ~PartyView() {}
+
+	bool msgFocus(const FocusMessage &msg) override;
+	bool msgUnfocus(const UnfocusMessage &msg) override;
+	bool msgMouseDown(const MouseDownMessage &msg) override;
+};
+
+} // namespace ViewsEnh
+} // namespace MM1
+} // namespace MM
+
+#endif
diff --git a/engines/mm/mm1/views_enh/spells/cast_spell.cpp b/engines/mm/mm1/views_enh/spells/cast_spell.cpp
index e77b1a01ae9..ead695e0658 100644
--- a/engines/mm/mm1/views_enh/spells/cast_spell.cpp
+++ b/engines/mm/mm1/views_enh/spells/cast_spell.cpp
@@ -27,7 +27,7 @@ namespace MM1 {
 namespace ViewsEnh {
 namespace Spells {
 
-CastSpell::CastSpell() : ScrollView("CastSpell") {
+CastSpell::CastSpell() : PartyView("CastSpell") {
 	_bounds = Common::Rect(225, 0, 320, 146);
 
 	_icons.load("cast.icn");
@@ -39,21 +39,8 @@ CastSpell::CastSpell() : ScrollView("CastSpell") {
 }
 
 bool CastSpell::msgFocus(const FocusMessage &msg) {
-	// Turn on highlight for selected character
-	if (!g_globals->_currCharacter)
-		g_globals->_currCharacter = &g_globals->_party[0];
+	(void)PartyView::msgFocus(msg);
 	updateSelectedSpell();
-
-	g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)true));
-	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_PARTY_MENUS);
-	return true;
-}
-
-bool CastSpell::msgUnfocus(const UnfocusMessage &msg) {
-	// Turn off highlight for selected character
-	g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)false));
-
-	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MENUS);
 	return true;
 }
 
diff --git a/engines/mm/mm1/views_enh/spells/cast_spell.h b/engines/mm/mm1/views_enh/spells/cast_spell.h
index 5bc9411024d..108f334f118 100644
--- a/engines/mm/mm1/views_enh/spells/cast_spell.h
+++ b/engines/mm/mm1/views_enh/spells/cast_spell.h
@@ -24,7 +24,7 @@
 
 #include "mm/mm1/messages.h"
 #include "mm/mm1/game/spell_casting.h"
-#include "mm/mm1/views_enh/scroll_view.h"
+#include "mm/mm1/views_enh/party_view.h"
 
 namespace MM {
 namespace MM1 {
@@ -34,7 +34,7 @@ namespace Spells {
 /**
  * Dialog for casting a spell
  */
-class CastSpell : public ScrollView, public MM1::Game::SpellCasting {
+class CastSpell : public PartyView, public MM1::Game::SpellCasting {
 private:
 	Shared::Xeen::SpriteResource _icons;
 
@@ -49,7 +49,6 @@ public:
 
 	void draw() override;
 	bool msgFocus(const FocusMessage &msg) override;
-	bool msgUnfocus(const UnfocusMessage &msg) override;
 	bool msgKeypress(const KeypressMessage &msg) override;
 	bool msgAction(const ActionMessage &msg) override;
 	bool msgGame(const GameMessage &msg) override;
diff --git a/engines/mm/module.mk b/engines/mm/module.mk
index 0120fabebcd..d9854c53c10 100644
--- a/engines/mm/module.mk
+++ b/engines/mm/module.mk
@@ -131,6 +131,7 @@ MODULE_OBJS += \
 	mm1/views_enh/main_menu.o \
 	mm1/views_enh/map.o \
 	mm1/views_enh/map_popup.o \
+	mm1/views_enh/party_view.o \
 	mm1/views_enh/quick_ref.o \
 	mm1/views_enh/scroll_popup.o \
 	mm1/views_enh/scroll_text.o \


Commit: e7b6593e7820df89774272d4f24eed7d75e06df7
    https://github.com/scummvm/scummvm/commit/e7b6593e7820df89774272d4f24eed7d75e06df7
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-02-19T22:20:58-08:00

Commit Message:
MM: MM1: CharacterInfo now derives from PartyView class

Changed paths:
    engines/mm/mm1/views_enh/character_info.cpp
    engines/mm/mm1/views_enh/character_info.h
    engines/mm/mm1/views_enh/party_view.cpp
    engines/mm/mm1/views_enh/party_view.h
    engines/mm/mm1/views_enh/spells/cast_spell.cpp


diff --git a/engines/mm/mm1/views_enh/character_info.cpp b/engines/mm/mm1/views_enh/character_info.cpp
index 0a40bab66f2..6c2bbc1dbc0 100644
--- a/engines/mm/mm1/views_enh/character_info.cpp
+++ b/engines/mm/mm1/views_enh/character_info.cpp
@@ -62,7 +62,7 @@ const CharacterInfo::IconPos CharacterInfo::ICONS[CHAR_ICONS_COUNT] = {
 
 
 CharacterInfo::CharacterInfo() :
-		ScrollView("CharacterInfo"), _statInfo("ScrollText") {
+		PartyView("CharacterInfo"), _statInfo("ScrollText") {
 	_bounds = Common::Rect(0, 0, 320, 146);
 	_statInfo.setReduced(true);
 
@@ -82,28 +82,16 @@ CharacterInfo::CharacterInfo() :
 
 bool CharacterInfo::msgFocus(const FocusMessage &msg) {
 	_viewIcon.load("view.icn");
-	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_PARTY_MENUS);
-
-	// Turn on highlight for selected character
-	if (!g_globals->_currCharacter)
-		g_globals->_currCharacter = &g_globals->_party[0];
-	g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)true));
-
 	_cursorCell = 0;
 	showCursor(true);
 	delayFrames(CURSOR_BLINK_FRAMES);
 
-	return ScrollView::msgFocus(msg);
+	return PartyView::msgFocus(msg);
 }
 
 bool CharacterInfo::msgUnfocus(const UnfocusMessage &msg) {
 	_viewIcon.clear();
-
-	// Turn off highlight for selected character
-	g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)false));
-
-	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MENUS);
-	return ScrollView::msgUnfocus(msg);
+	return PartyView::msgUnfocus(msg);
 }
 
 bool CharacterInfo::msgKeypress(const KeypressMessage &msg) {
@@ -156,17 +144,8 @@ bool CharacterInfo::msgAction(const ActionMessage &msg) {
 	if (msg._action == KEYBIND_ESCAPE) {
 		close();
 		return true;
-	} else if (msg._action >= KEYBIND_VIEW_PARTY1 &&
-			msg._action <= KEYBIND_VIEW_PARTY6) {
-		uint charNum = msg._action - KEYBIND_VIEW_PARTY1;
-		if (charNum < g_globals->_party.size()) {
-			g_globals->_currCharacter = &g_globals->_party[
-				msg._action - KEYBIND_VIEW_PARTY1];
-			g_events->findView("GameParty")->draw();
-			redraw();
-		}
-
-		return true;
+	} else {
+		return PartyView::msgAction(msg);
 	}
 
 	return false;
diff --git a/engines/mm/mm1/views_enh/character_info.h b/engines/mm/mm1/views_enh/character_info.h
index 876af592b47..7e01ab8899d 100644
--- a/engines/mm/mm1/views_enh/character_info.h
+++ b/engines/mm/mm1/views_enh/character_info.h
@@ -22,7 +22,7 @@
 #ifndef MM1_VIEWS_ENH_CHARACTER_INFO_H
 #define MM1_VIEWS_ENH_CHARACTER_INFO_H
 
-#include "mm/mm1/views_enh/scroll_view.h"
+#include "mm/mm1/views_enh/party_view.h"
 #include "mm/mm1/views_enh/scroll_popup.h"
 #include "mm/shared/xeen/sprites.h"
 
@@ -32,7 +32,7 @@ namespace ViewsEnh {
 
 #define CHAR_ICONS_COUNT 22
 
-class CharacterInfo : public ScrollView {
+class CharacterInfo : public PartyView {
 	struct IconPos {
 		int _frame; int _x; int _y;
 	};
diff --git a/engines/mm/mm1/views_enh/party_view.cpp b/engines/mm/mm1/views_enh/party_view.cpp
index 83a89e59a17..c93e6f6b2f4 100644
--- a/engines/mm/mm1/views_enh/party_view.cpp
+++ b/engines/mm/mm1/views_enh/party_view.cpp
@@ -34,14 +34,14 @@ bool PartyView::msgFocus(const FocusMessage &msg) {
 	if (!g_globals->_currCharacter)
 		g_globals->_currCharacter = &g_globals->_party[0];
 
-	g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)true));
+	g_events->send("GameParty", GameMessage("CHAR_HIGHLIGHT", (int)true));
 	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_PARTY_MENUS);
 	return true;
 }
 
 bool PartyView::msgUnfocus(const UnfocusMessage &msg) {
 	// Turn off highlight for selected character
-	g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)false));
+	g_events->send("GameParty", GameMessage("CHAR_HIGHLIGHT", (int)false));
 
 	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MENUS);
 	return true;
@@ -51,6 +51,22 @@ bool PartyView::msgMouseDown(const MouseDownMessage &msg) {
 	return send("GameParty", msg);
 }
 
+bool PartyView::msgGame(const GameMessage &msg) {
+	if (msg._name == "UPDATE") {
+		draw();
+		return true;
+	}
+
+	return true;
+}
+
+bool PartyView::msgAction(const ActionMessage &msg) {
+	if (msg._action >= KEYBIND_VIEW_PARTY1 &&
+			msg._action <= KEYBIND_VIEW_PARTY6)
+		return send("GameParty", msg);
+	return false;
+}
+
 } // namespace ViewsEnh
 } // namespace MM1
 } // namespace MM
diff --git a/engines/mm/mm1/views_enh/party_view.h b/engines/mm/mm1/views_enh/party_view.h
index b92bfd54ee3..487a425a7e1 100644
--- a/engines/mm/mm1/views_enh/party_view.h
+++ b/engines/mm/mm1/views_enh/party_view.h
@@ -38,6 +38,8 @@ public:
 	bool msgFocus(const FocusMessage &msg) override;
 	bool msgUnfocus(const UnfocusMessage &msg) override;
 	bool msgMouseDown(const MouseDownMessage &msg) override;
+	bool msgGame(const GameMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace ViewsEnh
diff --git a/engines/mm/mm1/views_enh/spells/cast_spell.cpp b/engines/mm/mm1/views_enh/spells/cast_spell.cpp
index ead695e0658..4b3f02bec57 100644
--- a/engines/mm/mm1/views_enh/spells/cast_spell.cpp
+++ b/engines/mm/mm1/views_enh/spells/cast_spell.cpp
@@ -91,9 +91,9 @@ bool CastSpell::msgKeypress(const KeypressMessage &msg) {
 		// Select a new spell
 		addView("Spellbook");
 		return true;
+	} else {
+		return PartyView::msgKeypress(msg);
 	}
-
-	return false;
 }
 
 bool CastSpell::msgAction(const ActionMessage &msg) {
@@ -101,17 +101,8 @@ bool CastSpell::msgAction(const ActionMessage &msg) {
 		close();
 		return true;
 
-	} else if (msg._action >= KEYBIND_VIEW_PARTY1 &&
-		msg._action <= KEYBIND_VIEW_PARTY6) {
-		uint charNum = msg._action - KEYBIND_VIEW_PARTY1;
-		if (charNum < g_globals->_party.size()) {
-			g_globals->_currCharacter = &g_globals->_party[
-				msg._action - KEYBIND_VIEW_PARTY1];
-			updateSelectedSpell();
-			g_events->send(GameMessage("CHAR_HIGHLIGHT", (int)true));
-			redraw();
-			return true;
-		}
+	} else {
+		return PartyView::msgAction(msg);
 	}
 
 	return false;




More information about the Scummvm-git-logs mailing list