aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2019-08-29 20:52:11 -0700
committerPaul Gilbert2019-08-29 20:52:11 -0700
commitbbd663d3661c5daf4ae04071e3d3326ef4709143 (patch)
tree923bd1b8c874d501a14b68e9f8f8d39506fdf107
parentde4d181295fb8ae470fe63f58484cea787111d93 (diff)
downloadscummvm-rg350-bbd663d3661c5daf4ae04071e3d3326ef4709143.tar.gz
scummvm-rg350-bbd663d3661c5daf4ae04071e3d3326ef4709143.tar.bz2
scummvm-rg350-bbd663d3661c5daf4ae04071e3d3326ef4709143.zip
XEEN: Fix for deleting characters from the roster
-rw-r--r--engines/xeen/character.cpp1
-rw-r--r--engines/xeen/dialogs/dialogs_party.cpp34
-rw-r--r--engines/xeen/dialogs/dialogs_party.h5
3 files changed, 23 insertions, 17 deletions
diff --git a/engines/xeen/character.cpp b/engines/xeen/character.cpp
index 1712bbb244..982ffd88ad 100644
--- a/engines/xeen/character.cpp
+++ b/engines/xeen/character.cpp
@@ -59,6 +59,7 @@ Character::Character(const Character &src) : _weapons(this), _armor(this), _acce
}
void Character::clear() {
+ _name = "";
_sex = MALE;
_race = HUMAN;
_xeenSide = 0;
diff --git a/engines/xeen/dialogs/dialogs_party.cpp b/engines/xeen/dialogs/dialogs_party.cpp
index 824f45fcc8..ac92ceb760 100644
--- a/engines/xeen/dialogs/dialogs_party.cpp
+++ b/engines/xeen/dialogs/dialogs_party.cpp
@@ -64,14 +64,7 @@ void PartyDialog::execute() {
// Build up a list of available characters in the Roster that are on the
// same side of Xeen as the player is currently on
- _charList.clear();
- for (int i = 0; i < XEEN_TOTAL_CHARACTERS; ++i) {
- Character &player = party._roster[i];
- if (player._name.empty() || player._xeenSide != map._loadCcNum)
- continue;
-
- _charList.push_back(i);
- }
+ loadCharacters();
Window &w = windows[11];
w.open();
@@ -254,15 +247,8 @@ void PartyDialog::execute() {
// Empty the character in the roster
c.clear();
- // Rebuild the character list
- _charList.clear();
- for (int idx = 0; idx < XEEN_TOTAL_CHARACTERS; ++idx) {
- Character &ch = party._roster[idx];
- if (!ch._name.empty() && ch._savedMazeId == party._priorMazeId) {
- _charList.push_back(idx);
- }
- }
-
+ loadCharacters();
+ startingChar = 0;
startingCharChanged(startingChar);
}
}
@@ -289,6 +275,20 @@ void PartyDialog::execute() {
}
}
+void PartyDialog::loadCharacters() {
+ Map &map = *_vm->_map;
+ Party &party = *_vm->_party;
+
+ _charList.clear();
+ for (int i = 0; i < XEEN_TOTAL_CHARACTERS; ++i) {
+ Character &player = party._roster[i];
+ if (player._name.empty() || player._xeenSide != map._loadCcNum)
+ continue;
+
+ _charList.push_back(i);
+ }
+}
+
void PartyDialog::loadButtons() {
_uiSprites.load("inn.icn");
addButton(Common::Rect(16, 100, 40, 120), Common::KEYCODE_UP, &_uiSprites);
diff --git a/engines/xeen/dialogs/dialogs_party.h b/engines/xeen/dialogs/dialogs_party.h
index 8f87ca3aa6..b906c12050 100644
--- a/engines/xeen/dialogs/dialogs_party.h
+++ b/engines/xeen/dialogs/dialogs_party.h
@@ -53,6 +53,11 @@ private:
void execute();
/**
+ * Loads the list of character
+ */
+ void loadCharacters();
+
+ /**
* Loads buttons for the dialog
*/
void loadButtons();