diff options
author | Paul Gilbert | 2011-05-11 23:01:15 +1000 |
---|---|---|
committer | Paul Gilbert | 2011-05-11 23:01:15 +1000 |
commit | 0c3c0f212126e53a8a80fad2a05609749f95cf7d (patch) | |
tree | 812dee7af86b346398de92992b9631184beb95dd | |
parent | bfc9414487d17cd8c62481a0df37bdcb48d0ae69 (diff) | |
download | scummvm-rg350-0c3c0f212126e53a8a80fad2a05609749f95cf7d.tar.gz scummvm-rg350-0c3c0f212126e53a8a80fad2a05609749f95cf7d.tar.bz2 scummvm-rg350-0c3c0f212126e53a8a80fad2a05609749f95cf7d.zip |
TSAGE: Added missing code for loading scene regions in the CD/FW versions of the game
-rw-r--r-- | engines/tsage/core.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 8ad920e6fd..8e287df556 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2914,15 +2914,22 @@ void Region::uniteRect(const Rect &rect) { void SceneRegions::load(int sceneNum) { clear(); - - byte *regionData = _resourceManager->getResource(RES_CONTROL, sceneNum, 9999, true); + bool altRegions = _vm->getFeatures() & GF_ALT_REGIONS; + byte *regionData = _resourceManager->getResource(RES_CONTROL, sceneNum, altRegions ? 1 : 9999, true); if (regionData) { int regionCount = READ_LE_UINT16(regionData); for (int regionCtr = 0; regionCtr < regionCount; ++regionCtr) { - int rlbNum = READ_LE_UINT16(regionData + regionCtr * 6 + 2); + int regionId = READ_LE_UINT16(regionData + regionCtr * 6 + 2); - push_back(Region(sceneNum, rlbNum)); + if (altRegions) { + // Load data from within this resource + uint32 dataOffset = READ_LE_UINT32(regionData + regionCtr * 6 + 4); + push_back(Region(regionId, regionData + dataOffset)); + } else { + // Load region from a separate resource + push_back(Region(sceneNum, regionId)); + } } DEALLOCATE(regionData); |