aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2011-12-28 18:53:45 +0200
committerFilippos Karapetis2011-12-28 18:54:17 +0200
commiteaed1b725a7720e5ca72d9c3d380c218c9e5ac6d (patch)
treec1db9f9255cb37825a27c52090cf252eee495568
parent63da2ac271723a33839414827a2f01ef6185490e (diff)
downloadscummvm-rg350-eaed1b725a7720e5ca72d9c3d380c218c9e5ac6d.tar.gz
scummvm-rg350-eaed1b725a7720e5ca72d9c3d380c218c9e5ac6d.tar.bz2
scummvm-rg350-eaed1b725a7720e5ca72d9c3d380c218c9e5ac6d.zip
DREAMWEB: Replaced most isCD calls with calls checking for speech
This is quite useful for devices with limited storage, where the user can use the CD version without its speech files
-rw-r--r--engines/dreamweb/dreamweb.cpp8
-rw-r--r--engines/dreamweb/dreamweb.h4
-rw-r--r--engines/dreamweb/people.cpp14
-rw-r--r--engines/dreamweb/saveload.cpp8
-rw-r--r--engines/dreamweb/sprite.cpp24
-rw-r--r--engines/dreamweb/stubs.cpp14
-rw-r--r--engines/dreamweb/talk.cpp16
-rw-r--r--engines/dreamweb/titles.cpp6
8 files changed, 48 insertions, 46 deletions
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp
index e91f5cbd41..661981c377 100644
--- a/engines/dreamweb/dreamweb.cpp
+++ b/engines/dreamweb/dreamweb.cpp
@@ -369,6 +369,7 @@ Common::Error DreamWebEngine::run() {
_console = new DreamWebConsole(this);
ConfMan.registerDefault("dreamweb_originalsaveload", "false");
+ _hasSpeech = Common::File::exists("speech/r01c0000.raw");
_timer->installTimerProc(vSyncInterrupt, 1000000 / 70, this, "dreamwebVSync");
dreamweb();
@@ -568,4 +569,11 @@ uint8 DreamWebEngine::modifyChar(uint8 c) const {
}
}
+bool DreamWebEngine::isCD() {
+ return _gameDescription->desc.flags & ADGF_CD;
+}
+
+bool DreamWebEngine::hasSpeech() {
+ return isCD() && _hasSpeech;
+}
} // End of namespace DreamWeb
diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h
index 4b84992d92..2de29491e5 100644
--- a/engines/dreamweb/dreamweb.h
+++ b/engines/dreamweb/dreamweb.h
@@ -136,6 +136,8 @@ public:
void processEvents();
void blit(const uint8 *src, int pitch, int x, int y, int w, int h);
void cls();
+ bool isCD();
+ bool hasSpeech();
void getPalette(uint8 *data, uint start, uint count);
void setPalette(const uint8 *data, uint start, uint count);
@@ -299,6 +301,7 @@ public:
bool _foreignRelease;
bool _wonGame;
+ bool _hasSpeech;
// sound related
uint8 _roomsSample;
@@ -768,7 +771,6 @@ public:
// from stubs.cpp
void setupInitialVars();
- bool isCD();
void crosshair();
void delTextLine();
void showBlink();
diff --git a/engines/dreamweb/people.cpp b/engines/dreamweb/people.cpp
index 40084a28c4..6745a34453 100644
--- a/engines/dreamweb/people.cpp
+++ b/engines/dreamweb/people.cpp
@@ -123,7 +123,7 @@ static const ReelRoutine g_initialReelRoutines[] = {
void DreamWebEngine::setupInitialReelRoutines() {
for (unsigned int i = 0; i < kNumReelRoutines + 1; ++i) {
_reelRoutines[i] = g_initialReelRoutines[i];
- if (_reelRoutines[i].period == 55 && isCD() && getLanguage() == Common::DE_DEU)
+ if (_reelRoutines[i].period == 55 && hasSpeech() && getLanguage() == Common::DE_DEU)
_reelRoutines[i].period = 65;
}
}
@@ -145,7 +145,7 @@ void DreamWebEngine::updatePeople() {
void DreamWebEngine::madmanText() {
byte origCount;
- if (isCD()) {
+ if (hasSpeech()) {
if (_speechCount >= 63)
return;
if (_channel1Playing != 255)
@@ -188,12 +188,12 @@ void DreamWebEngine::madman(ReelRoutine &routine) {
++_vars._combatCount;
madmanText();
newReelPointer = 53;
- if (_vars._combatCount >= (isCD() ? 64 : 62)) {
- if (_vars._combatCount == (isCD() ? 70 : 68))
+ if (_vars._combatCount >= (hasSpeech() ? 64 : 62)) {
+ if (_vars._combatCount == (hasSpeech() ? 70 : 68))
newReelPointer = 310;
else {
if (_vars._lastWeapon == 8) {
- _vars._combatCount = isCD() ? 72 : 70;
+ _vars._combatCount = hasSpeech() ? 72 : 70;
_vars._lastWeapon = (uint8)-1;
_vars._madmanFlag = 1;
newReelPointer = 67;
@@ -211,9 +211,9 @@ void DreamWebEngine::madman(ReelRoutine &routine) {
void DreamWebEngine::madMode() {
_vars._watchingTime = 2;
_pointerMode = 0;
- if (_vars._combatCount < (isCD() ? 65 : 63))
+ if (_vars._combatCount < (hasSpeech() ? 65 : 63))
return;
- if (_vars._combatCount >= (isCD() ? 70 : 68))
+ if (_vars._combatCount >= (hasSpeech() ? 70 : 68))
return;
_pointerMode = 2;
}
diff --git a/engines/dreamweb/saveload.cpp b/engines/dreamweb/saveload.cpp
index 9b16d14e7b..415f1a80ef 100644
--- a/engines/dreamweb/saveload.cpp
+++ b/engines/dreamweb/saveload.cpp
@@ -840,9 +840,11 @@ void DreamWebEngine::showSlots() {
void DreamWebEngine::showOpBox() {
showFrame(_tempGraphics, kOpsx, kOpsy, 0, 0);
- // CHECKME: There seem to be versions of dreamweb in which this call
- // should be removed. It displays a red dot on the ops dialogs if left in.
- showFrame(_tempGraphics, kOpsx, kOpsy + 55, 4, 0);
+ // This call displays half of the ops dialog in the CD version. It's not
+ // in the floppy version, and if it's called, a stray red dot is shown in
+ // the game dialogs.
+ if (isCD())
+ showFrame(_tempGraphics, kOpsx, kOpsy + 55, 4, 0);
}
void DreamWebEngine::showLoadOps() {
diff --git a/engines/dreamweb/sprite.cpp b/engines/dreamweb/sprite.cpp
index e662fa6ec3..07f391addc 100644
--- a/engines/dreamweb/sprite.cpp
+++ b/engines/dreamweb/sprite.cpp
@@ -670,7 +670,7 @@ void DreamWebEngine::intro1Text() {
if (_introCount != 2 && _introCount != 4 && _introCount != 6)
return;
- if (isCD() && _channel1Playing != 255) {
+ if (hasSpeech() && _channel1Playing != 255) {
_introCount--;
} else {
if (_introCount == 2)
@@ -692,12 +692,12 @@ void DreamWebEngine::intro2Text(uint16 nextReelPointer) {
void DreamWebEngine::intro3Text(uint16 nextReelPointer) {
if (nextReelPointer == 107)
setupTimedTemp(45, 82, 36, 56, 100, 1);
- else if (nextReelPointer == (isCD() ? 108 : 109))
+ else if (nextReelPointer == (hasSpeech() ? 108 : 109))
setupTimedTemp(46, 82, 36, 56, 100, 1);
}
void DreamWebEngine::monks2text() {
- bool isGermanCD = isCD() && getLanguage() == Common::DE_DEU;
+ bool isGermanCD = hasSpeech() && getLanguage() == Common::DE_DEU;
if (_introCount == 1)
setupTimedTemp(8, 82, 36, 160, 120, 1);
@@ -706,14 +706,14 @@ void DreamWebEngine::monks2text() {
else if (_introCount == (isGermanCD ? 9 : 7))
setupTimedTemp(10, 82, 36, 160, 120, 1);
else if (_introCount == 10 && !isGermanCD) {
- if (isCD())
+ if (hasSpeech())
_introCount = 12;
setupTimedTemp(11, 82, 0, 105, 120, 1);
} else if (_introCount == 13 && isGermanCD) {
_introCount = 14;
setupTimedTemp(11, 82, 0, 105, 120, 1);
} else if (_introCount == 13 && !isGermanCD) {
- if (isCD())
+ if (hasSpeech())
_introCount = 17;
else
setupTimedTemp(12, 82, 0, 120, 120, 1);
@@ -725,7 +725,7 @@ void DreamWebEngine::monks2text() {
setupTimedTemp(15, 82, 36, 160, 120, 1);
else if (_introCount == (isGermanCD ? 27 : 25))
setupTimedTemp(16, 82, 36, 160, 120, 1);
- else if (_introCount == (isCD() ? 27 : 28) && !isGermanCD)
+ else if (_introCount == (hasSpeech() ? 27 : 28) && !isGermanCD)
setupTimedTemp(17, 82, 36, 160, 120, 1);
else if (_introCount == 30 && isGermanCD)
setupTimedTemp(17, 82, 36, 160, 120, 1);
@@ -736,14 +736,14 @@ void DreamWebEngine::monks2text() {
void DreamWebEngine::textForEnd() {
if (_introCount == 20)
setupTimedTemp(0, 83, 34, 20, 60, 1);
- else if (_introCount == (isCD() ? 50 : 65))
+ else if (_introCount == (hasSpeech() ? 50 : 65))
setupTimedTemp(1, 83, 34, 20, 60, 1);
- else if (_introCount == (isCD() ? 85 : 110))
+ else if (_introCount == (hasSpeech() ? 85 : 110))
setupTimedTemp(2, 83, 34, 20, 60, 1);
}
void DreamWebEngine::textForMonkHelper(uint8 textIndex, uint8 voiceIndex, uint8 x, uint8 y, uint16 countToTimed, uint16 timeCount) {
- if (isCD() && _channel1Playing != 255)
+ if (hasSpeech() && _channel1Playing != 255)
_introCount--;
else
setupTimedTemp(textIndex, voiceIndex, x, y, countToTimed, timeCount);
@@ -758,7 +758,7 @@ void DreamWebEngine::textForMonk() {
textForMonkHelper(21, 82, 48, 154, 120, 1);
else if (_introCount == 13)
textForMonkHelper(22, 82, 68, 38, 120, 1);
- else if (_introCount == (isCD() ? 15 : 17))
+ else if (_introCount == (hasSpeech() ? 15 : 17))
textForMonkHelper(23, 82, 68, 154, 120, 1);
else if (_introCount == 21)
textForMonkHelper(24, 82, 68, 38, 120, 1);
@@ -774,11 +774,11 @@ void DreamWebEngine::textForMonk() {
textForMonkHelper(29, 82, 68, 38, 120, 1);
else if (_introCount == 45)
textForMonkHelper(30, 82, 68, 154, 120, 1);
- else if (_introCount == (isCD() ? 52 : 49))
+ else if (_introCount == (hasSpeech() ? 52 : 49))
textForMonkHelper(31, 82, 68, 154, 220, 1);
else if (_introCount == 53) {
fadeScreenDowns();
- if (isCD()) {
+ if (hasSpeech()) {
_volumeTo = 7;
_volumeDirection = 1;
}
diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp
index cf1eb4575e..d91eb242ff 100644
--- a/engines/dreamweb/stubs.cpp
+++ b/engines/dreamweb/stubs.cpp
@@ -935,8 +935,7 @@ void DreamWebEngine::useTimedText() {
}
void DreamWebEngine::setupTimedTemp(uint8 textIndex, uint8 voiceIndex, uint8 x, uint8 y, uint16 countToTimed, uint16 timeCount) {
-#if 1 // if cd - TODO: replace with a proper CD check
- if (voiceIndex != 0) {
+ if (hasSpeech() && voiceIndex != 0) {
if (loadSpeech('T', voiceIndex, 'T', textIndex)) {
playChannel1(50+12);
}
@@ -947,7 +946,6 @@ void DreamWebEngine::setupTimedTemp(uint8 textIndex, uint8 voiceIndex, uint8 x,
if (_speechLoaded && !_subtitles)
return;
}
-#endif
if (_timeCount != 0)
return;
@@ -1661,14 +1659,6 @@ bool DreamWebEngine::isItDescribed(const ObjPos *pos) {
return string[0] != 0;
}
-bool DreamWebEngine::isCD() {
- // The original sources has two codepaths depending if the game is 'if cd' or not
- // This is a hack to guess which version to use with the assumption that if we have a cd version
- // we managed to load the speech. At least it is isolated in this function and can be changed.
- // Maybe detect the version during game id?
- return (_speechLoaded);
-}
-
void DreamWebEngine::showIcon() {
if (_realLocation < 50) {
showPanel();
@@ -2532,7 +2522,7 @@ void DreamWebEngine::atmospheres() {
if (_realLocation == 2 && _mapX == 22 && _mapY == 10)
_volume = 5; // "louisvol"
- if (isCD() && _realLocation == 14) {
+ if (hasSpeech() && _realLocation == 14) {
if (_mapX == 33) {
_volume = 0; // "ismad2"
return;
diff --git a/engines/dreamweb/talk.cpp b/engines/dreamweb/talk.cpp
index 56826e70bb..2899e81d00 100644
--- a/engines/dreamweb/talk.cpp
+++ b/engines/dreamweb/talk.cpp
@@ -98,15 +98,15 @@ void DreamWebEngine::startTalk() {
y = 80;
printDirect(&str, 66, &y, 241, true);
-#if 1 // if cd - TODO: replace with a proper CD check
- _speechLoaded = false;
- loadSpeech('R', _realLocation, 'C', 64*(_character & 0x7F));
- if (_speechLoaded) {
- _volumeDirection = 1;
- _volumeTo = 6;
- playChannel1(50 + 12);
+ if (hasSpeech()) {
+ _speechLoaded = false;
+ loadSpeech('R', _realLocation, 'C', 64*(_character & 0x7F));
+ if (_speechLoaded) {
+ _volumeDirection = 1;
+ _volumeTo = 6;
+ playChannel1(50 + 12);
+ }
}
-#endif
}
const uint8 *DreamWebEngine::getPersonText(uint8 index, uint8 talkPos) {
diff --git a/engines/dreamweb/titles.cpp b/engines/dreamweb/titles.cpp
index c57684c3a8..8b56ffc57e 100644
--- a/engines/dreamweb/titles.cpp
+++ b/engines/dreamweb/titles.cpp
@@ -44,12 +44,12 @@ void DreamWebEngine::monkSpeaking() {
workToScreen();
_volume = 7;
_volumeDirection = -1;
- _volumeTo = isCD() ? 5 : 0;
+ _volumeTo = hasSpeech() ? 5 : 0;
playChannel0(12, 255);
fadeScreenUps();
hangOn(300);
- if (isCD()) {
+ if (hasSpeech()) {
for (int i = 40; i <= 48; i++) {
loadSpeech('T', 83, 'T', i);
@@ -141,7 +141,7 @@ void DreamWebEngine::intro() {
loadIntroRoom();
_volume = 7;
_volumeDirection = -1;
- _volumeTo = isCD() ? 4 : 0;
+ _volumeTo = hasSpeech() ? 4 : 0;
playChannel0(12, 255);
fadeScreenUps();
runIntroSeq();