XEEN: Fixes for Character Info dialog stat details display

This commit is contained in:
Paul Gilbert 2015-02-01 16:51:04 -05:00
parent d57c9f2021
commit 2b2ce19012
5 changed files with 33 additions and 30 deletions

View file

@ -243,7 +243,7 @@ void CharacterInfo::loadDrawStructs() {
* Set up the button list for the dialog
*/
void CharacterInfo::addButtons() {
addButton(Common::Rect(10, 24, 34, 64), 1001, &_iconSprites);
addButton(Common::Rect(10, 24, 34, 44), 1001, &_iconSprites);
addButton(Common::Rect(10, 47, 34, 67), 1002, &_iconSprites);
addButton(Common::Rect(10, 70, 34, 90), 1003, &_iconSprites);
addButton(Common::Rect(10, 93, 34, 113), 1004, &_iconSprites);
@ -343,7 +343,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
Common::Rect bounds(STAT_POS[0][attrib], STAT_POS[1][attrib],
STAT_POS[0][attrib] + 143, STAT_POS[1][attrib] + 52);
Party &party = *_vm->_party;
int stat1, stat2;
uint stat1, stat2;
uint idx;
Common::String msg;
@ -371,7 +371,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
stat1 = c.getAge(false);
stat2 = c.getAge(true);
msg = Common::String::format(AGE_TEXT, STAT_NAMES[attrib],
stat2, c._dbDay, c._ybDay);
stat1, stat2, c._birthDay, c._birthYear);
break;
case 8: {
@ -422,6 +422,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
c._poisonResistence._permanent + c.itemScan(14) + c._poisonResistence._temporary,
c._energyResistence._permanent + c.itemScan(15) + c._energyResistence._temporary,
c._magicResistence._permanent + c.itemScan(16) + c._magicResistence._temporary);
bounds.setHeight(80);
break;
case 13: {
@ -466,10 +467,10 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
case 15:
// Experience
stat1 = c.getCurrentExperience();
stat2 = c.nextExperienceLevel();
stat2 = c.experienceToNextLevel();
msg = Common::String::format(EXPERIENCE_TEXT,
STAT_NAMES[attrib], stat1,
stat2 == 0 ? ELIGIBLE : Common::String::format("%d", stat2)
stat2 == 0 ? ELIGIBLE : Common::String::format("%d", stat2).c_str()
);
bounds.setHeight(43);
break;
@ -478,6 +479,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
// Gold
msg = Common::String::format(IN_PARTY_IN_BANK, STAT_NAMES[attrib],
party._gold, party._bankGold);
bounds.setHeight(43);
break;
case 17:
@ -516,6 +518,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
Condition condition = c.worstCondition();
if (condition == NO_CONDITION) {
lines[0] = Common::String::format("\n\t020%s", GOOD);
++total;
}
if (party._blessed)
@ -537,7 +540,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
lines[17].c_str(), lines[18].c_str(), lines[19].c_str()
);
bounds.top = ((total - 1) / 2) * 8;
bounds.top -= ((total - 1) / 2) * 8;
bounds.setHeight(total * 9 + 26);
if (bounds.bottom >= SCREEN_HEIGHT)
bounds.moveTo(bounds.left, SCREEN_HEIGHT - bounds.height() - 1);

View file

@ -49,7 +49,7 @@ Character::Character() {
_xeenSide = 0;
_class = CLASS_KNIGHT;
_ACTemp = 0;
_dbDay = 0;
_birthDay = 0;
_tempAge = 0;
Common::fill(&_skills[0], &_skills[18], 0);
Common::fill(&_awards[0], &_awards[128], false);
@ -64,7 +64,7 @@ Character::Character() {
_savedMazeId = 0;
_currentHp = 0;
_currentSp = 0;
_ybDay = 0;
_birthYear = 0;
_experience = 0;
_currentAdventuringSpell = 0;
_currentCombatSpell = 0;
@ -93,7 +93,7 @@ void Character::synchronize(Common::Serializer &s) {
_luck.synchronize(s);
s.syncAsByte(_ACTemp);
_level.synchronize(s);
s.syncAsByte(_dbDay);
s.syncAsByte(_birthDay);
s.syncAsByte(_tempAge);
// Synchronize the skill list
@ -144,7 +144,7 @@ void Character::synchronize(Common::Serializer &s) {
s.syncAsByte(_savedMazeId);
s.syncAsUint16LE(_currentHp);
s.syncAsUint16LE(_currentSp);
s.syncAsUint16LE(_ybDay);
s.syncAsUint16LE(_birthYear);
s.syncAsUint32LE(_experience);
s.syncAsByte(_currentAdventuringSpell);
s.syncAsByte(_currentCombatSpell);
@ -160,7 +160,7 @@ Condition Character::worstCondition() const {
}
int Character::getAge(bool ignoreTemp) const {
int year = MIN(Party::_vm->_party->_year - _ybDay, 254);
int year = MIN(Party::_vm->_party->_year - _birthYear, (uint)254);
return ignoreTemp ? year : year + _tempAge;
}
@ -796,22 +796,22 @@ bool Character::guildMember() const {
}
}
uint Character::nextExperienceLevel() const {
uint base = currentExperienceLevel();
uint Character::experienceToNextLevel() const {
uint next = nextExperienceLevel();
uint curr = getCurrentExperience();
return (curr < base) ? 0 : curr - base;
return (curr >= next) ? 0 : next - curr;
}
uint Character::currentExperienceLevel() const {
uint Character::nextExperienceLevel() const {
int shift, base;
if (_level._permanent >= 12) {
base = _level._permanent - 12;
shift = 10;
} else {
base = 0;
shift = _level._permanent;
shift = _level._permanent - 1;
}
return (base * 1024000) + (CLASS_EXP_LEVELS[_class] << shift);
}

View file

@ -105,7 +105,7 @@ public:
AttributePair _luck;
int _ACTemp;
AttributePair _level;
int _dbDay;
uint _birthDay;
int _tempAge;
int _skills[18];
bool _awards[128];
@ -131,7 +131,7 @@ public:
int _savedMazeId;
int _currentHp;
int _currentSp;
int _ybDay;
uint _birthYear;
uint32 _experience;
int _currentAdventuringSpell;
int _currentCombatSpell;
@ -173,9 +173,9 @@ public:
bool guildMember() const;
uint nextExperienceLevel() const;
uint experienceToNextLevel() const;
uint currentExperienceLevel() const;
uint nextExperienceLevel() const;
uint getCurrentExperience() const;
@ -223,7 +223,7 @@ public:
bool _worldEnd;
int _ctr24; // TODO: Figure out proper name
int _day;
int _year;
uint _year;
int _minutes;
uint _food;
int _lightCount;

View file

@ -51,7 +51,7 @@ Town::Town(XeenEngine *vm) : _vm(vm) {
_dayOfWeek = 0;
_uncurseCost = 0;
_flag1 = false;
_nextExperienceLevel = 0;
_experienceToNextLevel = 0;
_drawCtr1 = _drawCtr2 = 0;
}
@ -458,14 +458,14 @@ Common::String Town::createTownText(Character &ch) {
}
}
_nextExperienceLevel = ch.nextExperienceLevel();
_experienceToNextLevel = ch.experienceToNextLevel();
if (_nextExperienceLevel >= 0x10000 && ch._level._permanent < _v20) {
if (_experienceToNextLevel >= 0x10000 && ch._level._permanent < _v20) {
int nextLevel = ch._level._permanent + 1;
return Common::String::format(EXPERIENCE_FOR_LEVEL,
ch._name.c_str(), _nextExperienceLevel, nextLevel);
ch._name.c_str(), _experienceToNextLevel, nextLevel);
} else if (ch._level._permanent >= 20) {
_nextExperienceLevel = 1;
_experienceToNextLevel = 1;
msg = Common::String::format(LEARNED_ALL, ch._name.c_str());
} else {
msg = Common::String::format(ELIGIBLE_FOR_LEVEL,
@ -906,7 +906,7 @@ Character *Town::doTrainingOptions(Character *c) {
break;
case Common::KEYCODE_t:
if (_nextExperienceLevel) {
if (_experienceToNextLevel) {
sound.playSample(nullptr, 0);
_drawFrameIndex = 0;
@ -927,7 +927,7 @@ Character *Town::doTrainingOptions(Character *c) {
File f(isDarkCc ? "prtygd.voc" : "trainin2.voc");
sound.playSample(&f, 1);
c->_experience -= c->currentExperienceLevel() -
c->_experience -= c->nextExperienceLevel() -
(c->getCurrentExperience() - c->_experience);
c->_level._permanent++;

View file

@ -58,7 +58,7 @@ private:
int _arr1[6];
int _currentCharLevel;
bool _flag1;
uint _nextExperienceLevel;
uint _experienceToNextLevel;
int _drawFrameIndex;
int _drawCtr1, _drawCtr2;