[Scummvm-git-logs] scummvm master -> 2cd03b2e71b726b080cb522b2bbfe855d6eea2bb

dreammaster noreply at scummvm.org
Mon Mar 13 04:59:47 UTC 2023


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

Summary:
10d32d66e7 MM: MM1: Adding numeric choice side subview
f4ef23d2fb MM: MM1: Fix search to show character selection
e73a9c317e MM: MM1: Properly erase numeric choice side view after closing
7c57447b46 MM: MM1: Fix display of center/right aligned messages
bdc286be8c MM: MM1: Add timeout delay for trap damage message
57a8d2d8bd MM: MM1: Add missing character select for detecting magic in Search
2cd03b2e71 MM: MM1: Properly handle getting treasure after trap msg display


Commit: 10d32d66e7a35334d08976538e7eff05fb03a80b
    https://github.com/scummvm/scummvm/commit/10d32d66e7a35334d08976538e7eff05fb03a80b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-12T21:59:11-07:00

Commit Message:
MM: MM1: Adding numeric choice side subview

Changed paths:
  A engines/mm/mm1/views_enh/select_number.cpp
  A engines/mm/mm1/views_enh/select_number.h
    engines/mm/mm1/views_enh/search.cpp
    engines/mm/mm1/views_enh/search.h
    engines/mm/module.mk


diff --git a/engines/mm/mm1/views_enh/search.cpp b/engines/mm/mm1/views_enh/search.cpp
index f8163669c37..a807d3bb710 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/select_number.h"
 #include "mm/mm1/views_enh/who_will_try.h"
 #include "mm/mm1/globals.h"
 #include "mm/mm1/sound.h"
