diff options
Diffstat (limited to 'engines/tsage/core.cpp')
-rw-r--r-- | engines/tsage/core.cpp | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index fbbf982c28..f7fbb1daa1 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -1518,7 +1518,7 @@ void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) { tempRect, Rect(0, 0, tempRect.width(), tempRect.height()), NULL); if (g_vm->getGameID() == GType_Ringworld2 && !GLOBALS._player._uiEnabled && T2_GLOBALS._interfaceY == UI_INTERFACE_Y) { - g_globals->_screenSurface.fillRect(Rect(0, UI_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT), 0); + g_globals->_screenSurface.fillRect(Rect(0, UI_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT - 1), 0); } for (SynchronizedList<PaletteModifier *>::iterator i = tempPalette._listeners.begin(); i != tempPalette._listeners.end(); ++i) @@ -2066,8 +2066,8 @@ SceneObject::SceneObject() : SceneHotspot() { _visage = 0; _strip = 0; _frame = 0; - _effect = 0; - _shade = _shade2 = 0; + _effect = EFFECT_NONE; + _shade = _oldShade = 0; _linkedActor = NULL; _field8A = Common::Point(0, 0); @@ -2370,12 +2370,17 @@ void SceneObject::animate(AnimateMode animMode, ...) { case ANIM_MODE_8: case ANIM_MODE_9: - _field68 = va_arg(va, int); - _endAction = va_arg(va, Action *); - _frameChange = 1; - _endFrame = getFrameCount(); - if (_frame == _endFrame) - setFrame(getNewFrame()); + if (_animateMode == ANIM_MODE_9 && g_vm->getGameID() == GType_Ringworld2) { + _frameChange = -1; + _field2E = _position; + } else { + _field68 = va_arg(va, int); + _endAction = va_arg(va, Action *); + _frameChange = 1; + _endFrame = getFrameCount(); + if (_frame == _endFrame) + setFrame(getNewFrame()); + } break; } va_end(va); @@ -2468,7 +2473,7 @@ void SceneObject::synchronize(Serializer &s) { if (g_vm->getGameID() == GType_Ringworld2) { s.syncAsSint16LE(_effect); s.syncAsSint16LE(_shade); - s.syncAsSint16LE(_shade2); + s.syncAsSint16LE(_oldShade); SYNC_POINTER(_linkedActor); } } @@ -2514,9 +2519,9 @@ void SceneObject::remove() { void SceneObject::dispatch() { if (g_vm->getGameID() == GType_Ringworld2) { - if (_shade != _shade2) + if (_shade != _oldShade) _flags |= OBJFLAG_PANES; - _shade2 = _shade; + _oldShade = _shade; } uint32 currTime = g_globals->_events.getFrameNumber(); @@ -2634,8 +2639,9 @@ void SceneObject::dispatch() { _linkedActor->setFrame(_frame); } - if ((_effect == 1) && (getRegionIndex() < 11)) - _shade = 0; + int regionIndex = getRegionIndex(); + if ((_effect == EFFECT_SHADED) && (regionIndex < 11)) + _shade = regionIndex; } } @@ -2664,7 +2670,24 @@ void SceneObject::removeObject() { GfxSurface SceneObject::getFrame() { _visageImages.setVisage(_visage, _strip); - return _visageImages.getFrame(_frame); + GfxSurface frame = _visageImages.getFrame(_frame); + + // If shading is needed, post apply the shadiing onto the frame + if ((g_vm->getGameID() == GType_Ringworld2) && (_shade >= 1)) { + Graphics::Surface s = frame.lockSurface(); + byte *p = (byte *)s.getPixels(); + byte *endP = p + s.w * s.h; + + while (p < endP) { + if (*p != frame._transColor) + *p = R2_GLOBALS._fadePaletteMap[_shade - 1][*p]; + ++p; + } + + frame.unlockSurface(); + } + + return frame; } void SceneObject::reposition() { @@ -3285,7 +3308,7 @@ void Player::postInit(SceneObjectList *OwnerList) { { _moveDiff.x = 3; _moveDiff.y = 2; - _effect = 1; + _effect = EFFECT_SHADED; _shade = 0; _linkedActor = NULL; |