aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPeter Kohaut2019-01-09 23:06:10 +0100
committerPeter Kohaut2019-01-09 23:06:10 +0100
commit9d5bfdd01518f9bf1156b859894efbbb7d9f46ec (patch)
tree9d2e06ee949fee1aaaa8afe856a358e3fc6cc207 /engines
parent03319bcc7d3e12c51995a72b709c633d2f42fd08 (diff)
downloadscummvm-rg350-9d5bfdd01518f9bf1156b859894efbbb7d9f46ec.tar.gz
scummvm-rg350-9d5bfdd01518f9bf1156b859894efbbb7d9f46ec.tar.bz2
scummvm-rg350-9d5bfdd01518f9bf1156b859894efbbb7d9f46ec.zip
BLADERUNNER: Fixed scene video resume
Video in the back was always reset to the 1st frame. Now it is working properly. Also added game pause when the debugger is opened.
Diffstat (limited to 'engines')
-rw-r--r--engines/bladerunner/bladerunner.cpp9
-rw-r--r--engines/bladerunner/scene.cpp8
-rw-r--r--engines/bladerunner/scene.h2
-rw-r--r--engines/bladerunner/vqa_player.cpp16
-rw-r--r--engines/bladerunner/vqa_player.h2
5 files changed, 23 insertions, 14 deletions
diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index 08de96766c..08848190f3 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -911,7 +911,6 @@ void BladeRunnerEngine::gameTick() {
_sceneScript->sceneFrameAdvanced(frame);
backgroundChanged = true;
}
- (void)backgroundChanged;
blit(_surfaceBack, _surfaceFront);
_overlays->tick();
@@ -1112,8 +1111,16 @@ void BladeRunnerEngine::handleKeyUp(Common::Event &event) {
void BladeRunnerEngine::handleKeyDown(Common::Event &event) {
if ((event.kbd.keycode == Common::KEYCODE_d) && (event.kbd.flags & Common::KBD_CTRL)) {
+ _time->pause();
getDebugger()->attach();
getDebugger()->onFrame();
+
+ _time->resume();
+
+ if (!_kia->isOpen() && !_spinner->isOpen() && !_elevator->isOpen() && !_esper->isOpen() && !_dialogueMenu->isOpen() && !_scores->isOpen()) {
+ _scene->resume();
+ }
+
return;
}
diff --git a/engines/bladerunner/scene.cpp b/engines/bladerunner/scene.cpp
index 09764c9e50..78b1bb6da4 100644
--- a/engines/bladerunner/scene.cpp
+++ b/engines/bladerunner/scene.cpp
@@ -209,8 +209,8 @@ bool Scene::close(bool isLoadingGame) {
return result;
}
-int Scene::advanceFrame() {
- int frame = _vqaPlayer->update();
+int Scene::advanceFrame(bool useTime) {
+ int frame = _vqaPlayer->update(false, true, useTime);
if (frame >= 0) {
blit(_vm->_surfaceBack, _vm->_surfaceFront);
_vqaPlayer->updateZBuffer(_vm->_zbuffer);
@@ -268,7 +268,7 @@ void Scene::resume(bool isLoadingGame) {
if (_defaultLoopPreloadedSet) {
_specialLoopMode = kSceneLoopModeNone;
startDefaultLoop();
- advanceFrame();
+ advanceFrame(false);
loopStartSpecial(_specialLoopMode, _specialLoop, false);
} else {
_defaultLoopPreloadedSet = true;
@@ -285,7 +285,7 @@ void Scene::resume(bool isLoadingGame) {
int frame;
do {
- frame = advanceFrame();
+ frame = advanceFrame(false);
} while (frame >= 0 && frame != targetFrame);
if (!isLoadingGame) {
diff --git a/engines/bladerunner/scene.h b/engines/bladerunner/scene.h
index 0403cd331e..94de5755a1 100644
--- a/engines/bladerunner/scene.h
+++ b/engines/bladerunner/scene.h
@@ -71,7 +71,7 @@ public:
bool open(int setId, int sceneId, bool isLoadingGame);
bool close(bool isLoadingGame);
- int advanceFrame();
+ int advanceFrame(bool useTime = true);
void resume(bool isLoadingGame = false);
void startDefaultLoop();
void setActorStart(Vector3 position, int facing);
diff --git a/engines/bladerunner/vqa_player.cpp b/engines/bladerunner/vqa_player.cpp
index 68a4e9491d..d4038ec4f8 100644
--- a/engines/bladerunner/vqa_player.cpp
+++ b/engines/bladerunner/vqa_player.cpp
@@ -71,7 +71,7 @@ void VQAPlayer::close() {
_s = nullptr;
}
-int VQAPlayer::update(bool forceDraw, bool advanceFrame, Graphics::Surface *customSurface) {
+int VQAPlayer::update(bool forceDraw, bool advanceFrame, bool useTime, Graphics::Surface *customSurface) {
uint32 now = 60 * _vm->_system->getMillis();
int result = -1;
@@ -106,7 +106,7 @@ int VQAPlayer::update(bool forceDraw, bool advanceFrame, Graphics::Surface *cust
result = -1;
} else if (_frameNext > _frameEnd) {
result = -3;
- } else if (now < _frameNextTime) {
+ } else if (useTime && (now < _frameNextTime)) {
result = -1;
} else if (advanceFrame) {
_frame = _frameNext;
@@ -131,11 +131,13 @@ int VQAPlayer::update(bool forceDraw, bool advanceFrame, Graphics::Surface *cust
queueAudioFrame(_decoder.decodeAudioFrame());
}
}
- if (_frameNextTime == 0) {
- _frameNextTime = now + 60000 / 15;
- }
- else {
- _frameNextTime += 60000 / 15;
+ if (useTime) {
+ if (_frameNextTime == 0) {
+ _frameNextTime = now + 60000 / 15;
+ }
+ else {
+ _frameNextTime += 60000 / 15;
+ }
}
_frameNext++;
result = _frame;
diff --git a/engines/bladerunner/vqa_player.h b/engines/bladerunner/vqa_player.h
index c4dd182697..a51f39cc31 100644
--- a/engines/bladerunner/vqa_player.h
+++ b/engines/bladerunner/vqa_player.h
@@ -108,7 +108,7 @@ public:
bool open();
void close();
- int update(bool forceDraw = false, bool advanceFrame = true, Graphics::Surface *customSurface = nullptr);
+ int update(bool forceDraw = false, bool advanceFrame = true, bool useTime = true, Graphics::Surface *customSurface = nullptr);
void updateZBuffer(ZBuffer *zbuffer);
void updateView(View *view);
void updateScreenEffects(ScreenEffects *screenEffects);