diff options
author | Paul Gilbert | 2011-04-02 19:47:41 +1100 |
---|---|---|
committer | Paul Gilbert | 2011-04-02 19:47:41 +1100 |
commit | 2103c93afd0f3ebbba3373c20149006ed05fd702 (patch) | |
tree | 676623b85fec0d3a866ea66c285f4d019ee1af83 /engines | |
parent | a8bed05922dd48b9a1395a1bd71470b0b2409cca (diff) | |
download | scummvm-rg350-2103c93afd0f3ebbba3373c20149006ed05fd702.tar.gz scummvm-rg350-2103c93afd0f3ebbba3373c20149006ed05fd702.tar.bz2 scummvm-rg350-2103c93afd0f3ebbba3373c20149006ed05fd702.zip |
TSAGE: Bugfixes for Scene 3700 - Remote Viewer
Diffstat (limited to 'engines')
-rw-r--r-- | engines/tsage/ringworld_scenes4.cpp | 47 | ||||
-rw-r--r-- | engines/tsage/ringworld_scenes4.h | 19 |
2 files changed, 54 insertions, 12 deletions
diff --git a/engines/tsage/ringworld_scenes4.cpp b/engines/tsage/ringworld_scenes4.cpp index 51840154eb..a79b5c3476 100644 --- a/engines/tsage/ringworld_scenes4.cpp +++ b/engines/tsage/ringworld_scenes4.cpp @@ -95,33 +95,64 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { * *--------------------------------------------------------------------------*/ +#define VIEW_FRAME_DELAY 10 + Scene3700::Viewer::Viewer() { - _imgList[0] = surfaceFromRes(3705, 1, 1); + _images1.setVisage(3705, 1); + _images2.setVisage(3705, 2); + + _frameList[0] = 1; for (int idx = 1; idx <= 3; ++idx) - _imgList[idx] = surfaceFromRes(3705, 2, _globals->_randomSource.getRandomNumber(4) + 1); + _frameList[idx] = _globals->_randomSource.getRandomNumber(4) + 1; - _field88 = 1; + _active = true; + _countdownCtr = 0; _percent = 120; + + // Fields don't seem to be used _field94 = 50; _field96 = 75; _field98 = 114; } +void Scene3700::Viewer::dispatch() { + if (_active) { + if (_countdownCtr-- <= 0) { + _countdownCtr = VIEW_FRAME_DELAY; + + for (int idx = 3; idx > 1; --idx) + _frameList[idx] = _frameList[idx - 1]; + + int newFrame; + do { + newFrame = _globals->_randomSource.getRandomNumber(4) + 1; + } while (newFrame == _frameList[2]); + + _frameList[1] = newFrame; + _flags |= OBJFLAG_PANES; + } + } +} + void Scene3700::Viewer::reposition() { _bounds = Rect(123, 40, 285, 123); } void Scene3700::Viewer::draw() { + Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(1); + for (int idx = 0; idx < 4; ++idx) { - Rect destRect = _imgList[idx].getBounds(); - destRect.resize(_imgList[idx], (_position.x - _globals->_sceneOffset.x), + Visage &v = (idx == 0) ? _images1 : _images2; + + GfxSurface img = v.getFrame(_frameList[idx]); + Rect destRect = img.getBounds(); + destRect.resize(img, (_position.x - _globals->_sceneOffset.x), (_position.y - _globals->_sceneOffset.y - _yDiff), _percent); destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left, -_globals->_sceneManager._scene->_sceneBounds.top); - Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(1); - _globals->gfxManager().copyFrom(_imgList[idx], destRect, priorityRegion); + _globals->gfxManager().copyFrom(img, destRect, priorityRegion); } } @@ -138,7 +169,7 @@ void Scene3700::Action1::signal() { scene->_stripManager.start(2162, this); break; case 2: - scene->_viewer._field88 = 0; + scene->_viewer._active = false; setDelay(90); break; case 3: diff --git a/engines/tsage/ringworld_scenes4.h b/engines/tsage/ringworld_scenes4.h index f9b5495ae0..1c92ba4897 100644 --- a/engines/tsage/ringworld_scenes4.h +++ b/engines/tsage/ringworld_scenes4.h @@ -57,9 +57,15 @@ class Scene3700: public Scene { /* Custom classes */ class Viewer: public SceneObject { public: - GfxSurface _imgList[4]; - int _field88; + Visage _images1; + Visage _images2; + + int _frameList[4]; + bool _active; + int _countdownCtr; int _percent; + + // Unused fields? int _field94; int _field96; int _field98; @@ -67,9 +73,14 @@ class Scene3700: public Scene { Viewer(); virtual Common::String getClassName() { return "Viewer"; } virtual void synchronise(Serialiser &s) { - // TODO: Check if we need to store viewer fields SceneObject::synchronise(s); + s.syncAsByte(_active); + s.syncAsSint16LE(_countdownCtr); + for (int idx = 0; idx < 4; ++idx) + s.syncAsSint16LE(_frameList[idx]); + } + virtual void dispatch(); virtual void reposition(); virtual void draw(); }; @@ -81,7 +92,7 @@ class Scene3700: public Scene { }; public: Viewer _viewer; - Action _action1; + Action1 _action1; SceneObject _hotspot1, _hotspot2; SpeakerSText _speakerSText; SpeakerMText _speakerMText; |