@@ -28,7 +29,7 @@ namespace MM {
 namespace MM1 {
 namespace ViewsEnh {
 
-Search::Search() : ScrollView("Search") {
+Search::Search() : SelectNumber("Search") {
 	_bounds = Common::Rect(0, 144, 234, 200);
 	_escSprite.load("esc.icn");
 	addButton(&_escSprite, Common::Point(79, 30), 0, KEYBIND_ESCAPE, true);
@@ -64,7 +65,7 @@ bool Search::msgFocus(const FocusMessage &msg) {
 
 		getTreasure();
 	} else {
-		_mode = INITIAL;
+		setMode(INITIAL);
 	}
 
 	return true;
@@ -75,7 +76,7 @@ void Search::draw() {
 	setButtonEnabled(0, _mode == OPTIONS);
 
 	//if (_mode != GET_ITEMS)
-	ScrollView::draw();
+	SelectNumber::draw();
 
 	switch (_mode) {
 	case INITIAL:
@@ -120,12 +121,15 @@ bool Search::msgKeypress(const KeypressMessage &msg) {
 	case OPTIONS:
 		switch (msg.keycode) {
 		case Common::KEYCODE_1:
+			closeNumbers();
 			openContainer();
 			break;
 		case Common::KEYCODE_2:
+			closeNumbers();
 			findRemoveTrap();
 			break;
 		case Common::KEYCODE_3:
+			closeNumbers();
 			detectMagicTrap();
 			break;
 		default:
@@ -187,17 +191,17 @@ void Search::timeout() {
 		int gfxNum = g_globals->_treasure._container < WOODEN_BOX ? 4 : 2;
 		send("View", DrawGraphicMessage(gfxNum + 65));
 
-		_mode = OPTIONS;
+		setMode(OPTIONS);
 		draw();
 		break;
 	}
 	case RESPONSE:
-		_mode = OPTIONS;
+		setMode(OPTIONS);
 		draw();
 		break;
 
 	case GET_TREASURE:
-		_mode = GET_ITEMS;
+		setMode(GET_ITEMS);
 		draw();
 		break;
 
@@ -228,7 +232,7 @@ void Search::openContainer2() {
 
 		if (getRandomNumber(thresold + 5) < thresold) {
 			// Triggered a trap
-			_mode = FOCUS_GET_TREASURE;
+			setMode(FOCUS_GET_TREASURE);
 			g_events->send("Trap", GameMessage("TRAP"));
 			return;
 		}
@@ -258,7 +262,7 @@ void Search::findRemoveTrap2() {
 
 void Search::detectMagicTrap() {
 	Character &c = *g_globals->_currCharacter;
-	_mode = RESPONSE;
+	setMode(RESPONSE);
 
 	if (c._class == PALADIN || c._class == CLERIC) {
 		Sound::sound(SOUND_2);
@@ -303,7 +307,7 @@ bool Search::whoWillTry() {
 void Search::whoWillTry(int charNum) {
 	if (charNum == -1) {
 		// Character selection aborted, go back to options
-		_mode = OPTIONS;
+		setMode(OPTIONS);
 
 	} else {
 		// Character selected, proceed with given action
@@ -320,7 +324,7 @@ void Search::whoWillTry(int charNum) {
 }
 
 void Search::getTreasure() {
-	_mode = GET_TREASURE;
+	setMode(GET_TREASURE);
 	_bounds = Common::Rect(0, 144, 234, 200);
 
 	// Display a graphic for the container type
@@ -405,10 +409,17 @@ void Search::drawItem() {
 	// At this point we've either displayed the up to 3 item
 	// lines (in addition to gold and/or gems), or the party's
 	// backpacks were completely full up. Wait for 7 seconds
-	_mode = GET_ITEMS_DONE;
+	setMode(GET_ITEMS_DONE);
 	delaySeconds(7);
 }
 
+void Search::setMode(Mode mode) {
+	_mode = mode;
+
+	if (_mode == OPTIONS)
+		openNumbers(3);
+}
+
 } // namespace ViewsEnh
 } // namespace MM1
 } // namespace MM
diff --git a/engines/mm/mm1/views_enh/search.h b/engines/mm/mm1/views_enh/search.h
index dc04fe703e5..ed6804e773a 100644
--- a/engines/mm/mm1/views_enh/search.h
+++ b/engines/mm/mm1/views_enh/search.h
@@ -22,13 +22,13 @@
 #ifndef MM1_VIEWS_ENH_SEARCH_H
 #define MM1_VIEWS_ENH_SEARCH_H
 
-#include "mm/mm1/views_enh/scroll_view.h"
+#include "mm/mm1/views_enh/select_number.h"
 
 namespace MM {
 namespace MM1 {
 namespace ViewsEnh {
 
-class Search : public ScrollView {
+class Search : public SelectNumber {
 private:
 	enum Mode {
 		INITIAL, OPTIONS, RESPONSE, FOCUS_GET_TREASURE,
@@ -40,6 +40,8 @@ private:
 	int _lineNum = 0;
 	Shared::Xeen::SpriteResource _escSprite;
 
+	void setMode(Mode mode);
+
 	/**
 	 * Open the container
 	 */
diff --git a/engines/mm/mm1/views_enh/select_number.cpp b/engines/mm/mm1/views_enh/select_number.cpp
new file mode 100644
index 00000000000..40a2f180da6
--- /dev/null
+++ b/engines/mm/mm1/views_enh/select_number.cpp
@@ -0,0 +1,112 @@
+/* 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/select_number.h"
+#include "mm/mm1/globals.h"
+#include "mm/mm1/sound.h"
+
+namespace MM {
+namespace MM1 {
+namespace ViewsEnh {
+
+void SelectNumber::openNumbers(int maxNum) {
+	_subView.open(maxNum, [](int choiceNum) {
+		g_events->send(KeypressMessage(Common::KeyState(
+			(Common::KeyCode)(Common::KEYCODE_0 + choiceNum),
+			'0' + choiceNum
+		)));
+	});
+}
+
+bool SelectNumber::msgMouseDown(const MouseDownMessage &msg) {
+	if (_subView.msgMouseDown(msg))
+		return true;
+
+	return false;
+}
+
+/*------------------------------------------------------------------------*/
+
+SelectNumberSubview::SelectNumberSubview() : ScrollView("SelectNumberSubview") {
+	_bounds = Common::Rect(234, 144, 320, 200);
+
+	// Get the Escape glyph we'll use as a base
+	Shared::Xeen::SpriteResource escSprite;
+	escSprite.load("esc.icn");
+	_button.create(20, 20);
+	_button.clear(255);
+	_button.setTransparentColor(255);
+	escSprite.draw(&_button, 0, Common::Point(0, 0));
+	_button.fillRect(Common::Rect(2, 2, 18, 18), 0x9f);
+}
+
+void SelectNumberSubview::open(int maxNum, SelectNumberProc callback) {
+	assert(maxNum <= 6);
+	_maxNumber = maxNum;
+	_callback = callback;
+
+	draw();
+}
+
+void SelectNumberSubview::close() {
+	_maxNumber = 0;
+	g_events->redraw();
+}
+
+void SelectNumberSubview::draw() {
+	if (_maxNumber == 0)
+		return;
+
+	ScrollView::draw();
+	Graphics::ManagedSurface s = getSurface();
+
+	for (int i = 0; i < _maxNumber; ++i) {
+		
+		s.blitFrom(_button, Common::Point((i % 3) * 22 + 8,
+			(i / 3) * 22 + 4));
+		writeString((i % 3) * 22 + 10, (i / 3) * 22 + 2,
+			Common::String::format("%d", i + 1), ALIGN_MIDDLE);
+	}
+}
+
+bool SelectNumberSubview::msgMouseDown(const MouseDownMessage &msg) {
+	if (_maxNumber == 0)
+		return false;
+
+	Common::Rect r(0, 0, 20, 20);
+
+	for (int i = 0; i < _maxNumber; ++i) {
+		r.moveTo(Common::Point((i % 3) * 22 + _innerBounds.left,
+			(i / 3) * 22 + _innerBounds.top));
+
+		if (r.contains(msg._pos)) {
+			close();
+			_callback(i + 1);
+			return true;
+		}
+	}
+
+	return false;
+}
+
+} // namespace ViewsEnh
+} // namespace MM1
+} // namespace MM
diff --git a/engines/mm/mm1/views_enh/select_number.h b/engines/mm/mm1/views_enh/select_number.h
new file mode 100644
index 00000000000..5a663bffbac
--- /dev/null
+++ b/engines/mm/mm1/views_enh/select_number.h
@@ -0,0 +1,79 @@
+/* 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_SELECT_NUMBER_H
+#define MM1_VIEWS_ENH_SELECT_NUMBER_H
+
+#include "mm/mm1/views_enh/scroll_view.h"
+#include "mm/shared/xeen/sprites.h"
+
+namespace MM {
+namespace MM1 {
+namespace ViewsEnh {
+
+typedef void (*SelectNumberProc)(int choiceNum);
+
+class SelectNumberSubview : public ScrollView {
+private:
+	SelectNumberProc _callback = nullptr;
+	Graphics::ManagedSurface _button;
+	int _maxNumber = 0;
+
+public:
+	SelectNumberSubview();
+	virtual ~SelectNumberSubview() {}
+
+	void open(int maxNum, SelectNumberProc callback);
+	void close();
+
+	void draw() override;
+	bool msgMouseDown(const MouseDownMessage &msg) override;
+};
+
+class SelectNumber : public ScrollView {
+private:
+	SelectNumberSubview _subView;
+
+protected:
+	/**
+	 * Start displaying the numeric choices subview
+	 */
+	void openNumbers(int maxNum);
+
+	/**
+	 * Stop displaying the numeric choices subview
+	 */
+	void closeNumbers() {
+		_subView.close();
+	}
+
+public:
+	SelectNumber(const Common::String &name) : ScrollView(name) {}
+	virtual ~SelectNumber() {}
+
+	bool msgMouseDown(const MouseDownMessage &msg) override;
+};
+
+} // namespace ViewsEnh
+} // namespace MM1
+} // namespace MM
+
+#endif
diff --git a/engines/mm/module.mk b/engines/mm/module.mk
index 34897efa974..2c5204ec6fc 100644
--- a/engines/mm/module.mk
+++ b/engines/mm/module.mk
@@ -147,6 +147,7 @@ MODULE_OBJS += \
 	mm1/views_enh/scroll_text.o \
 	mm1/views_enh/scroll_view.o \
 	mm1/views_enh/search.o \
+	mm1/views_enh/select_number.o \
 	mm1/views_enh/text_entry.o \
 	mm1/views_enh/text_view.o \
 	mm1/views_enh/title.o \


Commit: f4ef23d2fbb835948ec18b99e2929fb4d5de05a8
    https://github.com/scummvm/scummvm/commit/f4ef23d2fbb835948ec18b99e2929fb4d5de05a8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-12T21:59:11-07:00

Commit Message:
MM: MM1: Fix search to show character selection

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


diff --git a/engines/mm/mm1/views/search.cpp b/engines/mm/mm1/views/search.cpp
index 9b19fdff1b0..5bac6d0fb8c 100644
--- a/engines/mm/mm1/views/search.cpp
+++ b/engines/mm/mm1/views/search.cpp
@@ -247,7 +247,7 @@ void Search::timeout() {
 
 void Search::openContainer() {
 	_removing = false;
-	if (!whoWillTry())
+	if (whoWillTry())
 		openContainer2();
 }
 
@@ -270,7 +270,7 @@ void Search::openContainer2() {
 
 void Search::findRemoveTrap() {
 	_removing = true;
-	if (!whoWillTry())
+	if (whoWillTry())
 		findRemoveTrap2();
 }
 
diff --git a/engines/mm/mm1/views_enh/search.cpp b/engines/mm/mm1/views_enh/search.cpp
index a807d3bb710..6f5d9f96c50 100644
--- a/engines/mm/mm1/views_enh/search.cpp
+++ b/engines/mm/mm1/views_enh/search.cpp
@@ -220,7 +220,7 @@ void Search::timeout() {
 
 void Search::openContainer() {
 	_removing = false;
-	if (!whoWillTry())
+	if (whoWillTry())
 		openContainer2();
 }
 
@@ -243,7 +243,7 @@ void Search::openContainer2() {
 
 void Search::findRemoveTrap() {
 	_removing = true;
-	if (!whoWillTry())
+	if (whoWillTry())
 		findRemoveTrap2();
 }
 


Commit: e73a9c317ecb4fbeef5fe2a31e93fae8198909b5
    https://github.com/scummvm/scummvm/commit/e73a9c317ecb4fbeef5fe2a31e93fae8198909b5
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-12T21:59:12-07:00

Commit Message:
MM: MM1: Properly erase numeric choice side view after closing

Changed paths:
    engines/mm/mm1/events.cpp
    engines/mm/mm1/views_enh/search.cpp


diff --git a/engines/mm/mm1/events.cpp b/engines/mm/mm1/events.cpp
index 4123622563b..92d8bd74320 100644
--- a/engines/mm/mm1/events.cpp
+++ b/engines/mm/mm1/events.cpp
@@ -153,8 +153,9 @@ void Events::popView() {
 	}
 
 	if (!_views.empty()) {
-		focusedView()->msgFocus(FocusMessage(priorView));
-		focusedView()->redraw();
+		UIElement *view = focusedView();
+		view->msgFocus(FocusMessage(priorView));
+		view->draw();
 	}
 }
 
diff --git a/engines/mm/mm1/views_enh/search.cpp b/engines/mm/mm1/views_enh/search.cpp
index 6f5d9f96c50..d87c8c52336 100644
--- a/engines/mm/mm1/views_enh/search.cpp
+++ b/engines/mm/mm1/views_enh/search.cpp
@@ -297,6 +297,7 @@ bool Search::whoWillTry() {
 		return true;
 	} else {
 		// Switch to mode to ask which character to use
+		close();
 		WhoWillTry::display([](int charNum) {
 			static_cast<Search *>(g_events->findView("Search"))->whoWillTry(charNum);
 		});
@@ -305,6 +306,8 @@ bool Search::whoWillTry() {
 }
 
 void Search::whoWillTry(int charNum) {
+	addView();
+
 	if (charNum == -1) {
 		// Character selection aborted, go back to options
 		setMode(OPTIONS);
@@ -319,8 +322,6 @@ void Search::whoWillTry(int charNum) {
 			openContainer2();
 		}
 	}
-
-	open();
 }
 
 void Search::getTreasure() {


Commit: 7c57447b46f26732e69104b43e25842ace6955f8
    https://github.com/scummvm/scummvm/commit/7c57447b46f26732e69104b43e25842ace6955f8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-12T21:59:12-07:00

Commit Message:
MM: MM1: Fix display of center/right aligned messages

Changed paths:
    engines/mm/mm1/messages.cpp


diff --git a/engines/mm/mm1/messages.cpp b/engines/mm/mm1/messages.cpp
index 474e676a56d..19eed73d215 100644
--- a/engines/mm/mm1/messages.cpp
+++ b/engines/mm/mm1/messages.cpp
@@ -46,7 +46,7 @@ InfoMessage::InfoMessage() : Message() {}
 
 InfoMessage::InfoMessage(const Common::String &str,
 		TextAlign align) : Message() {
-	_lines.push_back(Line(str, align));
+	_lines.push_back(Line(0, 0, str, align));
 }
 
 InfoMessage::InfoMessage(int x, int y, const Common::String &str,


Commit: bdc286be8ce7adfc13ba73d854c54384558c976f
    https://github.com/scummvm/scummvm/commit/bdc286be8ce7adfc13ba73d854c54384558c976f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-12T21:59:13-07:00

Commit Message:
MM: MM1: Add timeout delay for trap damage message

Changed paths:
    engines/mm/mm1/views_enh/trap.cpp


diff --git a/engines/mm/mm1/views_enh/trap.cpp b/engines/mm/mm1/views_enh/trap.cpp
index 8144b758f82..e271b8c6675 100644
--- a/engines/mm/mm1/views_enh/trap.cpp
+++ b/engines/mm/mm1/views_enh/trap.cpp
@@ -60,12 +60,7 @@ bool Trap::msgKeypress(const KeypressMessage &msg) {
 	if (endDelay())
 		return true;
 
-	if (_mode == MODE_TRIGGER) {
-		trap();
-	} else {
-		close();
-	}
-
+	timeout();
 	return true;
 }
 
@@ -73,12 +68,7 @@ bool Trap::msgAction(const ActionMessage &msg) {
 	if (endDelay())
 		return true;
 
-	if (_mode == MODE_TRIGGER) {
-		trap();
-	} else {
-		close();
-	}
-
+	timeout();
 	return true;
 }
 
@@ -87,6 +77,7 @@ void Trap::trap() {
 
 	_mode = MODE_TRAP;
 	draw();
+	delaySeconds(5);
 }
 
 void Trap::trigger() {
@@ -100,7 +91,11 @@ void Trap::trigger() {
 }
 
 void Trap::timeout() {
-	trap();
+	if (_mode == MODE_TRIGGER) {
+		trap();
+	} else {
+		close();
+	}
 }
 
 } // namespace ViewsEnh


Commit: 57a8d2d8bddd1ab02a31c9683606e691b5196a09
    https://github.com/scummvm/scummvm/commit/57a8d2d8bddd1ab02a31c9683606e691b5196a09
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-12T21:59:13-07:00

Commit Message:
MM: MM1: Add missing character select for detecting magic in Search

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


diff --git a/engines/mm/mm1/views/search.cpp b/engines/mm/mm1/views/search.cpp
index 5bac6d0fb8c..160985261e2 100644
--- a/engines/mm/mm1/views/search.cpp
+++ b/engines/mm/mm1/views/search.cpp
@@ -152,10 +152,18 @@ bool Search::msgKeypress(const KeypressMessage &msg) {
 				clearSurface();
 				writeString(3, 2, STRING["dialogs.search.check_condition"]);
 				delaySeconds(4);
-			} else if (_removing) {
-				findRemoveTrap2();
 			} else {
-				openContainer2();
+				switch (_optionMode) {
+				case OMODE_OPEN:
+					openContainer2();
+					break;
+				case OMODE_REMOVE_TRAP:
+					findRemoveTrap2();
+					break;
+				case OMODE_DETECT:
+					detectMagicTrap2();
+					break;
+				}
 			}
 		}
 		break;
@@ -246,7 +254,7 @@ void Search::timeout() {
 }
 
 void Search::openContainer() {
-	_removing = false;
+	_optionMode = OMODE_OPEN;
 	if (whoWillTry())
 		openContainer2();
 }
@@ -269,7 +277,7 @@ void Search::openContainer2() {
 }
 
 void Search::findRemoveTrap() {
-	_removing = true;
+	_optionMode = OMODE_REMOVE_TRAP;
 	if (whoWillTry())
 		findRemoveTrap2();
 }
@@ -288,6 +296,12 @@ void Search::findRemoveTrap2() {
 }
 
 void Search::detectMagicTrap() {
+	_optionMode = OMODE_DETECT;
+	if (whoWillTry())
+		detectMagicTrap2();
+}
+
+void Search::detectMagicTrap2() {
 	Character &c = *g_globals->_currCharacter;
 	_mode = RESPONSE;
 
diff --git a/engines/mm/mm1/views/search.h b/engines/mm/mm1/views/search.h
index 5ab9fa6569e..e7e306fb8bc 100644
--- a/engines/mm/mm1/views/search.h
+++ b/engines/mm/mm1/views/search.h
@@ -35,8 +35,9 @@ private:
 		FOCUS_GET_TREASURE, GET_TREASURE, GET_ITEMS,
 		GET_ITEMS_DONE
 	};
+	enum OptionMode { OMODE_OPEN, OMODE_REMOVE_TRAP, OMODE_DETECT };
 	Mode _mode = INITIAL;
-	bool _removing = false;
+	OptionMode _optionMode = OMODE_OPEN;
 	byte _val1 = 0;
 	int _lineNum = 0;
 
@@ -56,6 +57,7 @@ private:
 	 * Detect magic/trap
 	 */
 	void detectMagicTrap();
+	void detectMagicTrap2();
 
 	/**
 	 * Select which user to try and remove trap or detect magic
diff --git a/engines/mm/mm1/views_enh/search.cpp b/engines/mm/mm1/views_enh/search.cpp
index d87c8c52336..45e1fd3e386 100644
--- a/engines/mm/mm1/views_enh/search.cpp
+++ b/engines/mm/mm1/views_enh/search.cpp
@@ -219,7 +219,7 @@ void Search::timeout() {
 }
 
 void Search::openContainer() {
-	_removing = false;
+	_optionMode = OMODE_OPEN;
 	if (whoWillTry())
 		openContainer2();
 }
@@ -242,7 +242,7 @@ void Search::openContainer2() {
 }
 
 void Search::findRemoveTrap() {
-	_removing = true;
+	_optionMode = OMODE_REMOVE_TRAP;
 	if (whoWillTry())
 		findRemoveTrap2();
 }
@@ -261,6 +261,12 @@ void Search::findRemoveTrap2() {
 }
 
 void Search::detectMagicTrap() {
+	_optionMode = OMODE_DETECT;
+	if (whoWillTry())
+		detectMagicTrap2();
+}
+
+void Search::detectMagicTrap2() {
 	Character &c = *g_globals->_currCharacter;
 	setMode(RESPONSE);
 
@@ -316,10 +322,16 @@ void Search::whoWillTry(int charNum) {
 		// Character selected, proceed with given action
 		g_globals->_currCharacter = &g_globals->_party[charNum];
 
-		if (_removing) {
-			findRemoveTrap2();
-		} else {
+		switch (_optionMode) {
+		case OMODE_OPEN:
 			openContainer2();
+			break;
+		case OMODE_REMOVE_TRAP:
+			findRemoveTrap2();
+			break;
+		case OMODE_DETECT:
+			detectMagicTrap2();
+			break;
 		}
 	}
 }
diff --git a/engines/mm/mm1/views_enh/search.h b/engines/mm/mm1/views_enh/search.h
index ed6804e773a..4324cdb6867 100644
--- a/engines/mm/mm1/views_enh/search.h
+++ b/engines/mm/mm1/views_enh/search.h
@@ -34,8 +34,11 @@ private:
 		INITIAL, OPTIONS, RESPONSE, FOCUS_GET_TREASURE,
 		GET_TREASURE, GET_ITEMS, GET_ITEMS_DONE
 	};
+	enum OptionMode {
+		OMODE_OPEN, OMODE_REMOVE_TRAP, OMODE_DETECT
+	};
 	Mode _mode = INITIAL;
-	bool _removing = false;
+	OptionMode _optionMode = OMODE_OPEN;
 	byte _val1 = 0;
 	int _lineNum = 0;
 	Shared::Xeen::SpriteResource _escSprite;
@@ -58,6 +61,7 @@ private:
 	 * Detect magic/trap
 	 */
 	void detectMagicTrap();
+	void detectMagicTrap2();
 
 	/**
 	 * Select which user to try and remove trap or detect magic


Commit: 2cd03b2e71b726b080cb522b2bbfe855d6eea2bb
    https://github.com/scummvm/scummvm/commit/2cd03b2e71b726b080cb522b2bbfe855d6eea2bb
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-12T21:59:13-07:00

Commit Message:
MM: MM1: Properly handle getting treasure after trap msg display

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


diff --git a/engines/mm/mm1/views/search.cpp b/engines/mm/mm1/views/search.cpp
index 160985261e2..117b682cce8 100644
--- a/engines/mm/mm1/views/search.cpp
+++ b/engines/mm/mm1/views/search.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "mm/mm1/views/search.h"
+#include "mm/mm1/views/trap.h"
 #include "mm/mm1/globals.h"
 #include "mm/mm1/sound.h"
 
@@ -54,7 +55,7 @@ bool Search::msgFocus(const FocusMessage &msg) {
 	_bounds = getLineBounds(20, 24);
 	_lineNum = 0;
 
-	if (_mode == FOCUS_GET_TREASURE) {
+	if (dynamic_cast<Trap *>(msg._priorView) != nullptr) {
 		// Returning from trap display
 		if (g_globals->_party.checkPartyDead())
 			return true;
@@ -266,8 +267,6 @@ void Search::openContainer2() {
 			g_globals->_treasure._container;
 
 		if (getRandomNumber(thresold + 5) < thresold) {
-			// Triggered a trap
-			_mode = FOCUS_GET_TREASURE;
 			g_events->send("Trap", GameMessage("TRAP"));
 			return;
 		}
diff --git a/engines/mm/mm1/views/search.h b/engines/mm/mm1/views/search.h
index e7e306fb8bc..641d25b1089 100644
--- a/engines/mm/mm1/views/search.h
+++ b/engines/mm/mm1/views/search.h
@@ -31,9 +31,8 @@ namespace Views {
 class Search : public TextView {
 private:
 	enum Mode {
-		INITIAL, OPTIONS, RESPONSE, WHO_WILL_TRY,
-		FOCUS_GET_TREASURE, GET_TREASURE, GET_ITEMS,
-		GET_ITEMS_DONE
+		INITIAL, OPTIONS, RESPONSE, WHO_WILL_TRY, GET_TREASURE,
+		GET_ITEMS, GET_ITEMS_DONE
 	};
 	enum OptionMode { OMODE_OPEN, OMODE_REMOVE_TRAP, OMODE_DETECT };
 	Mode _mode = INITIAL;
diff --git a/engines/mm/mm1/views_enh/search.cpp b/engines/mm/mm1/views_enh/search.cpp
index 45e1fd3e386..9d9ca05199a 100644
--- a/engines/mm/mm1/views_enh/search.cpp
+++ b/engines/mm/mm1/views_enh/search.cpp
@@ -21,6 +21,7 @@
 
 #include "mm/mm1/views_enh/search.h"
 #include "mm/mm1/views_enh/select_number.h"
+#include "mm/mm1/views_enh/trap.h"
 #include "mm/mm1/views_enh/who_will_try.h"
 #include "mm/mm1/globals.h"
 #include "mm/mm1/sound.h"
@@ -58,7 +59,7 @@ bool Search::msgFocus(const FocusMessage &msg) {
 	_lineNum = 0;
 	_bounds = Common::Rect(0, 144, 234, 200);
 
-	if (_mode == FOCUS_GET_TREASURE) {
+	if (dynamic_cast<Trap *>(msg._priorView) != nullptr) {
 		// Returning from trap display
 		if (g_globals->_party.checkPartyDead())
 			return true;
@@ -232,7 +233,6 @@ void Search::openContainer2() {
 
 		if (getRandomNumber(thresold + 5) < thresold) {
 			// Triggered a trap
-			setMode(FOCUS_GET_TREASURE);
 			g_events->send("Trap", GameMessage("TRAP"));
 			return;
 		}
@@ -258,6 +258,8 @@ void Search::findRemoveTrap2() {
 			return;
 		}
 	}
+
+	getTreasure();
 }
 
 void Search::detectMagicTrap() {
diff --git a/engines/mm/mm1/views_enh/search.h b/engines/mm/mm1/views_enh/search.h
index 4324cdb6867..a691209fcdb 100644
--- a/engines/mm/mm1/views_enh/search.h
+++ b/engines/mm/mm1/views_enh/search.h
@@ -31,8 +31,8 @@ namespace ViewsEnh {
 class Search : public SelectNumber {
 private:
 	enum Mode {
-		INITIAL, OPTIONS, RESPONSE, FOCUS_GET_TREASURE,
-		GET_TREASURE, GET_ITEMS, GET_ITEMS_DONE
+		INITIAL, OPTIONS, RESPONSE, GET_TREASURE, GET_ITEMS,
+		GET_ITEMS_DONE
 	};
 	enum OptionMode {
 		OMODE_OPEN, OMODE_REMOVE_TRAP, OMODE_DETECT




More information about the Scummvm-git-logs mailing list