[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