diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 52 |
1 files changed, 22 insertions, 30 deletions
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 7dfa6d44a3..076ddbf3c0 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -292,7 +292,7 @@ static gfx_color_t graph_map_color(EngineState *s, int color, int priority, int return retval; } -reg_t kSetCursorNew(EngineState *s, int funct_nr, int argc, reg_t *argv) { +reg_t kSetCursor(EngineState *s, int funct_nr, int argc, reg_t *argv) { switch (argc) { case 1 : if (UKPV(0) == 0) { @@ -306,14 +306,29 @@ reg_t kSetCursorNew(EngineState *s, int funct_nr, int argc, reg_t *argv) { s->mouse_pointer_loop = s->save_mouse_pointer_loop; s->mouse_pointer_cel = s->save_mouse_pointer_cel; } - case 2 : { - Common::Point pt; - pt.x = UKPV(0); - pt.y = UKPV(1); + case 2 : + case 4 : + if (s->version >= SCI_VERSION(1, 1, 0) || + s->_gameName.equalsIgnoreCase("eco") || + (s->_gameName.equalsIgnoreCase("KQ5") && s->version == SCI_VERSION(1, 000, 784)) // KQ5 CD + ) { + GFX_ASSERT(gfxop_set_pointer_position(s->gfx_state, Common::Point(UKPV(0), UKPV(1)))); + } else { + if (SKPV_OR_ALT(1, 1)) { + s->mouse_pointer_view = SKPV(0); + } else + s->mouse_pointer_view = GFXOP_NO_POINTER; + + s->mouse_pointer_loop = s->mouse_pointer_cel = 0; // Not used with cursor-format pointers - GFX_ASSERT(gfxop_set_pointer_position(s->gfx_state, pt)); + GFX_ASSERT(gfxop_set_pointer_cursor(s->gfx_state, s->mouse_pointer_view)); + + if (argc > 2) { + Common::Point newpos = Common::Point(SKPV(2) + s->port->_bounds.x, SKPV(3) + s->port->_bounds.y); + GFX_ASSERT(gfxop_set_pointer_position(s->gfx_state, newpos)); + } + } break; - } case 3 : { GFX_ASSERT(gfxop_set_pointer_view(s->gfx_state, UKPV(0), UKPV(1), UKPV(2), NULL)); s->mouse_pointer_view = UKPV(0); @@ -336,29 +351,6 @@ reg_t kSetCursorNew(EngineState *s, int funct_nr, int argc, reg_t *argv) { return s->r_acc; } -reg_t kSetCursor(EngineState *s, int funct_nr, int argc, reg_t *argv) { - if (s->version >= SCI_VERSION(1, 001, 000) || - s->_gameName.equalsIgnoreCase("eco")) { // Eco Quest 1 needs kSetCursorNew - return kSetCursorNew(s, funct_nr, argc, argv); - } - - if (SKPV_OR_ALT(1, 1)) { - s->mouse_pointer_view = SKPV(0); - } else - s->mouse_pointer_view = GFXOP_NO_POINTER; - - s->mouse_pointer_loop = s->mouse_pointer_cel = 0; // Not used with cursor-format pointers - - GFX_ASSERT(gfxop_set_pointer_cursor(s->gfx_state, s->mouse_pointer_view)); - - if (argc > 2) { - Common::Point newpos = Common::Point(SKPV(2) + s->port->_bounds.x, SKPV(3) + s->port->_bounds.y); - GFX_ASSERT(gfxop_set_pointer_position(s->gfx_state, newpos)); - } - - return s->r_acc; -} - extern int oldx, oldy; reg_t kMoveCursor(EngineState *s, int funct_nr, int argc, reg_t *argv) { |