diff options
Diffstat (limited to 'engines/kyra/detection.cpp')
| -rw-r--r-- | engines/kyra/detection.cpp | 229 | 
1 files changed, 213 insertions, 16 deletions
diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp index 344121b503..2d592069d2 100644 --- a/engines/kyra/detection.cpp +++ b/engines/kyra/detection.cpp @@ -26,6 +26,7 @@  #include "kyra/kyra_lok.h"  #include "kyra/kyra_hof.h"  #include "kyra/kyra_mr.h" +#include "kyra/lol.h"  #include "common/config-manager.h"  #include "common/advancedDetector.h" @@ -41,9 +42,11 @@ struct KYRAGameDescription {  namespace { -#define FLAGS(x, y, z, a, b, c, id) { Common::UNK_LANG, Common::kPlatformUnknown, x, y, z, a, b, c, id } +#define FLAGS(x, y, z, a, b, c, id) { Common::UNK_LANG, Common::UNK_LANG, Common::UNK_LANG, Common::kPlatformUnknown, x, y, z, a, b, c, id } +#define FLAGS_FAN(fanLang, repLang, x, y, z, a, b, c, id) { Common::UNK_LANG, fanLang, repLang, Common::kPlatformUnknown, x, y, z, a, b, c, id }  #define KYRA1_FLOPPY_FLAGS FLAGS(false, false, false, false, false, false, Kyra::GI_KYRA1) +#define KYRA1_FLOPPY_CMP_FLAGS FLAGS(false, false, false, false, false, true, Kyra::GI_KYRA1)  #define KYRA1_AMIGA_FLAGS FLAGS(false, false, false, false, false, false, Kyra::GI_KYRA1)  #define KYRA1_TOWNS_FLAGS FLAGS(false, true, false, false, false, false, Kyra::GI_KYRA1)  #define KYRA1_TOWNS_SJIS_FLAGS FLAGS(false, true, false, true, false, false, Kyra::GI_KYRA1) @@ -59,13 +62,38 @@ namespace {  #define KYRA2_TOWNS_SJIS_FLAGS FLAGS(false, false, false, true, false, false, Kyra::GI_KYRA2)  #define KYRA3_CD_FLAGS FLAGS(false, false, true, false, true, true, Kyra::GI_KYRA3) -#define KYRA3_CD_INS_FLAGS FLAGS(false, false, true, false, true, true, Kyra::GI_KYRA3) +#define KYRA3_CD_INS_FLAGS FLAGS(false, false, true, false, true, false, Kyra::GI_KYRA3) +#define KYRA3_CD_FAN_FLAGS(x, y) FLAGS_FAN(x, y, false, false, true, false, true, false, Kyra::GI_KYRA3) + +#define LOL_CD_FLAGS FLAGS(false, false, true, false, false, false, Kyra::GI_LOL)  const KYRAGameDescription adGameDescs[] = {  	{  		{  			"kyra1",  			0, +			AD_ENTRY1("DISK1.EXE", "c8641d0414d6c966d0a3dad79db07bf4"), +			Common::EN_ANY, +			Common::kPlatformPC, +			Common::ADGF_NO_FLAGS +		}, +		KYRA1_FLOPPY_CMP_FLAGS +	}, +	{ +		{ +			"kyra1", +			0, +			AD_ENTRY1("DISK1.EXE", "5d5cee4c3d0b68d586788b74243d254a"), +			Common::DE_DEU, +			Common::kPlatformPC, +			Common::ADGF_NO_FLAGS +		}, +		KYRA1_FLOPPY_CMP_FLAGS +	}, +	{ +		{ +			"kyra1", +			"Extracted",  			AD_ENTRY1("GEMCUT.EMC", "3c244298395520bb62b5edfe41688879"),  			Common::EN_ANY,  			Common::kPlatformPC, @@ -76,7 +104,7 @@ const KYRAGameDescription adGameDescs[] = {  	{  		{  			"kyra1", -			0, +			"Extracted",  			AD_ENTRY1("GEMCUT.EMC", "796e44863dd22fa635b042df1bf16673"),  			Common::EN_ANY,  			Common::kPlatformPC, @@ -87,7 +115,7 @@ const KYRAGameDescription adGameDescs[] = {  	{  		{  			"kyra1", -			0, +			"Extracted",  			AD_ENTRY1("GEMCUT.EMC", "abf8eb360e79a6c2a837751fbd4d3d24"),  			Common::FR_FRA,  			Common::kPlatformPC, @@ -98,7 +126,7 @@ const KYRAGameDescription adGameDescs[] = {  	{  		{  			"kyra1", -			0, +			"Extracted",  			AD_ENTRY1("GEMCUT.EMC", "6018e1dfeaca7fe83f8d0b00eb0dd049"),  			Common::DE_DEU,  			Common::kPlatformPC, @@ -109,7 +137,7 @@ const KYRAGameDescription adGameDescs[] = {  	{ // from Arne.F  		{  			"kyra1", -			0, +			"Extracted",  			AD_ENTRY1("GEMCUT.EMC", "f0b276781f47c130f423ec9679fe9ed9"),  			Common::DE_DEU,  			Common::kPlatformPC, @@ -120,7 +148,7 @@ const KYRAGameDescription adGameDescs[] = {  	{ // from VooD  		{  			"kyra1", -			0, +			"Extracted",  			AD_ENTRY1("GEMCUT.EMC", "8909b41596913b3f5deaf3c9f1017b01"),  			Common::ES_ESP,  			Common::kPlatformPC, @@ -131,7 +159,7 @@ const KYRAGameDescription adGameDescs[] = {  	{ // floppy 1.8 from clemmy  		{  			"kyra1", -			0, +			"Extracted",  			AD_ENTRY1("GEMCUT.EMC", "747861d2a9c643c59fdab570df5b9093"),  			Common::ES_ESP,  			Common::kPlatformPC, @@ -142,7 +170,7 @@ const KYRAGameDescription adGameDescs[] = {  	{ // from gourry  		{  			"kyra1", -			0, +			"Extracted",  			AD_ENTRY1("GEMCUT.EMC", "ef08c8c237ee1473fd52578303fc36df"),  			Common::IT_ITA,  			Common::kPlatformPC, @@ -323,7 +351,7 @@ const KYRAGameDescription adGameDescs[] = {  		KYRA2_FLOPPY_CMP_FLAGS  	}, -	{ // // Floppy version extracted +	{ // Floppy version extracted  		{  			"kyra2",  			"Extracted", @@ -463,6 +491,28 @@ const KYRAGameDescription adGameDescs[] = {  		},  		KYRA2_TOWNS_SJIS_FLAGS  	}, +	{ // PC-9821 +		{ +			"kyra2", +			0, +			AD_ENTRY1("WSCORE.PAK", "c44de1302b67f27d4707409987b7a685"), +			Common::EN_ANY, +			Common::kPlatformPC98, +			Common::ADGF_NO_FLAGS +		}, +		KYRA2_TOWNS_FLAGS +	}, +	{ +		{ +			"kyra2", +			0, +			AD_ENTRY1("WSCORE.PAK", "c44de1302b67f27d4707409987b7a685"), +			Common::JA_JPN, +			Common::kPlatformPC98, +			Common::ADGF_NO_FLAGS +		}, +		KYRA2_TOWNS_SJIS_FLAGS +	},  	// Kyra3 @@ -480,7 +530,7 @@ const KYRAGameDescription adGameDescs[] = {  			Common::kPlatformPC,  			Common::ADGF_DROPLANGUAGE  		}, -		KYRA3_CD_INS_FLAGS +		KYRA3_CD_FLAGS  	},  	{  		{ @@ -495,7 +545,7 @@ const KYRAGameDescription adGameDescs[] = {  			Common::kPlatformPC,  			Common::ADGF_DROPLANGUAGE  		}, -		KYRA3_CD_INS_FLAGS +		KYRA3_CD_FLAGS  	},  	{  		{ @@ -510,7 +560,7 @@ const KYRAGameDescription adGameDescs[] = {  			Common::kPlatformPC,  			Common::ADGF_DROPLANGUAGE  		}, -		KYRA3_CD_INS_FLAGS +		KYRA3_CD_FLAGS  	},  	// installed version @@ -527,7 +577,7 @@ const KYRAGameDescription adGameDescs[] = {  			Common::kPlatformPC,  			Common::ADGF_DROPLANGUAGE  		}, -		KYRA3_CD_FLAGS +		KYRA3_CD_INS_FLAGS  	},  	{  		{ @@ -542,7 +592,7 @@ const KYRAGameDescription adGameDescs[] = {  			Common::kPlatformPC,  			Common::ADGF_DROPLANGUAGE  		}, -		KYRA3_CD_FLAGS +		KYRA3_CD_INS_FLAGS  	},  	{  		{ @@ -557,9 +607,152 @@ const KYRAGameDescription adGameDescs[] = {  			Common::kPlatformPC,  			Common::ADGF_DROPLANGUAGE  		}, -		KYRA3_CD_FLAGS +		KYRA3_CD_INS_FLAGS +	}, + +	// Spanish fan translation, see fr#1994040 "KYRA3: Add support for Spanish fan translation" +	{ +		{ +			"kyra3", +			0, +			{ +				{ "ONETIME.PAK", 0, "9aaca21d2a205ca02ec53132f2911794", -1 }, +				{ "AUD.PAK", 0, 0, -1 }, +				{ 0, 0, 0, 0 } +			}, +			Common::ES_ESP, +			Common::kPlatformPC, +			Common::ADGF_DROPLANGUAGE +		}, +		KYRA3_CD_FAN_FLAGS(Common::ES_ESP, Common::EN_ANY) +	}, +	{ +		{ +			"kyra3", +			0, +			{ +				{ "ONETIME.PAK", 0, "9aaca21d2a205ca02ec53132f2911794", -1 }, +				{ "AUD.PAK", 0, 0, -1 }, +				{ 0, 0, 0, 0 } +			}, +			Common::DE_DEU, +			Common::kPlatformPC, +			Common::ADGF_DROPLANGUAGE +		}, +		KYRA3_CD_FAN_FLAGS(Common::ES_ESP, Common::EN_ANY) +	}, +	{ +		{ +			"kyra3", +			0, +			{ +				{ "ONETIME.PAK", 0, "9aaca21d2a205ca02ec53132f2911794", -1 }, +				{ "AUD.PAK", 0, 0, -1 }, +				{ 0, 0, 0, 0 } +			}, +			Common::FR_FRA, +			Common::kPlatformPC, +			Common::ADGF_DROPLANGUAGE +		}, +		KYRA3_CD_FAN_FLAGS(Common::ES_ESP, Common::EN_ANY)  	}, +	// Itlian fan translation, see fr#2003504 "KYRA: add support for Italian version of Kyrandia 2&3" +	{ +		{ +			"kyra3", +			0, +			{ +				{ "ONETIME.PAK", 0, "ee2d4d056a5de5333a3c6bda055b3cb4", -1 }, +				{ "AUD.PAK", 0, 0, -1 }, +				{ 0, 0, 0, 0 } +			}, +			Common::EN_ANY, +			Common::kPlatformPC, +			Common::ADGF_DROPLANGUAGE +		}, +		KYRA3_CD_FAN_FLAGS(Common::IT_ITA, Common::FR_FRA) +	}, +	{ +		{ +			"kyra3", +			0, +			{ +				{ "ONETIME.PAK", 0, "ee2d4d056a5de5333a3c6bda055b3cb4", -1 }, +				{ "AUD.PAK", 0, 0, -1 }, +				{ 0, 0, 0, 0 } +			}, +			Common::DE_DEU, +			Common::kPlatformPC, +			Common::ADGF_DROPLANGUAGE +		}, +		KYRA3_CD_FAN_FLAGS(Common::IT_ITA, Common::FR_FRA) +	}, +	{ +		{ +			"kyra3", +			0, +			{ +				{ "ONETIME.PAK", 0, "ee2d4d056a5de5333a3c6bda055b3cb4", -1 }, +				{ "AUD.PAK", 0, 0, -1 }, +				{ 0, 0, 0, 0 } +			}, +			Common::IT_ITA, +			Common::kPlatformPC, +			Common::ADGF_DROPLANGUAGE +		}, +		KYRA3_CD_FAN_FLAGS(Common::IT_ITA, Common::FR_FRA) +	}, +	 +	// Lands of Lore CD +	{ +		{ +			"lol", +			"CD", +			{ +				{ "GENERAL.PAK", 0, "05a4f588fb81dc9c0ef1f2ec20d89e24", -1 }, +				{ "L01.PAK", 0, "759a0ac26808d77ea968bd392355ba1d", -1 }, +				{ 0, 0, 0, 0 } +			}, +			Common::EN_ANY, +			Common::kPlatformPC, +			Common::ADGF_DROPLANGUAGE | Common::ADGF_CD +		}, +		LOL_CD_FLAGS +	}, +	 +	{ +		{ +			"lol", +			"CD", +			{ +				{ "GENERAL.PAK", 0, "05a4f588fb81dc9c0ef1f2ec20d89e24", -1 }, +				{ "L01.PAK", 0, "759a0ac26808d77ea968bd392355ba1d", -1 }, +				{ 0, 0, 0, 0 } +			}, +			Common::DE_DEU, +			Common::kPlatformPC, +			Common::ADGF_DROPLANGUAGE | Common::ADGF_CD +		}, +		LOL_CD_FLAGS +	}, +	 +	{ +		{ +			"lol", +			"CD", +			{ +				{ "GENERAL.PAK", 0, "05a4f588fb81dc9c0ef1f2ec20d89e24", -1 }, +				{ "L01.PAK", 0, "759a0ac26808d77ea968bd392355ba1d", -1 }, +				{ 0, 0, 0, 0 } +			}, +			Common::FR_FRA, +			Common::kPlatformPC, +			Common::ADGF_DROPLANGUAGE | Common::ADGF_CD +		}, +		LOL_CD_FLAGS +	}, +	  	{ AD_TABLE_END_MARKER, FLAGS(0, 0, 0, 0, 0, 0, 0) }  }; @@ -567,6 +760,7 @@ const PlainGameDescriptor gameList[] = {  	{ "kyra1", "The Legend of Kyrandia" },  	{ "kyra2", "The Legend of Kyrandia: The Hand of Fate" },  	{ "kyra3", "The Legend of Kyrandia: Malcolm's Revenge" }, +	{ "lol", "Lands of Lore: The Throne of Chaos" },  	{ 0, 0 }  }; @@ -639,6 +833,9 @@ bool KyraMetaEngine::createInstance(OSystem *syst, Engine **engine, const Common  	case Kyra::GI_KYRA3:  		*engine = new Kyra::KyraEngine_MR(syst, flags);  		break; +	case Kyra::GI_LOL: +		*engine = new Kyra::LoLEngine(syst, flags); +		break;  	default:  		res = false;  		warning("Kyra engine: unknown gameID");  | 
