[Scummvm-git-logs] scummvm master -> 808dd292a6d47bfa9fcd1d990ae1ca51640df5e2
dreammaster
dreammaster at scummvm.org
Sat Dec 16 16:32:04 CET 2017
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
808dd292a6 XEEN: Convert character _awards array from bool to int
Commit: 808dd292a6d47bfa9fcd1d990ae1ca51640df5e2
https://github.com/scummvm/scummvm/commit/808dd292a6d47bfa9fcd1d990ae1ca51640df5e2
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-12-16T10:31:15-05:00
Commit Message:
XEEN: Convert character _awards array from bool to int
This is needed for the Warzone award (9), which doubles as a counter
Changed paths:
engines/xeen/character.cpp
engines/xeen/character.h
engines/xeen/locations.cpp
diff --git a/engines/xeen/character.cpp b/engines/xeen/character.cpp
index 29b8dcb..8a6dd14 100644
--- a/engines/xeen/character.cpp
+++ b/engines/xeen/character.cpp
@@ -682,7 +682,7 @@ void Character::clear() {
_birthDay = 0;
_tempAge = 0;
Common::fill(&_skills[0], &_skills[18], 0);
- Common::fill(&_awards[0], &_awards[128], false);
+ Common::fill(&_awards[0], &_awards[128], 0);
Common::fill(&_spells[0], &_spells[39], 0);
_lloydMap = 0;
_hasSpells = false;
@@ -748,13 +748,16 @@ void Character::synchronize(Common::Serializer &s) {
for (int idx = 0; idx < 18; ++idx)
s.syncAsByte(_skills[idx]);
- // Synchronize character awards
+ // Synchronize character awards. The original packed awards 64..127 in the
+ // upper nibble of the first 64 bytes. Except for award 9, which was a full
+ // byte counter counting the number of times the warzone was awarded
for (int idx = 0; idx < 64; ++idx) {
- byte b = (_awards[idx] ? 1 : 0) | (_awards[idx + 64] ? 0x10 : 0);
+ byte b = (idx == WARZONE_AWARD) ? _awards[idx] :
+ (_awards[idx] ? 0x1 : 0) | (_awards[idx + 64] ? 0x10 : 0);
s.syncAsByte(b);
if (s.isLoading()) {
- _awards[idx] = (b & 0xF) != 0;
- _awards[idx + 64] = (b & 0xF0) != 0;
+ _awards[idx] = (idx == WARZONE_AWARD) ? b : b & 0xF;
+ _awards[idx + 64] = (idx == WARZONE_AWARD) ? 0 : (b >> 4) & 0xf;
}
}
@@ -1041,7 +1044,7 @@ void Character::setAward(int awardId, bool value) {
else if (awardId == 81)
v = 127;
- _awards[v] = value;
+ _awards[v] = value ? 1 : 0;
}
bool Character::hasAward(int awardId) const {
diff --git a/engines/xeen/character.h b/engines/xeen/character.h
index c16ae6a..c19cfef 100644
--- a/engines/xeen/character.h
+++ b/engines/xeen/character.h
@@ -35,6 +35,7 @@ namespace Xeen {
#define INV_ITEMS_TOTAL 9
#define MAX_SPELLS_PER_CLASS 39
#define AWARDS_TOTAL 88
+#define WARZONE_AWARD 9
enum BonusFlags {
ITEMFLAG_BONUS_MASK = 0xBF, ITEMFLAG_CURSED = 0x40, ITEMFLAG_BROKEN = 0x80
@@ -288,7 +289,7 @@ public:
uint _birthDay;
int _tempAge;
int _skills[18];
- bool _awards[128];
+ int _awards[128];
int _spells[MAX_SPELLS_PER_CLASS];
int _lloydMap;
Common::Point _lloydPosition;
@@ -372,8 +373,14 @@ public:
bool noActions();
+ /**
+ * Sets an award status
+ */
void setAward(int awardId, bool value);
+ /**
+ * Returns true if a character has a given award
+ */
bool hasAward(int awardId) const;
int getArmorClass(bool baseOnly = false) const;
diff --git a/engines/xeen/locations.cpp b/engines/xeen/locations.cpp
index e11f3da..76c1839 100644
--- a/engines/xeen/locations.cpp
+++ b/engines/xeen/locations.cpp
@@ -1125,11 +1125,11 @@ int ArenaLocation::show() {
// Give each character the award
for (uint idx = 0; idx < party._activeParty.size(); ++idx) {
- party._activeParty[idx]._awards[9]++;
+ party._activeParty[idx]._awards[WARZONE_AWARD]++;
}
Common::String format = map._events._text[3];
- Common::String count = Common::String::format("%05u", party._activeParty[0]._awards[9]);
+ Common::String count = Common::String::format("%05u", party._activeParty[0]._awards[WARZONE_AWARD]);
int numIdx = count[3] == '1' ? 0 : count[4] - '0';
Common::String msg = Common::String::format(format.c_str(), count.c_str(), SUFFIXES[numIdx]);
@@ -1140,7 +1140,7 @@ int ArenaLocation::show() {
}
for (uint idx = 0; idx < party._activeParty.size(); ++idx) {
- if (party._activeParty[idx]._awards[idx] >= 99) {
+ if (party._activeParty[idx]._awards[WARZONE_AWARD] >= 99) {
LocationMessage::show(27, Res.WARZONE_BATTLE_MASTER, Res.WARZONE_MAXED, 1);
map.load(28);
goto exit;
More information about the Scummvm-git-logs
mailing list