aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sword2/console.cpp24
-rw-r--r--sword2/logic.h7
-rw-r--r--sword2/speech.cpp39
-rw-r--r--sword2/sword2.cpp58
4 files changed, 37 insertions, 91 deletions
diff --git a/sword2/console.cpp b/sword2/console.cpp
index a7461107b7..490514cac6 100644
--- a/sword2/console.cpp
+++ b/sword2/console.cpp
@@ -123,19 +123,25 @@ void Debugger::varSet(int var, int val) {
void Debugger::preEnter() {
// Pause sound output
- _vm->_sound->pauseFx();
- _vm->_sound->pauseSpeech();
- _vm->_sound->pauseMusic();
+ if (_vm->_sound) {
+ _vm->_sound->pauseFx();
+ _vm->_sound->pauseSpeech();
+ _vm->_sound->pauseMusic();
+ }
}
void Debugger::postEnter() {
- // Resume previous sound state
- _vm->_sound->unpauseFx();
- _vm->_sound->unpauseSpeech();
- _vm->_sound->unpauseMusic();
+ if (_vm->_sound) {
+ // Resume previous sound state
+ _vm->_sound->unpauseFx();
+ _vm->_sound->unpauseSpeech();
+ _vm->_sound->unpauseMusic();
+ }
- // Restore old mouse cursor
- _vm->_graphics->drawMouse();
+ if (_vm->_graphics) {
+ // Restore old mouse cursor
+ _vm->_graphics->drawMouse();
+ }
}
///////////////////////////////////////////////////
diff --git a/sword2/logic.h b/sword2/logic.h
index 1ed058e4f3..8a2dfbab86 100644
--- a/sword2/logic.h
+++ b/sword2/logic.h
@@ -141,11 +141,6 @@ private:
void formText(int32 *params);
bool wantSpeechForLine(uint32 wavId);
-#ifdef _SWORD2_DEBUG
- // for testing speech & text
- void getCorrectCdForSpeech(int32 wavId);
-#endif
-
uint32 _totalStartups;
uint32 _totalScreenManagers;
uint32 _startRes;
@@ -156,7 +151,7 @@ private:
// id of screen manager object
uint32 start_res_id;
- //tell the manager which startup you want (if there are more
+ // tell the manager which startup you want (if there are more
// than 1) (i.e more than 1 entrance to a screen and/or
// separate game boots)
uint32 key;
diff --git a/sword2/speech.cpp b/sword2/speech.cpp
index 56b584f344..ec04bd4efb 100644
--- a/sword2/speech.cpp
+++ b/sword2/speech.cpp
@@ -871,8 +871,6 @@ int32 Logic::fnISpeak(int32 *params) {
// for text/speech testing & checking for correct file type
_standardHeader *head;
- // for text/speech testing - keeping track of text resource currently being tested
- static uint32 currentTextResource = 0;
// set up the pointers which we know we'll always need
@@ -1081,21 +1079,6 @@ int32 Logic::fnISpeak(int32 *params) {
else if (speech_pan > 16)
speech_pan = 16;
- // if we're testing text & speech
- if (SYSTEM_TESTING_TEXT) {
- // if we've moved onto a new text resource,
- // we will want to check if the CD needs
- // changing again - can only know which CD to
- // get if the wavID is non-zero
-
- if (text_res != currentTextResource && params[S_WAV]) {
- // ensure correct CD is in for this
- // wavId
- // getCorrectCdForSpeech(params[S_WAV]);
- currentTextResource = text_res;
- }
- }
-
// set up path to speech cluster
// first checking if we have speech1.clu or
// speech2.clu in current directory (for translators
@@ -1468,28 +1451,6 @@ void Logic::formText(int32 *params) {
}
}
-#ifdef _SWORD2_DEBUG
-void Logic::getCorrectCdForSpeech(int32 wavId) {
- File fp;
-
- // 1, 2 or 0 (if speech on both cd's, ie. no need to change)
- uint8 cd;
-
- if (!fp.open("cd.bin"))
- error("Need cd.bin file for testing speech!");
-
- fp.seek(wavId, SEEK_SET);
- fp.read(&cd, 1);
-
- fp.close();
-
- // if we specifically need CD1 or CD2 (ie. it's not on both)
- // then check it's there (& ask for it if it's not there)
- if (cd == 1 || cd == 2)
- _vm->_resman->getCd(cd);
-}
-#endif
-
// For preventing sfx subtitles from trying to load speech samples
// - since the sfx are implemented as normal sfx, so we don't want them as
// speech samples too
diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp
index edddfdeab5..5c5b3ac4b0 100644
--- a/sword2/sword2.cpp
+++ b/sword2/sword2.cpp
@@ -51,9 +51,9 @@ GameList Engine_SWORD2_detectGames(const FSList &fslist) {
GameList detectedGames;
const GameSettings *g;
- // TODO: It would be nice if we had code here which distinguishes between
- // the 'sword2' and 'sword2demo' targets. The current code can't do that
- // since they use the same detectname.
+ // TODO: It would be nice if we had code here which distinguishes
+ // between the 'sword2' and 'sword2demo' targets. The current code
+ // can't do that since they use the same detectname.
for (g = sword2_settings; g->gameName; ++g) {
// Iterate over all files in the given directory
@@ -85,6 +85,8 @@ Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst)
g_sword2 = this;
_debugger = NULL;
+ _sound = NULL;
+ _graphics = NULL;
_features = detector->_game.features;
_targetName = strdup(detector->_targetName.c_str());
_bootParam = ConfMan.getInt("boot_param");
@@ -104,6 +106,15 @@ Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst)
// get some falling RAM and put it in your pocket, never let it slip
// away
+ _graphics = new Graphics(this, 640, 480);
+
+ // Create the debugger as early as possible (but not before the
+ // graphics object!) so that errors can be displayed in it. In
+ // particular, we want errors about missing files to be clearly
+ // visible to the user.
+
+ _debugger = new Debugger(this);
+
_memory = new MemoryManager(this);
_resman = new ResourceManager(this);
_logic = new Logic(this);
@@ -111,8 +122,6 @@ Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst)
_gui = new Gui(this);
_input = new Input(this);
_sound = new Sound(this);
- _graphics = new Graphics(this, 640, 480);
- _debugger = new Debugger(this);
_lastPaletteRes = 0;
@@ -185,10 +194,11 @@ void Sword2Engine::errorString(const char *buf1, char *buf2) {
return;
#endif
- // Unless an error -originated- within the debugger, spawn the debugger. Otherwise
- // exit out normally.
+ // Unless an error -originated- within the debugger, spawn the
+ // debugger. Otherwise exit out normally.
if (_debugger && !_debugger->isAttached()) {
- printf("%s\n", buf2); // (Print it again in case debugger segfaults)
+ // (Print it again in case debugger segfaults)
+ printf("%s\n", buf2);
_debugger->attach(buf2);
_debugger->onFrame();
}
@@ -243,7 +253,7 @@ void Sword2Engine::gameCycle(void) {
// got a screen to run?
if (_logic->getRunList()) {
- //run the logic session UNTIL a full loop has been performed
+ // run the logic session UNTIL a full loop has been performed
do {
// reset the graphic 'buildit' list before a new
// logic list (see fnRegisterFrame)
@@ -275,14 +285,6 @@ void Sword2Engine::gameCycle(void) {
void Sword2Engine::go() {
_keyboardEvent ke;
- // Call the application "Revolution" until the resource manager is
- // ready to dig the name out of a text file. See initialiseGame()
- // which calls InitialiseFontResourceFlags() in maketext.cpp
- //
- // Have to do it like this since we cannot really fire up the resource
- // manager until a window has been created as any errors are displayed
- // via a window, thus time becomes a loop.
-
debug(5, "CALLING: readOptionSettings");
_gui->readOptionSettings();
@@ -342,14 +344,9 @@ void Sword2Engine::go() {
char c = toupper(ke.ascii);
- if (ke.modifiers == OSystem::KBD_CTRL) {
- if (ke.keycode == 'd') {
- _debugger->attach();
- }
- }
-
- if (c == '~' || c == '#')
+ if ((ke.modifiers == OSystem::KBD_CTRL && ke.keycode == 'd') || c == '~' || c == '#') {
_debugger->attach();
+ }
if (_gamePaused) { // if currently paused
if (c == 'P') {
@@ -466,14 +463,6 @@ void Sword2Engine::sleepUntil(uint32 time) {
}
void Sword2Engine::pauseGame(void) {
- // uint8 *text;
-
- // open text file & get the line "PAUSED"
- // text = fetchTextLine(_resman->openResource(3258), 449);
- // pause_text_bloc_no = _fontRenderer->buildNewBloc(text + 2, 320, 210, 640, 184, RDSPR_TRANS | RDSPR_DISPLAYALIGN, SPEECH_FONT_ID, POSITION_AT_CENTRE_OF_BASE);
- // now ok to close the text file
- // _resman->closeResource(3258);
-
// don't allow Pause while screen fading or while black
if (_graphics->getFadeStatus() != RDFADE_NONE)
return;
@@ -483,8 +472,6 @@ void Sword2Engine::pauseGame(void) {
// make a normal mouse
clearPointerText();
- // mouse_mode=MOUSE_normal;
-
// this is the only place allowed to do it this way
_graphics->setLuggageAnim(NULL, 0);
@@ -512,9 +499,6 @@ void Sword2Engine::pauseGame(void) {
}
void Sword2Engine::unpauseGame(void) {
- // removed "PAUSED" from screen
- // _fontRenderer->killTextBloc(pause_text_bloc_no);
-
if (OBJECT_HELD && _realLuggageItem)
setLuggage(_realLuggageItem);