diff options
| -rw-r--r-- | engines/parallaction/exec.cpp | 10 | ||||
| -rw-r--r-- | engines/parallaction/objects.cpp | 1 | ||||
| -rw-r--r-- | engines/parallaction/objects.h | 2 | ||||
| -rw-r--r-- | engines/parallaction/parser.h | 8 | ||||
| -rw-r--r-- | engines/parallaction/parser_ns.cpp | 28 | 
5 files changed, 15 insertions, 34 deletions
| diff --git a/engines/parallaction/exec.cpp b/engines/parallaction/exec.cpp index 0d5215cd9a..24579286e6 100644 --- a/engines/parallaction/exec.cpp +++ b/engines/parallaction/exec.cpp @@ -102,6 +102,16 @@ void CommandExec::runList(CommandList::iterator first, CommandList::iterator las  		CommandPtr cmd = *first; +		if (cmd->_valid && !cmd->_zone && !cmd->_zoneName.empty()) { +			// try binding the command to a zone +			cmd->_zone = _vm->_location.findZone(cmd->_zoneName.c_str()); +			cmd->_valid = cmd->_zone != 0; +		} + +		if (!cmd->_valid) { +			continue; +		} +  		if (cmd->_flagsOn & kFlagsGlobal) {  			useFlags = _globalFlags | kFlagsGlobal;  			useLocalFlags = false; diff --git a/engines/parallaction/objects.cpp b/engines/parallaction/objects.cpp index a417efaecc..f1309c6919 100644 --- a/engines/parallaction/objects.cpp +++ b/engines/parallaction/objects.cpp @@ -34,6 +34,7 @@ Command::Command() {  	_id = 0;  	_flagsOn = 0;  	_flagsOff = 0; +	_valid = false;  	_flags = 0;  	_string = 0; diff --git a/engines/parallaction/objects.h b/engines/parallaction/objects.h index 52f3d62a59..4c02d94334 100644 --- a/engines/parallaction/objects.h +++ b/engines/parallaction/objects.h @@ -112,6 +112,7 @@ struct Command {  	uint16			_id;  	uint32			_flagsOn;  	uint32			_flagsOff; +	bool			_valid;  	Command();  	~Command(); @@ -119,6 +120,7 @@ struct Command {  	// Common fields  	uint32			_flags;  	ZonePtr			_zone; +	Common::String	_zoneName;  	char*			_string;  	uint16			_callable;  	uint16			_object; diff --git a/engines/parallaction/parser.h b/engines/parallaction/parser.h index 4eb8e3f419..79da55d6b4 100644 --- a/engines/parallaction/parser.h +++ b/engines/parallaction/parser.h @@ -204,17 +204,9 @@ protected:  	void		parseCommands(CommandList&);  	void		parseCommandFlags();  	void		parseCommandFlag(CommandPtr cmd, const char *flag, Table *table); -	void		saveCommandForward(const char *name, CommandPtr cmd); -	void		resolveCommandForwards();  	void		createCommand(uint id);  	void		addCommand(); -	struct CommandForwardReference { -		char		name[20]; -		CommandPtr	cmd; -	} _forwardedCommands[MAX_FORWARDS]; -	uint		_numForwardedCommands; -  	void clearSet(OpcodeSet &opcodes) {  		for (Common::Array<const Opcode*>::iterator i = opcodes.begin(); i != opcodes.end(); ++i)  			delete *i; diff --git a/engines/parallaction/parser_ns.cpp b/engines/parallaction/parser_ns.cpp index 10405f1244..118b7ad959 100644 --- a/engines/parallaction/parser_ns.cpp +++ b/engines/parallaction/parser_ns.cpp @@ -631,10 +631,7 @@ DECLARE_COMMAND_PARSER(zone)  {  	createCommand(_parser->_lookup); -	ctxt.cmd->_zone = _vm->_location.findZone(_tokens[ctxt.nextToken]); -	if (!ctxt.cmd->_zone) { -		saveCommandForward(_tokens[ctxt.nextToken], ctxt.cmd); -	} +	ctxt.cmd->_zoneName = _tokens[ctxt.nextToken];  	ctxt.nextToken++;  	parseCommandFlags(); @@ -776,28 +773,10 @@ void LocationParser_ns::createCommand(uint id) {  	ctxt.nextToken = 1;  	ctxt.cmd = CommandPtr(new Command);  	ctxt.cmd->_id = id; +	ctxt.cmd->_valid = true;  } -void LocationParser_ns::saveCommandForward(const char *name, CommandPtr cmd) { -	assert(_numForwardedCommands < MAX_FORWARDS); - -	strcpy(_forwardedCommands[_numForwardedCommands].name, name); -	_forwardedCommands[_numForwardedCommands].cmd = cmd; - -	_numForwardedCommands++; -} - -void LocationParser_ns::resolveCommandForwards() { -	for (uint i = 0; i < _numForwardedCommands; i++) { -		_forwardedCommands[i].cmd->_zone = _vm->_location.findZone(_forwardedCommands[i].name); -		if (_forwardedCommands[i].cmd->_zone == 0) { -			warning("Cannot find zone '%s' into current location script. This may be a bug in the original scripts.\n", _forwardedCommands[i].name); -		} -	} -	_numForwardedCommands = 0; -} -  void LocationParser_ns::parseCommands(CommandList& list) {  	debugC(5, kDebugParser, "parseCommands()"); @@ -1058,7 +1037,6 @@ DECLARE_LOCATION_PARSER(music)  {  void LocationParser_ns::parse(Script *script) {  	_zoneProg = 0; -	_numForwardedCommands = 0;  	ctxt.end = false;  	_script = script; @@ -1071,8 +1049,6 @@ void LocationParser_ns::parse(Script *script) {  		_parser->parseStatement();  	} while (!ctxt.end);  	_parser->popTables(); - -	resolveCommandForwards();  }  void LocationParser_ns::parsePointList(PointList &list) { | 
