[Scummvm-cvs-logs] CVS: scummvm/scumm script_v8.cpp,2.15,2.16 intern.h,2.11,2.12

Max Horn fingolfin at users.sourceforge.net
Mon Dec 23 12:26:07 CET 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv11399

Modified Files:
	script_v8.cpp intern.h 
Log Message:
don't let unknown V8 codes pass by (it makes debugging pretty hard)

Index: script_v8.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v8.cpp,v
retrieving revision 2.15
retrieving revision 2.16
diff -u -d -r2.15 -r2.16
--- script_v8.cpp	23 Dec 2002 19:15:51 -0000	2.15
+++ script_v8.cpp	23 Dec 2002 20:25:47 -0000	2.16
@@ -38,7 +38,7 @@
 	// TODO: any of the o6_ entries are potentially wrong and pure guesses :-)
 	static const OpcodeEntryV8 opcodes[256] = {
 		/* 00 */
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		OPCODE(o6_pushWord),
 		OPCODE(o6_pushWordVar),
 		OPCODE(o6_wordArrayRead),
@@ -168,12 +168,12 @@
 		OPCODE(o6_jump),
 		OPCODE(o6_breakHere),
 		/* 68 */
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		OPCODE(o8_wait),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_delay),			// FIXME - is the delay period right?
+		OPCODE(o6_delayLonger),		// FIXME - is the delay period right?
 		/* 6C */
-		OPCODE(o8_unknown),
+		OPCODE(o6_delayVeryLong),	// FIXME - is the delay period right?
 		OPCODE(o6_writeWordVar),
 		OPCODE(o6_wordVarInc),
 		OPCODE(o6_wordVarDec),
@@ -186,52 +186,52 @@
 		OPCODE(o8_dim2),
 		OPCODE(o6_wordArrayIndexedWrite),
 		OPCODE(o8_arrayOps),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		/* 78 */
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		OPCODE(o6_startScript),
 		OPCODE(o6_startScriptQuick),
 		OPCODE(o6_stopObjectCode),
 		/* 7C */
-		OPCODE(o8_unknown),
-		OPCODE(o6_jumpToScript),	// FIXME - is this right? "O_CHAIN_SCRIPT"
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_stopScript),
+		OPCODE(o6_jumpToScript),		// FIXME - is this right? "O_CHAIN_SCRIPT"
+		OPCODE(o6_invalid),
+		OPCODE(o6_startObject),
 		/* 80 */
-		OPCODE(o8_unknown),
+		OPCODE(o6_stopObjectScript),	// FIXME - is this right?
 		OPCODE(o6_cutscene),
 		OPCODE(o6_endCutscene),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		/* 84 */
 		OPCODE(o6_beginOverride),
 		OPCODE(o6_endOverride),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 88 */
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		OPCODE(o6_setClass),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 8C */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 90 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		OPCODE(o8_printLine),
 		/* 94 */
 		OPCODE(o8_printCursor),
 		OPCODE(o8_printDebug),
 		OPCODE(o8_printSystem),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		/* 98 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* 9C */
 		OPCODE(o8_cursorCommand),
 		OPCODE(o6_loadRoom),
@@ -246,117 +246,117 @@
 		OPCODE(o6_animateActor),
 		OPCODE(o6_doSentence),
 		OPCODE(o6_pickupObject),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		/* A8 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		OPCODE(o8_resourceRoutines),
 		OPCODE(o8_roomOps),
 		/* AC */
 		OPCODE(o8_actorOps),
 		OPCODE(o8_cameraOps),
 		OPCODE(o8_verbOps),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		/* B0 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o8_soundKludge),
 		OPCODE(o8_system),
 		/* B4 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* B8 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		OPCODE(o8_kludge),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		/* BC */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* C0 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* C4 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* C8 */
 		OPCODE(o6_startScript),
 		OPCODE(o6_startObject),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* CC */
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		OPCODE(o6_isAnyOf),
 		OPCODE(o6_getRandomNumber),
 		OPCODE(o6_getRandomNumberRange),
 		/* D0 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_ifClassOfIs),	// FIXME - this is a guess
+		OPCODE(o6_getState),
+		OPCODE(o6_getOwner),
 		OPCODE(o6_isScriptRunning),
 		/* D4 */
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		OPCODE(o6_isSoundRunning),
 		OPCODE(o6_abs),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
 		/* D8 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o8_kludge2),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_getActorFromXY),
 		/* DC */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_findObject),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* E0 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* E4 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* E8 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* EC */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* F0 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* F4 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* F8 */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 		/* FC */
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
-		OPCODE(o8_unknown),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
+		OPCODE(o6_invalid),
 	};
 	
 	_opcodesV8 = opcodes;
