[Scummvm-cvs-logs] SF.net SVN: scummvm: [22545] tools/trunk

h00ligan at users.sourceforge.net h00ligan at users.sourceforge.net
Sat May 20 06:12:04 CEST 2006


Revision: 22545
Author:   h00ligan
Date:     2006-05-20 06:10:34 -0700 (Sat, 20 May 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=22545&view=rev

Log Message:
-----------
compress_saga WIP

Modified Paths:
--------------
    tools/trunk/Makefile
    tools/trunk/compress.c

Added Paths:
-----------
    tools/trunk/compress_saga.cpp
    tools/trunk/sagagame.cpp
    tools/trunk/sagagame.h
    tools/trunk/sagaresnames.h

Removed Paths:
-------------
    tools/trunk/compress_saga.c
Modified: tools/trunk/Makefile
===================================================================
--- tools/trunk/Makefile	2006-05-20 11:24:45 UTC (rev 22544)
+++ tools/trunk/Makefile	2006-05-20 13:10:34 UTC (rev 22545)
@@ -79,7 +79,7 @@
 	$(CC) $(LDFLAGS) -o $@ $+
 
 compress_saga$(EXEEXT): compress_saga.o compress.o util.o
-	$(CC) $(LDFLAGS) -o $@ $+
+	$(CXX) $(LDFLAGS) -o $@ $+
 
 extract_simon1_amiga$(EXEEXT): extract_simon1_amiga.o
 	$(CC) $(LDFLAGS) -o $@ $+

Modified: tools/trunk/compress.c
===================================================================
--- tools/trunk/compress.c	2006-05-20 11:24:45 UTC (rev 22544)
+++ tools/trunk/compress.c	2006-05-20 13:10:34 UTC (rev 22545)
@@ -77,7 +77,9 @@
 		return 22050;
 	} else {
 		int sr = 1000000L / (256L - vocSR);
-		warning("inexact sample rate used: %d (0x%x)", sr, vocSR);
+		// inexact sampling rates occur e.g. in the kitchen in Monkey Island,
+		// very easy to reach right from the start of the game.
+		//warning("inexact sample rate used: %i (0x%x)", sr, vocSR);
 		return sr;
 	}
 }
@@ -217,11 +219,13 @@
 		size = fread(fbuf, 1, length > sizeof(fbuf) ? sizeof(fbuf) : length, input);
 		if (size <= 0)
 			break;
-		length -= size;
+		length -= (int)size;
 		fwrite(fbuf, 1, size, f);
 	}
 	fclose(f);
 
+	//TODO: setRawAudioType(false, false, 8);
+
 	/* Convert the WAV temp file to OGG/MP3 */
 	encodeAudio(outName, false, -1, tempEncoded, compMode);
 }
@@ -279,7 +283,7 @@
 			size = fread(fbuf, 1, length > sizeof(fbuf) ? sizeof(fbuf) : (uint32)length, input);
 			if (size <= 0)
 				break;
-			length -= size;
+			length -= (int)size; 
 			fwrite(fbuf, 1, size, f);
 		}
 	}
@@ -288,6 +292,8 @@
 	
 	assert(real_samplerate != -1);
 
+	setRawAudioType(false, false, 8);
+
 	/* Convert the raw temp file to OGG/MP3 */
 	encodeAudio(outName, true, real_samplerate, tempEncoded, compMode);
 }

Deleted: tools/trunk/compress_saga.c
===================================================================
--- tools/trunk/compress_saga.c	2006-05-20 11:24:45 UTC (rev 22544)
+++ tools/trunk/compress_saga.c	2006-05-20 13:10:34 UTC (rev 22545)
@@ -1,245 +0,0 @@
-/* compress_saga - Compress SAGA engine digital sound files into
- * MP3 and Ogg Vorbis format
- * Copyright (C) 2004, Marcoen Hirschberg
- * Copyright (C) 2004-2006  The ScummVM Team
- *
- * 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$
- * 
- */
-
-#include <stdio.h>
-#include "compress.h"
-
-typedef struct RECORD {
-	uint32 offset;
-	uint32 size;
-} RECORD;
-
-static CompressMode gCompMode = kMP3Mode;
-
-#define RSC_TABLEINFO_SIZE 8
-#define RSC_TABLEENTRY_SIZE 8
-
-void sagaEncode(char *infile) {
-	FILE *res_file;
-	FILE *outputfile;
-
-	uint32 res_tbl_ct;
-	uint32 res_tbl_offset;
-	uint32 res_size;
-	uint32 outtable_offset;
-
-	uint32 t;
-
-	struct RECORD  *table;
-	struct RECORD  *outtable;
-	int length;
-	FILE *tempf;
-	char fbuf[2048];
-	const char *output;
-	size_t size;
-	bool audio;
-	char buf[8];
-
-	res_file = fopen(infile, "rb");
-	res_size = fileSize(res_file);
-	printf("filesize: %ul\n", res_size);
-	/*
-	 * At the end of the resource file there are 2 values: one points to the
-	 * beginning of the resource table the other gives the number of
-	 * records in the table
-	 */
-	fseek(res_file, res_size - RSC_TABLEINFO_SIZE, SEEK_SET);
-
-	res_tbl_offset = readUint32LE(res_file);
-	res_tbl_ct = readUint32LE(res_file);
-
-	printf("tabel offset: %ul\nnumber of records: %ul\n", res_tbl_offset, res_tbl_ct);
-
-	if (res_tbl_offset != res_size - RSC_TABLEINFO_SIZE - RSC_TABLEENTRY_SIZE * res_tbl_ct) {
-		printf("Something's wrong with your resource file..\n");
-		exit(2);
-
-	}
-	/* Go to beginning of the table */
-	fseek(res_file, res_tbl_offset, SEEK_SET);
-
-	table = malloc(res_tbl_ct * sizeof(struct RECORD));
-	outtable = malloc(res_tbl_ct * sizeof(struct RECORD));
-
-	/* Put offsets of all the records in a table */
-	for (t = 0; t < res_tbl_ct; t++) {
-
-		table[t].offset = readUint32LE(res_file);
-		table[t].size = readUint32LE(res_file);
-
-		printf("record: %ul, offset: %ul, size: %ul\n", t, table[t].offset, table[t].size);
-
-		if ((table[t].offset > res_size) ||
-		    (table[t].size > res_size)) {
-			printf("The offset points outside the file!");
-			exit(2);
-		}
-
-	}
-
-
-	outputfile = fopen("out.res", "wb");
-
-	for (t = 0; t < res_tbl_ct; t++) {
-
-		audio = 0;
-		fseek(res_file, table[t].offset, SEEK_SET);
-		fread(buf, 1, 8, res_file);
-		if (memcmp(buf, "RIFF", 4) == 0) {
-			printf("Wave file: ");
-			audio = -1;
-		} else if (memcmp(buf, "FORM", 4) == 0) {
-			printf("XMIDI file: ");
-		} else if (memcmp(buf, "Ogg", 3) == 0) {
-			printf("Ogg file: ");
-		} else {
-			printf("unknown file: ");
-		}
-		length = table[t].size;
-		fseek(res_file, table[t].offset, SEEK_SET);
-		/* Copy the WAV data to a temporary file */
-		tempf = fopen(TEMP_WAV, "wb");
-		while (length > 0) {
-			size = fread(fbuf, 1, length > sizeof(fbuf) ? sizeof(fbuf) : length, res_file);
-			if (size <= 0)
-				break;
-			length -= size;
-			fwrite(fbuf, 1, size, tempf);
-		}
-		fclose(tempf);
-
-		if (audio) {
-		/* Convert the WAV temp file to OGG/MP3 */
-			encodeAudio(TEMP_WAV, false, -1, tempEncoded, gCompMode);
-			output = tempEncoded;
-		} else {
-			output = TEMP_WAV;
-		}
-		tempf = fopen(output, "rb");
-		outtable[t].offset = ftell(outputfile);
-		printf("Offset: %ul, ", outtable[t].offset);
-		while ((size = fread(fbuf, 1, 2048, tempf)) > 0) {
-			fwrite(fbuf, 1, size, outputfile);
-		}
-		outtable[t].size = ftell(tempf);
-		printf("Size: %ul\n", outtable[t].size);
-		fclose(tempf);
-
-	}
-	outtable_offset = ftell(outputfile);
-	for (t = 0; t < res_tbl_ct; t++) {
-		writeUint32LE(outputfile, outtable[t].offset);
-		writeUint32LE(outputfile, outtable[t].size);
-	}
-	writeUint32LE(outputfile, outtable_offset);
-	writeUint32LE(outputfile, res_tbl_ct);	/* Should be the same number of entries */
-
-	fclose(outputfile);
-
-	free(table);
-	free(outtable);
-	fclose(res_file);
-	printf("Done!\n");
-}
-
-void showhelp(char *exename) {
-	printf("\nUsage: %s <params> [<file> | mac]\n", exename);
-
-	printf("\nParams:\n");
-
-	printf("--mp3        encode to MP3 format (default)\n");
-	printf("--vorbis     encode to Vorbis format\n");
-	printf("--flac       encode to Flac format\n");
-	printf("(If one of these is specified, it must be the first parameter.)\n");
-
-	printf("\nMP3 mode params:\n");
-	printf("-b <rate>    <rate> is the target bitrate(ABR)/minimal bitrate(VBR) (default:%d)\n", minBitrDef);
-	printf("-B <rate>    <rate> is the maximum VBR/ABR bitrate (default:%d)\n", maxBitrDef);
-	printf("--vbr        LAME uses the VBR mode (default)\n");
-	printf("--abr        LAME uses the ABR mode\n");
-	printf("-V <value>   specifies the value (0 - 9) of VBR quality (0=best) (default:%d)\n", vbrqualDef);
-	printf("-q <value>   specifies the MPEG algorithm quality (0-9; 0=best) (default:%d)\n", algqualDef);
-	printf("--silent     the output of LAME is hidden (default:disabled)\n");
-
-	printf("\nVorbis mode params:\n");
-	printf("-b <rate>    <rate> is the nominal bitrate (default:unset)\n");
-	printf("-m <rate>    <rate> is the minimum bitrate (default:unset)\n");
-	printf("-M <rate>    <rate> is the maximum bitrate (default:unset)\n");
-	printf("-q <value>   specifies the value (0 - 10) of VBR quality (10=best) (default:%d)\n", oggqualDef);
-	printf("--silent     the output of oggenc is hidden (default:disabled)\n");
-
-	printf("\nFlac mode params:\n");
-	printf("[params]     optional Arguments passed to the Encoder\n");
-	printf("             recommended is: --best -b 1152\n");
-
-	printf("\n--help     this help message\n");
-
-	printf("\n\nIf a parameter is not given the default value is used\n");
-	printf("If using VBR mode for MP3 -b and -B must be multiples of 8; the maximum is 160!\n");
-	exit(2);
-}
-
-int main(int argc, char *argv[]) {
-	int		i;
-
-	if (argc < 2)
-		showhelp(argv[0]);
-
-	/* compression mode */
-	gCompMode = kMP3Mode;
-	i = 1;
-	if (strcmp(argv[1], "--mp3") == 0) {
-		gCompMode = kMP3Mode;
-		i++;
-	} else if (strcmp(argv[1], "--vorbis") == 0) {
-		gCompMode = kVorbisMode;
-		i++;
-	} else if (strcmp(argv[1], "--flac") == 0) {
-		gCompMode = kFlacMode;
-		i++;
-	}
-	switch (gCompMode) {
-	case kMP3Mode:
-		tempEncoded = TEMP_MP3;
-		if (!process_mp3_parms(argc, argv, i))
-			showhelp(argv[0]);
-		break;
-	case kVorbisMode:
-		tempEncoded = TEMP_OGG;
-		if (!process_ogg_parms(argc, argv, i))
-			showhelp(argv[0]);
-		break;
-	case kFlacMode:
-		tempEncoded = TEMP_FLAC;
-		if (!process_flac_parms(argc, argv, i))
-			showhelp(argv[0]);
-		break;
-	}
-
-	i = argc - 1;
-
-	sagaEncode(argv[i]);
-
-	return (0);
-}

