diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/engine/kernel.h | 1 | ||||
-rw-r--r-- | engines/sci/engine/kernel_tables.h | 1 | ||||
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 10 | ||||
-rw-r--r-- | engines/sci/graphics/frameout.cpp | 9 | ||||
-rw-r--r-- | engines/sci/graphics/frameout.h | 1 |
5 files changed, 22 insertions, 0 deletions
diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index c3b07f4668..f7b46b81dd 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -457,6 +457,7 @@ reg_t kRobot(EngineState *s, int argc, reg_t *argv); reg_t kPlayVMD(EngineState *s, int argc, reg_t *argv); reg_t kIsOnMe(EngineState *s, int argc, reg_t *argv); reg_t kCD(EngineState *s, int argc, reg_t *argv); +reg_t kAddPicAt(EngineState *s, int argc, reg_t *argv); reg_t kAddBefore(EngineState *s, int argc, reg_t *argv); reg_t kMoveToFront(EngineState *s, int argc, reg_t *argv); diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h index 56d697ffea..f9b4c4ced6 100644 --- a/engines/sci/engine/kernel_tables.h +++ b/engines/sci/engine/kernel_tables.h @@ -481,6 +481,7 @@ static SciKernelMapEntry s_kernelMap[] = { { MAP_CALL(Robot), SIG_EVERYWHERE, "(.*)", NULL, NULL }, { MAP_CALL(Save), SIG_EVERYWHERE, "(.*)", NULL, NULL }, { MAP_CALL(Text), SIG_EVERYWHERE, "(.*)", NULL, NULL }, + { MAP_CALL(AddPicAt), SIG_EVERYWHERE, "oiii", NULL, NULL }, { NULL, NULL, SIG_EVERYWHERE, NULL, NULL, NULL } #endif }; diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index a83c3986e1..cf260bc4e1 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -1186,6 +1186,16 @@ reg_t kRepaintPlane(EngineState *s, int argc, reg_t *argv) { return NULL_REG; } +reg_t kAddPicAt(EngineState *s, int argc, reg_t *argv) { + reg_t planeObj = argv[0]; + GuiResourceId pictureId = argv[1].toUint16(); + int16 forWidth = argv[2].toSint16(); + // argv[3] seems to be 0 most of the time + + g_sci->_gfxFrameout->kernelAddPicAt(planeObj, forWidth, pictureId); + return s->r_acc; +} + reg_t kGetHighPlanePri(EngineState *s, int argc, reg_t *argv) { return make_reg(0, g_sci->_gfxFrameout->kernelGetHighPlanePri()); } diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp index 28f08a988f..1efde7cb33 100644 --- a/engines/sci/graphics/frameout.cpp +++ b/engines/sci/graphics/frameout.cpp @@ -139,6 +139,15 @@ int16 GfxFrameout::kernelGetHighPlanePri() { return readSelectorValue(g_sci->getEngineState()->_segMan, _planes.back().object, SELECTOR(priority)); } +// No idea yet how to implement this +void GfxFrameout::kernelAddPicAt(reg_t planeObj, int16 forWidth, GuiResourceId pictureId) { + //if (forWidth == 320) { + // writeSelectorValue(_segMan, planeObj, SELECTOR(left), 0); + // writeSelectorValue(_segMan, planeObj, SELECTOR(picture), pictureId); + // kernelUpdatePlane(planeObj); + //} +} + bool sortHelper(const FrameoutEntry* entry1, const FrameoutEntry* entry2) { if (entry1->priority == entry2->priority) { if (entry1->y == entry2->y) diff --git a/engines/sci/graphics/frameout.h b/engines/sci/graphics/frameout.h index 028a61f0bf..beb89d5d71 100644 --- a/engines/sci/graphics/frameout.h +++ b/engines/sci/graphics/frameout.h @@ -74,6 +74,7 @@ public: void kernelAddScreenItem(reg_t object); void kernelDeleteScreenItem(reg_t object); int16 kernelGetHighPlanePri(); + void kernelAddPicAt(reg_t planeObj, int16 forWidth, GuiResourceId pictureId); void kernelFrameout(); private: |