aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/scenes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tsage/scenes.cpp')
-rw-r--r--engines/tsage/scenes.cpp70
1 files changed, 45 insertions, 25 deletions
diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index f554d546f6..4625661b62 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -18,9 +18,6 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * $URL$
- * $Id$
- *
*/
#include "tsage/scenes.h"
@@ -130,7 +127,7 @@ void SceneManager::sceneChange() {
}
Scene *SceneManager::getNewScene() {
- return SceneFactory::createScene(_nextSceneNumber);
+ return _globals->_game->createScene(_nextSceneNumber);
}
void SceneManager::fadeInIfNecessary() {
@@ -230,6 +227,11 @@ void SceneManager::setBgOffset(const Common::Point &pt, int loadCount) {
void SceneManager::listenerSynchronize(Serializer &s) {
s.validate("SceneManager");
+ if (s.isLoading() && !_globals->_sceneManager._scene)
+ // Loading a savegame straight from the launcher, so instantiate a blank placeholder scene
+ // in order for the savegame loading to work correctly
+ _globals->_sceneManager._scene = new Scene();
+
_altSceneObjects.synchronize(s);
s.syncAsSint32LE(_sceneNumber);
s.syncAsUint16LE(_globals->_sceneManager._scene->_activeScreenNumber);
@@ -322,7 +324,7 @@ void Scene::loadSceneData(int sceneNum) {
// Load the priority regions
_priorities.load(sceneNum);
- // Initialise the section enabled list
+ // Initialize the section enabled list
Common::set_to(&_enabledSections[0], &_enabledSections[16 * 16], 0xffff);
_globals->_sceneOffset.x = (_sceneBounds.left / 160) * 160;
@@ -461,36 +463,54 @@ void Scene::drawAltObjects() {
}
void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent) {
- int var_6 = 0;
+ int currDiff = 0;
int v = 0;
while (v < yStart)
_zoomPercents[v++] = minPercent;
int diff1 = ABS(maxPercent - minPercent);
int diff2 = ABS(yEnd - yStart);
- int var_8 = MAX(diff1, diff2);
-
- while (var_8-- != 0) {
- _zoomPercents[v] = minPercent;
- if (diff2 <= diff1) {
- ++minPercent;
- var_6 += diff2;
- if (var_6 >= diff1) {
- var_6 -= diff1;
- ++v;
- }
- } else {
- ++v;
- var_6 += diff1;
- if (var_6 >= diff2) {
- var_6 -= diff2;
- ++minPercent;
- }
- }
+ int remainingDiff = MAX(diff1, diff2);
+
+ while (remainingDiff-- != 0) {
+ _zoomPercents[v] = minPercent;
+ if (diff2 <= diff1) {
+ ++minPercent;
+ currDiff += diff2;
+ if (currDiff >= diff1) {
+ currDiff -= diff1;
+ ++v;
+ }
+ } else {
+ ++v;
+ currDiff += diff1;
+ if (currDiff >= diff2) {
+ currDiff -= diff2;
+ ++minPercent;
+ }
+ }
}
while (yEnd < 256)
_zoomPercents[yEnd++] = minPercent;
}
+/*--------------------------------------------------------------------------*/
+
+void Game::execute() {
+ // Main game loop
+ bool activeFlag = false;
+ do {
+ // Process all currently atcive game handlers
+ activeFlag = false;
+ for (SynchronizedList<GameHandler *>::iterator i = _handlers.begin(); i != _handlers.end(); ++i) {
+ GameHandler *gh = *i;
+ if (gh->_lockCtr.getCtr() == 0) {
+ gh->execute();
+ activeFlag = true;
+ }
+ }
+ } while (activeFlag && !_vm->getEventManager()->shouldQuit());
+}
+
} // End of namespace tSage