[Scummvm-git-logs] scummvm master -> 7b4fac318b96866f1c9036234f9c201de67c1cf8

dreammaster noreply at scummvm.org
Thu Mar 23 05:34:47 UTC 2023


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

Summary:
986d456d03 MM: MM1: Trade view
60c7298703 MM: MM1: Added which character view
7b4fac318b MM: MM1: Change characters for trade modes


Commit: 986d456d03b861675ed19dc05f5cad870caab2da
    https://github.com/scummvm/scummvm/commit/986d456d03b861675ed19dc05f5cad870caab2da
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-22T22:26:01-07:00

Commit Message:
MM: MM1: Trade view

Changed paths:
    engines/mm/mm1/messages.h
    engines/mm/mm1/views_enh/character_inventory.cpp
    engines/mm/mm1/views_enh/character_inventory.h
    engines/mm/mm1/views_enh/trade.cpp
    engines/mm/mm1/views_enh/trade.h


diff --git a/engines/mm/mm1/messages.h b/engines/mm/mm1/messages.h
index f14f373136d..84a3c8fd0ce 100644
--- a/engines/mm/mm1/messages.h
+++ b/engines/mm/mm1/messages.h
@@ -94,8 +94,9 @@ struct GameMessage : public Message {
 		_name(name), _value(-1) {}
 	GameMessage(const Common::String &name, int value) : Message(),
 		_name(name), _value(value) {}
-	GameMessage(const Common::String &name, const Common::String &value) :
-		Message(), _name(name), _stringValue(value), _value(-1) {}
+	GameMessage(const Common::String &name, const Common::String &strValue,
+			int intValue = -1) :
+		Message(), _name(name), _stringValue(strValue), _value(intValue) {}
 };
 
 struct HeaderMessage : public Message {
diff --git a/engines/mm/mm1/views_enh/character_inventory.cpp b/engines/mm/mm1/views_enh/character_inventory.cpp
index 6fc83027bc1..cbeb757d719 100644
--- a/engines/mm/mm1/views_enh/character_inventory.cpp
+++ b/engines/mm/mm1/views_enh/character_inventory.cpp
@@ -56,6 +56,9 @@ bool CharacterInventory::msgGame(const GameMessage &msg) {
 		_selectedItem = msg._value;
 		performAction();
 		return true;
+	} else if (msg._name == "TRADE") {
+		trade(msg._stringValue, msg._value);
+		return true;
 	}
 
 	return ItemsView::msgGame(msg);
@@ -254,6 +257,19 @@ void CharacterInventory::tradeItem(Character *from) {
 	}
 }
 
+void CharacterInventory::trade(const Common::String &mode, int amount) {
+	assert(isFocused());
+
+	// TODO: implement
+	if (mode == "GEMS") {
+
+	} else if (mode == "GOLD") {
+
+	} else if (mode == "FOOD") {
+
+	}
+}
+
 } // namespace ViewsEnh
 } // namespace MM1
 } // namespace MM
diff --git a/engines/mm/mm1/views_enh/character_inventory.h b/engines/mm/mm1/views_enh/character_inventory.h
index 9f7dc99896f..bdfa85fa5f3 100644
--- a/engines/mm/mm1/views_enh/character_inventory.h
+++ b/engines/mm/mm1/views_enh/character_inventory.h
@@ -82,6 +82,11 @@ private:
 	 */
 	void tradeItem(Character *from);
 
