aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/kernel.cpp5
-rw-r--r--engines/sci/engine/kernel.h3
-rw-r--r--engines/sci/engine/kernel32.cpp40
-rw-r--r--engines/sci/engine/kgraphics.cpp4
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;