[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