[Scummvm-cvs-logs] CVS: scummvm/saga scene.cpp,1.132,1.133 scene.h,1.67,1.68

Andrew Kurushin h00ligan at users.sourceforge.net
Sun Jul 31 05:05:08 CEST 2005


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

Modified Files:
	scene.cpp scene.h 
Log Message:
added scen resource types dump at debuglevel==10


Index: scene.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.cpp,v
retrieving revision 1.132
retrieving revision 1.133
diff -u -d -r1.132 -r1.133
--- scene.cpp	29 Jul 2005 18:29:23 -0000	1.132
+++ scene.cpp	31 Jul 2005 12:03:03 -0000	1.133
@@ -45,6 +45,7 @@
 #include "saga/resnames.h"
 
 #include "graphics/ilbm.h"
+#include "common/util.h"
 
 namespace Saga {
 
@@ -112,6 +113,28 @@
 	SAGA_PALETTE
 };
 
+char *SAGAResourceTypesString[] = {
+	"SAGA_UNKNOWN",
+	"SAGA_ACTOR",
+	"SAGA_OBJECT",
+	"SAGA_BG_IMAGE",
+	"SAGA_BG_MASK",
+	"SAGA_STRINGS",
+	"SAGA_OBJECT_MAP",
+	"SAGA_ACTION_MAP",
+	"SAGA_ISO_IMAGES",
+	"SAGA_ISO_MAP",
+	"SAGA_ISO_PLATFORMS",
+	"SAGA_ISO_METATILES",
+	"SAGA_ENTRY",
+	"SAGA_ANIM",
+	"SAGA_ISO_MULTI",
+	"SAGA_PAL_ANIM",
+	"SAGA_FACES",
+	"SAGA_PALETTE"
+};
+
+
 Scene::Scene(SagaEngine *vm) : _vm(vm) {
 	byte *sceneLUTPointer;
 	size_t sceneLUTLength;
@@ -148,9 +171,36 @@
 
 	free(sceneLUTPointer);
 
-	_firstScene = _vm->getStartSceneNumber();
+#define DUMP_SCENES_LEVEL 10
+
+	if (DUMP_SCENES_LEVEL <= gDebugLevel) {
+		uint j;
+		int backUpDebugLevel = gDebugLevel;
+		SAGAResourceTypes *types;
+		int typesCount;
+		SAGAResourceTypes resType;
+
+		getResourceTypes(types, typesCount);
+
+		for (i = 0; i < _sceneCount; i++) {
+			gDebugLevel = -1;
+			loadSceneDescriptor(_sceneLUT[i]);
+			loadSceneResourceList(_sceneDescription.resourceListResourceId);
+			gDebugLevel = backUpDebugLevel;
+			debug(DUMP_SCENES_LEVEL, "Dump Scene: number %i, descriptor resourceId %i, resourceList resourceId %i", i, _sceneLUT[i], _sceneDescription.resourceListResourceId);
+			debug(DUMP_SCENES_LEVEL, "\tresourceListCount %i", _resourceListCount);
+			for (j = 0; j < _resourceListCount; j++) {
+				if (_resourceList[j].resourceType >= typesCount) {
+					error("wrong resource type %i", _resourceList[j].resourceType);
+				}
+				resType = types[_resourceList[j].resourceType];
+
+				debug(DUMP_SCENES_LEVEL, "\t%s resourceId %i", SAGAResourceTypesString[resType], _resourceList[j].resourceId);
+			}
+			free(_resourceList);
+		}
+	}
 
-	debug(3, "First scene set to %d.", _firstScene);
 
 	debug(3, "LUT has %d entries.", _sceneCount);
 
@@ -175,6 +225,16 @@
 	free(_sceneLUT);
 }
 
+void Scene::getResourceTypes(SAGAResourceTypes *&types, int &typesCount) {
+	if (_vm->getGameType() == GType_IHNM) {
+		typesCount = ARRAYSIZE(IHNMSceneResourceTypes);
+		types = IHNMSceneResourceTypes;
+	} else {
+		typesCount = ARRAYSIZE(ITESceneResourceTypes);
+		types = ITESceneResourceTypes;
+	}
+}
+
 void Scene::drawTextList(Surface *ds) {
 	TextListEntry *entry;
 
@@ -191,7 +251,6 @@
 	}
 }
 
