[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