[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