diff --git a/engines/glk/scott/c64_checksums.cpp b/engines/glk/scott/c64_checksums.cpp index 0d5094720e9..8a64138f3e2 100644 --- a/engines/glk/scott/c64_checksums.cpp +++ b/engines/glk/scott/c64_checksums.cpp @@ -97,11 +97,20 @@ static C64Rec g_C64Registry[] = { { GREMLINS_GERMAN_C64, 0xc003, 0x558c, TYPE_T64, 1, nullptr, nullptr, 0, 0xd801, 0xc6c0, 0x1f00 }, // German Gremlins C64 (T64) version * TBC Multicompactor v2.x { GREMLINS_GERMAN_C64, 0x2ab00, 0x6729, TYPE_D64, 2, nullptr, nullptr, 0, 0xdc02, 0xcac1, 0x1f00 }, // German Gremlins C64 (D64) version * Exomizer - {SEAS_OF_BLOOD_C64, 0xa209, 0xf115, TYPE_T64, 6, "-e0x1000", nullptr, 3, 0xd802, 0xb07c, 0x2000}, // Seas of Blood C64 (T64) MasterCompressor / Relax -> ECA + { SEAS_OF_BLOOD_C64, 0xa209, 0xf115, TYPE_T64, 6, "-e0x1000", nullptr, 3, 0xd802, 0xb07c, 0x2000 }, // Seas of Blood C64 (T64) MasterCompressor / Relax -> ECA // Compacker -> Unknown -> MasterCompressor / Relax -> ECA // Compacker -> CCS Packer - {SEAS_OF_BLOOD_C64, 0x2ab00, 0x5c1d, TYPE_D64, 1, nullptr, nullptr, 0, 0xd802, 0xb07c, 0x2000}, // Seas of Blood C64 (D64) CCS Packer - {SEAS_OF_BLOOD_C64, 0x2ab00, 0xe308, TYPE_D64, 1, nullptr, nullptr, 0, 0xd802, 0xb07c, 0x2000}, // Seas of Blood C64 (D64) alt CCS Packer + { SEAS_OF_BLOOD_C64, 0x2ab00, 0x5c1d, TYPE_D64, 1, nullptr, nullptr, 0, 0xd802, 0xb07c, 0x2000 }, // Seas of Blood C64 (D64) CCS Packer + { SEAS_OF_BLOOD_C64, 0x2ab00, 0xe308, TYPE_D64, 1, nullptr, nullptr, 0, 0xd802, 0xb07c, 0x2000 }, // Seas of Blood C64 (D64) alt CCS Packer + + { CLAYMORGUE_C64, 0x6ff7, 0xe4ed, TYPE_T64, 3, nullptr, nullptr, 0, 0x855, 0x7352, 0x20}, // Sorcerer Of Claymorgue Castle C64 (T64), MasterCompressor / Relax + // -> ECA Compacker -> MegaByte Cruncher v1.x Missing 17 pictures + { CLAYMORGUE_C64, 0x912f, 0xa69f, TYPE_T64, 1, nullptr, nullptr, 0, 0x855, 0x7352, 0x20}, // Sorcerer Of Claymorgue Castle C64 (T64) alt, MegaByte Cruncher + // v1.x Missing 17 pictures + { CLAYMORGUE_C64, 0xc0dd, 0x3701, TYPE_T64, 1, nullptr, nullptr, 0, 0, 0, 0, -0x7fe},// Sorcerer Of Claymorgue Castle C64 (T64) alt 2, Trilogic Expert + // v2.7 + { CLAYMORGUE_C64, 0xbc5f, 0x492c, TYPE_T64, 1, nullptr, nullptr, 0, 0x855, 0x7352, 0x20}, // Sorcerer Of Claymorgue Castle C64 (T64) alt 3, , Section8 Packer + { CLAYMORGUE_C64, 0x2ab00, 0xfd67, TYPE_D64, 1, nullptr, nullptr, 0, 0x855, 0x7352, 0x20}, // Sorcerer Of Claymorgue Castle C64 (D64), Section8 Packer { UNKNOWN_GAME, 0, 0, UNKNOWN_FILE_TYPE, 0, nullptr, nullptr, 0, 0, 0, 0 } }; diff --git a/engines/glk/scott/detection_tables.h b/engines/glk/scott/detection_tables.h index dc70db0f160..1b426b3eedc 100644 --- a/engines/glk/scott/detection_tables.h +++ b/engines/glk/scott/detection_tables.h @@ -189,6 +189,9 @@ const GlkDetectionEntry SCOTT_GAMES[] = { DT_ENTRY1("seasofblood", "C64", "267c3fe2bb150365de0358f07b5df15c", 174848), DT_ENTRY1("seasofblood", "C64", "46280fb1d701a41492b8434467c31029", 41481), + //Scott Adams + DT_ENTRY1("claymorguesorcerer","C64", "a1db488c49ad221fa0dc79591cb5a3db", 28663), + // 11 Mysterious Adventures DT_ENTRY1("mysadv1", "C64", "b4d8fc4eabed4f2400717303561ad0fa", 174848), DT_ENTRY1("mysadv2", "C64", "3ce5ea1a0473244bf469fd3c51f1dc48", 174848), diff --git a/engines/glk/scott/game_specific.cpp b/engines/glk/scott/game_specific.cpp index d10debe8a38..d56d6b5e9a3 100644 --- a/engines/glk/scott/game_specific.cpp +++ b/engines/glk/scott/game_specific.cpp @@ -134,5 +134,56 @@ void mysterious64Sysmess() { } } +void claymorgue64Sysmess() { + SysMessageType messagekey[] = { + NORTH, + SOUTH, + EAST, + WEST, + UP, + DOWN, + EXITS, + YOU_SEE, + YOU_ARE, + TOO_DARK_TO_SEE, + LIGHT_HAS_RUN_OUT, + LIGHT_RUNS_OUT_IN, + TURNS, + I_DONT_KNOW_HOW_TO, + SOMETHING, + I_DONT_KNOW_WHAT_A, + IS, + YOU_CANT_GO_THAT_WAY, + OK, + WHAT_NOW, + HUH, + YOU_HAVE_IT, + YOU_HAVENT_GOT_IT, + INVENTORY, + YOU_DONT_SEE_IT, + THATS_BEYOND_MY_POWER, + DANGEROUS_TO_MOVE_IN_DARK, + DIRECTION, + YOU_FELL_AND_BROKE_YOUR_NECK, + YOURE_CARRYING_TOO_MUCH, + IM_DEAD, + PLAY_AGAIN, + RESUME_A_SAVED_GAME, + IVE_STORED, + TREASURES, + ON_A_SCALE_THAT_RATES, + YOU_CANT_DO_THAT_YET, + I_DONT_UNDERSTAND, + NOTHING, + YOUVE_SOLVED_IT}; + + for (int i = 0; i < 40; i++) { + _G(_sys)[messagekey[i]] = _G(_systemMessages)[i]; + } + + _G(_sys)[I_DONT_KNOW_HOW_TO] = "I don't know how to \""; + _G(_sys)[SOMETHING] = "\" something. "; +} + } // End of namespace Scott } // End of namespace Glk diff --git a/engines/glk/scott/game_specific.h b/engines/glk/scott/game_specific.h index 9550c9843a3..d7ae6e881db 100644 --- a/engines/glk/scott/game_specific.h +++ b/engines/glk/scott/game_specific.h @@ -37,6 +37,7 @@ namespace Glk { namespace Scott { void mysterious64Sysmess(); +void claymorgue64Sysmess(); } // End of namespace Scott } // End of namespace Glk diff --git a/engines/glk/scott/games.h b/engines/glk/scott/games.h index b486e90a6cb..19bd1bce493 100644 --- a/engines/glk/scott/games.h +++ b/engines/glk/scott/games.h @@ -1446,5 +1446,89 @@ const GameInfo _games[NUMGAMES] = { 139, // number_of_pictures; C64B, // palette 4, // picture_format_version; + 0), + GameInfo("The Sorcerer of Claymorgue Castle", + CLAYMORGUE, + NO_TYPE, // type + ENGLISH, // subtype + FIVE_LETTER_UNCOMPRESSED, // dictionary type + + 75, // Number of items + 267, // Number of actions + 109, // Number of words + 32, // Number of rooms + 10, // Max carried items + 5, // Word length + 79, // Number of messages + + 110, // number_of_verbs + 108, // number_of_nouns; + + 0x246c, // header + EARLY, // header style + + 0x3bf6, // room images + FOLLOWS, // item flags + FOLLOWS, // item images + FOLLOWS, // actions + UNCOMPRESSED, + 0x4ecf, // dictionary + 0x53f7, // start_of_room_descriptions; + 0x4d6f, // start_of_room_connections; + 0x5605, // start_of_messages; + FOLLOWS, // start_of_item_descriptions; + 0x4e35, // start_of_item_locations; + + 0x24e2, // start_of_system_messages + 0x2877, // start of directions + + 0x6007, // start_of_characters; + 0x6807, // start_of_image_data + -0x3fe5, // image_address_offset + 37, // number_of_pictures; + ZXOPT, // palette + 1, // picture_format_version; + 0), + GameInfo("The Sorcerer of Claymorgue Castle C64", + CLAYMORGUE_C64, + NO_TYPE, // type + static_cast(ENGLISH | C64), // subtype + FIVE_LETTER_UNCOMPRESSED, // dictionary type + + 75, // Number of items + 265, // Number of actions + 108, // Number of words + 32, // Number of rooms + 10, // Max carried items + 5, // Word length + 79, // Number of messages + + 110, // number_of_verbs + 108, // number_of_nouns; + + 0x47d6, // header + EARLY, // header style + + 0x471f, // room images + FOLLOWS, // item flags + FOLLOWS, // item images + 0x47f0, // actions + UNCOMPRESSED, + 0x5891, // dictionary + FOLLOWS, // start_of_room_descriptions; + FOLLOWS, // start_of_room_connections; + FOLLOWS, // start_of_messages; + FOLLOWS, // start_of_item_descriptions; + FOLLOWS, // start_of_item_locations; + + 0xa2c, // start_of_system_messages + 0xa2c, // start of directions + + 0x6b1a, // start_of_characters; + 0x731a, // start_of_image_data + 0x6b1a, // image_address_offset + 44, // number_of_pictures; + C64B, // palette + 1, // picture_format_version; 0) }; diff --git a/engines/glk/scott/globals.cpp b/engines/glk/scott/globals.cpp index 5c08b2e361f..e42d9009da4 100644 --- a/engines/glk/scott/globals.cpp +++ b/engines/glk/scott/globals.cpp @@ -117,6 +117,7 @@ Globals::Globals() : _sys(MAX_SYSMESS), _directions(NUMBER_OF_DIRECTIONS), _extr _md5Index.setVal("e5d743d8727c8aca011a737bbb5ad818", 21); // gremlins _md5Index.setVal("267c3fe2bb150365de0358f07b5df15c", 24); // seas of blood _md5Index.setVal("46280fb1d701a41492b8434467c31029", 23); // seas of blood + _md5Index.setVal("a1db488c49ad221fa0dc79591cb5a3db", 26); // sorcerer of claymorgue castle } Globals::~Globals() { diff --git a/engines/glk/scott/load_game.cpp b/engines/glk/scott/load_game.cpp index 6b2be0cd01f..4897ace4378 100644 --- a/engines/glk/scott/load_game.cpp +++ b/engines/glk/scott/load_game.cpp @@ -143,6 +143,9 @@ void loadGameFile(Common::SeekableReadStream *f) { case SEAS_OF_BLOOD_C64: loadExtraSeasOfBlood64Data(); break; + case CLAYMORGUE_C64: + claymorgue64Sysmess(); + break; case GREMLINS_GERMAN_C64: loadExtraGermanGremlinsc64Data(); break;