diff options
-rw-r--r-- | engines/simon/items.cpp | 24 | ||||
-rw-r--r-- | engines/simon/saveload.cpp | 24 | ||||
-rw-r--r-- | engines/simon/simon.cpp | 2 | ||||
-rw-r--r-- | engines/simon/simon.h | 4 |
4 files changed, 37 insertions, 17 deletions
diff --git a/engines/simon/items.cpp b/engines/simon/items.cpp index d973bb86b6..03a7f90527 100644 --- a/engines/simon/items.cpp +++ b/engines/simon/items.cpp @@ -1365,22 +1365,26 @@ void SimonEngine::o_isAdjNoun() { void SimonEngine::o_b2Set() { // 166: set bit2 - setBitFlag(256 + getVarOrByte(), true); + uint bit = getVarOrByte(); + _bitArrayTwo[bit / 16] |= (1 << (bit & 15)); } void SimonEngine::o_b2Clear() { // 167: clear bit2 - setBitFlag(256 + getVarOrByte(), false); + uint bit = getVarOrByte(); + _bitArrayTwo[bit / 16] &= ~(1 << (bit & 15)); } void SimonEngine::o_b2Zero() { // 168: is bit2 clear - setScriptCondition(!getBitFlag(256 + getVarOrByte())); + uint bit = getVarOrByte(); + setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) == 0); } void SimonEngine::o_b2NotZero() { // 169: is bit2 set - setScriptCondition(getBitFlag(256 + getVarOrByte())); + uint bit = getVarOrByte(); + setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) != 0); } void SimonEngine::o_lockZones() { @@ -2090,22 +2094,26 @@ void SimonEngine::o3_setColour() { void SimonEngine::o3_b3Set() { // 196: set bit3 - setBitFlag(512 + getVarOrByte(), true); + uint bit = getVarOrByte(); + _bitArrayThree[bit / 16] |= (1 << (bit & 15)); } void SimonEngine::o3_b3Clear() { // 197: clear bit3 - setBitFlag(512 + getVarOrByte(), false); + uint bit = getVarOrByte(); + _bitArrayThree[bit / 16] &= ~(1 << (bit & 15)); } void SimonEngine::o3_b3Zero() { // 198: is bit3 clear - setScriptCondition(!getBitFlag(512 + getVarOrByte())); + uint bit = getVarOrByte(); + setScriptCondition((_bitArrayThree[bit / 16] & (1 << (bit & 15))) == 0); } void SimonEngine::o3_b3NotZero() { // 199: is bit3 set - setScriptCondition(getBitFlag(512 + getVarOrByte())); + uint bit = getVarOrByte(); + setScriptCondition((_bitArrayThree[bit / 16] & (1 << (bit & 15))) != 0); } // ----------------------------------------------------------------------- diff --git a/engines/simon/saveload.cpp b/engines/simon/saveload.cpp index ee05b6df63..86097ebe2f 100644 --- a/engines/simon/saveload.cpp +++ b/engines/simon/saveload.cpp @@ -558,14 +558,18 @@ bool SimonEngine::saveGame(uint slot, char *caption) { f->writeUint16BE(itemPtrToID(_itemStore[i])); } - // Write the bits in array 1 & 2 - for (i = 0; i != 32; i++) + // Write the bits in array 1 + for (i = 0; i != 16; i++) f->writeUint16BE(_bitArray[i]); + // Write the bits in array 2 + for (i = 0; i != 16; i++) + f->writeUint16BE(_bitArrayTwo[i]); + // Write the bits in array 3 if (getGameType() == GType_FF) { - for (i = 33; i != 48; i++) - f->writeUint16BE(_bitArray[i]); + for (i = 0; i != 16; i++) + f->writeUint16BE(_bitArrayThree[i]); } f->flush(); @@ -688,14 +692,18 @@ bool SimonEngine::loadGame(uint slot) { _itemStore[i] = derefItem(f->readUint16BE()); } - // Read the bits in array 1 & 2 - for (i = 0; i != 32; i++) + // Read the bits in array 1 + for (i = 0; i != 16; i++) _bitArray[i] = f->readUint16BE(); + // Read the bits in array 2 + for (i = 0; i != 16; i++) + _bitArrayTwo[i] = f->readUint16BE(); + // Read the bits in array 3 if (getGameType() == GType_FF) { - for (i = 33; i != 48; i++) - _bitArray[i] = f->readUint16BE(); + for (i = 0; i != 16; i++) + _bitArrayThree[i] = f->readUint16BE(); } if (f->ioFailed()) { diff --git a/engines/simon/simon.cpp b/engines/simon/simon.cpp index aefb9080ac..a9f3bed8a3 100644 --- a/engines/simon/simon.cpp +++ b/engines/simon/simon.cpp @@ -347,6 +347,8 @@ SimonEngine::SimonEngine(OSystem *syst) memset(_speechIdArray4, 0, sizeof(_speechIdArray4)); memset(_bitArray, 0, sizeof(_bitArray)); + memset(_bitArrayTwo, 0, sizeof(_bitArrayTwo)); + memset(_bitArrayThree, 0, sizeof(_bitArrayThree)); memset(_variableArray, 0, sizeof(_variableArray)); memset(_variableArray2, 0, sizeof(_variableArray2)); diff --git a/engines/simon/simon.h b/engines/simon/simon.h index ffde748c37..2fd6cf720b 100644 --- a/engines/simon/simon.h +++ b/engines/simon/simon.h @@ -384,7 +384,9 @@ protected: uint16 _stringIdArray3[40]; uint16 _speechIdArray4[40]; - uint16 _bitArray[48]; + uint16 _bitArray[16]; + uint16 _bitArrayTwo[16]; + uint16 _bitArrayThree[16]; int16 _variableArray[256]; int16 _variableArray2[256]; int16 *_variableArrayPtr; |