XEEN: Fixes for Character Info dialog stat details display
This commit is contained in:
parent
d57c9f2021
commit
2b2ce19012
5 changed files with 33 additions and 30 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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++;
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ private:
|
|||
int _arr1[6];
|
||||
int _currentCharLevel;
|
||||
bool _flag1;
|
||||
uint _nextExperienceLevel;
|
||||
uint _experienceToNextLevel;
|
||||
int _drawFrameIndex;
|
||||
int _drawCtr1, _drawCtr2;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue