[Scummvm-cvs-logs] SF.net SVN: scummvm: [26353] scummvm/trunk/engines/scumm

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sun Apr 1 17:58:34 CEST 2007


Revision: 26353
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26353&view=rev
Author:   fingolfin
Date:     2007-04-01 08:58:34 -0700 (Sun, 01 Apr 2007)

Log Message:
-----------
Reverted my roomoffs changes (broke the Loom intro), and instead added the constant RES_INVALID_OFFSET to indicate an invalid room offset

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/he/resource_he.cpp
    scummvm/trunk/engines/scumm/resource.cpp
    scummvm/trunk/engines/scumm/resource_v2.cpp
    scummvm/trunk/engines/scumm/resource_v3.cpp
    scummvm/trunk/engines/scumm/resource_v4.cpp
    scummvm/trunk/engines/scumm/script.cpp
    scummvm/trunk/engines/scumm/scumm.h
    scummvm/trunk/engines/scumm/sound.cpp

Modified: scummvm/trunk/engines/scumm/he/resource_he.cpp
===================================================================
--- scummvm/trunk/engines/scumm/he/resource_he.cpp	2007-04-01 15:41:34 UTC (rev 26352)
+++ scummvm/trunk/engines/scumm/he/resource_he.cpp	2007-04-01 15:58:34 UTC (rev 26353)
@@ -1497,7 +1497,7 @@
 	num = READ_LE_UINT16(_heV7RoomOffsets);
 	ptr = _heV7RoomOffsets + 2;
 	for (i = 0; i < num; i++) {
-		_res->roomoffs[rtRoom][i] = (int32)READ_LE_UINT32(ptr);
+		_res->roomoffs[rtRoom][i] = READ_LE_UINT32(ptr);
 		ptr += 4;
 	}
 }

Modified: scummvm/trunk/engines/scumm/resource.cpp
===================================================================
--- scummvm/trunk/engines/scumm/resource.cpp	2007-04-01 15:41:34 UTC (rev 26352)
+++ scummvm/trunk/engines/scumm/resource.cpp	2007-04-01 15:58:34 UTC (rev 26353)
@@ -86,14 +86,14 @@
 	// 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 int32 room_offs = room ? _res->roomoffs[rtRoom][room] : 0;
