aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/adl/adl.cpp8
-rw-r--r--engines/adl/detection.cpp19
-rw-r--r--engines/adl/detection.h1
-rw-r--r--engines/adl/hires2.cpp18
4 files changed, 46 insertions, 0 deletions
diff --git a/engines/adl/adl.cpp b/engines/adl/adl.cpp
index 2d2bee5ec1..61890af37a 100644
--- a/engines/adl/adl.cpp
+++ b/engines/adl/adl.cpp
@@ -251,6 +251,14 @@ void AdlEngine::loadWords(Common::ReadStream &stream, WordMap &map, Common::Stri
if (synonyms == 0xff)
break;
+ // WORKAROUND: Missing verb list terminator in hires3
+ if (_gameDescription->gameType == GAME_TYPE_HIRES3 && index == 72 && synonyms == 0)
+ return;
+
+ // WORKAROUND: Missing noun list terminator in hires3
+ if (_gameDescription->gameType == GAME_TYPE_HIRES3 && index == 113)
+ return;
+
// WORKAROUND: Missing noun list terminator in hires5 region 15
if (_gameDescription->gameType == GAME_TYPE_HIRES5 && _state.region == 15 && index == 81)
return;
diff --git a/engines/adl/detection.cpp b/engines/adl/detection.cpp
index daee30ff43..b05ebcf4fc 100644
--- a/engines/adl/detection.cpp
+++ b/engines/adl/detection.cpp
@@ -76,6 +76,7 @@ static const PlainGameDescriptor adlGames[] = {
{ "hires0", "Hi-Res Adventure #0: Mission Asteroid" },
{ "hires1", "Hi-Res Adventure #1: Mystery House" },
{ "hires2", "Hi-Res Adventure #2: Wizard and the Princess" },
+ { "hires3", "Hi-Res Adventure #3: Cranston Manor" },
{ "hires4", "Hi-Res Adventure #4: Ulysses and the Golden Fleece" },
{ "hires5", "Hi-Res Adventure #5: Time Zone" },
{ "hires6", "Hi-Res Adventure #6: The Dark Crystal" },
@@ -141,6 +142,20 @@ static const AdlGameDescription gameDescriptions[] = {
},
GAME_TYPE_HIRES0
},
+ { // Hi-Res Adventure #3: Cranston Manor - Apple II
+ {
+ "hires3", 0,
+ {
+ { "CRANSTON.D13", 0, "474d92b845337ec189867fac035304c7", 116480 },
+ AD_LISTEND
+ },
+ Common::EN_ANY,
+ Common::kPlatformApple2,
+ ADGF_UNSTABLE,
+ GUIO2(GAMEOPTION_COLOR_DEFAULT_ON, GAMEOPTION_SCANLINES)
+ },
+ GAME_TYPE_HIRES3
+ },
{ // Hi-Res Adventure #4: Ulysses and the Golden Fleece - Apple II - Load 'N' Go
{
"hires4", 0,
@@ -357,6 +372,7 @@ void AdlMetaEngine::removeSaveState(const char *target, int slot) const {
Engine *HiRes1Engine_create(OSystem *syst, const AdlGameDescription *gd);
Engine *HiRes2Engine_create(OSystem *syst, const AdlGameDescription *gd);
Engine *HiRes0Engine_create(OSystem *syst, const AdlGameDescription *gd);
+Engine *HiRes3Engine_create(OSystem *syst, const AdlGameDescription *gd);
Engine *HiRes4Engine_create(OSystem *syst, const AdlGameDescription *gd);
Engine *HiRes5Engine_create(OSystem *syst, const AdlGameDescription *gd);
Engine *HiRes6Engine_create(OSystem *syst, const AdlGameDescription *gd);
@@ -377,6 +393,9 @@ bool AdlMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameD
case GAME_TYPE_HIRES0:
*engine = HiRes0Engine_create(syst, adlGd);
break;
+ case GAME_TYPE_HIRES3:
+ *engine = HiRes3Engine_create(syst, adlGd);
+ break;
case GAME_TYPE_HIRES4:
*engine = HiRes4Engine_create(syst, adlGd);
break;
diff --git a/engines/adl/detection.h b/engines/adl/detection.h
index e3837060e9..cb147c7ff7 100644
--- a/engines/adl/detection.h
+++ b/engines/adl/detection.h
@@ -35,6 +35,7 @@ enum GameType {
GAME_TYPE_HIRES0,
GAME_TYPE_HIRES1,
GAME_TYPE_HIRES2,
+ GAME_TYPE_HIRES3,
GAME_TYPE_HIRES4,
GAME_TYPE_HIRES5,
GAME_TYPE_HIRES6
diff --git a/engines/adl/hires2.cpp b/engines/adl/hires2.cpp
index 9f76b0f49f..4575cf6854 100644
--- a/engines/adl/hires2.cpp
+++ b/engines/adl/hires2.cpp
@@ -170,6 +170,20 @@ void HiRes2Engine::runIntro() {
_disk->setSectorLimit(13);
}
+class HiRes3Engine : public HiResBaseEngine {
+public:
+ HiRes3Engine(OSystem *syst, const AdlGameDescription *gd);
+};
+
+HiRes3Engine::HiRes3Engine(OSystem *syst, const AdlGameDescription *gd) :
+ HiResBaseEngine(syst, gd, 138, 255, 36) {
+
+ const byte brokenRooms[] = { 18, 24, 54, 98, 102, 108 };
+
+ for (int i = 0; i < ARRAYSIZE(brokenRooms); ++i)
+ _brokenRooms.push_back(brokenRooms[i]);
+}
+
Engine *HiRes2Engine_create(OSystem *syst, const AdlGameDescription *gd) {
return new HiRes2Engine(syst, gd);
}
@@ -178,4 +192,8 @@ Engine *HiRes0Engine_create(OSystem *syst, const AdlGameDescription *gd) {
return new HiResBaseEngine(syst, gd, 43, 142, 2);
}
+Engine *HiRes3Engine_create(OSystem *syst, const AdlGameDescription *gd) {
+ return new HiRes3Engine(syst, gd);
+}
+
} // End of namespace Adl