+	/**
+	 * Trade gems, gold, or food
+	 */
+	void trade(const Common::String &mode, int amount);
+
 protected:
 	/**
 	 * Called when an item is selected
diff --git a/engines/mm/mm1/views_enh/trade.cpp b/engines/mm/mm1/views_enh/trade.cpp
index 13a1bbf6ac7..c12a2de64da 100644
--- a/engines/mm/mm1/views_enh/trade.cpp
+++ b/engines/mm/mm1/views_enh/trade.cpp
@@ -26,7 +26,7 @@ namespace MM {
 namespace MM1 {
 namespace ViewsEnh {
 
-Trade::Trade() : PartyView("Trade") {
+Trade::Trade() : ScrollView("Trade") {
 	setBounds(Common::Rect(0, 144, 234, 200));
 }
 
@@ -34,25 +34,64 @@ bool Trade::msgFocus(const FocusMessage &msg) {
 	setMode(TRADE_OPTIONS);
 	_btnIcons.load("view.icn");
 
-	return PartyView::msgFocus(msg);
+	return ScrollView::msgFocus(msg);
 }
 
-void Trade::draw() {
-	PartyView::draw();
+bool Trade::msgUnfocus(const UnfocusMessage &msg) {
 	_btnIcons.clear();
+	return ScrollView::msgUnfocus(msg);
+}
+
+void Trade::draw() {
+	ScrollView::draw();
 
 	switch (_mode) {
 	case TRADE_OPTIONS:
 		drawOptions();
 		break;
+	default:
+		writeString(0, 5, STRING["enhdialogs.trade.how_much"]);
+		break;
 	}
 }
 
 bool Trade::msgKeypress(const KeypressMessage &msg) {
+	switch (_mode) {
+	case TRADE_OPTIONS:
+		switch (msg.keycode) {
+		case Common::KEYCODE_g:
+			setMode(TRADE_GEMS);
+			break;
+		case Common::KEYCODE_d:
+			setMode(TRADE_GOLD);
+			break;
+		case Common::KEYCODE_f:
+			setMode(TRADE_FOOD);
+			break;
+		case Common::KEYCODE_i:
+			close();
+			send(InfoMessage(STRING["enhdialogs.trade.items_help"]));
+			break;
+		default:
+			break;
+		}
+
+	default:
+		break;
+	}
 
 	return true;
 }
 
+bool Trade::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		close();
+		return true;
+	}
+
+	return false;
+}
+
 void Trade::setMode(TradeMode mode) {
 	_mode = mode;
 
@@ -63,9 +102,23 @@ void Trade::setMode(TradeMode mode) {
 		addButton(&_btnIcons, Common::Point(80, 0), 32, Common::KEYCODE_g);
 		addButton(&_btnIcons, Common::Point(158, 0), 34, Common::KEYCODE_d);
 		addButton(&_btnIcons, Common::Point(80, 20), 36, Common::KEYCODE_f);
-		addButton(&_btnIcons, Common::Point(158, 20), 38, Common::KEYCODE_i);
+		addButton(&_btnIcons, Common::Point(158, 20), 26, Common::KEYCODE_i);
 		addButton(&g_globals->_escSprites, Common::Point(0, 20), 0, KEYBIND_ESCAPE);
 		break;
+
+	default:
+		// How much
+		draw();
+		_textEntry.display(70, 157, 5, true,
+			[]() {
+				g_events->close();
+			},
+			[](const Common::String &str) {
+				Trade *view = static_cast<Trade *>(g_events->focusedView());
+				int amount = atoi(str.c_str());
+				view->amountEntered(amount);
+			}
+		);
 	}
 }
 
@@ -78,6 +131,11 @@ void Trade::drawOptions() {
 	writeString(186, 25, STRING["enhdialogs.trade.items"]);
 }
 
+void Trade::amountEntered(uint amount) {
+	close();
+	send("CharacterInventory", GameMessage("TRADE", TRADE_NAMES[_mode], amount));
+}
+
 } // namespace ViewsEnh
 } // namespace MM1
 } // namespace MM
diff --git a/engines/mm/mm1/views_enh/trade.h b/engines/mm/mm1/views_enh/trade.h
index 4b1cf2d5f5a..4231fd08d24 100644
--- a/engines/mm/mm1/views_enh/trade.h
+++ b/engines/mm/mm1/views_enh/trade.h
@@ -22,31 +22,45 @@
 #ifndef MM1_VIEWS_ENH_TRADE_H
 #define MM1_VIEWS_ENH_TRADE_H
 
-#include "mm/mm1/views_enh/party_view.h"
+#include "mm/mm1/views_enh/scroll_view.h"
+#include "mm/mm1/views_enh/text_entry.h"
 
 namespace MM {
 namespace MM1 {
 namespace ViewsEnh {
 
-class Trade : public PartyView {
+class Trade : public ScrollView {
 private:
-	enum TradeMode { TRADE_OPTIONS };
+	enum TradeMode { TRADE_OPTIONS, TRADE_GEMS, TRADE_GOLD, TRADE_FOOD };
+	const char *const TRADE_NAMES[4] = { nullptr, "GEMS", "GOLD", "FOOD" };
 	TradeMode _mode = TRADE_OPTIONS;
 	Shared::Xeen::SpriteResource _btnIcons;
+	TextEntry _textEntry;
 
 	/**
 	  * Set the display mode
 	  */
 	void setMode(TradeMode mode);
 
