[Scummvm-cvs-logs] SF.net SVN: scummvm:[43148] scummvm/branches/branch-1-0-0/engines/gob
drmccoy at users.sourceforge.net
drmccoy at users.sourceforge.net
Sat Aug 8 23:43:43 CEST 2009
Revision: 43148
http://scummvm.svn.sourceforge.net/scummvm/?rev=43148&view=rev
Author: drmccoy
Date: 2009-08-08 21:43:43 +0000 (Sat, 08 Aug 2009)
Log Message:
-----------
Backport: Changed the scroll-handling to be more like the original. This fixes bug #2832362 ("GOB3: Scrolling locked after cutscene")
Modified Paths:
--------------
scummvm/branches/branch-1-0-0/engines/gob/draw_v2.cpp
scummvm/branches/branch-1-0-0/engines/gob/game.cpp
scummvm/branches/branch-1-0-0/engines/gob/game.h
scummvm/branches/branch-1-0-0/engines/gob/hotspots.cpp
scummvm/branches/branch-1-0-0/engines/gob/inter_v2.cpp
scummvm/branches/branch-1-0-0/engines/gob/inter_v4.cpp
scummvm/branches/branch-1-0-0/engines/gob/inter_v6.cpp
scummvm/branches/branch-1-0-0/engines/gob/mult_v2.cpp
scummvm/branches/branch-1-0-0/engines/gob/util.cpp
Modified: scummvm/branches/branch-1-0-0/engines/gob/draw_v2.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/gob/draw_v2.cpp 2009-08-08 21:43:07 UTC (rev 43147)
+++ scummvm/branches/branch-1-0-0/engines/gob/draw_v2.cpp 2009-08-08 21:43:43 UTC (rev 43148)
@@ -46,6 +46,8 @@
}
void Draw_v2::initScreen() {
+ _vm->_game->_preventScroll = false;
+
_scrollOffsetX = 0;
_scrollOffsetY = 0;
Modified: scummvm/branches/branch-1-0-0/engines/gob/game.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/gob/game.cpp 2009-08-08 21:43:07 UTC (rev 43147)
+++ scummvm/branches/branch-1-0-0/engines/gob/game.cpp 2009-08-08 21:43:43 UTC (rev 43148)
@@ -181,11 +181,13 @@
_handleMouse = 0;
_forceHandleMouse = 0;
- _menuLevel = 0;
_noScroll = true;
_preventScroll = false;
- _scrollHandleMouse = false;
+ _wantScroll = false;
+ _wantScrollX = 0;
+ _wantScrollY = 0;
+
_tempStr[0] = 0;
_numEnvironments = 0;
@@ -360,9 +362,7 @@
_vm->_scenery->_pCaptureCounter = oldCaptureCounter;
_script->seek(_script->getFunctionOffset(skipPlay + 1));
- _menuLevel++;
_vm->_inter->callSub(2);
- _menuLevel--;
if (_vm->_inter->_terminate != 0)
_vm->_inter->_terminate = 2;
@@ -439,22 +439,27 @@
_vm->_sound->sampleFree(_vm->_sound->sampleGetBySlot(slot));
}
-void Game::evaluateScroll(int16 x, int16 y) {
- if (_preventScroll || !_scrollHandleMouse || (_menuLevel > 0))
+void Game::wantScroll(int16 x, int16 y) {
+ _wantScroll = true;
+ _wantScrollX = x;
+ _wantScrollY = y;
+}
+
+void Game::evaluateScroll() {
+ if (_noScroll || _preventScroll || !_wantScroll)
return;
- if (_noScroll ||
- ((_vm->_global->_videoMode != 0x14) && (_vm->_global->_videoMode != 0x18)))
+ if ((_vm->_global->_videoMode != 0x14) && (_vm->_global->_videoMode != 0x18))
return;
- if ((x == 0) && (_vm->_draw->_scrollOffsetX > 0)) {
+ if ((_wantScrollX == 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->_video->dirtyRectsAll();
- } else if ((y == 0) && (_vm->_draw->_scrollOffsetY > 0)) {
+ } else if ((_wantScrollY == 0) && (_vm->_draw->_scrollOffsetY > 0)) {
uint16 off;
off = MIN(_vm->_draw->_cursorHeight, _vm->_draw->_scrollOffsetY);
@@ -463,9 +468,9 @@
_vm->_video->dirtyRectsAll();
}
- int16 cursorRight = x + _vm->_draw->_cursorWidth;
- int16 screenRight = _vm->_draw->_scrollOffsetX + _vm->_width;
- int16 cursorBottom = y + _vm->_draw->_cursorHeight;
+ int16 cursorRight = _wantScrollX + _vm->_draw->_cursorWidth;
+ int16 screenRight = _vm->_draw->_scrollOffsetX + _vm->_width;
+ int16 cursorBottom = _wantScrollY + _vm->_draw->_cursorHeight;
int16 screenBottom = _vm->_draw->_scrollOffsetY + _vm->_height;
if ((cursorRight >= _vm->_width) &&
@@ -479,7 +484,7 @@
_vm->_draw->_scrollOffsetX += off;
_vm->_video->dirtyRectsAll();
- _vm->_util->setMousePos(_vm->_width - _vm->_draw->_cursorWidth, y);
+ _vm->_util->setMousePos(_vm->_width - _vm->_draw->_cursorWidth, _wantScrollY);
} else if ((cursorBottom >= (_vm->_height - _vm->_video->_splitHeight2)) &&
(screenBottom < _vm->_video->_surfHeight)) {
uint16 off;
@@ -491,11 +496,13 @@
_vm->_draw->_scrollOffsetY += off;
_vm->_video->dirtyRectsAll();
- _vm->_util->setMousePos(x, _vm->_height - _vm->_video->_splitHeight2 -
- _vm->_draw->_cursorHeight);
+ _vm->_util->setMousePos(_wantScrollX,
+ _vm->_height - _vm->_video->_splitHeight2 - _vm->_draw->_cursorHeight);
}
_vm->_util->setScrollOffset();
+
+ _wantScroll = false;
}
int16 Game::checkKeys(int16 *pMouseX, int16 *pMouseY,
Modified: scummvm/branches/branch-1-0-0/engines/gob/game.h
===================================================================
--- scummvm/branches/branch-1-0-0/engines/gob/game.h 2009-08-08 21:43:07 UTC (rev 43147)
+++ scummvm/branches/branch-1-0-0/engines/gob/game.h 2009-08-08 21:43:43 UTC (rev 43148)
@@ -82,8 +82,11 @@
bool _noScroll;
bool _preventScroll;
- bool _scrollHandleMouse;
+ bool _wantScroll;
+ int16 _wantScrollX;
+ int16 _wantScrollY;
+
byte _handleMouse;
char _forceHandleMouse;
@@ -99,7 +102,8 @@
void freeSoundSlot(int16 slot);
- void evaluateScroll(int16 x, int16 y);
+ void wantScroll(int16 x, int16 y);
+ void evaluateScroll();
int16 checkKeys(int16 *pMousex = 0, int16 *pMouseY = 0,
MouseButtons *pButtons = 0, char handleMouse = 0);
@@ -109,8 +113,6 @@
void switchTotSub(int16 index, int16 skipPlay);
protected:
- uint32 _menuLevel;
-
char _tempStr[256];
// Capture
Modified: scummvm/branches/branch-1-0-0/engines/gob/hotspots.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/gob/hotspots.cpp 2009-08-08 21:43:07 UTC (rev 43147)
+++ scummvm/branches/branch-1-0-0/engines/gob/hotspots.cpp 2009-08-08 21:43:43 UTC (rev 43148)
@@ -628,8 +628,6 @@
}
uint16 Hotspots::check(uint8 handleMouse, int16 delay, uint16 &id, uint16 &index) {
- _vm->_game->_scrollHandleMouse = handleMouse != 0;
-
if (delay >= -1) {
_currentKey = 0;
_currentId = 0;
@@ -679,6 +677,9 @@
_vm->_video->waitRetrace();
}
+ if (handleMouse)
+ _vm->_game->evaluateScroll();
+
// Update keyboard and mouse state
key = _vm->_game->checkKeys(&_vm->_global->_inter_mouseX,
&_vm->_global->_inter_mouseY, &_vm->_game->_mouseButtons, handleMouse);
Modified: scummvm/branches/branch-1-0-0/engines/gob/inter_v2.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/gob/inter_v2.cpp 2009-08-08 21:43:07 UTC (rev 43147)
+++ scummvm/branches/branch-1-0-0/engines/gob/inter_v2.cpp 2009-08-08 21:43:43 UTC (rev 43148)
@@ -935,6 +935,8 @@
offsetY = _vm->_game->_script->readValExpr();
if (offsetX == -1) {
+ _vm->_game->_preventScroll = !_vm->_game->_preventScroll;
+
WRITE_VAR(2, _vm->_draw->_scrollOffsetX);
WRITE_VAR(3, _vm->_draw->_scrollOffsetY);
} else {
@@ -996,11 +998,8 @@
close = false;
}
- if (startFrame >= 0) {
- _vm->_game->_preventScroll = true;
+ if (startFrame >= 0)
_vm->_vidPlayer->primaryPlay(startFrame, lastFrame, breakKey, palCmd, palStart, palEnd, 0);
- _vm->_game->_preventScroll = false;
- }
if (close)
_vm->_vidPlayer->primaryClose();
Modified: scummvm/branches/branch-1-0-0/engines/gob/inter_v4.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/gob/inter_v4.cpp 2009-08-08 21:43:07 UTC (rev 43147)
+++ scummvm/branches/branch-1-0-0/engines/gob/inter_v4.cpp 2009-08-08 21:43:43 UTC (rev 43148)
@@ -233,11 +233,8 @@
return;
}
- if (startFrame >= 0) {
- _vm->_game->_preventScroll = true;
+ if (startFrame >= 0)
_vm->_vidPlayer->primaryPlay(startFrame, lastFrame, breakKey, palCmd, palStart, palEnd, 0);
- _vm->_game->_preventScroll = false;
- }
if (close)
_vm->_vidPlayer->primaryClose();
Modified: scummvm/branches/branch-1-0-0/engines/gob/inter_v6.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/gob/inter_v6.cpp 2009-08-08 21:43:07 UTC (rev 43147)
+++ scummvm/branches/branch-1-0-0/engines/gob/inter_v6.cpp 2009-08-08 21:43:43 UTC (rev 43148)
@@ -164,12 +164,9 @@
return;
}
- if (startFrame >= 0) {
- _vm->_game->_preventScroll = true;
+ if (startFrame >= 0)
_vm->_vidPlayer->primaryPlay(startFrame, lastFrame, breakKey,
palCmd, palStart, palEnd, 0, -1, false, -1, true);
- _vm->_game->_preventScroll = false;
- }
if (close)
_vm->_vidPlayer->primaryClose();
Modified: scummvm/branches/branch-1-0-0/engines/gob/mult_v2.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/gob/mult_v2.cpp 2009-08-08 21:43:07 UTC (rev 43147)
+++ scummvm/branches/branch-1-0-0/engines/gob/mult_v2.cpp 2009-08-08 21:43:43 UTC (rev 43148)
@@ -1105,8 +1105,6 @@
int16 baseFrame, palFrame, lastFrame;
uint16 flags;
- _vm->_game->_preventScroll = true;
-
if (_vm->_draw->_renderFlags & 0x100) {
x = VAR(55);
y = VAR(56);
@@ -1115,7 +1113,6 @@
if (key.imdFile == -1) {
_vm->_vidPlayer->primaryClose();
- _vm->_game->_preventScroll = false;
return;
}
@@ -1131,15 +1128,12 @@
if ((palFrame != -1) && (lastFrame != -1))
if ((lastFrame - palFrame) < startFrame)
if (!(key.flags & 0x4000)) {
- _vm->_game->_preventScroll = false;
_vm->_vidPlayer->primaryClose();
return;
}
- if (!_vm->_vidPlayer->primaryOpen(imdFile, x, y, flags)) {
- _vm->_game->_preventScroll = false;
+ if (!_vm->_vidPlayer->primaryOpen(imdFile, x, y, flags))
return;
- }
if (palFrame == -1)
palFrame = 0;
@@ -1265,9 +1259,6 @@
}
}
- if (!hasImds && (_vm->_draw->_showCursor == 3))
- _vm->_game->_preventScroll = false;
-
doSoundAnim(stop, frame);
WRITE_VAR(22, frame);
Modified: scummvm/branches/branch-1-0-0/engines/gob/util.cpp
===================================================================
--- scummvm/branches/branch-1-0-0/engines/gob/util.cpp 2009-08-08 21:43:07 UTC (rev 43147)
+++ scummvm/branches/branch-1-0-0/engines/gob/util.cpp 2009-08-08 21:43:43 UTC (rev 43148)
@@ -141,7 +141,8 @@
y -= _vm->_video->_screenDeltaY;
_vm->_util->setMousePos(x, y);
- _vm->_game->evaluateScroll(x, y);
+
+ _vm->_game->wantScroll(x, y);
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list