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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sat Jan 8 11:23:28 CET 2011


Revision: 55158
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55158&view=rev
Author:   thebluegr
Date:     2011-01-08 10:23:27 +0000 (Sat, 08 Jan 2011)

Log Message:
-----------
SCI2.1: Added/documented some functionality used by Shivers 1

- Added kFileIO subop 17 (create save slot)
- Added information about a (probably debug) kernel function used in a puzzle, kCelInfo
- Added some information on two kSave subops
- Added 2 workarounds for uninitialized variables

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

Modified: scummvm/trunk/engines/sci/engine/kernel.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.h	2011-01-08 03:36:21 UTC (rev 55157)
+++ scummvm/trunk/engines/sci/engine/kernel.h	2011-01-08 10:23:27 UTC (rev 55158)
@@ -469,6 +469,7 @@
 reg_t kGetWindowsOption(EngineState *s, int argc, reg_t *argv);
 reg_t kWinHelp(EngineState *s, int argc, reg_t *argv);
 reg_t kGetConfig(EngineState *s, int argc, reg_t *argv);
+reg_t kGetCelInfo(EngineState *s, int argc, reg_t *argv);
 #endif
 
 reg_t kDoSoundInit(EngineState *s, int argc, reg_t *argv);
@@ -542,6 +543,7 @@
 reg_t kFileIOWriteByte(EngineState *s, int argc, reg_t *argv);
 reg_t kFileIOReadWord(EngineState *s, int argc, reg_t *argv);
 reg_t kFileIOWriteWord(EngineState *s, int argc, reg_t *argv);
+reg_t kFileIOCreateSaveSlot(EngineState *s, int argc, reg_t *argv);
 #endif
 
 //@}

Modified: scummvm/trunk/engines/sci/engine/kernel_tables.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel_tables.h	2011-01-08 03:36:21 UTC (rev 55157)
+++ scummvm/trunk/engines/sci/engine/kernel_tables.h	2011-01-08 10:23:27 UTC (rev 55158)
@@ -241,6 +241,7 @@
 	{ SIG_SCI32,          14, MAP_CALL(FileIOWriteByte),           "ii",                   NULL },
 	{ SIG_SCI32,          15, MAP_CALL(FileIOReadWord),            "i",                    NULL },
 	{ SIG_SCI32,          16, MAP_CALL(FileIOWriteWord),           "ii",                   NULL },
+	{ SIG_SCI32,          17, MAP_CALL(FileIOCreateSaveSlot),      "ir",                   NULL },
 	{ SIG_SCI32,          19, MAP_CALL(Stub),                      "r",                    NULL }, // for Torin / Torin demo
 #endif
 	SCI_SUBOPENTRY_TERMINATOR
@@ -543,6 +544,7 @@
 	{ MAP_CALL(GetWindowsOption),  SIG_EVERYWHERE,           "i",                     NULL,            NULL },
 	{ MAP_CALL(WinHelp),           SIG_EVERYWHERE,           "(.*)",                  NULL,            NULL },
 	{ MAP_CALL(GetConfig),         SIG_EVERYWHERE,           "ro",                    NULL,            NULL },
+	{ MAP_CALL(GetCelInfo),        SIG_EVERYWHERE,           "iiiiii",                NULL,            NULL },
 
 	// SCI2.1 Empty Functions
 
@@ -577,7 +579,6 @@
 
 	// SCI2.1 unmapped functions - TODO!
 	// SetLanguage - used by MUMG Deluxe from the main menu to switch languages
-	// CelInfo - used by Shivers 1
 	// Bitmap
 	// MovePlaneItems - used by SQ6
 	// Font

Modified: scummvm/trunk/engines/sci/engine/kfile.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kfile.cpp	2011-01-08 03:36:21 UTC (rev 55157)
+++ scummvm/trunk/engines/sci/engine/kfile.cpp	2011-01-08 10:23:27 UTC (rev 55158)
@@ -1113,6 +1113,26 @@
 	return s->r_acc; // FIXME: does this really not return anything?
 }
 
