[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 = ¤tGameDescription->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