Added: tools/trunk/compress_saga.cpp
===================================================================
--- tools/trunk/compress_saga.cpp	                        (rev 0)
+++ tools/trunk/compress_saga.cpp	2006-05-20 13:10:34 UTC (rev 22545)
@@ -0,0 +1,609 @@
+/* compress_saga - Compress SAGA engine digital sound files into
+ * MP3 and Ogg Vorbis format
+ * Copyright (C) 2004, Marcoen Hirschberg
+ * Copyright (C) 2004-2006  The ScummVM Team
+ *
+ * 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$
+ * 
+ */
+
+#include <stdio.h>
+#include "compress.h"
+
+namespace Common {
+
+// <!-- taken from common\util.h
+
+/**
+ * List of game language.
+ */
+enum Language {
+	EN_ANY,     // Generic English (when only one game version exist)
+	EN_USA,
+	EN_GRB,
+
+	DE_DEU,
+	FR_FRA,
+	IT_ITA,
+	PT_BRA,
+	ES_ESP,
+	JA_JPN,
+	ZH_TWN,
+	KO_KOR,
+	SE_SWE,
+	HB_ISR,
+	RU_RUS,
+	CZ_CZE,
+	NL_NLD,
+	NB_NOR,
+	PL_POL,
+
+	UNK_LANG = -1	// Use default language (i.e. none specified)
+};
+
+/**
+ * List of game platforms. Specifying a platform for a target can be used to
+ * give the game engines a hint for which platform the game data file are.
+ * This may be optional or required, depending on the game engine and the
+ * game in question.
+ */
+enum Platform {
+	kPlatformPC,
+	kPlatformAmiga,
+	kPlatformAtariST,
+	kPlatformMacintosh,
+	kPlatformFMTowns,
+	kPlatformWindows,
+	kPlatformNES,
+	kPlatformC64,
+	kPlatformLinux,
+	kPlatformAcorn,
+	kPlatformSegaCD,
+	kPlatform3DO,
+//	kPlatformPCEngine,
+
+	kPlatformUnknown = -1
+};
+//  taken from common\util.h -->
+
+// <!-- taken from common/md5.c
+
+typedef struct {
+	uint32 total[2];
+	uint32 state[4];
+	uint8 buffer[64];
+} md5_context;
+
+#define GET_UINT32(n, b, i)	(n) = READ_LE_UINT32(b + i)
+#define PUT_UINT32(n, b, i)	WRITE_LE_UINT32(b + i, n)
+
+void md5_starts(md5_context *ctx) {
+	ctx->total[0] = 0;
+	ctx->total[1] = 0;
+
+	ctx->state[0] = 0x67452301;
+	ctx->state[1] = 0xEFCDAB89;
+	ctx->state[2] = 0x98BADCFE;
+	ctx->state[3] = 0x10325476;
+}
+
+static void md5_process(md5_context *ctx, const uint8 data[64]) {
+	uint32 X[16], A, B, C, D;
+
+	GET_UINT32(X[0],  data,  0);
+	GET_UINT32(X[1],  data,  4);
+	GET_UINT32(X[2],  data,  8);
+	GET_UINT32(X[3],  data, 12);
+	GET_UINT32(X[4],  data, 16);
+	GET_UINT32(X[5],  data, 20);
+	GET_UINT32(X[6],  data, 24);
+	GET_UINT32(X[7],  data, 28);
+	GET_UINT32(X[8],  data, 32);
+	GET_UINT32(X[9],  data, 36);
+	GET_UINT32(X[10], data, 40);
+	GET_UINT32(X[11], data, 44);
+	GET_UINT32(X[12], data, 48);
+	GET_UINT32(X[13], data, 52);
+	GET_UINT32(X[14], data, 56);
+	GET_UINT32(X[15], data, 60);
+
+#define S(x, n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
+
+#define P(a, b, c, d, k, s, t)                    \
+{                                                 \
+	a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \
+}
+
+	A = ctx->state[0];
+	B = ctx->state[1];
+	C = ctx->state[2];
+	D = ctx->state[3];
+
+#define F(x, y, z) (z ^ (x & (y ^ z)))
+
+	P(A, B, C, D,  0,  7, 0xD76AA478);
+	P(D, A, B, C,  1, 12, 0xE8C7B756);
+	P(C, D, A, B,  2, 17, 0x242070DB);
+	P(B, C, D, A,  3, 22, 0xC1BDCEEE);
+	P(A, B, C, D,  4,  7, 0xF57C0FAF);
+	P(D, A, B, C,  5, 12, 0x4787C62A);
+	P(C, D, A, B,  6, 17, 0xA8304613);
+	P(B, C, D, A,  7, 22, 0xFD469501);
+	P(A, B, C, D,  8,  7, 0x698098D8);
+	P(D, A, B, C,  9, 12, 0x8B44F7AF);
+	P(C, D, A, B, 10, 17, 0xFFFF5BB1);
+	P(B, C, D, A, 11, 22, 0x895CD7BE);
+	P(A, B, C, D, 12,  7, 0x6B901122);
+	P(D, A, B, C, 13, 12, 0xFD987193);
+	P(C, D, A, B, 14, 17, 0xA679438E);
+	P(B, C, D, A, 15, 22, 0x49B40821);
+
+#undef F
+
+#define F(x, y, z) (y ^ (z & (x ^ y)))
+
+	P(A, B, C, D,  1,  5, 0xF61E2562);
+	P(D, A, B, C,  6,  9, 0xC040B340);
+	P(C, D, A, B, 11, 14, 0x265E5A51);
+	P(B, C, D, A,  0, 20, 0xE9B6C7AA);
+	P(A, B, C, D,  5,  5, 0xD62F105D);
+	P(D, A, B, C, 10,  9, 0x02441453);
+	P(C, D, A, B, 15, 14, 0xD8A1E681);
+	P(B, C, D, A,  4, 20, 0xE7D3FBC8);
+	P(A, B, C, D,  9,  5, 0x21E1CDE6);
+	P(D, A, B, C, 14,  9, 0xC33707D6);
+	P(C, D, A, B,  3, 14, 0xF4D50D87);
+	P(B, C, D, A,  8, 20, 0x455A14ED);
+	P(A, B, C, D, 13,  5, 0xA9E3E905);
+	P(D, A, B, C,  2,  9, 0xFCEFA3F8);
+	P(C, D, A, B,  7, 14, 0x676F02D9);
+	P(B, C, D, A, 12, 20, 0x8D2A4C8A);
+
+#undef F
+
+#define F(x, y, z) (x ^ y ^ z)
+
+	P(A, B, C, D,  5,  4, 0xFFFA3942);
+	P(D, A, B, C,  8, 11, 0x8771F681);
+	P(C, D, A, B, 11, 16, 0x6D9D6122);
+	P(B, C, D, A, 14, 23, 0xFDE5380C);
+	P(A, B, C, D,  1,  4, 0xA4BEEA44);
+	P(D, A, B, C,  4, 11, 0x4BDECFA9);
+	P(C, D, A, B,  7, 16, 0xF6BB4B60);
+	P(B, C, D, A, 10, 23, 0xBEBFBC70);
+	P(A, B, C, D, 13,  4, 0x289B7EC6);
+	P(D, A, B, C,  0, 11, 0xEAA127FA);
+	P(C, D, A, B,  3, 16, 0xD4EF3085);
+	P(B, C, D, A,  6, 23, 0x04881D05);
+	P(A, B, C, D,  9,  4, 0xD9D4D039);
+	P(D, A, B, C, 12, 11, 0xE6DB99E5);
+	P(C, D, A, B, 15, 16, 0x1FA27CF8);
+	P(B, C, D, A,  2, 23, 0xC4AC5665);
+
+#undef F
+
+#define F(x, y, z) (y ^ (x | ~z))
+
+	P(A, B, C, D,  0,  6, 0xF4292244);
+	P(D, A, B, C,  7, 10, 0x432AFF97);
+	P(C, D, A, B, 14, 15, 0xAB9423A7);
+	P(B, C, D, A,  5, 21, 0xFC93A039);
+	P(A, B, C, D, 12,  6, 0x655B59C3);
+	P(D, A, B, C,  3, 10, 0x8F0CCC92);
+	P(C, D, A, B, 10, 15, 0xFFEFF47D);
+	P(B, C, D, A,  1, 21, 0x85845DD1);
+	P(A, B, C, D,  8,  6, 0x6FA87E4F);
+	P(D, A, B, C, 15, 10, 0xFE2CE6E0);
+	P(C, D, A, B,  6, 15, 0xA3014314);
+	P(B, C, D, A, 13, 21, 0x4E0811A1);
+	P(A, B, C, D,  4,  6, 0xF7537E82);
+	P(D, A, B, C, 11, 10, 0xBD3AF235);
+	P(C, D, A, B,  2, 15, 0x2AD7D2BB);
+	P(B, C, D, A,  9, 21, 0xEB86D391);
+
+#undef F
+
+	ctx->state[0] += A;
+	ctx->state[1] += B;
+	ctx->state[2] += C;
+	ctx->state[3] += D;
+}
+
+void md5_update(md5_context *ctx, const uint8 *input, uint32 length) {
+	uint32 left, fill;
+
+	if (!length)
+		return;
+
+	left = ctx->total[0] & 0x3F;
+	fill = 64 - left;
+
+	ctx->total[0] += length;
+	ctx->total[0] &= 0xFFFFFFFF;
+
+	if (ctx->total[0] < length)
+		ctx->total[1]++;
+
+	if (left && length >= fill) {
+		memcpy((void *)(ctx->buffer + left), (const void *)input, fill);
+		md5_process(ctx, ctx->buffer);
+		length -= fill;
+		input  += fill;
+		left = 0;
+	}
+
+	while (length >= 64) {
+		md5_process(ctx, input);
+		length -= 64;
+		input  += 64;
+	}
+
+	if (length) {
+		memcpy((void *)(ctx->buffer + left), (const void *)input, length);
+	}
+}
+
+static const uint8 md5_padding[64] = {
+	0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+void md5_finish(md5_context *ctx, uint8 digest[16]) {
+	uint32 last, padn;
+	uint32 high, low;
+	uint8 msglen[8];
+
+	high = (ctx->total[0] >> 29) | (ctx->total[1] << 3);
+	low  = (ctx->total[0] <<  3);
+
+	PUT_UINT32(low,  msglen, 0);
+	PUT_UINT32(high, msglen, 4);
+
+	last = ctx->total[0] & 0x3F;
+	padn = (last < 56) ? (56 - last) : (120 - last);
+
+	md5_update(ctx, md5_padding, padn);
+	md5_update(ctx, msglen, 8);
+
+	PUT_UINT32(ctx->state[0], digest,  0);
+	PUT_UINT32(ctx->state[1], digest,  4);
+	PUT_UINT32(ctx->state[2], digest,  8);
+	PUT_UINT32(ctx->state[3], digest, 12);
+}
+
+bool md5_file(const char *name, uint8 digest[16], uint32 length) {
+	FILE *f;
+
+	f = fopen(name, "rb");
+	if (f == NULL) {
+		printf("md5_file couldn't open '%s'", name);
+		return false;
+	}
+
+	md5_context ctx;
+	uint32 i;
+	unsigned char buf[1000];
+	bool restricted = (length != 0);
+	int readlen;
+
+	if (!restricted || sizeof(buf) <= length)
+		readlen = sizeof(buf);
+	else
+		readlen = length;
+
+	md5_starts(&ctx);
+
+	
+	while ((i = (uint32)fread(buf, 1, readlen, f)) > 0) {
+		md5_update(&ctx, buf, i);
+
+		length -= i;
+		if (restricted && length == 0)
+			break;
+
+		if (restricted && sizeof(buf) > length)
+			readlen = length;
+	}
+
+	md5_finish(&ctx, digest);
+	fclose(f);
+	return true;
+}
+
+}
+// taken from common/md5.c -->
+
+#include "SagaGame.h"
+#include "SagaResNames.h"
+#include "SagaGame.cpp"
+
+typedef struct  {
+	uint32 offset;
+	uint32 size;
+} Record;
+
+static CompressMode gCompMode = kMP3Mode;
+
+GameDescription *currentGameDescription = NULL;
+int currentFileIndex = -1;
+
+bool detectFile(const char *inFileName) {
+	int gamesCount = ARRAYSIZE(gameDescriptions);
+	int j,i;
+	uint8 md5sum[16];
+	char md5str[32+1];
+
+	Common::md5_file(inFileName, md5sum, FILE_MD5_BYTES);
+	printf("Input file name: %s\n", inFileName);
+	for (j = 0; j < 16; j++) {
+		sprintf(md5str + j*2, "%02x", (int)md5sum[j]);
+	}
+	printf("md5: %s\n", md5str);
+
+	for (i = 0; i < gamesCount; i++) {
+		for (j = 0; j < gameDescriptions[i].filesCount; j++) {
+			if (strcmp(gameDescriptions[i].filesDescriptions[j].md5, md5str) == 0) {
+				if ((gameDescriptions[i].filesDescriptions[j].fileType & (GAME_VOICEFILE | GAME_SOUNDFILE | GAME_MUSICFILE)) != 0)
+				{
+					currentGameDescription = &gameDescriptions[i];
+					currentFileIndex = j;
+					printf("Matched game: %s %s\n", currentGameDescription->name, currentGameDescription->extra);
+					return true;
+				}
+			}
+		}
+	}
+	printf("unsupported file\n");
+	return false;
+}
+
+uint32 copyFile(const char *fromFileName, FILE* outputFile) {
+	uint32 size;
+	char fbuf[2048];
+	FILE * tempf;
+	
+	tempf = fopen(fromFileName, "rb");
+	if (tempf == NULL)
+		error("unable to open %s\n", fromFileName);
+
+	while ((size = (uint32)fread(fbuf, 1, sizeof(fbuf), tempf)) > 0) {
+		fwrite(fbuf, 1, size, outputFile);
+	}
+	size = ftell(tempf);
+	fclose(tempf);
+	return size;
+}
+
+void copyFile(FILE* inputFile, uint32 inputSize, const char* toFileName) {
+	uint32 size;
+	char fbuf[2048];
+	FILE * tempf;
+	
+	tempf = fopen(toFileName, "wb");
+	if (tempf == NULL)
+		error("unable to open %s\n", toFileName);
+	while (inputSize > 0) {
+		size = (uint32)fread(fbuf, 1, inputSize > sizeof(fbuf) ? sizeof(fbuf) : inputSize, inputFile);
+		if (size == 0) {
+			error("unable to copy file");
+		}
+		fwrite(fbuf, 1, size, tempf);
+		inputSize -= size;
+	}
+	fclose(tempf);
+}
+
+uint32 encodeEntry(GameSoundInfo *soundInfo, FILE* inputFile, uint32 inputSize, FILE* outputFile) {
+
+	if (soundInfo->resourceType == kSoundVOC) {
+		fseek(inputFile, 26, SEEK_CUR); //skip header, assume it's OK
+		extractAndEncodeVOC(TEMP_RAW, inputFile, gCompMode);
+		return copyFile(tempEncoded, outputFile);
+	}
+	if (soundInfo->resourceType == kSoundPCM) {
+		copyFile(inputFile, inputSize, TEMP_RAW);
+
+		//BUG-BUG: bool(c++) -> bool(c) cause bug in al->eax conversion
+		setRawAudioType( !soundInfo->isBigEndian, soundInfo->stereo, soundInfo->sampleBits);
+		encodeAudio(TEMP_RAW, true, soundInfo->frequency, tempEncoded, gCompMode);
+		return copyFile(tempEncoded, outputFile);
+	}
+
+
+	error("sorry - unsupported resourceType %ul\n", soundInfo->resourceType);
+}
+
+#define RSC_TABLEINFO_SIZE 8
+#define RSC_TABLEENTRY_SIZE 8
+
+void sagaEncode(const char *inputFileName) {
+	FILE *inputFile;
+	FILE *outputFile;
+	uint32 inputFileSize;
+	uint32 resTableOffset;
+	uint32 resTableCount;
+	uint32 i;
+
+	Record *inputTable;
+	Record *outputTable;
+	GameFileDescription *currentFileDescription;
+	GameSoundInfo *soundInfo;
+
+	inputFile = fopen(inputFileName, "rb");
+	inputFileSize = fileSize(inputFile);
+	printf("filesize: %ul\n", inputFileSize);
+	/*
+	 * At the end of the resource file there are 2 values: one points to the
+	 * beginning of the resource table the other gives the number of
+	 * records in the table
+	 */
+	fseek(inputFile, inputFileSize - RSC_TABLEINFO_SIZE, SEEK_SET);
+
+	resTableOffset = readUint32LE(inputFile);
+	resTableCount = readUint32LE(inputFile);
+
+	printf("table offset: %ul\nnumber of records: %ul\n", resTableOffset, resTableCount);
+	if (resTableOffset != inputFileSize - RSC_TABLEINFO_SIZE - RSC_TABLEENTRY_SIZE * resTableCount) {
+		error("Something's wrong with your resource file..\n");
+	}
+
+	// Go to beginning of the table 
+	fseek(inputFile, resTableOffset, SEEK_SET);
+
+	inputTable = (Record*)malloc(resTableCount * sizeof(Record));
+
+	// Put offsets of all the records in a table 
+	for (i = 0; i < resTableCount; i++) {
+
+		inputTable[i].offset = readUint32LE(inputFile);
+		inputTable[i].size = readUint32LE(inputFile);
+
+		 printf("record: %ul, offset: %ul, size: %ul\n", i, inputTable[i].offset, inputTable[i].size);
+	
+		if ((inputTable[i].offset > inputFileSize) ||
+		    (inputTable[i].offset + inputTable[i].size > inputFileSize)) {
+			error("The offset points outside the file!");
+		}
+
+	}
+	currentFileDescription = &currentGameDescription->filesDescriptions[currentFileIndex];
+	outputTable = (Record*)malloc(resTableCount * sizeof(Record));
+	
+	outputFile = fopen("out.res", "wb");
+
+	for (i = 0; i < resTableCount; i++) {
+		fseek(inputFile, inputTable[i].offset, SEEK_SET);
+		outputTable[i].offset = ftell(outputFile);
+		
+		if ((currentFileDescription->fileType & GAME_VOICEFILE) != 0) {
+			soundInfo = currentGameDescription->voiceInfo;
+		} else {
+			if ((currentFileDescription->fileType & GAME_SOUNDFILE) != 0) {
+				soundInfo = currentGameDescription->sfxInfo;
+			} else {
+				if ((currentFileDescription->fileType & GAME_MUSICFILE) != 0) {
+					soundInfo = currentGameDescription->musicInfo;
+				}
+			}
+		}
+
+		outputTable[i].size = encodeEntry(soundInfo, inputFile, inputTable[i].size, outputFile);
+	}
+	fclose(inputFile);
+
+	resTableOffset = ftell(outputFile);
+	for (i = 0; i < resTableCount; i++) {
+		writeUint32LE(outputFile, outputTable[i].offset);
+		writeUint32LE(outputFile, outputTable[i].size);
+	}
+	writeUint32LE(outputFile, resTableOffset);
+	writeUint32LE(outputFile, resTableCount);	// Should be the same number of entries 
+
+	fclose(outputFile);
+
+	free(inputTable);
+	free(outputTable);
+	
+
+	printf("Done!\n");
+}
+
+void showhelp(char *exename) {
+	printf("\nUsage: %s <params> [<file> | mac]\n", exename);
+
+	printf("\nParams:\n");
+
+	printf("--mp3        encode to MP3 format (default)\n");
+	printf("--vorbis     encode to Vorbis format\n");
+	printf("--flac       encode to Flac format\n");
+	printf("(If one of these is specified, it must be the first parameter.)\n");
+
+	printf("\nMP3 mode params:\n");
+	printf("-b <rate>    <rate> is the target bitrate(ABR)/minimal bitrate(VBR) (default:%d)\n", minBitrDef);
+	printf("-B <rate>    <rate> is the maximum VBR/ABR bitrate (default:%d)\n", maxBitrDef);
+	printf("--vbr        LAME uses the VBR mode (default)\n");
+	printf("--abr        LAME uses the ABR mode\n");
+	printf("-V <value>   specifies the value (0 - 9) of VBR quality (0=best) (default:%d)\n", vbrqualDef);
+	printf("-q <value>   specifies the MPEG algorithm quality (0-9; 0=best) (default:%d)\n", algqualDef);
+	printf("--silent     the output of LAME is hidden (default:disabled)\n");
+
+	printf("\nVorbis mode params:\n");
+	printf("-b <rate>    <rate> is the nominal bitrate (default:unset)\n");
+	printf("-m <rate>    <rate> is the minimum bitrate (default:unset)\n");
+	printf("-M <rate>    <rate> is the maximum bitrate (default:unset)\n");
+	printf("-q <value>   specifies the value (0 - 10) of VBR quality (10=best) (default:%d)\n", oggqualDef);
+	printf("--silent     the output of oggenc is hidden (default:disabled)\n");
+
+	printf("\nFlac mode params:\n");
+	printf("[params]     optional Arguments passed to the Encoder\n");
+	printf("             recommended is: --best -b 1152\n");
+
+	printf("\n--help     this help message\n");
+
+	printf("\n\nIf a parameter is not given the default value is used\n");
+	printf("If using VBR mode for MP3 -b and -B must be multiples of 8; the maximum is 160!\n");
+	exit(2);
+}
+
+int main(int argc, char *argv[]) {
+	int		i;
+	char *inputFileName;
+
+	if (argc < 2)
+		showhelp(argv[0]);
+
+	/* compression mode */
+	gCompMode = kMP3Mode;
+	i = 1;
+	if (strcmp(argv[1], "--mp3") == 0) {
+		gCompMode = kMP3Mode;
+		i++;
+	} else if (strcmp(argv[1], "--vorbis") == 0) {
+		gCompMode = kVorbisMode;
+		i++;
+	} else if (strcmp(argv[1], "--flac") == 0) {
+		gCompMode = kFlacMode;
+		i++;
+	}
+	switch (gCompMode) {
+	case kMP3Mode:
+		tempEncoded = TEMP_MP3;
+		if (!process_mp3_parms(argc, argv, i))
+			showhelp(argv[0]);
+		break;
+	case kVorbisMode:
+		tempEncoded = TEMP_OGG;
+		if (!process_ogg_parms(argc, argv, i))
+			showhelp(argv[0]);
+		break;
+	case kFlacMode:
+		tempEncoded = TEMP_FLAC;
+		if (!process_flac_parms(argc, argv, i))
+			showhelp(argv[0]);
+		break;
+	}
+
+	i = argc - 1;
+	inputFileName = argv[i];
+	if (detectFile(inputFileName))
+		sagaEncode(inputFileName);
+
+	return (0);
+}


Property changes on: tools/trunk/compress_saga.cpp
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Date Rev Author URL Id
Name: svn:eol-style
   + native

Added: tools/trunk/sagagame.cpp
===================================================================
--- tools/trunk/sagagame.cpp	                        (rev 0)
+++ tools/trunk/sagagame.cpp	2006-05-20 13:10:34 UTC (rev 22545)
@@ -0,0 +1,1414 @@
+#define ITE_CONVERSE_MAX_TEXT_WIDTH (256 - 60)
+#define ITE_CONVERSE_TEXT_HEIGHT        10
+#define ITE_CONVERSE_TEXT_LINES     4
+
+//TODO: ihnm
+#define IHNM_CONVERSE_MAX_TEXT_WIDTH (256 - 60)
+#define IHNM_CONVERSE_TEXT_HEIGHT       10
+#define IHNM_CONVERSE_TEXT_LINES        10
+
+// ITE section
+static PanelButton ITE_MainPanelButtons[] = {
+	{kPanelButtonVerb,		52,4,	57,10,	kVerbITEWalkTo,'w',0,	0,1,0},
+	{kPanelButtonVerb,		52,15,	57,10,	kVerbITELookAt,'l',0,	2,3,0},
+	{kPanelButtonVerb,		52,26,	57,10,	kVerbITEPickUp,'p',0,	4,5,0},
+	{kPanelButtonVerb,		52,37,	57,10,	kVerbITETalkTo,'t',0,	0,1,0},
+	{kPanelButtonVerb,		110,4,	56,10,	kVerbITEOpen,'o',0,	6,7,0},
+	{kPanelButtonVerb,		110,15,	56,10,	kVerbITEClose,'c',0,	8,9,0},
+	{kPanelButtonVerb,		110,26,	56,10,	kVerbITEUse,'u',0,		10,11,0},
+	{kPanelButtonVerb,		110,37,	56,10,	kVerbITEGive,'g',0,	12,13,0},
+	{kPanelButtonArrow,		306,6,	8,5,	-1,'U',0,			0,4,2},
+	{kPanelButtonArrow,		306,41,	8,5,	1,'D',0,			1,5,3},
+
+	{kPanelButtonInventory,	181 + 32*0,6,	27,18,	0,'-',0,	0,0,0},
+	{kPanelButtonInventory,	181 + 32*1,6,	27,18,	1,'-',0,	0,0,0},
+	{kPanelButtonInventory,	181 + 32*2,6,	27,18,	2,'-',0,	0,0,0},
+	{kPanelButtonInventory,	181 + 32*3,6,	27,18,	3,'-',0,	0,0,0},
+
+	{kPanelButtonInventory,	181 + 32*0,27,	27,18,	4,'-',0,	0,0,0},
+	{kPanelButtonInventory,	181 + 32*1,27,	27,18,	5,'-',0,	0,0,0},
+	{kPanelButtonInventory,	181 + 32*2,27,	27,18,	6,'-',0,	0,0,0},
+	{kPanelButtonInventory,	181 + 32*3,27,	27,18,	7,'-',0,	0,0,0}
+};
+
+static PanelButton ITE_ConversePanelButtons[] = {
+	{kPanelButtonConverseText,	52,6 + ITE_CONVERSE_TEXT_HEIGHT * 0, ITE_CONVERSE_MAX_TEXT_WIDTH,ITE_CONVERSE_TEXT_HEIGHT,	0,'1',0,	0,0,0},
+	{kPanelButtonConverseText,	52,6 + ITE_CONVERSE_TEXT_HEIGHT * 1, ITE_CONVERSE_MAX_TEXT_WIDTH,ITE_CONVERSE_TEXT_HEIGHT,	1,'2',0,	0,0,0},
+	{kPanelButtonConverseText,	52,6 + ITE_CONVERSE_TEXT_HEIGHT * 2, ITE_CONVERSE_MAX_TEXT_WIDTH,ITE_CONVERSE_TEXT_HEIGHT,	2,'3',0,	0,0,0},
+	{kPanelButtonConverseText,	52,6 + ITE_CONVERSE_TEXT_HEIGHT * 3, ITE_CONVERSE_MAX_TEXT_WIDTH,ITE_CONVERSE_TEXT_HEIGHT,	3,'4',0,	0,0,0},
+	{kPanelButtonArrow,			257,6,	9,6,	-1,'u',0,	0,4,2},
+	{kPanelButtonArrow,			257,41,	9,6,	1,'d',0,	1,5,3},
+};
+
+static PanelButton ITE_OptionPanelButtons[] = {
+	{kPanelButtonOptionSlider,	284,19, 13,75,	0,'-',0,	0,0,0}, //slider-scroller
+	{kPanelButtonOption,	113,18, 45,17,	kTextReadingSpeed,'r',0,	0,0,0}, //read speed
+	{kPanelButtonOption,	113,37, 45,17,	kTextMusic,'m',0,	0,0,0}, //music
+	{kPanelButtonOption,	113,56, 45,17,	kTextSound,'n',0,	0,0,0}, //sound-noise
+	{kPanelButtonOption,	13,79, 135,17,	kTextQuitGame,'q',0,	0,0,0}, //quit
+	{kPanelButtonOption,	13,98, 135,17,	kTextContinuePlaying,'c',0,	0,0,0}, //continue
+	{kPanelButtonOption,	164,98, 57,17,	kTextLoad,'l',0,	0,0,0}, //load
+	{kPanelButtonOption,	241,98, 57,17,	kTextSave,'s',0,	0,0,0},	//save
+	{kPanelButtonOptionSaveFiles,	166,20, 112,74,	0,'-',0,	0,0,0},	//savefiles
+
+	{kPanelButtonOptionText,106,4, 0,0,	kTextGameOptions,'-',0,	0,0,0},	// text: game options
+	{kPanelButtonOptionText,11,22, 0,0,	kTextReadingSpeed,'-',0, 0,0,0},	// text: read speed
+	{kPanelButtonOptionText,28,22, 0,0,	kTextShowDialog,'-',0, 0,0,0},	// text: read speed
+	{kPanelButtonOptionText,73,41, 0,0,	kTextMusic,'-',0, 0,0,0},	// text: music
+	{kPanelButtonOptionText,69,60, 0,0,	kTextSound,'-',0, 0,0,0},	// text: noise
+};
+
+static PanelButton ITE_QuitPanelButtons[] = {
+	{kPanelButtonQuit, 11,17, 60,16, kTextQuit,'q',0, 0,0,0},
+	{kPanelButtonQuit, 121,17, 60,16, kTextCancel,'c',0, 0,0,0},
+	{kPanelButtonQuitText, -1,5, 0,0, kTextQuitTheGameQuestion,'-',0, 0,0,0},
+};
+
+static PanelButton ITE_LoadPanelButtons[] = {
+	{kPanelButtonLoad, 101,19, 60,16, kTextOK,'o',0, 0,0,0},
+	{kPanelButtonLoadText, -1,5, 0,0, kTextLoadSuccessful,'-',0, 0,0,0},
+};
+
+static PanelButton ITE_SavePanelButtons[] = {
+	{kPanelButtonSave, 11,37, 60,16, kTextSave,'s',0, 0,0,0},
+	{kPanelButtonSave, 101,37, 60,16, kTextCancel,'c',0, 0,0,0},
+	{kPanelButtonSaveEdit, 26,17, 119,17, 0,'-',0, 0,0,0},
+	{kPanelButtonSaveText, -1,5, 0,0, kTextEnterSaveGameName,'-',0, 0,0,0},
+};
+
+static PanelButton ITE_ProtectPanelButtons[] = {
+	{kPanelButtonProtectEdit, 26,17, 119,17, 0,'-',0, 0,0,0},
+	{kPanelButtonProtectText, -1,5, 0,0, kTextEnterProtectAnswer,'-',0, 0,0,0},
+};
+
+/*
+static PanelButton ITE_ProtectionPanelButtons[] = {
+	{kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+};*/
+
+static GameDisplayInfo ITE_DisplayInfo = {
+	320, 200,		// logical width&height
+
+	35,				// scene path y offset
+	137,			// scene height
+
+	0,				// status x offset
+	137,			// status y offset
+	320,			// status width
+	11,				// status height
+	2,				// status text y offset
+	186,			// status text color
+	15,				// status BG color
+	308,137,		// save reminder pos
+	12,12,			// save reminder w & h
+	6,7,			// save reminder sprite numbers
+
+	5, 4,			// left portrait x, y offset
+	274, 4,			// right portrait x, y offset
+
+	8, 9,			// inventory Up & Down button indexies
+	2, 4,			// inventory rows, columns
+
+	0, 148,			// main panel offsets
+	ARRAYSIZE(ITE_MainPanelButtons),
+	ITE_MainPanelButtons,
+
+	ITE_CONVERSE_MAX_TEXT_WIDTH,
+	ITE_CONVERSE_TEXT_HEIGHT,
+	ITE_CONVERSE_TEXT_LINES,
+	4, 5,			// converse Up & Down button indexies
+	0, 148,			// converse panel offsets
+	ARRAYSIZE(ITE_ConversePanelButtons),
+	ITE_ConversePanelButtons,
+
+	8, 0,			// save file index
+	8,				// optionSaveFileVisible
+	8, 8,			// option panel offsets
+	ARRAYSIZE(ITE_OptionPanelButtons),
+	ITE_OptionPanelButtons,
+
+	64,54,			// quit panel offsets
+	192,38,			// quit panel width & height
+	ARRAYSIZE(ITE_QuitPanelButtons),
+	ITE_QuitPanelButtons,
+
+	74, 53,			// load panel offsets
+	172, 40,		// load panel width & height
+	ARRAYSIZE(ITE_LoadPanelButtons),
+	ITE_LoadPanelButtons,
+
+	2,				// save edit index
+	74, 44,			// save panel offsets
+	172, 58,		// save panel width & height
+	ARRAYSIZE(ITE_SavePanelButtons),
+	ITE_SavePanelButtons,
+
+	0,				// protect edit index
+	74, 44,			// protect panel offsets
+	172, 58,		// protect panel width & height
+	ARRAYSIZE(ITE_ProtectPanelButtons),
+	ITE_ProtectPanelButtons
+};
+
+static GameResourceDescription ITE_Resources = {
+	RID_ITE_SCENE_LUT,  // Scene lookup table RN
+	RID_ITE_SCRIPT_LUT, // Script lookup table RN
+	RID_ITE_MAIN_PANEL,
+	RID_ITE_CONVERSE_PANEL,
+	RID_ITE_OPTION_PANEL,
+	RID_ITE_MAIN_SPRITES,
+	RID_ITE_MAIN_PANEL_SPRITES,
+	RID_ITE_DEFAULT_PORTRAITS,
+	RID_ITE_MAIN_STRINGS,
+	RID_ITE_ACTOR_NAMES
+};
+
+static GameResourceDescription ITEDemo_Resources = {
+	RID_ITEDEMO_SCENE_LUT,  // Scene lookup table RN
+	RID_ITEDEMO_SCRIPT_LUT, // Script lookup table RN
+	RID_ITEDEMO_MAIN_PANEL,
+	RID_ITEDEMO_CONVERSE_PANEL,
+	RID_ITEDEMO_OPTION_PANEL,
+	RID_ITEDEMO_MAIN_SPRITES,
+	RID_ITEDEMO_MAIN_PANEL_SPRITES,
+	RID_ITEDEMO_DEFAULT_PORTRAITS,
+	RID_ITEDEMO_MAIN_STRINGS,
+	RID_ITEDEMO_ACTOR_NAMES
+};
+
+// Inherit the Earth - DOS Demo version
+static GameFileDescription ITE_DEMO_G_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,					"986c79c4d2939dbe555576529fd37932"},
+	//{"ite.dmo",	GAME_DEMOFILE},						"0b9a70eb4e120b6f00579b46c8cae29e"
+	{"scripts.rsc", GAME_SCRIPTFILE,					"d5697dd3240a3ceaddaa986c47e1a2d7"},
+	{"voices.rsc",	GAME_SOUNDFILE | GAME_VOICEFILE,	"c58e67c506af4ffa03fd0aac2079deb0"}
+};
+
+static GameFontDescription ITEDEMO_GameFonts[] = {
+	{0},
+	{1}
+};
+
+static GameSoundInfo ITEDEMO_GameSound = {
+	kSoundVOC,
+	-1,
+	-1,
+	false,
+	false,
+	true
+};
+
+// Inherit the Earth - Wyrmkeep Win32 Demo version
+
+static GameFileDescription ITE_WINDEMO2_GameFiles[] = {
+	{"ited.rsc",		GAME_RESOURCEFILE,	"3a450852cbf3c80773984d565647e6ac"},
+	{"scriptsd.rsc",	GAME_SCRIPTFILE,	"3f12b67fa93e56e1a6be39d2921d80bb"},
+	{"soundsd.rsc",		GAME_SOUNDFILE,		"95a6c148e22e99a8c243f2978223583c"},
+	{"voicesd.rsc",		GAME_VOICEFILE,		"e139d86bab2ee8ba3157337f894a92d4"}
+};
+
+static GameFileDescription ITE_WINDEMO1_GameFiles[] = {
+	{"ited.rsc",		GAME_RESOURCEFILE,	"3a450852cbf3c80773984d565647e6ac"},
+	{"scriptsd.rsc",	GAME_SCRIPTFILE,	"3f12b67fa93e56e1a6be39d2921d80bb"},
+	{"soundsd.rsc",		GAME_SOUNDFILE,		"a741139dd7365a13f463cd896ff9969a"},
+	{"voicesd.rsc",		GAME_VOICEFILE,		"0759eaf5b64ae19fd429920a70151ad3"}
+};
+
+static GameFontDescription ITEWINDEMO_GameFonts[] = {
+	{2},
+	{0}
+};
+
+static GameSoundInfo ITEWINDEMO1_GameSound = {
+	kSoundPCM,
+	22050,
+	8,
+	false,
+	false,
+	false
+};
+
+static GameSoundInfo ITEWINDEMO2_GameVoice = {
+	kSoundVOX,
+	22050,
+	16,
+	false,
+	false,
+	true
+};
+
+static GameSoundInfo ITEWINDEMO2_GameSound = {
+	kSoundPCM,
+	22050,
+	16,
+	false,
+	false,
+	true
+};
+
+// Inherit the Earth - Wyrmkeep Mac Demo version
+static GameFileDescription ITE_MACDEMO2_GameFiles[] = {
+	{"ited.rsc",		GAME_RESOURCEFILE,	"addfc9d82bc2fa1f4cab23743c652c08"},
+	{"scriptsd.rsc",	GAME_SCRIPTFILE,	"fded5c59b8b7c5976229f960d21e6b0b"},
+	{"soundsd.rsc",		GAME_SOUNDFILE,		"b3a831fbed337d1f1300fee1dd474f6c"},
+	{"voicesd.rsc",		GAME_VOICEFILE,		"e139d86bab2ee8ba3157337f894a92d4"},
+	{"musicd.rsc",		GAME_MUSICFILE,		"495bdde51fd9f4bea2b9c911091b1ab2"}
+};
+
+static GameFileDescription ITE_MACDEMO1_GameFiles[] = {
+	{"ited.rsc",		GAME_RESOURCEFILE,	"addfc9d82bc2fa1f4cab23743c652c08"},
+	{"scriptsd.rsc",	GAME_SCRIPTFILE,	"fded5c59b8b7c5976229f960d21e6b0b"},
+	{"soundsd.rsc",		GAME_SOUNDFILE,		"b3a831fbed337d1f1300fee1dd474f6c"},
+	{"voicesd.rsc",		GAME_VOICEFILE,		"e139d86bab2ee8ba3157337f894a92d4"},
+	{"musicd.rsc",		GAME_MUSICFILE,		"1a91cd60169f367ecb6c6e058d899b2f"}
+};
+
+static GameSoundInfo ITEMACDEMO_GameVoice = {
+	kSoundVOX,
+	22050,
+	16,
+	false,
+	false,
+	true
+};
+
+static GameSoundInfo ITEMACDEMO_GameSound = {
+	kSoundPCM,
+	22050,
+	16,
+	false,
+	true,
+	true
+};
+
+static GameSoundInfo ITEMACDEMO_GameMusic = {
+	kSoundPCM,
+	11025,
+	16,
+	false,
+	false,
+	true
+};
+
+// Inherit the Earth - Wyrmkeep Linux Demo version
+static GameFileDescription ITE_LINDEMO_GameFiles[] = {
+	{"ited.rsc",		GAME_RESOURCEFILE,	"3a450852cbf3c80773984d565647e6ac"},
+	{"scriptsd.rsc",	GAME_SCRIPTFILE,	"3f12b67fa93e56e1a6be39d2921d80bb"},
+	{"soundsd.rsc",		GAME_SOUNDFILE,		"95a6c148e22e99a8c243f2978223583c"},
+	{"voicesd.rsc",		GAME_VOICEFILE,		"e139d86bab2ee8ba3157337f894a92d4"},
+	{"musicd.rsc",		GAME_MUSICFILE,		"d6454756517f042f01210458abe8edd4"}
+};
+
+static GameSoundInfo ITELINDEMO_GameMusic = {
+	kSoundPCM,
+	11025,
+	16,
+	true,
+	false,
+	true
+};
+
+// Inherit the Earth - Wyrmkeep Linux version
+
+static GameFileDescription ITE_LINCD_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,	"8f4315a9bb10ec839253108a032c8b54"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,	"a891405405edefc69c9d6c420c868b84"},
+	{"sounds.rsc",	GAME_SOUNDFILE,		"e2ccb61c325d6d1ead3be0e731fe29fe"},
+	{"voices.rsc",	GAME_VOICEFILE,		"41bb6b95d792dde5196bdb78740895a6"},
+	{"music.rsc",	GAME_MUSICFILE,		"d6454756517f042f01210458abe8edd4"}
+};
+
+// Inherit the Earth - Wyrmkeep combined Windows/Mac/Linux version. This
+// version is different from the other Wyrmkeep re-releases in that it does
+// not have any substitute files. Presumably the ite.rsc file has been
+// modified to include the Wyrmkeep changes. The resource files are little-
+// endian, except for the voice file which is big-endian.
+
+static GameFileDescription ITE_MULTICD_GameFiles[] = {
+	{"ite.rsc",						GAME_RESOURCEFILE,					"a6433e34b97b15e64fe8214651012db9"},
+	{"scripts.rsc",					GAME_SCRIPTFILE,					"a891405405edefc69c9d6c420c868b84"},
+	{"sounds.rsc",					GAME_SOUNDFILE,						"e2ccb61c325d6d1ead3be0e731fe29fe"},
+	{"inherit the earth voices",	GAME_VOICEFILE | GAME_SWAPENDIAN,	"c14c4c995e7a0d3828e3812a494301b7"},
+	{"music.rsc",					GAME_MUSICFILE,						"d6454756517f042f01210458abe8edd4"}
+};
+
+static GameFileDescription ITE_MACCD_G_GameFiles[] = {
+	{"ite resources.bin",	GAME_RESOURCEFILE | GAME_MACBINARY,	"0bd506aa887bfc7965f695c6bd28237d"},
+	{"ite scripts.bin",		GAME_SCRIPTFILE | GAME_MACBINARY,	"af0d7a2588e09ad3ecbc5b474ea238bf"},
+	{"ite sounds.bin",		GAME_SOUNDFILE | GAME_MACBINARY,	"441426c6bb2a517f65c7e49b57f7a345"},
+	{"ite music.bin",		GAME_MUSICFILE_GM | GAME_MACBINARY,	"c1d20324b7cdf1650e67061b8a93251c"},
+	{"ite voices.bin",		GAME_VOICEFILE | GAME_MACBINARY,	"dba92ae7d57e942250fe135609708369"}
+};
+
+static GameSoundInfo ITEMACCD_G_GameSound = {
+	kSoundMacPCM,
+	22050,
+	8,
+	false,
+	false,
+	false
+};
+
+// Inherit the Earth - Mac Wyrmkeep version
+static GameFileDescription ITE_MACCD_GameFiles[] = {
+	{"ite.rsc",						GAME_RESOURCEFILE,	"4f7fa11c5175980ed593392838523060"},
+	{"scripts.rsc",					GAME_SCRIPTFILE,	"adf1f46c1d0589083996a7060c798ad0"},
+	{"sounds.rsc",					GAME_SOUNDFILE,		"95863b89a0916941f6c5e1789843ba14"},
+	{"inherit the earth voices",	GAME_VOICEFILE,		"c14c4c995e7a0d3828e3812a494301b7"},
+	{"music.rsc",					GAME_MUSICFILE,		"1a91cd60169f367ecb6c6e058d899b2f"}
+};
+
+static GameSoundInfo ITEMACCD_GameSound = {
+	kSoundPCM,
+	22050,
+	16,
+	false,
+	true,
+	true
+};
+
+static GameSoundInfo ITEMACCD_GameMusic = {
+	kSoundPCM,
+	11025,
+	16,
+	true,
+	false,
+	true
+};
+
+// Inherit the Earth - Diskette version
+static GameFileDescription ITE_DISK_DE_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,					"869fc23c8f38f575979ec67152914fee"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,					"516f7330f8410057b834424ea719d1ef"},
+	{"voices.rsc",	GAME_SOUNDFILE | GAME_VOICEFILE,	"0c9113e630f97ef0996b8c3114badb08"}
+};
+
+static GameFileDescription ITE_DISK_G_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,					"8f4315a9bb10ec839253108a032c8b54"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,					"516f7330f8410057b834424ea719d1ef"},
+	{"voices.rsc",	GAME_SOUNDFILE | GAME_VOICEFILE,	"c46e4392fcd2e89bc91e5567db33b62d"}
+};
+
+static GameFileDescription ITE_DISK_DE2_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,					"869fc23c8f38f575979ec67152914fee"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,					"516f7330f8410057b834424ea719d1ef"},
+	{"voices.rsc",	GAME_SOUNDFILE | GAME_VOICEFILE,	"0c9113e630f97ef0996b8c3114badb08"},
+	{"music.rsc",	GAME_MUSICFILE,						"d6454756517f042f01210458abe8edd4"}
+};
+
+static GameFileDescription ITE_DISK_G2_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,					"8f4315a9bb10ec839253108a032c8b54"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,					"516f7330f8410057b834424ea719d1ef"},
+	{"voices.rsc",	GAME_SOUNDFILE | GAME_VOICEFILE,	"c46e4392fcd2e89bc91e5567db33b62d"},
+	{"music.rsc",	GAME_MUSICFILE,						"d6454756517f042f01210458abe8edd4"}
+};
+
+static GameFontDescription ITEDISK_GameFonts[] = {
+	{2},
+	{0},
+	{1}
+};
+
+static GameSoundInfo ITEDISK_GameSound = {
+	kSoundVOC,
+	-1,
+	-1,
+	false,
+	false,
+	true
+};
+
+// Inherit the Earth - CD Enhanced version
+static GameFileDescription ITE_WINCD_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,	"8f4315a9bb10ec839253108a032c8b54"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,	"a891405405edefc69c9d6c420c868b84"},
+	{"sounds.rsc",	GAME_SOUNDFILE,		"e2ccb61c325d6d1ead3be0e731fe29fe"},
+	{"voices.rsc",	GAME_VOICEFILE,		"41bb6b95d792dde5196bdb78740895a6"}
+};
+
+static GameFileDescription ITE_CD_G_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,	"8f4315a9bb10ec839253108a032c8b54"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,	"50a0d2d7003c926a3832d503c8534e90"},
+	{"sounds.rsc",	GAME_SOUNDFILE,		"e2ccb61c325d6d1ead3be0e731fe29fe"},
+	{"voices.rsc",	GAME_VOICEFILE,		"41bb6b95d792dde5196bdb78740895a6"}
+};
+
+// reported by mld. Bestsellergamers cover disk
+static GameFileDescription ITE_CD_DE_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,	"869fc23c8f38f575979ec67152914fee"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,	"a891405405edefc69c9d6c420c868b84"},
+	{"sounds.rsc",	GAME_SOUNDFILE,		"e2ccb61c325d6d1ead3be0e731fe29fe"},
+	{"voices.rsc",	GAME_VOICEFILE,		"2fbad5d10b9b60a3415dc4aebbb11718"}
+};
+
+static GameFileDescription ITE_CD_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,	"8f4315a9bb10ec839253108a032c8b54"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,	"a891405405edefc69c9d6c420c868b84"},
+	{"sounds.rsc",	GAME_SOUNDFILE,		"e2ccb61c325d6d1ead3be0e731fe29fe"},
+	{"voices.rsc",	GAME_VOICEFILE,		"41bb6b95d792dde5196bdb78740895a6"}
+};
+
+
+static GameFileDescription ITE_CD_G2_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,	"8f4315a9bb10ec839253108a032c8b54"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,	"50a0d2d7003c926a3832d503c8534e90"},
+	{"sounds.rsc",	GAME_SOUNDFILE,		"e2ccb61c325d6d1ead3be0e731fe29fe"},
+	{"voices.rsc",	GAME_VOICEFILE,		"41bb6b95d792dde5196bdb78740895a6"},
+	{"music.rsc",	GAME_MUSICFILE,		"d6454756517f042f01210458abe8edd4"}
+};
+
+static GameFileDescription ITE_CD_DE2_GameFiles[] = {
+	{"ite.rsc",		GAME_RESOURCEFILE,	"869fc23c8f38f575979ec67152914fee"},
+	{"scripts.rsc",	GAME_SCRIPTFILE,	"a891405405edefc69c9d6c420c868b84"},
+	{"sounds.rsc",	GAME_SOUNDFILE,		"e2ccb61c325d6d1ead3be0e731fe29fe"},
+	{"voices.rsc",	GAME_VOICEFILE,		"2fbad5d10b9b60a3415dc4aebbb11718"},
+	{"music.rsc",	GAME_MUSICFILE,		"d6454756517f042f01210458abe8edd4"}
+};
+
+
+static GameFontDescription ITECD_GameFonts[] = {
+	{2},
+	{0},
+	{1}
+};
+
+static GameSoundInfo ITECD_GameSound = {
+	kSoundPCM,
+	22050,
+	16,
+	false,
+	false,
+	true
+};
+
+static GamePatchDescription ITEWinPatch1_Files[] = {
+	{ "cave.mid", GAME_RESOURCEFILE, 9, NULL},
+	{ "intro.mid", GAME_RESOURCEFILE, 10, NULL},
+	{ "fvillage.mid", GAME_RESOURCEFILE, 11, NULL},
+	{ "elkhall.mid", GAME_RESOURCEFILE, 12, NULL},
+	{ "mouse.mid", GAME_RESOURCEFILE, 13, NULL},
+	{ "darkclaw.mid", GAME_RESOURCEFILE, 14, NULL},
+	{ "birdchrp.mid", GAME_RESOURCEFILE, 15, NULL},
+	{ "orbtempl.mid", GAME_RESOURCEFILE, 16, NULL},
+	{ "spooky.mid", GAME_RESOURCEFILE, 17, NULL},
+	{ "catfest.mid", GAME_RESOURCEFILE, 18, NULL},
+	{ "elkfanfare.mid", GAME_RESOURCEFILE, 19, NULL},
+	{ "bcexpl.mid", GAME_RESOURCEFILE, 20, NULL},
+	{ "boargtnt.mid", GAME_RESOURCEFILE, 21, NULL},
+	{ "boarking.mid", GAME_RESOURCEFILE, 22, NULL},
+	{ "explorea.mid", GAME_RESOURCEFILE, 23, NULL},
+	{ "exploreb.mid", GAME_RESOURCEFILE, 24, NULL},
+	{ "explorec.mid", GAME_RESOURCEFILE, 25, NULL},
+	{ "sunstatm.mid", GAME_RESOURCEFILE, 26, NULL},
+	{ "nitstrlm.mid", GAME_RESOURCEFILE, 27, NULL},
+	{ "humruinm.mid", GAME_RESOURCEFILE, 28, NULL},
+	{ "damexplm.mid", GAME_RESOURCEFILE, 29, NULL},
+	{ "tychom.mid", GAME_RESOURCEFILE, 30, NULL},
+	{ "kitten.mid", GAME_RESOURCEFILE, 31, NULL},
+	{ "sweet.mid", GAME_RESOURCEFILE, 32, NULL},
+	{ "brutalmt.mid", GAME_RESOURCEFILE, 33, NULL},
+	{ "shiala.mid", GAME_RESOURCEFILE, 34, NULL},
+
+	{ "wyrm.pak", GAME_RESOURCEFILE, 1529, NULL},
+	{ "wyrm1.dlt", GAME_RESOURCEFILE, 1530, NULL},
+	{ "wyrm2.dlt", GAME_RESOURCEFILE, 1531, NULL},
+	{ "wyrm3.dlt", GAME_RESOURCEFILE, 1532, NULL},
+	{ "wyrm4.dlt", GAME_RESOURCEFILE, 1533, NULL},
+	{ "credit3n.dlt", GAME_RESOURCEFILE, 1796, NULL},
+	{ "credit4n.dlt", GAME_RESOURCEFILE, 1797, NULL},
+	{ "p2_a.voc", GAME_VOICEFILE, 4, NULL}
+};
+
+static GamePatchDescription ITEWinPatch2_Files[] = {
+	{ "cave.mid", GAME_RESOURCEFILE, 9, NULL},
+	{ "intro.mid", GAME_RESOURCEFILE, 10, NULL},
+	{ "fvillage.mid", GAME_RESOURCEFILE, 11, NULL},
+	{ "elkfanfare.mid", GAME_RESOURCEFILE, 19, NULL},
+	{ "bcexpl.mid", GAME_RESOURCEFILE, 20, NULL},
+	{ "boargtnt.mid", GAME_RESOURCEFILE, 21, NULL},
+	{ "explorea.mid", GAME_RESOURCEFILE, 23, NULL},
+	{ "sweet.mid", GAME_RESOURCEFILE, 32, NULL},
+
+	{ "wyrm.pak", GAME_RESOURCEFILE, 1529, NULL},
+	{ "wyrm1.dlt", GAME_RESOURCEFILE, 1530, NULL},
+	{ "wyrm2.dlt", GAME_RESOURCEFILE, 1531, NULL},
+	{ "wyrm3.dlt", GAME_RESOURCEFILE, 1532, NULL},
+	{ "p2_a.iaf", GAME_VOICEFILE, 4, &ITECD_GameSound}
+/*	boarhall.bbm
+	elkenter.bbm
+	ferrets.bbm
+	ratdoor.bbm
+	sanctuar.bbm
+	tycho.bbm*/
+};
+
+static GamePatchDescription ITEMacPatch_Files[] = {
+	{ "wyrm.pak", GAME_RESOURCEFILE, 1529, NULL},
+	{ "wyrm1.dlt", GAME_RESOURCEFILE, 1530, NULL},
+	{ "wyrm2.dlt", GAME_RESOURCEFILE, 1531, NULL},
+	{ "wyrm3.dlt", GAME_RESOURCEFILE, 1532, NULL},
+	{ "wyrm4.dlt", GAME_RESOURCEFILE, 1533, NULL},
+	{ "credit3m.dlt", GAME_RESOURCEFILE, 1796, NULL},
+	{ "credit4m.dlt", GAME_RESOURCEFILE, 1797, NULL},
+	{ "p2_a.iaf", GAME_VOICEFILE, 4, &ITEMACCD_GameSound}
+};
+
+static GamePatchDescription ITELinPatch_Files[] = {
+	{ "wyrm.pak", GAME_RESOURCEFILE, 1529, NULL},
+	{ "wyrm1.dlt", GAME_RESOURCEFILE, 1530, NULL},
+	{ "wyrm2.dlt", GAME_RESOURCEFILE, 1531, NULL},
+	{ "wyrm3.dlt", GAME_RESOURCEFILE, 1532, NULL},
+	{ "credit3n.dlt", GAME_RESOURCEFILE, 1796, NULL},
+	{ "credit4n.dlt", GAME_RESOURCEFILE, 1797, NULL},
+	{ "P2_A.iaf", GAME_VOICEFILE, 4, &ITECD_GameSound}
+};
+
+// IHNM section
+
+static PanelButton IHNM_MainPanelButtons[] = {
+	{kPanelButtonVerb,		106,12,		114,30,	kVerbIHNMWalk,'w',0,	0,1,0},
+	{kPanelButtonVerb,		106,44,		114,30,	kVerbIHNMLookAt,'l',0,	2,3,0},
+	{kPanelButtonVerb,		106,76,		114,30, kVerbIHNMTake,'k',0,	4,5,0},
+	{kPanelButtonVerb,		106,108,	114,30, kVerbIHNMUse,'u',0,		6,7,0},
+	{kPanelButtonVerb,		223,12,		114,30, kVerbIHNMTalkTo,'t',0,	8,9,0},
+	{kPanelButtonVerb,		223,44,		114,30, kVerbIHNMSwallow,'s',0,	10,11,0},
+	{kPanelButtonVerb,		223,76,		114,30, kVerbIHNMGive,'g',0,	12,13,0},
+	{kPanelButtonVerb,		223,108,	114,30, kVerbIHNMPush,'p',0,	14,15,0},
+	{kPanelButtonArrow,		606,22,		20,25,	-1,'[',0,			0,0,0}, //TODO: arrow Sprite Numbers
+	{kPanelButtonArrow,		606,108,	20,25,	1,']',0,			0,0,0},
+
+	{kPanelButtonInventory,	357 + 64*0,18,	54,54,	0,'-',0,	0,0,0},
+	{kPanelButtonInventory,	357 + 64*1,18,	54,54,	1,'-',0,	0,0,0},
+	{kPanelButtonInventory,	357 + 64*2,18,	54,54,	2,'-',0,	0,0,0},
+	{kPanelButtonInventory,	357 + 64*3,18,	54,54,	3,'-',0,	0,0,0},
+
+	{kPanelButtonInventory,	357 + 64*0,80,	54,54,	4,'-',0,	0,0,0},
+	{kPanelButtonInventory,	357 + 64*1,80,	54,54,	5,'-',0,	0,0,0},
+	{kPanelButtonInventory,	357 + 64*2,80,	54,54,	6,'-',0,	0,0,0},
+	{kPanelButtonInventory,	357 + 64*3,80,	54,54,	7,'-',0,	0,0,0}
+};
+
+static PanelButton IHNM_ConversePanelButtons[] = {
+	{kPanelButtonConverseText,	117,18 + IHNM_CONVERSE_TEXT_HEIGHT * 0, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT,	0,'1',0,	0,0,0},
+	{kPanelButtonConverseText,	52,18 + IHNM_CONVERSE_TEXT_HEIGHT * 1, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT,	1,'2',0,	0,0,0},
+	{kPanelButtonConverseText,	52,18 + IHNM_CONVERSE_TEXT_HEIGHT * 2, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT,	2,'3',0,	0,0,0},
+	{kPanelButtonConverseText,	52,18 + IHNM_CONVERSE_TEXT_HEIGHT * 3, IHNM_CONVERSE_MAX_TEXT_WIDTH,IHNM_CONVERSE_TEXT_HEIGHT,	3,'4',0,	0,0,0},
+	//.....
+	{kPanelButtonArrow,			606,22,		20,25,	-1,'[',0,	0,0,0}, //TODO: arrow Sprite Numbers
+	{kPanelButtonArrow,			606,108,	20,25,	1,']',0,	0,0,0}
+};
+
+static PanelButton IHNM_OptionPanelButtons[] = {
+	{kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+};
+
+static PanelButton IHNM_QuitPanelButtons[] = {
+	{kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+};
+
+static PanelButton IHNM_LoadPanelButtons[] = {
+	{kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+};
+
+static PanelButton IHNM_SavePanelButtons[] = {
+	{kPanelButtonArrow, 0,0, 0,0, 0,'-',0, 0,0,0}, //TODO
+};
+
+
+static GameDisplayInfo IHNM_DisplayInfo = { //TODO: fill it all
+	640, 480,	// logical width&height
+
+	0,			// scene path y offset
+	304,		// scene height
+
+	0,			// status x offset
+	304,		// status y offset
+	616,		// status width
+	24,			// status height
+	8,			// status text y offset
+	253,		// status text color
+	250,		// status BG color
+	616, 303,	// save reminder pos
+	24, 24,		// save reminder w&h
+	0,1,		// save reminder sprite numbers
+
+	11, 12,		// left portrait x, y offset
+	-1, -1,		// right portrait x, y offset
+
+	-1, -1,		// inventory Up & Down button indexies
+	2, 4,		// inventory rows, columns
+
+	0, 328,		// main panel offsets
+	ARRAYSIZE(IHNM_MainPanelButtons),
+	IHNM_MainPanelButtons,
+
+	-1, -1,		// converse Up & Down button indexies
+
+	IHNM_CONVERSE_MAX_TEXT_WIDTH,
+	IHNM_CONVERSE_TEXT_HEIGHT,
+	IHNM_CONVERSE_TEXT_LINES,
+	0, 328,		// converse panel offsets
+	ARRAYSIZE(IHNM_ConversePanelButtons),
+	IHNM_ConversePanelButtons,
+
+	-1, -1,		// save file index
+	0,			// optionSaveFileVisible
+	0, 0,		// option panel offsets
+	ARRAYSIZE(IHNM_OptionPanelButtons),
+	IHNM_OptionPanelButtons,
+
+	0,0,			// quit panel offsets
+	0,0,			// quit panel width & height
+	ARRAYSIZE(IHNM_QuitPanelButtons),
+	IHNM_QuitPanelButtons,
+
+	0, 0,			// load panel offsets
+	0, 0,			// load panel width & height
+	ARRAYSIZE(IHNM_LoadPanelButtons),
+	IHNM_LoadPanelButtons,
+
+	-1,				// save edit index
+	0, 0,			// save panel offsets
+	0, 0,			// save panel width & height
+	ARRAYSIZE(IHNM_SavePanelButtons),
+	IHNM_SavePanelButtons,
+
+	// No protection panel in IHNM
+	-1,				// protect edit index
+	0, 0,			// protect panel offsets
+	0, 0,			// protect panel width & height
+	ARRAYSIZE(IHNM_SavePanelButtons),
+	IHNM_SavePanelButtons
+};
+
+static GameResourceDescription IHNM_Resources = {
+	RID_IHNM_SCENE_LUT,  // Scene lookup table RN
+	RID_IHNM_SCRIPT_LUT, // Script lookup table RN
+	RID_IHNM_MAIN_PANEL,
+	RID_IHNM_CONVERSE_PANEL,
+	RID_IHNM_OPTION_PANEL,
+	RID_IHNM_MAIN_SPRITES,
+	RID_IHNM_MAIN_PANEL_SPRITES,
+	0,
+	RID_IHNM_MAIN_STRINGS,
+	0
+};
+
+// I Have No Mouth and I Must Scream - Demo version
+static GameFileDescription IHNM_DEMO_GameFiles[] = {
+	{"scream.res",		GAME_RESOURCEFILE,	"46bbdc65d164ba7e89836a0935eec8e6"},
+	{"scripts.res",		GAME_SCRIPTFILE,	"9626bda8978094ff9b29198bc1ed5f9a"},
+	{"sfx.res",			GAME_SOUNDFILE,		"1c610d543f32ec8b525e3f652536f269"},
+	{"voicesd.res",		GAME_VOICEFILE,		"3bbc16a8f741dbb511da506c660a0b54"}
+};
+
+// I Have No Mouth and I Must Scream - Retail CD version
+
+static GameFileDescription IHNM_CD_GameFiles[] = {
+	{"musicfm.res",	GAME_MUSICFILE_FM,					"0439083e3dfdc51b486071d45872ae52"},
+	{"musicgm.res",	GAME_MUSICFILE_GM,					"80f875a1fb384160d1f4b27166eef583"},
+	{"scream.res",	GAME_RESOURCEFILE,					"46bbdc65d164ba7e89836a0935eec8e6"},
+	{"patch.re_",	GAME_PATCHFILE | GAME_RESOURCEFILE,	"58b79e61594779513c7f2d35509fa89e"},
+	{"scripts.res",	GAME_SCRIPTFILE,					"be38bbc5a26be809dbf39f13befebd01"},
+	{"sfx.res",		GAME_SOUNDFILE,						"1c610d543f32ec8b525e3f652536f269"},
+	{"voicess.res",	GAME_VOICEFILE,						"54b1f2013a075338ceb0e258d97808bd"}, //order of voice bank file is important
+	{"voices1.res",	GAME_VOICEFILE,						"fc6440b38025f4b2cc3ff55c3da5c3eb"},
+	{"voices2.res",	GAME_VOICEFILE,						"b37f10fd1696ade7d58704ccaaebceeb"},
+	{"voices3.res",	GAME_VOICEFILE,						"3bbc16a8f741dbb511da506c660a0b54"},
+	{"voices4.res",	GAME_VOICEFILE,						"ebfa160122d2247a676ca39920e5d481"},
+	{"voices5.res",	GAME_VOICEFILE,						"1f501ce4b72392bdd1d9ec38f6eec6da"},
+	{"voices6.res",	GAME_VOICEFILE,						"f580ed7568c7d6ef34e934ba20adf834"}
+};
+
+static GameFileDescription IHNM_CD_ES_GameFiles[] = {
+	{"musicfm.res",	GAME_MUSICFILE_FM,					"0439083e3dfdc51b486071d45872ae52"},
+	{"musicgm.res",	GAME_MUSICFILE_GM,					"80f875a1fb384160d1f4b27166eef583"},
+	{"scream.res",	GAME_RESOURCEFILE,					"c92370d400e6f2a3fc411c3729d09224"},
+	{"patch.re_",	GAME_PATCHFILE | GAME_RESOURCEFILE,	"58b79e61594779513c7f2d35509fa89e"},
+	{"scripts.res",	GAME_SCRIPTFILE,					"be38bbc5a26be809dbf39f13befebd01"},
+	{"sfx.res",		GAME_SOUNDFILE,						"1c610d543f32ec8b525e3f652536f269"},
+	{"voicess.res",	GAME_VOICEFILE,						"d869de9883c8faea7f687217a9ec7057"}, //order of voice bank file is important
+	{"voices1.res",	GAME_VOICEFILE,						"dc6a34e3d1668730ea46815a92c7847f"},
+	{"voices2.res",	GAME_VOICEFILE,						"dc6a5fa7a4cdc2ca5a6fd924e969986c"},
+	{"voices3.res",	GAME_VOICEFILE,						"dc6a5fa7a4cdc2ca5a6fd924e969986c"},
+	{"voices4.res",	GAME_VOICEFILE,						"0f87400b804232a58dd22e404420cc45"},
+	{"voices5.res",	GAME_VOICEFILE,						"172668cfc5d8c305cb5b1a9b4d995fc0"},
+	{"voices6.res",	GAME_VOICEFILE,						"96c9bda9a5f41d6bc232ed7bf6d371d9"}
+};
+
+static GameFileDescription IHNM_CD_RU_GameFiles[] = {
+	{"musicfm.res",	GAME_MUSICFILE_FM,					"0439083e3dfdc51b486071d45872ae52"},
+	{"musicgm.res",	GAME_MUSICFILE_GM,					"80f875a1fb384160d1f4b27166eef583"},
+	{"scream.res",	GAME_RESOURCEFILE,					"46bbdc65d164ba7e89836a0935eec8e6"},
+	{"patch.re_",	GAME_PATCHFILE | GAME_RESOURCEFILE,	"58b79e61594779513c7f2d35509fa89e"},
+	{"scripts.res",	GAME_SCRIPTFILE,					"be38bbc5a26be809dbf39f13befebd01"},
+	{"sfx.res",		GAME_SOUNDFILE,						"1c610d543f32ec8b525e3f652536f269"},
+	{"voicess.res",	GAME_VOICEFILE,						"9df7cd3b18ddaa16b5291b3432567036"}, //order of voice bank file is important
+	{"voices1.res",	GAME_VOICEFILE,						"d6100d2dc3b2b9f2e1ad247f613dce9b"},
+	{"voices2.res",	GAME_VOICEFILE,						"84f6f48ecc2832841ea6417a9a379430"},
+	{"voices3.res",	GAME_VOICEFILE,						"ebb9501283047f27a0f54e27b3c8ba1e"},
+	{"voices4.res",	GAME_VOICEFILE,						"4c145da5fa6d1306162a7ca8ce5a4f2e"},
+	{"voices5.res",	GAME_VOICEFILE,						"871a559644281917677eca4af1b05620"},
+	{"voices6.res",	GAME_VOICEFILE,						"211be5c24f066d69a2f6cfa953acfba6"}
+};
+
+// I Have No Mouth and I Must Scream - Censored CD version (without Nimdok)
+
+// Reported by mld. German Retail
+static GameFileDescription IHNM_CD_DE_GameFiles[] = {
+	{"musicfm.res",	GAME_MUSICFILE_FM,					"0439083e3dfdc51b486071d45872ae52"},
+	{"musicgm.res",	GAME_MUSICFILE_GM,					"80f875a1fb384160d1f4b27166eef583"},
+	{"scream.res",	GAME_RESOURCEFILE,					"c92370d400e6f2a3fc411c3729d09224"},
+	{"scripts.res",	GAME_SCRIPTFILE,					"32aa01a89937520fe0ea513950117292"},
+	{"patch.re_",	GAME_PATCHFILE | GAME_RESOURCEFILE,	"58b79e61594779513c7f2d35509fa89e"},
+	{"sfx.res",		GAME_SOUNDFILE,						"1c610d543f32ec8b525e3f652536f269"},
+	{"voicess.res",	GAME_VOICEFILE,						"8b09a196a52627cacb4eab13bfe0b2c3"}, //order of voice bank file is important
+	{"voices1.res",	GAME_VOICEFILE,						"424971e1e2373187c3f5734fe36071a2"},
+	{"voices2.res",	GAME_VOICEFILE,						"c270e0980782af43641a86e4a14e2a32"},
+	{"voices3.res",	GAME_VOICEFILE,						"49e42befea883fd101ec3d0f5d0647b9"},
+	{"voices5.res",	GAME_VOICEFILE,						"c477443c52a0aa56e686ebd8d051e4ab"},
+	{"voices6.res",	GAME_VOICEFILE,						"2b9aea838f74b4eecfb29a8f205a2bd4"}
+};
+
+static GameFileDescription IHNM_CD_FR_GameFiles[] = {
+	{"musicfm.res",	GAME_MUSICFILE_FM,					"0439083e3dfdc51b486071d45872ae52"},
+	{"musicgm.res",	GAME_MUSICFILE_GM,					"80f875a1fb384160d1f4b27166eef583"},
+	{"scream.res",	GAME_RESOURCEFILE,					"c92370d400e6f2a3fc411c3729d09224"},
+	{"scripts.res",	GAME_SCRIPTFILE,					"32aa01a89937520fe0ea513950117292"},
+	{"patch.re_",	GAME_PATCHFILE | GAME_RESOURCEFILE,	"58b79e61594779513c7f2d35509fa89e"},
+	{"sfx.res",		GAME_SOUNDFILE,						"1c610d543f32ec8b525e3f652536f269"},
+	{"voicess.res",	GAME_VOICEFILE,						"b8642e943bbebf89cef2f48b31cb4305"}, //order of voice bank file is important
+	{"voices1.res",	GAME_VOICEFILE,						"424971e1e2373187c3f5734fe36071a2"},
+	{"voices2.res",	GAME_VOICEFILE,						"c2d93a35d2c2def9c3d6d242576c794b"},
+	{"voices3.res",	GAME_VOICEFILE,						"49e42befea883fd101ec3d0f5d0647b9"},
+	{"voices5.res",	GAME_VOICEFILE,						"f4c415de7c03de86b73f9a12b8bd632f"},
+	{"voices6.res",	GAME_VOICEFILE,						"3fc5358a5d8eee43bdfab2740276572e"}
+};
+
+static GameFontDescription IHNMDEMO_GameFonts[] = {
+	{2},
+	{3},
+	{4}
+};
+
+static GameFontDescription IHNMCD_GameFonts[] = {
+	{2},
+	{3},
+	{4},
+	{5},
+	{6},  // kIHNMFont8
+	{7},
+	{8}   // kIHNMMainFont
+};
+
+static GameSoundInfo IHNM_GameSound = {
+	kSoundWAV,
+	-1,
+	-1,
+	false,
+	false,
+	true
+};
+
+#define FILE_MD5_BYTES 5000
+
+static GameDescription gameDescriptions[] = {
+	// Inherit the earth - DOS Demo version
+	// sound unchecked
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_DEMO_G, // Game id
+		"Demo", // Game title
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE, // Starting scene number
+		&ITEDemo_Resources,
+		ARRAYSIZE(ITE_DEMO_G_GameFiles), // Game datafiles
+		ITE_DEMO_G_GameFiles,
+		ARRAYSIZE(ITEDEMO_GameFonts),
+		ITEDEMO_GameFonts,
+		&ITEDEMO_GameSound,
+		&ITEDEMO_GameSound,
+		NULL,
+		0,
+		NULL,
+		0, // features
+		Common::EN_ANY,
+		Common::kPlatformPC,
+	},
+
+	// Inherit the earth - MAC Demo version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_MACDEMO2,
+		"Demo",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_MACDEMO2_GameFiles),
+		ITE_MACDEMO2_GameFiles,
+		ARRAYSIZE(ITEWINDEMO_GameFonts),
+		ITEWINDEMO_GameFonts,
+		&ITEMACDEMO_GameVoice,
+		&ITEMACDEMO_GameSound,
+		&ITEMACDEMO_GameMusic,
+		ARRAYSIZE(ITEMacPatch_Files),
+		ITEMacPatch_Files,
+		GF_BIG_ENDIAN_DATA | GF_WYRMKEEP | GF_CD_FX | GF_SCENE_SUBSTITUTES,
+		Common::EN_ANY,
+		Common::kPlatformMacintosh,
+	},
+
+	// Inherit the earth - early MAC Demo version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_MACDEMO1,
+		"early Demo",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_MACDEMO1_GameFiles),
+		ITE_MACDEMO1_GameFiles,
+		ARRAYSIZE(ITEWINDEMO_GameFonts),
+		ITEWINDEMO_GameFonts,
+		&ITEMACDEMO_GameVoice,
+		&ITEMACDEMO_GameSound,
+		&ITEMACCD_GameMusic,
+		ARRAYSIZE(ITEMacPatch_Files),
+		ITEMacPatch_Files,
+		GF_BIG_ENDIAN_DATA | GF_WYRMKEEP | GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformMacintosh,
+	},
+
+	// Inherit the earth - MAC CD Guild version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_MACCD_G,
+		"CD",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_MACCD_G_GameFiles),
+		ITE_MACCD_G_GameFiles,
+		ARRAYSIZE(ITEWINDEMO_GameFonts),
+		ITEWINDEMO_GameFonts,
+		&ITEMACCD_G_GameSound,
+		&ITEMACCD_G_GameSound,
+		NULL,
+		0,
+		NULL,
+		GF_BIG_ENDIAN_DATA | GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformMacintosh,
+	},
+
+	// Inherit the earth - MAC CD Wyrmkeep version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_MACCD,
+		"Wyrmkeep CD",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_MACCD_GameFiles),
+		ITE_MACCD_GameFiles,
+		ARRAYSIZE(ITEWINDEMO_GameFonts),
+		ITEWINDEMO_GameFonts,
+		&ITEMACCD_GameSound,
+		&ITEMACCD_GameSound,
+		&ITEMACCD_GameMusic,
+		ARRAYSIZE(ITEMacPatch_Files),
+		ITEMacPatch_Files,
+		GF_BIG_ENDIAN_DATA | GF_WYRMKEEP | GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformMacintosh,
+	},
+
+	// Inherit the earth - Linux Demo version
+	// Note: it should be before GID_ITE_WINDEMO2 version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_LINDEMO,
+		"Demo",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_LINDEMO_GameFiles),
+		ITE_LINDEMO_GameFiles,
+		ARRAYSIZE(ITEWINDEMO_GameFonts),
+		ITEWINDEMO_GameFonts,
+		&ITEWINDEMO2_GameVoice,
+		&ITEWINDEMO2_GameSound,
+		&ITELINDEMO_GameMusic,
+		ARRAYSIZE(ITELinPatch_Files),
+		ITELinPatch_Files,
+		GF_WYRMKEEP | GF_CD_FX | GF_SCENE_SUBSTITUTES,
+		Common::EN_ANY,
+		Common::kPlatformLinux,
+	},
+
+	// Inherit the earth - Win32 Demo version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_WINDEMO2,
+		"Demo",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_WINDEMO2_GameFiles),
+		ITE_WINDEMO2_GameFiles,
+		ARRAYSIZE(ITEWINDEMO_GameFonts),
+		ITEWINDEMO_GameFonts,
+		&ITEWINDEMO2_GameVoice,
+		&ITEWINDEMO2_GameSound,
+		NULL,
+		ARRAYSIZE(ITEWinPatch2_Files),
+		ITEWinPatch2_Files,
+		GF_WYRMKEEP | GF_CD_FX | GF_SCENE_SUBSTITUTES,
+		Common::EN_ANY,
+		Common::kPlatformWindows,
+	},
+
+	// Inherit the earth - early Win32 Demo version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_WINDEMO1,
+		"early Demo",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_WINDEMO1_GameFiles),
+		ITE_WINDEMO1_GameFiles,
+		ARRAYSIZE(ITEWINDEMO_GameFonts),
+		ITEWINDEMO_GameFonts,
+		&ITEWINDEMO1_GameSound,
+		&ITEWINDEMO1_GameSound,
+		NULL,
+		ARRAYSIZE(ITEWinPatch1_Files),
+		ITEWinPatch1_Files,
+		GF_WYRMKEEP | GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformWindows,
+	},
+
+	// Inherit the earth - Wyrmkeep combined Windows/Mac/Linux CD
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_MULTICD,
+		"Multi-OS CD Version",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_MULTICD_GameFiles),
+		ITE_MULTICD_GameFiles,
+		ARRAYSIZE(ITECD_GameFonts),
+		ITECD_GameFonts,
+		&ITEMACCD_GameSound,
+		&ITECD_GameSound,
+		&ITEMACCD_GameMusic,
+		0,
+		NULL,
+		GF_WYRMKEEP | GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformUnknown,
+	},
+
+	// Inherit the earth - Wyrmkeep Linux CD version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_LINCD,
+		"CD Version",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_LINCD_GameFiles),
+		ITE_LINCD_GameFiles,
+		ARRAYSIZE(ITECD_GameFonts),
+		ITECD_GameFonts,
+		&ITECD_GameSound,
+		&ITECD_GameSound,
+		&ITEMACCD_GameMusic,
+		ARRAYSIZE(ITELinPatch_Files),
+		ITELinPatch_Files,
+		GF_WYRMKEEP | GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformLinux,
+	},
+
+	// Inherit the earth - Wyrmkeep Windows CD version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_WINCD,
+		"CD Version",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_WINCD_GameFiles),
+		ITE_WINCD_GameFiles,
+		ARRAYSIZE(ITECD_GameFonts),
+		ITECD_GameFonts,
+		&ITECD_GameSound,
+		&ITECD_GameSound,
+		NULL,
+		ARRAYSIZE(ITEWinPatch1_Files),
+		ITEWinPatch1_Files,
+		GF_WYRMKEEP | GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformWindows,
+	},
+
+	// Inherit the earth - DOS CD version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_CD_G,
+		"CD Version",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_CD_G_GameFiles),
+		ITE_CD_G_GameFiles,
+		ARRAYSIZE(ITECD_GameFonts),
+		ITECD_GameFonts,
+		&ITECD_GameSound,
+		&ITECD_GameSound,
+		NULL,
+		0,
+		NULL,
+		GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformPC,
+	},
+
+	// Inherit the earth - DOS CD version with digital music
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_CD_G2,
+		"CD Version",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_CD_G2_GameFiles),
+		ITE_CD_G2_GameFiles,
+		ARRAYSIZE(ITECD_GameFonts),
+		ITECD_GameFonts,
+		&ITECD_GameSound,
+		&ITECD_GameSound,
+		&ITEMACCD_GameMusic,
+		0,
+		NULL,
+		GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformPC,
+	},
+
+	// Inherit the earth - DOS CD German version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_CD_DE,
+		"CD Version",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_CD_DE_GameFiles),
+		ITE_CD_DE_GameFiles,
+		ARRAYSIZE(ITECD_GameFonts),
+		ITECD_GameFonts,
+		&ITECD_GameSound,
+		&ITECD_GameSound,
+		NULL,
+		0,
+		NULL,
+		GF_CD_FX,
+		Common::DE_DEU,
+		Common::kPlatformPC,
+	},
+
+	// Inherit the earth - DOS CD German version with digital music
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_CD_DE2,
+		"CD Version",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_CD_DE2_GameFiles),
+		ITE_CD_DE2_GameFiles,
+		ARRAYSIZE(ITECD_GameFonts),
+		ITECD_GameFonts,
+		&ITECD_GameSound,
+		&ITECD_GameSound,
+		&ITEMACCD_GameMusic,
+		0,
+		NULL,
+		GF_CD_FX,
+		Common::DE_DEU,
+		Common::kPlatformPC,
+	},
+
+	// Inherit the earth - CD version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_CD,
+		"CD Version",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_CD_GameFiles),
+		ITE_CD_GameFiles,
+		ARRAYSIZE(ITECD_GameFonts),
+		ITECD_GameFonts,
+		&ITECD_GameSound,
+		&ITECD_GameSound,
+		NULL,
+		0,
+		NULL,
+		GF_CD_FX,
+		Common::EN_ANY,
+		Common::kPlatformPC,
+	},
+
+	// Inherit the earth - German Floppy version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_DISK_DE,
+		"Floppy",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_DISK_DE_GameFiles),
+		ITE_DISK_DE_GameFiles,
+		ARRAYSIZE(ITEDISK_GameFonts),
+		ITEDISK_GameFonts,
+		&ITEDISK_GameSound,
+		&ITEDISK_GameSound,
+		NULL,
+		0,
+		NULL,
+		0,
+		Common::DE_DEU,
+		Common::kPlatformPC,
+	},
+
+	// Inherit the earth - German Floppy version with digital music
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_DISK_DE2,
+		"Floppy",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_DISK_DE2_GameFiles),
+		ITE_DISK_DE2_GameFiles,
+		ARRAYSIZE(ITEDISK_GameFonts),
+		ITEDISK_GameFonts,
+		&ITEDISK_GameSound,
+		&ITEDISK_GameSound,
+		&ITEMACCD_GameMusic,
+		0,
+		NULL,
+		0,
+		Common::DE_DEU,
+		Common::kPlatformPC,
+	},
+
+	// Inherit the earth - Disk version
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_DISK_G,
+		"Floppy",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_DISK_G_GameFiles),
+		ITE_DISK_G_GameFiles,
+		ARRAYSIZE(ITEDISK_GameFonts),
+		ITEDISK_GameFonts,
+		&ITEDISK_GameSound,
+		&ITEDISK_GameSound,
+		NULL,
+		0,
+		NULL,
+		0,
+		Common::EN_ANY,
+		Common::kPlatformPC,
+	},
+
+	// Inherit the earth - Disk version with digital music
+	{
+		"ite",
+		GType_ITE,
+		GID_ITE_DISK_G2,
+		"Floppy",
+		&ITE_DisplayInfo,
+		ITE_DEFAULT_SCENE,
+		&ITE_Resources,
+		ARRAYSIZE(ITE_DISK_G2_GameFiles),
+		ITE_DISK_G2_GameFiles,
+		ARRAYSIZE(ITEDISK_GameFonts),
+		ITEDISK_GameFonts,
+		&ITEDISK_GameSound,
+		&ITEDISK_GameSound,
+		&ITEMACCD_GameMusic,
+		0,
+		NULL,
+		0,
+		Common::EN_ANY,
+		Common::kPlatformPC,
+	},
+
+	// I Have No Mouth And I Must Scream - Demo version
+	{
+		"ihnm",
+		GType_IHNM,
+		GID_IHNM_DEMO,
+		"Demo",
+		&IHNM_DisplayInfo,
+		0,
+		&IHNM_Resources,
+		ARRAYSIZE(IHNM_DEMO_GameFiles),
+		IHNM_DEMO_GameFiles,
+		ARRAYSIZE(IHNMDEMO_GameFonts),
+		IHNMDEMO_GameFonts,
+		&IHNM_GameSound,
+		&IHNM_GameSound,
+		NULL,
+		0,
+		NULL,
+		0,
+		Common::EN_ANY,
+		Common::kPlatformPC,
+	},
+
+	// I Have No Mouth And I Must Scream - CD version
+	{
+		"ihnm",
+		GType_IHNM,
+		GID_IHNM_CD,
+		"",
+		&IHNM_DisplayInfo,
+		IHNM_DEFAULT_SCENE,
+		&IHNM_Resources,
+		ARRAYSIZE(IHNM_CD_GameFiles),
+		IHNM_CD_GameFiles,
+		ARRAYSIZE(IHNMCD_GameFonts),
+		IHNMCD_GameFonts,
+		&IHNM_GameSound,
+		&IHNM_GameSound,
+		NULL,
+		0,
+		NULL,
+		0,
+		Common::EN_ANY,
+		Common::kPlatformPC,
+	},
+
+	// I Have No Mouth And I Must Scream - De CD version
+	{
+		"ihnm",
+		GType_IHNM,
+		GID_IHNM_CD_DE,
+		"",
+		&IHNM_DisplayInfo,
+		IHNM_DEFAULT_SCENE,
+		&IHNM_Resources,
+		ARRAYSIZE(IHNM_CD_DE_GameFiles),
+		IHNM_CD_DE_GameFiles,
+		ARRAYSIZE(IHNMCD_GameFonts),
+		IHNMCD_GameFonts,
+		&IHNM_GameSound,
+		&IHNM_GameSound,
+		NULL,
+		0,
+		NULL,
+		0,
+		Common::DE_DEU,
+		Common::kPlatformPC,
+	},
+	// I Have No Mouth And I Must Scream - Sp CD version
+	{
+		"ihnm",
+		GType_IHNM,
+		GID_IHNM_CD_ES,
+		"",
+		&IHNM_DisplayInfo,
+		IHNM_DEFAULT_SCENE,
+		&IHNM_Resources,
+		ARRAYSIZE(IHNM_CD_ES_GameFiles),
+		IHNM_CD_ES_GameFiles,
+		ARRAYSIZE(IHNMCD_GameFonts),
+		IHNMCD_GameFonts,
+		&IHNM_GameSound,
+		&IHNM_GameSound,
+		NULL,
+		0,
+		NULL,
+		0,
+		Common::ES_ESP,
+		Common::kPlatformPC,
+	},
+	// I Have No Mouth And I Must Scream - Ru CD version
+	{
+		"ihnm",
+		GType_IHNM,
+		GID_IHNM_CD_RU,
+		"",
+		&IHNM_DisplayInfo,
+		IHNM_DEFAULT_SCENE,
+		&IHNM_Resources,
+		ARRAYSIZE(IHNM_CD_RU_GameFiles),
+		IHNM_CD_RU_GameFiles,
+		ARRAYSIZE(IHNMCD_GameFonts),
+		IHNMCD_GameFonts,
+		&IHNM_GameSound,
+		&IHNM_GameSound,
+		NULL,
+		0,
+		NULL,
+		0,
+		Common::RU_RUS,
+		Common::kPlatformPC,
+	},
+	// I Have No Mouth And I Must Scream - Fr CD version
+	{
+		"ihnm",
+		GType_IHNM,
+		GID_IHNM_CD_FR,
+		"",
+		&IHNM_DisplayInfo,
+		IHNM_DEFAULT_SCENE,
+		&IHNM_Resources,
+		ARRAYSIZE(IHNM_CD_FR_GameFiles),
+		IHNM_CD_FR_GameFiles,
+		ARRAYSIZE(IHNMCD_GameFonts),
+		IHNMCD_GameFonts,
+		&IHNM_GameSound,
+		&IHNM_GameSound,
+		NULL,
+		0,
+		NULL,
+		0,
+		Common::FR_FRA,
+		Common::kPlatformPC,
+	},
+};
+
+


