diff options
| -rw-r--r-- | engines/gob/game_v2.cpp | 40 | ||||
| -rw-r--r-- | engines/gob/inter_v1.cpp | 2 | ||||
| -rw-r--r-- | engines/gob/inter_v2.cpp | 4 | ||||
| -rw-r--r-- | engines/gob/video.cpp | 7 | ||||
| -rw-r--r-- | engines/gob/video.h | 1 | 
5 files changed, 50 insertions, 4 deletions
diff --git a/engines/gob/game_v2.cpp b/engines/gob/game_v2.cpp index c978906910..1cd15cc00f 100644 --- a/engines/gob/game_v2.cpp +++ b/engines/gob/game_v2.cpp @@ -444,6 +444,46 @@ int16 Game_v2::checkCollisions(byte handleMouse, int16 deltaTime, int16 *pResId,  		key = checkKeys(&_vm->_global->_inter_mouseX,  				&_vm->_global->_inter_mouseY, &_mouseButtons, handleMouse); +		if ((_vm->_global->_videoMode == 0x14) && (handleMouse != 0)) { +			int16 cursorRight; +			int16 screenRight; +			 +			if ((_vm->_global->_inter_mouseX == 0) && +				  (_vm->_draw->_scrollOffsetX > 0)) { +				uint16 off; + +				off = MIN(_vm->_draw->_cursorWidth, _vm->_draw->_scrollOffsetX); +				off = MAX(off / 2, 1); +				_vm->_draw->_scrollOffsetX -= off; +				_vm->_global->_inter_mouseX -= off; +				_vm->_global->_inter_mouseX = +					MAX(_vm->_global->_inter_mouseX, (int16) 1); +			} + +			_vm->_global->_inter_mouseX += _vm->_draw->_scrollOffsetX; +			cursorRight = _vm->_global->_inter_mouseX + _vm->_draw->_cursorWidth; +			screenRight = _vm->_draw->_scrollOffsetX + 320; + +			if ((cursorRight >= screenRight) && +			    (screenRight < _vm->_video->_surfWidth)) { +				uint16 off; +				int16 max; + +				off = MIN(_vm->_draw->_cursorWidth, +						(int16) (_vm->_video->_surfWidth - screenRight)); +				off = MAX(off / 2, 1); +				max = _vm->_video->_surfWidth - _vm->_draw->_cursorWidth; + +				_vm->_draw->_scrollOffsetX += off; +				_vm->_global->_inter_mouseX += off - 1;  +				_vm->_global->_inter_mouseX = MIN(_vm->_global->_inter_mouseX, max); +			} + +			_vm->_util->setScrollOffset(); +			_vm->_util->setMousePos(MAX(0, _vm->_global->_inter_mouseX - +						_vm->_draw->_scrollOffsetX), _vm->_global->_inter_mouseY); +		} +  		if ((handleMouse == 0) && (_mouseButtons != 0)) {  			_vm->_util->waitMouseRelease(0);  			key = 3; diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp index ebeaec481b..4cc039b6de 100644 --- a/engines/gob/inter_v1.cpp +++ b/engines/gob/inter_v1.cpp @@ -2152,6 +2152,8 @@ bool Inter_v1::o1_istrlen(OpFuncParams ¶ms) {  bool Inter_v1::o1_setMousePos(OpFuncParams ¶ms) {  	_vm->_global->_inter_mouseX = _vm->_parse->parseValExpr();  	_vm->_global->_inter_mouseY = _vm->_parse->parseValExpr(); +	_vm->_global->_inter_mouseX -= _vm->_draw->_scrollOffsetX; +	_vm->_global->_inter_mouseY -= _vm->_draw->_scrollOffsetY;  	if (_vm->_global->_useMouse != 0)  		_vm->_util->setMousePos(_vm->_global->_inter_mouseX,  				_vm->_global->_inter_mouseY); diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 5ac41a5007..688f52a155 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -1375,9 +1375,7 @@ void Inter_v2::o2_initScreen() {  	if (height > 0)  		_vm->_video->_surfHeight = height; -	if (offY != 0) -		warning("Inter_v2::o2_initScreen(): Stub: Horizontal split (%d/%d)", -				_vm->_video->_surfHeight - offY, offY); +	_vm->_video->_splitHeight = _vm->_video->_surfHeight - offY;  	_vm->_draw->closeScreen();  	_vm->_util->clearPalette(); diff --git a/engines/gob/video.cpp b/engines/gob/video.cpp index 16edc7e5bc..b428a5ed5d 100644 --- a/engines/gob/video.cpp +++ b/engines/gob/video.cpp @@ -89,6 +89,7 @@ Video::Video(GobEngine *vm) : _vm(vm) {  	_surfHeight = 200;  	_scrollOffsetX = 0;  	_scrollOffsetY = 0; +	_splitHeight = 200;  }  char Video::initDriver(int16 vidMode) { @@ -158,7 +159,11 @@ void Video::retrace(bool mouse) {  	if (_vm->_global->_primarySurfDesc) {  		g_system->copyRectToScreen(_vm->_global->_primarySurfDesc->getVidMem() +  				_scrollOffsetY * _surfWidth + _scrollOffsetX, _surfWidth, -				0, 0, 320, 200); +				0, 0, 320, _splitHeight); +		if (_splitHeight < _surfHeight) +			g_system->copyRectToScreen(_vm->_global->_primarySurfDesc->getVidMem() + +					_splitHeight * _surfWidth, _surfWidth, 0, _splitHeight, 320, +					_surfHeight - _splitHeight);  		g_system->updateScreen();  	}  } diff --git a/engines/gob/video.h b/engines/gob/video.h index d967ede5fc..066f411f29 100644 --- a/engines/gob/video.h +++ b/engines/gob/video.h @@ -99,6 +99,7 @@ public:  	int16 _surfHeight;  	int16 _scrollOffsetX;  	int16 _scrollOffsetY; +	int16 _splitHeight;  	void freeDriver();  	void initPrimary(int16 mode);  | 
