[Scummvm-git-logs] scummvm master -> 4113595b5444f1f0340361a6bb45b76f6c1bc3ec

dreammaster noreply at scummvm.org
Sat Mar 11 06:26:48 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:
7ab7faf1dc MM: MM1: Fixes for trap display
4113595b54 MM: MM1: Fixes for search view


Commit: 7ab7faf1dc04d807ce87fff86541861169389f5b
    https://github.com/scummvm/scummvm/commit/7ab7faf1dc04d807ce87fff86541861169389f5b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-10T22:26:42-08:00

Commit Message:
MM: MM1: Fixes for trap display

Changed paths:
    engines/mm/mm1/views/trap.cpp
    engines/mm/mm1/views/trap.h
    engines/mm/mm1/views_enh/trap.cpp
    engines/mm/mm1/views_enh/trap.h
    engines/mm/mm1/views_enh/who_will_try.cpp


diff --git a/engines/mm/mm1/views/trap.cpp b/engines/mm/mm1/views/trap.cpp
index bd93e11e727..d7427614757 100644
--- a/engines/mm/mm1/views/trap.cpp
+++ b/engines/mm/mm1/views/trap.cpp
@@ -34,11 +34,7 @@ Trap::Trap() : TextView("Trap") {
 bool Trap::msgGame(const GameMessage &msg) {
 	if (msg._name == "TRIGGER") {
 		open();
-		g_globals->_treasure._container =
-			g_maps->_currentMap->dataByte(Maps::MAP_49);
-		g_globals->_currCharacter = &g_globals->_party[0];
-
-		Sound::sound(SOUND_2);
+		trigger();
 		return true;
 
 	} else if (msg._name == "TRAP") {
@@ -62,6 +58,9 @@ void Trap::draw() {
 }
 
 bool Trap::msgKeypress(const KeypressMessage &msg) {
+	if (endDelay())
+		return true;
+
 	if (_mode == MODE_TRIGGER) {
 		trap();
 	} else {
@@ -72,6 +71,9 @@ bool Trap::msgKeypress(const KeypressMessage &msg) {
 }
 
 bool Trap::msgAction(const ActionMessage &msg) {
+	if (endDelay())
+		return true;
+
 	if (_mode == MODE_TRIGGER) {
 		trap();
 	} else {
@@ -88,6 +90,20 @@ void Trap::trap() {
 	draw();
 }
 
+void Trap::trigger() {
+	_mode = MODE_TRIGGER;
+	g_globals->_treasure._container =
+		g_maps->_currentMap->dataByte(Maps::MAP_49);
+	g_globals->_currCharacter = &g_globals->_party[0];
+
+	Sound::sound(SOUND_2);
+	delaySeconds(2);
+}
+
+void Trap::timeout() {
+	trap();
+}
+
 } // namespace Views
 } // namespace MM1
 } // namespace MM
diff --git a/engines/mm/mm1/views/trap.h b/engines/mm/mm1/views/trap.h
index 4589ff1b564..c9ef7e2cebb 100644
--- a/engines/mm/mm1/views/trap.h
+++ b/engines/mm/mm1/views/trap.h
@@ -35,6 +35,7 @@ private:
 	Mode _mode = MODE_TRIGGER;
 protected:
 	void trap() override;
+	void trigger();
 
 public:
 	Trap();
@@ -44,6 +45,7 @@ public:
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
 	bool msgAction(const ActionMessage &msg) override;
+	void timeout() override;
 };
 
 } // namespace Views
diff --git a/engines/mm/mm1/views_enh/trap.cpp b/engines/mm/mm1/views_enh/trap.cpp
index 62071a1a51d..8144b758f82 100644
--- a/engines/mm/mm1/views_enh/trap.cpp
+++ b/engines/mm/mm1/views_enh/trap.cpp
@@ -34,11 +34,7 @@ Trap::Trap() : ScrollView("Trap") {
 bool Trap::msgGame(const GameMessage &msg) {
 	if (msg._name == "TRIGGER") {
 		open();
-		g_globals->_treasure._container =
-			g_maps->_currentMap->dataByte(Maps::MAP_49);
-		g_globals->_currCharacter = &g_globals->_party[0];
-
-		Sound::sound(SOUND_2);
+		trigger();
 		return true;
 
 	} else if (msg._name == "TRAP") {
@@ -61,6 +57,9 @@ void Trap::draw() {
 }
 
 bool Trap::msgKeypress(const KeypressMessage &msg) {
+	if (endDelay())
+		return true;
+
 	if (_mode == MODE_TRIGGER) {
 		trap();
 	} else {
@@ -71,6 +70,9 @@ bool Trap::msgKeypress(const KeypressMessage &msg) {
 }
 
 bool Trap::msgAction(const ActionMessage &msg) {
+	if (endDelay())
+		return true;
+
 	if (_mode == MODE_TRIGGER) {
 		trap();
 	} else {
@@ -87,6 +89,20 @@ void Trap::trap() {
 	draw();
 }
 
+void Trap::trigger() {
+	_mode = MODE_TRIGGER;
+	g_globals->_treasure._container =
+		g_maps->_currentMap->dataByte(Maps::MAP_49);
+	g_globals->_currCharacter = &g_globals->_party[0];
+
+	Sound::sound(SOUND_2);
+	delaySeconds(2);
+}
+
+void Trap::timeout() {
+	trap();
+}
+
 } // namespace ViewsEnh
 } // namespace MM1
 } // namespace MM
diff --git a/engines/mm/mm1/views_enh/trap.h b/engines/mm/mm1/views_enh/trap.h
index 40af9129786..f0309fc3fe7 100644
--- a/engines/mm/mm1/views_enh/trap.h
+++ b/engines/mm/mm1/views_enh/trap.h
@@ -35,6 +35,7 @@ private:
 	Mode _mode = MODE_TRIGGER;
 protected:
 	void trap() override;
+	void trigger();
 
 public:
 	Trap();
@@ -44,6 +45,7 @@ public:
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
 	bool msgAction(const ActionMessage &msg) override;
+	void timeout() override;
 };
 
 } // namespace ViewsEnh
diff --git a/engines/mm/mm1/views_enh/who_will_try.cpp b/engines/mm/mm1/views_enh/who_will_try.cpp
index 113975ad7bb..28d90f0cfa1 100644
--- a/engines/mm/mm1/views_enh/who_will_try.cpp
+++ b/engines/mm/mm1/views_enh/who_will_try.cpp
@@ -69,6 +69,7 @@ void WhoWillTry::draw() {
 bool WhoWillTry::msgAction(const ActionMessage &msg) {
 	if (msg._action == KEYBIND_ESCAPE) {
 		close();
+		_callback(-1);
 		return true;
 	} else if (msg._action >= KEYBIND_VIEW_PARTY1 &&
 		msg._action <= KEYBIND_VIEW_PARTY6) {


Commit: 4113595b5444f1f0340361a6bb45b76f6c1bc3ec
    https://github.com/scummvm/scummvm/commit/4113595b5444f1f0340361a6bb45b76f6c1bc3ec
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-10T22:26:42-08:00

Commit Message:
MM: MM1: Fixes for search view

Changed paths:
    devtools/create_mm/files/mm1/strings_en.yml
    engines/mm/mm1/views_enh/search.cpp
    engines/mm/mm1/views_enh/search.h
    engines/mm/mm1/views_enh/who_will_try.cpp
    engines/mm/mm1/views_enh/who_will_try.h


diff --git a/devtools/create_mm/files/mm1/strings_en.yml b/devtools/create_mm/files/mm1/strings_en.yml
index 3ef7712368a..c39648d587f 100644
--- a/devtools/create_mm/files/mm1/strings_en.yml
+++ b/devtools/create_mm/files/mm1/strings_en.yml
@@ -168,7 +168,6 @@ dialogs:
 		bad_class: "*** Bad class ***"
 		no_sp: "*** No spell points ***"
 		magic_trap: "Magic (%c)  Trap (%c)"
-		check_condition: "*** Check condition ***"
 		it_opens: "It opens!"
 		receives: "receives"
 		each_share: "each share is worth %d gold"
@@ -314,6 +313,7 @@ dialogs:
 		some_characters: "Available characters"
 		full: "*** Backpack full ***"
 		who_will_try: "Who will try '1'-'%c'"
+		check_condition: "*** Check condition ***"
 	spells:
 		detect_charges: "magic (charges)"
 		fly_to_x: "fly to (a-e): "
diff --git a/engines/mm/mm1/views_enh/search.cpp b/engines/mm/mm1/views_enh/search.cpp
index d783b79bf28..f8163669c37 100644
--- a/engines/mm/mm1/views_enh/search.cpp
+++ b/engines/mm/mm1/views_enh/search.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mm/mm1/views_enh/search.h"
+#include "mm/mm1/views_enh/who_will_try.h"
 #include "mm/mm1/globals.h"
 #include "mm/mm1/sound.h"
 
@@ -28,9 +29,9 @@ namespace MM1 {
 namespace ViewsEnh {
 
 Search::Search() : ScrollView("Search") {
-	_bounds = Common::Rect(234, 144, 320, 200);
+	_bounds = Common::Rect(0, 144, 234, 200);
 	_escSprite.load("esc.icn");
-	addButton(&_escSprite, Common::Point(120, 172), 0, KEYBIND_ESCAPE, true);
+	addButton(&_escSprite, Common::Point(79, 30), 0, KEYBIND_ESCAPE, true);
 }
 
 bool Search::msgGame(const GameMessage &msg) {
@@ -54,6 +55,7 @@ bool Search::msgGame(const GameMessage &msg) {
 
 bool Search::msgFocus(const FocusMessage &msg) {
 	_lineNum = 0;
+	_bounds = Common::Rect(0, 144, 234, 200);
 
 	if (_mode == FOCUS_GET_TREASURE) {
 		// Returning from trap display
@@ -70,8 +72,9 @@ bool Search::msgFocus(const FocusMessage &msg) {
 
 void Search::draw() {
 	Common::String line;
-	//if (_mode != GET_ITEMS)
 	setButtonEnabled(0, _mode == OPTIONS);
+
+	//if (_mode != GET_ITEMS)
 	ScrollView::draw();
 
 	switch (_mode) {
@@ -79,16 +82,16 @@ void Search::draw() {
 		Sound::sound(SOUND_2);
 		line = STRING["dialogs.search.search"] +
 			STRING["dialogs.search.you_found"];
-		writeString(line);
+		writeString(0, 0, line);
 		delaySeconds(2);
 		break;
 
 	case OPTIONS:
 		writeString(0, 0, STRING["dialogs.search.options"]);
-		writeString(160, 0, STRING["dialogs.search.options1"]);
-		writeString(160, 9, STRING["dialogs.search.options2"]);
-		writeString(160, 18, STRING["dialogs.search.options3"]);
-		writeString(140, 30, STRING["enhdialogs.misc.go_back"]);
+		writeString(80, 0, STRING["dialogs.search.options1"]);
+		writeString(80, 9, STRING["dialogs.search.options2"]);
+		writeString(80, 18, STRING["dialogs.search.options3"]);
+		writeString(96, 32, STRING["enhdialogs.misc.go_back"]);
 		break;
 
 	case GET_TREASURE:
@@ -100,15 +103,6 @@ void Search::draw() {
 		drawItem();
 		break;
 
-	case WHO_WILL_TRY: {
-		line = Common::String::format(
-			STRING["dialogs.misc.who_will_try"].c_str(),
-			'0' + g_globals->_party.size()
-		);
-		writeString(10, 1, line);
-		break;
-	}
-
 	default:
 		break;
 	}
@@ -143,25 +137,6 @@ bool Search::msgKeypress(const KeypressMessage &msg) {
 		endDelay();
 		break;
 
-	case WHO_WILL_TRY:
-		if (msg.keycode >= Common::KEYCODE_1 &&
-			msg.keycode <= (Common::KEYCODE_0 + (int)g_globals->_party.size())) {
-			// Character selected
-			g_globals->_currCharacter = &g_globals->_party[
-				msg.keycode - Common::KEYCODE_1];
-			if ((g_globals->_currCharacter->_condition &
-				(BAD_CONDITION | DEAD | STONE | ASLEEP)) != 0) {
-				clearSurface();
-				writeString(3, 2, STRING["dialogs.search.check_condition"]);
-				delaySeconds(4);
-			} else if (_removing) {
-				findRemoveTrap2();
-			} else {
-				openContainer2();
-			}
-		}
-		break;
-
 	case GET_TREASURE:
 		break;
 
@@ -181,10 +156,6 @@ bool Search::msgAction(const ActionMessage &msg) {
 		case OPTIONS:
 			close();
 			break;
-		case WHO_WILL_TRY:
-			_mode = OPTIONS;
-			draw();
-			break;
 		default:
 			break;
 		}
@@ -225,10 +196,6 @@ void Search::timeout() {
 		draw();
 		break;
 
-	case WHO_WILL_TRY:
-		draw();
-		break;
-
 	case GET_TREASURE:
 		_mode = GET_ITEMS;
 		draw();
@@ -326,15 +293,35 @@ bool Search::whoWillTry() {
 		return true;
 	} else {
 		// Switch to mode to ask which character to use
-		_mode = WHO_WILL_TRY;
-		draw();
+		WhoWillTry::display([](int charNum) {
+			static_cast<Search *>(g_events->findView("Search"))->whoWillTry(charNum);
+		});
 		return false;
 	}
 }
 
+void Search::whoWillTry(int charNum) {
+	if (charNum == -1) {
+		// Character selection aborted, go back to options
+		_mode = OPTIONS;
+
+	} else {
+		// Character selected, proceed with given action
+		g_globals->_currCharacter = &g_globals->_party[charNum];
+
+		if (_removing) {
+			findRemoveTrap2();
+		} else {
+			openContainer2();
+		}
+	}
+
+	open();
+}
+
 void Search::getTreasure() {
 	_mode = GET_TREASURE;
-	_bounds = getLineBounds(17, 24);
+	_bounds = Common::Rect(0, 144, 234, 200);
 
 	// Display a graphic for the container type
 	int gfxNum = g_globals->_treasure._container < WOODEN_BOX ? 3 : 1;
diff --git a/engines/mm/mm1/views_enh/search.h b/engines/mm/mm1/views_enh/search.h
index b02c1d5d198..dc04fe703e5 100644
--- a/engines/mm/mm1/views_enh/search.h
+++ b/engines/mm/mm1/views_enh/search.h
@@ -31,9 +31,8 @@ namespace ViewsEnh {
 class Search : public ScrollView {
 private:
 	enum Mode {
-		INITIAL, OPTIONS, RESPONSE, WHO_WILL_TRY,
-		FOCUS_GET_TREASURE, GET_TREASURE, GET_ITEMS,
-		GET_ITEMS_DONE
+		INITIAL, OPTIONS, RESPONSE, FOCUS_GET_TREASURE,
+		GET_TREASURE, GET_ITEMS, GET_ITEMS_DONE
 	};
 	Mode _mode = INITIAL;
 	bool _removing = false;
@@ -88,6 +87,11 @@ public:
 	bool msgKeypress(const KeypressMessage &msg) override;
 	bool msgAction(const ActionMessage &msg) override;
 	void timeout() override;
+
+	/**
+	 * Called after a selection of who will try is done
+	 */
+	void whoWillTry(int charNum);
 };
 
 } // namespace ViewsEnh
diff --git a/engines/mm/mm1/views_enh/who_will_try.cpp b/engines/mm/mm1/views_enh/who_will_try.cpp
index 28d90f0cfa1..0ea9a3c352a 100644
--- a/engines/mm/mm1/views_enh/who_will_try.cpp
+++ b/engines/mm/mm1/views_enh/who_will_try.cpp
@@ -71,14 +71,11 @@ bool WhoWillTry::msgAction(const ActionMessage &msg) {
 		close();
 		_callback(-1);
 		return true;
+
 	} else if (msg._action >= KEYBIND_VIEW_PARTY1 &&
 		msg._action <= KEYBIND_VIEW_PARTY6) {
 		int charNum = msg._action - KEYBIND_VIEW_PARTY1;
-
-		if (charNum < (int)g_globals->_party.size()) {
-			close();
-			_callback(charNum);
-		}
+		selectChar(charNum);
 
 		return true;
 	}
@@ -86,6 +83,28 @@ bool WhoWillTry::msgAction(const ActionMessage &msg) {
 	return PartyView::msgAction(msg);
 }
 
+void WhoWillTry::selectChar(uint charNum) {
+	if (charNum < g_globals->_party.size()) {
+		close();
+
+		const Character &c = g_globals->_party[charNum];
+
+		if ((c._condition & (BAD_CONDITION | DEAD | STONE | ASLEEP)) != 0) {
+			InfoMessage msg(STRING["dialogs.misc.check_condition"], ALIGN_MIDDLE);
+			msg._delaySeconds = 3;
+			msg._timeoutCallback = []() {
+				WhoWillTry *view = static_cast<WhoWillTry *>(g_events->findView("WhoWillTry"));
+				view->_callback(-1);
+			};
+			send(msg);
+
+		} else {
+			// Pass back that a valid character was selected
+			_callback(charNum);
+		}
+	}
+}
+
 } // namespace ViewsEnh
 } // namespace MM1
 } // namespace MM
diff --git a/engines/mm/mm1/views_enh/who_will_try.h b/engines/mm/mm1/views_enh/who_will_try.h
index 706f8754cdc..9e354021ba2 100644
--- a/engines/mm/mm1/views_enh/who_will_try.h
+++ b/engines/mm/mm1/views_enh/who_will_try.h
@@ -34,6 +34,8 @@ class WhoWillTry : public PartyView {
 private:
 	WhoWillProc _callback = nullptr;
 
+	void selectChar(uint charNum);
+
 protected:
 	/**
 	 * Return true if a character should be selected by default




More information about the Scummvm-git-logs mailing list