[Scummvm-git-logs] scummvm master -> 92c49a857161b1650ca197c71668ee189d667e48

madmoose thomas at fach-pedersen.net
Sun Mar 4 13:31:47 CET 2018


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
92c49a8571 BLADERUNNER: Add scene resume


Commit: 92c49a857161b1650ca197c71668ee189d667e48
    https://github.com/scummvm/scummvm/commit/92c49a857161b1650ca197c71668ee189d667e48
Author: Thomas Fach-Pedersen (thomas at fach-pedersen.net)
Date: 2018-03-04T13:30:26+01:00

Commit Message:
BLADERUNNER: Add scene resume

Changed paths:
    engines/bladerunner/scene.cpp
    engines/bladerunner/scene.h
    engines/bladerunner/ui/esper.cpp
    engines/bladerunner/ui/kia.cpp
    engines/bladerunner/ui/spinner.cpp
    engines/bladerunner/ui/vk.cpp


diff --git a/engines/bladerunner/scene.cpp b/engines/bladerunner/scene.cpp
index 0a4877e..123134e 100644
--- a/engines/bladerunner/scene.cpp
+++ b/engines/bladerunner/scene.cpp
@@ -38,6 +38,7 @@
 #include "bladerunner/script/scene_script.h"
 #include "bladerunner/ui/spinner.h"
 #include "bladerunner/vqa_player.h"
+#include "bladerunner/zbuffer.h"
 
 #include "common/str.h"
 
