[Scummvm-git-logs] scummvm master -> 7aa9c7a5d463caa4388e1c4411c358622c3a6c7c

dreammaster noreply at scummvm.org
Sun Apr 9 05:49:51 UTC 2023


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

Summary:
66ebb1844c MM: MM1: Fix pressing Enter for text entry
909d362f71 MM: MM1: Map 21 fixes
7aa9c7a5d4 MM: MM1: Fix entering spaces in text responses


Commit: 66ebb1844cfd1e82c344ed98f77e59ce0aa71a5f
    https://github.com/scummvm/scummvm/commit/66ebb1844cfd1e82c344ed98f77e59ce0aa71a5f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-04-08T22:49:41-07:00

Commit Message:
MM: MM1: Fix pressing Enter for text entry

Changed paths:
    engines/mm/mm1/maps/map21.cpp
    engines/mm/mm1/views/maps/answer_entry.cpp
    engines/mm/mm1/views/maps/answer_entry.h


diff --git a/engines/mm/mm1/maps/map21.cpp b/engines/mm/mm1/maps/map21.cpp
index ded82ab1419..6aed3edc9a2 100644
--- a/engines/mm/mm1/maps/map21.cpp
+++ b/engines/mm/mm1/maps/map21.cpp
@@ -132,9 +132,9 @@ void Map21::special02() {
 				}
 			}
 
-			g_events->send(SoundMessage(STRING["maps.map21.not_enough_gold"]));
 			g_maps->_mapPos.y++;
 			g_maps->_currentMap->updateGame();
