[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.430,2.431 resource.cpp,1.306,1.307 resource_v4.cpp,1.19,1.20 resource_v7he.cpp,1.27,1.28 scumm.h,1.570,1.571

Max Horn fingolfin at users.sourceforge.net
Sat Apr 9 13:22:47 CEST 2005


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26927

Modified Files:
	intern.h resource.cpp resource_v4.cpp resource_v7he.cpp 
	scumm.h 
Log Message:
Overload getStringAddress in subclasses; moved V6-V8 specific res stuff to resource.cpp

Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.430
retrieving revision 2.431
diff -u -d -r2.430 -r2.431
--- intern.h	9 Apr 2005 08:55:26 -0000	2.430
+++ intern.h	9 Apr 2005 20:22:30 -0000	2.431
@@ -412,6 +412,7 @@
 	virtual void decodeParseString(int a, int b);
 	virtual void readArrayFromIndexFile();
 
+	virtual byte *getStringAddress(int i);
 	virtual void readMAXS(int blockSize);
 
 	virtual void palManipulateInit(int resID, int start, int end, int time);
@@ -754,15 +755,16 @@
 	ScummEngine_v72he(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16]) : ScummEngine_v70he(detector, syst, gs, md5sum) {}
 
 protected:
-	virtual void readMAXS(int blockSize);
-
 	virtual void setupOpcodes();
 	virtual void executeOpcode(byte i);
 	virtual const char *getOpcodeDesc(byte i);
 
 	virtual void setupScummVars();
 	virtual void readArrayFromIndexFile();
-	
+
+	virtual byte *getStringAddress(int i);
+	virtual void readMAXS(int blockSize);
+
 	virtual void redrawBGAreas();
 
 	ArrayHeader *defineArray(int array, int type, int dim2start, int dim2end, int dim1start, int dim1end);
@@ -924,13 +926,13 @@
 	virtual void scummInit();
 
 protected:
-	virtual void readMAXS(int blockSize);
-
 	virtual void allocateArrays();
 	virtual void setupOpcodes();
 	virtual void executeOpcode(byte i);
 	virtual const char *getOpcodeDesc(byte i);
 	
+	virtual void readMAXS(int blockSize);
+
 	void createWizEmptyImage(const WizParameters *params);
 	void fillWizRect(const WizParameters *params);
 	void processWizImage(const WizParameters *params);

Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource.cpp,v
retrieving revision 1.306
retrieving revision 1.307
diff -u -d -r1.306 -r1.307
--- resource.cpp	9 Apr 2005 20:13:28 -0000	1.306
+++ resource.cpp	9 Apr 2005 20:22:30 -0000	1.307
@@ -25,6 +25,7 @@
 #include "scumm/dialogs.h"
 #include "scumm/imuse.h"
 #include "scumm/imuse_digi/dimuse.h"
+#include "scumm/intern.h"
 #include "scumm/object.h"
 #include "scumm/resource.h"
 #include "scumm/scumm.h"
@@ -706,15 +707,14 @@
 
 byte *ScummEngine::getStringAddress(int i) {
 	byte *addr = getResourceAddress(rtString, i);
+	return addr;
+}
+
+byte *ScummEngine_v6::getStringAddress(int i) {
+	byte *addr = getResourceAddress(rtString, i);
 	if (addr == NULL)
 		return NULL;
-
-	if (_heversion >= 72)
-		return (addr + 0x14);	// ArrayHeader->data
-
-	if (_version >= 6)
-		return (addr + 0x6);	// ArrayHeader->data
-	return addr;
+	return ((ScummEngine_v6::ArrayHeader *)addr)->data;
 }
 
 byte *ScummEngine::getStringAddressVar(int i) {
@@ -994,6 +994,107 @@
 	_dynamicRoomOffsets = true;
 }
 