+	/**
+	 * Draw the option modes
+	 */
 	void drawOptions();
+
+	/**
+	 * Called when an amount is entered
+	 */
+	void amountEntered(uint amount);
+
 public:
 	Trade();
 	virtual ~Trade() {}
 
 	bool msgFocus(const FocusMessage &msg) override;
+	bool msgUnfocus(const UnfocusMessage &msg) override;
 	void draw() override;
 	bool msgKeypress(const KeypressMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
 };
 
 } // namespace ViewsEnh


Commit: 60c7298703f4c0044f417b60cf122716f08ca0ef
    https://github.com/scummvm/scummvm/commit/60c7298703f4c0044f417b60cf122716f08ca0ef
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-22T22:26:01-07:00

Commit Message:
MM: MM1: Added which character view

Changed paths:
  A engines/mm/mm1/views_enh/which_character.cpp
  A engines/mm/mm1/views_enh/which_character.h
    devtools/create_mm/files/mm1/strings_en.yml
    engines/mm/mm1/views_enh/character_inventory.cpp
    engines/mm/mm1/views_enh/character_inventory.h
    engines/mm/mm1/views_enh/dialogs.h
    engines/mm/mm1/views_enh/trade.cpp
    engines/mm/mm1/views_enh/which_item.cpp
    engines/mm/module.mk


diff --git a/devtools/create_mm/files/mm1/strings_en.yml b/devtools/create_mm/files/mm1/strings_en.yml
index ef16d41fdd8..cdf1a16301a 100644
--- a/devtools/create_mm/files/mm1/strings_en.yml
+++ b/devtools/create_mm/files/mm1/strings_en.yml
@@ -616,6 +616,7 @@ enhdialogs:
 		food: "\x01""37Food"
 		items: "\x01""37Items"
 		how_much: "How much:"
+		dest: "Trade to whom?"
 		items_help: "To trade items, select an item from the inventory, and then select the portrait of the character to trade to"
 	training:
 		title: "Training"
diff --git a/engines/mm/mm1/views_enh/character_inventory.cpp b/engines/mm/mm1/views_enh/character_inventory.cpp
index cbeb757d719..b3684221250 100644
--- a/engines/mm/mm1/views_enh/character_inventory.cpp
+++ b/engines/mm/mm1/views_enh/character_inventory.cpp
@@ -57,7 +57,13 @@ bool CharacterInventory::msgGame(const GameMessage &msg) {
 		performAction();
 		return true;
 	} else if (msg._name == "TRADE") {
-		trade(msg._stringValue, msg._value);
+		_tradeMode = msg._stringValue;
+		_tradeAmount = msg._value;
+		addView("WhichCharacter");
+		return true;
+	} else if (msg._name == "TRADE_DEST") {
+		if (msg._value != -1)
+			trade(_tradeMode, _tradeAmount, &g_globals->_party[msg._value]);
 		return true;
 	}
 
@@ -257,7 +263,7 @@ void CharacterInventory::tradeItem(Character *from) {
 	}
 }
 
