diff --git a/engines/glk/scott/c64_checksums.cpp b/engines/glk/scott/c64_checksums.cpp index d4591660232..d18adf021fc 100644 --- a/engines/glk/scott/c64_checksums.cpp +++ b/engines/glk/scott/c64_checksums.cpp @@ -66,7 +66,7 @@ struct C64Rec { size_t _copySource; size_t _copyDest; size_t _copySize; - size_t _imgOffset; + int _imgOffset; }; static C64Rec g_C64Registry[] = { @@ -123,6 +123,10 @@ static C64Rec g_C64Registry[] = { { SAVAGE_ISLAND_C64, 0x2ab00, 0xc361, TYPE_D64, 1, "-f86 -d0x1793", "SAVAGE ISLAND P1", 1, 0, 0 }, // Savage Island part 1 C64 (D64) alt { SAVAGE_ISLAND2_C64, 0x2ab00, 0xc361, TYPE_D64, 1, nullptr, "SAVAGE ISLAND P2", 0, 0, 0 }, // Savage Island part 2 C64 (D64) alt + { HULK_C64, 0x2ab00, 0xcdd8, TYPE_D64, 0, nullptr, nullptr, 0, 0x1806, 0xb801, 0x307 }, // Questprobe 1 - The Hulk C64 (D64) + { SPIDERMAN_C64, 0x2ab00, 0xde56, TYPE_D64, 0, nullptr, nullptr, 0, 0x1801, 0xa801, 0x2000 }, // Spiderman C64 (D64) + { SPIDERMAN_C64, 0x08e72, 0xb2f4, TYPE_T64, 3, nullptr, nullptr, 0, 0, 0 }, // Spiderman C64 (T64) MasterCompressor / Relax -> ECA Compacker -> 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 0fb264d1fc1..aca72c330c2 100644 --- a/engines/glk/scott/detection_tables.h +++ b/engines/glk/scott/detection_tables.h @@ -189,6 +189,7 @@ const GlkDetectionEntry SCOTT_GAMES[] = { DT_ENTRYL1("gremlins", Common::DE_DEU, "C64", "e5d743d8727c8aca011a737bbb5ad818", 49155), DT_ENTRY1("seasofblood", "C64", "267c3fe2bb150365de0358f07b5df15c", 174848), DT_ENTRY1("seasofblood", "C64", "46280fb1d701a41492b8434467c31029", 41481), + DT_ENTRY1("marveladventure", "C64", "d80e133dd396565f773052cb317e8222", 174848), //Scott Adams DT_ENTRY1("adventureland", "C64", "05cf6c64ecde5288ae2e46099bfd19a3", 27152), diff --git a/engines/glk/scott/game_specific.cpp b/engines/glk/scott/game_specific.cpp index 90afef8554e..283a9458ac4 100644 --- a/engines/glk/scott/game_specific.cpp +++ b/engines/glk/scott/game_specific.cpp @@ -268,5 +268,58 @@ void adventureland64Sysmess() { _G(_sys)[SOMETHING] = "\" something. "; } +void spiderman64Sysmess() { + 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, + DROPPED, + TAKEN, + 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 < 42; 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 8916ddf4ced..75e0af0c67d 100644 --- a/engines/glk/scott/game_specific.h +++ b/engines/glk/scott/game_specific.h @@ -41,6 +41,7 @@ void claymorgue64Sysmess(); void adventurelandAction(int p); void adventurelandDarkness(); void adventureland64Sysmess(); +void spiderman64Sysmess(); } // End of namespace Scott } // End of namespace Glk diff --git a/engines/glk/scott/games.h b/engines/glk/scott/games.h index 071b17c0b21..d28ec4b060c 100644 --- a/engines/glk/scott/games.h +++ b/engines/glk/scott/games.h @@ -1779,5 +1779,134 @@ const GameInfo _games[NUMGAMES] = { 21, // number_of_pictures; C64B, // palette 3, // picture_format_version; + 0), + GameInfo("Questprobe 2: Spiderman", + SPIDERMAN, + NO_TYPE, // type + ENGLISH, // subtype + FOUR_LETTER_UNCOMPRESSED, // dictionary type + + 72, // Number of items + 257, // Number of actions + 124, // Number of words + 40, // Number of rooms + 12, // Max carried items + 4, // Word length + 99, // Number of messages + + 125, // number_of_verbs + 125, // number_of_nouns; + + 0x246b, // header + EARLY, // header style + + 0x3dd1, // room images + FOLLOWS, // item flags + FOLLOWS, // item images + + FOLLOWS, // actions + UNCOMPRESSED, + 0x5036, // dictionary + 0x5518, // start_of_room_descriptions; + 0x4eac, // start_of_room_connections; + 0x575e, // start_of_messages; + FOLLOWS, // start_of_item_descriptions; + 0x4fa2, // start_of_item_locations; + + 0x2553, // start_of_system_messages + 0x28f7, // start of directions + + 0x6296, // start_of_characters; + 0x6a96, // start_of_image_data + -0x3fe5, // image_address_offset + 41, // number_of_pictures; + ZXOPT, // palette + 2, // picture_format_version; + 0), + GameInfo("Questprobe 2: Spiderman C64", + SPIDERMAN_C64, + NO_TYPE, // type + static_cast(ENGLISH | C64), // subtype + FOUR_LETTER_UNCOMPRESSED, // dictionary type + + 72, // Number of items + 245, // Number of actions + 124, // Number of words + 40, // Number of rooms + 12, // Max carried items + 4, // Word length + 98, // Number of messages + + 118, // number_of_verbs + 124, // number_of_nouns; + + 0x4baf, // header + EARLY, // header style + + 0x4bc9, // room images + 0x70da, // item flags + FOLLOWS, // item images + + 0x4bf2, // actions + UNCOMPRESSED, + 0x5b52, // dictionary + 0x600c, // start_of_room_descriptions; + FOLLOWS, // start_of_room_connections; + FOLLOWS, // start_of_messages; + 0x6b9b, // start_of_item_descriptions; + FOLLOWS, // start_of_item_locations; + + 0x0a7b, // start_of_system_messages + 0x0a7b, // start of directions + + 0x716c, // start_of_characters; + 0x796c, // start_of_image_data + 0x716c, // image_address_offset + 41, // number_of_pictures; + C64B, // palette + 2, // picture_format_version; + 0), + GameInfo("Questprobe 1: The Hulk C64", HULK_C64, + NO_TYPE, // type + ENGLISH, // subtype + FOUR_LETTER_UNCOMPRESSED, // dictionary type + + 54, // Number of items + 261, // Number of actions + 128, // Number of words + 20, // Number of rooms + 10, // Max carried items + 4, // Word length + 99, // Number of messages + + 128, // number_of_verbs + 129, // number_of_nouns; + + 0x7867, // header + HULK_HEADER, // header style + + 0x2280, // room images + 0, // item flags + 0x22ba, // item images + + 0x8c47, // actions + HULK_ACTIONS, + 0x7884, // dictionary + 0x7d8d, // start_of_room_descriptions; + 0x9CD1, // start_of_room_connections; + 0x831E, // start_of_messages; + FOLLOWS, // start_of_item_descriptions; + 0x8AFD, // start_of_item_locations; + + // These are spread out all over the code + 0, // start_of_system_messages + 0xae25, // start of directions + + 0x0d01, // start_of_characters; + 0x2701, // start_of_image_data + 0, // image_address_offset + 43, // number_of_pictures; + C64B, // palette + 0, // picture_format_version; 0) }; diff --git a/engines/glk/scott/globals.cpp b/engines/glk/scott/globals.cpp index e96e435d6b9..49e094c84a3 100644 --- a/engines/glk/scott/globals.cpp +++ b/engines/glk/scott/globals.cpp @@ -124,6 +124,7 @@ Globals::Globals() : _sys(MAX_SYSMESS), _directions(NUMBER_OF_DIRECTIONS), _extr _md5Index.setVal("05cf6c64ecde5288ae2e46099bfd19a3", 31); // adventureland _md5Index.setVal("5af919881417920ec6a3961b4577f587", 32); // adventureland _md5Index.setVal("414d459ceb211230356ad823475866b3", 38); // savage island + _md5Index.setVal("d80e133dd396565f773052cb317e8222", 40); // questprobe hulk } Globals::~Globals() { diff --git a/engines/glk/scott/hulk.cpp b/engines/glk/scott/hulk.cpp index a0fe9dc87e2..299fc6416b5 100644 --- a/engines/glk/scott/hulk.cpp +++ b/engines/glk/scott/hulk.cpp @@ -415,6 +415,15 @@ int tryLoadingHulk(GameInfo info, int dictStart) { } ct++; } + + if (CURRENT_GAME == HULK_C64) { + _G(_hulkCoordinates) = 0x22cd; + _G(_hulkItemImageOffsets) = 0x2731; + _G(_hulkLookImageOffsets) = 0x2761; + _G(_hulkSpecialImageOffsets) = 0x2781; + _G(_hulkImageOffset) = -0x7ff; + } + return 1; } diff --git a/engines/glk/scott/load_game.cpp b/engines/glk/scott/load_game.cpp index b033078bb94..acae2f229e6 100644 --- a/engines/glk/scott/load_game.cpp +++ b/engines/glk/scott/load_game.cpp @@ -188,6 +188,9 @@ void loadGameFile(Common::SeekableReadStream *f) { case GREMLINS_SPANISH: loadExtraSpanishGremlinsData(); break; + case SPIDERMAN_C64: + spiderman64Sysmess(); + break; case HULK_C64: case HULK: for (int i = 0; i < 6; i++) { diff --git a/engines/glk/scott/scott.cpp b/engines/glk/scott/scott.cpp index 3a760a33d86..8a86ede52c6 100644 --- a/engines/glk/scott/scott.cpp +++ b/engines/glk/scott/scott.cpp @@ -1114,8 +1114,7 @@ ActionResultType Scott::performLine(int ct) { switch (CURRENT_GAME) { case SPIDERMAN: case SPIDERMAN_C64: - // TODO - // DrawBlack(); + drawBlack(); break; case SECRET_MISSION: case SECRET_MISSION_C64: