[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