-void CharacterInventory::trade(const Common::String &mode, int amount) {
+void CharacterInventory::trade(const Common::String &mode, int amount, Character *destChar) {
 	assert(isFocused());
 
 	// TODO: implement
diff --git a/engines/mm/mm1/views_enh/character_inventory.h b/engines/mm/mm1/views_enh/character_inventory.h
index bdfa85fa5f3..73afa1498e1 100644
--- a/engines/mm/mm1/views_enh/character_inventory.h
+++ b/engines/mm/mm1/views_enh/character_inventory.h
@@ -41,6 +41,8 @@ private:
 	};
 	SelectedButton _selectedButton = BTN_NONE;
 	Character *_initialChar = nullptr;
+	Common::String _tradeMode;
+	int _tradeAmount;
 
 	/**
 	 * Populates the list of items
@@ -85,7 +87,7 @@ private:
 	/**
 	 * Trade gems, gold, or food
 	 */
-	void trade(const Common::String &mode, int amount);
+	void trade(const Common::String &mode, int amount, Character *destChar);
 
 protected:
 	/**
diff --git a/engines/mm/mm1/views_enh/dialogs.h b/engines/mm/mm1/views_enh/dialogs.h
index e1699450905..3ab802a3dee 100644
--- a/engines/mm/mm1/views_enh/dialogs.h
+++ b/engines/mm/mm1/views_enh/dialogs.h
@@ -45,6 +45,7 @@
 #include "mm/mm1/views_enh/trade.h"
 #include "mm/mm1/views_enh/trap.h"
 #include "mm/mm1/views_enh/unlock.h"
+#include "mm/mm1/views_enh/which_character.h"
 #include "mm/mm1/views_enh/which_item.h"
 #include "mm/mm1/views_enh/who_will_try.h"
 #include "mm/mm1/views_enh/interactions/statue.h"
@@ -94,6 +95,7 @@ private:
 	ViewsEnh::Trade _trade;
 	ViewsEnh::Trap _trap;
 	ViewsEnh::Unlock _unlock;
+	ViewsEnh::WhichCharacter _whichCharacter;
 	ViewsEnh::WhichItem _whichItem;
 	ViewsEnh::WhoWillTry _whoWillTry;
 	Views::Bash _bash;
diff --git a/engines/mm/mm1/views_enh/trade.cpp b/engines/mm/mm1/views_enh/trade.cpp
index c12a2de64da..c65acc2bf28 100644
--- a/engines/mm/mm1/views_enh/trade.cpp
+++ b/engines/mm/mm1/views_enh/trade.cpp
@@ -31,9 +31,11 @@ Trade::Trade() : ScrollView("Trade") {
 }
 
 bool Trade::msgFocus(const FocusMessage &msg) {
-	setMode(TRADE_OPTIONS);
 	_btnIcons.load("view.icn");
 
+	if (dynamic_cast<TextEntry *>(msg._priorView) == nullptr)
+		setMode(TRADE_OPTIONS);
+
 	return ScrollView::msgFocus(msg);
 }
 
diff --git a/engines/mm/mm1/views_enh/which_character.cpp b/engines/mm/mm1/views_enh/which_character.cpp
new file mode 100644
index 00000000000..1fa16a2287b
--- /dev/null
+++ b/engines/mm/mm1/views_enh/which_character.cpp
@@ -0,0 +1,75 @@
+/* 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/which_character.h"
+#include "mm/mm1/globals.h"
+
+namespace MM {
+namespace MM1 {
+namespace ViewsEnh {
+
+WhichCharacter::WhichCharacter() : PartyView("WhichCharacter") {
+	_bounds = Common::Rect(50, 103, 266, 139);
+	addButton(&g_globals->_escSprites, Common::Point(176, 0), 0, KEYBIND_ESCAPE);
+}
+
+bool WhichCharacter::msgFocus(const FocusMessage &msg) {
+	_initialChar = g_globals->_currCharacter;
+	return PartyView::msgFocus(msg);
+}
+
+void WhichCharacter::draw() {
+	PartyView::draw();
+	writeString(10, 5, STRING["enhdialogs.trade.dest"]);
+}
+
+bool WhichCharacter::msgGame(const GameMessage &msg) {
+	if (msg._name == "UPDATE") {
+		int charNum = g_globals->_party.indexOf(g_globals->_currCharacter);
+		g_globals->_currCharacter = _initialChar;
+
+		close();
+		send("CharacterInventory", GameMessage("TRADE_DEST", charNum));
+		return true;
+	}
+
+	return false;
+}
+
+bool WhichCharacter::msgAction(const ActionMessage &msg) {
+	if (msg._action == KEYBIND_ESCAPE) {
+		close();
+		send("CharacterInventory", GameMessage("TRADE_DEST", -1));
+		return true;
+	} else if (msg._action >= KEYBIND_VIEW_PARTY1 &&
+			msg._action <= KEYBIND_VIEW_PARTY6) {
+		uint charNum = msg._action - KEYBIND_VIEW_PARTY1;
+		if (charNum < g_globals->_party.size())
+			send("CharacterInventory", GameMessage("TRADE_DEST", charNum));
+		return true;
+	} else {
+		return false;
+	}
+}
+
+} // namespace ViewsEnh
+} // namespace MM1
+} // namespace MM
diff --git a/engines/mm/mm1/views_enh/which_character.h b/engines/mm/mm1/views_enh/which_character.h
new file mode 100644
index 00000000000..54a163d64b4
--- /dev/null
+++ b/engines/mm/mm1/views_enh/which_character.h
@@ -0,0 +1,49 @@
+/* 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_WHICH_CHARACTER_H
+#define MM1_VIEWS_ENH_WHICH_CHARACTER_H
+
+#include "mm/mm1/views_enh/party_view.h"
+#include "mm/mm1/data/character.h"
+
+namespace MM {
+namespace MM1 {
+namespace ViewsEnh {
+
+class WhichCharacter : public PartyView {
+private:
+	Character *_initialChar = nullptr;
+public:
+	WhichCharacter();
+	virtual ~WhichCharacter() {}
+
+	bool msgFocus(const FocusMessage &msg) override;
+	void draw() override;
+	bool msgGame(const GameMessage &msg) override;
+	bool msgAction(const ActionMessage &msg) override;
+};
+
+} // namespace ViewsEnh
+} // namespace MM1
+} // namespace MM
+
+#endif
diff --git a/engines/mm/mm1/views_enh/which_item.cpp b/engines/mm/mm1/views_enh/which_item.cpp
index 9b8d821c6a5..d5a5ecde1ea 100644
--- a/engines/mm/mm1/views_enh/which_item.cpp
+++ b/engines/mm/mm1/views_enh/which_item.cpp
@@ -28,7 +28,7 @@ namespace ViewsEnh {
 
 WhichItem::WhichItem() : ScrollView("WhichItem") {
 	_bounds = Common::Rect(50, 103, 266, 139);
-	addButton(&g_globals->_escSprites, Common::Point(70, 0), 0, KEYBIND_ESCAPE);
+	addButton(&g_globals->_escSprites, Common::Point(176, 0), 0, KEYBIND_ESCAPE);
 }
 
 bool WhichItem::msgGame(const GameMessage &msg) {
@@ -43,7 +43,7 @@ bool WhichItem::msgGame(const GameMessage &msg) {
 
 void WhichItem::draw() {
 	ScrollView::draw();
-	writeString(0, 0, _msg);
+	writeString(10, 5, _msg);
 }
 
 bool WhichItem::msgKeypress(const KeypressMessage &msg) {
diff --git a/engines/mm/module.mk b/engines/mm/module.mk
index 538ff2c3951..650d34bcfce 100644
--- a/engines/mm/module.mk
+++ b/engines/mm/module.mk
@@ -162,6 +162,7 @@ MODULE_OBJS += \
 	mm1/views_enh/trade.o \
 	mm1/views_enh/trap.o \
 	mm1/views_enh/unlock.o \
+	mm1/views_enh/which_character.o \
 	mm1/views_enh/which_item.o \
 	mm1/views_enh/who_will_try.o \
 	mm1/views_enh/yes_no.o \


Commit: 7b4fac318b96866f1c9036234f9c201de67c1cf8
    https://github.com/scummvm/scummvm/commit/7b4fac318b96866f1c9036234f9c201de67c1cf8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2023-03-22T22:26:01-07:00

Commit Message:
MM: MM1: Change characters for trade modes

Changed paths:
    devtools/create_mm/files/mm1/strings_en.yml
    engines/mm/mm1/views_enh/trade.cpp


diff --git a/devtools/create_mm/files/mm1/strings_en.yml b/devtools/create_mm/files/mm1/strings_en.yml
index cdf1a16301a..4d6b7ce7544 100644
--- a/devtools/create_mm/files/mm1/strings_en.yml
+++ b/devtools/create_mm/files/mm1/strings_en.yml
@@ -611,8 +611,8 @@ enhdialogs:
 		realign: "\x01""37Re-align"
 	trade:
 		which: "Trade which:"
-		gems: "\x01""37Gems"
-		gold: "Gol\x01""37d"
+		gems: "Ge\x01""37ms"
+		gold: "\x01""37Gold"
 		food: "\x01""37Food"
 		items: "\x01""37Items"
 		how_much: "How much:"
diff --git a/engines/mm/mm1/views_enh/trade.cpp b/engines/mm/mm1/views_enh/trade.cpp
index c65acc2bf28..32f8bf7ccbd 100644
--- a/engines/mm/mm1/views_enh/trade.cpp
+++ b/engines/mm/mm1/views_enh/trade.cpp
@@ -61,10 +61,10 @@ bool Trade::msgKeypress(const KeypressMessage &msg) {
 	switch (_mode) {
 	case TRADE_OPTIONS:
 		switch (msg.keycode) {
-		case Common::KEYCODE_g:
+		case Common::KEYCODE_m:
 			setMode(TRADE_GEMS);
 			break;
-		case Common::KEYCODE_d:
+		case Common::KEYCODE_g:
 			setMode(TRADE_GOLD);
 			break;
 		case Common::KEYCODE_f:




More information about the Scummvm-git-logs mailing list