[Scummvm-git-logs] scummvm master -> 623aa0b44f459fea6957eeefc908b8c378ee893d
dreammaster
noreply at scummvm.org
Sat Mar 25 05:11:32 UTC 2023
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0237331605 MM: MM1: Fix encounter message in amp 1
b8891c9322 MM: MM1: Surprised mode of Encounter view done
2ab2ed3faa MM: MM1: More encounter modes done
623aa0b44f MM: MM1: Added Yes/No subview to applicable encounter modes
Commit: 0237331605b07babde9a6460e8e1f8f31f8328e4
https://github.com/scummvm/scummvm/commit/0237331605b07babde9a6460e8e1f8f31f8328e4
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-24T21:48:07-07:00
Commit Message:
MM: MM1: Fix encounter message in amp 1
Changed paths:
engines/mm/mm1/maps/map01.cpp
diff --git a/engines/mm/mm1/maps/map01.cpp b/engines/mm/mm1/maps/map01.cpp
index 1fd6e09eaff..eff38c4d897 100644
--- a/engines/mm/mm1/maps/map01.cpp
+++ b/engines/mm/mm1/maps/map01.cpp
@@ -122,6 +122,7 @@ void Map01::special08() {
send(SoundMessage(
STRING["maps.map01.secret"],
[](const Common::KeyState &) {
+ g_events->close();
Game::Encounter &enc = g_globals->_encounters;
enc.clearMonsters();
Commit: b8891c93227214496cf88aada5a5107ee6e5911d
https://github.com/scummvm/scummvm/commit/b8891c93227214496cf88aada5a5107ee6e5911d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-24T21:48:07-07:00
Commit Message:
MM: MM1: Surprised mode of Encounter view done
Changed paths:
devtools/create_mm/files/mm1/strings_en.yml
engines/mm/mm1/views_enh/encounter.cpp
engines/mm/mm1/views_enh/encounter.h
diff --git a/devtools/create_mm/files/mm1/strings_en.yml b/devtools/create_mm/files/mm1/strings_en.yml
index 3d2cf109574..29c72261493 100644
--- a/devtools/create_mm/files/mm1/strings_en.yml
+++ b/devtools/create_mm/files/mm1/strings_en.yml
@@ -336,23 +336,23 @@ dialogs:
teleport_dir: "direction (n,e,s,w): "
teleport_squares: "# of squares (0-9): "
encounter:
- title: " encounter! "
- surprised: "the monsters surprised you!"
- surprise: "you surprised a group of monsters,"
- approach: "approach (Y/N)?"
- options1: "options: 'a' attack 'r' retreat"
- options2: "'b' bribe 's' surrender"
- surrender_failed: "the monsters don't take prisoners!"
- nowhere_to_run: "nowhere to run"
- surround: "the monsters surround you!"
- no_response: "no response"
- give_up: "give up all your %s (Y/N)?"
+ title: " Encounter! "
+ surprised: "The monsters surprised you!"
+ surprise: "You surprised a group of monsters,"
+ approach: "Approach (Y/N)?"
+ options1: "Options: 'A' Attack 'R' Retreat"
+ options2: "'B' bribe 'S' surrender"
+ surrender_failed: "The monsters don't take prisoners!"
+ nowhere_to_run: "Nowhere to run"
+ surround: "The monsters surround you!"
+ no_response: "No response"
+ give_up: "Give up all your %s (Y/N)?"
gems: "gems"
food: "food"
gold: "gold"
- not_enough: "not enough"
- alignment_slips: "*** alignment slips ***"
- combat: "combat!"
+ not_enough: "Not enough"
+ alignment_slips: "*** Alignment slips ***"
+ combat: "Combat!"
combat:
combat: "combat"
round: "Round #"
diff --git a/engines/mm/mm1/views_enh/encounter.cpp b/engines/mm/mm1/views_enh/encounter.cpp
index 88233621b3f..37a59af5ef8 100644
--- a/engines/mm/mm1/views_enh/encounter.cpp
+++ b/engines/mm/mm1/views_enh/encounter.cpp
@@ -30,7 +30,7 @@ namespace MM1 {
namespace ViewsEnh {
Encounter::Encounter() : ScrollView("Encounter") {
- setBounds(Common::Rect(0, 144, 234, 200));
+ setDisplayArea(false);
}
bool Encounter::msgFocus(const FocusMessage &msg) {
@@ -38,20 +38,36 @@ bool Encounter::msgFocus(const FocusMessage &msg) {
return true;
}
+void Encounter::setDisplayArea(bool largeArea) {
+ if (largeArea)
+ setBounds(Common::Rect(0, 0, 234, 144));
+ else
+ setBounds(Common::Rect(0, 144, 234, 200));
+}
+
void Encounter::draw() {
Game::Encounter &enc = g_globals->_encounters;
- Graphics::ManagedSurface s = getSurface();
- if (_mode != ALERT)
+ setDisplayArea(false);
+ if (_mode != ALERT) {
+ // Clear the commands area
+ send("GameCommands", GameMessage("COMBAT", "ENCOUNTER"));
ScrollView::draw();
+ }
switch (_mode) {
- case ALERT:
- for (int y = 6; y <= 8; ++y)
- writeLine(y, " ", ALIGN_MIDDLE);
+ case ALERT: {
+ setDisplayArea(true);
+ Graphics::ManagedSurface s = getSurface();
+ Common::Point pt((_innerBounds.left + _innerBounds.right) / 2,
+ (_innerBounds.top + _innerBounds.bottom) / 2);
+ s.fillRect(Common::Rect(pt.x - 50, pt.y - 9, pt.x + 50, pt.y + 18), 0);
+
+ setTextColor(4);
writeLine(7, STRING["dialogs.encounter.title"], ALIGN_MIDDLE);
delaySeconds(2);
break;
+ }
case SURPRISED_BY_MONSTERS:
writeLine(0, STRING["dialogs.encounter.surprised"], ALIGN_MIDDLE);
@@ -115,6 +131,7 @@ void Encounter::draw() {
if (_mode != ALERT) {
// Display the monster
+ setDisplayArea(true);
drawGraphic(enc._monsterImgNum);
// Write the monster list
@@ -130,7 +147,8 @@ void Encounter::draw() {
_mode == NOWHERE_TO_RUN || _mode == SURRENDER_FAILED ||
_mode == SURPRISED_BY_MONSTERS) {
if (enc._alignmentsChanged) {
- writeString(8, 23, STRING["dialogs.encounter.alignment_slips"]);
+ setDisplayArea(false);
+ writeLine(3, STRING["dialogs.encounter.alignment_slips"]);
Sound::sound(SOUND_2);
}
diff --git a/engines/mm/mm1/views_enh/encounter.h b/engines/mm/mm1/views_enh/encounter.h
index 4d233063577..69b3f942607 100644
--- a/engines/mm/mm1/views_enh/encounter.h
+++ b/engines/mm/mm1/views_enh/encounter.h
@@ -42,6 +42,11 @@ private:
BribeType _bribeType = BRIBE_GOLD;
Common::String _bribeTypeStr;
+ /**
+ * Sets the display area
+ */
+ void setDisplayArea(bool largeArea);
+
/**
* Handles the end of the encounter
*/
Commit: 2ab2ed3faa368dc580e61e84ff74e5f9129454be
https://github.com/scummvm/scummvm/commit/2ab2ed3faa368dc580e61e84ff74e5f9129454be
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-24T21:48:08-07:00
Commit Message:
MM: MM1: More encounter modes done
Changed paths:
engines/mm/mm1/views_enh/encounter.cpp
engines/mm/mm1/views_enh/text_view.cpp
diff --git a/engines/mm/mm1/views_enh/encounter.cpp b/engines/mm/mm1/views_enh/encounter.cpp
index 37a59af5ef8..7e0dba7fb52 100644
--- a/engines/mm/mm1/views_enh/encounter.cpp
+++ b/engines/mm/mm1/views_enh/encounter.cpp
@@ -49,9 +49,9 @@ void Encounter::draw() {
Game::Encounter &enc = g_globals->_encounters;
setDisplayArea(false);
+ setReduced(false);
+
if (_mode != ALERT) {
- // Clear the commands area
- send("GameCommands", GameMessage("COMBAT", "ENCOUNTER"));
ScrollView::draw();
}
@@ -76,7 +76,7 @@ void Encounter::draw() {
break;
case SURPRISED_MONSTERS:
- writeLine(1, STRING["dialogs.encounter.surprise"], ALIGN_MIDDLE);
+ writeLine(0, STRING["dialogs.encounter.surprise"], ALIGN_MIDDLE);
writeLine(2, STRING["dialogs.encounter.approach"], ALIGN_MIDDLE);
break;
@@ -88,40 +88,40 @@ void Encounter::draw() {
}
case NOWHERE_TO_RUN:
- writeString(11, 21, STRING["dialogs.encounter.nowhere_to_run"]);
+ writeLine(0, STRING["dialogs.encounter.nowhere_to_run"], ALIGN_MIDDLE);
delaySeconds(2);
break;
case SURROUNDED:
- writeString(5, 21, STRING["dialogs.encounter.surround"]);
+ writeLine(0, STRING["dialogs.encounter.surround"], ALIGN_MIDDLE);
delaySeconds(2);
break;
case SURRENDER_FAILED:
- writeString(2, 21, STRING["dialogs.encounter.surrender_failed"]);
+ writeLine(0, STRING["dialogs.encounter.surrender_failed"], ALIGN_MIDDLE);
delaySeconds(2);
break;
case NO_RESPONSE:
- writeString(12, 21, STRING["dialogs.encounter.no_response"]);
+ writeLine(0, STRING["dialogs.encounter.no_response"], ALIGN_MIDDLE);
delaySeconds(2);
break;
case BRIBE:
enc._bribeFleeCtr++;
enc._bribeAlignmentCtr++;
- writeString(5, 21, Common::String::format(
+ writeLine(0, Common::String::format(
STRING["dialogs.encounter.give_up"].c_str(),
- _bribeTypeStr.c_str()));
+ _bribeTypeStr.c_str()), ALIGN_MIDDLE);
break;
case NOT_ENOUGH:
- writeString(14, 21, STRING["dialogs.encounter.not_enough"]);
+ writeLine(0, STRING["dialogs.encounter.not_enough"], ALIGN_MIDDLE);
delaySeconds(2);
break;
case COMBAT:
- writeString(16, 21, STRING["dialogs.encounter.combat"]);
+ writeLine(0, STRING["dialogs.encounter.combat"], ALIGN_MIDDLE);
delaySeconds(2);
break;
@@ -134,11 +134,17 @@ void Encounter::draw() {
setDisplayArea(true);
drawGraphic(enc._monsterImgNum);
+ setBounds(Common::Rect(160, 10, 310, 140));
+ Graphics::ManagedSurface monArea = getSurface();
+ monArea.clear();
+
// Write the monster list
+ setReduced(true);
+ setTextColor(4);
for (uint i = 0; i < enc._monsterList.size(); ++i) {
- writeChar(22, i, 'A' + i);
- writeString(") ");
- writeString(enc._monsterList[i]._name);
+ writeString(12, 4 + i * 8,
+ Common::String::format("%c)", 'A' + i), ALIGN_RIGHT);
+ writeString(18, 4 + i * 8, enc._monsterList[i]._name.c_str());
}
}
@@ -148,7 +154,7 @@ void Encounter::draw() {
_mode == SURPRISED_BY_MONSTERS) {
if (enc._alignmentsChanged) {
setDisplayArea(false);
- writeLine(3, STRING["dialogs.encounter.alignment_slips"]);
+ writeLine(3, STRING["dialogs.encounter.alignment_slips"], ALIGN_MIDDLE);
Sound::sound(SOUND_2);
}
diff --git a/engines/mm/mm1/views_enh/text_view.cpp b/engines/mm/mm1/views_enh/text_view.cpp
index 07516069dcc..026a85770b9 100644
--- a/engines/mm/mm1/views_enh/text_view.cpp
+++ b/engines/mm/mm1/views_enh/text_view.cpp
@@ -250,7 +250,7 @@ void TextView::clearSurface() {
void TextView::drawGraphic(int gfxNum) {
const Graphics::ManagedSurface img =
g_globals->_monsters.getMonsterImage(gfxNum);
- getSurface().blitFrom(img, Common::Point(64, 16));
+ getSurface().blitFrom(img, Common::Point(64, 30));
}
} // namespace ViewsEnh
Commit: 623aa0b44f459fea6957eeefc908b8c378ee893d
https://github.com/scummvm/scummvm/commit/623aa0b44f459fea6957eeefc908b8c378ee893d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-24T22:11:17-07:00
Commit Message:
MM: MM1: Added Yes/No subview to applicable encounter modes
Changed paths:
engines/mm/mm1/events.cpp
engines/mm/mm1/events.h
engines/mm/mm1/views_enh/encounter.cpp
engines/mm/mm1/views_enh/encounter.h
engines/mm/mm1/views_enh/yes_no.cpp
engines/mm/mm1/views_enh/yes_no.h
diff --git a/engines/mm/mm1/events.cpp b/engines/mm/mm1/events.cpp
index f2c00a37f6c..205cda2e8e5 100644
--- a/engines/mm/mm1/events.cpp
+++ b/engines/mm/mm1/events.cpp
@@ -160,6 +160,13 @@ void Events::popView() {
}
}
+void Events::redrawViews() {
+ for (uint i = 0; i < _views.size(); ++i) {
+ _views[i]->redraw();
+ _views[i]->draw();
+ }
+}
+
bool Events::isPresent(const Common::String &name) const {
for (uint i = 0; i < _views.size(); ++i) {
if (_views[i]->_name == name)
diff --git a/engines/mm/mm1/events.h b/engines/mm/mm1/events.h
index 5cb41450c05..4edaae9c72f 100644
--- a/engines/mm/mm1/events.h
+++ b/engines/mm/mm1/events.h
@@ -315,6 +315,13 @@ public:
*/
void popView();
+ /**
+ * Redraws the views in order. This is used in rare cases
+ * where a view draws outside it's defined area, and needs
+ * to restore whether the background was before
+ */
+ void redrawViews();
+
/**
* Returns the currently focused view, if any
*/
diff --git a/engines/mm/mm1/views_enh/encounter.cpp b/engines/mm/mm1/views_enh/encounter.cpp
index 7e0dba7fb52..85c3d6f4a6c 100644
--- a/engines/mm/mm1/views_enh/encounter.cpp
+++ b/engines/mm/mm1/views_enh/encounter.cpp
@@ -29,12 +29,12 @@ namespace MM {
namespace MM1 {
namespace ViewsEnh {
-Encounter::Encounter() : ScrollView("Encounter") {
+Encounter::Encounter() : YesNo("Encounter") {
setDisplayArea(false);
}
bool Encounter::msgFocus(const FocusMessage &msg) {
- _mode = ALERT;
+ setMode(ALERT);
return true;
}
@@ -52,7 +52,7 @@ void Encounter::draw() {
setReduced(false);
if (_mode != ALERT) {
- ScrollView::draw();
+ YesNo::draw();
}
switch (_mode) {
@@ -158,8 +158,10 @@ void Encounter::draw() {
Sound::sound(SOUND_2);
}
- _mode = BATTLE;
+ setMode(BATTLE);
}
+
+ setDisplayArea(false);
}
void Encounter::timeout() {
@@ -170,18 +172,18 @@ void Encounter::timeout() {
case ALERT:
// Finished displaying initial encounter alert
if (enc._encounterType == Game::FORCE_SURPRISED) {
- _mode = SURPRISED_BY_MONSTERS;
+ setMode(SURPRISED_BY_MONSTERS);
} else if (enc._encounterType == Game::NORMAL_SURPRISED ||
/* ENCOUNTER_OPTIONS */
g_engine->getRandomNumber(100) > map[Maps::MAP_21]) {
// Potentially surprised. Check for guard dog spell
if (g_globals->_activeSpells._s.guard_dog ||
g_engine->getRandomNumber(100) > map[Maps::MAP_20])
- _mode = ENCOUNTER_OPTIONS;
+ setMode(ENCOUNTER_OPTIONS);
else
- _mode = SURPRISED_BY_MONSTERS;
+ setMode(SURPRISED_BY_MONSTERS);
} else {
- _mode = SURPRISED_MONSTERS;
+ setMode(SURPRISED_MONSTERS);
}
break;
@@ -204,7 +206,7 @@ bool Encounter::msgKeypress(const KeypressMessage &msg) {
switch (_mode) {
case SURPRISED_MONSTERS:
if (msg.keycode == Common::KEYCODE_y) {
- _mode = ENCOUNTER_OPTIONS;
+ setMode(ENCOUNTER_OPTIONS);
redraw();
} else if (msg.keycode == Common::KEYCODE_n) {
encounterEnded();
@@ -233,7 +235,7 @@ bool Encounter::msgKeypress(const KeypressMessage &msg) {
case BRIBE:
if (msg.keycode == Common::KEYCODE_y) {
if (getRandomNumber(100) > map[Maps::MAP_BRIBE_THRESHOLD]) {
- _mode = NOT_ENOUGH;
+ setMode(NOT_ENOUGH);
redraw();
} else {
switch (_bribeType) {
@@ -251,7 +253,7 @@ bool Encounter::msgKeypress(const KeypressMessage &msg) {
encounterEnded();
}
} else if (msg.keycode == Common::KEYCODE_n) {
- _mode = ENCOUNTER_OPTIONS;
+ setMode(ENCOUNTER_OPTIONS);
redraw();
}
break;
@@ -276,7 +278,7 @@ void Encounter::attack() {
increaseAlignments();
}
- _mode = COMBAT;
+ setMode(COMBAT);
redraw();
}
@@ -287,7 +289,7 @@ void Encounter::bribe() {
if (!enc._bribeAlignmentCtr)
decreaseAlignments();
- _mode = NO_RESPONSE;
+ setMode(NO_RESPONSE);
redraw();
} else if (getRandomNumber(7) == 5 && !enc._bribeFleeCtr) {
@@ -295,7 +297,7 @@ void Encounter::bribe() {
encounterEnded();
} else {
- _mode = BRIBE;
+ setMode(BRIBE);
int val = getRandomNumber(100);
if (val < 6) {
@@ -323,14 +325,14 @@ void Encounter::retreat() {
flee();
} else if (val > map[Maps::MAP_FLEE_THRESHOLD]) {
// Nowhere to run depending on the map
- _mode = NOWHERE_TO_RUN;
+ setMode(NOWHERE_TO_RUN);
redraw();
} else if (enc._monsterList.size() < g_globals->_party.size() || !enc.checkSurroundParty()) {
// Only allow fleeing if the number of monsters
// are less than the size of the party
flee();
} else {
- _mode = SURROUNDED;
+ setMode(SURROUNDED);
redraw();
}
}
@@ -341,7 +343,7 @@ void Encounter::surrender() {
if (getRandomNumber(100) > map[Maps::MAP_SURRENDER_THRESHOLD] ||
getRandomNumber(100) > enc._fleeThreshold) {
- _mode = SURRENDER_FAILED;
+ setMode(SURRENDER_FAILED);
redraw();
} else {
g_maps->_mapPos.x = map[Maps::MAP_SURRENDER_X];
@@ -413,6 +415,16 @@ void Encounter::increaseAlignments() {
}
}
+void Encounter::setMode(Mode newMode) {
+ if (_mode == SURPRISED_MONSTERS || _mode == BRIBE)
+ closeYesNo();
+
+ _mode = newMode;
+
+ if (_mode == SURPRISED_MONSTERS || _mode == BRIBE)
+ openYesNo();
+}
+
} // namespace ViewsEnh
} // namespace MM1
} // namespace MM
diff --git a/engines/mm/mm1/views_enh/encounter.h b/engines/mm/mm1/views_enh/encounter.h
index 69b3f942607..8bd827d6daf 100644
--- a/engines/mm/mm1/views_enh/encounter.h
+++ b/engines/mm/mm1/views_enh/encounter.h
@@ -22,14 +22,14 @@
#ifndef MM1_VIEWS_ENH_ENCOUNTER_H
#define MM1_VIEWS_ENH_ENCOUNTER_H
+#include "mm/mm1/views_enh/yes_no.h"
#include "mm/mm1/events.h"
-#include "mm/mm1/views_enh/scroll_view.h"
namespace MM {
namespace MM1 {
namespace ViewsEnh {
-class Encounter : public ScrollView {
+class Encounter : public YesNo {
private:
enum Mode {
ALERT, SURPRISED_BY_MONSTERS, SURPRISED_MONSTERS,
@@ -42,6 +42,11 @@ private:
BribeType _bribeType = BRIBE_GOLD;
Common::String _bribeTypeStr;
+ /**
+ * Set display mode
+ */
+ void setMode(Mode newMode);
+
/**
* Sets the display area
*/
diff --git a/engines/mm/mm1/views_enh/yes_no.cpp b/engines/mm/mm1/views_enh/yes_no.cpp
index 26542db202c..05bcb14f8ac 100644
--- a/engines/mm/mm1/views_enh/yes_no.cpp
+++ b/engines/mm/mm1/views_enh/yes_no.cpp
@@ -27,6 +27,18 @@ namespace MM {
namespace MM1 {
namespace ViewsEnh {
+void YesNo::openYesNo() {
+ _subviewVisible = true;
+ redraw();
+}
+
+void YesNo::closeYesNo() {
+ _subviewVisible = false;
+
+ // Redraw the prior views to remove yes/no area
+ g_events->redrawViews();
+}
+
void YesNo::draw() {
if (_subviewVisible)
_subview.draw();
@@ -35,14 +47,14 @@ void YesNo::draw() {
}
bool YesNo::msgMouseDown(const MouseDownMessage &msg) {
- if (_subview.msgMouseDown(msg))
+ if (_subviewVisible && _subview.msgMouseDown(msg))
return true;
return ScrollView::msgMouseDown(msg);
}
bool YesNo::msgMouseUp(const MouseUpMessage &msg) {
- if (_subview.msgMouseUp(msg))
+ if (_subviewVisible && _subview.msgMouseUp(msg))
return true;
return ScrollView::msgMouseUp(msg);
diff --git a/engines/mm/mm1/views_enh/yes_no.h b/engines/mm/mm1/views_enh/yes_no.h
index 9a9e5d0329e..c245f79c573 100644
--- a/engines/mm/mm1/views_enh/yes_no.h
+++ b/engines/mm/mm1/views_enh/yes_no.h
@@ -46,18 +46,12 @@ protected:
/**
* Start displaying the yes/no subview
*/
- void openYesNo() {
- _subviewVisible = true;
- redraw();
- }
+ void openYesNo();
/**
* Stop displaying the subview
*/
- void closeYesNo() {
- _subviewVisible = false;
- redraw();
- }
+ void closeYesNo();
public:
YesNo(const Common::String &name) : ScrollView(name) {}
More information about the Scummvm-git-logs
mailing list