[Scummvm-cvs-logs] CVS: scummvm/saga animation.cpp,1.36,1.37 font.cpp,1.24,1.25 game.cpp,1.49,1.50 game.h,1.16,1.17 ihnm_introproc.cpp,1.37,1.38 interface.cpp,1.55,1.56 interface.h,1.24,1.25 isomap.cpp,1.25,1.26 ite_introproc.cpp,1.45,1.46 render.cpp,1.47,1.48 saga.cpp,1.84,1.85 saga.h,1.67,1.68 scene.cpp,1.78,1.79 script.cpp,1.44,1.45 sfuncs.cpp,1.74,1.75 sndres.cpp,1.37,1.38 sndres.h,1.19,1.20

Andrew Kurushin h00ligan at users.sourceforge.net
Sun Jan 9 15:42:17 CET 2005


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14951

Modified Files:
	animation.cpp font.cpp game.cpp game.h ihnm_introproc.cpp 
	interface.cpp interface.h isomap.cpp ite_introproc.cpp 
	render.cpp saga.cpp saga.h scene.cpp script.cpp sfuncs.cpp 
	sndres.cpp sndres.h 
Log Message:
- GameModule is gone
- structures renamed
- SagaEngine class gives all current game descriptions
regression : "verb" is broken cause work in  progress

Index: animation.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/animation.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- animation.cpp	3 Jan 2005 17:39:20 -0000	1.36
+++ animation.cpp	9 Jan 2005 23:41:20 -0000	1.37
@@ -180,14 +180,10 @@
 	uint16 frame;
 	int result;
 
-	GAME_DISPLAYINFO disp_info;
-
 	if (anim_id >= _anim_count) {
 		return FAILURE;
 	}
 
-	_vm->getDisplayInfo(&disp_info);
-
 	_vm->_render->getBufferInfo(&buf_info);
 	display_buf = buf_info.bg_buf;
 
@@ -207,7 +203,7 @@
 		if (_vm->_gameType == GType_ITE) {
 			// FIXME: if start > 0, then this works incorrectly
 			result = ITE_DecodeFrame(anim->resdata, anim->resdata_len, anim->frame_offsets[frame], display_buf,
-									disp_info.logical_w * disp_info.logical_h);
+									_vm->getDisplayWidth() * _vm->getDisplayHeight());
 			if (result != SUCCESS) {
 				warning("Anim::play: Error decoding frame %u", anim->current_frame);
 				anim->state = ANIM_PAUSE;
@@ -219,7 +215,7 @@
 				return FAILURE;
 			}
 
