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

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Fri May 15 01:39:36 CEST 2009


Revision: 40582
          http://scummvm.svn.sourceforge.net/scummvm/?rev=40582&view=rev
Author:   fingolfin
Date:     2009-05-14 23:39:36 +0000 (Thu, 14 May 2009)

Log Message:
-----------
SCI: Fixed restoring scripts when loading a SCI 1.1 savestate

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

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2009-05-14 23:39:16 UTC (rev 40581)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2009-05-14 23:39:36 UTC (rev 40582)
@@ -580,15 +580,23 @@
 			case MEM_OBJ_SCRIPT: {
 				Script *scr = (Script *)mobj;
 
+				// FIXME: Unify this code with script_instantiate_*
 				load_script(s, i);
 				scr->locals_block = (scr->locals_segment == 0) ? NULL : (LocalVariables *)(s->seg_manager->_heap[scr->locals_segment]);
-				scr->export_table = (uint16 *) find_unique_script_block(s, scr->buf, SCI_OBJ_EXPORTS);
-				scr->synonyms = find_unique_script_block(s, scr->buf, SCI_OBJ_SYNONYMS);
+				if (s->seg_manager->isSci1_1) {
+					scr->export_table = 0;
+					scr->synonyms = 0;
+					if (READ_LE_UINT16(scr->buf + 6) > 0) {
+						scr->export_table = (uint16 *)(scr->buf + 8);
+						scr->exports_nr = READ_LE_UINT16((byte *)(scr->export_table - 1));
+					}
+				} else {
+					scr->export_table = (uint16 *) find_unique_script_block(s, scr->buf, SCI_OBJ_EXPORTS);
+					scr->synonyms = find_unique_script_block(s, scr->buf, SCI_OBJ_SYNONYMS);
+					scr->export_table += 3;
+				}
 				scr->_codeBlocks.clear();
 
-				if (!self->isSci1_1)
-					scr->export_table += 3;
-
 				for (j = 0; j < scr->_objects.size(); j++) {
 					byte *data = scr->buf + scr->_objects[j].pos.offset;
 					scr->_objects[j].base = scr->buf;


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