[Scummvm-cvs-logs] SF.net SVN: scummvm:[51304] scummvm/trunk/engines/sci/engine

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Jul 26 10:21:43 CEST 2010


Revision: 51304
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51304&view=rev
Author:   thebluegr
Date:     2010-07-26 08:21:43 +0000 (Mon, 26 Jul 2010)

Log Message:
-----------
SCI: Fixed bug #3034506, "QFG4 Demo: kPalette Subfunction Sig Mismatch", plus another sig mismatch on kDrawCel later on, when Dr. Cranium talks

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kernel_tables.h
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/engine/workarounds.cpp
    scummvm/trunk/engines/sci/engine/workarounds.h

Modified: scummvm/trunk/engines/sci/engine/kernel_tables.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel_tables.h	2010-07-26 07:55:50 UTC (rev 51303)
+++ scummvm/trunk/engines/sci/engine/kernel_tables.h	2010-07-26 08:21:43 UTC (rev 51304)
@@ -210,7 +210,7 @@
 static const SciKernelMapSubEntry kPalette_subops[] = {
     { SIG_SCIALL,          1, MAP_CALL(PaletteSetFromResource),    "i(i)",                 NULL },
     { SIG_SCIALL,          2, MAP_CALL(PaletteSetFlag),            "iii",                  NULL },
-    { SIG_SCIALL,          3, MAP_CALL(PaletteUnsetFlag),          "iii",                  NULL },
+    { SIG_SCIALL,          3, MAP_CALL(PaletteUnsetFlag),          "iii",                  kPaletteUnsetFlag_workarounds },
     { SIG_SCIALL,          4, MAP_CALL(PaletteSetIntensity),       "iii(i)",               NULL },
     { SIG_SCIALL,          5, MAP_CALL(PaletteFindColor),          "iii",                  NULL },
     { SIG_SCIALL,          6, MAP_CALL(PaletteAnimate),            "i*",                   NULL },
@@ -332,7 +332,7 @@
     { MAP_CALL(DoBresen),          SIG_EVERYWHERE,           "o",                     NULL,            NULL },
     { MAP_CALL(DoSound),           SIG_EVERYWHERE,           "i(.*)",                 kDoSound_subops, NULL },
     { MAP_CALL(DoSync),            SIG_EVERYWHERE,           "i(.*)",                 NULL,            NULL }, // subop
-    { MAP_CALL(DrawCel),           SIG_SCI11, SIGFOR_PC,     "iiiii(i)(i)(r0)",       NULL,            NULL }, // for kq6 hires
+    { MAP_CALL(DrawCel),           SIG_SCI11, SIGFOR_PC,     "iiiii(i)(i)(r0)",       NULL,            kDrawCel_workarounds }, // for kq6 hires and qfg4 demo
     { MAP_CALL(DrawCel),           SIG_EVERYWHERE,           "iiiii(i)(i)",           NULL,            NULL },
     { MAP_CALL(DrawControl),       SIG_EVERYWHERE,           "o",                     NULL,            NULL },
     { MAP_CALL(DrawMenuBar),       SIG_EVERYWHERE,           "i",                     NULL,            NULL },

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2010-07-26 07:55:50 UTC (rev 51303)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2010-07-26 08:21:43 UTC (rev 51304)
@@ -1000,8 +1000,9 @@
 	uint16 y = argv[4].toUint16();
 	int16 priority = (argc > 5) ? argv[5].toSint16() : -1;
 	uint16 paletteNo = (argc > 6) ? argv[6].toUint16() : 0;
-	bool hiresMode = (argc > 7) ? true : false;
-	reg_t upscaledHiresHandle = (argc > 7) ? argv[7] : NULL_REG;
+	// QFG4 demo calls this with an extra integer parameter (room 22, when Dr. Cranium speaks)
+	bool hiresMode = (argc > 7 && argv[6].segment != 0) ? true : false;
+	reg_t upscaledHiresHandle = (argc > 7 && argv[6].segment != 0) ? argv[7] : NULL_REG;
 
 	g_sci->_gfxPaint16->kernelDrawCel(viewId, loopNo, celNo, x, y, priority, paletteNo, hiresMode, upscaledHiresHandle);
 

Modified: scummvm/trunk/engines/sci/engine/workarounds.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/workarounds.cpp	2010-07-26 07:55:50 UTC (rev 51303)
+++ scummvm/trunk/engines/sci/engine/workarounds.cpp	2010-07-26 08:21:43 UTC (rev 51304)
@@ -111,6 +111,12 @@
 };
 
 //    gameID,           room,script,lvl,          object-name, method-name,    call,index,                workaround
