mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
MM: MM1: Implementing most of item trade
This commit is contained in:
@@ -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 ***"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user