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

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Sat Jun 26 00:48:56 CEST 2010


Revision: 50294
          http://scummvm.svn.sourceforge.net/scummvm/?rev=50294&view=rev
Author:   m_kiewitz
Date:     2010-06-25 22:48:55 +0000 (Fri, 25 Jun 2010)

Log Message:
-----------
SCI: implementing workaround for issue in room 58 sq1 (operation lt, doing comparsion against pointer)

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/vm.cpp

Modified: scummvm/trunk/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.cpp	2010-06-25 22:37:19 UTC (rev 50293)
+++ scummvm/trunk/engines/sci/engine/vm.cpp	2010-06-25 22:48:55 UTC (rev 50294)
@@ -1056,6 +1056,12 @@
 				if (r_temp.segment != s->r_acc.segment)
 					warning("[VM] Comparing pointers in different segments (%04x:%04x vs. %04x:%04x)", PRINT_REG(r_temp), PRINT_REG(s->r_acc));
 				s->r_acc = make_reg(0, (r_temp.segment == s->r_acc.segment) && r_temp.offset < s->r_acc.offset);
+			} else if (r_temp.segment && !s->r_acc.segment) {
+				if (s->r_acc.offset >= 1000)
+					error("[VM] op_lt: comparsion between a pointer and number");
+				// Pseudo-WORKAROUND: sierra allows any pointer <-> value comparsion
+				// Happens in SQ1, room 58, when giving id-card to robot
+				s->r_acc = make_reg(0, 1);
 			} else
 				s->r_acc = ACC_ARITHMETIC_L(signed_validate_arithmetic(r_temp) < (int16)/*acc*/);
 			break;


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