+reg_t kFileIOCreateSaveSlot(EngineState *s, int argc, reg_t *argv) {
+	// Used in Shivers when the user enters his name on the guest book
+	// in the beginning to start the game.
+
+	// Creates a new save slot, and returns if the operation was successful
+
+	// Argument 0 denotes the save slot as a negative integer, 2 means "0"
+	// Argument 1 is a string, with the file name, obtained from kSave(5).
+	// The interpreter checks if it can be written to (by checking for free
+	// disk space and write permissions)
+
+	// We don't really use or need any of this...
+
+	uint16 saveSlot = argv[0].toUint16();
+	char* fileName = s->_segMan->lookupString(argv[1])->getRawData();
+	warning("kFileIOCreateSaveSlot(%d, '%s')", saveSlot, fileName);
+
+	return TRUE_REG;	// slot creation was successful
+}
+
 reg_t kCD(EngineState *s, int argc, reg_t *argv) {
 	// TODO: Stub
 	switch (argv[0].toUint16()) {
@@ -1133,8 +1153,17 @@
 	case 2: // GetSaveDir
 		// Yay! Reusing the old kernel function!
 		return kGetSaveDir(s, argc - 1, argv + 1);
+	case 5:
+		// TODO
+		// 3 parameters: game ID, a string and an array
+		return s->r_acc;
 	case 8:
 		// TODO
+		// This is a timer callback, with 1 parameter: the timer object
+		// (e.g. "timers").
+		// It's used for auto-saving (i.e. save every X minutes, by checking
+		// the elapsed time from the timer object)
+
 		// This function has to return something other than 0 to proceed
 		return s->r_acc;
 	default:

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2011-01-08 03:36:21 UTC (rev 55157)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2011-01-08 10:23:27 UTC (rev 55158)
@@ -1490,6 +1490,33 @@
 	return s->r_acc;
 }
 
+reg_t kCelInfo(EngineState *s, int argc, reg_t *argv) {
+	// TODO: This is all a stub/skeleton, thus we're invoking kStub() for now
+	kStub(s, argc, argv);
+
+	// Used by Shivers 1, room 23601
+
+	// 6 arguments, all integers:
+	// argv[0] - subop (0 - 4). It's constantly called with 4 in Shivers 1
+	// argv[2] - view (used with view 23602 in Shivers 1)
+	// argv[3] - loop
+	// argv[4] - cel
+	// argv[5] - unknown (row?)
+	// argv[6] - unknown (column?)
+
+	// Subops:
+	// 0 - return the view
+	// 1 - return the loop
+	// 2, 3 - nop
+	// 4 - returns some kind of hash (?) based on the view and the two last params
+
+	// This seems to be a debug function, but it could be used to check if
+	// the jigsaw pieces "stick" together (they currently don't, unless I'm missing
+	// something)
+
+	return s->r_acc;
+}
+
 #endif
 
 } // End of namespace Sci

Modified: scummvm/trunk/engines/sci/engine/workarounds.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/workarounds.cpp	2011-01-08 03:36:21 UTC (rev 55157)
+++ scummvm/trunk/engines/sci/engine/workarounds.cpp	2011-01-08 10:23:27 UTC (rev 55158)
@@ -195,6 +195,8 @@
 	{ GID_RAMA,           12, 64950, -1,      "hiliteOptText", "handleEvent",    -1,    0, { WORKAROUND_FAKE,   0 } }, // Demo, right when it starts
 	{ GID_RAMA,           12, 64950, -1,               "View", "handleEvent",    -1,    0, { WORKAROUND_FAKE,   0 } }, // Demo, right when it starts
 	{ GID_SHIVERS,        -1,   952,  0,       "SoundManager", "stop",           -1,    2, { WORKAROUND_FAKE,   0 } }, // Just after Sierra logo
+	{ GID_SHIVERS,        -1, 64950,  0,            "Feature", "handleEvent",    -1,    0, { WORKAROUND_FAKE,   0 } }, // When clicking on the locked door at the beginning
+	{ GID_SHIVERS,        -1, 64950,  0,               "View", "handleEvent",    -1,    0, { WORKAROUND_FAKE,   0 } }, // When clicking on the gargoyle eye at the beginning
 	{ GID_SQ1,           103,   103,  0,               "hand", "internalEvent",  -1,   -1, { WORKAROUND_FAKE,   0 } }, // Spanish (and maybe early versions?) only: when moving cursor over input pad, temps 1 and 2
 	{ GID_SQ1,            -1,   703,  0,                   "", "export 1",       -1,    0, { WORKAROUND_FAKE,   0 } }, // sub that's called from several objects while on sarien battle cruiser
 	{ GID_SQ1,            -1,   703,  0,         "firePulsar", "changeState", 0x18a,    0, { WORKAROUND_FAKE,   0 } }, // export 1, but called locally (when shooting at aliens)


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