Property changes on: tools/trunk/sagagame.cpp
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Date Rev Author URL Id
Name: svn:eol-style
   + native

Added: tools/trunk/sagagame.h
===================================================================
--- tools/trunk/sagagame.h	                        (rev 0)
+++ tools/trunk/sagagame.h	2006-05-20 13:10:34 UTC (rev 22545)
@@ -0,0 +1,357 @@
+enum SAGAGameType {
+	GType_ITE = 0,
+	GType_IHNM = 1
+};
+
+enum GameIds {
+	// Dreamers Guild
+	GID_ITE_DEMO_G = 0,
+	GID_ITE_DISK_G,
+	GID_ITE_DISK_G2,
+	GID_ITE_CD_G,
+	GID_ITE_CD_G2,
+	GID_ITE_MACCD_G,
+
+	// Wyrmkeep
+	GID_ITE_CD,       // data for Win rerelease is same as in old DOS
+	GID_ITE_WINCD,    // but it has a bunch of patch files
+	GID_ITE_MACCD,
+	GID_ITE_LINCD,
+	GID_ITE_MULTICD,  // Wyrmkeep combined Windows/Mac/Linux version
+	GID_ITE_WINDEMO1, // older Wyrmkeep windows demo
+	GID_ITE_MACDEMO1, // older Wyrmkeep mac demo
+	GID_ITE_LINDEMO,
+	GID_ITE_WINDEMO2,
+	GID_ITE_MACDEMO2,
+
+	// German
+	GID_ITE_DISK_DE,
+	GID_ITE_DISK_DE2,
+	GID_ITE_AMIGACD_DE, // TODO
+	GID_ITE_OLDMAC_DE,  // TODO
+	GID_ITE_AMIGA_FL_DE,// TODO
+	GID_ITE_CD_DE,      // reported by mld. Bestsellergamers cover disk
+	GID_ITE_CD_DE2,
+	GID_ITE_AMIGA_AGA_DEMO, // TODO
+	GID_ITE_AMIGA_ECS_DEMO, // TODO
+
+	GID_IHNM_DEMO,
+	GID_IHNM_CD,
+	GID_IHNM_CD_DE,   // reported by mld. German retail
+	GID_IHNM_CD_ES,
+	GID_IHNM_CD_RU,
+	GID_IHNM_CD_FR
+};
+
+enum GameFileTypes {
+	GAME_RESOURCEFILE = 1 << 0,
+	GAME_SCRIPTFILE   = 1 << 1,
+	GAME_SOUNDFILE    = 1 << 2,
+	GAME_VOICEFILE    = 1 << 3,
+	GAME_DEMOFILE     = 1 << 4,
+	GAME_MUSICFILE    = 1 << 5,
+	GAME_MUSICFILE_GM = 1 << 6,
+	GAME_MUSICFILE_FM = 1 << 7,
+	GAME_PATCHFILE    = 1 << 8,
+	GAME_MACBINARY    = 1 << 9,
+	GAME_SWAPENDIAN   = 1 << 10
+};
+
+enum GameFeatures {
+        GF_BIG_ENDIAN_DATA   = 1 << 0,
+        GF_WYRMKEEP          = 1 << 1,
+        GF_CD_FX             = 1 << 2,
+        GF_SCENE_SUBSTITUTES = 1 << 3
+};
+
+enum VerbTypeIds {
+        kVerbITENone = 0,
+        kVerbITEPickUp = 1,
+        kVerbITELookAt = 2,
+        kVerbITEWalkTo = 3,
+        kVerbITETalkTo = 4,
+        kVerbITEOpen = 5,
+        kVerbITEClose = 6,
+        kVerbITEGive = 7,
+        kVerbITEUse = 8,
+        kVerbITEOptions = 9,
+        kVerbITEEnter = 10,
+        kVerbITELeave = 11,
+        kVerbITEBegin = 12,
+        kVerbITEWalkOnly = 13,
+        kVerbITELookOnly = 14,
+
+
+        kVerbIHNMNone = 0,
+        kVerbIHNMWalk = 1,
+        kVerbIHNMLookAt = 2,
+        kVerbIHNMTake = 3,
+        kVerbIHNMUse = 4,
+        kVerbIHNMTalkTo = 5,
+        kVerbIHNMSwallow = 6,
+        kVerbIHNMGive = 7,
+        kVerbIHNMPush = 8,
+        kVerbIHNMOptions = 9,
+        kVerbIHNMEnter = 10,
+        kVerbIHNMLeave = 11,
+        kVerbIHNMBegin = 12,
+        kVerbIHNMWalkOnly = 13,
+        kVerbIHNMLookOnly = 14,
+
+        kVerbTypeIdsMax = kVerbITELookOnly + 1
+};
+enum PanelButtonType {
+	kPanelButtonVerb = 1 << 0,
+	kPanelButtonArrow = 1 << 1,
+	kPanelButtonConverseText = 1 << 2,
+	kPanelButtonInventory = 1 << 3,
+
+	kPanelButtonOption = 1 << 4,
+	kPanelButtonOptionSlider = 1 << 5,
+	kPanelButtonOptionSaveFiles = 1 << 6,
+	kPanelButtonOptionText = 1 << 7,
+
+	kPanelButtonQuit = 1 << 8,
+	kPanelButtonQuitText = 1 << 9,
+
+	kPanelButtonLoad = 1 << 10,
+	kPanelButtonLoadText = 1 << 11,
+
+	kPanelButtonSave = 1 << 12,
+	kPanelButtonSaveText = 1 << 13,
+	kPanelButtonSaveEdit = 1 << 14,
+
+	kPanelButtonProtectText = 1 << 15,
+	kPanelButtonProtectEdit = 1 << 16,
+
+	kPanelAllButtons = 0xFFFFF
+};
+
+enum GameSoundTypes {
+	kSoundPCM = 0,
+	kSoundVOX = 1,
+	kSoundVOC = 2,
+	kSoundWAV = 3,
+	kSoundMacPCM = 4
+};
+
+enum TextStringIds {
+	kTextWalkTo,
+	kTextLookAt,
+	kTextPickUp,
+	kTextTalkTo,
+	kTextOpen,
+	kTextClose,
+	kTextUse,
+	kTextGive,
+	kTextOptions,
+	kTextTest,
+	kTextDemo,
+	kTextHelp,
+	kTextQuitGame,
+	kTextFast,
+	kTextSlow,
+	kTextOn,
+	kTextOff,
+	kTextContinuePlaying,
+	kTextLoad,
+	kTextSave,
+	kTextGameOptions,
+	kTextReadingSpeed,
+	kTextMusic,
+	kTextSound,
+	kTextCancel,
+	kTextQuit,
+	kTextOK,
+	kTextMid,
+	kTextClick,
+	kText10Percent,
+	kText20Percent,
+	kText30Percent,
+	kText40Percent,
+	kText50Percent,
+	kText60Percent,
+	kText70Percent,
+	kText80Percent,
+	kText90Percent,
+	kTextMax,
+	kTextQuitTheGameQuestion,
+	kTextLoadSuccessful,
+	kTextEnterSaveGameName,
+	kTextGiveTo,
+	kTextUseWidth,
+	kTextNewSave,
+	kTextICantPickup,
+	kTextNothingSpecial,
+	kTextNoPlaceToOpen,
+	kTextNoOpening,
+	kTextDontKnow,
+	kTextShowDialog,
+	kTextEnterProtectAnswer
+};
+
+
+struct GameFileDescription {
+	const char *fileName;
+	uint16 fileType;
+	const char *md5;
+};
+
+struct GameResourceDescription {
+	uint32 sceneLUTResourceId;
+	uint32 moduleLUTResourceId;
+	uint32 mainPanelResourceId;
+	uint32 conversePanelResourceId;
+	uint32 optionPanelResourceId;
+	uint32 mainSpritesResourceId;
+	uint32 mainPanelSpritesResourceId;
+	uint32 defaultPortraitsResourceId;
+	uint32 mainStringsResourceId;
+	uint32 actorsStringsResourceId;
+};
+
+struct GameFontDescription {
+	uint32 fontResourceId;
+};
+
+struct PanelButton {
+	PanelButtonType type;
+	int xOffset;
+	int yOffset;
+	int width;
+	int height;
+	int id;
+	uint16 ascii;
+	int state;
+	int upSpriteNumber;
+	int downSpriteNumber;
+	int overSpriteNumber;
+};
+
+struct GameDisplayInfo {
+	int logicalWidth;
+	int logicalHeight;
+
+	int pathStartY;
+	int sceneHeight;
+
+	int statusXOffset;
+	int statusYOffset;
+	int statusWidth;
+	int statusHeight;
+	int statusTextY;
+	int statusTextColor;
+	int statusBGColor;
+
+	int saveReminderXOffset;
+	int saveReminderYOffset;
+	int saveReminderWidth;
+	int saveReminderHeight;
+	int saveReminderFirstSpriteNumber;
+	int saveReminderSecondSpriteNumber;
+
+	int leftPortraitXOffset;
+	int leftPortraitYOffset;
+	int rightPortraitXOffset;
+	int rightPortraitYOffset;
+
+	int inventoryUpButtonIndex;
+	int inventoryDownButtonIndex;
+	int inventoryRows;
+	int inventoryColumns;
+
+	int mainPanelXOffset;
+	int mainPanelYOffset;
+	int mainPanelButtonsCount;
+	PanelButton *mainPanelButtons;
+
+	int converseMaxTextWidth;
+	int converseTextHeight;
+	int converseTextLines;
+	int converseUpButtonIndex;
+	int converseDownButtonIndex;
+
+	int conversePanelXOffset;
+	int conversePanelYOffset;
+	int conversePanelButtonsCount;
+	PanelButton *conversePanelButtons;
+
+	int optionSaveFilePanelIndex;
+	int optionSaveFileSliderIndex;
+	uint32 optionSaveFileVisible;
+
+	int optionPanelXOffset;
+	int optionPanelYOffset;
+	int optionPanelButtonsCount;
+	PanelButton *optionPanelButtons;
+
+	int quitPanelXOffset;
+	int quitPanelYOffset;
+	int quitPanelWidth;
+	int quitPanelHeight;
+	int quitPanelButtonsCount;
+	PanelButton *quitPanelButtons;
+
+	int loadPanelXOffset;
+	int loadPanelYOffset;
+	int loadPanelWidth;
+	int loadPanelHeight;
+	int loadPanelButtonsCount;
+	PanelButton *loadPanelButtons;
+
+	int saveEditIndex;
+	int savePanelXOffset;
+	int savePanelYOffset;
+	int savePanelWidth;
+	int savePanelHeight;
+	int savePanelButtonsCount;
+	PanelButton *savePanelButtons;
+
+	int protectEditIndex;
+	int protectPanelXOffset;
+	int protectPanelYOffset;
+	int protectPanelWidth;
+	int protectPanelHeight;
+	int protectPanelButtonsCount;
+	PanelButton *protectPanelButtons;
+};
+
+struct GameSoundInfo {
+	GameSoundTypes resourceType;
+	long frequency;
+	int sampleBits;
+	bool stereo;
+	bool isBigEndian;
+	bool isSigned;
+};
+
+struct GamePatchDescription {
+	const char *fileName;
+	uint16 fileType;
+	uint32 resourceId;
+	GameSoundInfo *soundInfo;
+};
+
+struct GameDescription {
+	const char *name;
+	SAGAGameType gameType;
+	GameIds gameId;
+	const char *extra;
+	GameDisplayInfo *gameDisplayInfo;
+	int startSceneNumber;
+	GameResourceDescription *resourceDescription;
+	int filesCount;
+	GameFileDescription *filesDescriptions;
+	int fontsCount;
+	GameFontDescription *fontDescriptions;
+	GameSoundInfo *voiceInfo;
+	GameSoundInfo *sfxInfo;
+	GameSoundInfo *musicInfo;
+	int patchesCount;
+	GamePatchDescription *patchDescriptions;
+	uint32 features;
+	Common::Language language;
+	Common::Platform platform;
+};
+
+#define FILE_MD5_BYTES 5000
\ No newline at end of file


