aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dreamweb')
-rw-r--r--engines/dreamweb/detection_tables.h60
-rw-r--r--engines/dreamweb/dreamweb.cpp6
-rw-r--r--engines/dreamweb/dreamweb.h1
-rw-r--r--engines/dreamweb/monitor.cpp5
-rw-r--r--engines/dreamweb/saveload.cpp5
-rw-r--r--engines/dreamweb/sound.cpp13
6 files changed, 80 insertions, 10 deletions
diff --git a/engines/dreamweb/detection_tables.h b/engines/dreamweb/detection_tables.h
index d54b2402c8..063aabbd89 100644
--- a/engines/dreamweb/detection_tables.h
+++ b/engines/dreamweb/detection_tables.h
@@ -41,6 +41,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
{
{"dreamweb.r00", 0, "3b5c87717fc40cc5a5ae19c155662ee3", 152918},
{"dreamweb.r02", 0, "28458718167a040d7e988cf7d2298eae", 210466},
+ {"dreamweb.exe", 0, "56b1d73aa56e964b45872ff552402341", 64985},
AD_LISTEND
},
Common::EN_ANY,
@@ -67,6 +68,27 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
},
+ // UK-V (Early UK) CD Release - From bug #3526483
+ // Note: r00 and r02 files are identical to international floppy release
+ // so was misidentified as floppy, resulting in disabled CD speech.
+ // Added executable to detection to avoid this.
+ {
+ {
+ "dreamweb",
+ "CD",
+ {
+ {"dreamweb.r00", 0, "3b5c87717fc40cc5a5ae19c155662ee3", 152918},
+ {"dreamweb.r02", 0, "28458718167a040d7e988cf7d2298eae", 210466},
+ {"dreamweb.exe", 0, "dd1c7793b151489e67b83cd1ecab51cd", -1},
+ AD_LISTEND
+ },
+ Common::EN_GRB,
+ Common::kPlatformPC,
+ ADGF_CD | ADGF_TESTING,
+ GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
+ },
+ },
+
// US CD release
{
{
@@ -79,7 +101,7 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
Common::EN_USA,
Common::kPlatformPC,
- ADGF_CD,
+ ADGF_CD | ADGF_TESTING,
GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
},
},
@@ -101,6 +123,24 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
},
+ // French CD release
+ // From bug #3524362
+ {
+ {
+ "dreamweb",
+ "CD",
+ {
+ {"dreamwfr.r00", 0, "e354582a8564faf5c515df92f207e8d1", 154657},
+ {"dreamwfr.r02", 0, "cb99f08d5aefd04184eac76927eced80", 200575},
+ AD_LISTEND
+ },
+ Common::FR_FRA,
+ Common::kPlatformPC,
+ ADGF_CD | ADGF_TESTING,
+ GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
+ },
+ },
+
// German floppy release
{
{
@@ -169,6 +209,24 @@ static const DreamWebGameDescription gameDescriptions[] = {
},
},
+ // Spanish CD release
+ // From bug #3524362
+ {
+ {
+ "dreamweb",
+ "CD",
+ {
+ {"dreamwsp.r00", 0, "2df07174321de39c4f17c9ff654b268a", 153608},
+ {"dreamwsp.r02", 0, "f97d435ad5da08fb1bcf6ea3dd6e0b9e", 199499},
+ AD_LISTEND
+ },
+ Common::ES_ESP,
+ Common::kPlatformPC,
+ ADGF_CD | ADGF_TESTING,
+ GUIO2(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_BRIGHTPALETTE)
+ },
+ },
+
// Italian floppy release
{
{
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp
index 299dd74b53..11e8e3f8cc 100644
--- a/engines/dreamweb/dreamweb.cpp
+++ b/engines/dreamweb/dreamweb.cpp
@@ -63,14 +63,18 @@ DreamWebEngine::DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gam
_channel1 = 0;
_datafilePrefix = "DREAMWEB.";
+ _speechDirName = "SPEECH";
// ES and FR CD release use a different data file prefix
+ // and speech directory naming.
if (isCD()) {
switch(getLanguage()) {
case Common::ES_ESP:
_datafilePrefix = "DREAMWSP.";
+ _speechDirName = "SPANISH";
break;
case Common::FR_FRA:
_datafilePrefix = "DREAMWFR.";
+ _speechDirName = "FRENCH";
break;
default:
// Nothing to do
@@ -381,7 +385,7 @@ Common::Error DreamWebEngine::run() {
ConfMan.registerDefault("originalsaveload", "false");
ConfMan.registerDefault("bright_palette", true);
- _hasSpeech = Common::File::exists("speech/r01c0000.raw") && !ConfMan.getBool("speech_mute");
+ _hasSpeech = Common::File::exists(_speechDirName + "/r01c0000.raw") && !ConfMan.getBool("speech_mute");
_brightPalette = ConfMan.getBool("bright_palette");
_timer->installTimerProc(vSyncInterrupt, 1000000 / 70, this, "dreamwebVSync");
diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h
index 4065e5a860..6744b53ebc 100644
--- a/engines/dreamweb/dreamweb.h
+++ b/engines/dreamweb/dreamweb.h
@@ -164,6 +164,7 @@ private:
const DreamWebGameDescription *_gameDescription;
Common::RandomSource _rnd;
Common::String _datafilePrefix;
+ Common::String _speechDirName;
uint _speed;
bool _turbo;
diff --git a/engines/dreamweb/monitor.cpp b/engines/dreamweb/monitor.cpp
index 95aa400c3a..25435ae0e9 100644
--- a/engines/dreamweb/monitor.cpp
+++ b/engines/dreamweb/monitor.cpp
@@ -626,15 +626,12 @@ void DreamWebEngine::signOn() {
_monAdX = prevX;
_monAdY = prevY;
- inputLine = (const char *)_inputLine;
- inputLine.toUppercase();
-
// The entered line has zeroes in-between each character
uint32 len = strlen(monitorKeyEntries[foundIndex].password);
bool found = true;
for (uint32 i = 0; i < len; i++) {
- if (monitorKeyEntries[foundIndex].password[i] != inputLine[i * 2]) {
+ if (monitorKeyEntries[foundIndex].password[i] != _inputLine[i * 2]) {
found = false;
break;
}
diff --git a/engines/dreamweb/saveload.cpp b/engines/dreamweb/saveload.cpp
index 5d7f02c5cf..d30bf754de 100644
--- a/engines/dreamweb/saveload.cpp
+++ b/engines/dreamweb/saveload.cpp
@@ -839,8 +839,9 @@ void DreamWebEngine::showOpBox() {
// 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())
+ // the game dialogs. It is included in the early UK CD release, which had
+ // similar data files as the floppy release (bug #3528160).
+ if (isCD() && getLanguage() != Common::EN_GRB)
showFrame(_saveGraphics, kOpsx, kOpsy + 55, 4, 0);
}
diff --git a/engines/dreamweb/sound.cpp b/engines/dreamweb/sound.cpp
index b51527a8cd..b3d5db9e0d 100644
--- a/engines/dreamweb/sound.cpp
+++ b/engines/dreamweb/sound.cpp
@@ -55,6 +55,7 @@ void DreamWebEngine::volumeAdjust() {
}
void DreamWebEngine::playChannel0(uint8 index, uint8 repeat) {
+ debug(1, "playChannel0(index:%d, repeat:%d)", index, repeat);
_channel0Playing = index;
if (index >= 12)
index -= 12;
@@ -72,6 +73,7 @@ void DreamWebEngine::playChannel1(uint8 index) {
}
void DreamWebEngine::cancelCh0() {
+ debug(1, "cancelCh0()");
_channel0Repeat = 0;
_channel0Playing = 255;
stopSound(0);
@@ -83,6 +85,7 @@ void DreamWebEngine::cancelCh1() {
}
void DreamWebEngine::loadRoomsSample() {
+ debug(1, "loadRoomsSample() _roomsSample:%d", _roomsSample);
uint8 sample = _roomsSample;
if (sample == 255 || _currentSample == sample)
@@ -177,7 +180,7 @@ bool DreamWebEngine::loadSpeech(const Common::String &filename) {
return false;
Common::File file;
- if (!file.open("speech/" + filename))
+ if (!file.open(_speechDirName + "/" + filename))
return false;
debug(1, "loadSpeech(%s)", filename.c_str());
@@ -190,6 +193,11 @@ bool DreamWebEngine::loadSpeech(const Common::String &filename) {
}
void DreamWebEngine::soundHandler() {
+ static uint8 volumeOld = 0, channel0Old = 0, channel0PlayingOld = 0;
+ if (_volume != volumeOld || _channel0 != channel0Old || _channel0Playing != channel0PlayingOld)
+ debug(1, "soundHandler() _volume: %d _channel0: %d _channel0Playing: %d", _volume, _channel0, _channel0Playing);
+ volumeOld = _volume, channel0Old = _channel0, channel0PlayingOld = _channel0Playing;
+
_subtitles = ConfMan.getBool("subtitles");
volumeAdjust();
@@ -230,6 +238,8 @@ void DreamWebEngine::soundHandler() {
}
}
if (!_mixer->isSoundHandleActive(_channelHandle[0])) {
+ if (_channel0Playing != 255 && _channel0 != 0)
+ debug(1, "!_mixer->isSoundHandleActive _channelHandle[0] _channel0Playing:%d _channel0:%d", _channel0Playing, _channel0);
_channel0Playing = 255;
_channel0 = 0;
}
@@ -237,7 +247,6 @@ void DreamWebEngine::soundHandler() {
_channel1Playing = 255;
_channel1 = 0;
}
-
}
void DreamWebEngine::loadSounds(uint bank, const Common::String &suffix) {