From 0c3c0f212126e53a8a80fad2a05609749f95cf7d Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 11 May 2011 23:01:15 +1000 Subject: TSAGE: Added missing code for loading scene regions in the CD/FW versions of the game --- engines/tsage/core.cpp | 15 +++++++++++---- 1 file 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); -- cgit v1.2.3