diff options
-rw-r--r-- | engines/parallaction/location.cpp | 140 | ||||
-rw-r--r-- | engines/parallaction/parallaction.h | 5 | ||||
-rw-r--r-- | engines/parallaction/parallaction_br.cpp | 4 | ||||
-rw-r--r-- | engines/parallaction/parallaction_ns.cpp | 44 |
4 files changed, 88 insertions, 105 deletions
diff --git a/engines/parallaction/location.cpp b/engines/parallaction/location.cpp index 001c5a8d03..8dce3e1225 100644 --- a/engines/parallaction/location.cpp +++ b/engines/parallaction/location.cpp @@ -39,7 +39,7 @@ void Parallaction::parseLocation(const char *filename) { uint16 _si = 1; _gfx->setFont(_labelFont); - Script *_locationScript = _disk->loadLocation(filename); + Script *script = _disk->loadLocation(filename); _hasLocationSound = false; // WORKAROUND: the original code erroneously incremented @@ -68,71 +68,101 @@ void Parallaction::parseLocation(const char *filename) { } - fillBuffers(*_locationScript, true); - - printf("ciao (%s)\n", filename); + fillBuffers(*script, true); while (scumm_stricmp(_tokens[0], "ENDLOCATION")) { printf("inst = %s\n", _tokens[0]); - bool parsed = parseLocationLine(filename, _locationScript); - if (!parsed) { + if (!scumm_stricmp(_tokens[0], "LOCATION")) { + // 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++; + } + + strcpy(_location._name, _tokens[1]); + switchBackground(_location._name, mask); + + if (_tokens[2][0] != '\0') { + _char._ani._left = atoi(_tokens[2]); + _char._ani._top = atoi(_tokens[3]); + } + + if (_tokens[4][0] != '\0') { + _char._ani._frame = atoi(_tokens[4]); + } + } else + if (!scumm_stricmp(_tokens[0], "DISK")) { + _disk->selectArchive(_tokens[1]); + } else + if (!scumm_stricmp(_tokens[0], "NODES")) { + parseWalkNodes(*script, _location._walkNodes); + } else + if (!scumm_stricmp(_tokens[0], "ZONE")) { + parseZone(*script, _zones, _tokens[1]); + } else + if (!scumm_stricmp(_tokens[0], "ANIMATION")) { + parseAnimation(*script, _animations, _tokens[1]); + } else + if (!scumm_stricmp(_tokens[0], "LOCALFLAGS")) { + _si = 1; // _localFlagNames[0] = 'visited' + while (_tokens[_si][0] != '\0') { + _localFlagNames->addData(_tokens[_si]); + _si++; + } + } else + if (!scumm_stricmp(_tokens[0], "COMMANDS")) { + parseCommands(*script, _location._commands); + } else + if (!scumm_stricmp(_tokens[0], "ACOMMANDS")) { + parseCommands(*script, _location._aCommands); + } else + if (!scumm_stricmp(_tokens[0], "FLAGS")) { + if ((_localFlags[_currentLocationIndex] & kFlagsVisited) == 0) { + // only for 1st visit + _localFlags[_currentLocationIndex] = 0; + _si = 1; + + do { + byte _al = _localFlagNames->lookup(_tokens[_si]); + _localFlags[_currentLocationIndex] |= 1 << (_al - 1); - if (!scumm_stricmp(_tokens[0], "LOCALFLAGS")) { - _si = 1; // _localFlagNames[0] = 'visited' - while (_tokens[_si][0] != '\0') { - _localFlagNames->addData(_tokens[_si]); _si++; - } - } else - if (!scumm_stricmp(_tokens[0], "COMMANDS")) { - parseCommands(*_locationScript, _location._commands); - } else - if (!scumm_stricmp(_tokens[0], "ACOMMANDS")) { - parseCommands(*_locationScript, _location._aCommands); - } else - if (!scumm_stricmp(_tokens[0], "FLAGS")) { - if ((_localFlags[_currentLocationIndex] & kFlagsVisited) == 0) { - // only for 1st visit - _localFlags[_currentLocationIndex] = 0; - _si = 1; - - do { - byte _al = _localFlagNames->lookup(_tokens[_si]); - _localFlags[_currentLocationIndex] |= 1 << (_al - 1); - - _si++; - if (scumm_stricmp(_tokens[_si], "|")) break; - _si++; - } while (true); - } - } else - if (!scumm_stricmp(_tokens[0], "COMMENT")) { - _location._comment = parseComment(*_locationScript); - } else - if (!scumm_stricmp(_tokens[0], "ENDCOMMENT")) { - _location._endComment = parseComment(*_locationScript); - } else - if (!scumm_stricmp(_tokens[0], "SOUND")) { - if (getPlatform() == Common::kPlatformAmiga) { - strcpy(_locationSound, _tokens[1]); - _hasLocationSound = true; - } - } else - if (!scumm_stricmp(_tokens[0], "MUSIC")) { - if (getPlatform() == Common::kPlatformAmiga) - _soundMan->setMusicFile(_tokens[1]); - } else - error("unknown keyword '%s' in location '%s'", _tokens[0], filename); - } - - fillBuffers(*_locationScript, true); + if (scumm_stricmp(_tokens[_si], "|")) break; + _si++; + } while (true); + } + } else + if (!scumm_stricmp(_tokens[0], "COMMENT")) { + _location._comment = parseComment(*script); + } else + if (!scumm_stricmp(_tokens[0], "ENDCOMMENT")) { + _location._endComment = parseComment(*script); + } else + if (!scumm_stricmp(_tokens[0], "SOUND")) { + if (getPlatform() == Common::kPlatformAmiga) { + strcpy(_locationSound, _tokens[1]); + _hasLocationSound = true; + } + } else + if (!scumm_stricmp(_tokens[0], "MUSIC")) { + if (getPlatform() == Common::kPlatformAmiga) + _soundMan->setMusicFile(_tokens[1]); + } else + error("unknown keyword '%s' in location '%s'", _tokens[0], filename); + + fillBuffers(*script, true); } resolveLocationForwards(); - delete _locationScript; + delete script; return; } diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h index a190feff04..7c53f74215 100644 --- a/engines/parallaction/parallaction.h +++ b/engines/parallaction/parallaction.h @@ -424,7 +424,7 @@ public: DECLARE_UNQUALIFIED_INSTRUCTION_OPCODE(end); void parseLocation(const char *filename); - virtual bool parseLocationLine(const char *filename, Script *script) = 0; + void changeCursor(int32 index); void showCursor(bool visible); void changeCharacter(const char *name); @@ -628,8 +628,6 @@ public: virtual void callFunction(uint index, void* parm); void renderLabel(Graphics::Surface *cnv, char *text); void setMousePointer(int16 index); - virtual bool parseLocationLine(const char *filename, Script *script); - public: Menu* _menu; @@ -696,7 +694,6 @@ public: public: typedef void (Parallaction_br::*Callable)(void*); virtual void callFunction(uint index, void* parm); - virtual bool parseLocationLine(const char *filename, Script *script); public: Table *_countersNames; diff --git a/engines/parallaction/parallaction_br.cpp b/engines/parallaction/parallaction_br.cpp index 82dfd96f54..955994a307 100644 --- a/engines/parallaction/parallaction_br.cpp +++ b/engines/parallaction/parallaction_br.cpp @@ -350,7 +350,7 @@ void skip(Script* script, const char* endToken) { } } - +#if 0 bool Parallaction_br::parseLocationLine(const char *filename, Script *script) { bool parsed = true; @@ -420,6 +420,6 @@ bool Parallaction_br::parseLocationLine(const char *filename, Script *script) { return parsed; } - +#endif } // namespace Parallaction diff --git a/engines/parallaction/parallaction_ns.cpp b/engines/parallaction/parallaction_ns.cpp index 38e2d999ff..e98ef3847c 100644 --- a/engines/parallaction/parallaction_ns.cpp +++ b/engines/parallaction/parallaction_ns.cpp @@ -199,49 +199,5 @@ int Parallaction_ns::go() { return 0; } -bool Parallaction_ns::parseLocationLine(const char *filename, Script *script) { - - bool parsed = true; - - if (!scumm_stricmp(_tokens[0], "LOCATION")) { - // 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++; - } - - strcpy(_location._name, _tokens[1]); - switchBackground(_location._name, mask); - - if (_tokens[2][0] != '\0') { - _char._ani._left = atoi(_tokens[2]); - _char._ani._top = atoi(_tokens[3]); - } - - if (_tokens[4][0] != '\0') { - _char._ani._frame = atoi(_tokens[4]); - } - } else - if (!scumm_stricmp(_tokens[0], "DISK")) { - _disk->selectArchive(_tokens[1]); - } else - if (!scumm_stricmp(_tokens[0], "NODES")) { - parseWalkNodes(*script, _location._walkNodes); - } else - if (!scumm_stricmp(_tokens[0], "ZONE")) { - parseZone(*script, _zones, _tokens[1]); - } else - if (!scumm_stricmp(_tokens[0], "ANIMATION")) { - parseAnimation(*script, _animations, _tokens[1]); - } else - parsed = false; - - return parsed; -} } // namespace Parallaction |