aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorNicola Mettifogo2010-12-12 07:17:13 +0000
committerNicola Mettifogo2010-12-12 07:17:13 +0000
commitc4e4f7dc865b014cbfd516753fefd5ed077c8450 (patch)
tree4e5dfec50376235feac9223e8f96c8b025ae9fee /engines
parent6e5b3ca5887b10c4d8a186697758457415a44765 (diff)
downloadscummvm-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.h1
-rw-r--r--engines/parallaction/parser_ns.cpp20
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