-			result = IHNM_DecodeFrame(display_buf,  disp_info.logical_w * disp_info.logical_h,
+			result = IHNM_DecodeFrame(display_buf,  _vm->getDisplayWidth() * _vm->getDisplayHeight(),
 									anim->cur_frame_p, anim->cur_frame_len, &nextf_p, &nextf_len);
 			if (result != SUCCESS) {
 				warning("Anim::play: Error decoding frame %u", anim->current_frame);
@@ -633,9 +629,6 @@
 	byte *outbuf_endp = (decode_buf + decode_buf_len) - 1;
 	size_t outbuf_remain = decode_buf_len;
 
-	GAME_DISPLAYINFO di;
-
-	_vm->getDisplayInfo(&di);
 
 	*nextf_p = NULL;
 
@@ -668,7 +661,7 @@
 				x_origin = param1;
 				y_origin = param2;
 
-				outbuf_p = decode_buf + x_origin + (y_origin * di.logical_w);
+				outbuf_p = decode_buf + x_origin + (y_origin * _vm->getDisplayWidth());
 
 				if (outbuf_p > outbuf_endp) {
 					warning("0x%02X: (0x%X) Invalid output position. (x: %d, y: %d)",
@@ -738,7 +731,7 @@
 			x_vector = readS.readSint16();
 			new_row = readS.readSint16();
 
-			outbuf_p = decode_buf + ((y_origin + new_row) * di.logical_w) + x_origin + x_vector;
+			outbuf_p = decode_buf + ((y_origin + new_row) * _vm->getDisplayWidth()) + x_origin + x_vector;
 			outbuf_remain = (outbuf_endp - outbuf_p) + 1;
 			continue;
 			break;

Index: font.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/font.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- font.cpp	9 Jan 2005 21:36:20 -0000	1.24
+++ font.cpp	9 Jan 2005 23:41:21 -0000	1.25
@@ -33,7 +33,6 @@
 namespace Saga {
 
 Font::Font(SagaEngine *vm) : _vm(vm), _initialized(false) {
-	GAME_FONTDESC *gamefonts;
 	int i;
 
 	// Load font module resource context 
@@ -42,10 +41,9 @@
 		error("Font::Font(): Couldn't get resource context.");
 	}
 
-	// Allocate font table
-	_vm->getFontInfo(&gamefonts, &_nFonts);
+	assert(_vm->getFontsCount() > 0);
 
-	assert(_nFonts > 0);
+	_nFonts = _vm->getFontsCount();
 
 	_fonts = (FONT **)malloc(_nFonts * sizeof(*_fonts));
 	if (_fonts == NULL) {
@@ -53,7 +51,7 @@
 	}
 
 	for (i = 0; i < _nFonts; i++) {
-		loadFont(gamefonts[i].font_rn, gamefonts[i].font_id);
+		loadFont(_vm->getFontDescription(i)->font_rn, _vm->getFontDescription(i)->font_id);
 	}
 
 	_initialized = true;

Index: game.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/game.cpp,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- game.cpp	9 Jan 2005 16:43:57 -0000	1.49
+++ game.cpp	9 Jan 2005 23:41:21 -0000	1.50
@@ -44,29 +44,29 @@
 
 // Inherit the Earth - DOS Demo version
 
-static GAME_FILEDESC ITEDEMO_GameFiles[] = {
+static GameFileDescription ITEDEMO_GameFiles[] = {
 	{"ite.rsc", GAME_RESOURCEFILE},
 	{"ite.dmo", GAME_DEMOFILE},
 	{"scripts.rsc", GAME_SCRIPTFILE},
 	{"voices.rsc", GAME_SOUNDFILE | GAME_VOICEFILE}
 };
 
-static GAME_FONTDESC ITEDEMO_GameFonts[] = {
+static GameFontDescription ITEDEMO_GameFonts[] = {
 	{GAME_FONT_SMALL, 0},
 	{GAME_FONT_MEDIUM, 1}
 }; 
 
-static GAME_SOUNDINFO ITEDEMO_GameSound = {
+static GameSoundInfo ITEDEMO_GameSound = {
 	GAME_SOUND_VOC, 0, 0, 0
 };
 
-static GAME_FONTDESC ITEMACDEMO_GameFonts[] = {
+static GameFontDescription ITEMACDEMO_GameFonts[] = {
 	{GAME_FONT_MEDIUM, 0},
 	{GAME_FONT_SMALL, 2}
 }; 
 
 // Inherit the Earth - Wyrmkeep Win32 Demo version
-static GAME_FILEDESC ITEWINDEMO_GameFiles[] = {
+static GameFileDescription ITEWINDEMO_GameFiles[] = {
 	{"ited.rsc", GAME_RESOURCEFILE},
 	{"scriptsd.rsc", GAME_SCRIPTFILE},
 	{"soundsd.rsc", GAME_SOUNDFILE},
@@ -74,7 +74,7 @@
 };
 
 // Inherit the Earth -  Wyrmkeep Linux Demo version
-static GAME_FILEDESC ITELINDEMO_GameFiles[] = {
+static GameFileDescription ITELINDEMO_GameFiles[] = {
 	{"ited.rsc", GAME_RESOURCEFILE},
 	{"scriptsd.rsc", GAME_SCRIPTFILE},
 	{"soundsd.rsc", GAME_SOUNDFILE},
@@ -83,7 +83,7 @@
 };
 
 // Inherit the Earth -  Wyrmkeep Linux version
-static GAME_FILEDESC ITELINCD_GameFiles[] = {
+static GameFileDescription ITELINCD_GameFiles[] = {
 	{"ite.rsc", GAME_RESOURCEFILE},
 	{"scripts.rsc", GAME_SCRIPTFILE},
 	{"sounds.rsc", GAME_SOUNDFILE},
@@ -91,13 +91,13 @@
 	{"music.rsc", GAME_MUSICFILE}
 };
 
-static GAME_FONTDESC ITEWINDEMO_GameFonts[] = {
+static GameFontDescription ITEWINDEMO_GameFonts[] = {
 	{GAME_FONT_MEDIUM, 0},
 	{GAME_FONT_SMALL, 2}
 }; 
 
 // Inherit the Earth - Mac Wyrmkeep version
-static GAME_FILEDESC ITEMACCD_GameFiles[] = {
+static GameFileDescription ITEMACCD_GameFiles[] = {
 	{"ite.rsc", GAME_RESOURCEFILE},
 	{"scripts.rsc", GAME_SCRIPTFILE},
 	{"sounds.rsc", GAME_SOUNDFILE},
@@ -106,44 +106,44 @@
 };
 
 // Inherit the Earth - Diskette version
-static GAME_FILEDESC ITEDISK_GameFiles[] = {
+static GameFileDescription ITEDISK_GameFiles[] = {
 	{"ite.rsc", GAME_RESOURCEFILE},
 	{"scripts.rsc", GAME_SCRIPTFILE},
 	{"voices.rsc", GAME_SOUNDFILE | GAME_VOICEFILE}
 };
 
-static GAME_FONTDESC ITEDISK_GameFonts[] = {
+static GameFontDescription ITEDISK_GameFonts[] = {
 	{GAME_FONT_MEDIUM, 0},
 	{GAME_FONT_LARGE, 1},
 	{GAME_FONT_SMALL, 2}
 };
 
-static GAME_RESOURCEDESC ITE_Resources = {
+static GameResourceDescription ITE_Resources = {
 	RID_ITE_SCENE_LUT,  // Scene lookup table RN
 	RID_ITE_SCRIPT_LUT, // Script lookup table RN
 	RID_ITE_COMMAND_PANEL,
 	RID_ITE_DIALOGUE_PANEL
 };
 
-static GAME_SOUNDINFO ITE_GameSound = {
+static GameSoundInfo ITE_GameSound = {
 	GAME_SOUND_VOC, 0, 0, 0
 };
 
 // Inherit the Earth - CD Enhanced version
-static GAME_FILEDESC ITECD_GameFiles[] = {
+static GameFileDescription ITECD_GameFiles[] = {
 	{"ite.rsc", GAME_RESOURCEFILE},
 	{"scripts.rsc", GAME_SCRIPTFILE},
 	{"sounds.rsc", GAME_SOUNDFILE},
 	{"voices.rsc", GAME_VOICEFILE}
 };
 
-static GAME_FONTDESC ITECD_GameFonts[] = {
+static GameFontDescription ITECD_GameFonts[] = {
 	{GAME_FONT_MEDIUM, 0},
 	{GAME_FONT_LARGE, 1},
 	{GAME_FONT_SMALL, 2}
 };
 
-static GAME_SOUNDINFO ITECD_GameSound = {
+static GameSoundInfo ITECD_GameSound = {
 	GAME_SOUND_PCM,
 	22050,
 	16,
@@ -151,7 +151,7 @@
 };
 
 // I Have No Mouth and I Must Scream - Demo version
-static GAME_FILEDESC IHNMDEMO_GameFiles[] = {
+static GameFileDescription IHNMDEMO_GameFiles[] = {
 	{"scream.res", GAME_RESOURCEFILE},
 	{"scripts.res", GAME_SCRIPTFILE},
 	{"sfx.res", GAME_SOUNDFILE},
@@ -159,7 +159,7 @@
 };
 
 // I Have No Mouth and I Must Scream - Retail CD version
-static GAME_FILEDESC IHNMCD_GameFiles[] = {
+static GameFileDescription IHNMCD_GameFiles[] = {
 	{"musicfm.res", GAME_MUSICFILE_FM},
 	{"musicgm.res", GAME_MUSICFILE_GM},
 	{"scream.res", GAME_RESOURCEFILE},
@@ -176,7 +176,7 @@
 };
 
 // I Have No Mouth and I Must Scream - Retail German CD version
-static GAME_FILEDESC IHNMCDDE_GameFiles[] = {
+static GameFileDescription IHNMCDDE_GameFiles[] = {
 	{"musicfm.res", GAME_MUSICFILE_FM},
 	{"musicgm.res", GAME_MUSICFILE_GM},
 	{"scream.res", GAME_RESOURCEFILE},
@@ -191,7 +191,7 @@
 	{"voicess.res", GAME_VOICEFILE}
 };
 
-static GAME_FONTDESC IHNMCD_GameFonts[] = {
+static GameFontDescription IHNMCD_GameFonts[] = {
 	{GAME_FONT_MEDIUM, 2},
 	{GAME_FONT_LARGE, 3},
 	{GAME_FONT_SMALL, 4},
@@ -201,19 +201,19 @@
 	{GAME_FONT_LARGE3, 8}
 };
 
-static GAME_RESOURCEDESC IHNM_Resources = {
+static GameResourceDescription IHNM_Resources = {
 	RID_IHNM_SCENE_LUT,  // Scene lookup table RN
 	RID_IHNM_SCRIPT_LUT, // Script lookup table RN
 	RID_IHNM_COMMAND_PANEL,
 	RID_IHNM_DIALOGUE_PANEL
 };
 
-static GAME_SOUNDINFO IHNM_GameSound = {
+static GameSoundInfo IHNM_GameSound = {
 	GAME_SOUND_WAV, 0, 0, 0
 };
 
-struct GAME_MD5 {
-	GAME_IDS id;
+struct GameMD5 {
+	GameIds id;
 	const char *md5;
 	const char *filename;
 	bool caseSensitive;
@@ -221,7 +221,7 @@
 
 #define FILE_MD5_BYTES 5000
 
-static GAME_MD5 game_md5[] = {
+static GameMD5 gameMD5[] = {
 	{ GID_ITE_DISK_G,   "8f4315a9bb10ec839253108a032c8b54", "ite.rsc", false },
 	{ GID_ITE_DISK_G,   "516f7330f8410057b834424ea719d1ef", "scripts.rsc", false },
 	{ GID_ITE_DISK_G,   "c46e4392fcd2e89bc91e5567db33b62d", "voices.rsc", false },
@@ -326,7 +326,7 @@
 	{ GID_IHNM_DEMO, "3bbc16a8f741dbb511da506c660a0b54", "voicesd.res", false },
 };
 
-static GAMEDESC GameDescs[] = {
+static GameDescription gameDescriptions[] = {
 	// Inherit the earth - DOS Demo version
 	{
 		"ite-demo",
@@ -618,18 +618,16 @@
 	}
 };
 
-static GAMEMODULE GameModule;
-
 int SagaEngine::initGame(void) {
-	int game_n;
+	int gameNumber;
 	FSList dummy;
 
-	if ((game_n = detectGame(dummy)) == -1) {
+	if ((gameNumber = detectGame(dummy)) == -1) {
 		warning("No valid games were found in the specified directory.");
 		return FAILURE;
 	}
 
-	if (loadGame(game_n) != SUCCESS) {
+	if (loadGame(gameNumber) != SUCCESS) {
 		warning("Error loading game resource files.");
 		return FAILURE;
 	}
@@ -642,14 +640,11 @@
 
 int SagaEngine::loadLanguage(void) {
 	char lang_file[MAXPATH];
-	uint16 game_n;
-
 	File test_file;
 
-	game_n = GameModule.game_number;
 
-	if (GameDescs[game_n].gd_game_type == GType_ITE) {
-		snprintf(lang_file, MAXPATH, "%s%s.%s", GAME_ITE_LANG_PREFIX, GameModule.game_language, GAME_LANG_EXT);
+	if (_gameType == GType_ITE) {
+		snprintf(lang_file, MAXPATH, "%s%s.%s", GAME_ITE_LANG_PREFIX, _gameLanguage, GAME_LANG_EXT);
 		if (!test_file.open(lang_file)) {
 			debug(0, "Couldn't open language file %s. Using default (US English)", lang_file);
 			return SUCCESS;
@@ -678,16 +673,15 @@
 }
 
 RSCFILE_CONTEXT *SagaEngine::getFileContext(uint16 type, int param) {
-	RSCFILE_CONTEXT *found_ctxt = NULL;
 	uint16 i;
 
-	for (i = 0; i < GameModule.gfile_n; i++) {
-		if (GameModule.gfile_data[i].file_types & type) {
-			found_ctxt = GameModule.gfile_data[i].file_ctxt;
+	for (i = 0; i < _gameDescription->filesCount; i++) {
+		if ( _gameDescription->filesDescriptions[i].fileType & type) {
+			return _gameFileContexts[i];
 		}
 	}
 
-	return found_ctxt;
+	return NULL;
 }
 
 DetectedGameList GAME_ProbeGame(const FSList &fslist) {
@@ -695,13 +689,13 @@
 	int game_n;
 
 	if ((game_n = detectGame(fslist, true)) != -1)
-		detectedGames.push_back(GameDescs[game_n].toGameSettings());
+		detectedGames.push_back(gameDescriptions[game_n].toGameSettings());
 
 	return detectedGames;
 }
 
 int detectGame(const FSList &fslist, bool mode) {
-	int game_count = ARRAYSIZE(GameDescs);
+	int game_count = ARRAYSIZE(gameDescriptions);
 	int game_n = -1;
 	Common::StringMap filesMD5;
 
@@ -718,12 +712,12 @@
 	uint8 md5sum[16];
 
 	// First we compose list of files which we need MD5s for
-	for (int i = 0; i < ARRAYSIZE(game_md5); i++) {
-		tstr = Common::String(game_md5[i].filename);
+	for (int i = 0; i < ARRAYSIZE(gameMD5); i++) {
+		tstr = Common::String(gameMD5[i].filename);
 		tstr.toLowercase();
 
-		if (game_md5[i].caseSensitive && !mode)
-			filesList[Common::String(game_md5[i].filename)] = true;
+		if (gameMD5[i].caseSensitive && !mode)
+			filesList[Common::String(gameMD5[i].filename)] = true;
 		else
 			filesList[tstr] = true;
 	}
@@ -766,12 +760,12 @@
 	}
 
 	for (game_n = 0; game_n < game_count; game_n++) {
-		file_count = GameDescs[game_n].gd_filect;
+		file_count = gameDescriptions[game_n].filesCount;
 		file_missing = false;
 
 		// Try to open all files for this game
 		for (file_n = 0; file_n < file_count; file_n++) {
-			tstr = GameDescs[game_n].gd_filedescs[file_n].gf_fname;
+			tstr = gameDescriptions[game_n].filesDescriptions[file_n].fileName;
 
 			if (!filesMD5.contains(tstr)) {
 				file_missing = true;
@@ -786,13 +780,13 @@
 		} else {
 			bool match = true;
 
-			debug(5, "Probing game: %s", GameDescs[game_n].gd_title);
+			debug(5, "Probing game: %s", gameDescriptions[game_n].title);
 
-			for (int i = 0; i < ARRAYSIZE(game_md5); i++) {
-				if (game_md5[i].id == GameDescs[game_n].gd_game_id) {
-					tstr = game_md5[i].filename;
+			for (int i = 0; i < ARRAYSIZE(gameMD5); i++) {
+				if (gameMD5[i].id == gameDescriptions[game_n].gameId) {
+					tstr = gameMD5[i].filename;
 
-					if (strcmp(game_md5[i].md5, filesMD5[tstr].c_str())) {
+					if (strcmp(gameMD5[i].md5, filesMD5[tstr].c_str())) {
 						match = false;
 						break;
 					}
@@ -801,7 +795,7 @@
 			if (!match)
 				continue;
 
-			debug(5, "Found game: %s", GameDescs[game_n].gd_title);
+			debug(5, "Found game: %s", gameDescriptions[game_n].title);
 
 			return game_n;
 		}
@@ -819,70 +813,48 @@
 	return -1;
 }
 
-int SagaEngine::loadGame(int game_n) {
-	RSCFILE_CONTEXT *load_ctxt;
-	uint16 game_count = ARRAYSIZE(GameDescs);
-	const char *game_fname;
-	uint16 game_filect;
+int SagaEngine::loadGame(int gameNumber) {
+	RSCFILE_CONTEXT *loadContext;
+	uint16 gameCount = ARRAYSIZE(gameDescriptions);
+	const char *gameFileName;
+	uint16 gameFileCount;
 	uint16 i;
 
-	if (game_n >= game_count) {
-		return FAILURE;
+	if (gameNumber >= gameCount) {
+		error("SagaEngine::loadGame wrong gameNumber");
 	}
 
-	GameModule.game_number = game_n;
-	GameModule.gamedesc = &GameDescs[game_n];
+	_gameNumber = gameNumber;
+	_gameDescription = &gameDescriptions[gameNumber];
 
-	_gameId = GameModule.gamedesc->gd_game_id;
-	_gameType = GameModule.gamedesc->gd_game_type;
-	_features = GameModule.gamedesc->features;
+	_gameId = _gameDescription->gameId;
+	_gameType = _gameDescription->gameType;
+	_features = _gameDescription->features;
 
-	game_filect = GameDescs[game_n].gd_filect;
+	gameFileCount = _gameDescription->filesCount;
 	
-	GameModule.gfile_data = (GAME_FILEDATA *)malloc(game_filect * sizeof(*GameModule.gfile_data));
-	if (GameModule.gfile_data == NULL) {
-		return MEM;
+	_gameFileContexts = (RSCFILE_CONTEXT **)malloc(gameFileCount * sizeof(*_gameFileContexts));
+	//TODO: on exit - FREE!
+	if (_gameFileContexts == NULL) {
+		error("SagaEngine::loadGame not enough memory");
 	}
 
-	GameModule.gfile_n = game_filect;
 
 	// Load game resource files
-	for (i = 0; i < game_filect; i++) {
-		load_ctxt = RSC_CreateContext();
-		game_fname = GameDescs[game_n].gd_filedescs[i].gf_fname;
-		if (RSC_OpenContext(load_ctxt, game_fname) != SUCCESS) {
+	for (i = 0; i < gameFileCount; i++) {
+		loadContext = RSC_CreateContext();
+		gameFileName = _gameDescription->filesDescriptions[i].fileName;
+		if (RSC_OpenContext(loadContext, gameFileName) != SUCCESS) {
 			return FAILURE;
 		}
 
-		debug(0, "Opened resource file: %s", game_fname);
-		GameModule.gfile_data[i].file_ctxt = load_ctxt;
-		GameModule.gfile_data[i].file_types = GameDescs[game_n].gd_filedescs[i].gf_type;
-		GameModule.gfile_data[i].file_flags = 0;
+		debug(0, "Opened resource file: %s", gameFileName);
+		_gameFileContexts[i] = loadContext;
 	}
 
-	// Load game font data
-	GameModule.gd_fontct = GameDescs[game_n].gd_fontct;
-	GameModule.gd_fontdescs = GameDescs[game_n].gd_fontdescs;
-
 	return SUCCESS;
 }
 
-const GAME_RESOURCEDESC SagaEngine::getResourceInfo(void) {
-	return *GameModule.gamedesc->gd_resource_desc;
-}
-
-const GAME_SOUNDINFO SagaEngine::getSoundInfo(void) {
-	return *GameModule.gamedesc->gd_soundinfo;
-}
-
-int SagaEngine::getDisplayWidth() {
-	return GameDescs[GameModule.game_number].gd_logical_w;
-}
-
-int SagaEngine::getDisplayHeight() {
-	return GameDescs[GameModule.game_number].gd_logical_h;
-}
-
 int SagaEngine::getPathYOffset() { //fixme: should be in GameDesc
 	if (_gameType == GType_ITE) {
 		return 35;
@@ -899,36 +871,4 @@
 	}
 }
 
-int SagaEngine::getDisplayInfo(GAME_DISPLAYINFO *disp_info) {
-	int game_n;
-
-	assert(disp_info != NULL);
-
-	game_n = GameModule.game_number;
-
-	disp_info->logical_w = GameDescs[game_n].gd_logical_w;
-	disp_info->logical_h = GameDescs[game_n].gd_logical_h;
-	disp_info->scene_h = GameDescs[game_n].gd_scene_h;
-
-	return SUCCESS;
-}
-
-int SagaEngine::getFontInfo(GAME_FONTDESC **gf_desc, int *font_n) {
-	assert((gf_desc != NULL) && (font_n != NULL));
-
-	*gf_desc = GameModule.gd_fontdescs;
-	*font_n = GameModule.gd_fontct;
-
-	return SUCCESS;
-}
-
-int SagaEngine::getSceneInfo(GAME_SCENEDESC *gs_desc) {
-	assert(gs_desc != NULL);
-
-	gs_desc->first_scene = GameModule.gamedesc->gd_startscene;
-	gs_desc->scene_lut_rn = RSC_ConvertID(GameModule.gamedesc->gd_resource_desc->scene_lut_rn);
-
-	return SUCCESS;
-}
-
 } // End of namespace Saga

Index: game.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/game.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- game.h	1 Jan 2005 16:18:36 -0000	1.16
+++ game.h	9 Jan 2005 23:41:21 -0000	1.17
@@ -30,62 +30,12 @@
 
 namespace Saga {
 
-#define GAME_LANGSTR_LIMIT 3
 #define GAME_PATH_LIMIT 512
 
-#define GAME_ITE_LANG_PREFIX "ite_"
-#define GAME_LANG_EXT "lng"
-
 // Script lookup table entry sizes for game verification
 #define SCR_LUT_ENTRYLEN_ITECD 22
 #define SCR_LUT_ENTRYLEN_ITEDISK 16
 
-struct GAME_FILEDESC {
-	const char *gf_fname;
-	uint16 gf_type;
-};
-
-struct GAMEDESC {
-	const char *name;
-	SAGAGameType gd_game_type;
-	GAME_IDS gd_game_id;
-	const char *gd_title;
-	int gd_logical_w;
-	int gd_logical_h;
-	int gd_scene_h;
-	int gd_startscene;
-	GAME_RESOURCEDESC *gd_resource_desc;
-	int gd_filect;
-	GAME_FILEDESC *gd_filedescs;
-	int gd_fontct;
-	GAME_FONTDESC *gd_fontdescs;
-	GAME_SOUNDINFO *gd_soundinfo;
-	uint32 features;
-
-	GameSettings toGameSettings() const {
-		GameSettings dummy = { name, gd_title, features };
-		return dummy;
-	}
-};
-
-struct GAME_FILEDATA {
-	RSCFILE_CONTEXT *file_ctxt;
-	uint16 file_types;
-	uint16 file_flags;
-};
-
-struct GAMEMODULE {
-	int game_number;
-	GAMEDESC *gamedesc;
-	int g_skipintro;
-	char game_language[GAME_LANGSTR_LIMIT];
-	uint16 gfile_n;
-	GAME_FILEDATA *gfile_data;
-	uint16 gd_fontct;
-	GAME_FONTDESC *gd_fontdescs;
-	int err_n;
-	const char *err_str;
-};
 
 DetectedGameList GAME_ProbeGame(const FSList &fslist);
 

Index: ihnm_introproc.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/ihnm_introproc.cpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- ihnm_introproc.cpp	2 Jan 2005 16:11:19 -0000	1.37
+++ ihnm_introproc.cpp	9 Jan 2005 23:41:21 -0000	1.38
@@ -92,7 +92,6 @@
 	size_t i;
 
 	SCENE_QUEUE first_scene;
-	GAME_SCENEDESC gs_desc;
 
 	n_introscenes = ARRAYSIZE(IHNM_IntroList);
 
@@ -105,10 +104,8 @@
 	// it will cause the end titles music to play, which is wrong. (But
 	// hey, it's a nice piece of music!)
 
-	_vm->getSceneInfo(&gs_desc);
-
 	first_scene.load_flag = BY_SCENE;
-	first_scene.scene_n = gs_desc.first_scene;
+	first_scene.scene_n = _vm->getStartSceneNumber();
 	first_scene.scene_skiptarget = 1;
 	first_scene.scene_proc = NULL;
 	first_scene.fadeType = SCENE_FADE;

Index: interface.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -d -r1.55 -r1.56
--- interface.cpp	9 Jan 2005 15:07:48 -0000	1.55
+++ interface.cpp	9 Jan 2005 23:41:21 -0000	1.56
@@ -81,8 +81,8 @@
 	ITE_INVENTORY_YSPACING
 };
 
-static INTERFACE_BUTTON ITE_c_buttons[] = {
-	{5, 4, 46, 47, "Portrait", 0, 0, BUTTON_NONE, 0},
+static InterfaceButton ITEMainPanel[] = {
+	{5, 4, 46, 47, "Portrait", 0, 0, BUTTON_NONE, 0}, //TODO: remove?
 	// "Walk To" and "Talk To" share button sprites
 	{52, 4, 109, 14, "Walk To", 1, 2, BUTTON_VERB, I_VERB_WALKTO},
 	{52, 15, 109, 25, "Look At", 3, 4, BUTTON_VERB, I_VERB_LOOKAT},
@@ -136,7 +136,7 @@
 	IHNM_INVENTORY_YSPACING
 };
 
-static INTERFACE_BUTTON IHNM_c_buttons[] = {
+static InterfaceButton IHNMMainPanel[] = {
 	{5, 4, 46, 47, "Portrait", 0, 0, 0, 0}
 };
 
@@ -160,8 +160,6 @@
 }
 
 Interface::Interface(SagaEngine *vm) : _vm(vm), _initialized(false) {
-	GAME_RESOURCEDESC g_resdesc;
-
 	int result;
 
 	if (_initialized) {
@@ -183,37 +181,32 @@
 	// Initialize interface data by game type
 	if (_vm->_gameType == GType_ITE) {
 		// Load Inherit the Earth interface desc
-		_cPanel.buttons = ITE_c_buttons;
-		_cPanel.nbuttons = ARRAYSIZE(ITE_c_buttons);
+		_mainPanel.buttons = ITEMainPanel;
+		_mainPanel.nbuttons = ARRAYSIZE(ITEMainPanel);
 
 		_iDesc = ITE_interface;
 	} else if (_vm->_gameType == GType_IHNM) {
 		// Load I Have No Mouth interface desc
-		_cPanel.buttons = IHNM_c_buttons;
-		_cPanel.nbuttons = ARRAYSIZE(IHNM_c_buttons);
+		_mainPanel.buttons = IHNMMainPanel;
+		_mainPanel.nbuttons = ARRAYSIZE(IHNMMainPanel);
 		_iDesc = IHNM_interface;
 	} else {
 		return;
 	}
 
-	// Load interface resources
-	g_resdesc = _vm->getResourceInfo();
-
 	// Load command panel resource
-	result = RSC_LoadResource(_interfaceContext, g_resdesc.command_panel_rn,
-							&_cPanel.res, &_cPanel.res_len);
+	result = RSC_LoadResource(_interfaceContext, _vm->getResourceDescription()->command_panel_rn, &_mainPanel.res, &_mainPanel.res_len);
 	if (result != SUCCESS) {
 		return;
 	}
 
 	// Load dialogue panel resource
-	result = RSC_LoadResource(_interfaceContext, g_resdesc.dialogue_panel_rn,
-							&_dPanel.res, &_dPanel.res_len);
+	result = RSC_LoadResource(_interfaceContext, _vm->getResourceDescription()->dialogue_panel_rn, &_conversePanel.res, &_conversePanel.res_len);
 	if (result != SUCCESS) {
 		return;
 	}
 
-	if (_vm->_sprite->loadList(RID_ITE_COMMAND_BUTTONSPRITES, _cPanel.sprites) != SUCCESS) {
+	if (_vm->_sprite->loadList(RID_ITE_COMMAND_BUTTONSPRITES, _mainPanel.sprites) != SUCCESS) {
 		error("Unable to load sprite list");
 	}
 	
@@ -223,20 +216,20 @@
 	}
 
 
-	_vm->decodeBGImage(_cPanel.res, _cPanel.res_len, &_cPanel.img,
-					&_cPanel.img_len, &_cPanel.img_w, &_cPanel.img_h);
+	_vm->decodeBGImage(_mainPanel.res, _mainPanel.res_len, &_mainPanel.img,
+					&_mainPanel.img_len, &_mainPanel.img_w, &_mainPanel.img_h);
 
-	_vm->decodeBGImage(_dPanel.res, _dPanel.res_len,
-					&_dPanel.img, &_dPanel.img_len,
-					&_dPanel.img_w, &_dPanel.img_h);
+	_vm->decodeBGImage(_conversePanel.res, _conversePanel.res_len,
+					&_conversePanel.img, &_conversePanel.img_len,
+					&_conversePanel.img_w, &_conversePanel.img_h);
 
-	_cPanel.x = 0;
-	_cPanel.y = 149;
+	_mainPanel.x = 0;
+	_mainPanel.y = 149;
 
-	_dPanel.x = 0;
-	_dPanel.y = 149;
+	_conversePanel.x = 0;
+	_conversePanel.y = 149;
 
-	_cPanel.set_button = COMMAND_DEFAULT_BUTTON;
+	_mainPanel.set_button = COMMAND_DEFAULT_BUTTON;
 	_leftPortrait = 0;
 	_rightPortrait = 0;
 
@@ -262,7 +255,7 @@
 Interface::~Interface(void) {
 	free(_inventory);
 	 
-	_cPanel.sprites.freeMem();
+	_mainPanel.sprites.freeMem();
 	_defPortraits.freeMem();
 	_scenePortraits.freeMem();
 	_initialized = false;
@@ -310,23 +303,25 @@
 
 int Interface::setMode(int mode, bool force) {
 	// TODO: Is this where we should hide/show the mouse cursor?
-	int newmode = mode;
+	int newMode = mode;
 
-	if (mode == kPanelConverse)
+	if (mode == kPanelConverse) {
 		_inMainMode = false;
-	else if (mode == kPanelInventory) {
-		_inMainMode = true;
-		newmode = kPanelMain;
+	} else {
+		if (mode == kPanelInventory) {
+			_inMainMode = true;
+			newMode = kPanelMain;
+		}
 	}
 
 	// This lets us to prevents actors to pop up during initial
 	// scene fade in.
 	if (_savedMode != -1 && !force) {
-		_savedMode = newmode;
-		debug(0, "Saved mode: %d. my mode is %d", newmode, _panelMode);
+		_savedMode = newMode;
+		debug(0, "Saved mode: %d. my mode is %d", newMode, _panelMode);
 	}
 	else
-		_panelMode = newmode;
+		_panelMode = newMode;
 
 	draw();
 
@@ -362,71 +357,63 @@
 }
 
 int Interface::draw() {
-	GAME_DISPLAYINFO g_di;
-	SURFACE *back_buf;
+	SURFACE *backBuffer;
 
-	int xbase;
-	int ybase;
-	Point lportrait;
-	Point rportrait;
-	
+	Point base;
+	Point leftPortraitPoint;
+	Point rightPortraitPoint;	
 	Point origin;
 
-	back_buf = _vm->_gfx->getBackBuffer();
+	backBuffer = _vm->_gfx->getBackBuffer();
 
 	if (_vm->_scene->isInDemo() || _panelMode == kPanelFade)
 		return SUCCESS;
 
-	// Get game display info
-	_vm->getDisplayInfo(&g_di);
 
-	drawStatusBar(back_buf);
+	drawStatusBar(backBuffer);
 
-	// Draw command panel background
 	if (_panelMode == kPanelMain) {
-		xbase = _cPanel.x;
-		ybase = _cPanel.y;
+		base.x = _mainPanel.x;
+		base.y = _mainPanel.y;
 
 		origin.x = 0;
-		origin.y = g_di.logical_h - _cPanel.img_h;
+		origin.y = _vm->getDisplayHeight() - _mainPanel.img_h;
 
-		bufToSurface(back_buf, _cPanel.img, _cPanel.img_w,
-						_cPanel.img_h, NULL, &origin);
+		bufToSurface(backBuffer, _mainPanel.img, _mainPanel.img_w, _mainPanel.img_h, NULL, &origin);
+		
 	} else {
-		xbase = _dPanel.x;
-		ybase = _dPanel.y;
+		base.x = _conversePanel.x;
+		base.y = _conversePanel.y;
 
 		origin.x = 0;
-		origin.y = g_di.logical_h - _cPanel.img_h;
+		origin.y = _vm->getDisplayHeight() - _mainPanel.img_h;
 
-		bufToSurface(back_buf, _dPanel.img, _dPanel.img_w,
-						_dPanel.img_h, NULL, &origin);
+		bufToSurface(backBuffer, _conversePanel.img, _conversePanel.img_w,
+						_conversePanel.img_h, NULL, &origin);
 	}
 
-	// Draw character portrait
-	lportrait.x = xbase + _iDesc.lportrait_x;
-	lportrait.y = ybase + _iDesc.lportrait_y;
-
 	if (_panelMode == kPanelMain || _panelMode == kPanelConverse ||
-		_lockedMode == kPanelMain || _lockedMode == kPanelConverse)
-		_vm->_sprite->draw(back_buf, _defPortraits, _leftPortrait, lportrait, 256);
+		_lockedMode == kPanelMain || _lockedMode == kPanelConverse) {
+			leftPortraitPoint.x = base.x + _iDesc.lportrait_x;
+			leftPortraitPoint.y = base.y + _iDesc.lportrait_y;
+			_vm->_sprite->draw(backBuffer, _defPortraits, _leftPortrait, leftPortraitPoint, 256);
+		}
+		
 
 	if (!_inMainMode && _iDesc.rportrait_x >= 0) {
-		rportrait.x = xbase + _iDesc.rportrait_x;
-		rportrait.y = ybase + _iDesc.rportrait_y;
+		rightPortraitPoint.x = base.x + _iDesc.rportrait_x;
+		rightPortraitPoint.y = base.y + _iDesc.rportrait_y;
 
-		_vm->_sprite->draw(back_buf, _scenePortraits, _rightPortrait, rportrait, 256);
+		_vm->_sprite->draw(backBuffer, _scenePortraits, _rightPortrait, rightPortraitPoint, 256);
 	}
 
-	if (_inMainMode)
+	if (_inMainMode) {
 		drawInventory();
-
+	}
 	return SUCCESS;
 }
 
 int Interface::update(const Point& imousePt, int update_flag) {
-	GAME_DISPLAYINFO g_di;
-
 	SURFACE *back_buf;
 
 	int imouse_x, imouse_y;
@@ -439,12 +426,10 @@
 
 	back_buf = _vm->_gfx->getBackBuffer();
 
-	// Get game display info
-	_vm->getDisplayInfo(&g_di);
 
 	if (_panelMode == kPanelMain) { // FIXME: HACK
 		// Update playfield space ( only if cursor is inside )
-		if (imouse_y < g_di.scene_h) {
+		if (imouse_y < _vm->getStatusYOffset()) {
 			// Mouse is in playfield space
 			if (update_flag == UPDATE_MOUSEMOVE) {
 				handlePlayfieldUpdate(back_buf, imousePt);
@@ -467,7 +452,6 @@
 }
 
 int Interface::drawStatusBar(SURFACE *ds) {
-	GAME_DISPLAYINFO g_di;
 	Rect rect;
 
 	int string_w;
@@ -479,13 +463,11 @@
 		return SUCCESS;
 	}
 
-	// Get game display info
-	_vm->getDisplayInfo(&g_di);
 
 	// Erase background of status bar
 	rect.left = 0;
 	rect.top = _iDesc.status_y;
-	rect.right = g_di.logical_w;
+	rect.right = _vm->getDisplayWidth();
 	rect.bottom = _iDesc.status_y + _iDesc.status_h;
 
 	drawRect(ds, &rect, _iDesc.status_bgcol);
@@ -516,31 +498,31 @@
 		return SUCCESS;
 	}
 
-	x_base = _cPanel.x;
-	y_base = _cPanel.y;
+	x_base = _mainPanel.x;
+	y_base = _mainPanel.y;
 
-	if (_cPanel.buttons[ibutton_num].flags & BUTTON_SET) {
-		old_set_button = _cPanel.set_button;
+	if (_mainPanel.buttons[ibutton_num].flags & BUTTON_SET) {
+		old_set_button = _mainPanel.set_button;
 		set_button = ibutton_num;
-		_cPanel.set_button = set_button;
+		_mainPanel.set_button = set_button;
 
-		if (_cPanel.buttons[set_button].flags & BUTTON_VERB) {
-			_activeVerb = _cPanel.buttons[ibutton_num].data;
+		if (_mainPanel.buttons[set_button].flags & BUTTON_VERB) {
+			_activeVerb = _mainPanel.buttons[ibutton_num].data;
 		}
 
-		if (_cPanel.buttons[set_button].flags & BUTTON_BITMAP) {
-			button.x = x_base + _cPanel.buttons[set_button].x1;
-			button.y = y_base + _cPanel.buttons[set_button].y1;
+		if (_mainPanel.buttons[set_button].flags & BUTTON_BITMAP) {
+			button.x = x_base + _mainPanel.buttons[set_button].x1;
+			button.y = y_base + _mainPanel.buttons[set_button].y1;
 
-			_vm->_sprite->draw(ds, _cPanel.sprites, _cPanel.buttons[set_button].
+			_vm->_sprite->draw(ds, _mainPanel.sprites, _mainPanel.buttons[set_button].
 						active_sprite - 1, button, 256);
 		}
 
-		if (_cPanel.buttons[old_set_button].flags & BUTTON_BITMAP) {
-			button.x = x_base + _cPanel.buttons[old_set_button].x1;
-			button.y = y_base + _cPanel.buttons[old_set_button].y1;
+		if (_mainPanel.buttons[old_set_button].flags & BUTTON_BITMAP) {
+			button.x = x_base + _mainPanel.buttons[old_set_button].x1;
+			button.y = y_base + _mainPanel.buttons[old_set_button].y1;
 
-			_vm->_sprite->draw(ds, _cPanel.sprites, _cPanel.buttons[old_set_button].
+			_vm->_sprite->draw(ds, _mainPanel.sprites, _mainPanel.buttons[old_set_button].
 						inactive_sprite - 1, button, 256);
 		}
 	}
@@ -553,13 +535,12 @@
 	int ibutton_num;
 
 	Point button;
-	int button_w = 0;
+//	int button_w = 0;
 
-	int verb_idx = 0;
+/*	int verb_idx = 0;
 	int string_w = 0;
-
 	int color;
-	int i;
+	int i;*/
 
 	hit_button = inventoryTest(imousePt, &ibutton_num);
 
@@ -568,21 +549,21 @@
 		return SUCCESS;
 	}
 
-	hit_button = hitTest(imousePt, &ibutton_num);
+/*	hit_button = hitTest(imousePt, &ibutton_num);
 
 	if (hit_button == SUCCESS) {
 		// Hovering over a command panel button
 		setStatusText(I_VerbData[_activeVerb].verb_str);
 	}
 
-	for (i = 0; i < _cPanel.nbuttons; i++) {
-		if (!(_cPanel.buttons[i].flags & BUTTON_LABEL)) {
+	for (i = 0; i < _mainPanel.nbuttons; i++) {
+		if (!(_mainPanel.buttons[i].flags & BUTTON_LABEL)) {
 			continue;
 		}
 
-		button_w = _cPanel.buttons[i].x2 - _cPanel.buttons[i].x1;
+		button_w = _mainPanel.buttons[i].x2 - _mainPanel.buttons[i].x1;
 
-		verb_idx = _cPanel.buttons[i].data;
+		verb_idx = _mainPanel.buttons[i].data;
 
 		string_w = _vm->_font->getStringWidth(SMALL_FONT_ID, I_VerbData[verb_idx].verb_str, 0, 0);
 
@@ -592,19 +573,19 @@
 			color = _iDesc.cmd_txt_col;
 		}
 
-		button.x = _cPanel.x + _cPanel.buttons[i].x1;
-		button.y = _cPanel.y + _cPanel.buttons[i].y1;
+		button.x = _mainPanel.x + _mainPanel.buttons[i].x1;
+		button.y = _mainPanel.y + _mainPanel.buttons[i].y1;
 
 		_vm->_font->draw(SMALL_FONT_ID, ds, I_VerbData[verb_idx].verb_str, 0,
 				button.x + ((button_w / 2) - (string_w / 2)), button.y + 1,
 				color, _iDesc.cmd_txt_shadowcol, FONT_SHADOW);
 
-		if ((i == _cPanel.set_button) && (_cPanel.buttons[i].flags & BUTTON_BITMAP)) {
-			_vm->_sprite->draw(ds, _cPanel.sprites, _cPanel.buttons[i].active_sprite - 1,
+		if ((i == _mainPanel.set_button) && (_mainPanel.buttons[i].flags & BUTTON_BITMAP)) {
+			_vm->_sprite->draw(ds, _mainPanel.sprites, _mainPanel.buttons[i].active_sprite - 1,
 						button, 256);
 		}
 	}
-
+*/
 	return SUCCESS;
 }
 
@@ -687,7 +668,7 @@
 }
 
 int Interface::hitTest(const Point& imousePt, int *ibutton) {
-	INTERFACE_BUTTON *buttons;
+	InterfaceButton *buttons;
 
 	int nbuttons;
 	int xbase;
@@ -695,11 +676,11 @@
 
 	int i;
 
-	buttons = _cPanel.buttons;
-	nbuttons = _cPanel.nbuttons;
+	buttons = _mainPanel.buttons;
+	nbuttons = _mainPanel.nbuttons;
 
-	xbase = _cPanel.x;
-	ybase = _cPanel.y;
+	xbase = _mainPanel.x;
+	ybase = _mainPanel.y;
 
 	for (i = 0; i < nbuttons; i++) {
 		if ((imousePt.x >= (xbase + buttons[i].x1)) && (imousePt.x < (xbase + buttons[i].x2)) &&
@@ -808,4 +789,7 @@
 	return FAILURE;
 }
 
+void Interface::drawVerb(int verb, int state) {
+}
+
 } // End of namespace Saga

Index: interface.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/interface.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- interface.h	9 Jan 2005 15:07:48 -0000	1.24
+++ interface.h	9 Jan 2005 23:41:21 -0000	1.25
@@ -126,7 +126,7 @@
 
 #define BUTTON_VERB ( BUTTON_LABEL | BUTTON_BITMAP | BUTTON_SET )
 
-struct INTERFACE_BUTTON {
+struct InterfaceButton {
 	int x1;
 	int y1;
 	int x2;
@@ -138,7 +138,7 @@
 	int data;
 };
 
-struct INTERFACE_PANEL {
+struct InterfacePanel {
 	byte *res;
 	size_t res_len;
 	int x;
@@ -149,7 +149,7 @@
 	int img_h;
 	int set_button;
 	int nbuttons;
-	INTERFACE_BUTTON *buttons;
+	InterfaceButton *buttons;
 	SpriteList sprites;
 };
 
@@ -235,6 +235,7 @@
 	int handleCommandClick(SURFACE *ds, const Point& imousePt);
 	int handlePlayfieldUpdate(SURFACE *ds, const Point& imousePt);
 	int handlePlayfieldClick(SURFACE *ds, const Point& imousePt);
+	void drawVerb(int verb, int state);
 
 private:
 	SagaEngine *_vm;
@@ -247,8 +248,8 @@
 	int _savedMode;
 	int _lockedMode;
 	bool _inMainMode;
-	INTERFACE_PANEL _cPanel;
-	INTERFACE_PANEL _dPanel;
+	InterfacePanel _mainPanel;
+	InterfacePanel _conversePanel;
 	char _statusText[STATUS_TEXT_LEN];
 	int _leftPortrait;
 	int _rightPortrait;

Index: isomap.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/isomap.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- isomap.cpp	2 Jan 2005 14:52:01 -0000	1.25
+++ isomap.cpp	9 Jan 2005 23:41:21 -0000	1.26
@@ -132,13 +132,11 @@
 }
 
 int IsoMap::draw(SURFACE *dst_s) {
-	GAME_DISPLAYINFO disp_info;
 	
-	_vm->getDisplayInfo(&disp_info);
-	Rect iso_rect(disp_info.logical_w, disp_info.scene_h);
+/*	Rect iso_rect(disp_info.logical_w, disp_info.scene_h);
 	drawRect(dst_s, &iso_rect, 0);
 	drawMetamap(dst_s, -1000, -500);
-
+*/
 	return SUCCESS;
 }
 

Index: ite_introproc.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/ite_introproc.cpp,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- ite_introproc.cpp	9 Jan 2005 16:43:57 -0000	1.45
+++ ite_introproc.cpp	9 Jan 2005 23:41:22 -0000	1.46
@@ -126,7 +126,6 @@
 
 	SCENE_QUEUE first_scene;
 	SCENE_QUEUE tempScene;
-	GAME_SCENEDESC gs_desc;
 
 	n_introscenes = ARRAYSIZE(ITE_IntroList);
 
@@ -136,10 +135,9 @@
 		_vm->_scene->queueScene(&tempScene);
 	}
 
-	_vm->getSceneInfo(&gs_desc);
 
 	first_scene.load_flag = BY_SCENE;
-	first_scene.scene_n = gs_desc.first_scene;
+	first_scene.scene_n = _vm->getStartSceneNumber();
 	first_scene.scene_skiptarget = 1;
 	first_scene.scene_proc = NULL;
 	first_scene.fadeType = SCENE_FADE;

Index: render.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/render.cpp,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -d -r1.47 -r1.48
--- render.cpp	7 Jan 2005 00:57:43 -0000	1.47
+++ render.cpp	9 Jan 2005 23:41:22 -0000	1.48
@@ -46,28 +46,25 @@
 	_system = system;
 	_initialized = false;
 
-	GAME_DISPLAYINFO disp_info;
 	int tmp_w, tmp_h, tmp_bytepp;
 
-	// Initialize system graphics
-	_vm->getDisplayInfo(&disp_info);
 
 	// Initialize FPS timer callback
 	g_timer->installTimerProc(&fpsTimerCallback, 1000000, this);
 
 	// Create background buffer 
-	_bg_buf_w = disp_info.logical_w;
-	_bg_buf_h = disp_info.logical_h;
-	_bg_buf = (byte *)calloc(disp_info.logical_w, disp_info.logical_h);
+	_bg_buf_w = _vm->getDisplayWidth();
+	_bg_buf_h = _vm->getDisplayHeight();
+	_bg_buf = (byte *)calloc(_vm->getDisplayWidth(), _vm->getDisplayHeight());
 
 	if (_bg_buf == NULL) {
-		return;
+		error("Render::Render not enough memory");
 	}
 
 	// Allocate temp buffer for animation decoding, 
 	// graphics scalers (2xSaI), etc.
-	tmp_w = disp_info.logical_w;
-	tmp_h = disp_info.logical_h + 4; // BG unbanking requres extra rows
+	tmp_w = _vm->getDisplayWidth();
+	tmp_h = _vm->getDisplayHeight() + 4; // BG unbanking requres extra rows
 	tmp_bytepp = 1;
 
 	_tmp_buf = (byte *)calloc(1, tmp_w * tmp_h * tmp_bytepp);
@@ -98,7 +95,6 @@
 
 int Render::drawScene() {
 	SURFACE *backbuf_surface;
-	GAME_DISPLAYINFO disp_info;
 	SCENE_INFO scene_info;
 	SCENE_BGINFO bg_info;
 	Point bg_pt;
@@ -118,7 +114,6 @@
 	mouse_pt = _vm->getMousePos();
 
 	_vm->_scene->getBGInfo(&bg_info);
-	_vm->getDisplayInfo(&disp_info);
 	bg_pt.x = 0;
 	bg_pt.y = 0;
 

Index: saga.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/saga.cpp,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -d -r1.84 -r1.85
--- saga.cpp	9 Jan 2005 21:36:20 -0000	1.84
+++ saga.cpp	9 Jan 2005 23:41:22 -0000	1.85
@@ -169,9 +169,7 @@
 	_previousTicks = _system->getMillis();
 
 	// Initialize graphics
-	GAME_DISPLAYINFO disp_info;
-	getDisplayInfo(&disp_info);
-	_gfx = new Gfx(_system, disp_info.logical_w, disp_info.logical_h, detector);
+	_gfx = new Gfx(_system, _vm->getDisplayWidth(), _vm->getDisplayHeight(), detector);
 
 	// Graphics driver should be initialized before console
 	_console = new Console(this);

Index: saga.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/saga.h,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -d -r1.67 -r1.68
--- saga.h	8 Jan 2005 21:06:06 -0000	1.67
+++ saga.h	9 Jan 2005 23:41:22 -0000	1.68
@@ -60,6 +60,9 @@
 class Events;
 class PalAnim;
 
+#define GAME_LANGSTR_LIMIT 3
+#define GAME_ITE_LANG_PREFIX "ite_"
+#define GAME_LANG_EXT "lng"
 
 #define PBOUNDS(n,max) (((n)>=(0))&&((n)<(max)))
 #define MAXPATH 512
@@ -150,7 +153,7 @@
 	Point *points;
 };
 
-enum GAME_IDS {
+enum GameIds {
 	// Dreamers Guild
 	GID_ITE_DEMO_G = 0,
 	GID_ITE_DISK_G,
@@ -181,7 +184,7 @@
 	GID_IHNM_CD_DE   // reported by mld. German retail
 };
 
-enum GAME_FILETYPES {
+enum GameFileTypes {
 	GAME_RESOURCEFILE = 1 << 0,
 	GAME_SCRIPTFILE   = 1 << 1,
 	GAME_SOUNDFILE    = 1 << 2,
@@ -193,14 +196,14 @@
 	GAME_PATCHFILE    = 1 << 8
 };
 
-enum GAME_SOUNDINFO_TYPES {
+enum GameSoundTypes {
 	GAME_SOUND_PCM = 0,
 	GAME_SOUND_VOC,
 	GAME_SOUND_WAV,
 	GAME_SOUND_VOX
 };
 
-enum GAME_FONT_IDS {
+enum GameFontIds {
 	GAME_FONT_SMALL = 0,
 	GAME_FONT_MEDIUM,
 	GAME_FONT_LARGE,
@@ -210,7 +213,7 @@
 	GAME_FONT_LARGE3
 };
 
-enum GAME_FEATURES {
+enum GameFeatures {
 	GF_VOX_VOICES      = 1 << 0,
 	GF_BIG_ENDIAN_DATA = 1 << 1,
 	GF_MAC_RESOURCES   = 1 << 2,
@@ -218,36 +221,60 @@
 	GF_WYRMKEEP        = 1 << 4
 };
 
-struct GAME_DISPLAYINFO {
-	int logical_w;
-	int logical_h;
-	int scene_h;
-};
-
-struct GAME_SOUNDINFO {
+struct GameSoundInfo {
 	int res_type;
 	long freq;
 	int sample_size;
 	int stereo;
 };
 
-struct GAME_FONTDESC {
+struct GameFontDescription {
 	uint16 font_id;
 	uint32 font_rn;
 };
 
-struct GAME_SCENEDESC {
-	uint32 scene_lut_rn;
-	uint32 first_scene;
-};
-
-struct GAME_RESOURCEDESC {
+struct GameResourceDescription {
 	uint32 scene_lut_rn;
 	uint32 script_lut_rn;
 	uint32 command_panel_rn;
 	uint32 dialogue_panel_rn;
 };
 
+struct GameFileDescription {
+	const char *fileName;
+	uint16 fileType;
+};
+
+struct GameDisplayInfo {
+	int logicalWidth;
+	int logicalHeight;
+	int scene_h;
+};
+
+struct GameDescription {
+	const char *name;
+	SAGAGameType gameType;
+	GameIds gameId;
+	const char *title;
+	int gd_logical_w;
+	int gd_logical_h;
+	int gd_scene_h;
+	int startSceneNumber;
+	GameResourceDescription *resourceDescription;
+	int filesCount;
+	GameFileDescription *filesDescriptions;
+	int fontsCount;
+	GameFontDescription *fontDescriptions;
+	GameSoundInfo *soundInfo;
+	uint32 features;
+
+	GameSettings toGameSettings() const {
+		GameSettings dummy = { name, title, features };
+		return dummy;
+	}
+};
+
+
 inline int ticksToMSec(int tick) {
 	return tick * 1000 / kScriptTimeTicksPerSecond;
 }
@@ -287,10 +314,16 @@
 
 	int _soundEnabled;
 	int _musicEnabled;
+	
+	char _gameLanguage[GAME_LANGSTR_LIMIT];
+	RSCFILE_CONTEXT **_gameFileContexts;
 
+//current game description
 	int _gameId;
 	int _gameType;
 	uint32 _features;
+	int _gameNumber;
+	GameDescription *_gameDescription;
 
 	SndRes *_sndRes;
 	Sound *_sound;
@@ -351,18 +384,23 @@
 public:
 	int initGame(void);
 	RSCFILE_CONTEXT *getFileContext(uint16 type, int param);
-	int getFontInfo(GAME_FONTDESC **, int *);
-	const GAME_RESOURCEDESC getResourceInfo(void);
-	const GAME_SOUNDINFO getSoundInfo(void);
-	int getDisplayInfo(GAME_DISPLAYINFO *disp_info);
-	int getSceneInfo(GAME_SCENEDESC *);
-	int getDisplayWidth();
-	int getDisplayHeight();
+public:
+	const GameResourceDescription *getResourceDescription() { return _gameDescription->resourceDescription; }
+	const GameSoundInfo *getSoundInfo() { return _gameDescription->soundInfo; }
+	const GameFontDescription *getFontDescription(int index) { 
+		assert(index < _gameDescription->fontsCount);
+		return &_gameDescription->fontDescriptions[index];
+	}
+	int getFontsCount() const { return _gameDescription->fontsCount; }
+
+	int getStartSceneNumber() { return _gameDescription->startSceneNumber; }
+	int getDisplayWidth() { return _gameDescription->gd_logical_w; }
+	int getDisplayHeight() { return _gameDescription->gd_logical_h;}
 	int getStatusYOffset();
 	int getPathYOffset();
 private:
 	int loadLanguage(void);
-	int loadGame(int game_n_p);
+	int loadGame(int gameNumber);
 };
 
 // FIXME: Global var. We use it until everything will be turned into objects

Index: scene.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/scene.cpp,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -d -r1.78 -r1.79
--- scene.cpp	7 Jan 2005 22:18:52 -0000	1.78
+++ scene.cpp	9 Jan 2005 23:41:22 -0000	1.79
@@ -51,14 +51,11 @@
 };
 
 Scene::Scene(SagaEngine *vm) : _vm(vm), _initialized(false) {
-	GAME_SCENEDESC gs_desc;
 	byte *scene_lut_p;
 	size_t scene_lut_len;
 	int result;
 	int i;
 
-	// Load game-specific scene data
-	_vm->getSceneInfo(&gs_desc);
 
 	// Load scene module resource context
 	_sceneContext = _vm->getFileContext(GAME_RESOURCEFILE, 0);
@@ -69,8 +66,8 @@
 
 
 	// Load scene lookup table
-	debug(0, "Loading scene LUT from resource %u.", gs_desc.scene_lut_rn);
-	result = RSC_LoadResource(_sceneContext, gs_desc.scene_lut_rn, &scene_lut_p, &scene_lut_len);
+	debug(0, "Loading scene LUT from resource %u.", _vm->getResourceDescription()->scene_lut_rn);
+	result = RSC_LoadResource(_sceneContext, _vm->getResourceDescription()->scene_lut_rn, &scene_lut_p, &scene_lut_len);
 	if (result != SUCCESS) {
 		warning("Scene::Scene(): Error: couldn't load scene LUT");
 		return;
@@ -95,9 +92,7 @@
 
 	free(scene_lut_p);
 
-	if (gs_desc.first_scene != 0) {
-		_firstScene = gs_desc.first_scene;
-	}
+	_firstScene = _vm->getStartSceneNumber();
 
 	debug(0, "First scene set to %d.", _firstScene);
 
@@ -320,7 +315,6 @@
 }
 
 int Scene::getBGInfo(SCENE_BGINFO *bginfo) {
-	GAME_DISPLAYINFO di;
 	int x, y;
 
 	assert(_initialized);
@@ -331,16 +325,15 @@
 	bginfo->bg_h = _bg.h;
 	bginfo->bg_p = _bg.p;
 
-	_vm->getDisplayInfo(&di);
 	x = 0;
 	y = 0;
 
-	if (_bg.w < di.logical_w) {
-		x = (di.logical_w - _bg.w) / 2;
+	if (_bg.w < _vm->getDisplayWidth()) {
+		x = (_vm->getDisplayWidth() - _bg.w) / 2;
 	}
 
-	if (_bg.h < di.scene_h) {
-		y = (di.scene_h - _bg.h) / 2;
+	if (_bg.h < _vm->getStatusYOffset()) {
+		y = (_vm->getStatusYOffset() - _bg.h) / 2;
 	}
 
 	bginfo->bg_x = x;
@@ -902,23 +895,22 @@
 }
 
 int Scene::draw(SURFACE *dst_s) {
-	GAME_DISPLAYINFO disp_info;
 	BUFFER_INFO buf_info;
 	Point bg_pt;
 
 	assert(_initialized);
 
 	_vm->_render->getBufferInfo(&buf_info);
-	_vm->getDisplayInfo(&disp_info);
 
 	bg_pt.x = 0;
 	bg_pt.y = 0;
 
-	if (_vm->_scene->getFlags() & kSceneFlagISO)
+	if (_vm->_scene->getFlags() & kSceneFlagISO) {
 		_vm->_isoMap->draw(dst_s);
-	else
-		bufToSurface(dst_s, buf_info.bg_buf, disp_info.logical_w,
-						MAX(disp_info.scene_h, _bg.h), NULL, &bg_pt);
+	} else {
+		bufToSurface(dst_s, buf_info.bg_buf, _vm->getDisplayWidth(),
+						MAX(_vm->getStatusYOffset(), _bg.h), NULL, &bg_pt);
+	}
 
 	return SUCCESS;
 }

Index: script.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/script.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -d -r1.44 -r1.45
--- script.cpp	9 Jan 2005 21:07:19 -0000	1.44
+++ script.cpp	9 Jan 2005 23:41:22 -0000	1.45
@@ -37,7 +37,6 @@
 // Initializes the scripting module.
 // Loads script resource look-up table, initializes script data system
 Script::Script() {
-	GAME_RESOURCEDESC gr_desc;
 	RSCFILE_CONTEXT *s_lut_ctxt;
 	RSCFILE_CONTEXT *resourceContext;
 	byte *rsc_ptr;
@@ -71,7 +70,6 @@
 		_dataBuf[i].data = NULL;
 	}
 
-	gr_desc = _vm->getResourceInfo();
 	
 	debug(0, "Initializing scripting subsystem");
 	// Load script resource file context
@@ -86,8 +84,8 @@
 		error("Couldn't get resource file context");
 	}
 
-	debug(0, "Loading script LUT from resource %u.", gr_desc.script_lut_rn);
-	result = RSC_LoadResource(s_lut_ctxt, gr_desc.script_lut_rn, &rsc_ptr, &rsc_len);
+	debug(0, "Loading script LUT from resource %u.", _vm->getResourceDescription()->script_lut_rn);
+	result = RSC_LoadResource(s_lut_ctxt, _vm->getResourceDescription()->script_lut_rn, &rsc_ptr, &rsc_len);
 	if (result != SUCCESS) {
 		error("Error: Couldn't load script resource look-up table");
 	}

Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -d -r1.74 -r1.75
--- sfuncs.cpp	8 Jan 2005 20:30:06 -0000	1.74
+++ sfuncs.cpp	9 Jan 2005 23:41:22 -0000	1.75
@@ -1005,7 +1005,6 @@
 // Param1: string rid
 int Script::sfPlacard(SCRIPTFUNC_PARAMS) {
 	int stringId;
-	GAME_DISPLAYINFO disp;
 	SURFACE *back_buf = _vm->_gfx->getBackBuffer();
 	static PALENTRY cur_pal[PAL_ENTRIES];
 	PALENTRY *pal;
@@ -1017,8 +1016,6 @@
 	_vm->_interface->rememberMode();
 	_vm->_interface->setMode(kPanelPlacard);
 
-	_vm->getDisplayInfo(&disp);
-
 	stringId = thread->pop();
 
 	event.type = ONESHOT_EVENT;
@@ -1057,9 +1054,9 @@
 	event.data = back_buf;
 	event.param = 138;
 	event.param2 = 0;
-	event.param3 = disp.scene_h;
+	event.param3 = _vm->getStatusYOffset();
 	event.param4 = 0;
-	event.param5 = disp.logical_w;
+	event.param5 = _vm->getDisplayWidth();
 
 	q_event = _vm->_events->chain(q_event, &event);
 
@@ -1076,8 +1073,8 @@
 
 	text_entry.color = _vm->_gfx->getWhite();
 	text_entry.effect_color = _vm->_gfx->getBlack();
-	text_entry.text_x = disp.logical_w / 2;
-	text_entry.text_y = (disp.scene_h - _vm->_font->getHeight(MEDIUM_FONT_ID)) / 2;
+	text_entry.text_x = _vm->getDisplayWidth() / 2;
+	text_entry.text_y = (_vm->getStatusYOffset() - _vm->_font->getHeight(MEDIUM_FONT_ID)) / 2;
 	text_entry.font_id = MEDIUM_FONT_ID;
 	text_entry.flags = FONT_OUTLINE | FONT_CENTERED;
 	text_entry.string = getScriptString(stringId);

Index: sndres.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sndres.cpp,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- sndres.cpp	9 Jan 2005 15:57:38 -0000	1.37
+++ sndres.cpp	9 Jan 2005 23:41:22 -0000	1.38
@@ -51,7 +51,7 @@
 	}
 
 	// Grab sound resource information for the current game
-	_snd_info = _vm->getSoundInfo();
+	_snd_info = *_vm->getSoundInfo();
 
 	_init = 1;
 }

Index: sndres.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sndres.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- sndres.h	1 Jan 2005 16:18:36 -0000	1.19
+++ sndres.h	9 Jan 2005 23:41:22 -0000	1.20
@@ -51,7 +51,7 @@
 	RSCFILE_CONTEXT *_sfx_ctxt;
 	RSCFILE_CONTEXT *_voice_ctxt;
 
-	GAME_SOUNDINFO _snd_info;
+	GameSoundInfo _snd_info;
 
 	SagaEngine *_vm;
 };





More information about the Scummvm-git-logs mailing list