+void ScummEngine_v8::readMAXS(int blockSize) {
+	debug(9, "readMAXS: MAXS has blocksize %d", blockSize);
+
+	_fileHandle->seek(50 + 50, SEEK_CUR);            // 176 - 8
+	_numVariables = _fileHandle->readUint32LE();     // 1500
+	_numBitVariables = _fileHandle->readUint32LE();  // 2048
+	_fileHandle->readUint32LE();                     // 40
+	_numScripts = _fileHandle->readUint32LE();       // 458
+	_numSounds = _fileHandle->readUint32LE();        // 789
+	_numCharsets = _fileHandle->readUint32LE();      // 1
+	_numCostumes = _fileHandle->readUint32LE();      // 446
+	_numRooms = _fileHandle->readUint32LE();         // 95
+	_fileHandle->readUint32LE();                     // 80
+	_numGlobalObjects = _fileHandle->readUint32LE(); // 1401
+	_fileHandle->readUint32LE();                     // 60
+	_numLocalObjects = _fileHandle->readUint32LE();  // 200
+	_numNewNames = _fileHandle->readUint32LE();      // 100
+	_numFlObject = _fileHandle->readUint32LE();      // 128
+	_numInventory = _fileHandle->readUint32LE();     // 80
+	_numArray = _fileHandle->readUint32LE();         // 200
+	_numVerbs = _fileHandle->readUint32LE();         // 50
+
+	_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
+	_numGlobalScripts = 2000;
+
+	_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
+	_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
+
+	allocateArrays();
+	_dynamicRoomOffsets = true;
+}
+
+void ScummEngine_v7::readMAXS(int blockSize) {
+	debug(9, "readMAXS: MAXS has blocksize %d", blockSize);
+
+	_fileHandle->seek(50 + 50, SEEK_CUR);
+	_numVariables = _fileHandle->readUint16LE();
+	_numBitVariables = _fileHandle->readUint16LE();
+	_fileHandle->readUint16LE();
+	_numGlobalObjects = _fileHandle->readUint16LE();
+	_numLocalObjects = _fileHandle->readUint16LE();
+	_numNewNames = _fileHandle->readUint16LE();
+	_numVerbs = _fileHandle->readUint16LE();
+	_numFlObject = _fileHandle->readUint16LE();
+	_numInventory = _fileHandle->readUint16LE();
+	_numArray = _fileHandle->readUint16LE();
+	_numRooms = _fileHandle->readUint16LE();
+	_numScripts = _fileHandle->readUint16LE();
+	_numSounds = _fileHandle->readUint16LE();
+	_numCharsets = _fileHandle->readUint16LE();
+	_numCostumes = _fileHandle->readUint16LE();
+
+	_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
+
+	if ((_gameId == GID_FT) && (_features & GF_DEMO) && 
+		(_features & GF_PC))
+		_numGlobalScripts = 300;
+	else
+		_numGlobalScripts = 2000;
+
+	_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
+	_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
+
+	allocateArrays();
+	_dynamicRoomOffsets = true;
+}
+
+void ScummEngine_v6::readMAXS(int blockSize) {
+	debug(9, "readMAXS: MAXS has blocksize %d", blockSize);
+
+	_numVariables = _fileHandle->readUint16LE();
+	_fileHandle->readUint16LE();
+	_numBitVariables = _fileHandle->readUint16LE();
+	_numLocalObjects = _fileHandle->readUint16LE();
+	_numArray = _fileHandle->readUint16LE();
+	_fileHandle->readUint16LE();
+	_numVerbs = _fileHandle->readUint16LE();
+	_numFlObject = _fileHandle->readUint16LE();
+	_numInventory = _fileHandle->readUint16LE();
+	_numRooms = _fileHandle->readUint16LE();
+	_numScripts = _fileHandle->readUint16LE();
+	_numSounds = _fileHandle->readUint16LE();
+	_numCharsets = _fileHandle->readUint16LE();
+	_numCostumes = _fileHandle->readUint16LE();
+	_numGlobalObjects = _fileHandle->readUint16LE();
+	_numNewNames = 50;
+
+	_objectRoomTable = NULL;
+	_numGlobalScripts = 200;
+
+	if (_heversion >= 70) {
+		_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
+	}
+
+	_shadowPaletteSize = 256;
+	_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
+
+	allocateArrays();
+	_dynamicRoomOffsets = true;
+}
+
 void ScummEngine::readGlobalObjects() {
 	int i;
 	int num = _fileHandle->readUint16LE();
@@ -1014,6 +1115,42 @@
 #endif
 }
 
