diff options
-rw-r--r-- | engines/parallaction/location.cpp | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/engines/parallaction/location.cpp b/engines/parallaction/location.cpp index 4a5ec68f2d..597cd0cff0 100644 --- a/engines/parallaction/location.cpp +++ b/engines/parallaction/location.cpp @@ -31,8 +31,7 @@ namespace Parallaction { void resolveLocationForwards(); -void loadExternalMaskPath(char *filename); -void switchBackground(char *name); +void switchBackground(const char* background, const char* mask); void parseWalkNodes(Script &script, Node *list); void freeAnimations(); @@ -57,12 +56,17 @@ void Parallaction::parseLocation(const char *filename) { // printf("token[0] = %s", _tokens[0]); if (!scumm_stricmp(_tokens[0], "LOCATION")) { - char *background = strchr(_tokens[1], '.'); - if (background) { - background[0] = '\0'; - background++; + // The parameter for location is 'location.mask'. + // If mask is not present, then it is assumed + // that path & mask are encoded in the background + // bitmap, otherwise a separate .msk file exists. + + char *mask = strchr(_tokens[1], '.'); + if (mask) { + mask[0] = '\0'; + mask++; } else - background = _tokens[1]; + mask = _tokens[1]; // WORKAROUND: the original code erroneously incremented // _currentLocationIndex, thus producing inconsistent @@ -90,7 +94,7 @@ void Parallaction::parseLocation(const char *filename) { } strcpy(_location, _tokens[1]); - switchBackground(background); + switchBackground(_location, mask); if (_tokens[2][0] != '\0') { _yourself._zone.pos._position._x = atoi(_tokens[2]); @@ -255,13 +259,13 @@ void parseWalkNodes(Script& script, Node *list) { } -void switchBackground(char *name) { +void switchBackground(const char* background, const char* mask) { // printf("switchBackground(%s)", name); byte palette[PALETTE_SIZE]; uint16 v2 = 0; - if (!scumm_stricmp(_location, "final")) { + if (!scumm_stricmp(background, "final")) { _vm->_graphics->clearScreen(Graphics::kBitBack); for (uint16 _si = 0; _si <= 93; ) { palette[_si] = v2; @@ -274,17 +278,17 @@ void switchBackground(char *name) { _vm->_graphics->palUnk0(palette); } - char dest[PATH_LEN]; - strcpy(dest, _location); - strcat(dest, ".dyn"); - _vm->_graphics->loadBackground(dest, Graphics::kBitBack); - _vm->_graphics->copyScreen(Graphics::kBitBack, Graphics::kBit2); + char path[PATH_LEN]; + sprintf(path, "%s.dyn", background); - if (!scumm_stricmp(_location, name)) return; + _vm->_graphics->loadBackground(path, Graphics::kBitBack); + _vm->_graphics->copyScreen(Graphics::kBitBack, Graphics::kBit2); - // load external masks and paths only for certain locations - sprintf(dest, "%s.msk", name); - _vm->_graphics->loadMaskAndPath(dest); + if (scumm_stricmp(background, mask)) { + // load external masks and paths only for certain locations + sprintf(path, "%s.msk", mask); + _vm->_graphics->loadMaskAndPath(path); + } return; } |