+	const uint32 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 != -1) {
+	while (room_offs != RES_INVALID_OFFSET) {
 
 		if (room_offs != 0 && room != 0 && _game.heversion < 98) {
 			_fileOffset = _res->roomoffs[rtRoom][room];
@@ -159,7 +159,7 @@
 /** Delete the currently loaded room offsets. */
 void ScummEngine::deleteRoomOffsets() {
 	for (int i = 0; i < _numRooms; i++) {
-		if (_res->roomoffs[rtRoom][i] != -1)
+		if (_res->roomoffs[rtRoom][i] != RES_INVALID_OFFSET)
 			_res->roomoffs[rtRoom][i] = 0;
 	}
 }
@@ -179,10 +179,10 @@
 	num = _fileHandle->readByte();
 	while (num--) {
 		room = _fileHandle->readByte();
-		if (_res->roomoffs[rtRoom][room] != -1) {
-			_res->roomoffs[rtRoom][room] = _fileHandle->readSint32LE();
+		if (_res->roomoffs[rtRoom][room] != RES_INVALID_OFFSET) {
+			_res->roomoffs[rtRoom][room] = _fileHandle->readUint32LE();
 		} else {
-			_fileHandle->readSint32LE();
+			_fileHandle->readUint32LE();
 		}
 	}
 }
@@ -516,7 +516,7 @@
 		_res->roomno[id][i] = _fileHandle->readByte();
 	}
 	for (i = 0; i < num; i++) {
-		_res->roomoffs[id][i] = _fileHandle->readSint32LE();
+		_res->roomoffs[id][i] = _fileHandle->readUint32LE();
 
 		if (id == rtRoom && _game.heversion >= 70)
 			_heV7RoomIntOffsets[i] = _res->roomoffs[id][i];
@@ -546,7 +546,7 @@
 
 	if (mode_) {
 		roomno[id] = (byte *)calloc(num_, sizeof(byte));
-		roomoffs[id] = (int32 *)calloc(num_, sizeof(int32));
+		roomoffs[id] = (uint32 *)calloc(num_, sizeof(uint32));
 	}
 
 	if (_vm->_game.heversion >= 70) {
@@ -623,7 +623,7 @@
 
 int ScummEngine::loadResource(int type, int idx) {
 	int roomNr;
-	int32 fileOffs;
+	uint32 fileOffs;
 	uint32 size, tag;
 
 	debugC(DEBUG_RESOURCE, "loadResource(%s,%d)", resTypeFromId(type), idx);
@@ -650,7 +650,7 @@
 			fileOffs = 0;
 	} else {
 		fileOffs = _res->roomoffs[type][idx];
-		if (fileOffs < 0)
+		if (fileOffs == RES_INVALID_OFFSET)
 			return 0;
 	}
 
@@ -1301,7 +1301,7 @@
 
 	if (_game.heversion >= 70) {
 		_res->allocResTypeData(rtSpoolBuffer, 0, 9, "spool buffer", 1);
-		_heV7RoomIntOffsets = (int32 *)calloc(_numRooms, sizeof(uint32));
+		_heV7RoomIntOffsets = (uint32 *)calloc(_numRooms, sizeof(uint32));
 	}
 }
 

Modified: scummvm/trunk/engines/scumm/resource_v2.cpp
===================================================================
--- scummvm/trunk/engines/scumm/resource_v2.cpp	2007-04-01 15:41:34 UTC (rev 26352)
+++ scummvm/trunk/engines/scumm/resource_v2.cpp	2007-04-01 15:58:34 UTC (rev 26353)
@@ -91,28 +91,36 @@
 	}
 	_fileHandle->seek(_numRooms, SEEK_CUR);
 	for (i = 0; i < _numRooms; i++) {
-		_res->roomoffs[rtRoom][i] = _fileHandle->readSint16LE();
+		_res->roomoffs[rtRoom][i] = _fileHandle->readUint16LE();
+		if (_res->roomoffs[rtRoom][i] == 0xFFFF)
+			_res->roomoffs[rtRoom][i] = RES_INVALID_OFFSET;
 	}
 
 	for (i = 0; i < _numCostumes; i++) {
 		_res->roomno[rtCostume][i] = _fileHandle->readByte();
 	}
 	for (i = 0; i < _numCostumes; i++) {
-		_res->roomoffs[rtCostume][i] = _fileHandle->readSint16LE();
+		_res->roomoffs[rtCostume][i] = _fileHandle->readUint16LE();
+		if (_res->roomoffs[rtCostume][i] == 0xFFFF)
+			_res->roomoffs[rtCostume][i] = RES_INVALID_OFFSET;
 	}
 
 	for (i = 0; i < _numScripts; i++) {
 		_res->roomno[rtScript][i] = _fileHandle->readByte();
 	}
 	for (i = 0; i < _numScripts; i++) {
-		_res->roomoffs[rtScript][i] = _fileHandle->readSint16LE();
+		_res->roomoffs[rtScript][i] = _fileHandle->readUint16LE();
+		if (_res->roomoffs[rtScript][i] == 0xFFFF)
+			_res->roomoffs[rtScript][i] = RES_INVALID_OFFSET;
 	}
 
 	for (i = 0; i < _numSounds; i++) {
 		_res->roomno[rtSound][i] = _fileHandle->readByte();
 	}
 	for (i = 0; i < _numSounds; i++) {
-		_res->roomoffs[rtSound][i] = _fileHandle->readSint16LE();
+		_res->roomoffs[rtSound][i] = _fileHandle->readUint16LE();
+		if (_res->roomoffs[rtSound][i] == 0xFFFF)
+			_res->roomoffs[rtSound][i] = RES_INVALID_OFFSET;
 	}
 }
 

Modified: scummvm/trunk/engines/scumm/resource_v3.cpp
===================================================================
--- scummvm/trunk/engines/scumm/resource_v3.cpp	2007-04-01 15:41:34 UTC (rev 26352)
+++ scummvm/trunk/engines/scumm/resource_v3.cpp	2007-04-01 15:58:34 UTC (rev 26353)
@@ -52,7 +52,9 @@
 			_res->roomno[id][i] = _fileHandle->readByte();
 	}
 	for (i = 0; i < num; i++) {
-		_res->roomoffs[id][i] = _fileHandle->readSint16LE();
+		_res->roomoffs[id][i] = _fileHandle->readUint16LE();
+		if (_res->roomoffs[id][i] == 0xFFFF)
+			_res->roomoffs[id][i] = RES_INVALID_OFFSET;
 	}
 }
 

