aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2011-04-02 19:47:41 +1100
committerPaul Gilbert2011-04-02 19:47:41 +1100
commit2103c93afd0f3ebbba3373c20149006ed05fd702 (patch)
tree676623b85fec0d3a866ea66c285f4d019ee1af83 /engines
parenta8bed05922dd48b9a1395a1bd71470b0b2409cca (diff)
downloadscummvm-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.cpp47
-rw-r--r--engines/tsage/ringworld_scenes4.h19
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;