MM: MM1: Implementing most of item trade

This commit is contained in:
Paul Gilbert
2023-01-22 20:06:58 +01:00
committed by Eugene Sandulenko
parent 395f5695db
commit 0253ded66e
5 changed files with 59 additions and 2 deletions
@@ -27,6 +27,7 @@
legend4: "'ESC' TO GO BACK 'G' GATHER 'U' USE"
equip: "EQUIP WHICH ITEM: 'A'-'F'?"
remove: "REMOVE WHICH ITEM: '1'-'6'?"
which: "WHICH ITEM: 'A'-'F'?"
wrong_class: "*** WRONG CLASS ***"
have_armor: "*** ALREADY WEARING ARMOR ***"
not_equipped: "*** NOT EQUIPPED ***"
+16
View File
@@ -173,6 +173,22 @@ void Character::gatherGold() {
_gold = total;
}
Character::TradeResult Character::trade(int whoTo, int itemIndex) {
Character &dest = g_globals->_party[whoTo];
if (&dest == this)
return TRADE_SUCCESS;
if (dest._backpack.full())
return TRADE_FULL;
if (!_backpack[itemIndex])
return TRADE_NO_ITEM;
// TODO: do the trade
return TRADE_SUCCESS;
}
Character::LevelIncrease Character::increaseLevel() {
_level = ++_levelBase;
_age = ++_ageBase;
+6
View File
@@ -182,6 +182,12 @@ struct Character {
*/
void gatherGold();
/**
* Trade an item to another
*/
enum TradeResult { TRADE_SUCCESS, TRADE_NO_ITEM, TRADE_FULL };
TradeResult trade(int whoTo, int itemIndex);
/**
* Increase the character's level by 1 at a trainer
*/
+35 -1
View File
@@ -87,6 +87,11 @@ void CharacterInfo::draw() {
escToGoBack(0);
break;
case TRADE_ITEM:
writeString(10, 20, STRING["dialogs.character.which"]);
escToGoBack(0);
break;
default:
break;
}
@@ -182,7 +187,36 @@ bool CharacterInfo::msgKeypress(const KeypressMessage &msg) {
);
} else if (msg.keycode == Common::KEYCODE_4) {
// TODO: Trade item
if (g_globals->_party[_tradeWith]._backpack.full()) {
writeString(14, 21, STRING["dialogs.character.full"]);
Sound::sound(SOUND_2);
_state = DISPLAY;
delaySeconds(3);
} else {
_state = TRADE_ITEM;
redraw();
}
}
break;
case TRADE_ITEM:
if (msg.keycode >= Common::KEYCODE_a &&
msg.keycode <= Common::KEYCODE_f) {
switch (g_globals->_currCharacter->trade(_tradeWith,
msg.keycode - Common::KEYCODE_a)) {
case Character::TRADE_FULL:
writeString(14, 21, STRING["dialogs.character.full"]);
_state = DISPLAY;
delaySeconds(3);
break;
case Character::TRADE_SUCCESS:
_state = DISPLAY;
redraw();
break;
default:
// Do nothing, no item at selected index
break;
}
}
break;
+1 -1
View File
@@ -38,7 +38,7 @@ class CharacterInfo : public CharacterBase {
private:
enum ViewState {
DISPLAY, EQUIP, GATHER, REMOVE, SHARE,
TRADE_WITH, TRADE_KIND, TRADE_WHAT };
TRADE_WITH, TRADE_KIND, TRADE_ITEM };
ViewState _state = DISPLAY;
Common::String _newName;
private: