[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