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/scene.cpp | |
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/scene.cpp')
-rw-r--r-- | engines/kyra/scene.cpp | 56 |
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 |