@@ -521,11 +521,6 @@
 	}
 }
 
-void Scumm_v8::o8_unknown()
-{
-	warning("Unknown opcode '%x' at %x", _opcode, _scriptPointer - _scriptOrgPointer);
-}
-
 void Scumm_v8::o8_mod()
 {
 	int a = pop();
@@ -596,6 +591,8 @@
 {
 	byte subOp = fetchScriptByte();
 	int array = fetchScriptWord();
+	int b, c, d, len;
+	int16 list[128];
 	
 	switch (subOp) {
 	case 0x14:		// SO_ASSIGN_STRING
@@ -603,7 +600,7 @@
 		int idx = pop();
 		ArrayHeader *ah;
 		int r;
-		int len = getStringLen(NULL);
+		len = getStringLen(NULL);
 	
 		r = defineArray(array, 4, 0, len);
 		ah = (ArrayHeader *)getResourceAddress(rtString, r);
@@ -611,9 +608,29 @@
 		}
 		break;
 	case 0x15:		// SO_ASSIGN_SCUMMVAR_LIST
-		// TODO
+		// TODO / FIXME: is this right?
+		b = pop();
+		c = pop();
+		d = readVar(array);
+		if (d == 0) {
+			defineArray(array, 5, 0, b + c);
+		}
+		while (c--) {
+			writeArray(array, 0, b + c, pop());
+		}
+		break;
 	case 0x16:		// SO_ASSIGN_2DIM_LIST
-		// TODO
+		// TODO / FIXME: is this right?
+		b = pop();
+		len = getStackList(list, sizeof(list) / sizeof(list[0]));
+		d = readVar(array);
+		if (d == 0)
+			error("Must DIM a two dimensional array before assigning");
+		c = pop();
+		while (--len >= 0) {
+			writeArray(array, c, b + len, list[len]);
+		}
+		break;
 	default:
 		error("o8_arrayOps: default case %d (array %d)", subOp, array);
 	}
@@ -937,6 +954,12 @@
 	}
 }
 
+void Scumm_v8::o8_soundKludge()
+{
+	// TODO
+	int16 args[30];
+	getStackList(args, sizeof(args) / sizeof(args[0]));
+}
 
 void Scumm_v8::o8_system()
 {
@@ -957,6 +980,22 @@
 	switch (args[0]) {
 	default:
 		warning("o8_kludge: default case %d", args[0]);
+	}
+}
+
+void Scumm_v8::o8_kludge2()
+{
+	// TODO
+	int16 args[30];
+	getStackList(args, sizeof(args) / sizeof(args[0]));
+
+	switch (args[0]) {
+	case 0xE0:
+		// TODO - ReadRegistryValue
+		push(0);
+		break;
+	default:
+		warning("o8_kludge2: default case %d", args[0]);
 	}
 }
 

Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.11
retrieving revision 2.12
diff -u -d -r2.11 -r2.12
--- intern.h	23 Dec 2002 18:37:56 -0000	2.11
+++ intern.h	23 Dec 2002 20:25:47 -0000	2.12
@@ -407,8 +407,6 @@
 	void decodeParseString(int m, int n);
 
 	/* Version 8 script opcodes */
-	void o8_unknown();
-
 	void o8_mod();
 	void o8_wait();
 
@@ -427,8 +425,10 @@
 	void o8_cameraOps();
 	void o8_verbOps();
 	
+	void o8_soundKludge();
 	void o8_system();
 	void o8_kludge();
+	void o8_kludge2();
 };
 
 





More information about the Scummvm-git-logs mailing list