+void ScummEngine_v8::readGlobalObjects() {
+	int i;
+	int num = _fileHandle->readUint32LE();
+	assert(num == _numGlobalObjects);
+
+	char buffer[40];
+	for (i = 0; i < num; i++) {
+		_fileHandle->read(buffer, 40);
+		if (buffer[0]) {
+			// Add to object name-to-id map
+			_objectIDMap[buffer] = i;
+		}
+		_objectStateTable[i] = _fileHandle->readByte();
+		_objectRoomTable[i] = _fileHandle->readByte();
+		_classData[i] = _fileHandle->readUint32LE();
+	}
+	memset(_objectOwnerTable, 0xFF, num);
+}
+
+void ScummEngine_v7::readGlobalObjects() {
+	int num = _fileHandle->readUint16LE();
+	assert(num == _numGlobalObjects);
+
+	_fileHandle->read(_objectStateTable, num);
+	_fileHandle->read(_objectRoomTable, num);
+	memset(_objectOwnerTable, 0xFF, num);
+
+	_fileHandle->read(_classData, num * sizeof(uint32));
+
+#if defined(SCUMM_BIG_ENDIAN)
+	// Correct the endianess if necessary
+	for (int i = 0; i != num; i++)
+		_classData[i] = FROM_LE_32(_classData[i]);
+#endif
+}
+
 void ScummEngine::allocateArrays() {
 	// Note: Buffers are now allocated in scummMain to allow for
 	//     early GUI init.

Index: resource_v4.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource_v4.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- resource_v4.cpp	7 Apr 2005 12:08:43 -0000	1.19
+++ resource_v4.cpp	9 Apr 2005 20:22:30 -0000	1.20
@@ -184,141 +184,4 @@
 }
 
 
