[Scummvm-cvs-logs] SF.net SVN: scummvm: [32393] scummvm/trunk/engines/cine

buddha_ at users.sourceforge.net buddha_ at users.sourceforge.net
Fri May 30 12:43:21 CEST 2008


Revision: 32393
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32393&view=rev
Author:   buddha_
Date:     2008-05-30 03:43:21 -0700 (Fri, 30 May 2008)

Log Message:
-----------
Implemented opcodes 0x04 (o1_mulObjectParam) and 0x05 (o1_divObjectParam).

Modified Paths:
--------------
    scummvm/trunk/engines/cine/script.h
    scummvm/trunk/engines/cine/script_fw.cpp
    scummvm/trunk/engines/cine/script_os.cpp

Modified: scummvm/trunk/engines/cine/script.h
===================================================================
--- scummvm/trunk/engines/cine/script.h	2008-05-30 10:31:47 UTC (rev 32392)
+++ scummvm/trunk/engines/cine/script.h	2008-05-30 10:43:21 UTC (rev 32393)
@@ -155,8 +155,8 @@
 	int o1_getObjectParam();
 	int o1_addObjectParam();
 	int o1_subObjectParam();
-	int o1_add2ObjectParam();
-	int o1_sub2ObjectParam();
+	int o1_mulObjectParam();
+	int o1_divObjectParam();
 	int o1_compareObjectParam();
 	int o1_setupObject();
 	int o1_checkCollision();

Modified: scummvm/trunk/engines/cine/script_fw.cpp
===================================================================
--- scummvm/trunk/engines/cine/script_fw.cpp	2008-05-30 10:31:47 UTC (rev 32392)
+++ scummvm/trunk/engines/cine/script_fw.cpp	2008-05-30 10:43:21 UTC (rev 32393)
@@ -49,8 +49,8 @@
 	{ &FWScript::o1_addObjectParam, "bbw" },
 	{ &FWScript::o1_subObjectParam, "bbw" },
 	/* 04 */
-	{ &FWScript::o1_add2ObjectParam, "bbw" },
-	{ &FWScript::o1_sub2ObjectParam, "bbw" },
+	{ &FWScript::o1_mulObjectParam, "bbw" },
+	{ &FWScript::o1_divObjectParam, "bbw" },
 	{ &FWScript::o1_compareObjectParam, "bbw" },
 	{ &FWScript::o1_setupObject, "bwwww" },
 	/* 08 */
@@ -803,23 +803,32 @@
 	return 0;
 }
 
-/*! \todo Implement this instruction
- */
-int FWScript::o1_add2ObjectParam() {
-	uint16 a = getNextByte();
-	uint16 b = getNextByte();
-	uint16 c = getNextWord();
-	warning("STUB: o1_add2ObjectParam(%x, %x, %x)", a, b, c);
+int FWScript::o1_mulObjectParam() {
+	byte objIdx = getNextByte();
+	byte paramIdx = getNextByte();
+	int16 newValue = getNextWord();
+
+	debugC(5, kCineDebugScript, "Line: %d: mulObjectParam(objIdx:%d,paramIdx:%d,newValue:%d)", _line, objIdx, paramIdx, newValue);
+
+	// FIXME? In PC versions of Future Wars and Operation Stealth the multiplication is done unsigned.
+	// (16b x 16b -> 32b, taking only 16 LSBs). The question is, does it really matter?
+	int16 currentValue = getObjectParam(objIdx, paramIdx);
+	modifyObjectParam(objIdx, paramIdx, currentValue * newValue);
 	return 0;
 }
 
-/*! \todo Implement this instruction
- */
-int FWScript::o1_sub2ObjectParam() {
-	uint16 a = getNextByte();
-	uint16 b = getNextByte();
-	uint16 c = getNextWord();
-	warning("STUB: o1_sub2ObjectParam(%x, %x, %x)", a, b, c);
+int FWScript::o1_divObjectParam() {
+	byte objIdx = getNextByte();
+	byte paramIdx = getNextByte();
+	int16 newValue = getNextWord();
+
+	debugC(5, kCineDebugScript, "Line: %d: divObjectParam(objIdx:%d,paramIdx:%d,newValue:%d)", _line, objIdx, paramIdx, newValue);
+
+	// In PC versions of Future Wars and Operation Stealth the division is done signed.
+	// Dividend is first sign extended from 16 bits to 32 bits and then divided by the
+	// 16 bit divider using signed division. Only 16 LSBs of the quotient are saved.
+	int16 currentValue = getObjectParam(objIdx, paramIdx);
+	modifyObjectParam(objIdx, paramIdx, currentValue / newValue);
 	return 0;
 }
 

Modified: scummvm/trunk/engines/cine/script_os.cpp
===================================================================
--- scummvm/trunk/engines/cine/script_os.cpp	2008-05-30 10:31:47 UTC (rev 32392)
+++ scummvm/trunk/engines/cine/script_os.cpp	2008-05-30 10:43:21 UTC (rev 32393)
@@ -45,8 +45,8 @@
 	{ &FWScript::o1_addObjectParam, "bbw" },
 	{ &FWScript::o1_subObjectParam, "bbw" },
 	/* 04 */
-	{ &FWScript::o1_add2ObjectParam, "bbw" },
-	{ &FWScript::o1_sub2ObjectParam, "bbw" },
+	{ &FWScript::o1_mulObjectParam, "bbw" },
+	{ &FWScript::o1_divObjectParam, "bbw" },
 	{ &FWScript::o1_compareObjectParam, "bbw" },
 	{ &FWScript::o1_setupObject, "bwwww" },
 	/* 08 */


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