diff options
| -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) { | 
