/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 * $URL$
 * $Id$
 *
 */

#ifndef __GAMES_H__
#define	__GAMES_H__

#define curItemVersion sysMakeROMVersion(3,5,8,0,0)	// Parallaction engine


#define itemVersion_357 sysMakeROMVersion(3,5,7,0,0)	// Added : Apple IIgs
#define itemVersion_356 sysMakeROMVersion(3,5,6,0,0)	// Changed : Simon -> AGOS
#define itemVersion_355 sysMakeROMVersion(3,5,5,0,0)	// Added : AGI engine
#define itemVersion_354 sysMakeROMVersion(3,5,4,0,0)	// Added : Default/Auto music driver
#define itemVersion_353 sysMakeROMVersion(3,5,3,0,0)	// Added : CinE engine and 3DO platform
#define itemVersion_352 sysMakeROMVersion(3,5,2,0,0)	// Added : Lure engine
#define itemVersion_351 sysMakeROMVersion(3,5,1,0,0)	// Added : Sega CD platform
#define itemVersion_350 sysMakeROMVersion(3,5,0,0,0)
#define itemVersion_340 sysMakeROMVersion(3,4,0,0,0)
#define itemVersion_330 sysMakeROMVersion(3,3,0,0,0)
#define itemVersion_320 sysMakeROMVersion(3,2,0,0,0)
#define itemVersion_310 sysMakeROMVersion(3,1,0,0,0)
#define itemVersion_300 sysMakeROMVersion(3,0,0,0,0)
#define itemVersion_270 sysMakeROMVersion(2,7,0,0,0)
#define itemVersion_260 sysMakeROMVersion(2,6,0,0,0)
#define itemVersion_250 sysMakeROMVersion(2,5,0,0,0)
#define itemVersion_200 sysMakeROMVersion(2,0,0,0,0)

// old config structs
typedef struct {
	UInt32	version;
	UInt16	icnID;			// icon to display on the list
	Boolean	selected;

	Char	nameP[50];		// game name to display in list
	Char	pathP[150];		// path to the game files
	Char	gameP[10];		// scumm name of the game
	UInt16	gfxMode;

	Boolean autoLoad;
	UInt16 loadSlot;
	Boolean bootParam;
	UInt16 bootValue;
	Boolean amiga;
	Boolean subtitles;
	Boolean talkSpeed;
	UInt16 talkValue;
	UInt8 language;

} GameInfoTypeV0;

typedef struct {
	UInt32	version;
	UInt16	icnID;			// icon to display on the list
	Boolean	selected;

	Char	nameP[50];		// game name to display in list
	Char	pathP[150];		// path to the game files
	Char	gameP[10];		// scumm name of the game
	UInt16	gfxMode;

	Boolean autoLoad;
	Boolean bootParam;
	Boolean setPlatform;
	Boolean subtitles;
	Boolean talkSpeed;

	UInt16 loadSlot;
	UInt16 bootValue;
	UInt16 talkValue;
	UInt8 platform;
	UInt8 language;

} GameInfoTypeV2;


// Current config
typedef struct {
	struct {
		UInt16 palm;
		UInt16 music;
		UInt16 sfx;		// TODO : remove
		UInt16 speech;
		UInt16 audiocd;
	} volume;

	struct {
		// midi
		Boolean multiMidi;
		Boolean music;		// TODO : rename this, it is enable audio option
		UInt8 drvMusic;
		UInt8 tempo;
		// sound FX
		Boolean sfx;		// TODO : remove this
		UInt8 rate;
		// CD audio
		Boolean CD;
		UInt8 drvCD, frtCD;
		UInt16 defaultTrackLength;
		UInt16 firstTrack;
	} sound;
} MusicInfoType;

typedef struct {
	UInt32	version;
	UInt16	icnID;			// icon to display on the list
	Boolean	selected;

	Char	nameP[50];		// game name to display in list
	Char	pathP[150];		// path to the game files
	Char	gameP[15];		// scumm name of the game
	UInt16	gfxMode;

	Boolean autoLoad;
	Boolean bootParam;
	Boolean setPlatform;
	Boolean subtitles;
	Boolean talkSpeed;

	UInt16 loadSlot;
	UInt16 bootValue;
	UInt16 talkValue;
	UInt8 platform;
	UInt8 language;			// |-	v2.5

	Boolean filter;			//		v2.6
	Boolean fullscreen;		// |
	Boolean aspectRatio;	// |-	v2.7

	MusicInfoType musicInfo;//		v3.0

	UInt8 engine;			// |-	v3.1
	UInt8 renderMode;		// |-	v3.2
//	Boolean use16Bit;		// |-	v3.3	// removed
	UInt8 fmQuality;		// |-	v3.4	// replace use16Bit
} GameInfoType;

enum {
	ENGINE_AGOS = 0,
	ENGINE_SKY,
	ENGINE_SWORD1,
	ENGINE_SWORD2,
	ENGINE_CINE,
	ENGINE_QUEEN,
	ENGINE_LURE,
	ENGINE_GOB,
	ENGINE_KYRA,
	ENGINE_PARALLACTION,
	ENGINE_SAGA,
	ENGINE_SCUMM,
	ENGINE_AGI,
	ENGINE_TOUCHE,
	ENGINE_CRUISE,
	ENGINE_DRASCULA,
	ENGINE_IGOR,
	ENGINE_COUNT
};

static const struct {
	const char *fileP;
	const char *nameP;
} engines[] = {
	{ "agos",			"AGOS Engine" },
	{ "sky",			"Beneath a Steel Sky" },
	{ "sword1",			"Broken Sword I" },
	{ "sword2",			"Broken Sword II" },
	{ "cine",			"Delphine Cinematique v1.0" },
	{ "queen",			"Flight of the Amazon Queen" },
	{ "lure",			"Lure of the Tempress" },
	{ "gob",			"Gobliiins, Bargon Attack and more" },
	{ "kyra",			"Kyrandia" },
	{ "parallaction",	"Parallaction" },
	{ "saga",			"SAGA Engine" },
	{ "scumm",			"Scumm Games" },
	{ "agi",			"Sierra AGI" },
	{ "touche",			"Touche: The Adventures of the Fifth Musketeer" },
	{ "cruise",			"Beta -> Cruise for a Corpse" },
	{ "drascula",		"Beta -> Drascula" },
	{ "igor",			"Beta -> Igor" },
};

// protos
Err		GamOpenDatabase		();
void	GamImportDatabase	();
void	GamCloseDatabase	(Boolean ignoreCardParams);
Err		GamSortList			();
UInt16	GamGetSelected		();
void	GamUnselect			();
Boolean GamJumpTo			(Char letter);

extern DmOpenRef gameDB;

#endif