From 18b3e3a4ba09a886e7ad78c5b3d17ece3ee97940 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Fri, 23 May 2008 13:37:56 +0000 Subject: - 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 --- engines/kyra/kyra_hof.h | 4 ++++ engines/kyra/kyra_lok.h | 4 ++++ engines/kyra/kyra_mr.h | 5 +++++ engines/kyra/kyra_v1.cpp | 5 +++++ engines/kyra/kyra_v1.h | 2 ++ engines/kyra/kyra_v2.cpp | 17 +++++++++++++++++ engines/kyra/kyra_v2.h | 3 +++ 7 files changed, 40 insertions(+) (limited to 'engines') 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; -- cgit v1.2.3