-void ScummEngine_v8::readGlobalObjects() {
-	int i;
-	int num = _fileHandle->readUint32LE();
-	assert(num == _numGlobalObjects);
-
-	char buffer[40];
-	for (i = 0; i < num; i++) {
-		_fileHandle->read(buffer, 40);
-		if (buffer[0]) {
-			// Add to object name-to-id map
-			_objectIDMap[buffer] = i;
-		}
-		_objectStateTable[i] = _fileHandle->readByte();
-		_objectRoomTable[i] = _fileHandle->readByte();
-		_classData[i] = _fileHandle->readUint32LE();
-	}
-	memset(_objectOwnerTable, 0xFF, num);
-}
-
-void ScummEngine_v7::readGlobalObjects() {
-	int num = _fileHandle->readUint16LE();
-	assert(num == _numGlobalObjects);
-
-	_fileHandle->read(_objectStateTable, num);
-	_fileHandle->read(_objectRoomTable, num);
-	memset(_objectOwnerTable, 0xFF, num);
-
-	_fileHandle->read(_classData, num * sizeof(uint32));
-
-#if defined(SCUMM_BIG_ENDIAN)
-	// Correct the endianess if necessary
-	for (int i = 0; i != num; i++)
-		_classData[i] = FROM_LE_32(_classData[i]);
-#endif
-}
-
-void ScummEngine_v8::readMAXS(int blockSize) {
-	debug(9, "readMAXS: MAXS has blocksize %d", blockSize);
-
-	_fileHandle->seek(50 + 50, SEEK_CUR);            // 176 - 8
-	_numVariables = _fileHandle->readUint32LE();     // 1500
-	_numBitVariables = _fileHandle->readUint32LE();  // 2048
-	_fileHandle->readUint32LE();                     // 40
-	_numScripts = _fileHandle->readUint32LE();       // 458
-	_numSounds = _fileHandle->readUint32LE();        // 789
-	_numCharsets = _fileHandle->readUint32LE();      // 1
-	_numCostumes = _fileHandle->readUint32LE();      // 446
-	_numRooms = _fileHandle->readUint32LE();         // 95
-	_fileHandle->readUint32LE();                     // 80
-	_numGlobalObjects = _fileHandle->readUint32LE(); // 1401
-	_fileHandle->readUint32LE();                     // 60
-	_numLocalObjects = _fileHandle->readUint32LE();  // 200
-	_numNewNames = _fileHandle->readUint32LE();      // 100
-	_numFlObject = _fileHandle->readUint32LE();      // 128
-	_numInventory = _fileHandle->readUint32LE();     // 80
-	_numArray = _fileHandle->readUint32LE();         // 200
-	_numVerbs = _fileHandle->readUint32LE();         // 50
-
-	_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
-	_numGlobalScripts = 2000;
-
-	_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
-	_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
-
-	allocateArrays();
-	_dynamicRoomOffsets = true;
-}
-
-void ScummEngine_v7::readMAXS(int blockSize) {
-	debug(9, "readMAXS: MAXS has blocksize %d", blockSize);
-
-	_fileHandle->seek(50 + 50, SEEK_CUR);
-	_numVariables = _fileHandle->readUint16LE();
-	_numBitVariables = _fileHandle->readUint16LE();
-	_fileHandle->readUint16LE();
-	_numGlobalObjects = _fileHandle->readUint16LE();
-	_numLocalObjects = _fileHandle->readUint16LE();
-	_numNewNames = _fileHandle->readUint16LE();
-	_numVerbs = _fileHandle->readUint16LE();
-	_numFlObject = _fileHandle->readUint16LE();
-	_numInventory = _fileHandle->readUint16LE();
-	_numArray = _fileHandle->readUint16LE();
-	_numRooms = _fileHandle->readUint16LE();
-	_numScripts = _fileHandle->readUint16LE();
-	_numSounds = _fileHandle->readUint16LE();
-	_numCharsets = _fileHandle->readUint16LE();
-	_numCostumes = _fileHandle->readUint16LE();
-
-	_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
-
-	if ((_gameId == GID_FT) && (_features & GF_DEMO) && 
-		(_features & GF_PC))
-		_numGlobalScripts = 300;
-	else
-		_numGlobalScripts = 2000;
-
-	_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
-	_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
-
-	allocateArrays();
-	_dynamicRoomOffsets = true;
-}
-
-void ScummEngine_v6::readMAXS(int blockSize) {
-	debug(9, "readMAXS: MAXS has blocksize %d", blockSize);
-
-	_numVariables = _fileHandle->readUint16LE();
-	_fileHandle->readUint16LE();
-	_numBitVariables = _fileHandle->readUint16LE();
-	_numLocalObjects = _fileHandle->readUint16LE();
-	_numArray = _fileHandle->readUint16LE();
-	_fileHandle->readUint16LE();
-	_numVerbs = _fileHandle->readUint16LE();
-	_numFlObject = _fileHandle->readUint16LE();
-	_numInventory = _fileHandle->readUint16LE();
-	_numRooms = _fileHandle->readUint16LE();
-	_numScripts = _fileHandle->readUint16LE();
-	_numSounds = _fileHandle->readUint16LE();
-	_numCharsets = _fileHandle->readUint16LE();
-	_numCostumes = _fileHandle->readUint16LE();
-	_numGlobalObjects = _fileHandle->readUint16LE();
-	_numNewNames = 50;
-
-	_objectRoomTable = NULL;
-	_numGlobalScripts = 200;
-
-	if (_heversion >= 70) {
-		_objectRoomTable = (byte *)calloc(_numGlobalObjects, 1);
-	}
-
-	_shadowPaletteSize = 256;
-	_shadowPalette = (byte *)calloc(_shadowPaletteSize, 1);
-
-	allocateArrays();
-	_dynamicRoomOffsets = true;
-}
-
 } // End of namespace Scumm

Index: resource_v7he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource_v7he.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- resource_v7he.cpp	9 Apr 2005 11:59:42 -0000	1.27
+++ resource_v7he.cpp	9 Apr 2005 20:22:30 -0000	1.28
@@ -1753,4 +1753,11 @@
 	_dynamicRoomOffsets = true;
 }
 
+byte *ScummEngine_v72he::getStringAddress(int i) {
+	byte *addr = getResourceAddress(rtString, i);
+	if (addr == NULL)
+		return NULL;
+	return ((ScummEngine_v72he::ArrayHeader *)addr)->data;
+}
+
 } // End of namespace Scumm

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.570
retrieving revision 1.571
diff -u -d -r1.570 -r1.571
--- scumm.h	9 Apr 2005 20:13:30 -0000	1.570
+++ scumm.h	9 Apr 2005 20:22:31 -0000	1.571
@@ -709,7 +709,7 @@
 
 public:
 	byte *getResourceAddress(int type, int i);
-	byte *getStringAddress(int i);
+	virtual byte *getStringAddress(int i);
 	byte *getStringAddressVar(int i);
 	void ensureResourceLoaded(int type, int i);
 	int getResourceRoomNr(int type, int index);





More information about the Scummvm-git-logs mailing list