-
 void Scene::startScene() {
 	SceneQueueList::iterator queueIterator;
 	LoadSceneParams *sceneQueue;
@@ -414,7 +473,6 @@
 
 	endScene();
 	loadScene(&sceneParams);
-
 }
 
 void Scene::getSlopes(int &beginSlope, int &endSlope) {
@@ -794,19 +852,27 @@
 void Scene::loadSceneDescriptor(uint32 resourceId) {
 	byte *sceneDescriptorData;
 	size_t sceneDescriptorDataLength;
+	
+	memset(&_sceneDescription, 0, sizeof(_sceneDescription));
+
+	if (resourceId == 0) {
+		return;
+	}
 
 	_vm->_resource->loadResource(_sceneContext, resourceId, sceneDescriptorData, sceneDescriptorDataLength);
 
-	MemoryReadStreamEndian readS(sceneDescriptorData, sceneDescriptorDataLength, _sceneContext->isBigEndian);
+	if (sceneDescriptorDataLength == 16) {
+		MemoryReadStreamEndian readS(sceneDescriptorData, sceneDescriptorDataLength, _sceneContext->isBigEndian);
 
-	_sceneDescription.flags = readS.readSint16();
-	_sceneDescription.resourceListResourceId = readS.readSint16();
-	_sceneDescription.endSlope = readS.readSint16();
-	_sceneDescription.beginSlope = readS.readSint16();
-	_sceneDescription.scriptModuleNumber = readS.readUint16();
-	_sceneDescription.sceneScriptEntrypointNumber = readS.readUint16();
-	_sceneDescription.startScriptEntrypointNumber = readS.readUint16();
-	_sceneDescription.musicResourceId = readS.readSint16();
+		_sceneDescription.flags = readS.readSint16();
+		_sceneDescription.resourceListResourceId = readS.readSint16();
+		_sceneDescription.endSlope = readS.readSint16();
+		_sceneDescription.beginSlope = readS.readSint16();
+		_sceneDescription.scriptModuleNumber = readS.readUint16();
+		_sceneDescription.sceneScriptEntrypointNumber = readS.readUint16();
+		_sceneDescription.startScriptEntrypointNumber = readS.readUint16();
+		_sceneDescription.musicResourceId = readS.readSint16();
+	}
 
 	free(sceneDescriptorData);
 }
@@ -816,27 +882,36 @@
 	size_t resourceListDataLength;
 	size_t i;
 
+	_resourceListCount = 0;
+	_resourceList = NULL;
+
+	if (resourceId == 0) {
+		return;
+	}
+
 	// Load the scene resource table
 	_vm->_resource->loadResource(_sceneContext, resourceId, resourceListData, resourceListDataLength);
 
-	MemoryReadStreamEndian readS(resourceListData, resourceListDataLength, _sceneContext->isBigEndian);
+	if ((resourceListDataLength % SAGA_RESLIST_ENTRY_LEN) == 0) {
+		MemoryReadStreamEndian readS(resourceListData, resourceListDataLength, _sceneContext->isBigEndian);
 
-	// Allocate memory for scene resource list
-	_resourceListCount = resourceListDataLength / SAGA_RESLIST_ENTRY_LEN;
-	debug(3, "Scene resource list contains %i entries", _resourceListCount);
-	_resourceList = (SceneResourceData *)calloc(_resourceListCount, sizeof(*_resourceList));
+		// Allocate memory for scene resource list
+		_resourceListCount = resourceListDataLength / SAGA_RESLIST_ENTRY_LEN;
+		debug(3, "Scene resource list contains %i entries", _resourceListCount);
+		_resourceList = (SceneResourceData *)calloc(_resourceListCount, sizeof(*_resourceList));
 
-	// Load scene resource list from raw scene
-	// resource table
-	debug(3, "Loading scene resource list");
+		// Load scene resource list from raw scene
+		// resource table
+		debug(3, "Loading scene resource list");
 
-	for (i = 0; i < _resourceListCount; i++) {
-		_resourceList[i].resourceId = readS.readUint16();
-		_resourceList[i].resourceType = readS.readUint16();
-		// demo version may contain invalid resourceId
-		_resourceList[i].invalid = !_vm->_resource->validResourceId(_sceneContext, _resourceList[i].resourceId);
-	}
+		for (i = 0; i < _resourceListCount; i++) {
+			_resourceList[i].resourceId = readS.readUint16();
+			_resourceList[i].resourceType = readS.readUint16();
+			// demo version may contain invalid resourceId
+			_resourceList[i].invalid = !_vm->_resource->validResourceId(_sceneContext, _resourceList[i].resourceId);
+		}
 
+	}
 	free(resourceListData);
 }
 
@@ -849,14 +924,8 @@
 	int typesCount;
 	SAGAResourceTypes resType;
 
-	if (_vm->getGameType() == GType_IHNM) {
-		typesCount = ARRAYSIZE(IHNMSceneResourceTypes);
-		types = IHNMSceneResourceTypes;
-	} else {
-		typesCount = ARRAYSIZE(ITESceneResourceTypes);
-		types = ITESceneResourceTypes;
-	}
-
+	getResourceTypes(types, typesCount);
+	
 	// Process the scene resource list
 	for (i = 0; i < _resourceListCount; i++) {
 		if (_resourceList[i].invalid) {

Index: scene.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.h,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -d -r1.67 -r1.68
--- scene.h	30 Jul 2005 21:11:21 -0000	1.67
+++ scene.h	31 Jul 2005 12:03:03 -0000	1.68
@@ -163,6 +163,7 @@
 	bool sceneSkipTarget;
 	SceneTransitionType transitionType;
 	int actorsEntrance;
+	bool extended; // IHNM GotoScene_ analog
 };
 
 typedef Common::List<LoadSceneParams> SceneQueueList;
@@ -269,6 +270,7 @@
 	void loadSceneResourceList(uint32 resourceId);
 	void loadSceneEntryList(const byte* resourcePointer, size_t resourceLength);
 	void processSceneResources();
+	void getResourceTypes(SAGAResourceTypes *&types, int &typesCount);
 
 
 	SagaEngine *_vm;
@@ -277,7 +279,6 @@
 	int *_sceneLUT;
 	int _sceneCount;
 	SceneQueueList _sceneQueue;
-	int _firstScene;
 	bool _sceneLoaded;
 	int _sceneNumber;
 	int _outsetSceneNumber;





More information about the Scummvm-git-logs mailing list