diff options
| -rw-r--r-- | engines/agi/agi.h | 31 | ||||
| -rw-r--r-- | engines/agi/cycle.cpp | 5 | ||||
| -rw-r--r-- | engines/agi/detection.cpp | 2 | 
3 files changed, 32 insertions, 6 deletions
diff --git a/engines/agi/agi.h b/engines/agi/agi.h index 0f792b37fe..d5959382ef 100644 --- a/engines/agi/agi.h +++ b/engines/agi/agi.h @@ -127,6 +127,10 @@ enum AgiGameType {  	GType_V3 = 2  }; +/* + * GF_OLDAMIGAV20 means that the interpreter is an old Amiga AGI interpreter that + * uses value 20 for the computer type (v20 i.e. vComputer) rather than the usual value 5. + */  enum AgiGameFeatures {  	GF_AGIMOUSE =    (1 << 0),  	GF_AGDS =        (1 << 1), @@ -136,7 +140,8 @@ enum AgiGameFeatures {  	GF_MACGOLDRUSH = (1 << 5),  	GF_FANMADE =     (1 << 6),  	GF_MENUS =		 (1 << 7), -	GF_ESCPAUSE =	 (1 << 8) +	GF_ESCPAUSE =	 (1 << 8), +	GF_OLDAMIGAV20 = (1 << 9)  };  struct AGIGameDescription; @@ -268,13 +273,31 @@ enum AgiMonitorType {  /**   * Different computer types.   * Used with AGI variable 20 i.e. vComputer. - * FIXME? As an exception Amiga's Space Quest I (Version 1.2, AGI 2.082) uses value 20. + * + * At least these Amiga AGI versions use value 5: + * 2.082 (King's Quest I v1.0U 1986) + * x.yyy (Black Cauldron v2.00 1987-06-14) + * x.yyy (Larry I v1.05 1987-06-26) + * 2.107 (King's Quest II v2.0J. Date is probably 1987-01-29) + * 2.310 (Police Quest I v2.0B 1989-02-22) + * 2.316 (Gold Rush! v2.05 1989-03-09) + * 2.333 (King's Quest III v2.15 1989-11-15) + * + * At least these Amiga AGI versions use value 20: + * 2.082 (Space Quest I v1.2 1986) + * + * TODO: Check Amiga version of King's Quest III (v1.01 1986-11-08, AGI 2.090). + *       This is a good candidate for testing as it uses quite an old Amiga AGI version. + * TODO: Check Amiga version of Space Quest II (v2.0F, AGI 2.202) because + *       it's a bit of an odd bird (e.g. uses a slightly different palette than others). + * TODO: Check Amiga versions of Manhunter I & II (I'd guess they use value 5 though).   */  enum AgiComputerType {  	kAgiComputerPC = 0,  	kAgiComputerAtariST = 4, -	kAgiComputerAmiga = 5, -	kAgiComputerApple2GS = 7 +	kAgiComputerAmiga = 5, // Newer Amiga AGI interpreters' value (Commonly used) +	kAgiComputerApple2GS = 7, +	kAgiComputerAmigaOld = 20 // Older Amiga AGI interpreters' value (Seldom used)  };  /** diff --git a/engines/agi/cycle.cpp b/engines/agi/cycle.cpp index 6953635ee1..1460632777 100644 --- a/engines/agi/cycle.cpp +++ b/engines/agi/cycle.cpp @@ -371,7 +371,10 @@ int AgiEngine::runGame() {  				setvar(vComputer, kAgiComputerAtariST);  				break;  			case Common::kPlatformAmiga: -				setvar(vComputer, kAgiComputerAmiga); +				if (getFeatures() & GF_OLDAMIGAV20) +					setvar(vComputer, kAgiComputerAmigaOld); +				else +					setvar(vComputer, kAgiComputerAmiga);  				break;  			case Common::kPlatformApple2GS:  				setvar(vComputer, kAgiComputerApple2GS); diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp index 7584780978..39442a5c8e 100644 --- a/engines/agi/detection.cpp +++ b/engines/agi/detection.cpp @@ -1471,7 +1471,7 @@ static const AGIGameDescription gameDescriptions[] = {  		},  		GID_SQ1,  		GType_V2, -		GF_MENUS, +		GF_MENUS | GF_OLDAMIGAV20,  		0x2440,  	},  | 
