diff options
-rw-r--r-- | engines/sci/engine/kernel.cpp | 5 | ||||
-rw-r--r-- | engines/sci/engine/kernel.h | 3 | ||||
-rw-r--r-- | engines/sci/engine/kernel32.cpp | 40 | ||||
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 4 |
4 files changed, 51 insertions, 1 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index cc15268a59..831f54cd6c 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -342,7 +342,10 @@ SciKernelFunction kfunct_mappers[] = { DEFUN("IsHiRes", kIsHiRes, ""), DEFUN("Array", kArray, ".*"), DEFUN("String", kString, ".*"), - + DEFUN("AddScreenItem", kAddScreenItem, "o"), + DEFUN("UpdateScreenItem", kUpdateScreenItem, "o"), + DEFUN("DeleteScreenItem", kDeleteScreenItem, "o"), + // SCI2.1 Kernel Functions DEFUN("Save", kSave, ".*"), #endif diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index 5c78bc7b00..3119df4c62 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -395,6 +395,9 @@ reg_t kTextFonts(EngineState *s, int argc, reg_t *argv); reg_t kIsHiRes(EngineState *s, int argc, reg_t *argv); reg_t kArray(EngineState *s, int argc, reg_t *argv); reg_t kString(EngineState *s, int argc, reg_t *argv); +reg_t kAddScreenItem(EngineState *s, int argc, reg_t *argv); +reg_t kUpdateScreenItem(EngineState *s, int argc, reg_t *argv); +reg_t kDeleteScreenItem(EngineState *s, int argc, reg_t *argv); // SCI2.1 Kernel Functions reg_t kSave(EngineState *s, int argc, reg_t *argv); diff --git a/engines/sci/engine/kernel32.cpp b/engines/sci/engine/kernel32.cpp index 5b4f9ccc2d..1a74f1a931 100644 --- a/engines/sci/engine/kernel32.cpp +++ b/engines/sci/engine/kernel32.cpp @@ -589,6 +589,46 @@ reg_t kSave(EngineState *s, int argc, reg_t *argv) { return NULL_REG; } +reg_t kAddScreenItem(EngineState *s, int argc, reg_t *argv) { + reg_t viewObj = argv[0]; + int16 viewId = GET_SEL32V(s->_segMan, viewObj, view); + int16 loopNo = GET_SEL32V(s->_segMan, viewObj, loop); + int16 celNo = GET_SEL32V(s->_segMan, viewObj, cel); + //int16 leftPos = 0; + //int16 topPos = 0; + int16 priority = GET_SEL32V(s->_segMan, viewObj, priority); + //int16 control = 0; + warning("kAddScreenItem, view %d, loop %d, cel %d, pri %d", viewId, loopNo, celNo, priority); + //s->_gui->addToPicView(viewId, loopNo, celNo, leftPos, topPos, priority, control); + return NULL_REG; +} + +reg_t kUpdateScreenItem(EngineState *s, int argc, reg_t *argv) { + reg_t viewObj = argv[0]; + int16 viewId = GET_SEL32V(s->_segMan, viewObj, view); + int16 loopNo = GET_SEL32V(s->_segMan, viewObj, loop); + int16 celNo = GET_SEL32V(s->_segMan, viewObj, cel); + //int16 leftPos = 0; + //int16 topPos = 0; + int16 priority = GET_SEL32V(s->_segMan, viewObj, priority); + //int16 control = 0; + warning("kUpdateScreenItem, view %d, loop %d, cel %d, pri %d", viewId, loopNo, celNo, priority); + return NULL_REG; +} + +reg_t kDeleteScreenItem(EngineState *s, int argc, reg_t *argv) { + reg_t viewObj = argv[0]; + int16 viewId = GET_SEL32V(s->_segMan, viewObj, view); + int16 loopNo = GET_SEL32V(s->_segMan, viewObj, loop); + int16 celNo = GET_SEL32V(s->_segMan, viewObj, cel); + //int16 leftPos = 0; + //int16 topPos = 0; + int16 priority = GET_SEL32V(s->_segMan, viewObj, priority); + //int16 control = 0; + warning("kDeleteScreenItem, view %d, loop %d, cel %d, pri %d", viewId, loopNo, celNo, priority); + return NULL_REG; +} + } // End of namespace Sci #endif // ENABLE_SCI32 diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index e5ca2d8fb4..3ed5b405ad 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -403,6 +403,8 @@ reg_t kIsItSkip(EngineState *s, int argc, reg_t *argv) { reg_t kCelHigh(EngineState *s, int argc, reg_t *argv) { GuiResourceId viewId = argv[0].toSint16(); + if (viewId == -1) // Happens in SCI32 + return NULL_REG; int16 loopNo = argv[1].toSint16(); int16 celNo = (argc >= 3) ? argv[2].toSint16() : 0; @@ -411,6 +413,8 @@ reg_t kCelHigh(EngineState *s, int argc, reg_t *argv) { reg_t kCelWide(EngineState *s, int argc, reg_t *argv) { GuiResourceId viewId = argv[0].toSint16(); + if (viewId == -1) // Happens in SCI32 + return NULL_REG; int16 loopNo = argv[1].toSint16(); int16 celNo = (argc >= 3) ? argv[2].toSint16() : 0; |