From df2e4e8e2c02981b339235f4a429db5bb68ea4f4 Mon Sep 17 00:00:00 2001 From: Walter van Niftrik Date: Tue, 25 Jul 2017 13:53:44 +0200 Subject: ADL: Add hires3 support Game starts up, but isn't playable yet --- engines/adl/adl.cpp | 8 ++++++++ engines/adl/detection.cpp | 19 +++++++++++++++++++ engines/adl/detection.h | 1 + engines/adl/hires2.cpp | 18 ++++++++++++++++++ 4 files changed, 46 insertions(+) (limited to 'engines') 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 -- cgit v1.2.3