aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2017-12-29 00:16:24 -0500
committerPaul Gilbert2017-12-29 00:16:24 -0500
commitfb73c1a3ccbf3ce489cd2539a2e4b769a138a055 (patch)
tree20c074c2cb6ac2aaf8655cb3d5c6c2297102eca5
parenta37b0e8181f055d4778c53aa873816af4349aa9d (diff)
downloadscummvm-rg350-fb73c1a3ccbf3ce489cd2539a2e4b769a138a055.tar.gz
scummvm-rg350-fb73c1a3ccbf3ce489cd2539a2e4b769a138a055.tar.bz2
scummvm-rg350-fb73c1a3ccbf3ce489cd2539a2e4b769a138a055.zip
XEEN: Revert "XEEN: Change _gameFlags to it's own class"
This reverts commit a37b0e8181f055d4778c53aa873816af4349aa9d. Turns out the overlapping byte access was for the questItems array, but using Ids which start at 82 rather than 0
-rw-r--r--engines/xeen/combat.cpp6
-rw-r--r--engines/xeen/interface.cpp4
-rw-r--r--engines/xeen/map.cpp8
-rw-r--r--engines/xeen/party.cpp45
-rw-r--r--engines/xeen/party.h37
-rw-r--r--engines/xeen/scripts.cpp2
6 files changed, 21 insertions, 81 deletions
diff --git a/engines/xeen/combat.cpp b/engines/xeen/combat.cpp
index bcedff2229..fe2eaa94bf 100644
--- a/engines/xeen/combat.cpp
+++ b/engines/xeen/combat.cpp
@@ -1476,16 +1476,16 @@ void Combat::attack2(int damage, RangeType rangeType) {
if (monsterDied) {
if (!isDarkCc) {
if (_monster2Attack == 20 && party._mazeId == 41)
- party._gameFlags.set(11, true);
+ party._gameFlags[0][11] = true;
if (_monster2Attack == 8 && party._mazeId == 78) {
- party._gameFlags.set(60, true);
+ party._gameFlags[0][60] = true;
party._questFlags[0][23] = false;
for (uint idx = 0; idx < party._activeParty.size(); ++idx)
party._activeParty[idx].setAward(42, true);
if (_monster2Attack == 27 && party._mazeId == 29)
- party._gameFlags.set(104, true);
+ party._gameFlags[0][104] = true;
}
}
diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp
index b4e486ed03..0cc509a66a 100644
--- a/engines/xeen/interface.cpp
+++ b/engines/xeen/interface.cpp
@@ -677,7 +677,7 @@ void Interface::doStepCode() {
break;
}
- if (_vm->_files->_isDarkCc && party._gameFlags.get(118, 1)) {
+ if (_vm->_files->_isDarkCc && party._gameFlags[1][118]) {
_falling = false;
} else {
if (_falling)
@@ -711,7 +711,7 @@ void Interface::startFalling(bool flag) {
Scripts &scripts = *_vm->_scripts;
bool isDarkCc = _vm->_files->_isDarkCc;
- if (isDarkCc && party._gameFlags.get(118, 1)) {
+ if (isDarkCc && party._gameFlags[1][118]) {
_falling = 0;
return;
}
diff --git a/engines/xeen/map.cpp b/engines/xeen/map.cpp
index 5b7804c9f6..2b954f5afa 100644
--- a/engines/xeen/map.cpp
+++ b/engines/xeen/map.cpp
@@ -1058,7 +1058,7 @@ void Map::load(int mapId) {
if (isDarkCc && mapId == 50)
mazeDataP->setAllTilesStepped();
- if (!isDarkCc && party._gameFlags.get(25) &&
+ if (!isDarkCc && party._gameFlags[0][25] &&
(mapId == 42 || mapId == 43 || mapId == 4)) {
mazeDataP->clearCellSurfaces();
}
@@ -1100,7 +1100,7 @@ void Map::load(int mapId) {
if ((_mobData._monsters[0]._position.x > 31 || _mobData._monsters[0]._position.y > 31) &&
(_mobData._monsters[1]._position.x > 31 || _mobData._monsters[1]._position.y > 31) &&
(_mobData._monsters[2]._position.x > 31 || _mobData._monsters[2]._position.y > 31)) {
- party._gameFlags.set(56, true);
+ party._gameFlags[0][56] = true;
}
}
}
@@ -1135,7 +1135,7 @@ void Map::load(int mapId) {
_mobData._objects[29]._spriteId = 0;
_mobData._objects[29]._id = 8;
_mobData._objectSprites[i]._sprites.clear();
- } else if (mapId == 12 && party._gameFlags.get(43) &&
+ } else if (mapId == 12 && party._gameFlags[0][43] &&
_mobData._objectSprites[i]._spriteId == 118 && !isDarkCc) {
filename = "085.obj";
_mobData._objectSprites[0]._spriteId = 85;
@@ -1445,7 +1445,7 @@ void Map::saveMap() {
for (uint idx = 0; idx < MIN(_mobData._monsters.size(), (uint)3); ++idx) {
MazeMonster &mon = _mobData._monsters[idx];
if (mon._position.x > 31 || mon._position.y > 31) {
- party._gameFlags.set(56, true);
+ party._gameFlags[0][56] = true;
break;
}
}
diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp
index 8af7db82ad..0a2e5b9f82 100644
--- a/engines/xeen/party.cpp
+++ b/engines/xeen/party.cpp
@@ -72,34 +72,6 @@ Treasure::Treasure() {
/*------------------------------------------------------------------------*/
-void Party::GameFlags::clear() {
- Common::fill(&_flags[0][0], &_flags[0][0] + (FLAGS_COUNT / 8), 0);
- Common::fill(&_flags[1][0], &_flags[1][0] + (FLAGS_COUNT / 8), 0);
-}
-
-bool Party::GameFlags::get(uint flagNum, uint sideNum) const {
- if (flagNum >= FLAGS_COUNT) {
- sideNum = flagNum / FLAGS_COUNT;
- flagNum %= FLAGS_COUNT;
- }
-
- return (_flags[sideNum][flagNum / 8] & (1 << (flagNum % 8))) != 0;
-}
-
-void Party::GameFlags::set(uint flagNum, uint sideNum, bool value) {
- byte &b = _flags[sideNum][flagNum / 8];
- b &= ~(1 << (flagNum % 8));
- if (value)
- b |= 1 << (flagNum % 8);
-}
-
-void Party::GameFlags::synchronize(Common::Serializer &s) {
- s.syncBytes(&_flags[0][0], FLAGS_COUNT / 8);
- s.syncBytes(&_flags[1][0], FLAGS_COUNT / 8);
-}
-
-/*------------------------------------------------------------------------*/
-
XeenEngine *Party::_vm;
Party::Party(XeenEngine *vm) {
@@ -140,6 +112,8 @@ Party::Party(XeenEngine *vm) {
_totalTime = 0;
_rested = false;
+ Common::fill(&_gameFlags[0][0], &_gameFlags[0][256], false);
+ Common::fill(&_gameFlags[1][0], &_gameFlags[1][256], false);
Common::fill(&_worldFlags[0], &_worldFlags[128], false);
Common::fill(&_questFlags[0][0], &_questFlags[0][30], false);
Common::fill(&_questFlags[1][0], &_questFlags[1][30], false);
@@ -232,7 +206,8 @@ void Party::synchronize(Common::Serializer &s) {
s.syncAsUint32LE(_bankGems);
s.syncAsUint32LE(_totalTime);
s.syncAsByte(_rested);
- _gameFlags.synchronize(s);
+ File::syncBitFlags(s, &_gameFlags[0][0], &_gameFlags[0][256]);
+ File::syncBitFlags(s, &_gameFlags[1][0], &_gameFlags[1][256]);
File::syncBitFlags(s, &_worldFlags[0], &_worldFlags[128]);
File::syncBitFlags(s, &_questFlags[0][0], &_questFlags[0][30]);
File::syncBitFlags(s, &_questFlags[1][0], &_questFlags[1][30]);
@@ -851,7 +826,7 @@ bool Party::giveTake(int takeMode, uint takeVal, int giveMode, uint giveVal, int
break;
}
case 20:
- _gameFlags.set(takeVal, files._isDarkCc, false);
+ _gameFlags[files._isDarkCc][takeVal] = false;
break;
case 21: {
bool found = false;
@@ -1121,7 +1096,7 @@ bool Party::giveTake(int takeMode, uint takeVal, int giveMode, uint giveVal, int
break;
}
case 20:
- _gameFlags.set(giveVal, files._isDarkCc, true);
+ _gameFlags[files._isDarkCc][giveVal] = true;
break;
case 21: {
int idx;
@@ -1430,10 +1405,10 @@ void Party::subPartyTime(int time) {
}
void Party::resetYearlyBits() {
- _gameFlags.set(55, false);
- _gameFlags.set(155, false);
- _gameFlags.set(222, false);
- _gameFlags.set(231, false);
+ _gameFlags[0][55] = false;
+ _gameFlags[0][155] = false;
+ _gameFlags[0][222] = false;
+ _gameFlags[0][231] = false;
}
const int BLACKSMITH_DATA1[4][4] = {
diff --git a/engines/xeen/party.h b/engines/xeen/party.h
index 3abb708c26..31feaec503 100644
--- a/engines/xeen/party.h
+++ b/engines/xeen/party.h
@@ -47,7 +47,6 @@ enum PartyBank {
WHERE_PARTY = 0, WHERE_BANK = 1
};
-#define FLAGS_COUNT 256
#define ITEMS_COUNT 36
#define TOTAL_CHARACTERS 30
#define XEEN_TOTAL_CHARACTERS 24
@@ -83,40 +82,6 @@ public:
class Party {
friend class Character;
friend class InventoryItems;
-
- class GameFlags {
- private:
- byte _flags[2][FLAGS_COUNT / 8];
- public:
- byte &_state;
- public:
- GameFlags() : _state(_flags[0][6]) { clear(); }
-
- /**
- * Clears the flags
- */
- void clear();
-
- /**
- * Get a flag value
- */
- bool get(uint flagNum, uint sideNum = 0) const;
-
- /**
- * Sets a flag value
- */
- void set(uint flagNum, bool value) { set(flagNum % 256, flagNum / 256, value); }
-
- /**
- * Sets a flag value
- */
- void set(uint flagNum, uint sideNum, bool value);
-
- /**
- * Synchronize flags
- */
- void synchronize(Common::Serializer &s);
- };
private:
static XeenEngine *_vm;
Character _itemsCharacter;
@@ -185,7 +150,7 @@ public:
uint _bankGems;
int _totalTime;
bool _rested;
- GameFlags _gameFlags;
+ bool _gameFlags[2][256];
bool _worldFlags[128];
bool _questFlags[2][30];
int _questItems[TOTAL_QUEST_ITEMS];
diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp
index b1cfa71585..75338eb3f8 100644
--- a/engines/xeen/scripts.cpp
+++ b/engines/xeen/scripts.cpp
@@ -1541,7 +1541,7 @@ bool Scripts::ifProc(int action, uint32 val, int mode, int charIndex) {
if (files._isDarkCc)
val += 256;
assert(val < 512);
- v = party._gameFlags.get(val) ? val : 0xffffffff;
+ v = party._gameFlags[val / 256][val % 256] ? val : 0xffffffff;
break;
case 21:
// Scans inventories for given item number