[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