aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2010-01-28 19:57:14 +0000
committerFilippos Karapetis2010-01-28 19:57:14 +0000
commit493350e905a7840aa2a1076b17d18d7156379517 (patch)
tree37ece732c70d207263833835458e49c1fc630fa8
parentf7692e724f264312fb0a8ccc2d82197874fb79cc (diff)
downloadscummvm-rg350-493350e905a7840aa2a1076b17d18d7156379517.tar.gz
scummvm-rg350-493350e905a7840aa2a1076b17d18d7156379517.tar.bz2
scummvm-rg350-493350e905a7840aa2a1076b17d18d7156379517.zip
SCI2.1: Added a dummy function for kRobot (with some info on its parameters), assigned IsOnMe to OnMe (needs verification, but seems to be correct) and changed kSave(8) to return nonzero. The menu of the Phantasmagoria demo is now shown, together with its creepy music :)
svn-id: r47648
-rw-r--r--engines/sci/engine/kernel.cpp3
-rw-r--r--engines/sci/engine/kernel.h1
-rw-r--r--engines/sci/engine/kernel32.cpp4
-rw-r--r--engines/sci/engine/kgraphics.cpp30
4 files changed, 38 insertions, 0 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp
index e8d4589d79..b9a473f513 100644
--- a/engines/sci/engine/kernel.cpp
+++ b/engines/sci/engine/kernel.cpp
@@ -357,6 +357,9 @@ SciKernelFunction kfunct_mappers[] = {
// SCI2.1 Kernel Functions
DEFUN("Save", kSave, ".*"),
DEFUN("List", kList, ".*"),
+ DEFUN("Robot", kRobot, ".*"),
+ DEFUN("IsOnMe", kOnMe, "iio.*"), // TODO: this seems right, but verify...
+
#endif
// its a stub, but its needed for Pharkas to work
diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h
index 4516b814f9..384f386ddd 100644
--- a/engines/sci/engine/kernel.h
+++ b/engines/sci/engine/kernel.h
@@ -468,6 +468,7 @@ reg_t kInPolygon(EngineState *s, int argc, reg_t *argv);
// SCI2.1 Kernel Functions
reg_t kSave(EngineState *s, int argc, reg_t *argv);
reg_t kList(EngineState *s, int argc, reg_t *argv);
+reg_t kRobot(EngineState *s, int argc, reg_t *argv);
#endif
diff --git a/engines/sci/engine/kernel32.cpp b/engines/sci/engine/kernel32.cpp
index 31344c6ec9..d4149af50a 100644
--- a/engines/sci/engine/kernel32.cpp
+++ b/engines/sci/engine/kernel32.cpp
@@ -634,6 +634,10 @@ reg_t kSave(EngineState *s, int argc, reg_t *argv) {
case 2: // GetSaveDir
// Yay! Reusing the old kernel function!
return kGetSaveDir(s, argc - 1, argv + 1);
+ case 8:
+ // TODO
+ // This function has to return something other than 0 to proceed
+ return s->r_acc;
default:
warning("Unknown/unhandled kSave subop %d", argv[0].toUint16());
}
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp
index 214560145c..6a764d891f 100644
--- a/engines/sci/engine/kgraphics.cpp
+++ b/engines/sci/engine/kgraphics.cpp
@@ -1089,6 +1089,36 @@ reg_t kShowMovie(EngineState *s, int argc, reg_t *argv) {
return s->r_acc;
}
+reg_t kRobot(EngineState *s, int argc, reg_t *argv) {
+
+ int16 subop = argv[0].toUint16();
+
+ switch (subop) {
+ case 0: { // init
+ int id = argv[1].toUint16();
+ reg_t obj = argv[2];
+ int16 flag = argv[3].toSint16();
+ int16 x = argv[4].toUint16();
+ int16 y = argv[5].toUint16();
+ warning("kRobot(init), id %d, obj %04x:%04x, flag %d, x=%d, y=%d", id, PRINT_REG(obj), flag, x, y);
+ }
+ break;
+ case 4: { // start
+ int id = argv[1].toUint16();
+ warning("kRobot(start), id %d", id);
+ }
+ break;
+ case 8: // sync
+ //warning("kRobot(sync), obj %04x:%04x", PRINT_REG(argv[1]));
+ break;
+ default:
+ warning("kRobot(%d)", subop);
+ break;
+ }
+
+ return s->r_acc;
+}
+
reg_t kSetVideoMode(EngineState *s, int argc, reg_t *argv) {
// This call is used for KQ6's intro. It has one parameter, which is
// 1 when the intro begins, and 0 when it ends. It is suspected that