@@ -128,7 +129,7 @@ bool Scene::open(int setId, int sceneId, bool isLoadingGame) {
 	_vm->_sliceRenderer->setView(_vm->_view);
 
 	if (isLoadingGame) {
-		// TODO: Advance VQA frame
+		resume(true);
 		if (sceneId == kScenePS10 || sceneId == kScenePS11 || sceneId == kScenePS12 || sceneId == kScenePS13) { // police maze?
 			_vm->_sceneScript->sceneLoaded();
 		}
@@ -140,11 +141,9 @@ bool Scene::open(int setId, int sceneId, bool isLoadingGame) {
 	}
 
 	if (_specialLoopMode == kSceneLoopModeNone) {
-		_vqaPlayer->setLoop(_defaultLoop, -1, kLoopSetModeImmediate, nullptr, nullptr);
-		_defaultLoopSet = true;
-		_defaultLoopPreloadedSet = false;
+		startDefaultLoop();
 	}
-	_vm->_scene->advanceFrame();
+	advanceFrame();
 
 	_vm->_playerActor->setAtXYZ(_actorStartPosition, _actorStartFacing);
 	_vm->_playerActor->setSetId(setId);
@@ -244,6 +243,57 @@ int Scene::advanceFrame() {
 	return frame;
 }
 
+void Scene::resume(bool isLoadingGame) {
+	if (!_vqaPlayer) {
+		return;
+	}
+
+	int targetFrame = _frame;
+
+	if (!isLoadingGame) {
+		_vm->_zbuffer->disable();
+	}
+
+	if (_specialLoopMode == kSceneLoopModeNone) {
+		startDefaultLoop();
+	} else {
+		if (_specialLoopMode == kSceneLoopModeChangeSet) {
+			_vm->_settings->setNewSetAndScene(_setId, _sceneId);
+		}
+		if (_defaultLoopPreloadedSet) {
+			_specialLoopMode = kSceneLoopModeNone;
+			startDefaultLoop();
+			advanceFrame();
+			loopStartSpecial(_specialLoopMode, _specialLoop, false);
+		} else {
+			_defaultLoopPreloadedSet = true;
+			loopStartSpecial(_specialLoopMode, _specialLoop, true);
+			if (_specialLoopMode == kSceneLoopModeLoseControl || _specialLoopMode == kSceneLoopModeChangeSet) {
+				_vm->playerGainsControl();
+
+			}
+		}
+		if (_specialLoopMode == kSceneLoopModeChangeSet) {
+			_vm->_settings->clearNewSetAndScene();
+		}
+	}
+
+	int frame;
+	do {
+		frame = advanceFrame();
+	} while (frame >= 0 && frame != targetFrame);
+
+	if (!isLoadingGame) {
+		_vm->_zbuffer->enable();
+	}
+}
+
+void Scene::startDefaultLoop() {
+	_vqaPlayer->setLoop(_defaultLoop, -1, kLoopSetModeImmediate, nullptr, nullptr);
+	_defaultLoopSet = true;
+	_defaultLoopPreloadedSet = false;
+}
+
 void Scene::setActorStart(Vector3 position, int facing) {
 	_actorStartPosition = position;
 	_actorStartFacing = facing;
diff --git a/engines/bladerunner/scene.h b/engines/bladerunner/scene.h
index e0d0175..4e48769 100644
--- a/engines/bladerunner/scene.h
+++ b/engines/bladerunner/scene.h
@@ -66,6 +66,8 @@ public:
 	bool open(int setId, int sceneId, bool isLoadingGame);
 	bool close(bool isLoadingGame);
 	int  advanceFrame();
+	void resume(bool isLoadingGame = false);
+	void startDefaultLoop();
 	void setActorStart(Vector3 position, int facing);
 
 	void loopSetDefault(int loopId);
diff --git a/engines/bladerunner/ui/esper.cpp b/engines/bladerunner/ui/esper.cpp
index 181ef0f..338ee14 100644
--- a/engines/bladerunner/ui/esper.cpp
+++ b/engines/bladerunner/ui/esper.cpp
@@ -31,6 +31,7 @@
 #include "bladerunner/font.h"
 #include "bladerunner/game_info.h"
 #include "bladerunner/mouse.h"
+#include "bladerunner/scene.h"
 #include "bladerunner/shape.h"
 #include "bladerunner/script/esper_script.h"
 #include "bladerunner/text_resource.h"
@@ -152,7 +153,7 @@ void ESPER::close() {
 
 	//TODO: time->unlock()
 	_vm->_ambientSounds->setVolume(_ambientVolume);
-	//TODO: _vm->_scene->resume(false);
+	_vm->_scene->resume();
 	reset();
 }
 
diff --git a/engines/bladerunner/ui/kia.cpp b/engines/bladerunner/ui/kia.cpp
index 9f7ec13..86fdc92 100644
--- a/engines/bladerunner/ui/kia.cpp
+++ b/engines/bladerunner/ui/kia.cpp
@@ -684,10 +684,9 @@ void KIA::unload() {
 
 	// TODO: Unfreeze game time
 
-	//if (!_vm->_settings->isLoadingGame(&Settings) && GameRunning)
-	// 	if (_vm->_gameIsRunning) {
-	// 	_vm->_scene->resume(false);
-	// }
+	if (!_vm->_settings->getLoadingGame() && _vm->_gameIsRunning) {
+		_vm->_scene->resume();
+	}
 }
 
 void KIA::createButtons(int sectionId) {
diff --git a/engines/bladerunner/ui/spinner.cpp b/engines/bladerunner/ui/spinner.cpp
index 2df9390..0740715 100644
--- a/engines/bladerunner/ui/spinner.cpp
+++ b/engines/bladerunner/ui/spinner.cpp
@@ -176,7 +176,7 @@ int Spinner::chooseDestination(int loopId, bool immediately) {
 	_isOpen = false;
 
 	// TODO: Unfreeze game time
-	// TODO: _vm->_scene->resume();
+	_vm->_scene->resume();
 
 	return _selectedDestination;
 }
diff --git a/engines/bladerunner/ui/vk.cpp b/engines/bladerunner/ui/vk.cpp
index ebd0887..ec5013c 100644
--- a/engines/bladerunner/ui/vk.cpp
+++ b/engines/bladerunner/ui/vk.cpp
@@ -183,7 +183,7 @@ void VK::close() {
 	_vm->_ambientSounds->setVolume(_volumeAmbient);
 
 	// TODO: time->unlock();
-	// _vm->_scene->resume(false);
+	_vm->_scene->resume();
 }
 
 void VK::tick() {





More information about the Scummvm-git-logs mailing list