From bbd663d3661c5daf4ae04071e3d3326ef4709143 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 29 Aug 2019 20:52:11 -0700 Subject: XEEN: Fix for deleting characters from the roster --- engines/xeen/character.cpp | 1 + engines/xeen/dialogs/dialogs_party.cpp | 34 +++++++++++++++++----------------- engines/xeen/dialogs/dialogs_party.h | 5 +++++ 3 files changed, 23 insertions(+), 17 deletions(-) (limited to 'engines') 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 @@ -52,6 +52,11 @@ private: */ void execute(); + /** + * Loads the list of character + */ + void loadCharacters(); + /** * Loads buttons for the dialog */ -- cgit v1.2.3