GLK: SCOTT: Add support for Questprobe Games

This commit is contained in:
Avijeet 2022-06-22 22:05:17 +05:30 committed by Eugene Sandulenko
parent b45eecac99
commit ff02ca6def
9 changed files with 203 additions and 3 deletions

View File

@ -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 }
};

View File

@ -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),

View File

@ -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

View File

@ -41,6 +41,7 @@ void claymorgue64Sysmess();
void adventurelandAction(int p);
void adventurelandDarkness();
void adventureland64Sysmess();
void spiderman64Sysmess();
} // End of namespace Scott
} // End of namespace Glk

View File

@ -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<Subtype>(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)
};

View File

@ -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() {

View File

@ -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;
}

View File

@ -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++) {

View File

@ -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: