aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorJohannes Schickel2008-05-23 13:37:56 +0000
committerJohannes Schickel2008-05-23 13:37:56 +0000
commit18b3e3a4ba09a886e7ad78c5b3d17ece3ee97940 (patch)
treef9c01c2422aec50299c27a908f16093f787d1b37 /engines
parentad6f12683f5a4e64af63b619850e71dd56550089 (diff)
downloadscummvm-rg350-18b3e3a4ba09a886e7ad78c5b3d17ece3ee97940.tar.gz
scummvm-rg350-18b3e3a4ba09a886e7ad78c5b3d17ece3ee97940.tar.bz2
scummvm-rg350-18b3e3a4ba09a886e7ad78c5b3d17ece3ee97940.zip
- Added a simple (but yet better) implementation of pauseEngineIntern for Kyra_v1 and Kyra_v2
- Added comments about what game specific details are missing in the pause implementation svn-id: r32231
Diffstat (limited to 'engines')
-rw-r--r--engines/kyra/kyra_hof.h4
-rw-r--r--engines/kyra/kyra_lok.h4
-rw-r--r--engines/kyra/kyra_mr.h5
-rw-r--r--engines/kyra/kyra_v1.cpp5
-rw-r--r--engines/kyra/kyra_v1.h2
-rw-r--r--engines/kyra/kyra_v2.cpp17
-rw-r--r--engines/kyra/kyra_v2.h3
7 files changed, 40 insertions, 0 deletions
diff --git a/engines/kyra/kyra_hof.h b/engines/kyra/kyra_hof.h
index fe4b6390b7..4eac124c45 100644
--- a/engines/kyra/kyra_hof.h
+++ b/engines/kyra/kyra_hof.h
@@ -182,6 +182,10 @@ public:
KyraEngine_HoF(OSystem *system, const GameFlags &flags);
~KyraEngine_HoF();
+ //TODO: proper extended implementation of KyraEngine_v2::pauseEngineIntern.
+ // Here we need to take care of the seqeunce play code (LordHoto *thinks*),
+ // item animation, idle animation and tim player.
+
Screen *screen() { return _screen; }
Screen_v2 *screen_v2() const { return _screen; }
GUI_v2 *gui_v2() const { return _gui; }
diff --git a/engines/kyra/kyra_lok.h b/engines/kyra/kyra_lok.h
index ad425eee8c..6bae169a77 100644
--- a/engines/kyra/kyra_lok.h
+++ b/engines/kyra/kyra_lok.h
@@ -113,6 +113,10 @@ public:
KyraEngine_LoK(OSystem *system, const GameFlags &flags);
~KyraEngine_LoK();
+ //TODO: proper extended implementation of KyraEngine_v1::pauseEngineIntern.
+ // _sprites and _seqplayer should be paused here too, to avoid some animation glitches,
+ // also parts of the hardcoded Malcolm fight might need some special handling.
+
Screen *screen() { return _screen; }
Animator_LoK *animator() { return _animator; }
virtual Movie *createWSAMovie();
diff --git a/engines/kyra/kyra_mr.h b/engines/kyra/kyra_mr.h
index 4ec02c7849..5af138373c 100644
--- a/engines/kyra/kyra_mr.h
+++ b/engines/kyra/kyra_mr.h
@@ -50,6 +50,11 @@ public:
KyraEngine_MR(OSystem *system, const GameFlags &flags);
~KyraEngine_MR();
+ //TODO: proper extended implementation of KyraEngine_v2::pauseEngineIntern.
+ // Idle animation time, item animations and album animations should be taken
+ // care of, but since those would just produce minor glitches it's not that
+ // important.
+
Screen *screen() { return _screen; }
Screen_v2 *screen_v2() const { return _screen; }
GUI_v2 *gui_v2() const { return _gui; }
diff --git a/engines/kyra/kyra_v1.cpp b/engines/kyra/kyra_v1.cpp
index a3d18f7713..1cc1d728bf 100644
--- a/engines/kyra/kyra_v1.cpp
+++ b/engines/kyra/kyra_v1.cpp
@@ -87,6 +87,11 @@ KyraEngine_v1::KyraEngine_v1(OSystem *system, const GameFlags &flags)
return _debugger;
}
+void KyraEngine_v1::pauseEngineIntern(bool pause) {
+ Engine::pauseEngineIntern(pause);
+ _timer->pause(pause);
+}
+
int KyraEngine_v1::init() {
registerDefaultSettings();
diff --git a/engines/kyra/kyra_v1.h b/engines/kyra/kyra_v1.h
index 919d853dfb..2278cc81df 100644
--- a/engines/kyra/kyra_v1.h
+++ b/engines/kyra/kyra_v1.h
@@ -109,6 +109,8 @@ public:
::GUI::Debugger *getDebugger();
+ virtual void pauseEngineIntern(bool pause);
+
bool quit() const { return _quitFlag; }
uint8 game() const { return _flags.gameID; }
diff --git a/engines/kyra/kyra_v2.cpp b/engines/kyra/kyra_v2.cpp
index e987496ddb..054fab4569 100644
--- a/engines/kyra/kyra_v2.cpp
+++ b/engines/kyra/kyra_v2.cpp
@@ -68,6 +68,8 @@ KyraEngine_v2::KyraEngine_v2(OSystem *system, const GameFlags &flags, const Engi
memset(&_mainCharacter, 0, sizeof(_mainCharacter));
memset(&_mainCharacter.inventory, -1, sizeof(_mainCharacter.inventory));
+
+ _pauseStart = 0;
}
KyraEngine_v2::~KyraEngine_v2() {
@@ -93,6 +95,21 @@ KyraEngine_v2::~KyraEngine_v2() {
delete[] _screenBuffer;
}
+void KyraEngine_v2::pauseEngineIntern(bool pause) {
+ KyraEngine_v1::pauseEngineIntern(pause);
+
+ if (!pause) {
+ for (int i = 0; i < ARRAYSIZE(_sceneSpecialScriptsTimer); ++i) {
+ if (_sceneSpecialScriptsTimer[i])
+ _sceneSpecialScriptsTimer[i] += _pauseStart;
+ }
+
+ _pauseStart = 0;
+ } else {
+ _pauseStart = _system->getMillis();
+ }
+}
+
void KyraEngine_v2::delay(uint32 amount, bool updateGame, bool isMainLoop) {
debugC(9, kDebugLevelMain, "KyraEngine_v2::delay(%u, %d, %d)", amount, updateGame, isMainLoop);
diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h
index f75fd89234..24f7aad614 100644
--- a/engines/kyra/kyra_v2.h
+++ b/engines/kyra/kyra_v2.h
@@ -75,6 +75,8 @@ public:
KyraEngine_v2(OSystem *system, const GameFlags &flags, const EngineDesc &desc);
~KyraEngine_v2();
+ virtual void pauseEngineIntern(bool pause);
+
virtual Screen_v2 *screen_v2() const = 0;
virtual GUI *gui_v2() const = 0;
@@ -85,6 +87,7 @@ protected:
EngineDesc _desc;
// run
+ uint32 _pauseStart;
bool _runFlag;
bool _showOutro;