From 40bfc71de8102c0391f08ddb5de6009d924f07f7 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Fri, 16 Jun 2006 13:14:55 +0000 Subject: Fix rects in HE games, when positions are set by scripts svn-id: r23146 --- engines/scumm/he/intern_he.h | 1 + engines/scumm/he/script_v100he.cpp | 3 +++ engines/scumm/he/script_v70he.cpp | 10 ++++++++++ engines/scumm/he/script_v72he.cpp | 2 ++ engines/scumm/he/script_v90he.cpp | 6 ++++-- engines/scumm/he/sprite_he.cpp | 1 + 6 files changed, 21 insertions(+), 2 deletions(-) diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h index a58271d636..377a87c9aa 100644 --- a/engines/scumm/he/intern_he.h +++ b/engines/scumm/he/intern_he.h @@ -158,6 +158,7 @@ protected: int getStringCharWidth(byte chr); virtual int setupStringArray(int size); void appendSubstring(int dst, int src, int len2, int len); + void adjustRect(Common::Rect &rect); virtual void setCursorFromImg(uint img, uint room, uint imgindex); virtual void setDefaultCursor(); diff --git a/engines/scumm/he/script_v100he.cpp b/engines/scumm/he/script_v100he.cpp index 4dc2f1842f..b7191a90ec 100644 --- a/engines/scumm/he/script_v100he.cpp +++ b/engines/scumm/he/script_v100he.cpp @@ -427,6 +427,7 @@ void ScummEngine_v100he::o100_actorOps() { a->_clipOverride.right = pop(); a->_clipOverride.top = pop(); a->_clipOverride.left = pop(); + adjustRect(a->_clipOverride); break; case 22: k = getStackList(args, ARRAYSIZE(args)); @@ -508,6 +509,7 @@ void ScummEngine_v100he::o100_actorOps() { _actorClipOverride.right = pop(); _actorClipOverride.top = pop(); _actorClipOverride.left = pop(); + adjustRect(_actorClipOverride); break; case 130: // SO_SOUND k = getStackList(args, ARRAYSIZE(args)); @@ -1198,6 +1200,7 @@ void ScummEngine_v100he::o100_wizImageOps() { _wizParams.box.top = pop(); _wizParams.box.left = pop(); _wizParams.compType = pop(); + adjustRect(_wizParams.box); break; case 18: _wizParams.processFlags |= kWPFClipBox; diff --git a/engines/scumm/he/script_v70he.cpp b/engines/scumm/he/script_v70he.cpp index bbbc218fde..71a43c1a42 100644 --- a/engines/scumm/he/script_v70he.cpp +++ b/engines/scumm/he/script_v70he.cpp @@ -425,6 +425,15 @@ void ScummEngine_v70he::appendSubstring(int dst, int src, int srcOffs, int len) writeArray(0, 0, dstOffs + i, 0); } +void ScummEngine_v70he::adjustRect(Common::Rect &rect) { + // Scripts can set all rect positions to -1 + if (rect.right != -1) + rect.right += 1; + + if (rect.bottom != -1) + rect.bottom += 1; +} + void ScummEngine_v70he::o70_startSound() { int var, value; @@ -803,6 +812,7 @@ void ScummEngine_v70he::o70_kernelSetFunctions() { _wiz->_rectOverride.top = args[2]; _wiz->_rectOverride.right = args[3]; _wiz->_rectOverride.bottom = args[4]; + adjustRect(_wiz->_rectOverride); break; case 43: _wiz->_rectOverrideEnabled = false; diff --git a/engines/scumm/he/script_v72he.cpp b/engines/scumm/he/script_v72he.cpp index fe91e82ccd..1e7386556f 100644 --- a/engines/scumm/he/script_v72he.cpp +++ b/engines/scumm/he/script_v72he.cpp @@ -1111,12 +1111,14 @@ void ScummEngine_v72he::o72_actorOps() { _actorClipOverride.right = pop(); _actorClipOverride.top = pop(); _actorClipOverride.left = pop(); + adjustRect(_actorClipOverride); break; case 67: // HE 99+ a->_clipOverride.bottom = pop(); a->_clipOverride.right = pop(); a->_clipOverride.top = pop(); a->_clipOverride.left = pop(); + adjustRect(a->_clipOverride); break; case 65: // HE 98+ j = pop(); diff --git a/engines/scumm/he/script_v90he.cpp b/engines/scumm/he/script_v90he.cpp index eae252098d..b911844f22 100644 --- a/engines/scumm/he/script_v90he.cpp +++ b/engines/scumm/he/script_v90he.cpp @@ -636,11 +636,12 @@ void ScummEngine_v90he::o90_wizImageOps() { case 5: _wizParams.processFlags |= kWPFClipBox | 0x100; _wizParams.processMode = 2; - _wizParams.box.bottom = pop() + 1; - _wizParams.box.right = pop() + 1; + _wizParams.box.bottom = pop(); + _wizParams.box.right = pop(); _wizParams.box.top = pop(); _wizParams.box.left = pop(); _wizParams.compType = pop(); + adjustRect(_wizParams.box); break; case 6: _wizParams.processFlags |= kWPFNewState; @@ -2613,6 +2614,7 @@ void ScummEngine_v90he::o90_kernelSetFunctions() { _wiz->_rectOverride.top = args[2]; _wiz->_rectOverride.right = args[3]; _wiz->_rectOverride.bottom = args[4]; + adjustRect(_wiz->_rectOverride); break; case 43: _wiz->_rectOverrideEnabled = false; diff --git a/engines/scumm/he/sprite_he.cpp b/engines/scumm/he/sprite_he.cpp index 8f17a89215..6983dc147a 100644 --- a/engines/scumm/he/sprite_he.cpp +++ b/engines/scumm/he/sprite_he.cpp @@ -927,6 +927,7 @@ void Sprite::setGroupBounds(int spriteGroupId, int x1, int y1, int x2, int y2) { _spriteGroups[spriteGroupId].bbox.top = y1; _spriteGroups[spriteGroupId].bbox.right = x2; _spriteGroups[spriteGroupId].bbox.bottom = y2; + _vm->adjustRect(_spriteGroups[spriteGroupId].bbox); redrawSpriteGroup(spriteGroupId); } -- cgit v1.2.3