+const SciWorkaroundEntry kDrawCel_workarounds[] = {
+	{ GID_QFG4,           371,   22,  0,        "GloryWindow", "<noname 196>",   -1,    0, { WORKAROUND_STILLCALL, 0 } }, // when Dr. Cranium talks, gets called with 1 extra parameter
+    SCI_WORKAROUNDENTRY_TERMINATOR
+};
+
+//    gameID,           room,script,lvl,          object-name, method-name,    call,index,                workaround
 const SciWorkaroundEntry kDisplay_workarounds[] = {
     { GID_ISLANDBRAIN,   300,   300,  0,           "geneDude", "show",           -1,    0, { WORKAROUND_IGNORE,    0 } }, // when looking at the gene explanation chart - a parameter is an object
     { GID_SQ4,           391,   391,  0,          "doCatalog", "mode",         0x84,    0, { WORKAROUND_IGNORE,    0 } }, // clicking on catalog in roboter sale - a parameter is an object
@@ -186,6 +192,12 @@
 };
 
 //    gameID,           room,script,lvl,          object-name, method-name,    call,index,                workaround
+const SciWorkaroundEntry kPaletteUnsetFlag_workarounds[] = {
+    { GID_QFG4,     100,   100,  0,                 "doMovie", "<noname 144>",   -1,    0, { WORKAROUND_IGNORE,    0 } }, // after the Sierra logo, no flags are passed, thus the call is meaningless
+    SCI_WORKAROUNDENTRY_TERMINATOR
+};
+
+//    gameID,           room,script,lvl,          object-name, method-name,    call,index,                workaround
 const SciWorkaroundEntry kSetPort_workarounds[] = {
     { GID_LSL6,          740,   740,  0,              "rm740", "drawPic",        -1,    0, { WORKAROUND_IGNORE,    0 } }, // ending scene, is called with additional 3 (!) parameters
     SCI_WORKAROUNDENTRY_TERMINATOR

Modified: scummvm/trunk/engines/sci/engine/workarounds.h
===================================================================
--- scummvm/trunk/engines/sci/engine/workarounds.h	2010-07-26 07:55:50 UTC (rev 51303)
+++ scummvm/trunk/engines/sci/engine/workarounds.h	2010-07-26 08:21:43 UTC (rev 51304)
@@ -73,6 +73,7 @@
 extern const SciWorkaroundEntry opcodeDptoaWorkarounds[];
 extern const SciWorkaroundEntry uninitializedReadWorkarounds[];
 extern const SciWorkaroundEntry kAbs_workarounds[];
+extern const SciWorkaroundEntry kDrawCel_workarounds[];
 extern const SciWorkaroundEntry kDisplay_workarounds[];
 extern const SciWorkaroundEntry kDisposeScript_workarounds[];
 extern const SciWorkaroundEntry kDoSoundFade_workarounds[];
@@ -83,6 +84,7 @@
 extern const SciWorkaroundEntry kGraphFillBoxAny_workarounds[];
 extern const SciWorkaroundEntry kGraphRedrawBox_workarounds[];
 extern const SciWorkaroundEntry kMemory_workarounds[];
+extern const SciWorkaroundEntry kPaletteUnsetFlag_workarounds[];
 extern const SciWorkaroundEntry kSetPort_workarounds[];
 extern const SciWorkaroundEntry kUnLoad_workarounds[];
 extern const SciWorkaroundEntry kStrCpy_workarounds[];


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