Modified: scummvm/trunk/engines/scumm/resource_v4.cpp
===================================================================
--- scummvm/trunk/engines/scumm/resource_v4.cpp	2007-04-01 15:41:34 UTC (rev 26352)
+++ scummvm/trunk/engines/scumm/resource_v4.cpp	2007-04-01 15:58:34 UTC (rev 26353)
@@ -46,7 +46,7 @@
 
 	for (i = 0; i < num; i++) {
 		_res->roomno[id][i] = _fileHandle->readByte();
-		_res->roomoffs[id][i] = _fileHandle->readSint32LE();
+		_res->roomoffs[id][i] = _fileHandle->readUint32LE();
 	}
 }
 

Modified: scummvm/trunk/engines/scumm/script.cpp
===================================================================
--- scummvm/trunk/engines/scumm/script.cpp	2007-04-01 15:41:34 UTC (rev 26352)
+++ scummvm/trunk/engines/scumm/script.cpp	2007-04-01 15:58:34 UTC (rev 26353)
@@ -152,7 +152,6 @@
 
 	// WORKAROUND for bug #1555938: Disallow pulling the rope if it's
 	// already in the player's inventory.
-
 	if (_game.id == GID_MONKEY2 && obj == 1047 && entry == 6 && whereIsObject(obj) == WIO_INVENTORY) {
 		return 0;
 	}

Modified: scummvm/trunk/engines/scumm/scumm.h
===================================================================
--- scummvm/trunk/engines/scumm/scumm.h	2007-04-01 15:41:34 UTC (rev 26352)
+++ scummvm/trunk/engines/scumm/scumm.h	2007-04-01 15:58:34 UTC (rev 26353)
@@ -328,6 +328,9 @@
 	rtNumTypes = 22
 };
 
+enum {
+	RES_INVALID_OFFSET = 0xFFFFFFFF
+};
 
 /**
  * The 'resource manager' class. Currently doesn't really deserve to be called
@@ -350,7 +353,7 @@
 	byte *status[rtNumTypes];
 public:
 	byte *roomno[rtNumTypes];
-	int32 *roomoffs[rtNumTypes];
+	uint32 *roomoffs[rtNumTypes];
 	uint32 *globsize[rtNumTypes];
 
 protected:
@@ -723,7 +726,7 @@
 	int _resourceHeaderSize;
 	byte _resourceMapper[128];
 	byte *_heV7DiskOffsets;
-	int32 *_heV7RoomIntOffsets;
+	uint32 *_heV7RoomIntOffsets;
 	const byte *_resourceLastSearchBuf; // FIXME: need to put it to savefile?
 	uint32 _resourceLastSearchSize;    // FIXME: need to put it to savefile?
 

Modified: scummvm/trunk/engines/scumm/sound.cpp
===================================================================
--- scummvm/trunk/engines/scumm/sound.cpp	2007-04-01 15:41:34 UTC (rev 26352)
+++ scummvm/trunk/engines/scumm/sound.cpp	2007-04-01 15:58:34 UTC (rev 26353)
@@ -1221,7 +1221,7 @@
 		debugC(DEBUG_SOUND, "FMUS file %s", buffer);
 		if (dmuFile.open(buffer) == false) {
 			error("Can't open music file %s*", buffer);
-			_res->roomoffs[type][idx] = -1;
+			_res->roomoffs[type][idx] = RES_INVALID_OFFSET;
 			return 0;
 		}
 		dmuFile.seek(4, SEEK_SET);
@@ -1245,7 +1245,7 @@
 		}
 		error("Unrecognized base tag 0x%08x in sound %d", basetag, idx);
 	}
-	_res->roomoffs[type][idx] = -1;
+	_res->roomoffs[type][idx] = RES_INVALID_OFFSET;
 	return 0;
 }
 
@@ -2107,7 +2107,7 @@
 		_fileHandle->read(_res->createResource(type, idx, ro_size - 4), ro_size - 4);
 		return 1;
 	}
-	_res->roomoffs[type][idx] = -1;
+	_res->roomoffs[type][idx] = RES_INVALID_OFFSET;
 	return 0;
 }
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list