diff options
author | Filippos Karapetis | 2010-01-28 19:57:14 +0000 |
---|---|---|
committer | Filippos Karapetis | 2010-01-28 19:57:14 +0000 |
commit | 493350e905a7840aa2a1076b17d18d7156379517 (patch) | |
tree | 37ece732c70d207263833835458e49c1fc630fa8 | |
parent | f7692e724f264312fb0a8ccc2d82197874fb79cc (diff) | |
download | scummvm-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.cpp | 3 | ||||
-rw-r--r-- | engines/sci/engine/kernel.h | 1 | ||||
-rw-r--r-- | engines/sci/engine/kernel32.cpp | 4 | ||||
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 30 |
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 |