aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/agi/agi.cpp4
-rw-r--r--engines/agi/detection.cpp165
-rw-r--r--engines/agi/id.cpp6
3 files changed, 170 insertions, 5 deletions
diff --git a/engines/agi/agi.cpp b/engines/agi/agi.cpp
index 174120eee9..e38be13a1f 100644
--- a/engines/agi/agi.cpp
+++ b/engines/agi/agi.cpp
@@ -372,8 +372,8 @@ int AgiEngine::agiInit() {
break;
case 3:
report("Emulating Sierra AGI v%x.002.%03x\n",
- (int)(loader->version() >> 12) & 0xF,
- (int)(loader->version()) & 0xFFF);
+ (int)(agiGetRelease() >> 12) & 0xF,
+ (int)(agiGetRelease()) & 0xFFF);
break;
}
diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp
index 26edb3bd46..e8df80d0fa 100644
--- a/engines/agi/detection.cpp
+++ b/engines/agi/detection.cpp
@@ -86,13 +86,54 @@ static const ADGameFileDescription AGI_KQ2_MAC_20R_GameFiles[] = {
{ NULL, 0, NULL}
};
+// Kings Quest III
+static const ADGameFileDescription AGI_KQ3_PC_101_GameFiles[] = {
+ { "logdir", 0, "9c2b34e7ffaa89c8e2ecfeb3695d444b"},
+ { NULL, 0, NULL}
+};
+static const ADGameFileDescription AGI_KQ3_PC_200_GameFiles[] = {
+ { "logdir", 0, "18aad8f7acaaff760720c5c6885b6bab"},
+ { NULL, 0, NULL}
+};
+static const ADGameFileDescription AGI_KQ3_PC_214A_GameFiles[] = {
+ { "logdir", 0, "7650e659c7bc0f1e9f8a410b7a2e9de6"},
+ { NULL, 0, NULL}
+};
+static const ADGameFileDescription AGI_KQ3_PC_214B_GameFiles[] = {
+ { "logdir", 0, "d3d17b77b3b3cd13246749231d9473cd"},
+ { NULL, 0, NULL}
+};
+
+// Kings Quest IV AGI v3
+static const ADGameFileDescription AGI_KQ4_PC_20_GameFiles[] = {
+ { "kq4dir", 0, "fe44655c42f16c6f81046fdf169b6337"},
+ { NULL, 0, NULL}
+};
+static const ADGameFileDescription AGI_KQ4_PC_22_GameFiles[] = {
+ { "kq4dir", 0, "7470b3aeb49d867541fc66cc8454fb7d"},
+ { NULL, 0, NULL}
+};
+
+// Groza : AGDS
+static const ADGameFileDescription AGI_Groza_PC_GameFiles[] = {
+ { "logdir", 0, "421da3a18004122a966d64ab6bd86d2e"},
+ { NULL, 0, NULL}
+};
+
+// Donald Ducks Playground
+static const ADGameFileDescription AGI_DDP_PC_10A_GameFiles[] = {
+ { "logdir", 0, "64388812e25dbd75f7af1103bc348596"},
+ { NULL, 0, NULL}
+};
+
+
static const AGIGameDescription gameDescriptions[] = {
{
// kings quest 1 : pc : 2.0F
{
"agi",
- "King's Quest 1 (PC 5.25\"/3.5\") 2.0F [AGI 2.917]",
+ "King's Quest 1 (PC) 2.0F [AGI 2.917]",
AGI_KQ1_PC_20F_GameFiles,
Common::EN_ANY,
Common::kPlatformPC,
@@ -136,7 +177,7 @@ static const AGIGameDescription gameDescriptions[] = {
// kings quest 2 : PC : 2.2
{
"agi",
- "King's Quest 2 (PC 5.25\"/3.5\") 2.2 [AGI 2.426]",
+ "King's Quest 2 (PC) 2.2 [AGI 2.426]",
AGI_KQ2_PC_22_GameFiles,
Common::EN_ANY,
Common::kPlatformPC,
@@ -174,6 +215,126 @@ static const AGIGameDescription gameDescriptions[] = {
0x2440,
},
+
+
+ {
+ // kings quest 3 : PC : 1.01
+ {
+ "agi",
+ "King's Quest 3 (PC) 1.01 11/08/86 [AGI 2.272]",
+ AGI_KQ3_PC_101_GameFiles,
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ },
+ GType_V2,
+ 0,
+ 0x2272,
+ },
+
+ {
+ // kings quest 3 : PC : 2.00
+ {
+ "agi",
+ "King's Quest 3 (PC) 2.00 5/25/87 [AGI 2.435]",
+ AGI_KQ3_PC_200_GameFiles,
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ },
+ GType_V2,
+ 0,
+ 0x2440,
+ },
+
+ {
+ // kings quest 3 : PC : 2.14-A
+ {
+ "agi",
+ "King's Quest 3 (PC) 2.14 3/15/88 [AGI 2.936]",
+ AGI_KQ3_PC_214A_GameFiles,
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ },
+ GType_V2,
+ 0,
+ 0x2936,
+ },
+
+ {
+ // kings quest 3 : PC : 2.14-B
+ {
+ "agi",
+ "King's Quest 3 (PC) 2.14 3/15/88 [AGI 2.936]",
+ AGI_KQ3_PC_214B_GameFiles,
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ },
+ GType_V2,
+ 0,
+ 0x2936,
+ },
+
+
+
+ {
+ // kings quest 4 : PC : 2.0
+ {
+ "agi",
+ "King's Quest 4 (PC) 2.0 7/27/88 [AGI 3.002.086]",
+ AGI_KQ4_PC_20_GameFiles,
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ },
+ GType_V3,
+ 0,
+ 0x3086,
+ },
+
+ {
+ // kings quest 4 : PC : 2.0
+ {
+ "agi",
+ "King's Quest 4 (PC) 2.2 9/27/88 [AGI 3.002.086]",
+ AGI_KQ4_PC_22_GameFiles,
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ },
+ GType_V3,
+ 0,
+ 0x3086,
+ },
+
+
+ // AGDS : GROZA
+ {
+ // kings quest 4 : PC : 2.0
+ {
+ "agi",
+ "Groza : Russian AGDS",
+ AGI_Groza_PC_GameFiles,
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ },
+ GType_V2,
+ AGI_AGDS,
+ 0x2440,
+ },
+
+
+ {
+ // Donald Ducks Playground : PC : 2.001 ** CURRENTLY UNSUPPORTED **
+ {
+ "agi",
+ "Donald Ducks Playground 1.0A ** UNSUPPORTED **",
+ AGI_DDP_PC_10A_GameFiles,
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ },
+ GType_V2,
+ 0,
+ 0x2089,
+ },
+
+
{ { NULL, NULL, NULL, Common::UNK_LANG, Common::kPlatformUnknown }, 0, 0, 0 }
};
diff --git a/engines/agi/id.cpp b/engines/agi/id.cpp
index 6878b5f5e7..22fced68b0 100644
--- a/engines/agi/id.cpp
+++ b/engines/agi/id.cpp
@@ -79,6 +79,8 @@ int AgiEngine::setup_v2_game(int ver, uint32 crc) {
if (opt.agds)
agiSetRelease(0x2440); /* ALL AGDS games built for 2.440 */
+ report("Seting up for version 0x%04X\n", ver);
+
switch (agiGetRelease()) {
case 0x2089:
logic_names_cmd[0x86].num_args = 0; /* quit: 0 args */
@@ -117,7 +119,9 @@ int AgiEngine::setup_v3_game(int ver, uint32 crc) {
if (opt.emuversion)
agiSetRelease(ver = opt.emuversion);
- switch (ver) {
+ report("Seting up for version 0x%04X\n", ver);
+
+ switch (agiGetRelease()) {
case 0x3086:
logic_names_cmd[0xad].num_args = 1; /* 173 : 1 args */
break;