Property changes on: tools/trunk/sagagame.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Date Rev Author URL Id
Name: svn:eol-style
   + native

Added: tools/trunk/sagaresnames.h
===================================================================
--- tools/trunk/sagaresnames.h	                        (rev 0)
+++ tools/trunk/sagaresnames.h	2006-05-20 13:10:34 UTC (rev 22545)
@@ -0,0 +1,254 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2004-2006 The ScummVM project
+ *
+ * The ReInherit Engine is (C)2000-2003 by Daniel Balsom.
+ *
+ * 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$
+ *
+ */
+
+// Descriptive names for game resource numbers
+
+#ifndef SAGA_RESOURCENAMES_H_
+#define SAGA_RESOURCENAMES_H_
+
+namespace Saga {
+
+// Prefix RID_ means Resource Id
+
+// Lookup tables
+#define RID_ITE_SCENE_LUT  1806
+#define RID_ITE_SCRIPT_LUT 216
+
+#define RID_ITEDEMO_SCENE_LUT  318
+#define RID_ITEDEMO_SCRIPT_LUT 146
+
+#define RID_IHNM_SCENE_LUT  1272
+#define RID_IHNM_SCRIPT_LUT 29
+#define RID_IHNM_SFX_LUT 265
+
+#define RID_IHNMDEMO_SCENE_LUT  286
+#define RID_IHNMDEMO_SCRIPT_LUT 18
+
+//obj names
+#define ITE_OBJ_MAP 14
+#define ITE_OBJ_MAGIC_HAT 0
+
+#define IHNM_OBJ_PROFILE 0x4000
+
+#define RID_IHNM_DEFAULT_PALETTE 1
+
+//actor names
+#define ITE_ACTOR_PUZZLE 176
+
+// SCENES
+#define ITE_SCENE_INV -1
+#define ITE_SCENE_PUZZLE 26
+#define ITE_SCENE_LODGE 21
+#define ITE_SCENE_ENDCREDIT1 295
+
+#define ITE_DEFAULT_SCENE 32
+#define IHNM_DEFAULT_SCENE 151
+
+#define ITEDEMO_DEFAULT_SCENE 68
+
+// FONTS
+#define RID_MEDIUM_FONT 0
+#define RID_BIG_FONT 1
+#define RID_SMALL_FONT 2
+
+// INTERFACE IMAGES
+#define RID_ITE_MAIN_PANEL 3
+#define RID_ITE_CONVERSE_PANEL 4
+#define RID_ITE_OPTION_PANEL 5
+#define RID_ITE_MAIN_SPRITES 6
+#define RID_ITE_MAIN_PANEL_SPRITES 7
+#define RID_ITE_MAIN_STRINGS 35 //main strings
+#define RID_ITE_ACTOR_NAMES 36 //actors names
+#define RID_ITE_DEFAULT_PORTRAITS 125
+
+#define RID_ITEDEMO_MAIN_PANEL 2
+#define RID_ITEDEMO_CONVERSE_PANEL 3
+#define RID_ITEDEMO_OPTION_PANEL 3 // FIXME: should be 4 but it is an empty resource.	
+#define RID_ITEDEMO_MAIN_SPRITES 5 // Proper fix would be not load options panel when demo is running
+#define RID_ITEDEMO_MAIN_PANEL_SPRITES 6
+#define RID_ITEDEMO_MAIN_STRINGS 8 //main strings
+#define RID_ITEDEMO_ACTOR_NAMES 9 //actors names
+#define RID_ITEDEMO_DEFAULT_PORTRAITS 80
+
+#define RID_ITE_TYCHO_MAP 1686
+#define RID_ITE_SPR_XHAIR1 (73 + 9)
+#define RID_ITE_SPR_XHAIR2 (74 + 9)
+
+#define RID_IHNM_MAIN_PANEL 9
+#define RID_IHNM_CONVERSE_PANEL 10
+#define RID_IHNM_HOURGLASS_CURSOR 11
+#define RID_IHNM_MAIN_SPRITES 12       // TODO: verify this
+#define RID_IHNM_MAIN_PANEL_SPRITES 12
+#define RID_IHNM_ARROW_SPRITES 13
+#define RID_IHNM_SAVEREMINDER_SPRITES 14
+#define RID_IHNM_OPTION_PANEL 15
+#define RID_IHNM_WARNING_PANEL 17
+#define RID_IHNM_BOSS_SCREEN 19
+#define RID_IHNM_PROFILE_BG 20
+#define RID_IHNM_MAIN_STRINGS 21
+
+// Puzzle portraits
+#define RID_ITE_SAKKA_APPRAISING	6
+#define RID_ITE_SAKKA_DENIAL		7
+#define RID_ITE_SAKKA_EXCITED		8
+#define RID_ITE_JFERRET_SERIOUS		9
+#define RID_ITE_JFERRET_GOOFY		10
+#define RID_ITE_JFERRET_ALOOF		11
+
+// ITE Scene resource numbers
+#define RID_ITE_OVERMAP_SCENE 226
+#define RID_ITE_INTRO_ANIM_SCENE 1538
+#define RID_ITE_CAVE_SCENE_1 1542
+#define RID_ITE_CAVE_SCENE_2 1545
+#define RID_ITE_CAVE_SCENE_3 1548
+#define RID_ITE_CAVE_SCENE_4 1551
+
+#define RID_ITE_VALLEY_SCENE 1556
+#define RID_ITE_TREEHOUSE_SCENE 1560
+#define RID_ITE_FAIREPATH_SCENE 1564
+#define RID_ITE_FAIRETENT_SCENE 1567
+
+#define RID_ITE_INTRO_ANIM_STARTFRAME 1529
+
+#define RID_ITE_INTRO_ANIM_1 1530
+#define RID_ITE_INTRO_ANIM_2 1531
+#define RID_ITE_INTRO_ANIM_3 1532
+#define RID_ITE_INTRO_ANIM_4 1533
+#define RID_ITE_INTRO_ANIM_5 1534
+#define RID_ITE_INTRO_ANIM_6 1535
+#define RID_ITE_INTRO_ANIM_7 1536
+
+#define RID_ITE_CAVE_IMG_1 1540
+#define RID_ITE_CAVE_IMG_2 1543
+#define RID_ITE_CAVE_IMG_3 1546
+#define RID_ITE_CAVE_IMG_4 1549
+
+#define RID_ITE_INTRO_IMG_1 1552
+#define RID_ITE_INTRO_IMG_2 1557
+#define RID_ITE_INTRO_IMG_3 1561
+#define RID_ITE_INTRO_IMG_4 1565
+
+// ITE_VOICES
+#define RID_CAVE_VOICE_0 0
+#define RID_CAVE_VOICE_1 1
+#define RID_CAVE_VOICE_2 2
+#define RID_CAVE_VOICE_3 3
+#define RID_CAVE_VOICE_4 4
+#define RID_CAVE_VOICE_5 5
+#define RID_CAVE_VOICE_6 6
+#define RID_CAVE_VOICE_7 7
+#define RID_CAVE_VOICE_8 8
+#define RID_CAVE_VOICE_9 9
+#define RID_CAVE_VOICE_10 10
+#define RID_CAVE_VOICE_11 11
+#define RID_CAVE_VOICE_12 12
+#define RID_CAVE_VOICE_13 13
+
+#define RID_SCENE1_VOICE_009 57
+//TODO: fill it
+#define RID_SCENE1_VOICE_138 186
+
+#define RID_BOAR_VOICE_000 239
+#define RID_BOAR_VOICE_002 241
+#define RID_BOAR_VOICE_005 244
+#define RID_BOAR_VOICE_006 245
+#define RID_BOAR_VOICE_007 246
+
+// MUSIC
+#define MUSIC_1 9
+#define MUSIC_2 10
+#define MUSIC_SUNSPOT 26
+
+// TODO: If the sound effects are numbered sequentially, we don't really need
+//       these constants. But for now they might be useful for debugging.
+
+// SOUND EFFECTS
+
+#define FX_DOOR_OPEN 14
+#define FX_DOOR_CLOSE 15
+#define FX_RUSH_WATER 16
+#define FX_CRICKET 17
+#define FX_PORTICULLIS 18
+#define FX_CLOCK_1 19
+#define FX_CLOCK_2 20
+#define FX_DAM_MACHINE 21
+#define FX_HUM1 22
+#define FX_HUM2 23
+#define FX_HUM3 24
+#define FX_HUM4 25
+#define FX_STREAM 26
+#define FX_SURF 27
+#define FX_FIRELOOP 28
+#define FX_SCRAPING 29
+#define FX_BEE_SWARM 30
+#define FX_SQUEAKBOARD 31
+#define FX_KNOCK 32
+#define FX_COINS 33
+#define FX_STORM 34
+#define FX_DOOR_CLOSE_2 35
+#define FX_ARCWELD 36
+#define FX_RETRACT_ORB 37
+#define FX_DRAGON 38
+#define FX_SNORES 39
+#define FX_SPLASH 40
+#define FX_LOBBY_DOOR 41
+#define FX_CHIRP_LOOP 42
+#define FX_DOOR_CREAK 43
+#define FX_SPOON_DIG 44
+#define FX_CROW 45
+#define FX_COLDWIND 46
+#define FX_TOOL_SND_1 47
+#define FX_TOOL_SND_2 48
+#define FX_TOOL_SND_3 49
+#define FX_DOOR_METAL 50
+#define FX_WATER_LOOP_S 51
+#define FX_WATER_LOOP_L 52
+#define FX_DOOR_OPEN_2 53
+#define FX_JAIL_DOOR 54
+#define FX_KILN_FIRE 55
+#define FX_DUMMY 56
+
+// These are only in the CD version
+
+#define FX_CROWD_01 57
+#define FX_CROWD_02 58
+#define FX_CROWD_03 59
+#define FX_CROWD_04 60
+#define FX_CROWD_05 61
+#define FX_CROWD_06 62
+#define FX_CROWD_07 63
+#define FX_CROWD_08 64
+#define FX_CROWD_09 65
+#define FX_CROWD_10 66
+#define FX_CROWD_11 67
+#define FX_CROWD_12 68
+#define FX_CROWD_13 69
+#define FX_CROWD_14 70
+#define FX_CROWD_15 71
+#define FX_CROWD_16 72
+#define FX_CROWD_17 73
+
+} // End of namespace Saga
+
+#endif


Property changes on: tools/trunk/sagaresnames.h
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Date Rev Author URL Id
Name: svn:eol-style
   + native


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.





More information about the Scummvm-git-logs mailing list