aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorJohannes Schickel2011-11-18 03:47:51 +0100
committerJohannes Schickel2011-11-18 03:47:51 +0100
commitcfac223cee7cc8136fdf43dea1465a1b060a803b (patch)
tree6bf6b6800b3db6b126db256705f468cf54179941 /engines
parent11a7993085d30f113fc7a8cc85c4202717be21e8 (diff)
downloadscummvm-rg350-cfac223cee7cc8136fdf43dea1465a1b060a803b.tar.gz
scummvm-rg350-cfac223cee7cc8136fdf43dea1465a1b060a803b.tar.bz2
scummvm-rg350-cfac223cee7cc8136fdf43dea1465a1b060a803b.zip
KYRA: "Fix" bug #3166235 "KYRA: Crash on startup on OS X due to invalid PAK file".
Now we can show such errors in the debugger, since we initialize and the screen resolution and the debugger before initializing the resource manager. This allows our error function to open up the debugger and show the error at least. A better feedback to the user might be desirable, but it is not really feasible with our current possibilites for error reporting.
Diffstat (limited to 'engines')
-rw-r--r--engines/kyra/debugger.cpp14
-rw-r--r--engines/kyra/debugger.h5
-rw-r--r--engines/kyra/kyra_hof.cpp8
-rw-r--r--engines/kyra/kyra_lok.cpp8
-rw-r--r--engines/kyra/kyra_mr.cpp9
-rw-r--r--engines/kyra/kyra_v1.cpp5
-rw-r--r--engines/kyra/lol.cpp9
7 files changed, 44 insertions, 14 deletions
diff --git a/engines/kyra/debugger.cpp b/engines/kyra/debugger.cpp
index dfc2a9f868..35b4d8ba7f 100644
--- a/engines/kyra/debugger.cpp
+++ b/engines/kyra/debugger.cpp
@@ -32,9 +32,10 @@
namespace Kyra {
Debugger::Debugger(KyraEngine_v1 *vm)
- : ::GUI::Debugger() {
- _vm = vm;
+ : ::GUI::Debugger(), _vm(vm) {
+}
+void Debugger::initialize() {
DCmd_Register("continue", WRAP_METHOD(Debugger, Cmd_Exit));
DCmd_Register("screen_debug_mode", WRAP_METHOD(Debugger, cmd_setScreenDebug));
DCmd_Register("load_palette", WRAP_METHOD(Debugger, cmd_loadPalette));
@@ -196,6 +197,9 @@ bool Debugger::cmd_setTimerCountdown(int argc, const char **argv) {
Debugger_LoK::Debugger_LoK(KyraEngine_LoK *vm)
: Debugger(vm), _vm(vm) {
+}
+
+void Debugger_LoK::initialize() {
DCmd_Register("enter", WRAP_METHOD(Debugger_LoK, cmd_enterRoom));
DCmd_Register("scenes", WRAP_METHOD(Debugger_LoK, cmd_listScenes));
DCmd_Register("give", WRAP_METHOD(Debugger_LoK, cmd_giveItem));
@@ -281,6 +285,9 @@ bool Debugger_LoK::cmd_listBirthstones(int argc, const char **argv) {
#pragma mark -
Debugger_v2::Debugger_v2(KyraEngine_v2 *vm) : Debugger(vm), _vm(vm) {
+}
+
+void Debugger_v2::initialize() {
DCmd_Register("character_info", WRAP_METHOD(Debugger_v2, cmd_characterInfo));
DCmd_Register("enter", WRAP_METHOD(Debugger_v2, cmd_enterScene));
DCmd_Register("scenes", WRAP_METHOD(Debugger_v2, cmd_listScenes));
@@ -433,6 +440,9 @@ bool Debugger_v2::cmd_giveItem(int argc, const char **argv) {
#pragma mark -
Debugger_HoF::Debugger_HoF(KyraEngine_HoF *vm) : Debugger_v2(vm), _vm(vm) {
+}
+
+void Debugger_HoF::initialize() {
DCmd_Register("pass_codes", WRAP_METHOD(Debugger_HoF, cmd_passcodes));
}
diff --git a/engines/kyra/debugger.h b/engines/kyra/debugger.h
index 09ddd89a7a..e9c0a6a98a 100644
--- a/engines/kyra/debugger.h
+++ b/engines/kyra/debugger.h
@@ -37,6 +37,8 @@ public:
Debugger(KyraEngine_v1 *vm);
virtual ~Debugger() {} // we need this for __SYMBIAN32__ archaic gcc/UIQ
+ virtual void initialize();
+
protected:
KyraEngine_v1 *_vm;
@@ -56,6 +58,7 @@ public:
Debugger_LoK(KyraEngine_LoK *vm);
virtual ~Debugger_LoK() {} // we need this for __SYMBIAN32__ archaic gcc/UIQ
+ virtual void initialize();
protected:
KyraEngine_LoK *_vm;
@@ -70,6 +73,7 @@ public:
Debugger_v2(KyraEngine_v2 *vm);
virtual ~Debugger_v2() {}
+ virtual void initialize();
protected:
KyraEngine_v2 *_vm;
@@ -85,6 +89,7 @@ class Debugger_HoF : public Debugger_v2 {
public:
Debugger_HoF(KyraEngine_HoF *vm);
+ virtual void initialize();
protected:
KyraEngine_HoF *_vm;
diff --git a/engines/kyra/kyra_hof.cpp b/engines/kyra/kyra_hof.cpp
index e91f3ba6fc..34bde7fe5c 100644
--- a/engines/kyra/kyra_hof.cpp
+++ b/engines/kyra/kyra_hof.cpp
@@ -223,11 +223,12 @@ Common::Error KyraEngine_HoF::init() {
assert(_screen);
_screen->setResolution();
+ _debugger = new Debugger_HoF(this);
+ assert(_debugger);
+
KyraEngine_v1::init();
initStaticResource();
- _debugger = new Debugger_HoF(this);
- assert(_debugger);
_text = new TextDisplayer_HoF(this, _screen);
assert(_text);
_gui = new GUI_HoF(this);
@@ -455,6 +456,9 @@ void KyraEngine_HoF::startup() {
}
void KyraEngine_HoF::runLoop() {
+ // Initialize debugger since how it should be fully usable
+ _debugger->initialize();
+
_screen->updateScreen();
_runFlag = true;
diff --git a/engines/kyra/kyra_lok.cpp b/engines/kyra/kyra_lok.cpp
index 601ae8f10c..84990bcfb8 100644
--- a/engines/kyra/kyra_lok.cpp
+++ b/engines/kyra/kyra_lok.cpp
@@ -174,6 +174,9 @@ Common::Error KyraEngine_LoK::init() {
assert(_screen);
_screen->setResolution();
+ _debugger = new Debugger_LoK(this);
+ assert(_debugger);
+
KyraEngine_v1::init();
_sprites = new Sprites(this, _system);
@@ -229,8 +232,6 @@ Common::Error KyraEngine_LoK::init() {
memset(&_scriptMain, 0, sizeof(EMCState));
memset(&_scriptClick, 0, sizeof(EMCState));
- _debugger = new Debugger_LoK(this);
- assert(_debugger);
memset(_shapes, 0, sizeof(_shapes));
for (int i = 0; i < ARRAYSIZE(_movieObjects); ++i)
@@ -436,6 +437,9 @@ void KyraEngine_LoK::startup() {
}
void KyraEngine_LoK::mainLoop() {
+ // Initialize debugger since how it should be fully usable
+ _debugger->initialize();
+
_eventList.clear();
while (!shouldQuit()) {
diff --git a/engines/kyra/kyra_mr.cpp b/engines/kyra/kyra_mr.cpp
index 5798e99a1f..39ed0d038a 100644
--- a/engines/kyra/kyra_mr.cpp
+++ b/engines/kyra/kyra_mr.cpp
@@ -205,12 +205,12 @@ Common::Error KyraEngine_MR::init() {
assert(_screen);
_screen->setResolution();
- KyraEngine_v1::init();
- initStaticResource();
-
_debugger = new Debugger_v2(this);
assert(_debugger);
+ KyraEngine_v1::init();
+ initStaticResource();
+
_soundDigital = new SoundDigital(this, _mixer);
assert(_soundDigital);
if (!_soundDigital->init())
@@ -887,6 +887,9 @@ bool KyraEngine_MR::checkCharCollision(int x, int y) {
#pragma mark -
void KyraEngine_MR::runLoop() {
+ // Initialize debugger since how it should be fully usable
+ _debugger->initialize();
+
_eventList.clear();
_runFlag = true;
diff --git a/engines/kyra/kyra_v1.cpp b/engines/kyra/kyra_v1.cpp
index bf0c23bf69..dbdcda22d5 100644
--- a/engines/kyra/kyra_v1.cpp
+++ b/engines/kyra/kyra_v1.cpp
@@ -85,8 +85,9 @@ KyraEngine_v1::KyraEngine_v1(OSystem *system, const GameFlags &flags)
void KyraEngine_v1::pauseEngineIntern(bool pause) {
Engine::pauseEngineIntern(pause);
if (_sound)
- _sound->pause(pause);
- _timer->pause(pause);
+ _sound->pause(pause);
+ if (_timer)
+ _timer->pause(pause);
}
Common::Error KyraEngine_v1::init() {
diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp
index aed8f5c965..538e88aa90 100644
--- a/engines/kyra/lol.cpp
+++ b/engines/kyra/lol.cpp
@@ -434,6 +434,9 @@ Common::Error LoLEngine::init() {
assert(_screen);
_screen->setResolution();
+ _debugger = new Debugger_LoL(this);
+ assert(_debugger);
+
KyraEngine_v1::init();
initStaticResource();
@@ -547,9 +550,6 @@ Common::Error LoLEngine::init() {
_spellProcs.push_back(new SpellProc(this, 0));
_spellProcs.push_back(new SpellProc(this, &LoLEngine::castGuardian));
- _debugger = new Debugger_LoL(this);
- assert(_debugger);
-
initKeymap();
return Common::kNoError;
@@ -978,6 +978,9 @@ void LoLEngine::startupNew() {
}
void LoLEngine::runLoop() {
+ // Initialize debugger since how it should be fully usable
+ _debugger->initialize();
+
enableSysTimer(2);
bool _runFlag = true;