diff options
author | Johannes Schickel | 2006-09-16 14:36:53 +0000 |
---|---|---|
committer | Johannes Schickel | 2006-09-16 14:36:53 +0000 |
commit | 250133baf0f665deca81d20631df1299ca571b81 (patch) | |
tree | 7d7e3674567b28272feffd3b3aaaf09f103ca76a /engines/kyra | |
parent | 84c2a93db511a06fb82894dee596a268ae5323db (diff) | |
download | scummvm-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')
-rw-r--r-- | engines/kyra/kyra.h | 2 | ||||
-rw-r--r-- | engines/kyra/resource.cpp | 24 | ||||
-rw-r--r-- | engines/kyra/scene.cpp | 56 |
3 files changed, 61 insertions, 21 deletions
diff --git a/engines/kyra/kyra.h b/engines/kyra/kyra.h index 64224d77bb..b3e6c3c061 100644 --- a/engines/kyra/kyra.h +++ b/engines/kyra/kyra.h @@ -509,6 +509,8 @@ protected: int queryGameFlag(int flag); int resetGameFlag(int flag); + void setupSceneResource(int sceneId); + void enterNewScene(int sceneId, int facing, int unk1, int unk2, int brandonAlive); void transcendScenes(int roomIndex, int roomName); void setSceneFile(int roomIndex, int roomName); diff --git a/engines/kyra/resource.cpp b/engines/kyra/resource.cpp index b1e5cd5c54..a2434e42a7 100644 --- a/engines/kyra/resource.cpp +++ b/engines/kyra/resource.cpp @@ -69,12 +69,24 @@ Resource::Resource(KyraEngine *engine) { error("invalid game path '%s'", dir.path().c_str()); } - for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { - Common::String filename = file->name(); - filename.toUppercase(); - if (filename.hasSuffix("PAK") || filename.hasSuffix("APK")) { - if (!loadPakFile(file->name())) { - error("couldn't open pakfile '%s'", file->name().c_str()); + if (_engine->game() == GI_KYRA1 && (_engine->features() & GF_TALKIE)) { + static const char *list[] = { + "adl.pak", "col.pak", "finale.pak", "intro1.pak", "intro2.pak", "intro3.pak", "intro4.pak", + "misc.pak", "snd.pak", "startup.pak", "xmi.pak", 0 + }; + + for (int i = 0; list[i]; ++i) { + if (!loadPakFile(list[i])) + error("couldn't open pakfile '%s'", list[i]); + } + } else { + for (FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { + Common::String filename = file->name(); + filename.toUppercase(); + if (filename.hasSuffix("PAK") || filename.hasSuffix("APK")) { + if (!loadPakFile(file->name())) { + error("couldn't open pakfile '%s'", file->name().c_str()); + } } } } 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 |