[Scummvm-cvs-logs] SF.net SVN: scummvm: [26681] scummvm/trunk/engines/lure

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Mon Apr 30 09:58:10 CEST 2007


Revision: 26681
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26681&view=rev
Author:   dreammaster
Date:     2007-04-30 00:58:09 -0700 (Mon, 30 Apr 2007)

Log Message:
-----------
Cleaned up the script engine opcodes, added debug names for recently added script methods, and bugfix to method that was causing a crash in the first room

Modified Paths:
--------------
    scummvm/trunk/engines/lure/scripts.cpp
    scummvm/trunk/engines/lure/scripts.h

Modified: scummvm/trunk/engines/lure/scripts.cpp
===================================================================
--- scummvm/trunk/engines/lure/scripts.cpp	2007-04-30 07:56:45 UTC (rev 26680)
+++ scummvm/trunk/engines/lure/scripts.cpp	2007-04-30 07:58:09 UTC (rev 26681)
@@ -55,11 +55,17 @@
 // Sets a hotspot's animation script offset from a master table of offsets
 
 void Script::setHotspotScript(uint16 hotspotId, uint16 scriptIndex, uint16 v3) {
-	Resources &r = Resources::getReference();
-	uint16 offset = r.getHotspotScript(scriptIndex);
-	Hotspot *hotspot = r.getActiveHotspot(hotspotId);
-	assert(hotspot);
-	hotspot->setHotspotScript(offset);
+	Resources &res = Resources::getReference();
+	uint16 offset = res.getHotspotScript(scriptIndex);
+	Hotspot *hotspot = res.getActiveHotspot(hotspotId);
+
+	if (hotspot != NULL) {
+		hotspot->setHotspotScript(offset);
+	} else {
+		HotspotData *hs = res.getHotspot(hotspotId);
+		assert(hs);
+		hs->hotspotScriptOffset = offset;
+	}
 }
 
 void Script::method2(uint16 v1, uint16 v2, uint16 v3) {
@@ -607,16 +613,16 @@
 	{0xff, NULL}};
 
 const char *scriptOpcodes[] = {
-	"ABORT", "ADD", "SUBTRACT", "MULTIPLY", "DIVIDE", "NOT_EQUALS", "EQUALS",
-		"GT", "LT", "LT2", "GT2", "AND", "OR", "LOGICAL_AND", "LOGICAL_OR",
+	"ABORT", "ADD", "SUBTRACT", "MULTIPLY", "DIVIDE", "EQUALS", "NOT_EQUALS",
+		"LT", "GT", "LTE", "GTE", "AND", "OR", "LOGICAL_AND", "LOGICAL_OR",
 		"GET_FIELD", "SET_FIELD", "PUSH", "SUBROUTINE", "EXEC", "END",
 		"COND_JUMP", "JUMP", "ABORT2", "ABORT3", "RANDOM"
 };
 
 const char *scriptMethodNames[67] = {
-	"ACTIVATE HOTSPOT", "SET HOTSPOT SCRIPT", NULL, NULL, "CLEAR SEQUENCE DELAY LIST",
-	"DEACTIVATE HOTSPOT SET", "DEACTIVATE HOTSPOT", "RESET PATHFINDER",
-	"ADD DELAYED SCRIPT", NULL,
+	"ACTIVATE HOTSPOT", "SET HOTSPOT SCRIPT", NULL, "SET HOTSPOT FLAG MASK", 
+	"CLEAR SEQUENCE DELAY LIST", "DEACTIVATE HOTSPOT SET", "DEACTIVATE HOTSPOT", 
+	"RESET PATHFINDER",	"ADD DELAYED SCRIPT", NULL,
 
 	"IS CHARACTER IN ROOM", "SET HOTSPOT DESC", "SET HOTSPOT NAME",
 	"PLAY SOUND", NULL, NULL, "DISPLAY DIALOG", NULL, "REMOTE ROOM VIEW SETUP",
@@ -627,14 +633,15 @@
 	"DECREMENT # INVENTORY ITEMS", "SET TALKING",
 
 	"SET ACTION CTR", "START SPEAKING", "DISABLE HOTSPOT", "CUT SACK",
-	"INCREASE # GROATS", "ENABLE HOTSPOT", NULL, "TRANSFORM PLAYER",
-	NULL, "ROOM 14 CLOSE DOOR",
+	"INCREASE # GROATS", "ENABLE HOTSPOT", "DISPLAY MESSAGE 2", "START OIL BURNER"
+	"TRANSFORM PLAYER", "JAIL CLOSE",
 
-	"CHECK DROPPED DESC", NULL, "CLOSE DOOR", NULL, "OPEN DOOR", NULL, NULL,
+	"CHECK DROPPED DESC", NULL, "CLOSE DOOR", NULL, "OPEN DOOR", "NPC WAIT", NULL,
 	"DISPLAY MESSAGE", "SET NEW ACTION SUPPORT DATA", "SET ACTION SUPPORT DATA",
 	
 	"GIVE PLAYER ITEM", "DECREASE # GROATS", NULL, NULL,
-	"SET VILLAGE SKORL TICK PROC", NULL, NULL, "GET # GROATS", NULL, NULL,
+	"SET VILLAGE SKORL TICK PROC", "FREE GOEWIN", "BARMAN SERVE", "GET # GROATS", 
+	NULL, "ENABLE GARGOYLE TALK",
 
 	NULL, "KILL PLAYER", "ANIMATION LOAD", "ADD ACTIONS", "RANDOM TO GENERAL", 
 	"CHECK CELL DOOR", "METHOD 66"
@@ -708,12 +715,12 @@
 			case S_OPCODE_SUBTRACT:
 			case S_OPCODE_MULTIPLY:
 			case S_OPCODE_DIVIDE:
+			case S_OPCODE_EQUALS:
 			case S_OPCODE_NOT_EQUALS:
-			case S_OPCODE_EQUALS:
+			case S_OPCODE_LT:
 			case S_OPCODE_GT:
-			case S_OPCODE_LT:
-			case S_OPCODE_LT2:
-			case S_OPCODE_GT2:
+			case S_OPCODE_LTE:
+			case S_OPCODE_GTE:
 			case S_OPCODE_AND:
 			case S_OPCODE_OR:
 			case S_OPCODE_LOGICAL_AND:
@@ -761,30 +768,38 @@
 			param = v2 % v1;      // remainder
 			break;
 
+		case S_OPCODE_EQUALS:
+			stack.push((stack.pop() == stack.pop()) ? 1 : 0);
+			break;
+
 		case S_OPCODE_NOT_EQUALS:
-			stack.push((stack.pop() != stack.pop()) ? 0 : 1);
+			stack.push((stack.pop() != stack.pop()) ? 1 : 0);
 			break;
 
-		case S_OPCODE_EQUALS:
-			stack.push((stack.pop() == stack.pop()) ? 0 : 1);
+		case S_OPCODE_LT:
+			v1 = stack.pop();
+			v2 = stack.pop();
+			stack.push(v2 < v1 ? 1 : 0);
 			break;
 
 		case S_OPCODE_GT:
-			stack.push((stack.pop() > stack.pop()) ? 1 : 0);
+			v1 = stack.pop();
+			v2 = stack.pop();
+			stack.push(v2 > v1 ? 1 : 0);
 			break;
 
-		case S_OPCODE_LT:
-			stack.push((stack.pop() < stack.pop()) ? 1 : 0);
+		case S_OPCODE_LTE:
+			v1 = stack.pop();
+			v2 = stack.pop();
+			stack.push(v2 <= v1 ? 1 : 0);
 			break;
 
-		case S_OPCODE_LT2:
-			stack.push((stack.pop() < stack.pop()) ? 1 : 0);
+		case S_OPCODE_GTE:
+			v1 = stack.pop();
+			v2 = stack.pop();
+			stack.push(v2 >= v1 ? 1 : 0);
 			break;
 
-		case S_OPCODE_GT2:
-			stack.push((stack.pop() > stack.pop()) ? 1 : 0);
-			break;
-
 		case S_OPCODE_AND:
 			stack.push(stack.pop() & stack.pop());
 			break;
@@ -794,22 +809,24 @@
 			break;
 
 		case S_OPCODE_LOGICAL_AND:
-			stack.push(((stack.pop() != 0) && (stack.pop() != 0)) ? 1 : 0);
+			v1 = stack.pop();
+			v2 = stack.pop();
+			stack.push(((v1 != 0) && (v2 != 0)) ? 1 : 0);
 			break;
 
 		case S_OPCODE_LOGICAL_OR:
-			stack.push(((stack.pop() != 0) || (stack.pop() != 0)) ? 1 : 0);
+			v1 = stack.pop();
+			v2 = stack.pop();
+			stack.push(((v1 != 0) || (v2 != 0)) ? 1 : 0);
 			break;
 
 		case S_OPCODE_GET_FIELD:
-			// Opcode not yet fully implemented
 			fieldNum = param >> 1;
 			v1 = fields.getField(fieldNum);
 			stack.push(v1);
 			break;
 
 		case S_OPCODE_SET_FIELD:
-			// Opcode not yet fully implemented
 			fieldNum = param >> 1;
 			v1 = stack.pop();
 			fields.setField(fieldNum, v1);
@@ -902,8 +919,8 @@
 			case S_OPCODE_EQUALS:
 			case S_OPCODE_GT:
 			case S_OPCODE_LT:
-			case S_OPCODE_LT2:
-			case S_OPCODE_GT2:
+			case S_OPCODE_LTE:
+			case S_OPCODE_GTE:
 			case S_OPCODE_AND:
 			case S_OPCODE_OR:
 			case S_OPCODE_LOGICAL_AND:

Modified: scummvm/trunk/engines/lure/scripts.h
===================================================================
--- scummvm/trunk/engines/lure/scripts.h	2007-04-30 07:56:45 UTC (rev 26680)
+++ scummvm/trunk/engines/lure/scripts.h	2007-04-30 07:58:09 UTC (rev 26681)
@@ -35,12 +35,12 @@
 #define S_OPCODE_SUBTRACT 2
 #define S_OPCODE_MULTIPLY 3
 #define S_OPCODE_DIVIDE 4
-#define S_OPCODE_NOT_EQUALS 5
-#define S_OPCODE_EQUALS 6
-#define S_OPCODE_GT 7
-#define S_OPCODE_LT 8
-#define S_OPCODE_LT2 9
-#define S_OPCODE_GT2 10
+#define S_OPCODE_EQUALS 5
+#define S_OPCODE_NOT_EQUALS 6
+#define S_OPCODE_LT 7
+#define S_OPCODE_GT 8
+#define S_OPCODE_LTE 9
+#define S_OPCODE_GTE 10
 #define S_OPCODE_AND 11
 #define S_OPCODE_OR 12
 #define S_OPCODE_LOGICAL_AND 13


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