aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2011-05-11 23:01:15 +1000
committerPaul Gilbert2011-05-11 23:01:15 +1000
commit0c3c0f212126e53a8a80fad2a05609749f95cf7d (patch)
tree812dee7af86b346398de92992b9631184beb95dd /engines
parentbfc9414487d17cd8c62481a0df37bdcb48d0ae69 (diff)
downloadscummvm-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
Diffstat (limited to 'engines')
-rw-r--r--engines/tsage/core.cpp15
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);