aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/scene.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2006-09-16 14:36:53 +0000
committerJohannes Schickel2006-09-16 14:36:53 +0000
commit250133baf0f665deca81d20631df1299ca571b81 (patch)
tree7d7e3674567b28272feffd3b3aaaf09f103ca76a /engines/kyra/scene.cpp
parent84c2a93db511a06fb82894dee596a268ae5323db (diff)
downloadscummvm-rg350-250133baf0f665deca81d20631df1299ca571b81.tar.gz
scummvm-rg350-250133baf0f665deca81d20631df1299ca571b81.tar.bz2
scummvm-rg350-250133baf0f665deca81d20631df1299ca571b81.zip
Simplifies resource handling for the CD version of Kyrandia.
(also less file loading at startup, but more on room change) svn-id: r23887
Diffstat (limited to 'engines/kyra/scene.cpp')
-rw-r--r--engines/kyra/scene.cpp56
1 files changed, 41 insertions, 15 deletions
diff --git a/engines/kyra/scene.cpp b/engines/kyra/scene.cpp
index d202088f56..fe38c69bd3 100644
--- a/engines/kyra/scene.cpp
+++ b/engines/kyra/scene.cpp
@@ -143,15 +143,7 @@ void KyraEngine::enterNewScene(int sceneId, int facing, int unk1, int unk2, int
Room *currentRoom = &_roomTable[sceneId];
- if (_currentRoom != 0xFFFF && (_features & GF_TALKIE)) {
- char file[32];
- assert(_currentRoom < _roomTableSize);
- int tableId = _roomTable[_currentRoom].nameIndex;
- assert(tableId < _roomFilenameTableSize);
- strcpy(file, _roomFilenameTable[tableId]);
- strcat(file, ".VRM");
- _res->unloadPakFile(file);
- }
+ setupSceneResource(sceneId);
_currentRoom = sceneId;
@@ -164,12 +156,6 @@ void KyraEngine::enterNewScene(int sceneId, int facing, int unk1, int unk2, int
_scriptInterpreter->unloadScript(_scriptClickData);
loadSceneMSC();
- if ((_features & GF_TALKIE)) {
- strcpy(fileNameBuffer, _roomFilenameTable[tableId]);
- strcat(fileNameBuffer, ".VRM");
- _res->loadPakFile(fileNameBuffer);
- }
-
_walkBlockNorth = currentRoom->northExit;
_walkBlockEast = currentRoom->eastExit;
_walkBlockSouth = currentRoom->southExit;
@@ -1569,4 +1555,44 @@ int KyraEngine::getMoveTableSize(int *moveTable) {
return retValue;
}
+void KyraEngine::setupSceneResource(int sceneId) {
+ debugC(9, kDebugLevelMain, "KyraEngine::setupSceneResource(%d)", sceneId);
+ if (_features & GF_FLOPPY)
+ return;
+
+ if (_currentRoom != 0xFFFF) {
+ assert(_currentRoom < _roomTableSize);
+ int tableId = _roomTable[_currentRoom].nameIndex;
+ assert(tableId < _roomFilenameTableSize);
+
+ // unload our old room
+ char file[64];
+ strcpy(file, _roomFilenameTable[tableId]);
+ strcat(file, ".VRM");
+ _res->unloadPakFile(file);
+ strcpy(file, _roomFilenameTable[tableId]);
+ strcat(file, ".PAK");
+ _res->unloadPakFile(file);
+ strcpy(file, _roomFilenameTable[tableId]);
+ strcat(file, ".APK");
+ _res->unloadPakFile(file);
+ }
+
+ assert(sceneId < _roomTableSize);
+ int tableId = _roomTable[sceneId].nameIndex;
+ assert(tableId < _roomFilenameTableSize);
+
+ // load our new room
+ char file[64];
+ strcpy(file, _roomFilenameTable[tableId]);
+ strcat(file, ".VRM");
+ _res->loadPakFile(file);
+ strcpy(file, _roomFilenameTable[tableId]);
+ strcat(file, ".PAK");
+ _res->loadPakFile(file);
+ strcpy(file, _roomFilenameTable[tableId]);
+ strcat(file, ".APK");
+ _res->loadPakFile(file);
+}
+
} // end of namespace Kyra