diff options
author | Nicola Mettifogo | 2010-12-12 07:17:13 +0000 |
---|---|---|
committer | Nicola Mettifogo | 2010-12-12 07:17:13 +0000 |
commit | c4e4f7dc865b014cbfd516753fefd5ed077c8450 (patch) | |
tree | 4e5dfec50376235feac9223e8f96c8b025ae9fee /engines | |
parent | 6e5b3ca5887b10c4d8a186697758457415a44765 (diff) | |
download | scummvm-rg350-c4e4f7dc865b014cbfd516753fefd5ed077c8450.tar.gz scummvm-rg350-c4e4f7dc865b014cbfd516753fefd5ed077c8450.tar.bz2 scummvm-rg350-c4e4f7dc865b014cbfd516753fefd5ed077c8450.zip |
PARALLACTION: parse command lists for kNoneType zones, even if defined after TYPE markers. This fixes bug #3131769.
svn-id: r54879
Diffstat (limited to 'engines')
-rw-r--r-- | engines/parallaction/parser.h | 1 | ||||
-rw-r--r-- | engines/parallaction/parser_ns.cpp | 20 |
2 files changed, 20 insertions, 1 deletions
diff --git a/engines/parallaction/parser.h b/engines/parallaction/parser.h index 7887b2192f..812cf6f7c3 100644 --- a/engines/parallaction/parser.h +++ b/engines/parallaction/parser.h @@ -179,6 +179,7 @@ public: virtual void parseMergeData(ZonePtr z); virtual void parseHearData(ZonePtr z); virtual void parseSpeakData(ZonePtr z); + virtual void parseNoneData(ZonePtr z); protected: Common::String parseComment(); Common::String parseDialogueString(); diff --git a/engines/parallaction/parser_ns.cpp b/engines/parallaction/parser_ns.cpp index 994cfa46fb..5053a3d7a5 100644 --- a/engines/parallaction/parser_ns.cpp +++ b/engines/parallaction/parser_ns.cpp @@ -1412,6 +1412,24 @@ void LocationParser_ns::parseSpeakData(ZonePtr z) { } } +void LocationParser_ns::parseNoneData(ZonePtr z) { + // "None" zones should have no content, but some + // inconsistently define their command list after + // the TYPE marker. This routine catches these + // command lists that would be lost otherwise. + if (!scumm_stricmp(_tokens[0], "commands")) { + parseCommands(z->_commands); + ctxt.endcommands = false; + do { + _script->readLineToken(true); + _parser->parseStatement(); + } while (!ctxt.endcommands); + + // no need to parse one more line here, as + // it is done by the caller + } +} + typedef void (LocationParser_ns::*ZoneTypeParser)(ZonePtr); static ZoneTypeParser parsers[] = { 0, // no type @@ -1423,7 +1441,7 @@ static ZoneTypeParser parsers[] = { &LocationParser_ns::parseHearData, 0, // feel &LocationParser_ns::parseSpeakData, - 0, // none + &LocationParser_ns::parseNoneData, 0, // trap 0, // you 0 // command |