aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMax Horn2007-03-31 14:00:34 +0000
committerMax Horn2007-03-31 14:00:34 +0000
commita08feb9f70d4ac8357db1df15950ff0067504d0d (patch)
tree419163da662065c1e2eed02f18cd05abacb084f4 /engines
parent00919e3a93264bcb261fdc00343ca29b26ac5171 (diff)
downloadscummvm-rg350-a08feb9f70d4ac8357db1df15950ff0067504d0d.tar.gz
scummvm-rg350-a08feb9f70d4ac8357db1df15950ff0067504d0d.tar.bz2
scummvm-rg350-a08feb9f70d4ac8357db1df15950ff0067504d0d.zip
Got rid of some 0xFFFF -> 0xFFFFFFFF conversions and similiar nonsense by using a clever technique called 'signed ints' for room offsets (and this won't cause any regressions; any you may encounter are merely the products of a deranged imagination)
svn-id: r26331
Diffstat (limited to 'engines')
-rw-r--r--engines/scumm/he/resource_he.cpp2
-rw-r--r--engines/scumm/resource.cpp22
-rw-r--r--engines/scumm/resource_v2.cpp16
-rw-r--r--engines/scumm/resource_v3.cpp4
-rw-r--r--engines/scumm/resource_v4.cpp2
-rw-r--r--engines/scumm/scumm.h4
-rw-r--r--engines/scumm/sound.cpp6
7 files changed, 23 insertions, 33 deletions
diff --git a/engines/scumm/he/resource_he.cpp b/engines/scumm/he/resource_he.cpp
index 9f372f0c1a..abff7b479e 100644
--- a/engines/scumm/he/resource_he.cpp
+++ b/engines/scumm/he/resource_he.cpp
@@ -1497,7 +1497,7 @@ void ScummEngine_v70he::readRoomsOffsets() {
num = READ_LE_UINT16(_heV7RoomOffsets);
ptr = _heV7RoomOffsets + 2;
for (i = 0; i < num; i++) {
- _res->roomoffs[rtRoom][i] = READ_LE_UINT32(ptr);
+ _res->roomoffs[rtRoom][i] = (int32)READ_LE_UINT32(ptr);
ptr += 4;
}
}
diff --git a/engines/scumm/resource.cpp b/engines/scumm/resource.cpp
index 7659222754..ffacd8c461 100644
--- a/engines/scumm/resource.cpp
+++ b/engines/scumm/resource.cpp
@@ -86,14 +86,14 @@ void ScummEngine::openRoom(const int room) {
// room 0 contains the data which is used to create the roomno / roomoffs
// tables -- hence obviously we mustn't use those when loading room 0.
const uint32 diskNumber = room ? _res->roomno[rtRoom][room] : 0;
- const uint32 room_offs = room ? _res->roomoffs[rtRoom][room] : 0;
+ const int32 room_offs = room ? _res->roomoffs[rtRoom][room] : 0;
// FIXME: Since room_offs is const, clearly the following loop either
// is never entered, or loops forever (if it wasn't for the return/error
// statements in it, that is). -> This should be cleaned up!
// Maybe we should re-enabled the looping properly, to deal with disc
// changes in COMI ?
- while (room_offs != 0xFFFFFFFF) {
+ while (room_offs != -1) {
if (room_offs != 0 && room != 0 && _game.heversion < 98) {
_fileOffset = _res->roomoffs[rtRoom][room];
@@ -159,7 +159,7 @@ void ScummEngine::closeRoom() {
/** Delete the currently loaded room offsets. */
void ScummEngine::deleteRoomOffsets() {
for (int i = 0; i < _numRooms; i++) {
- if (_res->roomoffs[rtRoom][i] != 0xFFFFFFFF)
+ if (_res->roomoffs[rtRoom][i] != -1)
_res->roomoffs[rtRoom][i] = 0;
}
}
@@ -179,10 +179,10 @@ void ScummEngine::readRoomsOffsets() {
num = _fileHandle->readByte();
while (num--) {
room = _fileHandle->readByte();
- if (_res->roomoffs[rtRoom][room] != 0xFFFFFFFF) {
- _res->roomoffs[rtRoom][room] = _fileHandle->readUint32LE();
+ if (_res->roomoffs[rtRoom][room] != -1) {
+ _res->roomoffs[rtRoom][room] = _fileHandle->readSint32LE();
} else {
- _fileHandle->readUint32LE();
+ _fileHandle->readSint32LE();
}
}
}
@@ -516,7 +516,7 @@ void ScummEngine::readResTypeList(int id) {
_res->roomno[id][i] = _fileHandle->readByte();
}
for (i = 0; i < num; i++) {
- _res->roomoffs[id][i] = _fileHandle->readUint32LE();
+ _res->roomoffs[id][i] = _fileHandle->readSint32LE();
if (id == rtRoom && _game.heversion >= 70)
_heV7RoomIntOffsets[i] = _res->roomoffs[id][i];
@@ -546,7 +546,7 @@ void ResourceManager::allocResTypeData(int id, uint32 tag, int num_, const char
if (mode_) {
roomno[id] = (byte *)calloc(num_, sizeof(byte));
- roomoffs[id] = (uint32 *)calloc(num_, sizeof(uint32));
+ roomoffs[id] = (int32 *)calloc(num_, sizeof(int32));
}
if (_vm->_game.heversion >= 70) {
@@ -623,7 +623,7 @@ void ScummEngine::ensureResourceLoaded(int type, int i) {
int ScummEngine::loadResource(int type, int idx) {
int roomNr;
- uint32 fileOffs;
+ int32 fileOffs;
uint32 size, tag;
debugC(DEBUG_RESOURCE, "loadResource(%s,%d)", resTypeFromId(type), idx);
@@ -650,7 +650,7 @@ int ScummEngine::loadResource(int type, int idx) {
fileOffs = 0;
} else {
fileOffs = _res->roomoffs[type][idx];
- if (fileOffs == 0xFFFFFFFF)
+ if (fileOffs < 0)
return 0;
}
@@ -1301,7 +1301,7 @@ void ScummEngine::allocateArrays() {
if (_game.heversion >= 70) {
_res->allocResTypeData(rtSpoolBuffer, 0, 9, "spool buffer", 1);
- _heV7RoomIntOffsets = (uint32 *)calloc(_numRooms, sizeof(uint32));
+ _heV7RoomIntOffsets = (int32 *)calloc(_numRooms, sizeof(uint32));
}
}
diff --git a/engines/scumm/resource_v2.cpp b/engines/scumm/resource_v2.cpp
index 2a20c8c1d5..3e14f5a6ff 100644
--- a/engines/scumm/resource_v2.cpp
+++ b/engines/scumm/resource_v2.cpp
@@ -91,36 +91,28 @@ void ScummEngine_v2::readClassicIndexFile() {
}
_fileHandle->seek(_numRooms, SEEK_CUR);
for (i = 0; i < _numRooms; i++) {
- _res->roomoffs[rtRoom][i] = _fileHandle->readUint16LE();
- if (_res->roomoffs[rtRoom][i] == 0xFFFF)
- _res->roomoffs[rtRoom][i] = 0xFFFFFFFF;
+ _res->roomoffs[rtRoom][i] = _fileHandle->readSint16LE();
}
for (i = 0; i < _numCostumes; i++) {
_res->roomno[rtCostume][i] = _fileHandle->readByte();
}
for (i = 0; i < _numCostumes; i++) {
- _res->roomoffs[rtCostume][i] = _fileHandle->readUint16LE();
- if (_res->roomoffs[rtCostume][i] == 0xFFFF)
- _res->roomoffs[rtCostume][i] = 0xFFFFFFFF;
+ _res->roomoffs[rtCostume][i] = _fileHandle->readSint16LE();
}
for (i = 0; i < _numScripts; i++) {
_res->roomno[rtScript][i] = _fileHandle->readByte();
}
for (i = 0; i < _numScripts; i++) {
- _res->roomoffs[rtScript][i] = _fileHandle->readUint16LE();
- if (_res->roomoffs[rtScript][i] == 0xFFFF)
- _res->roomoffs[rtScript][i] = 0xFFFFFFFF;
+ _res->roomoffs[rtScript][i] = _fileHandle->readSint16LE();
}
for (i = 0; i < _numSounds; i++) {
_res->roomno[rtSound][i] = _fileHandle->readByte();
}
for (i = 0; i < _numSounds; i++) {
- _res->roomoffs[rtSound][i] = _fileHandle->readUint16LE();
- if (_res->roomoffs[rtSound][i] == 0xFFFF)
- _res->roomoffs[rtSound][i] = 0xFFFFFFFF;
+ _res->roomoffs[rtSound][i] = _fileHandle->readSint16LE();
}
}
diff --git a/engines/scumm/resource_v3.cpp b/engines/scumm/resource_v3.cpp
index 96227b696f..b35e13ceab 100644
--- a/engines/scumm/resource_v3.cpp
+++ b/engines/scumm/resource_v3.cpp
@@ -52,9 +52,7 @@ void ScummEngine_v3old::readResTypeList(int id) {
_res->roomno[id][i] = _fileHandle->readByte();
}
for (i = 0; i < num; i++) {
- _res->roomoffs[id][i] = _fileHandle->readUint16LE();
- if (_res->roomoffs[id][i] == 0xFFFF)
- _res->roomoffs[id][i] = 0xFFFFFFFF;
+ _res->roomoffs[id][i] = _fileHandle->readSint16LE();
}
}
diff --git a/engines/scumm/resource_v4.cpp b/engines/scumm/resource_v4.cpp
index 6b02494856..4bfe5c70bb 100644
--- a/engines/scumm/resource_v4.cpp
+++ b/engines/scumm/resource_v4.cpp
@@ -46,7 +46,7 @@ void ScummEngine_v4::readResTypeList(int id) {
for (i = 0; i < num; i++) {
_res->roomno[id][i] = _fileHandle->readByte();
- _res->roomoffs[id][i] = _fileHandle->readUint32LE();
+ _res->roomoffs[id][i] = _fileHandle->readSint32LE();
}
}
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index fe6b259411..d4eff5a972 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -350,7 +350,7 @@ protected:
byte *status[rtNumTypes];
public:
byte *roomno[rtNumTypes];
- uint32 *roomoffs[rtNumTypes];
+ int32 *roomoffs[rtNumTypes];
uint32 *globsize[rtNumTypes];
protected:
@@ -723,7 +723,7 @@ protected:
int _resourceHeaderSize;
byte _resourceMapper[128];
byte *_heV7DiskOffsets;
- uint32 *_heV7RoomIntOffsets;
+ int32 *_heV7RoomIntOffsets;
const byte *_resourceLastSearchBuf; // FIXME: need to put it to savefile?
uint32 _resourceLastSearchSize; // FIXME: need to put it to savefile?
diff --git a/engines/scumm/sound.cpp b/engines/scumm/sound.cpp
index a81fc80b51..c2fb48a653 100644
--- a/engines/scumm/sound.cpp
+++ b/engines/scumm/sound.cpp
@@ -1221,7 +1221,7 @@ int ScummEngine::readSoundResource(int type, int idx) {
debugC(DEBUG_SOUND, "FMUS file %s", buffer);
if (dmuFile.open(buffer) == false) {
error("Can't open music file %s*", buffer);
- _res->roomoffs[type][idx] = 0xFFFFFFFF;
+ _res->roomoffs[type][idx] = -1;
return 0;
}
dmuFile.seek(4, SEEK_SET);
@@ -1245,7 +1245,7 @@ int ScummEngine::readSoundResource(int type, int idx) {
}
error("Unrecognized base tag 0x%08x in sound %d", basetag, idx);
}
- _res->roomoffs[type][idx] = 0xFFFFFFFF;
+ _res->roomoffs[type][idx] = -1;
return 0;
}
@@ -2107,7 +2107,7 @@ int ScummEngine::readSoundResourceSmallHeader(int type, int idx) {
_fileHandle->read(_res->createResource(type, idx, ro_size - 4), ro_size - 4);
return 1;
}
- _res->roomoffs[type][idx] = 0xFFFFFFFF;
+ _res->roomoffs[type][idx] = -1;
return 0;
}