[Scummvm-cvs-logs] SF.net SVN: scummvm: [28609] scummvm/trunk/engines/parallaction

peres001 at users.sourceforge.net peres001 at users.sourceforge.net
Tue Aug 14 10:03:13 CEST 2007


Revision: 28609
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28609&view=rev
Author:   peres001
Date:     2007-08-14 01:03:13 -0700 (Tue, 14 Aug 2007)

Log Message:
-----------
Partially reverting commit 28568, so now engine is back in charge for parsing locations. I'm going to convert this if/else/else hell into smaller opcode-like routines to achieve more flexibility first, and then assign version-specific opcodes to subclasses.

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/location.cpp
    scummvm/trunk/engines/parallaction/parallaction.h
    scummvm/trunk/engines/parallaction/parallaction_br.cpp
    scummvm/trunk/engines/parallaction/parallaction_ns.cpp

Modified: scummvm/trunk/engines/parallaction/location.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/location.cpp	2007-08-14 05:38:27 UTC (rev 28608)
+++ scummvm/trunk/engines/parallaction/location.cpp	2007-08-14 08:03:13 UTC (rev 28609)
@@ -39,7 +39,7 @@
 	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 @@
 	}
 
 
-	fillBuffers(*_locationScript, true);
+	fillBuffers(*script, true);
 
-	printf("ciao (%s)\n", filename);
-
 	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.
 
-			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;
+			char *mask = strchr(_tokens[1], '.');
+			if (mask) {
+				mask[0] = '\0';
+				mask++;
+			}
 
-					do {
-						byte _al = _localFlagNames->lookup(_tokens[_si]);
-						_localFlags[_currentLocationIndex] |= 1 << (_al - 1);
+			strcpy(_location._name, _tokens[1]);
+			switchBackground(_location._name, mask);
 
-						_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);
-		}
+			if (_tokens[2][0] != '\0') {
+				_char._ani._left = atoi(_tokens[2]);
+				_char._ani._top = atoi(_tokens[3]);
+			}
 
-		fillBuffers(*_locationScript, true);
+			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);
+
+					_si++;
+					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;
 }

Modified: scummvm/trunk/engines/parallaction/parallaction.h
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction.h	2007-08-14 05:38:27 UTC (rev 28608)
+++ scummvm/trunk/engines/parallaction/parallaction.h	2007-08-14 08:03:13 UTC (rev 28609)
@@ -424,7 +424,7 @@
 	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,9 +628,7 @@
 	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:
 	typedef void (Parallaction_br::*Callable)(void*);
 	virtual	void callFunction(uint index, void* parm);
-	virtual bool parseLocationLine(const char *filename, Script *script);
 
 public:
 	Table		*_countersNames;

Modified: scummvm/trunk/engines/parallaction/parallaction_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction_br.cpp	2007-08-14 05:38:27 UTC (rev 28608)
+++ scummvm/trunk/engines/parallaction/parallaction_br.cpp	2007-08-14 08:03:13 UTC (rev 28609)
@@ -350,7 +350,7 @@
 	}
 
 }
-
+#if 0
 bool Parallaction_br::parseLocationLine(const char *filename, Script *script) {
 
 	bool parsed = true;
@@ -420,6 +420,6 @@
 
 	return parsed;
 }
+#endif
 
-
 } // namespace Parallaction

Modified: scummvm/trunk/engines/parallaction/parallaction_ns.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/parallaction_ns.cpp	2007-08-14 05:38:27 UTC (rev 28608)
+++ scummvm/trunk/engines/parallaction/parallaction_ns.cpp	2007-08-14 08:03:13 UTC (rev 28609)
@@ -199,49 +199,5 @@
 	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


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list