+			g_events->send(SoundMessage(STRING["maps.map21.not_enough_gold"]));
 		},
 		[]() {
 			g_maps->_mapPos.y++;
diff --git a/engines/mm/mm1/views/maps/answer_entry.cpp b/engines/mm/mm1/views/maps/answer_entry.cpp
index df6e3e827b2..2016230e4ac 100644
--- a/engines/mm/mm1/views/maps/answer_entry.cpp
+++ b/engines/mm/mm1/views/maps/answer_entry.cpp
@@ -48,9 +48,7 @@ void AnswerEntry::draw() {
 
 bool AnswerEntry::msgKeypress(const KeypressMessage &msg) {
 	if (!isDelayActive()) {
-		if (msg.keycode == Common::KEYCODE_RETURN) {
-			answerEntered();
-		} else if (msg.keycode == Common::KEYCODE_SPACE ||
+		if (msg.keycode == Common::KEYCODE_SPACE ||
 			(msg.keycode >= Common::KEYCODE_0 &&
 				msg.keycode <= Common::KEYCODE_z)) {
 			_answer += toupper(msg.ascii);
@@ -68,6 +66,15 @@ bool AnswerEntry::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
+bool AnswerEntry::msgAction(const ActionMessage &msg) {
+	if (!isDelayActive() && msg._action == KEYBIND_SELECT) {
+		answerEntered();
+		return true;
+	}
+
+	return false;
+}
+
 } // namespace Maps
 } // namespace Views
 } // namespace MM1
diff --git a/engines/mm/mm1/views/maps/answer_entry.h b/engines/mm/mm1/views/maps/answer_entry.h
index fc49354478f..65fce3968fe 100644
--- a/engines/mm/mm1/views/maps/answer_entry.h
+++ b/engines/mm/mm1/views/maps/answer_entry.h
@@ -50,6 +50,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


Commit: 909d362f715edb59cc46f1b55065c8f2f7282e13
    https://github.com/scummvm/scummvm/commit/909d362f715edb59cc46f1b55065c8f2f7282e13
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-04-08T22:49:42-07:00

Commit Message:
MM: MM1: Map 21 fixes

Changed paths:
  A engines/mm/mm1/views_enh/interactions/trivia.cpp
  A engines/mm/mm1/views_enh/interactions/trivia.h
    devtools/create_mm/files/mm1/strings_en.yml
    engines/mm/mm1/views_enh/dialogs.h
    engines/mm/mm1/views_enh/interactions/ice_princess.h
    engines/mm/module.mk


diff --git a/devtools/create_mm/files/mm1/strings_en.yml b/devtools/create_mm/files/mm1/strings_en.yml
index cf5766747ca..202ed3eb190 100644
--- a/devtools/create_mm/files/mm1/strings_en.yml
+++ b/devtools/create_mm/files/mm1/strings_en.yml
@@ -1310,6 +1310,8 @@ maps:
 		correct: "Correct! +50 gems"
 		incorrect: "Wrong!"
 		answer: "Answer:> .............."
+	emap21:
+		title: "Trivia Island"
 
 	map22:
 		ambush: "Ambush!"
diff --git a/engines/mm/mm1/views_enh/dialogs.h b/engines/mm/mm1/views_enh/dialogs.h
index eacd4e5254b..341d5f5271c 100644
--- a/engines/mm/mm1/views_enh/dialogs.h
+++ b/engines/mm/mm1/views_enh/dialogs.h
@@ -59,6 +59,7 @@
 #include "mm/mm1/views_enh/interactions/prisoners.h"
 #include "mm/mm1/views_enh/interactions/resistances.h"
 #include "mm/mm1/views_enh/interactions/statue.h"
+#include "mm/mm1/views_enh/interactions/trivia.h"
 #include "mm/mm1/views_enh/interactions/volcano_god.h"
 #include "mm/mm1/views_enh/locations/blacksmith_items.h"
 #include "mm/mm1/views_enh/locations/blacksmith.h"
@@ -81,6 +82,7 @@ private:
 	ViewsEnh::Interactions::IcePrincess _icePrincess;
 	ViewsEnh::Interactions::Resistances _resistances;
 	ViewsEnh::Interactions::Statue _statue;
+	ViewsEnh::Interactions::Trivia _trivia;
 	ViewsEnh::Interactions::VolcanoGod _volcanoGod;
 
 	ViewsEnh::Interactions::ChildPrisoner _childPrisoner;
diff --git a/engines/mm/mm1/views_enh/interactions/ice_princess.h b/engines/mm/mm1/views_enh/interactions/ice_princess.h
index 623f90a616a..c6fe2ab628c 100644
--- a/engines/mm/mm1/views_enh/interactions/ice_princess.h
+++ b/engines/mm/mm1/views_enh/interactions/ice_princess.h
@@ -31,7 +31,6 @@ namespace ViewsEnh {
 namespace Interactions {
 
 class IcePrincess : public InteractionQuery {
-private:
 protected:
 	/**
 	 * Answer entered
diff --git a/engines/mm/mm1/views_enh/interactions/trivia.cpp b/engines/mm/mm1/views_enh/interactions/trivia.cpp
new file mode 100644
index 00000000000..43bb642ef7d
--- /dev/null
+++ b/engines/mm/mm1/views_enh/interactions/trivia.cpp
@@ -0,0 +1,67 @@
+/* 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/interactions/trivia.h"
+#include "mm/mm1/maps/map21.h"
+#include "mm/mm1/globals.h"
+#include "mm/mm1/sound.h"
+
+namespace MM {
+namespace MM1 {
+namespace ViewsEnh {
+namespace Interactions {
+
+Trivia::Trivia() : InteractionQuery("Trivia", 14) {
+	_title = STRING["maps.emap21.title"];
+}
+
+bool Trivia::msgGame(const GameMessage &msg) {
+	if (msg._name == "TRIVIA") {
+		_question = STRING[Common::String::format(
+			"maps.map21.questions.%d", msg._value)];
+		_correctAnswer = STRING[Common::String::format(
+			"maps.map21.answers.%d", msg._value)];
+
+		addText(_question);
+		open();
+		return true;
+	}
+
+	return false;
+}
+
+void Trivia::answerEntered() {
+	if (_answer.equalsIgnoreCase(_correctAnswer)) {
+		send(InfoMessage(STRING["maps.map21.correct"]));
+		g_globals->_party[0]._gems += 50;
+		Sound::sound(SOUND_3);
+
+	} else {
+		g_maps->_mapPos.x = 15;
+		g_maps->_currentMap->updateGame();
+		send(InfoMessage(STRING["maps.map21.incorrect"]));
+	}
+}
+
+} // namespace Interactions
+} // namespace ViewsEnh
+} // namespace MM1
+} // namespace MM
diff --git a/engines/mm/mm1/views_enh/interactions/trivia.h b/engines/mm/mm1/views_enh/interactions/trivia.h
new file mode 100644
index 00000000000..7ab7b8bb8b7
--- /dev/null
+++ b/engines/mm/mm1/views_enh/interactions/trivia.h
@@ -0,0 +1,54 @@
+/* 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_INTERACTIONS_TRIVIA_H
+#define MM1_VIEWS_ENH_INTERACTIONS_TRIVIA_H
+
+#include "mm/mm1/views_enh/interactions/interaction_query.h"
+#include "mm/mm1/data/character.h"
+
+namespace MM {
+namespace MM1 {
+namespace ViewsEnh {
+namespace Interactions {
+
+class Trivia : public InteractionQuery {
+private:
+	Common::String _question, _correctAnswer;
+protected:
+	/**
+	 * Answer entered
+	 */
+	void answerEntered() override;
+
+public:
+	Trivia();
+	virtual ~Trivia() {}
+
+	bool msgGame(const GameMessage &msg) override;
+};
+
+} // namespace Interactions
+} // namespace ViewsEnh
+} // namespace MM1
+} // namespace MM
+
+#endif
diff --git a/engines/mm/module.mk b/engines/mm/module.mk
index d6b1e02869d..a289047fcbe 100644
--- a/engines/mm/module.mk
+++ b/engines/mm/module.mk
@@ -184,6 +184,7 @@ MODULE_OBJS += \
 	mm1/views_enh/interactions/prisoners.o \
 	mm1/views_enh/interactions/resistances.o \
 	mm1/views_enh/interactions/statue.o \
+	mm1/views_enh/interactions/trivia.o \
 	mm1/views_enh/interactions/volcano_god.o \
 	mm1/views_enh/locations/blacksmith.o \
 	mm1/views_enh/locations/blacksmith_items.o \


Commit: 7aa9c7a5d463caa4388e1c4411c358622c3a6c7c
    https://github.com/scummvm/scummvm/commit/7aa9c7a5d463caa4388e1c4411c358622c3a6c7c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-04-08T22:49:42-07:00

Commit Message:
MM: MM1: Fix entering spaces in text responses

Changed paths:
    engines/mm/mm1/metaengine.cpp
    engines/mm/mm1/metaengine.h
    engines/mm/mm1/views/maps/answer_entry.cpp
    engines/mm/mm1/views/maps/answer_entry.h
    engines/mm/mm1/views/text_entry.cpp
    engines/mm/mm1/views/text_entry.h
    engines/mm/mm1/views_enh/text_entry.cpp
    engines/mm/mm1/views_enh/text_entry.h


diff --git a/engines/mm/mm1/metaengine.cpp b/engines/mm/mm1/metaengine.cpp
index cde657821d5..054dc38a6f7 100644
--- a/engines/mm/mm1/metaengine.cpp
+++ b/engines/mm/mm1/metaengine.cpp
@@ -36,6 +36,12 @@ struct KeybindingRecord {
 	const char *_joy;
 };
 
+static const KeybindingRecord MINIMAL_KEYS[] = {
+	// I18N: ESC key
+	{ KEYBIND_ESCAPE, "ESCAPE", _s("Escape"), "ESCAPE", nullptr },
+	{ KEYBIND_NONE, nullptr, nullptr, nullptr, nullptr }
+};
+
 static const KeybindingRecord MENU_KEYS[] = {
 	// I18N: ESC key
 	{ KEYBIND_ESCAPE, "ESCAPE", _s("Escape"), "ESCAPE", nullptr },
@@ -128,6 +134,11 @@ static const KeysRecord MENU_RECORDS[] = {
 	{ nullptr, nullptr, nullptr }
 };
 
+static const KeysRecord MINIMAL_RECORDS[] = {
+	{ "mm1_minimal", _s("Might and Magic 1 - Minimal Keys"), MINIMAL_KEYS },
+	{ nullptr, nullptr, nullptr }
+};
+
 static const KeysRecord PARTY_MENU_RECORDS[] = {
 	{ "mm1", _s("Might and Magic 1 - Menus"), MENU_KEYS },
 	{ "mm1_party", _s("Might and Magic 1 - Party"), PARTY_KEYS },
@@ -147,8 +158,9 @@ static const KeysRecord NORMAL_RECORDS[] = {
 	{ nullptr, nullptr, nullptr }
 };
 
-static const KeysRecord *MODE_RECORDS[5] = {
+static const KeysRecord *MODE_RECORDS[6] = {
 	MENU_RECORDS,
+	MINIMAL_RECORDS,
 	PARTY_MENU_RECORDS,
 	NORMAL_RECORDS,
 	COMBAT_MENU_RECORDS,
diff --git a/engines/mm/mm1/metaengine.h b/engines/mm/mm1/metaengine.h
index 32d602abe0a..82288c9bf64 100644
--- a/engines/mm/mm1/metaengine.h
+++ b/engines/mm/mm1/metaengine.h
@@ -88,6 +88,7 @@ enum KeybindingAction {
 
 enum KeybindingMode {
 	KBMODE_MENUS,       ///< Keys for when showing menus
+	KBMODE_MINIMAL,     ///< Keys for when doing text entry
 	KBMODE_PARTY_MENUS, ///< Keys for menus that allow switching party members
 	KBMODE_NORMAL,      ///< Keys available when normal in-game
 	KBMODE_COMBAT       ///< Keys when in combat mode
diff --git a/engines/mm/mm1/views/maps/answer_entry.cpp b/engines/mm/mm1/views/maps/answer_entry.cpp
index 2016230e4ac..f2cb70148ee 100644
--- a/engines/mm/mm1/views/maps/answer_entry.cpp
+++ b/engines/mm/mm1/views/maps/answer_entry.cpp
@@ -35,9 +35,13 @@ AnswerEntry::AnswerEntry(const Common::String &name,
 }
 
 bool AnswerEntry::msgFocus(const FocusMessage &msg) {
-	_answer = "";
+	TextView::msgFocus(msg);
+
+	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MINIMAL);
 	Sound::sound(SOUND_2);
-	return TextView::msgFocus(msg);
+	_answer = "";
+
+	return true;
 }
 
 void AnswerEntry::draw() {
@@ -48,7 +52,11 @@ void AnswerEntry::draw() {
 
 bool AnswerEntry::msgKeypress(const KeypressMessage &msg) {
 	if (!isDelayActive()) {
-		if (msg.keycode == Common::KEYCODE_SPACE ||
+		if (msg.keycode == Common::KEYCODE_RETURN) {
+			answerEntered();
+			return true;
+
+		} else if (msg.keycode == Common::KEYCODE_SPACE ||
 			(msg.keycode >= Common::KEYCODE_0 &&
 				msg.keycode <= Common::KEYCODE_z)) {
 			_answer += toupper(msg.ascii);
@@ -66,15 +74,6 @@ bool AnswerEntry::msgKeypress(const KeypressMessage &msg) {
 	return true;
 }
 
-bool AnswerEntry::msgAction(const ActionMessage &msg) {
-	if (!isDelayActive() && msg._action == KEYBIND_SELECT) {
-		answerEntered();
-		return true;
-	}
-
-	return false;
-}
-
 } // namespace Maps
 } // namespace Views
 } // namespace MM1
diff --git a/engines/mm/mm1/views/maps/answer_entry.h b/engines/mm/mm1/views/maps/answer_entry.h
index 65fce3968fe..fc49354478f 100644
--- a/engines/mm/mm1/views/maps/answer_entry.h
+++ b/engines/mm/mm1/views/maps/answer_entry.h
@@ -50,7 +50,6 @@ 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/text_entry.cpp b/engines/mm/mm1/views/text_entry.cpp
index a04694d2ce5..1f5f586c8c3 100644
--- a/engines/mm/mm1/views/text_entry.cpp
+++ b/engines/mm/mm1/views/text_entry.cpp
@@ -38,6 +38,13 @@ void TextEntry::display(int x, int y, int maxLen,
 	addView(this);
 }
 
+bool TextEntry::msgFocus(const FocusMessage &msg) {
+	TextView::msgFocus(msg);
+	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MINIMAL);
+
+	return true;
+}
+
 void TextEntry::draw() {
 	drawText();
 	writeChar('_');
diff --git a/engines/mm/mm1/views/text_entry.h b/engines/mm/mm1/views/text_entry.h
index ed7f39fcf4b..c0f136f4589 100644
--- a/engines/mm/mm1/views/text_entry.h
+++ b/engines/mm/mm1/views/text_entry.h
@@ -50,6 +50,7 @@ public:
 	TextEntry() : TextView("TextEntry") {}
 	virtual ~TextEntry() {}
 
+	bool msgFocus(const FocusMessage &msg) override;
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
 	bool msgAction(const ActionMessage &msg) override;
diff --git a/engines/mm/mm1/views_enh/text_entry.cpp b/engines/mm/mm1/views_enh/text_entry.cpp
index 10229729c02..88b4d816b54 100644
--- a/engines/mm/mm1/views_enh/text_entry.cpp
+++ b/engines/mm/mm1/views_enh/text_entry.cpp
@@ -37,6 +37,13 @@ void TextEntry::display(int x, int y, int maxLen,
 	addView(this);
 }
 
+bool TextEntry::msgFocus(const FocusMessage &msg) {
+	TextView::msgFocus(msg);
+	MetaEngine::setKeybindingMode(KeybindingMode::KBMODE_MINIMAL);
+
+	return true;
+}
+
 void TextEntry::draw() {
 	drawText();
 	writeChar('_');
@@ -50,7 +57,12 @@ void TextEntry::drawText() {
 }
 
 bool TextEntry::msgKeypress(const KeypressMessage &msg) {
-	if (msg.keycode == Common::KEYCODE_BACKSPACE &&
+	if (msg.keycode == Common::KEYCODE_RETURN && !_text.empty()) {
+		drawText();
+		close();
+		_enterFn(_text);
+
+	} else if (msg.keycode == Common::KEYCODE_BACKSPACE &&
 			!_text.empty()) {
 		_text.deleteLastChar();
 		redraw();
@@ -78,23 +90,10 @@ bool TextEntry::msgKeypress(const KeypressMessage &msg) {
 }
 
 bool TextEntry::msgAction(const ActionMessage &msg) {
-	switch (msg._action) {
-	case KEYBIND_ESCAPE:
+	if (msg._action == KEYBIND_ESCAPE) {
 		drawText();
 		close();
 		_abortFn();
-		break;
-
-	case KEYBIND_SELECT:
-		if (!_text.empty()) {
-			drawText();
-			close();
-			_enterFn(_text);
-		}
-		break;
-
-	default:
-		break;
 	}
 
 	return true;
diff --git a/engines/mm/mm1/views_enh/text_entry.h b/engines/mm/mm1/views_enh/text_entry.h
index 0c00c1a737d..df04086f037 100644
--- a/engines/mm/mm1/views_enh/text_entry.h
+++ b/engines/mm/mm1/views_enh/text_entry.h
@@ -50,6 +50,7 @@ public:
 	TextEntry() : TextView("TextEntry") {}
 	virtual ~TextEntry() {}
 
+	bool msgFocus(const FocusMessage &msg) override;
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
 	bool msgAction(const ActionMessage &msg) override;




More information about the Scummvm-git-logs mailing list