diff options
Diffstat (limited to 'devtools')
-rw-r--r-- | devtools/create_hugo/enums.h | 2 | ||||
-rw-r--r-- | devtools/create_hugo/staticdata.h | 36 | ||||
-rw-r--r-- | devtools/create_lure/process_actions.cpp | 2 | ||||
-rw-r--r-- | devtools/create_mads/main.cpp | 127 | ||||
-rw-r--r-- | devtools/create_mads/module.mk | 12 | ||||
-rw-r--r-- | devtools/create_mads/parser.cpp | 937 | ||||
-rw-r--r-- | devtools/create_mads/parser.h | 28 | ||||
-rw-r--r-- | devtools/create_mads/scripts/rex_nebular.txt | 2241 | ||||
-rw-r--r-- | devtools/create_project/create_project.cpp | 113 | ||||
-rw-r--r-- | devtools/create_project/create_project.h | 2 | ||||
-rwxr-xr-x | devtools/create_project/xcode.cpp | 2 | ||||
-rwxr-xr-x | devtools/credits.pl | 1313 | ||||
-rw-r--r-- | devtools/md5table.c | 1 | ||||
-rw-r--r-- | devtools/sci/musicplayer.cpp | 2 | ||||
-rw-r--r-- | devtools/scumm-md5.txt | 1 | ||||
-rw-r--r-- | devtools/tasmrecover/dreamweb/dreamweb.asm | 4 | ||||
-rw-r--r-- | devtools/tasmrecover/dreamweb/object.asm | 2 | ||||
-rw-r--r-- | devtools/tasmrecover/dreamweb/saveload.asm | 1 | ||||
-rwxr-xr-x | devtools/tasmrecover/tasm-recover | 1673 | ||||
-rw-r--r-- | devtools/tasmrecover/tasm/cpp.py | 107 | ||||
-rw-r--r-- | devtools/tasmrecover/tasm/parser.py | 43 |
21 files changed, 2381 insertions, 4268 deletions
diff --git a/devtools/create_hugo/enums.h b/devtools/create_hugo/enums.h index f721c3d4f5..667d7ebce1 100644 --- a/devtools/create_hugo/enums.h +++ b/devtools/create_hugo/enums.h @@ -1501,7 +1501,7 @@ enum objid_3d { }; // Enumerate sequence index matching direction of travel -enum {RIGHT, LEFT, DOWN, _UP}; +enum {RIGHT, LEFT, DOWN, __UP}; enum sound_t_1w { //Hugo 1 Win diff --git a/devtools/create_hugo/staticdata.h b/devtools/create_hugo/staticdata.h index 612e044982..0ead2109d0 100644 --- a/devtools/create_hugo/staticdata.h +++ b/devtools/create_hugo/staticdata.h @@ -6171,8 +6171,8 @@ act16 adogseq2_1w = {INIT_OBJ_SEQ, 4 * NORMAL_TPS_v2d, DOG_1w, 2}; act16 adog5_1w = {INIT_OBJ_SEQ, 0, DOG_1w, 0}; act16 at78c_1w = {INIT_OBJ_SEQ, NORMAL_TPS_v2d + 12, TRAP_1w, 0}; act16 arock3_1w = {INIT_OBJ_SEQ, 0, HERO, RIGHT}; -act16 arock5_1w = {INIT_OBJ_SEQ, 11, HERO, _UP}; -act16 arock10_1w = {INIT_OBJ_SEQ, 40, HERO, _UP}; +act16 arock5_1w = {INIT_OBJ_SEQ, 11, HERO, __UP}; +act16 arock10_1w = {INIT_OBJ_SEQ, 40, HERO, __UP}; act16 arock12_1w = {INIT_OBJ_SEQ, 44, HERO, DOWN}; act16 acutrope_1w = {INIT_OBJ_SEQ, 0, ROPE_1w, 1}; act16 abin1_1w = {INIT_OBJ_SEQ, 0, BOAT_1w, 1}; @@ -7192,9 +7192,9 @@ act16 abd11_2w = {INIT_OBJ_SEQ, 0, HERO, DOWN}; act16 abd2_2w = {INIT_OBJ_SEQ, 0, HERO, DOWN}; act16 abd21_2w = {INIT_OBJ_SEQ, 0, HERO, DOWN}; act16 aclosedoor1_2w = {INIT_OBJ_SEQ, DOORDELAY, DOOR1_2w, 0}; -act16 adone10_2w = {INIT_OBJ_SEQ, 10, HERO, _UP}; +act16 adone10_2w = {INIT_OBJ_SEQ, 10, HERO, __UP}; act16 adone6_2w = {INIT_OBJ_SEQ, 0, HORACE_2w, LEFT}; -act16 adone9_2w = {INIT_OBJ_SEQ, 10, HORACE_2w, _UP}; +act16 adone9_2w = {INIT_OBJ_SEQ, 10, HORACE_2w, __UP}; act16 adumb13_2w = {INIT_OBJ_SEQ, 0, HERO, DOWN}; act16 adumb3_2w = {INIT_OBJ_SEQ, 0, HERO, RIGHT}; act16 afuze1_2w = {INIT_OBJ_SEQ, 0, DYNAMITE_2w, 1}; @@ -7202,10 +7202,10 @@ act16 agiveb5_2w = {INIT_OBJ_SEQ, 2, CAT_2w, 1}; act16 ahall1_3_2w = {INIT_OBJ_SEQ, 0, HERO, RIGHT}; act16 ahall2_2a_2w = {INIT_OBJ_SEQ, 0, HERO, LEFT}; act16 ahall3_1a_2w = {INIT_OBJ_SEQ, 0, HERO, DOWN}; -act16 ahdrink4_2w = {INIT_OBJ_SEQ, 3, HESTER_2w, _UP}; +act16 ahdrink4_2w = {INIT_OBJ_SEQ, 3, HESTER_2w, __UP}; act16 ahdrink5_2w = {INIT_OBJ_SEQ, 70, HESTER_2w, DOWN}; act16 ahest3_2w = {INIT_OBJ_SEQ, 0, HESTER_2w, RIGHT}; -act16 ahest5_2w = {INIT_OBJ_SEQ, 22, HESTER_2w, _UP}; +act16 ahest5_2w = {INIT_OBJ_SEQ, 22, HESTER_2w, __UP}; act16 ahest7_2w = {INIT_OBJ_SEQ, 24, HESTER_2w, LEFT}; act16 ahest9_2w = {INIT_OBJ_SEQ, 45, HESTER_2w, DOWN}; act16 ainshed2_2w = {INIT_OBJ_SEQ, 0, HERO, DOWN}; @@ -7236,11 +7236,11 @@ act16 amaidc4_2w = {INIT_OBJ_SEQ, 8, MAID_2w, RIGHT}; act16 amaidc7_2w = {INIT_OBJ_SEQ, 16, MAID_2w, LEFT}; act16 amaidp6_2w = {INIT_OBJ_SEQ, 10, MAID_2w, DOWN}; act16 apenbseq1_2w = {INIT_OBJ_SEQ, 0, PENNY_2w, RIGHT}; -act16 apenbseq2_2w = {INIT_OBJ_SEQ, 25, PENNY_2w, _UP}; +act16 apenbseq2_2w = {INIT_OBJ_SEQ, 25, PENNY_2w, __UP}; act16 apenseq1_2w = {INIT_OBJ_SEQ, 0, PENNY_2w, RIGHT}; act16 apenseq2_2w = {INIT_OBJ_SEQ, PENDELAY + 7, PENNY_2w, DOWN}; act16 apenseq3_2w = {INIT_OBJ_SEQ, PENDELAY + 10, PENNY_2w, LEFT}; -act16 apenseq4_2w = {INIT_OBJ_SEQ, PENDELAY + 17, PENNY_2w, _UP}; +act16 apenseq4_2w = {INIT_OBJ_SEQ, PENDELAY + 17, PENNY_2w, __UP}; act16 apenseq5_2w = {INIT_OBJ_SEQ, PENDELAY + 42, PENNY_2w, RIGHT}; act16 apenseq6_2w = {INIT_OBJ_SEQ, PENDELAY + 74, PENNY_2w, 2}; @@ -8254,12 +8254,12 @@ act16 acamp7b_3w = {INIT_OBJ_SEQ, 40, NATG_3w, 2}; act16 acrash10_3w = {INIT_OBJ_SEQ, 8, HERO, LEFT}; act16 acrash15_3w = {INIT_OBJ_SEQ, 21, PENNY_3w, DOWN}; act16 acrash16_3w = {INIT_OBJ_SEQ, 22, PENNY_3w, LEFT}; -act16 acrash18_3w = {INIT_OBJ_SEQ, 40, HERO, _UP}; +act16 acrash18_3w = {INIT_OBJ_SEQ, 40, HERO, __UP}; act16 acrash2_3w = {INIT_OBJ_SEQ, 1, PENNY_3w, DOWN}; act16 acrash3_3w = {INIT_OBJ_SEQ, 1, HERO, DOWN}; act16 acrash8_3w = {INIT_OBJ_SEQ, 4, PENNY_3w, RIGHT}; act16 adart6_3w = {INIT_OBJ_SEQ, DARTTIME - 1, E_EYES_3w, 1}; -act16 adoc1_3w = {INIT_OBJ_SEQ, 0, HERO, _UP}; +act16 adoc1_3w = {INIT_OBJ_SEQ, 0, HERO, __UP}; act16 aeleblink1_3w = {INIT_OBJ_SEQ, 41, E_EYES_3w, 1}; act16 aeleblink2_3w = {INIT_OBJ_SEQ, 42, E_EYES_3w, 0}; act16 aeleblink3_3w = {INIT_OBJ_SEQ, 43, E_EYES_3w, 1}; @@ -10145,9 +10145,9 @@ act16 abd2_2d = {INIT_OBJ_SEQ, 0, HERO, DOWN}; act16 abd21_2d = {INIT_OBJ_SEQ, 0, HERO, DOWN}; act16 aclosedoor1_2d = {INIT_OBJ_SEQ, DOORDELAY, DOOR1_2d, 0}; act16 adalek2_2d = {INIT_OBJ_SEQ, 0, DALEK_2d, 2}; -act16 adone10_2d = {INIT_OBJ_SEQ, 10, HERO, _UP}; +act16 adone10_2d = {INIT_OBJ_SEQ, 10, HERO, __UP}; act16 adone6_2d = {INIT_OBJ_SEQ, 0, HORACE_2d, LEFT}; -act16 adone9_2d = {INIT_OBJ_SEQ, 10, HORACE_2d, _UP}; +act16 adone9_2d = {INIT_OBJ_SEQ, 10, HORACE_2d, __UP}; act16 adumb13_2d = {INIT_OBJ_SEQ, 0, HERO, DOWN}; act16 adumb3_2d = {INIT_OBJ_SEQ, 0, HERO, RIGHT}; act16 afuze1_2d = {INIT_OBJ_SEQ, 0, DYNAMITE_2d, 1}; @@ -10155,10 +10155,10 @@ act16 agiveb5_2d = {INIT_OBJ_SEQ, 2, CAT_2d, 1}; act16 ahall1_3_2d = {INIT_OBJ_SEQ, 0, HERO, RIGHT}; act16 ahall2_2a_2d = {INIT_OBJ_SEQ, 0, HERO, LEFT}; act16 ahall3_1a_2d = {INIT_OBJ_SEQ, 0, HERO, DOWN}; -act16 ahdrink4_2d = {INIT_OBJ_SEQ, 3, HESTER_2d, _UP}; +act16 ahdrink4_2d = {INIT_OBJ_SEQ, 3, HESTER_2d, __UP}; act16 ahdrink5_2d = {INIT_OBJ_SEQ, 50, HESTER_2d, DOWN}; act16 ahest3_2d = {INIT_OBJ_SEQ, 0, HESTER_2d, RIGHT}; -act16 ahest5_2d = {INIT_OBJ_SEQ, 22, HESTER_2d, _UP}; +act16 ahest5_2d = {INIT_OBJ_SEQ, 22, HESTER_2d, __UP}; act16 ahest7_2d = {INIT_OBJ_SEQ, 24, HESTER_2d, LEFT}; act16 ahest9_2d = {INIT_OBJ_SEQ, 45, HESTER_2d, DOWN}; act16 ainshed2_2d = {INIT_OBJ_SEQ, 0, HERO, DOWN}; @@ -10188,11 +10188,11 @@ act16 amaidc4_2d = {INIT_OBJ_SEQ, 8, MAID_2d, RIGHT}; act16 amaidc7_2d = {INIT_OBJ_SEQ, 16, MAID_2d, LEFT}; act16 amaidp6_2d = {INIT_OBJ_SEQ, 10, MAID_2d, DOWN}; act16 apenbseq1_2d = {INIT_OBJ_SEQ, 0, PENNY_2d, RIGHT}; -act16 apenbseq2_2d = {INIT_OBJ_SEQ, 25, PENNY_2d, _UP}; +act16 apenbseq2_2d = {INIT_OBJ_SEQ, 25, PENNY_2d, __UP}; act16 apenseq1_2d = {INIT_OBJ_SEQ, 0, PENNY_2d, RIGHT}; act16 apenseq2_2d = {INIT_OBJ_SEQ, PENDELAY + 7, PENNY_2d, DOWN}; act16 apenseq3_2d = {INIT_OBJ_SEQ, PENDELAY + 10, PENNY_2d, LEFT}; -act16 apenseq4_2d = {INIT_OBJ_SEQ, PENDELAY + 17, PENNY_2d, _UP}; +act16 apenseq4_2d = {INIT_OBJ_SEQ, PENDELAY + 17, PENNY_2d, __UP}; act16 apenseq5_2d = {INIT_OBJ_SEQ, PENDELAY + 42, PENNY_2d, RIGHT}; act16 apenseq6_2d = {INIT_OBJ_SEQ, PENDELAY + 74, PENNY_2d, 2}; @@ -11155,12 +11155,12 @@ act16 acamp7b_3d = {INIT_OBJ_SEQ, 40, NATG_3d, 2}; act16 acrash10_3d = {INIT_OBJ_SEQ, 8, HERO, LEFT}; act16 acrash15_3d = {INIT_OBJ_SEQ, 21, PENNY_3d, DOWN}; act16 acrash16_3d = {INIT_OBJ_SEQ, 22, PENNY_3d, LEFT}; -act16 acrash18_3d = {INIT_OBJ_SEQ, 40, HERO, _UP}; +act16 acrash18_3d = {INIT_OBJ_SEQ, 40, HERO, __UP}; act16 acrash2_3d = {INIT_OBJ_SEQ, 1, PENNY_3d, DOWN}; act16 acrash3_3d = {INIT_OBJ_SEQ, 1, HERO, DOWN}; act16 acrash8_3d = {INIT_OBJ_SEQ, 4, PENNY_3d, RIGHT}; act16 adart6_3d = {INIT_OBJ_SEQ, DARTTIME - 1, E_EYES_3d, 1}; -act16 adoc1_3d = {INIT_OBJ_SEQ, 0, HERO, _UP}; +act16 adoc1_3d = {INIT_OBJ_SEQ, 0, HERO, __UP}; act16 aeleblink1_3d = {INIT_OBJ_SEQ, 41, E_EYES_3d, 1}; act16 aeleblink2_3d = {INIT_OBJ_SEQ, 42, E_EYES_3d, 0}; act16 aeleblink3_3d = {INIT_OBJ_SEQ, 43, E_EYES_3d, 1}; diff --git a/devtools/create_lure/process_actions.cpp b/devtools/create_lure/process_actions.cpp index 8539391d57..db965730cb 100644 --- a/devtools/create_lure/process_actions.cpp +++ b/devtools/create_lure/process_actions.cpp @@ -255,7 +255,7 @@ uint16 process_action_sequence_entry(int supportIndex, byte *data, uint16 remain // Replace code offset with an index params[0] = index; else { - printf("\nEncountered unrecognised NPC code jump point: %xh\n", params[0]); + printf("\nEncountered unrecognized NPC code jump point: %xh\n", params[0]); exit(1); } break; diff --git a/devtools/create_mads/main.cpp b/devtools/create_mads/main.cpp deleted file mode 100644 index b4de34d832..0000000000 --- a/devtools/create_mads/main.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -// HACK to allow building with the SDL backend on MinGW -// see bug #1800764 "TOOLS: MinGW tools building broken" -#ifdef main -#undef main -#endif // main - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include "parser.h" - -#define BUFFER_SIZE 8192 - -void link(const char *destFilename, char **srcFilenames, int srcCount) { - if (srcCount <= 0) - return; - - FILE *destFile = fopen(destFilename, "wb"); - if (!destFile) - return; - unsigned int v = 0; - const char *headerStr = "MADS"; - int fileOffset = 4 * (srcCount + 2); - - // Write header bit - fwrite(headerStr, 1, 4, destFile); - for (int i = 0; i <= srcCount; ++i) - fwrite(&v, 1, 4, destFile); - - // Set up buffer for copying - void *tempBuffer = malloc(BUFFER_SIZE); - - // Loop through copying each source file and setting it's file offset in the header - for (int i = 0; i < srcCount; ++i) { - // Add any extra padding to ensure that each file starts on a paragraph boundary - if ((fileOffset % 16) != 0) { - v = 0; - while ((fileOffset % 16) != 0) { - fwrite(&v, 1, 1, destFile); - ++fileOffset; - } - } - - FILE *srcFile = fopen(srcFilenames[i], "rb"); - if (!srcFile) { - printf("Could not locate file '%s'\n", srcFilenames[i]); - break; - } - - // Set the starting position of the file - fseek(destFile, 4 + (i * 4), SEEK_SET); - fwrite(&fileOffset, 1, 4, destFile); - - // Move back to the end of the destination and copy the source file contents over - fseek(destFile, 0, SEEK_END); - while (!feof(srcFile)) { - int bytesRead = fread(tempBuffer, 1, BUFFER_SIZE, srcFile); - fwrite(tempBuffer, 1, bytesRead, destFile); - fileOffset += bytesRead; - } - - fclose(srcFile); - } - - fclose(destFile); - free(tempBuffer); - printf("Done.\n"); -} - -int main(int argc, char *argv[]) { - if (argc == 1) { - printf("%s - ScummVM MADS Game script compiler v 1.0\n\n", argv[0]); - printf("Parameters: %s src_filename.txt [dest_filename.bin] - Compiles a script text file to an output binary\t", argv[0]); - printf("\t%s /link mads.dat filename1.bin [filename2.bin ..] - Joins one or more compiled Bin files to make\n", argv[0]); - printf("an output suitable for running in ScummVM.\n\n"); - } else if (!strcmp(argv[1], "/link")) { - // Link intermediate files into a final mads.dat file - if (argc < 4) - printf("Insufficient parameters\n"); - else - link(argv[2], &argv[3], argc - 3); - - } else { - // Compile a file - char buffer[256]; - const char *destFilename = buffer; - if (argc >= 3) - destFilename = argv[2]; - else { - // Use the source filename, but change the extension to '.bin' - strcpy(buffer, argv[1]); - char *p = buffer + strlen(buffer) - 1; - while ((p >= buffer) && (*p != '.')) --p; - if (p > buffer) - // Change the extension - strcpy(p, ".bin"); - } - - // Compile the specified source file - bool result = Compile(argv[1], destFilename); - return result ? 0 : 1; - } - - return 0; -} diff --git a/devtools/create_mads/module.mk b/devtools/create_mads/module.mk deleted file mode 100644 index 20d8deb8af..0000000000 --- a/devtools/create_mads/module.mk +++ /dev/null @@ -1,12 +0,0 @@ - -MODULE := devtools/create_mads - -MODULE_OBJS := \ - main.o \ - parser.o - -# Set the name of the executable -TOOL_EXECUTABLE := create_mads - -# Include common rules -include $(srcdir)/rules.mk diff --git a/devtools/create_mads/parser.cpp b/devtools/create_mads/parser.cpp deleted file mode 100644 index 5df505e0df..0000000000 --- a/devtools/create_mads/parser.cpp +++ /dev/null @@ -1,937 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> - -#define MAX_SOURCE_LINE_LENGTH 256 -#define MAX_TOKEN_STRING_LENGTH MAX_SOURCE_LINE_LENGTH -#define MAX_DIGIT_COUNT 20 -#define MAX_SYMBOLS 1024 -#define MAX_SUBROUTINES 1024 -#define MAX_SUBROUTINE_SIZE 4096 -#define MAX_SUBROUTINE_JUMPS 256 - -#define OPSIZE8 0x40 ///< when this bit is set - the operand size is 8 bits -#define OPSIZE16 0x80 ///< when this bit is set - the operand size is 16 bits -#define OPSIZE32 0x00 ///< when no bits are set - the operand size is 32 bits - -#define VERSION 1 - -enum CharCode { - LETTER, DIGIT, SPECIAL, EOF_CODE, EOL_CODE -}; - -enum TokenCode { - NO_TOKEN, WORD, NUMBER, IDENTIFIER, END_OF_FILE, END_OF_LINE, - RW_DEFINE, RW_COLON, RW_SUB, RW_END, RW_OPCODE, - ERROR -}; - -enum LiteralType { - INTEGER_LIT -}; - -struct Literal { - LiteralType type; - union { - int integer; - } value; -}; - -struct SymbolEntry { - char symbol[MAX_TOKEN_STRING_LENGTH]; - char value[MAX_TOKEN_STRING_LENGTH]; -}; - -struct SubEntry { - char name[MAX_TOKEN_STRING_LENGTH]; - int fileOffset; -}; - -struct JumpSource { - char name[MAX_TOKEN_STRING_LENGTH]; - int line_number; - int offset; -}; - -struct JumpDest { - char name[MAX_TOKEN_STRING_LENGTH]; - int offset; -}; - -enum Opcodes { - OP_HALT = 0, OP_IMM = 1, OP_ZERO = 2, OP_ONE = 3, OP_MINUSONE = 4, OP_STR = 5, OP_DLOAD = 6, - OP_DSTORE = 7, OP_PAL = 8, OP_LOAD = 9, OP_GLOAD = 10, OP_STORE = 11, OP_GSTORE = 12, - OP_CALL = 13, OP_LIBCALL = 14, OP_RET = 15, OP_ALLOC = 16, OP_JUMP = 17, OP_JMPFALSE = 18, - OP_JMPTRUE = 19, OP_EQUAL = 20, OP_LESS = 21, OP_LEQUAL = 22, OP_NEQUAL = 23, OP_GEQUAL = 24, - OP_GREAT = 25, OP_PLUS = 26, OP_MINUS = 27, OP_LOR = 28, OP_MULT = 29, OP_DIV = 30, - OP_MOD = 31, OP_AND = 32, OP_OR = 33, OP_EOR = 34, OP_LAND = 35, OP_NOT = 36, OP_COMP = 37, - OP_NEG = 38, OP_DUP = 39, - TOTAL_OPCODES = 40 -}; - -typedef unsigned char byte; - -const unsigned char EOF_CHAR = (unsigned char)255; -const unsigned char EOL_CHAR = (unsigned char)254; - -/*----------------------------------------------------------------------*/ -/* Reserved words tables */ -/*----------------------------------------------------------------------*/ - -enum OpcodeParamType {OP_NO_PARAM, OP_IMM_PARAM, OP_TRANSFER_PARAM}; - -struct OpcodeEntry { - const char *str; - OpcodeParamType paramType; -}; - -OpcodeEntry OpcodeList[OP_DUP + 1] = { - {"HALT", OP_NO_PARAM}, {"IMM", OP_IMM_PARAM}, {"ZERO", OP_NO_PARAM}, {"ONE", OP_NO_PARAM}, - {"MINUSONE", OP_NO_PARAM}, {"STR", OP_IMM_PARAM}, {"DLOAD", OP_IMM_PARAM}, {"DSTORE", OP_IMM_PARAM}, - {"PAL", OP_IMM_PARAM}, {"LOAD", OP_IMM_PARAM}, {"GLOAD", OP_IMM_PARAM}, {"STORE", OP_IMM_PARAM}, - {"GSTORE", OP_IMM_PARAM}, {"CALL", OP_IMM_PARAM}, {"LIBCALL", OP_IMM_PARAM}, {"RET", OP_NO_PARAM}, - {"ALLOC", OP_IMM_PARAM}, {"JUMP", OP_TRANSFER_PARAM}, {"JMPFALSE", OP_TRANSFER_PARAM}, - {"JMPTRUE", OP_TRANSFER_PARAM}, {"EQUAL", OP_NO_PARAM}, {"LESS", OP_NO_PARAM}, - {"LEQUAL", OP_NO_PARAM}, {"NEQUAL", OP_NO_PARAM}, {"GEQUAL", OP_NO_PARAM}, - {"GREAT", OP_NO_PARAM}, {"PLUS", OP_NO_PARAM}, {"MINUS", OP_NO_PARAM}, - {"LOR", OP_NO_PARAM}, {"MULT", OP_NO_PARAM}, {"DIV", OP_IMM_PARAM}, {"MOD", OP_NO_PARAM}, - {"AND", OP_NO_PARAM}, {"OR", OP_NO_PARAM}, {"EOR", OP_NO_PARAM}, {"LAND", OP_NO_PARAM}, - {"NOT", OP_NO_PARAM}, {"COMP", OP_NO_PARAM}, {"NEG", OP_NO_PARAM}, {"DUP", OP_NO_PARAM} -}; - - -const char *symbol_strings[] = {"#DEFINE", ":", "SUB", "END"}; - -/*----------------------------------------------------------------------*/ -/* Globals */ -/*----------------------------------------------------------------------*/ - -unsigned char ch; // Current input character -TokenCode token; // code of current token -Opcodes opcode; // Current instruction opcode -OpcodeParamType paramType; // Parameter type opcode expects -Literal literal; // Value of literal -int buffer_offset; // Char offset into source buffer -int level = 0; // current nesting level -int line_number = 0; // current line number - -char source_buffer[MAX_SOURCE_LINE_LENGTH]; // Source file buffer -char token_string[MAX_TOKEN_STRING_LENGTH]; // Token string -const char *bufferp = source_buffer; // Source buffer ptr -char *tokenp = token_string; // Token string ptr - -int digit_count; // Total no. of digits in number -bool count_error; // Too many digits in number? - -FILE *source_file; -FILE *dest_file; -CharCode char_table[256]; - -SymbolEntry symbolTable[MAX_SYMBOLS]; -int symbolCount = 0; - -int game_number = 0; -int language = 0; - -int indexSize = 0; -int fileOffset = 0; -SubEntry subroutinesTable[MAX_SUBROUTINES]; -int subroutinesCount = 0; - -byte subroutineData[MAX_SUBROUTINE_SIZE]; -int subroutineSize = 0; - -JumpSource jumpSources[MAX_SUBROUTINE_JUMPS]; -int jumpSourceCount = 0; -JumpDest jumpDests[MAX_SUBROUTINE_JUMPS]; -int jumpDestCount = 0; - -#define char_code(ch) char_table[ch] - -void get_char(); -void get_token(); - -/*----------------------------------------------------------------------*/ -/* Miscellaneous support functions */ -/*----------------------------------------------------------------------*/ - -void strToUpper(char *string) { - while (*string) { - *string = toupper(*string); - ++string; - } -} - -void strToLower(char *string) { - while (*string) { - *string = tolower(*string); - ++string; - } -} - -int strToInt(const char *s) { - unsigned int tmp; - - if (!*s) - // No string at all - return 0; - else if (toupper(s[strlen(s) - 1]) == 'H') - // Hexadecimal string with trailing 'h' - sscanf(s, "%xh", &tmp); - else if (*s == '$') - // Hexadecimal string starting with '$' - sscanf(s + 1, "%x", &tmp); - else - // Standard decimal string - return atoi(s); - - return (int)tmp; -} - -/*----------------------------------------------------------------------*/ -/* Initialisation / De-initialisation code */ -/*----------------------------------------------------------------------*/ - -/** - * Open the input file for parsing - */ -void open_source_file(const char *name) { - if ((source_file = fopen(name, "r")) == NULL) { - printf("*** Error: Failed to open source file.\n"); - exit(0); - } - - // Fetch the first character - bufferp = ""; - get_char(); -} - -/** - * Close the source file - */ -void close_source_file() { - fclose(source_file); -} - -/** - * Initializes the scanner - */ -void init_scanner(const char *name) { - // Initialize character table - for (int i = 0; i < 256; ++i) char_table[i] = SPECIAL; - for (int i = '0'; i <= '9'; ++i) char_table[i] = DIGIT; - for (int i = 'A'; i <= 'Z'; ++i) char_table[i] = LETTER; - for (int i = 'a'; i <= 'z'; ++i) char_table[i] = LETTER; - char_table[EOF_CHAR] = EOF_CODE; - char_table[EOL_CHAR] = EOL_CODE; - char_table[(int)'$'] = DIGIT; // Needed for hexadecimal number handling - - open_source_file(name); -} - -/** - * Shuts down the scanner - */ -void quit_scanner() { - close_source_file(); -} - -/*----------------------------------------------------------------------*/ -/* Output routines */ -/*----------------------------------------------------------------------*/ - - -/** - * Initializes the output - */ -void init_output(const char *destFilename) { - dest_file = fopen(destFilename, "wb"); - if (dest_file == NULL) { - printf("Could not open file for writing\n"); - exit(0); - } -} - -/** - * Closes the output file - */ -void close_output() { - fclose(dest_file); -} - -/** - * Writes a single byte to the output - */ -void write_byte(byte v) { - fwrite(&v, 1, 1, dest_file); - ++fileOffset; -} - -/** - * Writes a word to the output - */ -void write_word(int v) { - write_byte(v & 0xff); - write_byte((v >> 8) & 0xff); -} - -/** - * Writes a 32-bit value to the output - */ -void write_long(int v) { - write_byte(v & 0xff); - write_byte((v >> 8) & 0xff); - write_byte((v >> 16) & 0xff); - write_byte((v >> 24) & 0xff); -} - -/** - * Writes a sequence of bytes to the output - */ -void write_bytes(byte *v, int len) { - fwrite(v, 1, len, dest_file); - fileOffset += len; -} - -/** - * Writes a repeat sequence of a value to the output - */ -void write_byte_seq(byte v, int len) { - byte *tempData = (byte *)malloc(len); - memset(tempData, v, len); - write_bytes(tempData, len); - free(tempData); -} - -/** - * Writes out the header and allocates space for the symbol table - */ -void write_header() { - // Write out three bytes - game Id, language Id, and version number - if (game_number == 0) { - game_number = 1; - printf("No game specified, defaulting to Rex Nebular\n"); - } - write_byte(game_number); - - if (language == 0) { - language = 1; - printf("No language specified, defaulting to English\n"); - } - write_byte(language); - - write_byte(VERSION); - - // Write out space to later come back and store the list of subroutine names and offsets - if (indexSize == 0) { - indexSize = 4096; - printf("No index size specified, defaulting to %d bytes\n", indexSize); - } - write_byte_seq(0, indexSize - 3); - - fileOffset = indexSize; -} - -/** - * Goes back and writes out the subroutine list - */ -void write_index() { - fseek(dest_file, 3, SEEK_SET); - - int bytesRemaining = indexSize - 3; - for (int i = 0; i < subroutinesCount; ++i) { - int entrySize = strlen(subroutinesTable[i].name) + 5; - - // Ensure there is enough remaining space - if ((bytesRemaining - entrySize) < 0) { - printf("Index has exceeded allowable size.\n"); - token = ERROR; - } - - // Write out the name and the file offset - write_bytes((byte *)&subroutinesTable[i].name, strlen(subroutinesTable[i].name) + 1); - write_long(subroutinesTable[i].fileOffset); - } -} - -/*----------------------------------------------------------------------*/ -/* Processing routines */ -/*----------------------------------------------------------------------*/ - -int symbolFind() { - for (int i = 0; i < symbolCount; ++i) { - if (!strcmp(symbolTable[i].symbol, token_string)) - return i; - } - return -1; -} - -int subIndexOf() { - for (int i = 0; i < subroutinesCount; ++i) { - if (!strcmp(subroutinesTable[i].name, token_string)) - return i; - } - return -1; -} - -int jumpIndexOf(const char *name) { - for (int i = 0; i < jumpDestCount; ++i) { - if (!strcmp(jumpDests[i].name, name)) - return i; - } - return -1; -} - -void handle_define() { - // Read the variable name - get_token(); - if (token != IDENTIFIER) { - token = ERROR; - return; - } - - // Make sure it doesn't already exist - if (symbolFind() != -1) { - printf("Duplicate symbol encountered.\n"); - token = ERROR; - return; - } - - // Store the new symbol name - strcpy(symbolTable[symbolCount].symbol, token_string); - - // Get the value - get_token(); - if (token == END_OF_LINE) { - printf("Unexpected end of line.\n"); - token = ERROR; - } - if ((token != NUMBER) && (token != IDENTIFIER)) { - printf("Invalid define value.\n"); - token = ERROR; - } - if (token == ERROR) - return; - - // Handle special symbols - if (!strcmp(symbolTable[symbolCount].symbol, "GAME_ID")) { - // Specify game number - if (!strcmp(token_string, "REX")) - game_number = 1; - else - token = ERROR; - } else if (!strcmp(symbolTable[symbolCount].symbol, "LANGUAGE")) { - // Specify the language - if (!strcmp(token_string, "ENGLISH")) - language = 1; - else - token = ERROR; - } else if (!strcmp(symbolTable[symbolCount].symbol, "INDEX_BLOCK_SIZE")) { - // Specifying the size of the index - indexSize = strToInt(token_string); - } else { - // Standard symbol - save it's value - strcpy(symbolTable[symbolCount].value, token_string); - ++symbolCount; - } - - if (token == ERROR) - return; - - // Ensure the next symbol is the end of line - get_token(); - if (token != END_OF_LINE) { - printf("Extraneous information on line.\n"); - token = ERROR; - } -} - -/** - * Handles getting a parameter for an opcode - */ -void get_parameter() { - int nvalue; - - if (token == NUMBER) { - literal.value.integer = strToInt(token_string); - return; - } - - if (token != IDENTIFIER) - return; - - nvalue = symbolFind(); - if (nvalue != -1) { - // Found symbol, so get it's numeric value and return - token = NUMBER; - literal.value.integer = strToInt(symbolTable[nvalue].value); - return; - } - - // Check if the parameter is the name of an already processed subroutine - strToLower(token_string); - nvalue = subIndexOf(); - if (nvalue == -1) { - token = ERROR; - return; - } - - // Store the index (not the offset) of the subroutine to call - token = NUMBER; - literal.value.integer = nvalue; -} - -#define INC_SUB_PTR if (++subroutineSize == MAX_SUBROUTINE_SIZE) { \ - printf("Maximum allowable subroutine size exceeded\n"); \ - token = ERROR; \ - return; \ - } - -#define WRITE_SUB_BYTE(v) subroutineData[subroutineSize] = (byte)(v) - -/** - * Handles a single instruction within the sub-routine - */ -void handle_instruction() { - // Write out the opcode - WRITE_SUB_BYTE(opcode); - INC_SUB_PTR; - - get_token(); - - if (OpcodeList[opcode].paramType == OP_IMM_PARAM) { - get_parameter(); - - if (token != NUMBER) { - printf("Incorrect opcode parameter encountered\n"); - token = ERROR; - return; - } - - // Apply the correct opcode size to the previously stored opcode and save the byte(s) - if (literal.value.integer <= 0xff) { - subroutineData[subroutineSize - 1] |= OPSIZE8; - WRITE_SUB_BYTE(literal.value.integer); - INC_SUB_PTR; - } else if (literal.value.integer <= 0xffff) { - subroutineData[subroutineSize - 1] |= OPSIZE16; - WRITE_SUB_BYTE(literal.value.integer); - INC_SUB_PTR; - WRITE_SUB_BYTE(literal.value.integer >> 8); - INC_SUB_PTR; - - } else { - subroutineData[subroutineSize - 1] |= OPSIZE32; - int v = literal.value.integer; - for (int i = 0; i < 4; ++i, v >>= 8) { - WRITE_SUB_BYTE(v); - INC_SUB_PTR; - } - } - - get_token(); - } else if (OpcodeList[opcode].paramType == OP_TRANSFER_PARAM) { - - if (token != IDENTIFIER) { - printf("Incorrect opcode parameter encountered\n"); - token = ERROR; - return; - } - - // Check to see if it's a backward jump to an existing label - int idx = jumpIndexOf(token_string); - if (idx != -1) { - // It's a backwards jump whose destination is already known - if (jumpDests[idx].offset < 256) { - // 8-bit destination - subroutineData[subroutineSize - 1] |= OPSIZE8; - subroutineData[subroutineSize] = jumpDests[idx].offset; - INC_SUB_PTR; - } else { - // 16-bit destination - subroutineData[subroutineSize - 1] |= OPSIZE16; - INC_SUB_PTR; - subroutineData[subroutineSize] = jumpDests[idx].offset & 0xff; - INC_SUB_PTR; - subroutineData[subroutineSize] = (jumpDests[idx].offset >> 8) & 0xff; - } - } else { - // Unknown destination, so save it for later resolving - strcpy(jumpSources[jumpSourceCount].name, token_string); - jumpSources[jumpSourceCount].line_number = line_number; - jumpSources[jumpSourceCount].offset = subroutineSize; - if (++jumpSourceCount == MAX_SUBROUTINE_JUMPS) { - printf("Maximum allowable jumps size exceeded\n"); - token = ERROR; - return; - } - - // Store a 16-bit placeholder - subroutineData[subroutineSize - 1] |= OPSIZE16; - WRITE_SUB_BYTE(0); - INC_SUB_PTR; - WRITE_SUB_BYTE(0); - INC_SUB_PTR; - } - - get_token(); - } - - if (token != END_OF_LINE) - token = ERROR; -} - -/** - * Called at the end of the sub-routine, fixes the destination of any forward jump references - */ -void fix_subroutine_jumps() { - for (int i = 0; i < jumpSourceCount; ++i) { - // Scan through the list of transfer destinations within the script - int idx = jumpIndexOf(jumpSources[i].name); - if (idx == -1) { - token = ERROR; - line_number = jumpSources[i].line_number; - return; - } - - // Replace the placeholder bytes with the new destination - subroutineData[jumpSources[i].offset] = jumpDests[idx].offset & 0xff; - subroutineData[jumpSources[i].offset + 1] = (jumpDests[idx].offset >> 8) & 0xff; - } -} - -/** - * Handles parsing a sub-routine - */ -void handle_sub() { - // Get the subroutine name - get_token(); - if (token != IDENTIFIER) { - printf("Missing subroutine name.\n"); - token = ERROR; - return; - } - - strToLower(token_string); - if (subIndexOf() != -1) { - printf("Duplicate sub-routine encountered\n"); - token = ERROR; - return; - } - - // If this is the first subroutine, start writing out the data - if (subroutinesCount == 0) - write_header(); - - // Save the sub-routine details - strcpy(subroutinesTable[subroutinesCount].name, token_string); - subroutinesTable[subroutinesCount].fileOffset = fileOffset; - if (++subroutinesCount == MAX_SUBROUTINES) { - printf("Exceeded maximum allowed subroutine count\n"); - token = ERROR; - return; - } - - // Ensure the line end - get_token(); - if (token != END_OF_LINE) { - token = ERROR; - return; - } - - // Initial processing arrays - memset(subroutineData, 0, MAX_SUBROUTINE_SIZE); - subroutineSize = 0; - jumpSourceCount = 0; - jumpDestCount = 0; - - // Loop through the lines of the sub-routine - while (token != ERROR) { - get_token(); - - if (token == END_OF_LINE) continue; - if (token == RW_OPCODE) { - // Handle instructions - handle_instruction(); - - } else if (token == IDENTIFIER) { - // Save identifier, it's hopefully a jump symbol - strcpy(jumpDests[jumpDestCount].name, token_string); - get_token(); - if (token != RW_COLON) - token = ERROR; - else { - // Save the jump point - jumpDests[jumpDestCount].offset = subroutineSize; - - if (++jumpDestCount == MAX_SUBROUTINE_JUMPS) { - printf("Subroutine exceeded maximum allowable jump points\n"); - token = ERROR; - return; - } - - // Ensure it's the last value on the line - get_token(); - if (token != END_OF_LINE) - token = ERROR; - } - } else if (token == RW_END) { - // End of subroutine reached - get_token(); - if (token != ERROR) - fix_subroutine_jumps(); - write_bytes(&subroutineData[0], subroutineSize); - break; - - } else { - token = ERROR; - printf("Unexpected error\n"); - } - } -} - -/*----------------------------------------------------------------------*/ -/* Character routines */ -/*----------------------------------------------------------------------*/ - -/** - * Read the next line from the source file. - */ -bool get_source_line() { - if ((fgets(source_buffer, MAX_SOURCE_LINE_LENGTH, source_file)) != NULL) { - return true; - } - - return false; -} - -/** - * Set ch to the next character from the source buffer - */ -void get_char() { - // If at the end of current source line, read another line. - // If at end of file, set ch to the EOF character and return - if (*bufferp == '\0') { - if (!get_source_line()) { - ch = EOF_CHAR; - return; - } - bufferp = source_buffer; - buffer_offset = 0; - ++line_number; - ch = EOL_CHAR; - return; - } - - ch = *bufferp++; // Next character in the buffer - - if ((ch == '\n') || (ch == '\t')) ch = ' '; -} - -/** - * Skip past any blanks in the current location in the source buffer. - * Set ch to the next nonblank character - */ -void skip_blanks() { - while (ch == ' ') get_char(); -} - -/*----------------------------------------------------------------------*/ -/* Token routines */ -/*----------------------------------------------------------------------*/ - -bool is_reserved_word() { - for (int i = 0; i < 4; ++i) { - if (!strcmp(symbol_strings[i], token_string)) { - token = (TokenCode)(RW_DEFINE + i); - return true; - } - } - return false; -} - -bool is_opcode() { - for (int i = 0; i < TOTAL_OPCODES; ++i) { - if (!strcmp(OpcodeList[i].str, token_string)) { - token = RW_OPCODE; - opcode = (Opcodes)i; - paramType = OpcodeList[i].paramType; - return true; - } - } - return false; -} - -/** - * Extract a word token and set token to IDENTIFIER - */ -void get_word() { - // Extract the word - while ((char_code(ch) == LETTER) || (char_code(ch) == DIGIT) || (ch == '_')) { - *tokenp++ = ch; - get_char(); - } - - *tokenp = '\0'; - - strToUpper(token_string); - token = WORD; - if (!is_reserved_word() && !is_opcode()) token = IDENTIFIER; -} - -/** - * Extract a number token and set literal to it's value. Set token to NUMBER - */ -void get_number() { - digit_count = 0; // Total no. of digits in number */ - count_error = false; // Too many digits in number? - - do { - *tokenp++ = ch; - - if (++digit_count > MAX_DIGIT_COUNT) { - count_error = true; - break; - } - - get_char(); - } while ((char_code(ch) == DIGIT) || (toupper(ch) == 'X') || ((toupper(ch) >= 'A') && (toupper(ch) <= 'F'))); - - if (count_error) { - token = ERROR; - return; - } - - literal.type = INTEGER_LIT; - literal.value.integer = strToInt(token_string); - *tokenp = '\0'; - token = NUMBER; -} - -/** - * Extract a special token - */ -void get_special() { - *tokenp++ = ch; - if (ch == ':') { - token = RW_COLON; - get_char(); - return; - } else if (ch == '/') { - *tokenp++ = ch; - get_char(); - if (ch == '/') { - // Comment, so read until end of line - while ((ch != EOL_CHAR) && (ch != EOF_CHAR)) - get_char(); - token = END_OF_LINE; - return; - } - } - - // Extract the rest of the word - get_char(); - while ((char_code(ch) == LETTER) || (char_code(ch) == DIGIT)) { - *tokenp++ = ch; - get_char(); - } - *tokenp = '\0'; - - strToUpper(token_string); - if (token_string[0] == '@') - token = IDENTIFIER; - else if (!is_reserved_word()) - token = ERROR; -} - -/** - * Extract the next token from the source buffer - */ -void get_token() { - skip_blanks(); - tokenp = token_string; - - switch (char_code(ch)) { - case LETTER: get_word(); break; - case DIGIT: get_number(); break; - case EOL_CODE: { token = END_OF_LINE; get_char(); break; } - case EOF_CODE: token = END_OF_FILE; break; - default: get_special(); break; - } -} - -/** - * Handles processing a line outside of subroutines - */ -void process_line() { - if ((token == ERROR) || (token == END_OF_FILE)) return; - - switch (token) { - case RW_DEFINE: - handle_define(); - break; - case RW_SUB: - handle_sub(); - break; - case END_OF_LINE: - break; - default: - token = ERROR; - break; - } - - if (token == END_OF_LINE) { - get_token(); - } -} - -/*----------------------------------------------------------------------*/ -/* Interface methods */ -/*----------------------------------------------------------------------*/ - -/** - * Main compiler method - */ -bool Compile(const char *srcFilename, const char *destFilename) { - init_scanner(srcFilename); - init_output(destFilename); - - get_token(); - while ((token != END_OF_FILE) && (token != ERROR)) - process_line(); - - if (token != ERROR) { - write_index(); - } - - quit_scanner(); - - if (token == ERROR) - printf("Error encountered on line %d\n", line_number); - else - printf("Compilation complete\n"); - return token != ERROR; -} diff --git a/devtools/create_mads/parser.h b/devtools/create_mads/parser.h deleted file mode 100644 index a7141c497a..0000000000 --- a/devtools/create_mads/parser.h +++ /dev/null @@ -1,28 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef CREATE_MADS_PARSER -#define CREATE_MADS_PARSER - -bool Compile(const char *srcFilename, const char *destFilename); - -#endif diff --git a/devtools/create_mads/scripts/rex_nebular.txt b/devtools/create_mads/scripts/rex_nebular.txt deleted file mode 100644 index f33a574813..0000000000 --- a/devtools/create_mads/scripts/rex_nebular.txt +++ /dev/null @@ -1,2241 +0,0 @@ -// MADS Script Engine auto-generated script file - -// Special #defines -#define INDEX_BLOCK_SIZE 8192 -#define GAME_ID REX -#define LANGUAGE ENGLISH - -// List of data variables -#define Scene_abortTimersMode2 1 -#define Scene_abortTimers 2 -#define Player_stepEnabled 3 -#define Scene_nextScene 4 -#define Scene_priorSceneId 5 -#define Player_playerPos_x 6 -#define Player_playerPos_y 7 -#define Player_direction 8 -#define Player_visible 9 -#define Scene_activeAnimation 10 -#define Animation_currentFrame 11 - -// Library function list -#define dialog_show 1 -#define SequenceList_remove 2 -#define start_reversible_sprite_sequence 3 -#define SequenceList_setAnimRange 4 -#define SequenceList_addSubEntry 5 -#define start_cycled_sprite_sequence 6 -#define quotes_get_pointer 7 -#define KernelMessageList_add 8 -#define SequenceList_unk3 9 -#define start_sound 10 -#define SceneLogic_formAnimName 11 -#define SpriteList_addSprites 12 -#define hotspot_activate 13 -#define DynamicHotspots_add 14 -#define SequenceList_setDepth 15 -#define quotes_load 16 -#define form_resource_name 17 -#define MadsScene_loadAnimation 18 -#define Action_isAction 19 -#define start_sprite_sequence3 20 -#define DynamicHotspots_remove 21 -#define object_is_present 22 -#define inventory_add 23 -#define dialog_picture_show 24 -#define object_is_in_inventory 25 - -// Script functions start here - -sub scene101_sub1 - ONE - DSTORE Scene_abortTimersMode2 // 2ecf2h - ZERO - DSTORE Player_stepEnabled // 2ecf8h - DLOAD Scene_abortTimers // 2ecfeh - STORE 0 - JUMP @2edc0 // 2ed01h -@2ed04: - DLOAD $546E // 2ed04h - STORE 0 - LOAD 0 - LIBCALL SequenceList_remove - ZERO - ZERO - IMM 6 // 2ed10h - DLOAD $5450 // 2ed12h - STORE 0 - IMM 3 - ZERO - LOAD 0 - LIBCALL start_reversible_sprite_sequence - STORE 0 // 2ed1ah - LOAD 0 // 2ed1fh - DSTORE $546E - IMM 21 - IMM 17 - LOAD 0 - LIBCALL SequenceList_setAnimRange - IMM 72 // 2ed2dh - DLOAD $546E // 2ed2fh - STORE 0 - ZERO - ZERO - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2ed36h - IMM 17 // 2ed3bh - LIBCALL start_sound - ZERO - ZERO - IMM 2 // 2ed49h - DLOAD $544A // 2ed4bh - STORE 0 - IMM 3 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2ed53h - LOAD 0 // 2ed58h - DSTORE $5468 - RET -@2ed5c: - ZERO - ZERO - ZERO - DLOAD $5450 // 2ed62h - STORE 0 - IMM 6 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2ed6ah - LOAD 0 // 2ed6fh - DSTORE $546E - IMM 17 // 2ed75h - IMM 17 - IMM 17 - LOAD 0 - LIBCALL SequenceList_setAnimRange - IMM 57 - LIBCALL quotes_get_pointer - ZERO - IMM 60 // 2ed90h - ZERO - ZERO - IMM $1110 - IMM 61 - IMM 143 - LIBCALL KernelMessageList_add - STORE 0 // 2ed9fh - IMM 120 - LIBCALL SequenceList_unk3 - STORE 0 // 2edaah - RET -@2edb0: - IMM $2785 - ZERO - LIBCALL dialog_show - MINUSONE - DSTORE Player_stepEnabled // 2edb9h - RET -@2edc0: - LOAD 0 // 2edc0h - DUP - STORE 4 - IMM 73 - DUP - STORE 5 - EQUAL - JMPTRUE @2edb0 // 2edc3h - LOAD 4 // 2edc5h - LOAD 5 - GREAT - JMPTRUE @2edd2 - LOAD 0 // 2edc7h - ZERO - NEQUAL - JMPTRUE @2edce // 2edc9h - JUMP @2ed04 // 2edcbh -@2edce: - LOAD 0 // 2edceh - IMM 72 - MINUS - STORE 0 - LOAD 0 // 2edd0h - STORE 4 - LOAD 4 - ZERO - EQUAL - JMPTRUE @2ed5c -@2edd2: - RET -end - - -sub low_rooms_entry_sound - DLOAD $5A00 // 2b48ch - ZERO - NEQUAL - JMPTRUE @2b49e // 2b491h - IMM 2 // 2b493h -@2b495: - LIBCALL start_sound - RET -@2b49e: - DLOAD Scene_nextScene // 2b49eh - STORE 0 - JUMP @2b4d8 // 2b4a1h -@2b4a4: - IMM 11 // 2b4a4h - JUMP @2b495 // 2b4a6h -@2b4a8: - IMM 12 // 2b4a8h - JUMP @2b495 // 2b4aah -@2b4ac: - IMM 3 // 2b4ach - LIBCALL start_sound - IMM 25 // 2b4b6h - JUMP @2b495 // 2b4b8h -@2b4ba: - DLOAD Scene_priorSceneId // 2b4bah - IMM 104 - LESS - JMPTRUE @2b4c8 // 2b4bfh - DLOAD Scene_priorSceneId // 2b4c1h - IMM 108 - LEQUAL - JMPTRUE @2b500 // 2b4c6h -@2b4c8: - IMM 10 // 2b4c8h - JUMP @2b495 // 2b4cah -@2b4cc: - IMM 13 // 2b4cch - JUMP @2b495 // 2b4ceh -@2b4d0: - IMM 3 // 2b4d0h - JUMP @2b495 // 2b4d2h -@2b4d4: - IMM 15 // 2b4d4h - JUMP @2b495 // 2b4d6h -@2b4d8: - LOAD 0 // 2b4d8h - IMM 101 - MINUS - STORE 0 - LOAD 0 // 2b4dbh - IMM 11 - GREAT - JMPTRUE @2b500 // 2b4deh - LOAD 0 // 2b4e0h - IMM 2 - MULT - LOAD 0 // 2b4e2h - LOAD 1 - STORE 0 -//--- Begin Jump Table --- - LOAD 1 - ZERO - EQUAL - JMPTRUE @2b4a4 - LOAD 1 - ONE - EQUAL - JMPTRUE @2b4a8 - LOAD 1 - IMM 2 - EQUAL - JMPTRUE @2b4ac - LOAD 1 - IMM 3 - EQUAL - JMPTRUE @2b4ba - LOAD 1 - IMM 4 - EQUAL - JMPTRUE @2b4ba - LOAD 1 - IMM 5 - EQUAL - JMPTRUE @2b4ba - LOAD 1 - IMM 6 - EQUAL - JMPTRUE @2b4ba - LOAD 1 - IMM 7 - EQUAL - JMPTRUE @2b4ba - LOAD 1 - IMM 8 - EQUAL - JMPTRUE @2b4cc - LOAD 1 - IMM 9 - EQUAL - JMPTRUE @2b4c8 - LOAD 1 - IMM 10 - EQUAL - JMPTRUE @2b4d0 - LOAD 1 - IMM 11 - EQUAL - JMPTRUE @2b4d4 -//--- End Jump Table --- -@2b500: - RET -end - - -sub scene101_enter - ONE - IMM 120 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2c985h - LOAD 0 // 2c98ah - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2c98eh - LOAD 0 // 2c993h - DSTORE $543C - IMM 2 - IMM 120 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2c99bh - LOAD 0 // 2c9a0h - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2c9a4h - LOAD 0 // 2c9a9h - DSTORE $543E - IMM 3 - IMM 120 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2c9b1h - LOAD 0 // 2c9b6h - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2c9bah - LOAD 0 // 2c9bfh - DSTORE $5440 - IMM 4 - IMM 120 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2c9c7h - LOAD 0 // 2c9cch - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2c9d0h - LOAD 0 // 2c9d5h - DSTORE $5442 - IMM 5 - IMM 120 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2c9ddh - LOAD 0 // 2c9e2h - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2c9e6h - LOAD 0 // 2c9ebh - DSTORE $5444 - IMM 6 - IMM 120 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2c9f3h - LOAD 0 // 2c9f8h - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2c9fch - LOAD 0 // 2ca01h - DSTORE $5446 - IMM 7 - IMM 120 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2ca09h - LOAD 0 // 2ca0eh - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2ca12h - LOAD 0 // 2ca17h - DSTORE $5448 - MINUSONE - IMM 109 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2ca1fh - LOAD 0 // 2ca24h - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2ca28h - LOAD 0 // 2ca2dh - DSTORE $544A - ONE - IMM 98 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2ca35h - LOAD 0 // 2ca3ah - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2ca3eh - LOAD 0 // 2ca43h - DSTORE $544C - IMM 2 - IMM 98 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2ca4bh - LOAD 0 // 2ca50h - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2ca54h - LOAD 0 // 2ca59h - DSTORE $544E - ZERO - IMM 97 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2ca60h - LOAD 0 // 2ca65h - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2ca69h - LOAD 0 // 2ca6eh - DSTORE $5450 - ONE - IMM 97 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2ca76h - LOAD 0 // 2ca7bh - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2ca7fh - LOAD 0 // 2ca84h - DSTORE $5452 - IMM 8 - IMM 120 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2ca8ch - LOAD 0 // 2ca91h - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2ca95h - LOAD 0 // 2ca9ah - DSTORE $5454 - ZERO - IMM 120 - LIBCALL SceneLogic_formAnimName - STORE 0 // 2caa1h - LOAD 0 // 2caa6h - STORE 1 - ZERO - LOAD 1 - LIBCALL SpriteList_addSprites - STORE 0 // 2caaah - LOAD 0 // 2caafh - DSTORE $5456 - IMM 25 // 2cab2h - ZERO - ZERO - DLOAD $543C // 2cab8h - STORE 0 - IMM 5 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2cac0h - LOAD 0 // 2cac5h - DSTORE $545A - ZERO - ONE - ZERO - DLOAD $543E // 2caceh - STORE 0 - IMM 4 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2cad6h - LOAD 0 // 2cadbh - DSTORE $545C - ZERO - IMM 2 // 2cae0h - ZERO - DLOAD $5440 // 2cae4h - STORE 0 - IMM 6 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2caech - LOAD 0 // 2caf1h - DSTORE $545E - IMM 70 // 2caf4h - IMM 7 - IMM 2 - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2cafch - IMM 60 // 2cb01h - ZERO - ZERO - DLOAD $5442 // 2cb07h - STORE 0 - IMM 10 - ZERO - LOAD 0 - LIBCALL start_reversible_sprite_sequence - STORE 0 // 2cb0fh - LOAD 0 // 2cb14h - DSTORE $5460 - ZERO - ONE - ZERO - DLOAD $5444 // 2cb1dh - STORE 0 - IMM 5 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2cb25h - LOAD 0 // 2cb2ah - DSTORE $5462 - ZERO - IMM 2 // 2cb2fh - ZERO - DLOAD $5446 // 2cb33h - STORE 0 - IMM 10 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2cb3bh - LOAD 0 // 2cb40h - DSTORE $5464 - ZERO - ZERO - ZERO - DLOAD $5448 // 2cb49h - STORE 0 - IMM 6 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2cb51h - LOAD 0 // 2cb56h - DSTORE $5466 - IMM 4 // 2cb59h - IMM 10 // 2cb5bh - ZERO - DLOAD $544C // 2cb5fh - STORE 0 - IMM 6 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2cb67h - LOAD 0 // 2cb6ch - DSTORE $546A - IMM 47 // 2cb6fh - IMM 32 // 2cb71h - ZERO - DLOAD $544E // 2cb75h - STORE 0 - IMM 6 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2cb7dh - LOAD 0 // 2cb82h - DSTORE $546C - ZERO - IMM 311 - LIBCALL hotspot_activate - ZERO - DSTORE $547E // 2cb8eh - DLOAD Scene_priorSceneId // 2cb94h - MINUSONE - EQUAL - JMPTRUE @2cba1 // 2cb99h - ZERO - GSTORE 10 // 2cb9bh -@2cba1: - DLOAD Scene_priorSceneId // 2cba1h - IMM $FFFE - EQUAL - JMPTRUE @2cbb4 // 2cba6h - IMM 100 // 2cba8h - DSTORE Player_playerPos_x - IMM 152 // 2cbaeh - DSTORE Player_playerPos_y -@2cbb4: - DLOAD Scene_priorSceneId // 2cbb4h - IMM 112 - EQUAL - JMPTRUE @2cbc9 // 2cbb9h - DLOAD Scene_priorSceneId // 2cbbbh - IMM $FFFE - NEQUAL - JMPTRUE @2cc36 // 2cbc0h - DLOAD $5476 // 2cbc2h - ZERO - EQUAL - JMPTRUE @2cc36 // 2cbc7h -@2cbc9: - IMM 161 // 2cbcfh - DSTORE Player_playerPos_x - IMM 123 // 2cbd5h - DSTORE Player_playerPos_y - IMM 9 // 2cbdbh - DSTORE Player_direction - ZERO - ZERO - ZERO - DLOAD $5450 // 2cbe7h - STORE 0 - ZERO - DSTORE Player_visible // 2cbech - IMM 3 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2cbf3h - LOAD 0 // 2cbf8h - DSTORE $546E - IMM 17 // 2cbfeh - IMM 17 - IMM 17 - LOAD 0 - LIBCALL SequenceList_setAnimRange - ZERO - IMM 71 - LIBCALL hotspot_activate - IMM 159 // 2cc0eh - IMM 84 // 2cc11h - IMM 33 // 2cc13h - IMM 36 // 2cc15h - MINUSONE - IMM 319 - IMM 71 - LIBCALL DynamicHotspots_add - STORE 0 // 2cc20h - LOAD 0 // 2cc25h - DSTORE $5478 - DLOAD Scene_priorSceneId // 2cc28h - IMM 112 - NEQUAL - JMPTRUE @2cc54 // 2cc2dh - CALL scene101_sub1 - JUMP @2cc54 // 2cc34h -@2cc36: - ZERO - ZERO - ZERO - DLOAD $5452 // 2cc3ch - STORE 0 - IMM 6 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2cc44h - LOAD 0 // 2cc49h - DSTORE $5470 - IMM 4 - LOAD 0 - LIBCALL SequenceList_setDepth -@2cc54: - ZERO - IMM 56 // 2cc56h - IMM 55 // 2cc58h - IMM 54 // 2cc5ah - IMM 57 // 2cc5ch - IMM 50 // 2cc5eh - IMM 49 // 2cc60h - LIBCALL quotes_load - STORE 0 // 2cc62h - LOAD 0 // 2cc6ah - DSTORE $5674 - GLOAD 10 // 2cc71h - ZERO - EQUAL - JMPTRUE @2ccb8 // 2cc76h - ZERO - ZERO - IMM 2 // 2cc7ch - MINUSONE - IMM 83 - IMM 101 - LIBCALL form_resource_name - STORE 0 // 2cc86h - LOAD 0 // 2cc8bh - STORE 1 - LOAD 1 - IMM 71 - LIBCALL MadsScene_loadAnimation - IMM 68 // 2cc95h - DSTORE Player_playerPos_x - IMM 140 // 2cc9bh - DSTORE Player_playerPos_y - IMM 4 // 2cca1h - DSTORE Player_direction - ZERO - DSTORE Player_visible // 2cca9h - ZERO - DSTORE Player_stepEnabled // 2ccach - ZERO - DSTORE $5482 // 2ccafh - IMM 30 // 2ccb2h - DSTORE $5484 -@2ccb8: - ZERO - DSTORE $5486 // 2ccb8h - CALL low_rooms_entry_sound - RET -end - - -sub scene101_step - DLOAD $56E4 // 2eb30h - STORE 0 - DLOAD $5486 // 2eb33h - LOAD 0 - EQUAL - JMPTRUE @2eb4e // 2eb37h - LOAD 0 // 2eb39h - DSTORE $5486 - LOAD 0 // 2eb3ch - ZERO - EQUAL - JMPTRUE @2eb44 // 2eb3eh - IMM 39 // 2eb40h - JUMP @2eb46 // 2eb42h -@2eb44: - IMM 11 // 2eb44h -@2eb46: - LIBCALL start_sound -@2eb4e: - DLOAD Scene_abortTimers // 2eb4eh - STORE 0 - JUMP @2eb92 // 2eb51h -@2eb54: - IMM 9 // 2eb54h - LIBCALL start_sound - JUMP @2eba0 // 2eb5eh -@2eb60: - ZERO - GSTORE 10 // 2eb60h - MINUSONE - DSTORE Player_visible // 2eb69h - MINUSONE - DSTORE Player_stepEnabled // 2eb6ch - DLOAD $56E8 // 2eb6fh - STORE 0 - DLOAD $542A // 2eb73h - STORE 2 - ZERO - STORE 1 // 2eb77h - LOAD 2 // 2eb7bh - LOAD 0 - MINUS - STORE 2 - LOAD 2 // 2eb7fh - DSTORE $57D0 - JUMP @2eba0 // 2eb87h -@2eb8a: - CALL scene101_sub1 - JUMP @2eba0 // 2eb8fh -@2eb92: - LOAD 0 // 2eb92h - IMM 70 - MINUS - STORE 0 - LOAD 0 // 2eb95h - STORE 4 - LOAD 4 - ZERO - EQUAL - JMPTRUE @2eb54 - LOAD 0 // 2eb97h - ONE - MINUS - STORE 0 - LOAD 0 // 2eb98h - STORE 4 - LOAD 4 - ZERO - EQUAL - JMPTRUE @2eb60 - LOAD 0 // 2eb9ah - ONE - MINUS - STORE 0 - LOAD 0 // 2eb9bh - STORE 4 - LOAD 4 - ZERO - EQUAL - JMPTRUE @2eb8a - LOAD 0 // 2eb9dh - ONE - MINUS - STORE 0 - LOAD 0 // 2eb9eh - STORE 4 - LOAD 4 - ZERO - EQUAL - JMPTRUE @2eb8a -@2eba0: - ZERO - STORE 0 // 2eba0h - LOAD 0 // 2eba3h - DLOAD Scene_activeAnimation - OR - ZERO - NEQUAL - JMPTRUE @2ebac // 2eba7h - JUMP @2ecf1 // 2eba9h -@2ebac: - DLOAD Animation_currentFrame // 2ebach - IMM 6 - LESS - JMPTRUE @2ebed // 2ebb1h - DLOAD $5482 // 2ebb3h - ZERO - NEQUAL - JMPTRUE @2ebed // 2ebb8h - DLOAD $5482 // 2ebbah - ONE - PLUS - DSTORE $5482 - IMM 49 - LIBCALL quotes_get_pointer - ZERO - IMM 240 // 2ebd2h - ZERO - ZERO - DLOAD $5484 // 2ebd9h - STORE 3 - IMM $1110 - LOAD 3 - IMM 63 - LIBCALL KernelMessageList_add - STORE 0 // 2ebe3h - DLOAD $5484 // 2ebe8h - IMM 14 - PLUS - DSTORE $5484 -@2ebed: - DLOAD Animation_currentFrame // 2ebedh - IMM 7 - LESS - JMPTRUE @2ec2e // 2ebf2h - DLOAD $5482 // 2ebf4h - ONE - NEQUAL - JMPTRUE @2ec2e // 2ebf9h - DLOAD $5482 // 2ebfbh - ONE - PLUS - DSTORE $5482 - IMM 54 - LIBCALL quotes_get_pointer - ZERO - IMM 240 // 2ec13h - ZERO - ZERO - DLOAD $5484 // 2ec1ah - STORE 3 - IMM $1110 - LOAD 3 - IMM 63 - LIBCALL KernelMessageList_add - STORE 0 // 2ec24h - DLOAD $5484 // 2ec29h - IMM 14 - PLUS - DSTORE $5484 -@2ec2e: - DLOAD Animation_currentFrame // 2ec2eh - IMM 10 - LESS - JMPTRUE @2ec6f // 2ec33h - DLOAD $5482 // 2ec35h - IMM 2 - NEQUAL - JMPTRUE @2ec6f // 2ec3ah - DLOAD $5482 // 2ec3ch - ONE - PLUS - DSTORE $5482 - IMM 55 - LIBCALL quotes_get_pointer - ZERO - IMM 240 // 2ec54h - ZERO - ZERO - DLOAD $5484 // 2ec5bh - STORE 3 - IMM $1110 - LOAD 3 - IMM 63 - LIBCALL KernelMessageList_add - STORE 0 // 2ec65h - DLOAD $5484 // 2ec6ah - IMM 14 - PLUS - DSTORE $5484 -@2ec6f: - DLOAD Animation_currentFrame // 2ec6fh - IMM 17 - LESS - JMPTRUE @2ecb0 // 2ec74h - DLOAD $5482 // 2ec76h - IMM 3 - NEQUAL - JMPTRUE @2ecb0 // 2ec7bh - DLOAD $5482 // 2ec7dh - ONE - PLUS - DSTORE $5482 - IMM 56 - LIBCALL quotes_get_pointer - ZERO - IMM 240 // 2ec95h - ZERO - ZERO - DLOAD $5484 // 2ec9ch - STORE 3 - IMM $1110 - LOAD 3 - IMM 63 - LIBCALL KernelMessageList_add - STORE 0 // 2eca6h - DLOAD $5484 // 2ecabh - IMM 14 - PLUS - DSTORE $5484 -@2ecb0: - DLOAD Animation_currentFrame // 2ecb0h - IMM 20 - LESS - JMPTRUE @2ecf1 // 2ecb5h - DLOAD $5482 // 2ecb7h - IMM 4 - NEQUAL - JMPTRUE @2ecf1 // 2ecbch - DLOAD $5482 // 2ecbeh - ONE - PLUS - DSTORE $5482 - IMM 50 - LIBCALL quotes_get_pointer - ZERO - IMM 240 // 2ecd6h - ZERO - ZERO - DLOAD $5484 // 2ecddh - STORE 3 - IMM $1110 - LOAD 3 - IMM 63 - LIBCALL KernelMessageList_add - STORE 0 // 2ece7h - DLOAD $5484 // 2ecech - IMM 14 - PLUS - DSTORE $5484 -@2ecf1: - RET -end - - -sub scene101_preaction - ZERO - IMM 384 // 2edd6h - IMM 3 // 2edd9h - LIBCALL Action_isAction - STORE 0 // 2eddbh - LOAD 0 // 2ede3h - ZERO - EQUAL - JMPTRUE @2eded // 2ede5h - MINUSONE - DSTORE $56F2 // 2ede7h -@2eded: - DLOAD $5476 // 2ededh - ZERO - NEQUAL - JMPTRUE @2edf7 // 2edf2h - JUMP @2eea9 // 2edf4h -@2edf7: - ZERO - IMM 3 // 2edf9h - LIBCALL Action_isAction - STORE 0 // 2edfbh - LOAD 0 // 2ee03h - ZERO - NEQUAL - JMPTRUE @2ee44 // 2ee05h - LOAD 0 // 2ee07h - IMM 71 // 2ee08h - LIBCALL Action_isAction - STORE 0 // 2ee0ah - LOAD 0 // 2ee12h - ZERO - NEQUAL - JMPTRUE @2ee44 // 2ee14h - LOAD 0 // 2ee16h - IMM 8 // 2ee17h - LIBCALL Action_isAction - STORE 0 // 2ee19h - LOAD 0 // 2ee21h - ZERO - NEQUAL - JMPTRUE @2ee44 // 2ee23h - LOAD 0 // 2ee25h - IMM 259 // 2ee26h - LIBCALL Action_isAction - STORE 0 // 2ee29h - LOAD 0 // 2ee31h - ZERO - NEQUAL - JMPTRUE @2ee44 // 2ee33h - LOAD 0 // 2ee35h - IMM 125 // 2ee36h - LIBCALL Action_isAction - STORE 0 // 2ee38h - LOAD 0 // 2ee40h - ZERO - EQUAL - JMPTRUE @2ee4a // 2ee42h -@2ee44: - ZERO - DSTORE $56F2 // 2ee44h -@2ee4a: - DLOAD $56F2 // 2ee4ah - ZERO - EQUAL - JMPTRUE @2eea9 // 2ee4fh - DLOAD Scene_abortTimers // 2ee51h - STORE 0 - LOAD 0 // 2ee54h - ZERO - EQUAL - JMPTRUE @2ee60 // 2ee56h - LOAD 0 // 2ee58h - ONE - MINUS - STORE 0 - LOAD 0 // 2ee59h - STORE 4 - LOAD 4 - ZERO - NEQUAL - JMPTRUE @2ee5e - JUMP @2eee0 // 2ee5bh -@2ee5e: - JUMP @2eea9 // 2ee5eh -@2ee60: - ZERO - DSTORE $56F4 // 2ee62h - ZERO - DSTORE Player_stepEnabled // 2ee65h - DLOAD $546E // 2ee68h - STORE 0 - LOAD 0 - LIBCALL SequenceList_remove - ZERO - ZERO - ONE - DLOAD $5450 // 2ee76h - STORE 0 - IMM 3 - ZERO - LOAD 0 - LIBCALL start_sprite_sequence3 - STORE 0 // 2ee7eh - LOAD 0 // 2ee83h - DSTORE $546E - ONE - ZERO - ZERO - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2ee8ch - DLOAD $546E // 2ee91h - STORE 0 - IMM 17 - ONE - LOAD 0 - LIBCALL SequenceList_setAnimRange - IMM 16 // 2ee9fh - LIBCALL start_sound -@2eea9: - DLOAD $547E // 2eea9h - ZERO - NEQUAL - JMPTRUE @2eeb3 // 2eeaeh - JUMP @2ef9f // 2eeb0h -@2eeb3: - ZERO - IMM 309 // 2eeb5h - LIBCALL Action_isAction - STORE 0 // 2eeb8h - LOAD 0 // 2eec0h - ZERO - EQUAL - JMPTRUE @2eec7 // 2eec2h - JUMP @2ef9f // 2eec4h -@2eec7: - LOAD 0 // 2eec7h - IMM 311 // 2eec8h - LIBCALL Action_isAction - STORE 0 // 2eecbh - LOAD 0 // 2eed3h - ZERO - EQUAL - JMPTRUE @2eeda // 2eed5h - JUMP @2ef9f // 2eed7h -@2eeda: - DLOAD Scene_abortTimers // 2eedah - STORE 0 - JUMP @2ef98 // 2eeddh -@2eee0: - MINUSONE - DSTORE Player_visible // 2eee9h - MINUSONE - DSTORE Player_stepEnabled // 2eeedh - MINUSONE - DSTORE $56F4 // 2eef1h - MINUSONE - IMM 71 - LIBCALL hotspot_activate - DLOAD $5478 // 2eefdh - STORE 0 - LOAD 0 - LIBCALL DynamicHotspots_remove - ZERO - ZERO - ZERO - DLOAD $5452 // 2ef0bh - STORE 0 - IMM 6 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2ef13h - LOAD 0 // 2ef18h - DSTORE $5470 - IMM 4 - LOAD 0 - LIBCALL SequenceList_setDepth - JUMP @2eea9 // 2ef23h -@2ef26: - DLOAD $56F2 // 2ef26h - ZERO - EQUAL - JMPTRUE @2ef9f // 2ef2bh - DLOAD $5472 // 2ef2dh - STORE 0 - LOAD 0 - LIBCALL SequenceList_remove - IMM 24 - LIBCALL object_is_present - STORE 0 // 2ef38h - ONE - STORE 4 // 2ef3dh - LOAD 0 - ONE - EQUAL - JMPFALSE @2ef42 - ZERO - STORE 4 -@2ef42: - LOAD 4 - STORE 0 - LOAD 0 // 2ef45h - IMM 13 - PLUS - STORE 0 - LOAD 0 // 2ef48h - DSTORE $5480 - ZERO - ZERO - ONE - LOAD 0 // 2ef51h - STORE 1 - LOAD 1 // 2ef53h - IMM 2 - MULT - IMM 6 - ZERO - ONE - LIBCALL start_sprite_sequence3 - STORE 0 // 2ef5eh - LOAD 0 // 2ef63h - DSTORE $5472 - ONE - ZERO - ZERO - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2ef6ch - ZERO - DSTORE Player_stepEnabled // 2ef71h - IMM 20 // 2ef77h - LIBCALL start_sound - RET -@2ef82: - MINUSONE - DSTORE Player_stepEnabled // 2ef82h - ZERO - DSTORE $547E // 2ef8ah - ZERO - IMM 311 - LIBCALL hotspot_activate - RET -@2ef98: - LOAD 0 // 2ef98h - ZERO - EQUAL - JMPTRUE @2ef26 // 2ef9ah - LOAD 0 // 2ef9ch - ONE - MINUS - STORE 0 - LOAD 0 // 2ef9dh - STORE 4 - LOAD 4 - ZERO - EQUAL - JMPTRUE @2ef82 -@2ef9f: - RET -end - - -sub scene101_actions - DLOAD $577A // 2efa0h - ZERO - EQUAL - JMPTRUE @2efae // 2efa5h - DLOAD 0 // 2efaah - STORE 0 - JUMP @2f28f -@2efae: - ZERO - IMM 204 // 2efb0h - IMM 13 // 2efb3h - LIBCALL Action_isAction - STORE 0 // 2efb5h - LOAD 0 // 2efbdh - ZERO - EQUAL - JMPTRUE @2efca // 2efbfh - IMM 102 // 2efc1h - DSTORE Scene_nextScene - JUMP @2f6b4 // 2efc7h -@2efca: - ZERO - IMM 71 // 2efcch - IMM 319 // 2efceh - LIBCALL Action_isAction - STORE 0 // 2efd1h - LOAD 0 // 2efd9h - ZERO - NEQUAL - JMPTRUE @2eff9 // 2efdbh - LOAD 0 // 2efddh - IMM 384 // 2efdeh - IMM 3 // 2efe1h - LIBCALL Action_isAction - STORE 0 // 2efe3h - LOAD 0 // 2efebh - ZERO - NEQUAL - JMPTRUE @2eff2 // 2efedh - JUMP @2f072 // 2efefh -@2eff2: - DLOAD $5476 // 2eff2h - ZERO - NEQUAL - JMPTRUE @2f072 // 2eff7h -@2eff9: - DLOAD $5476 // 2eff9h - ZERO - EQUAL - JMPTRUE @2f003 // 2effeh - JUMP @2f120 // 2f000h -@2f003: - DLOAD Scene_abortTimers // 2f003h - STORE 0 - LOAD 0 // 2f006h - ZERO - EQUAL - JMPTRUE @2f016 // 2f008h - LOAD 0 // 2f00ah - ONE - MINUS - STORE 0 - LOAD 0 // 2f00bh - STORE 4 - LOAD 4 - ZERO - EQUAL - JMPTRUE @2f068 - LOAD 0 // 2f00dh - ONE - MINUS - STORE 0 - LOAD 0 // 2f00eh - STORE 4 - LOAD 4 - ZERO - NEQUAL - JMPTRUE @2f013 - JUMP @2f0b4 // 2f010h -@2f013: - JUMP @2f072 // 2f013h -@2f016: - DLOAD $5470 // 2f016h - STORE 0 - LOAD 0 - LIBCALL SequenceList_remove - ZERO - ZERO - ONE - DLOAD $5450 // 2f024h - STORE 0 - IMM 3 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2f02ch - LOAD 0 // 2f031h - DSTORE $546E - IMM 17 - ONE - LOAD 0 - LIBCALL SequenceList_setAnimRange - ONE - DLOAD $546E // 2f041h - STORE 0 - IMM 10 - IMM 2 - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2f04ah - IMM 2 // 2f04fh - DLOAD $546E // 2f051h - STORE 0 - ZERO - ZERO - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2f058h - ZERO - DSTORE Player_stepEnabled // 2f05fh - ZERO - DSTORE Player_visible // 2f062h - DLOAD 0 // 2f065h - STORE 0 - JUMP @2f6b4 -@2f068: - IMM 16 // 2f068h - LIBCALL start_sound -@2f072: - ZERO - IMM 309 // 2f074h - IMM 13 // 2f077h - LIBCALL Action_isAction - STORE 0 // 2f079h - LOAD 0 // 2f081h - ZERO - NEQUAL - JMPTRUE @2f09a // 2f083h - LOAD 0 // 2f085h - IMM 309 // 2f086h - IMM 6 // 2f089h - LIBCALL Action_isAction - STORE 0 // 2f08bh - LOAD 0 // 2f093h - ZERO - NEQUAL - JMPTRUE @2f09a // 2f095h - JUMP @2f1cc // 2f097h -@2f09a: - DLOAD $547E // 2f09ah - ZERO - EQUAL - JMPTRUE @2f0a4 // 2f09fh - JUMP @2f1cc // 2f0a1h -@2f0a4: - DLOAD Scene_abortTimers // 2f0a4h - STORE 0 - LOAD 0 // 2f0a7h - ZERO - EQUAL - JMPTRUE @2f126 // 2f0a9h - LOAD 0 // 2f0abh - ONE - MINUS - STORE 0 - LOAD 0 // 2f0ach - STORE 4 - LOAD 4 - ZERO - NEQUAL - JMPTRUE @2f0b1 - JUMP @2f176 // 2f0aeh -@2f0b1: - JUMP @2f6b4 // 2f0b1h -@2f0b4: - ZERO - ZERO - ZERO - DLOAD $5450 // 2f0bah - STORE 0 - IMM 3 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2f0c2h - LOAD 0 // 2f0c7h - DSTORE $546E - IMM 17 // 2f0cdh - IMM 17 - IMM 17 - LOAD 0 - LIBCALL SequenceList_setAnimRange - MINUSONE - DSTORE Player_stepEnabled // 2f0d7h - ZERO - IMM 71 - LIBCALL hotspot_activate - IMM 159 // 2f0e6h - IMM 84 // 2f0e9h - IMM 33 // 2f0ebh - IMM 36 // 2f0edh - MINUSONE - IMM 319 - IMM 71 - LIBCALL DynamicHotspots_add - STORE 0 // 2f0f8h - LOAD 0 // 2f0fdh - DSTORE $5478 - ZERO - IMM 384 // 2f102h - IMM 3 // 2f105h - LIBCALL Action_isAction - STORE 0 // 2f107h - LOAD 0 // 2f10fh - ZERO - NEQUAL - JMPTRUE @2f116 // 2f111h - JUMP @2f6b4 // 2f113h -@2f116: - ZERO - DSTORE Scene_abortTimers // 2f116h - JUMP @2f072 // 2f11ch -@2f120: - DLOAD 0 // 2f123h - STORE 0 - JUMP @2f28f -@2f126: - IMM 24 - LIBCALL object_is_present - STORE 0 // 2f129h - ONE - STORE 4 // 2f12eh - LOAD 0 - ONE - EQUAL - JMPFALSE @2f133 - ZERO - STORE 4 -@2f133: - LOAD 4 - STORE 0 - LOAD 0 // 2f136h - IMM 13 - PLUS - STORE 0 - LOAD 0 // 2f139h - DSTORE $5480 - ZERO - ZERO - ONE - LOAD 0 // 2f142h - STORE 1 - LOAD 1 // 2f144h - IMM 2 - MULT - IMM 6 - ZERO - ONE - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2f14fh - LOAD 0 // 2f154h - DSTORE $5472 - ONE - ZERO - ZERO - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2f15dh - ZERO - DSTORE Player_stepEnabled // 2f162h - IMM 20 // 2f168h -@2f16a: - LIBCALL start_sound - JUMP @2f6b4 // 2f172h -@2f176: - DLOAD $5472 // 2f176h - STORE 0 - LOAD 0 - LIBCALL SequenceList_remove - ZERO - ZERO - ZERO - DLOAD $5480 // 2f184h - STORE 1 - LOAD 1 // 2f188h - IMM 2 - MULT - IMM 6 - ZERO - ONE - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2f193h - LOAD 0 // 2f198h - DSTORE $5472 - IMM $FFFE // 2f19eh - IMM $FFFE - IMM $FFFE - LOAD 0 - LIBCALL SequenceList_setAnimRange - MINUSONE - DSTORE Player_stepEnabled // 2f1a8h - MINUSONE - DSTORE $547E // 2f1abh - IMM 24 - LIBCALL object_is_present - STORE 0 // 2f1b1h - LOAD 0 // 2f1b6h - ZERO - NEQUAL - JMPTRUE @2f1bd // 2f1b8h - JUMP @2f6b4 // 2f1bah -@2f1bd: - MINUSONE - IMM 311 - LIBCALL hotspot_activate - JUMP @2f6b4 // 2f1c8h -@2f1cc: - ZERO - IMM 311 // 2f1ceh - IMM 4 // 2f1d1h - LIBCALL Action_isAction - STORE 0 // 2f1d3h - LOAD 0 // 2f1dbh - ZERO - NEQUAL - JMPTRUE @2f1f1 // 2f1ddh - LOAD 0 // 2f1dfh - IMM 311 // 2f1e0h - IMM 10 // 2f1e3h - LIBCALL Action_isAction - STORE 0 // 2f1e5h - LOAD 0 // 2f1edh - ZERO - EQUAL - JMPTRUE @2f248 // 2f1efh -@2f1f1: - IMM 24 - LIBCALL object_is_present - STORE 0 // 2f1f4h - LOAD 0 // 2f1f9h - ZERO - EQUAL - JMPTRUE @2f248 // 2f1fbh - IMM 24 - LIBCALL inventory_add - DLOAD $5472 // 2f205h - STORE 0 - LOAD 0 - LIBCALL SequenceList_remove - ZERO - ZERO - ZERO - DLOAD $5456 // 2f213h - STORE 0 - IMM 6 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2f21bh - LOAD 0 // 2f220h - DSTORE $5472 - IMM $FFFE // 2f226h - IMM $FFFE - IMM $FFFE - LOAD 0 - LIBCALL SequenceList_setAnimRange - ZERO - IMM 311 - LIBCALL hotspot_activate - ZERO - IMM $2788 // 2f238h - LIBCALL dialog_picture_show - IMM 22 // 2f243h - JUMP @2f16a // 2f245h -@2f248: - ZERO - IMM 309 // 2f24ah - IMM 3 // 2f24dh - LIBCALL Action_isAction - STORE 0 // 2f24fh - LOAD 0 // 2f257h - ZERO - NEQUAL - JMPTRUE @2f279 // 2f259h - LOAD 0 // 2f25bh - IMM 311 // 2f25ch - IMM 3 // 2f25fh - LIBCALL Action_isAction - STORE 0 // 2f261h - LOAD 0 // 2f269h - ZERO - EQUAL - JMPTRUE @2f2a6 // 2f26bh - LIBCALL object_is_in_inventory - STORE 0 // 2f270h - LOAD 0 // 2f275h - ZERO - NEQUAL - JMPTRUE @2f2a6 // 2f277h -@2f279: - DLOAD $547E // 2f279h - ZERO - EQUAL - JMPTRUE @2f2a0 // 2f27eh - IMM 24 - LIBCALL object_is_present - STORE 0 // 2f283h - LOAD 0 // 2f288h - ZERO - EQUAL - JMPTRUE @2f29a // 2f28ah -@2f28f: -@2f291: - IMM $2790 - ZERO - LIBCALL dialog_show - JUMP @2f6b4 // 2f296h -@2f29a: -@2f29d: - DLOAD 0 // 2f29eh - STORE 0 - JUMP @2f291 -@2f2a0: - DLOAD 0 // 2f2a3h - STORE 0 - JUMP @2f29d -@2f2a6: - ZERO - IMM 309 // 2f2a8h - IMM 6 // 2f2abh - LIBCALL Action_isAction - STORE 0 // 2f2adh - LOAD 0 // 2f2b5h - ZERO - EQUAL - JMPTRUE @2f2c6 // 2f2b7h - DLOAD $547E // 2f2b9h - ZERO - EQUAL - JMPTRUE @2f2c6 // 2f2beh - DLOAD 0 // 2f2c3h - STORE 0 - JUMP @2f28f -@2f2c6: - ZERO - IMM 384 // 2f2c8h - IMM 3 // 2f2cbh - LIBCALL Action_isAction - STORE 0 // 2f2cdh - LOAD 0 // 2f2d5h - ZERO - NEQUAL - JMPTRUE @2f2dc // 2f2d7h - JUMP @2f3d8 // 2f2d9h -@2f2dc: - DLOAD $5476 // 2f2dch - ZERO - NEQUAL - JMPTRUE @2f2e6 // 2f2e1h - JUMP @2f3d8 // 2f2e3h -@2f2e6: - GLOAD 14 // 2f2e6h - ZERO - EQUAL - JMPTRUE @2f2f4 // 2f2ebh - CALL scene101_sub1 - JUMP @2f6b4 // 2f2f1h -@2f2f4: - DLOAD Scene_abortTimers // 2f2f4h - STORE 0 - LOAD 0 // 2f2f7h - ZERO - EQUAL - JMPTRUE @2f30a // 2f2f9h - LOAD 0 // 2f2fbh - ONE - MINUS - STORE 0 - LOAD 0 // 2f2fch - STORE 4 - LOAD 4 - ZERO - EQUAL - JMPTRUE @2f34c - LOAD 0 // 2f2feh - ONE - MINUS - STORE 0 - LOAD 0 // 2f2ffh - STORE 4 - LOAD 4 - ZERO - EQUAL - JMPTRUE @2f37e - LOAD 0 // 2f301h - ONE - MINUS - STORE 0 - LOAD 0 // 2f302h - STORE 4 - LOAD 4 - ZERO - NEQUAL - JMPTRUE @2f307 - JUMP @2f3c2 // 2f304h -@2f307: - JUMP @2f6b4 // 2f307h -@2f30a: - ZERO - DSTORE Player_stepEnabled // 2f30ah - DLOAD $546E // 2f310h - STORE 0 - LOAD 0 - LIBCALL SequenceList_remove - ZERO - ZERO - ONE - DLOAD $5450 // 2f31eh - STORE 0 - IMM 3 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2f326h - LOAD 0 // 2f32bh - DSTORE $546E - IMM 21 - IMM 17 - LOAD 0 - LIBCALL SequenceList_setAnimRange - ONE - DLOAD $546E // 2f33bh - STORE 0 - ZERO - ZERO - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2f342h - IMM 17 // 2f347h - JUMP @2f16a // 2f349h -@2f34c: - ZERO - ZERO - ONE - DLOAD $5450 // 2f352h - STORE 0 - IMM 3 - ZERO - LOAD 0 - LIBCALL start_sprite_sequence3 - STORE 0 // 2f35ah - LOAD 0 // 2f35fh - DSTORE $546E - IMM 2 // 2f362h - ZERO - ZERO - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2f368h - DLOAD $546E // 2f36dh - STORE 0 - IMM 21 - IMM 17 - LOAD 0 - LIBCALL SequenceList_setAnimRange - JUMP @2f6b4 // 2f37bh -@2f37e: - ZERO - ZERO - ZERO - DLOAD $5450 // 2f384h - STORE 0 - IMM 3 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2f38ch - LOAD 0 // 2f391h - DSTORE $546E - IMM 17 // 2f397h - IMM 17 - IMM 17 - LOAD 0 - LIBCALL SequenceList_setAnimRange - ZERO - ZERO - ONE - DLOAD $544A // 2f3a4h - STORE 0 - IMM 3 - ZERO - LOAD 0 - LIBCALL start_cycled_sprite_sequence - STORE 0 // 2f3ach - LOAD 0 // 2f3b1h - DSTORE $5468 - IMM 3 // 2f3b4h - ZERO - ZERO - LOAD 0 - LIBCALL SequenceList_addSubEntry - STORE 0 // 2f3bah - JUMP @2f6b4 // 2f3bfh -@2f3c2: - MINUSONE - DSTORE Player_stepEnabled // 2f3c5h - MINUSONE - GSTORE 14 // 2f3c8h - IMM 112 // 2f3ceh - DSTORE Scene_nextScene - DLOAD 0 // 2f3d4h - STORE 0 - JUMP @2f6b4 -@2f3d8: - ZERO - IMM 71 // 2f3dah - IMM 3 // 2f3dch - LIBCALL Action_isAction - STORE 0 // 2f3deh - LOAD 0 // 2f3e6h - ZERO - EQUAL - JMPTRUE @2f3f0 // 2f3e8h - DLOAD 0 // 2f3edh - STORE 0 - JUMP @2f28f -@2f3f0: - ZERO - IMM 3 // 2f3f2h - LIBCALL Action_isAction - STORE 0 // 2f3f4h - LOAD 0 // 2f3fch - ZERO - NEQUAL - JMPTRUE @2f410 // 2f3feh - LOAD 0 // 2f400h - IMM 259 // 2f401h - LIBCALL Action_isAction - STORE 0 // 2f404h - LOAD 0 // 2f40ch - ZERO - EQUAL - JMPTRUE @2f438 // 2f40eh -@2f410: - ZERO - IMM 142 // 2f412h - LIBCALL Action_isAction - STORE 0 // 2f415h - LOAD 0 // 2f41dh - ZERO - NEQUAL - JMPTRUE @2f431 // 2f41fh - LOAD 0 // 2f421h - IMM 249 // 2f422h - LIBCALL Action_isAction - STORE 0 // 2f425h - LOAD 0 // 2f42dh - ZERO - EQUAL - JMPTRUE @2f438 // 2f42fh -@2f431: - DLOAD 0 // 2f434h - STORE 0 - JUMP @2f28f -@2f438: - ZERO - IMM 168 // 2f43ah - IMM 3 // 2f43dh - LIBCALL Action_isAction - STORE 0 // 2f43fh - LOAD 0 // 2f447h - ZERO - NEQUAL - JMPTRUE @2f481 // 2f449h - LOAD 0 // 2f44bh - IMM 248 // 2f44ch - IMM 3 // 2f44fh - LIBCALL Action_isAction - STORE 0 // 2f451h - LOAD 0 // 2f459h - ZERO - NEQUAL - JMPTRUE @2f481 // 2f45bh - LOAD 0 // 2f45dh - IMM 168 // 2f45eh - IMM 125 // 2f461h - LIBCALL Action_isAction - STORE 0 // 2f463h - LOAD 0 // 2f46bh - ZERO - NEQUAL - JMPTRUE @2f481 // 2f46dh - LOAD 0 // 2f46fh - IMM 248 // 2f470h - IMM 125 // 2f473h - LIBCALL Action_isAction - STORE 0 // 2f475h - LOAD 0 // 2f47dh - ZERO - EQUAL - JMPTRUE @2f488 // 2f47fh -@2f481: - DLOAD 0 // 2f484h - STORE 0 - JUMP @2f28f -@2f488: - ZERO - IMM 145 // 2f48ah - IMM 3 // 2f48dh - LIBCALL Action_isAction - STORE 0 // 2f48fh - LOAD 0 // 2f497h - ZERO - EQUAL - JMPTRUE @2f4a2 // 2f499h - DLOAD 0 // 2f49eh - STORE 0 - JUMP @2f28f -@2f4a2: - ZERO - IMM 225 // 2f4a4h - IMM 3 // 2f4a7h - LIBCALL Action_isAction - STORE 0 // 2f4a9h - LOAD 0 // 2f4b1h - ZERO - NEQUAL - JMPTRUE @2f4c8 // 2f4b3h - LOAD 0 // 2f4b5h - IMM 225 // 2f4b6h - IMM 210 // 2f4b9h - LIBCALL Action_isAction - STORE 0 // 2f4bch - LOAD 0 // 2f4c4h - ZERO - EQUAL - JMPTRUE @2f4ce // 2f4c6h -@2f4c8: - DLOAD 0 // 2f4cbh - STORE 0 - JUMP @2f28f -@2f4ce: - ZERO - IMM 96 // 2f4d0h - IMM 3 // 2f4d2h - LIBCALL Action_isAction - STORE 0 // 2f4d4h - LOAD 0 // 2f4dch - ZERO - EQUAL - JMPTRUE @2f4e6 // 2f4deh - DLOAD 0 // 2f4e3h - STORE 0 - JUMP @2f28f -@2f4e6: - ZERO - IMM 273 // 2f4e8h - IMM 3 // 2f4ebh - LIBCALL Action_isAction - STORE 0 // 2f4edh - LOAD 0 // 2f4f5h - ZERO - EQUAL - JMPTRUE @2f500 // 2f4f7h - DLOAD 0 // 2f4fch - STORE 0 - JUMP @2f28f -@2f500: - ZERO - IMM 123 // 2f502h - IMM 3 // 2f504h - LIBCALL Action_isAction - STORE 0 // 2f506h - LOAD 0 // 2f50eh - ZERO - NEQUAL - JMPTRUE @2f52f // 2f510h - LOAD 0 // 2f512h - IMM 123 // 2f513h - IMM 6 // 2f515h - LIBCALL Action_isAction - STORE 0 // 2f517h - LOAD 0 // 2f51fh - ZERO - EQUAL - JMPTRUE @2f536 // 2f521h - LIBCALL object_is_in_inventory - STORE 0 // 2f526h - LOAD 0 // 2f52bh - ZERO - NEQUAL - JMPTRUE @2f536 // 2f52dh -@2f52f: - DLOAD 0 // 2f532h - STORE 0 - JUMP @2f28f -@2f536: - ZERO - IMM 123 // 2f538h - IMM 6 // 2f53ah - LIBCALL Action_isAction - STORE 0 // 2f53ch - LOAD 0 // 2f544h - ZERO - EQUAL - JMPTRUE @2f54e // 2f546h - DLOAD 0 // 2f54bh - STORE 0 - JUMP @2f28f -@2f54e: - ZERO - IMM 358 // 2f550h - IMM 3 // 2f553h - LIBCALL Action_isAction - STORE 0 // 2f555h - LOAD 0 // 2f55dh - ZERO - EQUAL - JMPTRUE @2f568 // 2f55fh - DLOAD 0 // 2f564h - STORE 0 - JUMP @2f28f -@2f568: - ZERO - IMM 202 // 2f56ah - IMM 3 // 2f56dh - LIBCALL Action_isAction - STORE 0 // 2f56fh - LOAD 0 // 2f577h - ZERO - EQUAL - JMPTRUE @2f582 // 2f579h - DLOAD 0 // 2f57eh - STORE 0 - JUMP @2f28f -@2f582: - ZERO - IMM 99 // 2f584h - IMM 3 // 2f586h - LIBCALL Action_isAction - STORE 0 // 2f588h - LOAD 0 // 2f590h - ZERO - EQUAL - JMPTRUE @2f59a // 2f592h - DLOAD 0 // 2f597h - STORE 0 - JUMP @2f28f -@2f59a: - ZERO - IMM 235 // 2f59ch - IMM 3 // 2f59fh - LIBCALL Action_isAction - STORE 0 // 2f5a1h - LOAD 0 // 2f5a9h - ZERO - EQUAL - JMPTRUE @2f5b4 // 2f5abh - DLOAD 0 // 2f5b0h - STORE 0 - JUMP @2f28f -@2f5b4: - ZERO - IMM 120 // 2f5b6h - IMM 3 // 2f5b8h - LIBCALL Action_isAction - STORE 0 // 2f5bah - LOAD 0 // 2f5c2h - ZERO - EQUAL - JMPTRUE @2f5cc // 2f5c4h - DLOAD 0 // 2f5c9h - STORE 0 - JUMP @2f28f -@2f5cc: - ZERO - IMM 400 // 2f5ceh - IMM 3 // 2f5d1h - LIBCALL Action_isAction - STORE 0 // 2f5d3h - LOAD 0 // 2f5dbh - ZERO - EQUAL - JMPTRUE @2f5e6 // 2f5ddh - DLOAD 0 // 2f5e2h - STORE 0 - JUMP @2f28f -@2f5e6: - ZERO - IMM 312 // 2f5e8h - IMM 3 // 2f5ebh - LIBCALL Action_isAction - STORE 0 // 2f5edh - LOAD 0 // 2f5f5h - ZERO - EQUAL - JMPTRUE @2f600 // 2f5f7h - DLOAD 0 // 2f5fch - STORE 0 - JUMP @2f28f -@2f600: - ZERO - IMM 273 // 2f602h - IMM 4 // 2f605h - LIBCALL Action_isAction - STORE 0 // 2f607h - LOAD 0 // 2f60fh - ZERO - EQUAL - JMPTRUE @2f61a // 2f611h - DLOAD 0 // 2f616h - STORE 0 - JUMP @2f28f -@2f61a: - ZERO - IMM 145 // 2f61ch - IMM 4 // 2f61fh - LIBCALL Action_isAction - STORE 0 // 2f621h - LOAD 0 // 2f629h - ZERO - EQUAL - JMPTRUE @2f634 // 2f62bh - DLOAD 0 // 2f630h - STORE 0 - JUMP @2f28f -@2f634: - ZERO - IMM 99 // 2f636h - IMM 6 // 2f638h - LIBCALL Action_isAction - STORE 0 // 2f63ah - LOAD 0 // 2f642h - ZERO - EQUAL - JMPTRUE @2f64c // 2f644h - DLOAD 0 // 2f649h - STORE 0 - JUMP @2f28f -@2f64c: - ZERO - IMM 96 // 2f64eh - IMM 6 // 2f650h - LIBCALL Action_isAction - STORE 0 // 2f652h - LOAD 0 // 2f65ah - ZERO - EQUAL - JMPTRUE @2f664 // 2f65ch - DLOAD 0 // 2f661h - STORE 0 - JUMP @2f28f -@2f664: - ZERO - IMM 96 // 2f666h - IMM 11 // 2f668h - LIBCALL Action_isAction - STORE 0 // 2f66ah - LOAD 0 // 2f672h - ZERO - EQUAL - JMPTRUE @2f67c // 2f674h - DLOAD 0 // 2f679h - STORE 0 - JUMP @2f28f -@2f67c: - ZERO - IMM 3 // 2f67eh - LIBCALL Action_isAction - STORE 0 // 2f680h - LOAD 0 // 2f688h - ZERO - NEQUAL - JMPTRUE @2f69c // 2f68ah - LOAD 0 // 2f68ch - IMM 274 // 2f68dh - LIBCALL Action_isAction - STORE 0 // 2f690h - LOAD 0 // 2f698h - ZERO - EQUAL - JMPTRUE @2f6ba // 2f69ah -@2f69c: - ZERO - IMM 382 // 2f69eh - LIBCALL Action_isAction - STORE 0 // 2f6a1h - LOAD 0 // 2f6a9h - ZERO - EQUAL - JMPTRUE @2f6ba // 2f6abh - DLOAD 0 // 2f6b0h - STORE 0 - JUMP @2f28f -@2f6b4: - ZERO - DSTORE $5768 // 2f6b4h -@2f6ba: - RET -end diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp index 084641608a..527136c7d4 100644 --- a/devtools/create_project/create_project.cpp +++ b/devtools/create_project/create_project.cpp @@ -105,6 +105,30 @@ struct FSNode { }; typedef std::list<FSNode> FileList; + +typedef StringList TokenList; + +/** + * Takes a given input line and creates a list of tokens out of it. + * + * A token in this context is separated by whitespaces. A special case + * are quotation marks though. A string inside quotation marks is treated + * as single token, even when it contains whitespaces. + * + * Thus for example the input: + * foo bar "1 2 3 4" ScummVM + * will create a list with the following entries: + * "foo", "bar", "1 2 3 4", "ScummVM" + * As you can see the quotation marks will get *removed* too. + * + * You can also use this with non-whitespace by passing another separator + * character (e.g. ','). + * + * @param input The text to be tokenized. + * @param separator The token separator. + * @return A list of tokens. + */ +TokenList tokenize(const std::string &input, char separator = ' '); } // End of anonymous namespace enum ProjectType { @@ -201,6 +225,38 @@ int main(int argc, char *argv[]) { std::cerr << "ERROR: Unsupported version: \"" << msvcVersion << "\" passed to \"--msvc-version\"!\n"; return -1; } + } else if (!strncmp(argv[i], "--enable-engine=", 16)) { + const char *names = &argv[i][16]; + if (!*names) { + std::cerr << "ERROR: Invalid command \"" << argv[i] << "\"\n"; + return -1; + } + + TokenList tokens = tokenize(names, ','); + TokenList::const_iterator token = tokens.begin(); + while (token != tokens.end()) { + std::string name = *token++; + if (!setEngineBuildState(name, setup.engines, true)) { + std::cerr << "ERROR: \"" << name << "\" is not a known engine!\n"; + return -1; + } + } + } else if (!strncmp(argv[i], "--disable-engine=", 17)) { + const char *names = &argv[i][17]; + if (!*names) { + std::cerr << "ERROR: Invalid command \"" << argv[i] << "\"\n"; + return -1; + } + + TokenList tokens = tokenize(names, ','); + TokenList::const_iterator token = tokens.begin(); + while (token != tokens.end()) { + std::string name = *token++; + if (!setEngineBuildState(name, setup.engines, false)) { + std::cerr << "ERROR: \"" << name << "\" is not a known engine!\n"; + return -1; + } + } } else if (!strncmp(argv[i], "--enable-", 9)) { const char *name = &argv[i][9]; if (!*name) { @@ -211,12 +267,9 @@ int main(int argc, char *argv[]) { if (!std::strcmp(name, "all-engines")) { for (EngineDescList::iterator j = setup.engines.begin(); j != setup.engines.end(); ++j) j->enable = true; - } else if (!setEngineBuildState(name, setup.engines, true)) { - // If none found, we'll try the features list - if (!setFeatureBuildState(name, setup.features, true)) { - std::cerr << "ERROR: \"" << name << "\" is neither an engine nor a feature!\n"; - return -1; - } + } else if (!setFeatureBuildState(name, setup.features, true)) { + std::cerr << "ERROR: \"" << name << "\" is not a feature!\n"; + return -1; } } else if (!strncmp(argv[i], "--disable-", 10)) { const char *name = &argv[i][10]; @@ -228,12 +281,9 @@ int main(int argc, char *argv[]) { if (!std::strcmp(name, "all-engines")) { for (EngineDescList::iterator j = setup.engines.begin(); j != setup.engines.end(); ++j) j->enable = false; - } else if (!setEngineBuildState(name, setup.engines, false)) { - // If none found, we'll try the features list - if (!setFeatureBuildState(name, setup.features, false)) { - std::cerr << "ERROR: \"" << name << "\" is neither an engine nor a feature!\n"; - return -1; - } + } else if (!setFeatureBuildState(name, setup.features, false)) { + std::cerr << "ERROR: \"" << name << "\" is not a feature!\n"; + return -1; } } else if (!std::strcmp(argv[i], "--file-prefix")) { if (i + 1 >= argc) { @@ -411,6 +461,12 @@ int main(int argc, char *argv[]) { // 4310 (cast truncates constant value) // used in some engines // + // 4345 (behavior change: an object of POD type constructed with an + // initializer of the form () will be default-initialized) + // used in Common::Array(), and it basically means that newer VS + // versions adhere to the standard in this case. Can be safely + // disabled. + // // 4351 (new behavior: elements of array 'array' will be default initialized) // a change in behavior in Visual Studio 2005. We want the new behavior, so it can be disabled // @@ -460,6 +516,7 @@ int main(int argc, char *argv[]) { globalWarnings.push_back("4244"); globalWarnings.push_back("4250"); globalWarnings.push_back("4310"); + globalWarnings.push_back("4345"); globalWarnings.push_back("4351"); globalWarnings.push_back("4512"); globalWarnings.push_back("4702"); @@ -476,6 +533,8 @@ int main(int argc, char *argv[]) { projectWarnings["agos"].push_back("4511"); + projectWarnings["dreamweb"].push_back("4355"); + projectWarnings["lure"].push_back("4189"); projectWarnings["lure"].push_back("4355"); @@ -611,26 +670,6 @@ void displayHelp(const char *exe) { cout.setf(std::ios_base::right, std::ios_base::adjustfield); } -typedef StringList TokenList; - -/** - * Takes a given input line and creates a list of tokens out of it. - * - * A token in this context is separated by whitespaces. A special case - * are quotation marks though. A string inside quotation marks is treated - * as single token, even when it contains whitespaces. - * - * Thus for example the input: - * foo bar "1 2 3 4" ScummVM - * will create a list with the following entries: - * "foo", "bar", "1 2 3 4", "ScummVM" - * As you can see the quotation marks will get *removed* too. - * - * @param input The text to be tokenized. - * @return A list of tokens. - */ -TokenList tokenize(const std::string &input); - /** * Try to parse a given line and create an engine definition * out of the result. @@ -760,7 +799,7 @@ bool parseEngine(const std::string &line, EngineDesc &engine) { return true; } -TokenList tokenize(const std::string &input) { +TokenList tokenize(const std::string &input, char separator) { TokenList result; std::string::size_type sIdx = input.find_first_not_of(" \t"); @@ -774,12 +813,15 @@ TokenList tokenize(const std::string &input) { ++sIdx; nIdx = input.find_first_of('\"', sIdx); } else { - nIdx = input.find_first_of(' ', sIdx); + nIdx = input.find_first_of(separator, sIdx); } if (nIdx != std::string::npos) { result.push_back(input.substr(sIdx, nIdx - sIdx)); - sIdx = input.find_first_not_of(" \t", nIdx + 1); + if (separator == ' ') + sIdx = input.find_first_not_of(" \t", nIdx + 1); + else + sIdx = input.find_first_not_of(separator, nIdx + 1); } else { result.push_back(input.substr(sIdx)); break; @@ -820,7 +862,6 @@ const Tool s_tools[] = { { "create_hugo", true}, { "create_kyradat", true}, { "create_lure", true}, - { "create_mads", true}, { "create_teenagent", true}, { "create_toon", true}, { "create_translations", true}, diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h index 55e04be4ec..8719143f4a 100644 --- a/devtools/create_project/create_project.h +++ b/devtools/create_project/create_project.h @@ -371,7 +371,7 @@ protected: * * @param output File stream to write to. */ - virtual void writeReferences(const BuildSetup &, std::ofstream &) {}; + virtual void writeReferences(const BuildSetup &, std::ofstream &) {} /** * Get the file extension for project files diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp index 77ac88f85d..eb51ab3da1 100755 --- a/devtools/create_project/xcode.cpp +++ b/devtools/create_project/xcode.cpp @@ -448,7 +448,6 @@ void XCodeProvider::setupResourcesBuildPhase() { properties["sky.cpt"] = FileProperty("file", "", "sky.cpt", "\"<group>\""); properties["drascula.dat"] = FileProperty("file", "", "drascula.dat", "\"<group>\""); properties["hugo.dat"] = FileProperty("file", "", "hugo.dat", "\"<group>\""); - properties["m4.dat"] = FileProperty("file", "", "m4.dat", "\"<group>\""); properties["teenagent.dat"] = FileProperty("file", "", "teenagent.dat", "\"<group>\""); properties["toon.dat"] = FileProperty("file", "", "toon.dat", "\"<group>\""); @@ -481,7 +480,6 @@ void XCodeProvider::setupResourcesBuildPhase() { files_list.push_back("icon4.png"); files_list.push_back("drascula.dat"); files_list.push_back("hugo.dat"); - files_list.push_back("m4.dat"); files_list.push_back("teenagent.dat"); files_list.push_back("toon.dat"); diff --git a/devtools/credits.pl b/devtools/credits.pl index 77f63bf774..2833236e75 100755 --- a/devtools/credits.pl +++ b/devtools/credits.pl @@ -444,684 +444,683 @@ sub add_paragraph { # begin_credits("Credits"); - begin_section("ScummVM Team"); - begin_section("Project Leader"); - begin_persons(); - add_person("Eugene Sandulenko", "sev", ""); - end_persons(); - end_section(); - - begin_section("PR Office"); - begin_persons(); - add_person("Arnaud Boutonné", "Strangerke", "Public Relations Officer, Project Administrator"); - add_person("Eugene Sandulenko", "sev", "Project Leader"); - end_persons(); - end_section(); - - begin_section("Core Team"); - begin_persons(); - add_person("Willem Jan Palenstijn", "wjp", ""); - add_person("Eugene Sandulenko", "sev", ""); - add_person("Johannes Schickel", "LordHoto", ""); - end_persons(); - end_section(); - - begin_section("Retired Project Leaders"); - begin_persons(); - add_person("James Brown", "ender", ""); - add_person("Vincent Hamm", "yaz0r", "ScummVM co-founder, Original Cruise/CinE author"); - add_person("Max Horn", "Fingolfin", ""); - add_person("Ludvig Strigeus", "ludde", "Original ScummVM and SimonVM author"); - end_persons(); - end_section(); - - begin_section("Engine Teams"); - begin_section("SCUMM"); - add_person("Torbjörn Andersson", "eriktorbjorn", ""); - add_person("James Brown", "ender", "(retired)"); - add_person("Jonathan Gray", "khalek", "(retired)"); - add_person("Vincent Hamm", "yaz0r", "(retired)"); - add_person("Max Horn", "Fingolfin", "(retired)"); - add_person("Travis Howell", "Kirben", ""); - add_person("Paweł Kołodziejski", "aquadran", "Codecs, iMUSE, Smush, etc."); - add_person("Gregory Montoir", "cyx", ""); - add_person("Eugene Sandulenko", "sev", "FT INSANE, MM NES, MM C64, game detection, Herc/CGA"); - add_person("Ludvig Strigeus", "ludde", "(retired)"); - end_section(); - - begin_section("HE"); - add_person("Jonathan Gray", "khalek", "(retired)"); - add_person("Travis Howell", "Kirben", ""); - add_person("Gregory Montoir", "cyx", ""); - add_person("Eugene Sandulenko", "sev", ""); - end_section(); - - begin_section("AGI"); - add_person("Stuart George", "darkfiber", ""); - add_person("Matthew Hoops", "clone2727", ""); - add_person("Filippos Karapetis", "[md5]", ""); - add_person("Paweł Kołodziejski", "aquadran", ""); - add_person("Walter van Niftrik", "waltervn", "(retired)"); - add_person("Kari Salminen", "Buddha^", ""); - add_person("Eugene Sandulenko", "sev", ""); - add_person("David Symonds", "dsymonds", "(retired)"); - end_section(); - - begin_section("AGOS"); - add_person("Torbjörn Andersson", "eriktorbjorn", ""); - add_person("Paul Gilbert", "dreammaster", ""); - add_person("Travis Howell", "Kirben", ""); - add_person("Oliver Kiehl", "olki", "(retired)"); - add_person("Ludvig Strigeus", "ludde", "(retired)"); - end_section(); - - begin_section("CGE"); - add_person("Arnaud Boutonné", "Strangerke", ""); - add_person("Paul Gilbert", "dreammaster", ""); - end_section(); - - begin_section("Cine"); - add_person("Vincent Hamm", "yaz0r", "(retired)"); - add_person("Paweł Kołodziejski", "aquadran", ""); - add_person("Gregory Montoir", "cyx", ""); - add_person("Kari Salminen", "Buddha^", ""); - add_person("Eugene Sandulenko", "sev", ""); - end_section(); - - begin_section("CruisE"); - add_person("Paul Gilbert", "dreammaster", ""); - add_person("Vincent Hamm", "yaz0r", "(retired)"); - end_section(); - - begin_section("Draci"); - add_person("Denis Kasak", "dkasak13", ""); - add_person("Robert Špalek", "spalek", ""); - end_section(); - - begin_section("Drascula"); - add_person("Filippos Karapetis", "[md5]", ""); - add_person("Paweł Kołodziejski", "aquadran", ""); - end_section(); - - begin_section("DreamWeb"); - add_person("Vladimir Menshakov", "whoozle", ""); - add_person("Torbjörn Andersson", "eriktorbjorn", ""); - add_person("Bertrand Augereau", "Tramb", ""); - end_section(); - - begin_section("Gob"); - add_person("Torbjörn Andersson", "eriktorbjorn", ""); - add_person("Arnaud Boutonné", "Strangerke", ""); - add_person("Sven Hesse", "DrMcCoy", ""); - add_person("Eugene Sandulenko", "sev", ""); - end_section(); - - begin_section("Groovie"); - add_person("Henry Bush", "spookypeanut", ""); - add_person("Scott Thomas", "ST", ""); - add_person("Jordi Vilalta Prat", "jvprat", ""); - end_section(); - - begin_section("Hugo"); - add_person("Arnaud Boutonné", "Strangerke", ""); - add_person("Oystein Eftevaag", "vinterstum", ""); - add_person("Eugene Sandulenko", "sev", ""); - end_section(); - - begin_section("Kyra"); - add_person("Torbjörn Andersson", "eriktorbjorn", "VQA Player"); - add_person("Oystein Eftevaag", "vinterstum", ""); - add_person("Florian Kagerer", "athrxx", ""); - add_person("Gregory Montoir", "cyx", ""); - add_person("Johannes Schickel", "LordHoto", ""); - end_section(); - - begin_section("Lastexpress"); - add_person("Matthew Hoops", "clone2727", ""); - add_person("Jordi Vilalta Prat", "jvprat", ""); - add_person("Julien Templier", "littleboy", ""); - end_section(); + begin_section("ScummVM Team"); + begin_section("Project Leader"); + begin_persons(); + add_person("Eugene Sandulenko", "sev", ""); + end_persons(); + end_section(); - begin_section("Lure"); - add_person("Paul Gilbert", "dreammaster", ""); - end_section(); - - begin_section("M4"); - add_person("Torbjörn Andersson", "eriktorbjorn", ""); - add_person("Paul Gilbert", "dreammaster", ""); - add_person("Benjamin Haisch", "john_doe", ""); - add_person("Filippos Karapetis", "[md5]", ""); - end_section(); - - begin_section("MADE"); - add_person("Benjamin Haisch", "john_doe", ""); - add_person("Filippos Karapetis", "[md5]", ""); - end_section(); - - begin_section("Mohawk"); - add_person("Bastien Bouclet", "bgk", ""); - add_person("Matthew Hoops", "clone2727", ""); - add_person("Filippos Karapetis", "[md5]", ""); - add_person("Alyssa Milburn", "fuzzie", ""); - add_person("Eugene Sandulenko", "sev", ""); - add_person("David Turner", "digitall", ""); - end_section(); - - begin_section("Parallaction"); - add_person("", "peres", ""); - end_section(); - - begin_section("Queen"); - add_person("David Eriksson", "twogood", "(retired)"); - add_person("Gregory Montoir", "cyx", ""); - add_person("Joost Peters", "joostp", ""); - end_section(); - - begin_section("SAGA"); - add_person("Torbjörn Andersson", "eriktorbjorn", ""); - add_person("Filippos Karapetis", "[md5]", ""); - add_person("Andrew Kurushin", "ajax16384", ""); - add_person("Eugene Sandulenko", "sev", ""); - end_section(); - - begin_section("SCI"); - add_person("Greg Frieger", "_FRG_", ""); - add_person("Paul Gilbert", "dreammaster", ""); - add_person("Max Horn", "Fingolfin", "(retired)"); - add_person("Filippos Karapetis", "[md5]", ""); - add_person("Martin Kiewitz", "m_kiewitz", ""); - add_person("Walter van Niftrik", "waltervn", "(retired)"); - add_person("Willem Jan Palenstijn", "wjp", ""); - add_person("Jordi Vilalta Prat", "jvprat", ""); - add_person("Lars Skovlund", "lskovlun", ""); - end_section(); - - begin_section("Sky"); - add_person("Robert Göffringmann", "lavosspawn", "(retired)"); - add_person("Oliver Kiehl", "olki", "(retired)"); - add_person("Joost Peters", "joostp", ""); - end_section(); - - begin_section("Sword1"); - add_person("Fabio Battaglia", "Hkz", "PSX version support"); - add_person("Thierry Crozat", "criezy", "Mac version support"); - add_person("Robert Göffringmann", "lavosspawn", "(retired)"); - end_section(); - - begin_section("Sword2"); - add_person("Torbjörn Andersson", "eriktorbjorn", ""); - add_person("Fabio Battaglia", "Hkz", "PSX version support"); - add_person("Jonathan Gray", "khalek", "(retired)"); - end_section(); - - begin_section("Sword25"); - add_person("Eugene Sandulenko", "sev", ""); - add_person("Filippos Karapetis", "[md5]", ""); - add_person("Max Horn", "Fingolfin", "(retired)"); - add_person("Paul Gilbert", "dreammaster", ""); - add_person("Torbjörn Andersson", "eriktorbjorn", ""); - end_section(); - - begin_section("TeenAgent"); - add_person("Robert Megone", "sanguine", "Help with callback rewriting"); - add_person("Vladimir Menshakov", "whoozle", ""); - end_section(); - - - begin_section("Tinsel"); - add_person("Torbjörn Andersson", "eriktorbjorn", ""); - add_person("Fabio Battaglia", "Hkz", "PSX version support"); - add_person("Paul Gilbert", "dreammaster", ""); - add_person("Sven Hesse", "DrMcCoy", ""); - add_person("Max Horn", "Fingolfin", "(retired)"); - add_person("Filippos Karapetis", "[md5]", ""); - add_person("Joost Peters", "joostp", ""); - end_section(); - - begin_section("Toon"); - add_person("Sylvain Dupont", "SylvainTV", ""); - end_section(); - - begin_section("Touché"); - add_person("Gregory Montoir", "cyx", ""); - end_section(); - - begin_section("TsAGE"); - add_person("Paul Gilbert", "dreammaster", ""); - add_person("Arnaud Boutonné", "Strangerke", ""); - end_section(); - - begin_section("Tucker"); - add_person("Gregory Montoir", "cyx", ""); - end_section(); - - end_section(); - - - begin_section("Backend Teams"); - begin_section("Android"); - add_person("Andre Heider", "dhewg", ""); - add_person("Angus Lees", "Gus", ""); - end_section(); - - begin_section("BADA"); - add_person("Chris Warren-Smith", "", ""); - end_section(); - - begin_section("Dreamcast"); - add_person("Marcus Comstedt", "", ""); - end_section(); - - begin_section("GPH Devices (GP2X, GP2XWiz & Caanoo)"); - add_person("John Willis", "DJWillis", ""); - end_section(); - - begin_section("iPhone"); - add_person("Oystein Eftevaag", "vinterstum", ""); - end_section(); - - begin_section("LinuxMoto"); - add_person("Lubomyr Lisen", "", ""); - end_section(); - - begin_section("Maemo"); - add_person("Frantisek Dufka", "fanoush", "(retired)"); - add_person("Tarek Soliman", "tsoliman", ""); - end_section(); - - begin_section("Nintendo 64"); - add_person("Fabio Battaglia", "Hkz", ""); - end_section(); - - begin_section("Nintendo DS"); - add_person("Neil Millstone", "agent-q", ""); - add_person("Bertrand Augereau", "Tramb", "HQ software scaler"); - end_section(); - - begin_section("OpenPandora"); - add_person("John Willis", "DJWillis", ""); - end_section(); - - begin_section("PocketPC / WinCE"); - add_person("Nicolas Bacca", "arisme", "(retired)"); - add_person("Ismail Khatib", "CeRiAl", ""); - add_person("Kostas Nakos", "Jubanka", "(retired)"); - end_section(); - - begin_section("PlayStation 2"); - add_person("Robert Göffringmann", "lavosspawn", "(retired)"); - add_person("Max Lingua", "sunmax", ""); - end_section(); - - begin_section("PSP (PlayStation Portable)"); - add_person("Joost Peters", "joostp", ""); - add_person("Yotam Barnoy", "bluddy", ""); - end_section(); - - begin_section("SDL (Win/Linux/OS X/etc.)"); - add_person("Max Horn", "Fingolfin", "(retired)"); - add_person("Eugene Sandulenko", "sev", "Asm routines, GFX layers"); - end_section(); - - begin_section("SymbianOS"); - add_person("Jurgen Braam", "SumthinWicked", ""); - add_person("Lars Persson", "AnotherGuest", ""); - end_section(); - - begin_section("WebOS"); - add_person("Klaus Reimer", "kayahr", ""); - end_section(); - - begin_section("Wii"); - add_person("Andre Heider", "dhewg", ""); - end_section(); - - end_section(); - - begin_section("Other subsystems"); - begin_section("Infrastructure"); - add_person("Max Horn", "Fingolfin", "Backend & Engine APIs, file API, sound mixer, audiostreams, data structures, etc. (retired)"); - add_person("Eugene Sandulenko", "sev", ""); - add_person("Johannes Schickel", "LordHoto", ""); - end_section(); - - begin_section("GUI"); - add_person("Vicent Marti", "tanoku", ""); - add_person("Eugene Sandulenko", "sev", ""); - add_person("Johannes Schickel", "LordHoto", ""); - end_section(); - - begin_section("Miscellaneous"); - add_person("David Corrales-Lopez", "david_corrales", "Filesystem access improvements (GSoC 2007 task) (retired)"); - add_person("Jerome Fisher", "KingGuppy", "MT-32 emulator"); - add_person("Benjamin Haisch", "john_doe", "Heavily improved de-/encoder for DXA videos"); - add_person("Jochen Hoenicke", "hoenicke", "Speaker & PCjr sound support, AdLib work (retired)"); - add_person("Chris Page", "cp88", "Return to launcher, savestate improvements, leak fixes, ... (GSoC 2008 task) (retired)"); - add_person("Robin Watts", "robinwatts", "ARM assembly routines for nice speedups on several ports; improvements to the sound mixer"); - end_section(); - end_section(); - - begin_section("Website (code)"); - begin_persons(); - add_person("Fredrik Wendel", "", "(retired)"); - end_persons(); - end_section(); - - begin_section("Website (maintenance)"); - begin_persons(); - add_person("James Brown", "Ender", "IRC Logs maintainer"); - add_person("Thierry Crozat", "criezy", "Wiki maintainer"); - add_person("Andre Heider", "dhewg", "Buildbot maintainer"); - add_person("Joost Peters", "JoostP", "Doxygen Project Documentation maintainer"); - add_person("Jordi Vilalta Prat", "jvprat", "Wiki maintainer"); - add_person("Eugene Sandulenko", "sev", "Forum, IRC channel, Screen Shots and Mailing list maintainer"); - add_person("John Willis", "DJWillis", ""); - end_persons(); - end_section(); - - begin_section("Website (content)"); - add_paragraph("All active team members"); - end_section(); - - begin_section("Documentation"); - begin_persons(); - add_person("Thierry Crozat", "criezy", "Numerous contributions to documentation"); - add_person("Joachim Eberhard", "joachimeberhard", "Numerous contributions to documentation (retired)"); - add_person("Matthew Hoops", "clone2727", "Wiki editor"); - end_persons(); - end_section(); - - begin_section("Retired Team Members"); - begin_persons(); - add_person("Chris Apers", "chrilith ", "Former PalmOS porter"); - add_person("Ralph Brorsen", "painelf", "Help with GUI implementation"); - add_person("Jamieson Christian", "jamieson630", "iMUSE, MIDI, all things musical"); - add_person("Felix Jakschitsch", "yot", "Zak256 reverse engineering"); - add_person("Mutwin Kraus", "mutle", "Original MacOS porter"); - add_person("Peter Moraliyski", "ph0x", "Port: GP32"); - add_person("Jeremy Newman", "laxdragon", "Former webmaster"); - add_person("Lionel Ulmer", "bbrox", "Port: X11"); - add_person("Won Star", "wonst719", "Former GP32 porter"); - end_persons(); - end_section(); - end_section(); - - - begin_section("Other contributions"); - - begin_section("Packages"); - begin_section("AmigaOS 4"); - add_person("Hans-Jörg Frieden", "", "(retired)"); - add_person("Hubert Maier", "Raziel_AOne", ""); - add_person("Juha Niemimäki", "", "(retired)"); - end_section(); - - begin_section("Atari/FreeMiNT"); - add_person("Keith Scroggins", "KeithS", ""); - end_section(); - - begin_section("BeOS"); - add_person("Stefan Parviainen", "", ""); - add_person("Luc Schrijvers", "Begasus", ""); - end_section(); - - begin_section("Debian GNU/Linux"); - add_person("Tore Anderson", "tore", "(retired)"); - add_person("David Weinehall", "tao", ""); - end_section(); - - begin_section("Fedora / RedHat"); - add_person("Willem Jan Palenstijn", "wjp", ""); - end_section(); - - begin_section("Mac OS X"); - add_person("Max Horn", "Fingolfin", "(retired)"); - add_person("Oystein Eftevaag", "vinterstum", ""); - end_section(); - - begin_section("Mandriva"); - add_person("Dominik Scherer", "", "(retired)"); - end_section(); - - begin_section("MorphOS"); - add_person("Fabien Coeurjoly", "fab1", ""); - add_person("Rüdiger Hanke", "", "(retired)"); - end_section(); - - begin_section("OS/2"); - add_person("Paul Smedley", "Creeping", ""); - end_section(); - - begin_section("SlackWare"); - add_person("Robert Kelsen", "", ""); - end_section(); - - begin_section("Solaris x86"); - add_person("Laurent Blume", "laurent", ""); - end_section(); - - begin_section("Solaris SPARC"); - add_person("Markus Strangl", "WooShell", ""); - end_section(); - - begin_section("Win32"); - add_person("Travis Howell", "Kirben", ""); - end_section(); - - begin_section("Win64"); - add_person("Chris Gray", "Psychoid", "(retired)"); - add_person("Johannes Schickel", "LordHoto", ""); - end_section(); - end_section(); + begin_section("PR Office"); + begin_persons(); + add_person("Arnaud Boutonné", "Strangerke", "Public Relations Officer, Project Administrator"); + add_person("Eugene Sandulenko", "sev", "Project Leader"); + end_persons(); + end_section(); - begin_section("Translations"); - begin_persons(); - add_person("Thierry Crozat", "criezy", "Translation Lead"); - end_persons(); - begin_section("Catalan"); - add_person("Jordi Vilalta Prat", "jvprat", ""); + begin_section("Core Team"); + begin_persons(); + add_person("Willem Jan Palenstijn", "wjp", ""); + add_person("Eugene Sandulenko", "sev", ""); + add_person("Johannes Schickel", "LordHoto", ""); + end_persons(); end_section(); - begin_section("Czech"); - add_person("Zbynìk Schwarz", "", ""); + + begin_section("Retired Project Leaders"); + begin_persons(); + add_person("James Brown", "ender", ""); + add_person("Vincent Hamm", "yaz0r", "ScummVM co-founder, Original Cruise/CinE author"); + add_person("Max Horn", "Fingolfin", ""); + add_person("Ludvig Strigeus", "ludde", "Original ScummVM and SimonVM author"); + end_persons(); end_section(); - begin_section("Danish"); - add_person("Steffen Nyeland", "", ""); + + begin_section("Engine Teams"); + begin_section("SCUMM"); + add_person("Torbjörn Andersson", "eriktorbjorn", ""); + add_person("James Brown", "ender", "(retired)"); + add_person("Jonathan Gray", "khalek", "(retired)"); + add_person("Vincent Hamm", "yaz0r", "(retired)"); + add_person("Max Horn", "Fingolfin", "(retired)"); + add_person("Travis Howell", "Kirben", ""); + add_person("Paweł Kołodziejski", "aquadran", "Codecs, iMUSE, Smush, etc."); + add_person("Gregory Montoir", "cyx", ""); + add_person("Eugene Sandulenko", "sev", "FT INSANE, MM NES, MM C64, game detection, Herc/CGA"); + add_person("Ludvig Strigeus", "ludde", "(retired)"); + end_section(); + + begin_section("HE"); + add_person("Jonathan Gray", "khalek", "(retired)"); + add_person("Travis Howell", "Kirben", ""); + add_person("Gregory Montoir", "cyx", ""); + add_person("Eugene Sandulenko", "sev", ""); + end_section(); + + begin_section("AGI"); + add_person("Stuart George", "darkfiber", ""); + add_person("Matthew Hoops", "clone2727", ""); + add_person("Filippos Karapetis", "[md5]", ""); + add_person("Paweł Kołodziejski", "aquadran", ""); + add_person("Walter van Niftrik", "waltervn", "(retired)"); + add_person("Kari Salminen", "Buddha^", ""); + add_person("Eugene Sandulenko", "sev", ""); + add_person("David Symonds", "dsymonds", "(retired)"); + end_section(); + + begin_section("AGOS"); + add_person("Torbjörn Andersson", "eriktorbjorn", ""); + add_person("Paul Gilbert", "dreammaster", ""); + add_person("Travis Howell", "Kirben", ""); + add_person("Oliver Kiehl", "olki", "(retired)"); + add_person("Ludvig Strigeus", "ludde", "(retired)"); + end_section(); + + begin_section("CGE"); + add_person("Arnaud Boutonné", "Strangerke", ""); + add_person("Paul Gilbert", "dreammaster", ""); + end_section(); + + begin_section("Cine"); + add_person("Vincent Hamm", "yaz0r", "(retired)"); + add_person("Paweł Kołodziejski", "aquadran", ""); + add_person("Gregory Montoir", "cyx", ""); + add_person("Kari Salminen", "Buddha^", ""); + add_person("Eugene Sandulenko", "sev", ""); + end_section(); + + begin_section("Composer"); + add_person("Alyssa Milburn", "fuzzie", ""); + end_section(); + + begin_section("CruisE"); + add_person("Paul Gilbert", "dreammaster", ""); + add_person("Vincent Hamm", "yaz0r", "(retired)"); + end_section(); + + begin_section("Draci"); + add_person("Denis Kasak", "dkasak13", ""); + add_person("Robert Špalek", "spalek", ""); + end_section(); + + begin_section("Drascula"); + add_person("Filippos Karapetis", "[md5]", ""); + add_person("Paweł Kołodziejski", "aquadran", ""); + end_section(); + + begin_section("DreamWeb"); + add_person("Torbjörn Andersson", "eriktorbjorn", ""); + add_person("Bertrand Augereau", "Tramb", ""); + add_person("Vladimir Menshakov", "whoozle", "(retired)"); + end_section(); + + begin_section("Gob"); + add_person("Torbjörn Andersson", "eriktorbjorn", ""); + add_person("Arnaud Boutonné", "Strangerke", ""); + add_person("Sven Hesse", "DrMcCoy", ""); + add_person("Eugene Sandulenko", "sev", ""); + end_section(); + + begin_section("Groovie"); + add_person("Henry Bush", "spookypeanut", ""); + add_person("Scott Thomas", "ST", ""); + add_person("Jordi Vilalta Prat", "jvprat", ""); + end_section(); + + begin_section("Hugo"); + add_person("Arnaud Boutonné", "Strangerke", ""); + add_person("Oystein Eftevaag", "vinterstum", ""); + add_person("Eugene Sandulenko", "sev", ""); + end_section(); + + begin_section("Kyra"); + add_person("Torbjörn Andersson", "eriktorbjorn", "VQA Player"); + add_person("Oystein Eftevaag", "vinterstum", ""); + add_person("Florian Kagerer", "athrxx", ""); + add_person("Gregory Montoir", "cyx", ""); + add_person("Johannes Schickel", "LordHoto", ""); + end_section(); + + begin_section("Lastexpress"); + add_person("Matthew Hoops", "clone2727", ""); + add_person("Jordi Vilalta Prat", "jvprat", ""); + add_person("Julien Templier", "littleboy", ""); + end_section(); + + begin_section("Lure"); + add_person("Paul Gilbert", "dreammaster", ""); + end_section(); + + begin_section("MADE"); + add_person("Benjamin Haisch", "john_doe", ""); + add_person("Filippos Karapetis", "[md5]", ""); + end_section(); + + begin_section("Mohawk"); + add_person("Bastien Bouclet", "bgk", ""); + add_person("Matthew Hoops", "clone2727", ""); + add_person("Filippos Karapetis", "[md5]", ""); + add_person("Alyssa Milburn", "fuzzie", ""); + add_person("Eugene Sandulenko", "sev", ""); + add_person("David Turner", "digitall", ""); + end_section(); + + begin_section("Parallaction"); + add_person("", "peres", ""); + end_section(); + + begin_section("Queen"); + add_person("David Eriksson", "twogood", "(retired)"); + add_person("Gregory Montoir", "cyx", ""); + add_person("Joost Peters", "joostp", ""); + end_section(); + + begin_section("SAGA"); + add_person("Torbjörn Andersson", "eriktorbjorn", ""); + add_person("Filippos Karapetis", "[md5]", ""); + add_person("Andrew Kurushin", "ajax16384", ""); + add_person("Eugene Sandulenko", "sev", ""); + end_section(); + + begin_section("SCI"); + add_person("Greg Frieger", "_FRG_", ""); + add_person("Paul Gilbert", "dreammaster", ""); + add_person("Max Horn", "Fingolfin", "(retired)"); + add_person("Filippos Karapetis", "[md5]", ""); + add_person("Martin Kiewitz", "m_kiewitz", ""); + add_person("Walter van Niftrik", "waltervn", "(retired)"); + add_person("Willem Jan Palenstijn", "wjp", ""); + add_person("Jordi Vilalta Prat", "jvprat", ""); + add_person("Lars Skovlund", "lskovlun", ""); + end_section(); + + begin_section("Sky"); + add_person("Robert Göffringmann", "lavosspawn", "(retired)"); + add_person("Oliver Kiehl", "olki", "(retired)"); + add_person("Joost Peters", "joostp", ""); + end_section(); + + begin_section("Sword1"); + add_person("Fabio Battaglia", "Hkz", "PSX version support"); + add_person("Thierry Crozat", "criezy", "Mac version support"); + add_person("Robert Göffringmann", "lavosspawn", "(retired)"); + end_section(); + + begin_section("Sword2"); + add_person("Torbjörn Andersson", "eriktorbjorn", ""); + add_person("Fabio Battaglia", "Hkz", "PSX version support"); + add_person("Jonathan Gray", "khalek", "(retired)"); + end_section(); + + begin_section("Sword25"); + add_person("Torbjörn Andersson", "eriktorbjorn", ""); + add_person("Paul Gilbert", "dreammaster", ""); + add_person("Max Horn", "Fingolfin", "(retired)"); + add_person("Filippos Karapetis", "[md5]", ""); + add_person("Eugene Sandulenko", "sev", ""); + end_section(); + + begin_section("TeenAgent"); + add_person("Robert Megone", "sanguine", "Help with callback rewriting"); + add_person("Vladimir Menshakov", "whoozle", "(retired)"); + end_section(); + + begin_section("Tinsel"); + add_person("Torbjörn Andersson", "eriktorbjorn", ""); + add_person("Fabio Battaglia", "Hkz", "PSX version support"); + add_person("Paul Gilbert", "dreammaster", ""); + add_person("Sven Hesse", "DrMcCoy", ""); + add_person("Max Horn", "Fingolfin", "(retired)"); + add_person("Filippos Karapetis", "[md5]", ""); + add_person("Joost Peters", "joostp", ""); + end_section(); + + begin_section("Toon"); + add_person("Sylvain Dupont", "SylvainTV", ""); + end_section(); + + begin_section("Touché"); + add_person("Gregory Montoir", "cyx", ""); + end_section(); + + begin_section("TsAGE"); + add_person("Arnaud Boutonné", "Strangerke", ""); + add_person("Paul Gilbert", "dreammaster", ""); + end_section(); + + begin_section("Tucker"); + add_person("Gregory Montoir", "cyx", ""); + end_section(); + end_section(); - begin_section("French"); - add_person("Thierry Crozat", "criezy", ""); + + + begin_section("Backend Teams"); + begin_section("Android"); + add_person("Andre Heider", "dhewg", ""); + add_person("Angus Lees", "Gus", ""); + end_section(); + + begin_section("BADA"); + add_person("Chris Warren-Smith", "", ""); + end_section(); + + begin_section("Dreamcast"); + add_person("Marcus Comstedt", "", ""); + end_section(); + + begin_section("GPH Devices (GP2X, GP2XWiz & Caanoo)"); + add_person("John Willis", "DJWillis", ""); + end_section(); + + begin_section("iPhone"); + add_person("Oystein Eftevaag", "vinterstum", ""); + end_section(); + + begin_section("LinuxMoto"); + add_person("Lubomyr Lisen", "", ""); + end_section(); + + begin_section("Maemo"); + add_person("Frantisek Dufka", "fanoush", "(retired)"); + add_person("Tarek Soliman", "tsoliman", ""); + end_section(); + + begin_section("Nintendo 64"); + add_person("Fabio Battaglia", "Hkz", ""); + end_section(); + + begin_section("Nintendo DS"); + add_person("Bertrand Augereau", "Tramb", "HQ software scaler"); + add_person("Neil Millstone", "agent-q", ""); + end_section(); + + begin_section("OpenPandora"); + add_person("John Willis", "DJWillis", ""); + end_section(); + + begin_section("PocketPC / WinCE"); + add_person("Nicolas Bacca", "arisme", "(retired)"); + add_person("Ismail Khatib", "CeRiAl", ""); + add_person("Kostas Nakos", "Jubanka", "(retired)"); + end_section(); + + begin_section("PlayStation 2"); + add_person("Robert Göffringmann", "lavosspawn", "(retired)"); + add_person("Max Lingua", "sunmax", ""); + end_section(); + + begin_section("PSP (PlayStation Portable)"); + add_person("Yotam Barnoy", "bluddy", ""); + add_person("Joost Peters", "joostp", ""); + end_section(); + + begin_section("SDL (Win/Linux/OS X/etc.)"); + add_person("Max Horn", "Fingolfin", "(retired)"); + add_person("Eugene Sandulenko", "sev", "Asm routines, GFX layers"); + end_section(); + + begin_section("SymbianOS"); + add_person("Jurgen Braam", "SumthinWicked", ""); + add_person("Lars Persson", "AnotherGuest", ""); + end_section(); + + begin_section("WebOS"); + add_person("Klaus Reimer", "kayahr", ""); + end_section(); + + begin_section("Wii"); + add_person("Andre Heider", "dhewg", ""); + end_section(); + end_section(); - begin_section("German"); - add_person("Simon Sawatzki", "SimSaw", ""); - add_person("Lothar Serra Mari", "Lothar93", ""); + + begin_section("Other subsystems"); + begin_section("Infrastructure"); + add_person("Max Horn", "Fingolfin", "Backend & Engine APIs, file API, sound mixer, audiostreams, data structures, etc. (retired)"); + add_person("Eugene Sandulenko", "sev", ""); + add_person("Johannes Schickel", "LordHoto", ""); + end_section(); + + begin_section("GUI"); + add_person("Vicent Marti", "tanoku", ""); + add_person("Eugene Sandulenko", "sev", ""); + add_person("Johannes Schickel", "LordHoto", ""); + end_section(); + + begin_section("Miscellaneous"); + add_person("David Corrales-Lopez", "david_corrales", "Filesystem access improvements (GSoC 2007 task) (retired)"); + add_person("Jerome Fisher", "KingGuppy", "MT-32 emulator"); + add_person("Benjamin Haisch", "john_doe", "Heavily improved de-/encoder for DXA videos"); + add_person("Jochen Hoenicke", "hoenicke", "Speaker & PCjr sound support, AdLib work (retired)"); + add_person("Chris Page", "cp88", "Return to launcher, savestate improvements, leak fixes, ... (GSoC 2008 task) (retired)"); + add_person("Robin Watts", "robinwatts", "ARM assembly routines for nice speedups on several ports; improvements to the sound mixer"); + end_section(); end_section(); - begin_section("Hungarian"); - add_person("Alex Bevilacqua", "", ""); - add_person("George Kormendi", "GoodOldGeorg", ""); + + begin_section("Website (code)"); + begin_persons(); + add_person("Fredrik Wendel", "", "(retired)"); + end_persons(); end_section(); - begin_section("Italian"); - add_person("Matteo Angelino", "Maff", ""); + + begin_section("Website (maintenance)"); + begin_persons(); + add_person("James Brown", "Ender", "IRC Logs maintainer"); + add_person("Thierry Crozat", "criezy", "Wiki maintainer"); + add_person("Andre Heider", "dhewg", "Buildbot maintainer"); + add_person("Joost Peters", "JoostP", "Doxygen Project Documentation maintainer"); + add_person("Jordi Vilalta Prat", "jvprat", "Wiki maintainer"); + add_person("Eugene Sandulenko", "sev", "Forum, IRC channel, Screen Shots and Mailing list maintainer"); + add_person("John Willis", "DJWillis", ""); + end_persons(); end_section(); - begin_section("Norwegian (Bokmål)"); - add_person("Einar Johan T. Sømåen", "", ""); + + begin_section("Website (content)"); + add_paragraph("All active team members"); end_section(); - begin_section("Norwegian (Nynorsk)"); - add_person("Einar Johan T. Sømåen", "", ""); + + begin_section("Documentation"); + begin_persons(); + add_person("Thierry Crozat", "criezy", "Numerous contributions to documentation"); + add_person("Joachim Eberhard", "joachimeberhard", "Numerous contributions to documentation (retired)"); + add_person("Matthew Hoops", "clone2727", "Wiki editor"); + end_persons(); end_section(); - begin_section("Polish"); - add_person("GrajPoPolsku.pl Team", "", ""); + + begin_section("Retired Team Members"); + begin_persons(); + add_person("Chris Apers", "chrilith ", "Former PalmOS porter"); + add_person("Ralph Brorsen", "painelf", "Help with GUI implementation"); + add_person("Jamieson Christian", "jamieson630", "iMUSE, MIDI, all things musical"); + add_person("Felix Jakschitsch", "yot", "Zak256 reverse engineering"); + add_person("Mutwin Kraus", "mutle", "Original MacOS porter"); + add_person("Peter Moraliyski", "ph0x", "Port: GP32"); + add_person("Jeremy Newman", "laxdragon", "Former webmaster"); + add_person("Lionel Ulmer", "bbrox", "Port: X11"); + add_person("Won Star", "wonst719", "Former GP32 porter"); + end_persons(); end_section(); - begin_section("Brazilian Portuguese"); - add_person("ScummBR Team", "", ""); + end_section(); + + + begin_section("Other contributions"); + + begin_section("Packages"); + begin_section("AmigaOS 4"); + add_person("Hans-Jörg Frieden", "", "(retired)"); + add_person("Hubert Maier", "Raziel_AOne", ""); + add_person("Juha Niemimäki", "", "(retired)"); + end_section(); + + begin_section("Atari/FreeMiNT"); + add_person("Keith Scroggins", "KeithS", ""); + end_section(); + + begin_section("BeOS"); + add_person("Stefan Parviainen", "", ""); + add_person("Luc Schrijvers", "Begasus", ""); + end_section(); + + begin_section("Debian GNU/Linux"); + add_person("Tore Anderson", "tore", "(retired)"); + add_person("David Weinehall", "tao", ""); + end_section(); + + begin_section("Fedora / RedHat"); + add_person("Willem Jan Palenstijn", "wjp", ""); + end_section(); + + begin_section("Mac OS X"); + add_person("Max Horn", "Fingolfin", "(retired)"); + add_person("Oystein Eftevaag", "vinterstum", ""); + end_section(); + + begin_section("Mandriva"); + add_person("Dominik Scherer", "", "(retired)"); + end_section(); + + begin_section("MorphOS"); + add_person("Fabien Coeurjoly", "fab1", ""); + add_person("Rüdiger Hanke", "", "(retired)"); + end_section(); + + begin_section("OS/2"); + add_person("Paul Smedley", "Creeping", ""); + end_section(); + + begin_section("SlackWare"); + add_person("Robert Kelsen", "", ""); + end_section(); + + begin_section("Solaris x86"); + add_person("Laurent Blume", "laurent", ""); + end_section(); + + begin_section("Solaris SPARC"); + add_person("Markus Strangl", "WooShell", ""); + end_section(); + + begin_section("Win32"); + add_person("Travis Howell", "Kirben", ""); + end_section(); + + begin_section("Win64"); + add_person("Chris Gray", "Psychoid", "(retired)"); + add_person("Johannes Schickel", "LordHoto", ""); + end_section(); end_section(); - begin_section("Russian"); - add_person("Eugene Sandulenko", "sev", ""); + + begin_section("Translations"); + begin_persons(); + add_person("Thierry Crozat", "criezy", "Translation Lead"); + end_persons(); + begin_section("Catalan"); + add_person("Jordi Vilalta Prat", "jvprat", ""); + end_section(); + begin_section("Czech"); + add_person("Zbynìk Schwarz", "", ""); + end_section(); + begin_section("Danish"); + add_person("Steffen Nyeland", "", ""); + end_section(); + begin_section("French"); + add_person("Thierry Crozat", "criezy", ""); + end_section(); + begin_section("German"); + add_person("Simon Sawatzki", "SimSaw", ""); + add_person("Lothar Serra Mari", "Lothar93", ""); + end_section(); + begin_section("Hungarian"); + add_person("Alex Bevilacqua", "", ""); + add_person("George Kormendi", "GoodOldGeorg", ""); + end_section(); + begin_section("Italian"); + add_person("Matteo Angelino", "Maff", ""); + end_section(); + begin_section("Norwegian (Bokmål)"); + add_person("Einar Johan T. Sømåen", "", ""); + end_section(); + begin_section("Norwegian (Nynorsk)"); + add_person("Einar Johan T. Sømåen", "", ""); + end_section(); + begin_section("Polish"); + add_person("GrajPoPolsku.pl Team", "", ""); + end_section(); + begin_section("Brazilian Portuguese"); + add_person("ScummBR Team", "", ""); + end_section(); + begin_section("Russian"); + add_person("Eugene Sandulenko", "sev", ""); + end_section(); + begin_section("Spanish"); + add_person("Tomás Maidagan", "", ""); + add_person("Jordi Vilalta Prat", "jvprat", ""); + end_section(); + begin_section("Swedish"); + add_person("Hampus Flink", "", ""); + end_section(); + begin_section("Ukrainian"); + add_person("Lubomyr Lisen", "", ""); + end_section(); end_section(); - begin_section("Spanish"); - add_person("Tomás Maidagan", "", ""); + + begin_section("Websites (design)"); + begin_persons(); + add_person("Dobó Balázs", "draven", "Website design"); + add_person("William Claydon", "billwashere", "Skins for doxygen, buildbot and wiki"); + add_person("Yaroslav Fedevych", "jafd", "HTML/CSS for the website"); + add_person("Jean Marc Gimenez", "", "ScummVM logo"); + add_person("David Jensen", "Tyst", "SVG logo conversion"); + add_person("", "Raina", "ScummVM forum buttons"); + end_persons(); end_section(); - begin_section("Swedish"); - add_person("Hampus Flink", "", ""); + + begin_section("Code contributions"); + begin_persons(); + add_person("Ori Avtalion", "salty-horse", "Subtitle control options in the GUI; BASS GUI fixes"); + add_person("Stuart Caie", "", "Decoders for Amiga and AtariST data files (AGOS engine)"); + add_person("Paolo Costabel", "", "PSP port contributions"); + add_person("Martin Doucha", "next_ghost", "CinE engine objectification"); + add_person("Thomas Fach-Pedersen", "madmoose", "ProTracker module player, Smacker video decoder"); + add_person("Tobias Gunkel", "hennymcc", "Sound support for C64 version of MM/Zak, Loom PCE support"); + add_person("Janne Huttunen", "", "V3 actor mask support, Dig/FT SMUSH audio"); + add_person("Kovács Endre János", "", "Several fixes for Simon1"); + add_person("Jeroen Janssen", "japj", "Numerous readability and bugfix patches"); + add_person("Andreas Karlsson", "Sprawl", "Initial port for SymbianOS"); + add_person("Claudio Matsuoka", "", "Daily Linux builds"); + add_person("Thomas Mayer", "", "PSP port contributions"); + add_person("Sean Murray", "lightcast", "ScummVM tools GUI application (GSoC 2007 task)"); + add_person("", "n0p", "Windows CE port aspect ratio correction scaler and right click input method"); + add_person("Mikesch Nepomuk", "mnepomuk", "MI1 VGA floppy patches"); + add_person("Nicolas Noble", "pixels", "Config file and ALSA support"); + add_person("Tim Phillips", "realmz", "Initial MI1 CD music support"); + add_person("", "Quietust", "Sound support for Amiga SCUMM V2/V3 games, MM NES support"); + add_person("Robert Crossfield", "segra", "Improved support for Apple II/C64 versions of MM"); + add_person("Andreas Röver", "", "Broken Sword I & II MPEG2 cutscene support"); + add_person("Edward Rudd", "urkle", "Fixes for playing MP3 versions of MI1/Loom audio"); + add_person("Daniel Schepler", "dschepler", "Final MI1 CD music support, initial Ogg Vorbis support"); + add_person("André Souza", "luke_br", "SDL-based OpenGL renderer"); + end_persons(); end_section(); - begin_section("Ukrainian"); - add_person("Lubomyr Lisen", "", ""); + + begin_section("FreeSCI Contributors"); + begin_persons(); + add_person("Francois-R Boyer", "", "MT-32 information and mapping code"); + add_person("Rainer Canavan", "", "IRIX MIDI driver and bug fixes"); + add_person("Xiaojun Chen", "", ""); + add_person("Paul David Doherty", "", "Game version information"); + add_person("Vyacheslav Dikonov", "", "Config script improvements"); + add_person("Ruediger Hanke", "", "Port to the MorphOS platform"); + add_person("Matt Hargett", "", "Clean-ups, bugfixes, Hardcore QA, Win32"); + add_person("Max Horn", "", "SetJump implementation"); + add_person("Ravi I.", "", "SCI0 sound resource specification"); + add_person("Emmanuel Jeandel", "", "Bugfixes and bug reports"); + add_person("Dmitry Jemerov", "", "Port to the Win32 platform, numerous bugfixes"); + add_person("Chris Kehler", "", "Makefile enhancements"); + add_person("Christopher T. Lansdown", "", "Original CVS maintainer, Alpha compatibility fixes"); + add_person("Sergey Lapin", "", "Port of Carl's type 2 decompression code"); + add_person("Rickard Lind", "", "MT-32->GM MIDI mapping magic, sound research"); + add_person("Hubert Maier", "", "AmigaOS 4 port"); + add_person("Johannes Manhave", "", "Document format translation"); + add_person("Claudio Matsuoka", "", "CVS snapshots, daily builds, BeOS and cygwin ports"); + add_person("Dark Minister", "", "SCI research (bytecode and parser)"); + add_person("Carl Muckenhoupt", "", "Sources to the SCI resource viewer tools that started it all"); + add_person("Anders Baden Nielsen", "", "PPC testing"); + add_person("Walter van Niftrik", "", "Ports to the Dreamcast and GP32 platforms"); + add_person("Rune Orsval", "", "Configuration file editor"); + add_person("Solomon Peachy", "", "SDL ports and much of the sound subsystem"); + add_person("Robey Pointer", "", "Bug tracking system hosting"); + add_person("Magnus Reftel", "", "Heap implementation, Python class viewer, bugfixes"); + add_person("Christoph Reichenbach", "", "UN*X code, VM/Graphics/Sound/other infrastructure"); + add_person("George Reid", "", "FreeBSD package management"); + add_person("Lars Skovlund", "", "Project maintenance, most documentation, bugfixes, SCI1 support"); + add_person("Rink Springer", "", "Port to the DOS platform, several bug fixes"); + add_person("Rainer De Temple", "", "SCI research"); + add_person("Sean Terrell", "", ""); + add_person("Hugues Valois", "", "Game selection menu"); + add_person("Jordi Vilalta", "", "Numerous code and website clean-up patches"); + add_person("Petr Vyhnak", "", "The DCL-INFLATE algorithm, many Win32 improvements"); + add_person("Bas Zoetekouw", "", "Man pages, debian package management, CVS maintenance"); + end_persons(); + add_paragraph("Special thanks to Prof. Dr. Gary Nutt ". + "for allowing the FreeSCI VM extension as a ". + "course project in his Advanced OS course."); + add_paragraph("Special thanks to Bob Heitman and Corey Cole for their support of FreeSCI."); end_section(); - end_section(); - begin_section("Websites (design)"); - begin_persons(); - add_person("Dobó Balázs", "draven", "Website design"); - add_person("Yaroslav Fedevych", "jafd", "HTML/CSS for the website"); - add_person("David Jensen", "Tyst", "SVG logo conversion"); - add_person("Jean Marc Gimenez", "", "ScummVM logo"); - add_person("", "Raina", "ScummVM forum buttons"); - add_person("William Claydon", "billwashere", "Skins for doxygen, buildbot and wiki"); - end_persons(); - end_section(); + add_paragraph("And to all the contributors, users, and beta testers we've missed. Thanks!"); - begin_section("Code contributions"); - begin_persons(); - add_person("Ori Avtalion", "salty-horse", "Subtitle control options in the GUI; BASS GUI fixes"); - add_person("Stuart Caie", "", "Decoders for Amiga and AtariST data files (AGOS engine)"); - add_person("Paolo Costabel", "", "PSP port contributions"); - add_person("Martin Doucha", "next_ghost", "CinE engine objectification"); - add_person("Thomas Fach-Pedersen", "madmoose", "ProTracker module player, Smacker video decoder"); - add_person("Tobias Gunkel", "hennymcc", "Sound support for C64 version of MM/Zak, Loom PCE support"); - add_person("Janne Huttunen", "", "V3 actor mask support, Dig/FT SMUSH audio"); - add_person("Kovács Endre János", "", "Several fixes for Simon1"); - add_person("Jeroen Janssen", "japj", "Numerous readability and bugfix patches"); - add_person("Andreas Karlsson", "Sprawl", "Initial port for SymbianOS"); - add_person("Claudio Matsuoka", "", "Daily Linux builds"); - add_person("Thomas Mayer", "", "PSP port contributions"); - add_person("Sean Murray", "lightcast", "ScummVM tools GUI application (GSoC 2007 task)"); - add_person("", "n0p", "Windows CE port aspect ratio correction scaler and right click input method"); - add_person("Mikesch Nepomuk", "mnepomuk", "MI1 VGA floppy patches"); - add_person("Nicolas Noble", "pixels", "Config file and ALSA support"); - add_person("Tim Phillips", "realmz", "Initial MI1 CD music support"); - add_person("", "Quietust", "Sound support for Amiga SCUMM V2/V3 games, MM NES support"); - add_person("Robert Crossfield", "segra", "Improved support for Apple II/C64 versions of MM"); - add_person("Andreas Röver", "", "Broken Sword I & II MPEG2 cutscene support"); - add_person("Edward Rudd", "urkle", "Fixes for playing MP3 versions of MI1/Loom audio"); - add_person("Daniel Schepler", "dschepler", "Final MI1 CD music support, initial Ogg Vorbis support"); - add_person("André Souza", "luke_br", "SDL-based OpenGL renderer"); - end_persons(); end_section(); - begin_section("FreeSCI Contributors"); - begin_persons(); - add_person("Anders Baden Nielsen", "", "PPC testing"); - add_person("Bas Zoetekouw", "", "Man pages, debian package management, CVS maintenance"); - add_person("Carl Muckenhoupt", "", "Sources to the SCI resource viewer tools that started it all"); - add_person("Chris Kehler", "", "Makefile enhancements"); - add_person("Christoph Reichenbach", "", "UN*X code, VM/Graphics/Sound/other infrastructure"); - add_person("Christopher T. Lansdown", "", "Original CVS maintainer, Alpha compatibility fixes"); - add_person("Claudio Matsuoka", "", "CVS snapshots, daily builds, BeOS and cygwin ports"); - add_person("Dark Minister", "", "SCI research (bytecode and parser)"); - add_person("Dmitry Jemerov", "", "Port to the Win32 platform, numerous bugfixes"); - add_person("Emmanuel Jeandel", "", "Bugfixes and bug reports"); - add_person("Francois-R Boyer", "", "MT-32 information and mapping code"); - add_person("George Reid", "", "FreeBSD package management"); - add_person("Hubert Maier", "", "AmigaOS 4 port"); - add_person("Hugues Valois", "", "Game selection menu"); - add_person("Johannes Manhave", "", "Document format translation"); - add_person("Jordi Vilalta", "", "Numerous code and website clean-up patches"); - add_person("Lars Skovlund", "", "Project maintenance, most documentation, bugfixes, SCI1 support"); - add_person("Magnus Reftel", "", "Heap implementation, Python class viewer, bugfixes"); - add_person("Matt Hargett", "", "Clean-ups, bugfixes, Hardcore QA, Win32"); - add_person("Max Horn", "", "SetJump implementation"); - add_person("Paul David Doherty", "", "Game version information"); - add_person("Petr Vyhnak", "", "The DCL-INFLATE algorithm, many Win32 improvements"); - add_person("Rainer Canavan", "", "IRIX MIDI driver and bug fixes"); - add_person("Rainer De Temple", "", "SCI research"); - add_person("Ravi I.", "", "SCI0 sound resource specification"); - add_person("Ruediger Hanke", "", "Port to the MorphOS platform"); - add_person("Rune Orsval", "", "Configuration file editor"); - add_person("Rickard Lind", "", "MT-32->GM MIDI mapping magic, sound research"); - add_person("Rink Springer", "", "Port to the DOS platform, several bug fixes"); - add_person("Robey Pointer", "", "Bug tracking system hosting"); - add_person("Sergey Lapin", "", "Port of Carl's type 2 decompression code"); - add_person("Solomon Peachy", "", "SDL ports and much of the sound subsystem"); - add_person("Vyacheslav Dikonov", "", "Config script improvements"); - add_person("Walter van Niftrik", "", "Ports to the Dreamcast and GP32 platforms"); - add_person("Xiaojun Chen", "", ""); - add_person("Sean Terrell", "", ""); - end_persons(); - add_paragraph("Special thanks to Prof. Dr. Gary Nutt ". - "for allowing the FreeSCI VM extension as a ". - "course project in his Advanced OS course."); - add_paragraph("Special thanks to Bob Heitman and Corey Cole for their support of FreeSCI."); - end_section(); - add_paragraph("And to all the contributors, users, and beta testers we've missed. Thanks!"); - - end_section(); - - - # HACK! - $max_name_width = 16; - - begin_section("Special thanks to"); - begin_persons(); - add_person("Sander Buskens", "", "For his work on the initial reversing of Monkey2"); - add_person("", "Canadacow", "For the original MT-32 emulator"); - add_person("Kevin Carnes", "", "For Scumm16, the basis of ScummVM's older gfx codecs"); - add_person("Curt Coder", "", "For the original TrollVM (preAGI) code"); - add_person("Patrick Combet", "Dorian Gray", "For the original Gobliiins ADL player"); - add_person("Ivan Dubrov", "", "For contributing the initial version of the Gobliiins engine"); - add_person("Henrik Engqvist", "qvist", "For generously providing hosting for our buildbot, SVN repository, planet and doxygen sites as well as tons of HD space"); - add_person("DOSBox Team", "", "For their awesome OPL2 and OPL3 emulator"); - add_person("Till Kresslein", "Krest", "For design of modern ScummVM GUI"); - add_person("", "Jezar", "For his freeverb filter implementation"); - add_person("Jim Leiterman", "", "Various info on his FM-TOWNS/Marty SCUMM ports"); - add_person("", "lloyd", "For deep tech details about C64 Zak & MM"); - add_person("Sarien Team", "", "Original AGI engine code"); - add_person("Jimmi Thøgersen", "", "For ScummRev, and much obscure code/documentation"); - add_person("", "Tristan", "For additional work on the original MT-32 emulator"); - add_person("James Woodcock", "", "Soundtrack enhancements"); - end_persons(); - - add_paragraph( - "Tony Warriner and everyone at Revolution Software Ltd. for sharing ". - "with us the source of some of their brilliant games, allowing us to ". - "release Beneath a Steel Sky as freeware... and generally being ". - "supportive above and beyond the call of duty."); - - add_paragraph( - "John Passfield and Steve Stamatiadis for sharing the source of their ". - "classic title, Flight of the Amazon Queen and also being incredibly ". - "supportive."); - - add_paragraph( - "Joe Pearce from The Wyrmkeep Entertainment Co. for sharing the source ". - "of their famous title Inherit the Earth and always prompt replies to ". - "our questions."); - - add_paragraph( - "Aric Wilmunder, Ron Gilbert, David Fox, Vince Lee, and all those at ". - "LucasFilm/LucasArts who made SCUMM the insane mess to reimplement ". - "that it is today. Feel free to drop us a line and tell us what you ". - "think, guys!"); - - add_paragraph( - "Alan Bridgman, Simon Woodroffe and everyone at Adventure Soft for ". - "sharing the source code of some of their games with us."); - - add_paragraph( - "John Young, Colin Smythe and especially Terry Pratchett himself for ". - "sharing the source code of Discworld I & II with us."); - - add_paragraph( - "Emilio de Paz Aragón from Alcachofa Soft for sharing the source code ". - "of Drascula: The Vampire Strikes Back with us and his generosity with ". - "freewaring the game."); - - add_paragraph( - "David P. Gray from Gray Design Associates for sharing the source code ". - "of the Hugo trilogy."); - - add_paragraph( - "Broken Sword 2.5 team for providing sources of their engine and their great ". - "support."); - - end_section(); + # HACK! + $max_name_width = 16; + + begin_section("Special thanks to"); + begin_persons(); + add_person("Sander Buskens", "", "For his work on the initial reversing of Monkey2"); + add_person("", "Canadacow", "For the original MT-32 emulator"); + add_person("Kevin Carnes", "", "For Scumm16, the basis of ScummVM's older gfx codecs"); + add_person("Curt Coder", "", "For the original TrollVM (preAGI) code"); + add_person("Patrick Combet", "Dorian Gray", "For the original Gobliiins ADL player"); + add_person("Ivan Dubrov", "", "For contributing the initial version of the Gobliiins engine"); + add_person("Henrik Engqvist", "qvist", "For generously providing hosting for our buildbot, SVN repository, planet and doxygen sites as well as tons of HD space"); + add_person("DOSBox Team", "", "For their awesome OPL2 and OPL3 emulator"); + add_person("Till Kresslein", "Krest", "For design of modern ScummVM GUI"); + add_person("", "Jezar", "For his freeverb filter implementation"); + add_person("Jim Leiterman", "", "Various info on his FM-TOWNS/Marty SCUMM ports"); + add_person("", "lloyd", "For deep tech details about C64 Zak & MM"); + add_person("Sarien Team", "", "Original AGI engine code"); + add_person("Jimmi Thøgersen", "", "For ScummRev, and much obscure code/documentation"); + add_person("", "Tristan", "For additional work on the original MT-32 emulator"); + add_person("James Woodcock", "", "Soundtrack enhancements"); + end_persons(); + + add_paragraph("Some icons by Yusuke Kamiyamane"); + + add_paragraph( + "Tony Warriner and everyone at Revolution Software Ltd. for sharing ". + "with us the source of some of their brilliant games, allowing us to ". + "release Beneath a Steel Sky as freeware... and generally being ". + "supportive above and beyond the call of duty."); + + add_paragraph( + "John Passfield and Steve Stamatiadis for sharing the source of their ". + "classic title, Flight of the Amazon Queen and also being incredibly ". + "supportive."); + + add_paragraph( + "Joe Pearce from The Wyrmkeep Entertainment Co. for sharing the source ". + "of their famous title Inherit the Earth and always prompt replies to ". + "our questions."); + + add_paragraph( + "Aric Wilmunder, Ron Gilbert, David Fox, Vince Lee, and all those at ". + "LucasFilm/LucasArts who made SCUMM the insane mess to reimplement ". + "that it is today. Feel free to drop us a line and tell us what you ". + "think, guys!"); + + add_paragraph( + "Alan Bridgman, Simon Woodroffe and everyone at Adventure Soft for ". + "sharing the source code of some of their games with us."); + + add_paragraph( + "John Young, Colin Smythe and especially Terry Pratchett himself for ". + "sharing the source code of Discworld I & II with us."); + + add_paragraph( + "Emilio de Paz Aragón from Alcachofa Soft for sharing the source code ". + "of Drascula: The Vampire Strikes Back with us and his generosity with ". + "freewaring the game."); + + add_paragraph( + "David P. Gray from Gray Design Associates for sharing the source code ". + "of the Hugo trilogy."); + + add_paragraph( + "Broken Sword 2.5 team for providing sources of their engine and their great ". + "support."); + + end_section(); end_credits(); diff --git a/devtools/md5table.c b/devtools/md5table.c index 9e57edbc35..cb1434c90b 100644 --- a/devtools/md5table.c +++ b/devtools/md5table.c @@ -81,6 +81,7 @@ static const StringMap platformMap[] = { { "C64", "kPlatformC64" }, { "DOS", "kPlatformPC" }, { "FM-TOWNS", "kPlatformFMTowns" }, + { "iOS", "kPlatformIOS" }, { "Mac", "kPlatformMacintosh" }, { "NES", "kPlatformNES" }, { "PC-Engine", "kPlatformPCEngine" }, diff --git a/devtools/sci/musicplayer.cpp b/devtools/sci/musicplayer.cpp index d225195f71..25f2d684a8 100644 --- a/devtools/sci/musicplayer.cpp +++ b/devtools/sci/musicplayer.cpp @@ -90,7 +90,7 @@ int main(int argc, char** argv) { return 2; } sfx_song_set_status(&sound, DUMMY_SOUND_HANDLE, SOUND_STATUS_PLAYING); - while (sfx_poll(&sound, &dummy1, &dummy2) != SI_FINISHED) {}; + while (sfx_poll(&sound, &dummy1, &dummy2) != SI_FINISHED) {} } sfx_exit(&sound); scir_free_resource_manager(resmgr); diff --git a/devtools/scumm-md5.txt b/devtools/scumm-md5.txt index 53e3f38a2c..1682879385 100644 --- a/devtools/scumm-md5.txt +++ b/devtools/scumm-md5.txt @@ -759,6 +759,7 @@ puttzoo Putt-Putt Saves the Zoo 92e7727e67f5cd979d8a1070e4eb8cb3 -1 en All HE 98.5 Updated - cyx 3a3e592b074f595489f7f11e150c398d -1 us Windows HE 99 Updated - Adrian c5cc7cba02a2fbd539c4439e775b0536 43470 de Windows HE 99 Updated - Lightkey + 5c9cecbd2952ccec14c9ecebf5822a34 -1 en iOS HE 100 - - clone2727 3486ede0f904789267d4bcc5537a46d4 14337 en Mac - Demo - khalek d220d154aafbfa12bd6f3ab1b2dae420 -1 de Mac - Demo - Joachim Eberhard diff --git a/devtools/tasmrecover/dreamweb/dreamweb.asm b/devtools/tasmrecover/dreamweb/dreamweb.asm index 8a52435b0c..fa3a4f7957 100644 --- a/devtools/tasmrecover/dreamweb/dreamweb.asm +++ b/devtools/tasmrecover/dreamweb/dreamweb.asm @@ -1129,6 +1129,8 @@ Screenupdate proc near call newplace call mainscreen + cmp quitrequested, 0 + jnz finishearly call animpointer call showpointer cmp watchingtime,0 @@ -5914,7 +5916,7 @@ Fileheader db "DREAMWEB DATA FILE " db "CREATIVE REALITY" Filedata dw 20 dup (0) Extradata db 6 dup (0) -Headerlen equ $-Fileheader +Headerlen equ 96 ; $-Fileheader Roomdata db "DREAMWEB.R00",0 ;Ryan's apartment diff --git a/devtools/tasmrecover/dreamweb/object.asm b/devtools/tasmrecover/dreamweb/object.asm index 807a100052..6a5f7c30a8 100644 --- a/devtools/tasmrecover/dreamweb/object.asm +++ b/devtools/tasmrecover/dreamweb/object.asm @@ -375,7 +375,7 @@ invlist1: dw 273,320,157,198,getbackfromob dw inventx+167,inventx+167+(18*3),inventy-18,inventy-2,incryanpage dw inventx openchangesize: dw inventx+(4*itempicsize) - dw inventy+100,inventy+100+itempicsize,useopened +invlist1continued: dw inventy+100,inventy+100+itempicsize,useopened dw inventx,inventx+(5*itempicsize) dw inventy,inventy+(2*itempicsize),intoinv dw 0,320,0,200,blank diff --git a/devtools/tasmrecover/dreamweb/saveload.asm b/devtools/tasmrecover/dreamweb/saveload.asm index 6c98774a0f..f3c92d36f6 100644 --- a/devtools/tasmrecover/dreamweb/saveload.asm +++ b/devtools/tasmrecover/dreamweb/saveload.asm @@ -1502,7 +1502,6 @@ Loadold proc near alreadyloadold: mov ax,mousebutton and ax,1 jz noloadold - mov ax,0ffffh call doload cmp getback,4 jz noloadold diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover index c4bcbb176c..7c89ab44f5 100755 --- a/devtools/tasmrecover/tasm-recover +++ b/devtools/tasmrecover/tasm-recover @@ -24,189 +24,1556 @@ from tasm.parser import parser from tasm.cpp import cpp -p = parser() +p = parser(skip_binary_data = [ + # These data blobs are not output + # dreamweb.asm + 'characterset1', + 'roomdata', + 'mainlist', + 'mainlist2', + 'menulist', + 'folderlist', + 'stak', + 'keyconverttab', + 'atmospherelist', + 'linedata', + 'madeuproomdat', + 'recname', + 'fileheader', + 'filedata', + 'extradata', + 'keybuffer', + 'spritename1', + 'icongraphics0', + 'icongraphics1', + 'savenames', + 'volumetabname', + # keypad.asm + 'keypadlist', + 'symbollist', + 'diarylist', + # newplace.asm + 'destlist', + # object.asm + 'invlist1', + 'invlist1continued', + 'examlist', + 'withlist1', + # saveload.asm + 'loadlist', + 'savelist', + 'gameerror1', + 'gameerror2', + 'gameerror3', + 'gameerror4', + 'gameerror5', + 'gameerror6', + 'gameerror7', + 'gameerror8', + 'error2patch', + 'error6patch', + 'gameinfo', + 'endgametext1', + 'savefiles', + 'decidelist', + 'discopslist', + 'opslist', + # sblaster.asm + 'dmaaddresses', + 'speechfilename', + 'speechfile', + # sprite.asm + 'reelcalls', + 'facelist', + 'rainlocations', + 'roombyroom', + 'r0','r1','r2','r6','r8','r9','r10','r11','r12','r13','r14', + 'r20','r22','r23','r25','r26','r27','r28','r29', + 'r45','r46','r47','r52','r53','r55', + #talk.asm + 'talklist', + 'quitlist', + # titles.asm + 'introtextname', + 'title0graphics', + 'title1graphics', + 'title2graphics', + 'title3graphics', + 'title4graphics', + 'title5graphics', + 'title6graphics', + # use.asm + 'uselist', + # vars.asm + 'currentset', + 'icons1', + 'icons2', + 'tempcharset', + 'currentframe', + 'takeoff', + 'reelpointer', + 'needsoundbuff', + 'oldint8seg', + 'oldint8add', + 'oldint9seg', + 'oldint9add', + 'soundbuffer', + 'soundbufferad', + 'soundbufferpage', + 'soundtimes', + 'oldsoundintseg', + 'oldsoundintadd', + 'soundbaseadd', + 'dsp_status', + 'dsp_write', + 'dmaaddress', + 'soundint', + 'sounddmachannel', + 'sampleplaying', + 'testresult', + 'currentirq', + 'gameerror', + 'howmuchalloc', + 'inputport', + 'emmhandle', + 'emmpageframe', + 'emmhardwarepage', + 'ch0emmpage', + 'ch0offset', + 'ch0oldemmpage', + 'ch0oldoffset', + 'ch0oldblockstocopy', + 'ch1emmpage', + 'ch1offset', + 'ch1blocksplayed', + 'soundemmpage', + 'speechemmpage', + # vgagrafx.asm + 'cityname', + 'extragraphics1', + 'icongraphics8', + 'shaketable', + 'symbolgraphic', + 'travelgraphic1', + 'travelgraphic2', + 'foldergraphic1', + 'foldergraphic2', + 'foldergraphic3', + 'foldertext', + 'traveltextname', + 'mongraphics2', + 'spritename3', + 'mongraphicname', + 'puzzletextname', + 'commandtextname', + 'characterset2', + 'characterset3', + 'monitorfile1', + 'monitorfile2', + 'monitorfile10', + 'monitorfile11', + 'monitorfile12', + 'monitorfile13', + 'monitorfile20', + 'monitorfile21', + 'monitorfile22', + 'monitorfile23', + 'monitorfile24', + 'introtextfile', + 'palettescreen', + 'idname', + 'samplename', + 'diarygraphic', + 'diarytext', + 'title7graphics', + 'handle', + # 'basicsample', # This can't be removed due to tasm-recover limitations + 'endtextname', + 'gungraphic', + 'monkface', + ]) p.strip_path = 3 context = p.parse('dreamweb/dreamweb.asm') p.link() generator = cpp(context, "DreamGen", blacklist = [ # These functions are not processed - 'randomnumber', - 'quickquit', - 'quickquit2', - 'seecommandtail', - 'multiget', - 'multiput', - 'multidump', - 'frameoutnm', - 'frameoutbh', - 'frameoutfx', - 'cls', - 'clearwork', - 'printundermon', - 'kernchars', - 'getnextword', - 'getnumber', - 'dumptextline', - 'printboth', - 'printchar', - 'printdirect', - 'printslow', - 'printmessage', - 'usetimedtext', - 'dumptimedtext', - 'setuptimedtemp', - 'putundertimed', - 'getundertimed', - 'worktoscreen', - 'width160', - 'convertkey', - 'readabyte', - 'readoneblock', - 'printsprites', - 'printasprite', - 'eraseoldobs', - 'clearsprites', - 'makesprite', - 'showframe', - 'initman', + 'aboutturn', - 'readheader', - 'fillspace', - 'getroomdata', - 'startloading', - 'showreelframe', - 'showgamereel', - 'getreelframeax', - 'findsource', - 'walking', - 'autosetwalk', - 'checkdest', - 'spriteupdate', - 'dodoor', - 'lockeddoorway', - 'liftsprite', - 'frameoutv', - 'modifychar', + 'accesslightoff', + 'accesslighton', + 'actualload', + 'actualsave', + 'addalong', + 'addlength', + 'addtopeoplelist', + 'addtopresslist', + 'adjustlen', + 'advisor', + 'afterintroroom', + 'afternewroom', + 'aide', + 'alleybarksound', + 'allocatebuffers', + 'allocateload', + 'allocatemem', 'allocatework', - 'lockmon', + 'allpalette', + 'allpointer', + 'animpointer', + 'atmospheres', + 'attendant', + 'autoappear', + 'autolook', + 'autosetwalk', + 'backobject', + 'barwoman', + 'biblequote', + 'blank', + 'blockget', + 'blocknametext', + 'bossman', + 'bothchannels', + 'bresenhams', + 'buttoneight', + 'buttonenter', + 'buttonfive', + 'buttonfour', + 'buttonnine', + 'buttonnought', + 'buttonone', + 'buttonpress', + 'buttonseven', + 'buttonsix', + 'buttonthree', + 'buttontwo', + 'calcfrframe', + 'calcmapad', + 'calledensdlift', + 'calledenslift', + 'callhotellift', 'cancelch0', 'cancelch1', - 'getroomspaths', - 'makebackob', - 'dealwithspecial', - 'plotreel', - 'facerightway', - 'zoom', - 'crosshair', - 'showrain', - 'domix', + 'candles', + 'candles1', + 'candles2', + 'cantdrop', + 'carparkdrip', + 'channel0only', 'channel0tran', - 'makenextblock', - 'loopchannel0', - 'parseblaster', - 'deltextline', - 'doblocks', - 'checkifperson', - 'checkiffree', + 'channel1only', + 'checkbasemem', + 'checkcoords', + 'checkdest', + 'checkforemm', + 'checkforshake', 'checkifex', - 'getreelstart', - 'findobname', - 'copyname', + 'checkiffree', + 'checkifpathison', + 'checkifperson', + 'checkifset', + 'checkinput', + 'checkone', + 'checksoundint', + 'checkspeed', + 'chewy', + 'clearbeforeload', + 'clearendpal', + 'clearpalette', + 'clearreels', + 'clearrest', + 'clearsprites', + 'clearstartpal', + 'clearwork', + 'closefile', + 'cls', + 'commandonly', 'commandwithob', - 'showpanel', - 'updatepeople', - 'madmantext', - 'madmode', - 'movemap', + 'compare', + 'constant', + 'convertkey', + 'convicons', + 'convnum', + 'copper', + 'copyname', + 'createfile', + 'createname', + 'createpanel', + 'createpanel2', + 'credits', + 'crosshair', + 'dealwithspecial', + 'deallocatemem', + 'decide', + 'delchar', + 'delcurs', + 'deletetaken', + 'deleverything', + 'delpointer', + 'delsprite', + 'deltextline', + 'delthisone', + 'destselect', + 'diarykeyp', + 'diarykeyn', + 'disablepath', + 'disablesoundint', + 'discops', + 'dmaend', + 'doblocks', + 'dochange', + 'dodoor', + 'dofade', + 'doload', + 'dolook', + 'domix', + 'dontloadseg', 'doorway', - 'widedoor', - 'showallobs', - 'addalong', - 'addlength', - 'getdimension', - 'getxad', - 'getyad', - 'getmapad', - 'calcmapad', - 'calcfrframe', + 'dosaveload', + 'dosreturn', + 'doshake', + 'drawflags', + 'drawfloor', + 'drinker', + 'droperror', + 'drunk', + 'dumpblink', + 'dumpcurrent', + 'dumpeverything', + 'dumpkeypad', + 'dumpmap', + 'dumpmenu', + 'dumppointer', + 'dumpsymbol', + 'dumpsymbox', + 'dumptextline', + 'dumptimedtext', + 'dumpwatch', + 'dumpzoom', + 'eden', + 'edeninbath', + 'edenscdplayer', + 'enablesoundint', + 'endgame', + 'endpaltostart', + 'entercode', + 'entersymbol', + 'eraseoldobs', + 'error', + 'errormessage1', + 'errormessage2', + 'errormessage3', + 'examicon', + 'examinventory', + 'examineob', + 'examineobtext', + 'facerightway', + 'fadecalculation', + 'fadedos', + 'fadefromwhite', + 'fadescreenup', + 'fadescreenups', + 'fadescreenuphalf', + 'fadescreendown', + 'fadescreendowns', + 'fadetowhite', + 'fadeupmonfirst', + 'fadeupyellows', + 'femalefan', + 'fillryan', + 'fillspace', 'finalframe', - 'commandonly', - 'makename', + 'findallryan', 'findlen', - 'blocknametext', - 'walktotext', - 'personnametext', - 'findxyfrompath', + 'findnextcolon', + 'findobname', 'findormake', - 'setallchanges', - 'dochange', - 'deletetaken', - 'placesetobject', - 'removesetobject', - 'showallfree', - 'showallex', - 'adjustlen', + 'findroominloc', + 'findsource', + 'findxyfrompath', 'finishedwalking', - 'checkone', + 'folderexit', + 'folderhints', + 'foghornsound', + 'frameoutbh', + 'frameoutfx', + 'frameoutnm', + 'frameoutv', + 'gamer', + 'gates', + 'generalerror', + 'getanyaddir', + 'getback1', + 'getbackfromob', + 'getbackfromops', + 'getbacktoops', 'getblockofpixel', + 'getdimension', + 'getexpos', 'getflagunderp', - 'walkandexamine', + 'getlocation', + 'getmapad', + 'getnamepos', + 'getnextword', + 'getnumber', + 'getpersframe', + 'getreelframeax', + 'getreelstart', + 'getridofall', + 'getridofpit', + 'getridofreels', + 'getridoftemp', + 'getridoftemp2', + 'getridoftemp3', + 'getridoftempcharset', + 'getridoftempsp', + 'getridoftemptext', + 'getroomdata', + 'getroomspaths', + 'gettime', + 'gettingshot', + 'getundermenu', + 'getundertimed', + 'getunderzoom', + 'getxad', + 'getyad', + 'grafittidoor', + 'greyscalesum', + 'handclap', + 'hangon', + 'hangoncurs', + 'hangone', + 'hangonp', + 'hangonpq', + 'hangonw', + 'hotelbell', + 'hotelcontrol', + 'initialinv', + 'initman', + 'initrain', + 'input', + 'interupttest', + 'interviewer', + 'intro', + 'intro1text', + 'intro2text', + 'intro3text', + 'intromagic1', + 'intromagic2', + 'intromagic3', + 'intromonks1', + 'intromonks2', + 'intromusic', + 'inventory', + 'isitdescribed', + 'isitright', + 'isitworn', + 'issetobonmap', + 'keeper', + 'kernchars', + 'keyboardread', + 'lastdest', + 'lastfolder', + 'liftnoise', + 'liftsprite', + 'loadcart', + 'loadfolder', + 'loadgame', + 'loadintroroom', + 'loadintotemp', + 'loadintotemp2', + 'loadintotemp3', + 'loadkeypad', + 'loadmenu', + 'loadnews', + 'loadold', + 'loadpalfromiff', + 'loadpersonal', + 'loadposition', + 'loadseg', + 'loadspeech', + 'loadroom', + 'loadroomssample', + 'loadsample', + 'loadsavebox', + 'loadsecondsample', + 'loadtempcharset', + 'loadtemptext', + 'loadtraveltext', + 'lockeddoorway', + 'locklightoff', + 'locklighton', + 'lockmon', + 'look', + 'loopchannel0', + 'louis', + 'louischair', + 'madman', + 'madmanrun', + 'madmanstelly', + 'madmantext', + 'madmode', + 'mainman', + 'mainscreen', + 'makebackob', + 'makeheader', + 'makemainscreen', + 'makename', + 'makenextblock', + 'makesprite', + 'makeworn', + 'malefan', + 'manasleep', + 'manasleep2', + 'mansatstill', + 'maptopanel', + 'middlepanel', + 'mode640x480', + 'modifychar', + 'monitorlogo', + 'monkandryan', + 'monks2text', + 'monkspeaking', + 'monmessage', + 'monprint', + 'moretalk', + 'mousecall', + 'movemap', + 'multidump', + 'multiget', + 'multiput', + 'namestoold', + 'neterror', + 'newgame', + 'newplace', + 'nextdest', + 'nextfolder', + 'nextsymbol', + 'obicons', 'obname', - 'delpointer', - 'showblink', - 'dumpblink', - 'dumppointer', - 'showpointer', - 'animpointer', - 'checkcoords', + 'obpicture', + 'obsthatdothings', + 'obtoinv', + 'oldtonames', + 'onedigit', + 'openeden', + 'openfile', + 'openfilefromc', + 'openfilenocheck', + 'openforsave', + 'openhoteldoor', + 'openhoteldoor2', + 'openinv', + 'openlouis', + 'openpoolboss', + 'openryan', + 'opensarters', + 'opentomb', + 'opentvdoor', + 'openyourneighbour', + 'othersmoker', + 'out22c', + 'paltoendpal', + 'paltostartpal', + 'panelicons1', + 'paneltomap', + 'parseblaster', + 'personnametext', + 'pickupob', + 'pitinterupt', + 'pixelcheckset', + 'placefreeobject', + 'placesetobject', + 'playchannel0', + 'playchannel1', + 'playguitar', + 'plotreel', + 'powerlightoff', + 'powerlighton', + 'priest', + 'priesttext', + 'printasprite', + 'printboth', + 'printchar', + 'printcurs', + 'printdirect', + 'printlogo', + 'printmessage', + 'printoutermon', + 'printslow', + 'printsprites', + 'printundermon', + 'putbackobstuff', + 'putundermenu', + 'putundertimed', + 'putunderzoom', + 'quickquit', + 'quickquit2', + 'quitkey', + 'quitsymbol', + 'random', + 'randomaccess', + 'randomnum1', + 'randomnum2', + 'randomnumber', + 'readabyte', + 'readcitypic', + 'readdesticon', + 'readfromfile', + 'readheader', + 'readkey', 'readmouse', 'readmouse1', 'readmouse2', 'readmouse3', 'readmouse4', - 'waitframes', - 'drawflags', - 'addtopeoplelist', - 'getexpos', - 'paneltomap', - 'maptopanel', - 'dumpmap', - 'obpicture', - 'delthisone', + 'readoneblock', + 'readsetdata', + 'realcredits', + 'reconstruct', + 'redes', + 'redrawmainscrn', + 'reelsonscreen', + 'reexfromopen', + 'removeemm', + 'removesetobject', + 'resetkeyboard', + 'restoreall', + 'restoreems', + 'restorereels', + 'rockstar', + 'rollendcredits', + 'rollendcredits2', + 'roomname', + 'runintroseq', + 'saveems', + 'savefileread', + 'savefilewrite', + 'savegame', + 'saveload', + 'saveposition', + 'saveseg', + 'scanfornames', + 'screenupdate', + 'scrollmonitor', + 'security', + 'seecommandtail', + 'selectlocation', + 'selectslot2', + 'set16colpalette', + 'setallchanges', + 'setbotleft', + 'setbotright', + 'setkeyboardint', + 'setlocation', + 'setmode', + 'setmouse', + 'setsoundoff', + 'settopleft', + 'settopright', + 'setupemm', + 'setuppit', + 'setuptimedtemp', + 'setwalk', + 'showallex', + 'showallfree', + 'showallobs', + 'showarrows', + 'showblink', + 'showbyte', + 'showcity', + 'showcurrentfile', + 'showdecisions', + 'showdiary', + 'showdiscops', + 'showexit', + 'showfirstuse', + 'showfolder', + 'showframe', + 'showgamereel', + 'showgroup', + 'showgun', + 'showicon', + 'showkeypad', + 'showleftpage', + 'showloadops', + 'showmainops', + 'showman', + 'showmenu', + 'showmonk', + 'shownames', + 'showopbox', + 'showoutermenu', + 'showouterpad', + 'showpanel', + 'showpcx', + 'showpointer', + 'showpuztext', + 'showrain', + 'showreelframe', + 'showrightpage', + 'showryanpage', + 'showsaveops', + 'showseconduse', + 'showsymbol', + 'showtime', + 'showwatch', + 'showword', + 'singlekey', + 'sitdowninbar', + 'slabdoora', + 'slabdoorb', + 'slabdoorc', + 'slabdoord', + 'slabdoore', + 'slabdoorf', + 'smallcandle', + 'smokebloke', + 'soldier1', + 'sortoutmap', + 'soundend', + 'soundonreels', + 'soundstartup', + 'sparky', + 'sparkydrip', + 'splitintolines', + 'spriteupdate', + 'standardload', + 'startdmablock', + 'startloading', + 'startpaltoend', + 'startup', + 'startup1', + 'steady', + 'storeit', + 'switchryanoff', + 'switchryanon', + 'talk', + 'tattooman', + 'textforend', + 'textformonk', + 'titles', + 'train', 'transferinv', - 'obicons', - 'compare', - 'pixelcheckset', - 'turnpathon', - 'turnpathoff', - 'turnanypathon', + 'transfertext', + 'trapdoor', + 'trysoundalloc', 'turnanypathoff', - 'isitdescribed', - 'checkifset', - 'checkifpathison', - 'delsprite', - 'dumpeverything', - 'isitworn', - 'makeworn', - 'obtoinv', - 'showryanpage', - 'findallryan', - 'fillryan', + 'turnanypathon', + 'turnonpower', + 'turnpathoff', + 'turnpathon', + 'twodigitnum', + 'undertextline', + 'updatepeople', + 'usebalcony', + 'usebuttona', + 'usecardreader1', + 'usecardreader2', + 'usecardreader3', + 'usecart', + 'usecharset1', + 'usechurchgate', + 'usechurchhole', + 'useclearbox', + 'usecooker', + 'usecoveredbox', + 'usediary', + 'usedryer', + 'useelevator1', + 'useelevator2', + 'useelevator3', + 'useelevator4', + 'useelevator5', + 'useelvdoor', + 'usefullcart', + 'usehole', + 'useladder', + 'useladderb', + 'uselighter', + 'usehatch', + 'usemenu', + 'usemon', + 'useobject', + 'useplate', + 'useplinth', + 'usepoolreader', + 'userailing', 'useroutine', - 'hangon', - 'hangonp', - 'findnextcolon', + 'useshield', + 'usetempcharset', 'usetext', - 'bresenhams', - 'examineobtext', + 'usetimedtext', + 'usetrainer', + 'usewall', + 'usewinch', + 'usewindow', + 'usewire', + 'viewfolder', + 'vsync', + 'volumeadjust', + 'waitframes', + 'walkandexamine', + 'walking', + 'walkintoroom', + 'walktotext', + 'watchcount', + 'watchreel', + 'wearwatch', + 'wearshades', + 'wheelsound', + 'widedoor', + 'width160', + 'workoutframes', + 'worktoscreen', + 'worktoscreenm', + 'wornerror', + 'zoom', + 'zoomicon', + 'zoomonoff', ], skip_output = [ # These functions are processed but not output 'dreamweb', - 'backobject', - 'mainman', - 'madman', - 'loadgame', - 'savegame', - 'doload' - ]) + ], skip_dispatch_call = True, skip_addr_constants = True, + header_omit_blacklisted = True, + function_name_remapping = { + # This remaps the function naming at output for readability + 'aboutturn' : 'aboutTurn', + 'accesslightoff' : 'accessLightOff', + 'accesslighton' : 'accessLightOn', + 'actualload' : 'actualLoad', + 'actualsave' : 'actualSave', + 'addalong' : 'addAlong', + 'additionaltext' : 'additionalText', + 'addlength' : 'addLength', + 'addtopeoplelist' : 'addToPeopleList', + 'addtopresslist' : 'addToPressList', + 'adjustdown' : 'adjustDown', + 'adjustleft' : 'adjustLeft', + 'adjustlen' : 'adjustLen', + 'adjustright' : 'adjustRight', + 'adjustup' : 'adjustUp', + 'advisor' : 'advisor', + 'afterintroroom' : 'afterIntroRoom', + 'afternewroom' : 'afterNewRoom', + 'aide' : 'aide', + 'alleybarksound' : 'alleyBarkSound', + 'allocatebuffers' : 'allocateBuffers', + 'allocateload' : 'allocateLoad', + 'allocatemem' : 'allocateMem', + 'allocatework' : 'allocateWork', + 'allpointer' : 'allPointer', + 'animpointer' : 'animPointer', + 'atmospheres' : 'atmospheres', + 'attendant' : 'attendant', + 'autoappear' : 'autoAppear', + 'autolook' : 'autoLook', + 'autosetwalk' : 'autoSetWalk', + 'backobject' : 'backObject', + 'bartender' : 'bartender', + 'barwoman' : 'barWoman', + 'biblequote' : 'bibleQuote', + 'blank' : 'blank', + 'blockget' : 'blockGet', + 'blocknametext' : 'blockNameText', + 'bossman' : 'bossMan', + 'bothchannels' : 'bothChannels', + 'businessman' : 'businessMan', + 'buttoneight' : 'buttonEight', + 'buttonenter' : 'buttonEnter', + 'buttonfive' : 'buttonFive', + 'buttonfour' : 'buttonFour', + 'buttonnine' : 'buttonNine', + 'buttonnought' : 'buttonNought', + 'buttonone' : 'buttonOne', + 'buttonpress' : 'buttonPress', + 'buttonseven' : 'buttonSeven', + 'buttonsix' : 'buttonSix', + 'buttonthree' : 'buttonThree', + 'buttontwo' : 'buttonTwo', + 'calcfrframe' : 'calcFrFrame', + 'calcmapad' : 'calcMapAd', + 'calledensdlift' : 'callEdensDLift', + 'calledenslift' : 'callEdensLift', + 'callhotellift' : 'callHotelLift', + 'cancelch0' : 'cancelCh0', + 'cancelch1' : 'cancelCh1', + 'candles' : 'candles', + 'candles1' : 'candles1', + 'candles2' : 'candles2', + 'cantdrop' : 'cantDrop', + 'carparkdrip' : 'carParkDrip', + 'channel0only' : 'channel0only', + 'channel0tran' : 'channel0Tran', + 'channel1only' : 'channel1only', + 'checkbasemem' : 'checkBaseMem', + 'checkcoords' : 'checkCoords', + 'checkdest' : 'checkDest', + 'checkforemm' : 'checkForEMM', + 'checkforexit' : 'checkForExit', + 'checkforshake' : 'checkForShake', + 'checkifex' : 'checkIfEx', + 'checkiffree' : 'checkIfFree', + 'checkifpathison' : 'checkIfPathIsOn', + 'checkifperson' : 'checkIfPerson', + 'checkifset' : 'checkIfSet', + 'checkinput' : 'checkInput', + 'checkinside' : 'checkInside', + 'checkobjectsize' : 'checkObjectSize', + 'checkone' : 'checkOne', + 'checksoundint' : 'checkSoundInt', + 'checkspeed' : 'checkSpeed', + 'chewy' : 'chewy', + 'clearbeforeload' : 'clearBeforeLoad', + 'clearbuffers' : 'clearBuffers', + 'clearchanges' : 'clearChanges', + 'clearendpal' : 'clearEndPal', + 'clearpalette' : 'clearPalette', + 'clearreels' : 'clearReels', + 'clearrest' : 'clearRest', + 'clearsprites' : 'clearSprites', + 'clearstartpal' : 'clearStartPal', + 'clearwork' : 'clearWork', + 'closefile' : 'closeFile', + 'commandonly' : 'commandOnly', + 'commandwithob' : 'commandWithOb', + 'constant' : 'constant', + 'convertkey' : 'convertKey', + 'convicons' : 'convIcons', + 'convnum' : 'convNum', + 'copper' : 'copper', + 'copyname' : 'copyName', + 'createfile' : 'createFile', + 'createname' : 'createName', + 'createpanel' : 'createPanel', + 'createpanel2' : 'createPanel2', + 'credits' : 'credits', + 'crosshair' : 'crossHair', + 'deallocatemem' : 'deallocateMem', + 'dealwithspecial' : 'dealWithSpecial', + 'decide' : 'decide', + 'delchar' : 'delChar', + 'delcurs' : 'delCurs', + 'deleteexframe' : 'deleteExFrame', + 'deleteexobject' : 'deleteExObject', + 'deleteextext' : 'deleteExText', + 'deletetaken' : 'deleteTaken', + 'deleverything' : 'delEverything', + 'delpointer' : 'delPointer', + 'delsprite' : 'delSprite', + 'deltextline' : 'delTextLine', + 'delthisone' : 'delThisOne', + 'describeob' : 'describeOb', + 'destselect' : 'destSelect', + 'diarykeyn' : 'diaryKeyN', + 'diarykeyp' : 'diaryKeyP', + 'dircom' : 'dirCom', + 'dirfile' : 'dirFile', + 'disablepath' : 'disablePath', + 'disablesoundint' : 'disableSoundInt', + 'discops' : 'discOps', + 'dmaend' : 'DMAEnd', + 'doblocks' : 'doBlocks', + 'dochange' : 'doChange', + 'dodoor' : 'doDoor', + 'doload' : 'doLoad', + 'dolook' : 'doLook', + 'domix' : 'doMix', + 'dontloadseg' : 'dontLoadSeg', + 'dosaveload' : 'doSaveLoad', + 'doshake' : 'doShake', + 'dosometalk' : 'doSomeTalk', + 'dosreturn' : 'DOSReturn', + 'drawflags' : 'drawFlags', + 'drawfloor' : 'drawFloor', + 'drawitall' : 'drawItAll', + 'dreamweb' : 'dreamweb', + 'drinker' : 'drinker', + 'droperror' : 'dropError', + 'dropobject' : 'dropObject', + 'drunk' : 'drunk', + 'dumpblink' : 'dumpBlink', + 'dumpdiarykeys' : 'dumpDiaryKeys', + 'dumpeverything' : 'dumpEverything', + 'dumpkeypad' : 'dumpKeypad', + 'dumpmap' : 'dumpMap', + 'dumpmenu' : 'dumpMenu', + 'dumppointer' : 'dumpPointer', + 'dumpsymbol' : 'dumpSymbol', + 'dumpsymbox' : 'dumpSymBox', + 'dumptextline' : 'dumpTextLine', + 'dumptimedtext' : 'dumpTimedText', + 'dumpwatch' : 'dumpWatch', + 'dumpzoom' : 'dumpZoom', + 'eden' : 'eden', + 'edeninbath' : 'edenInBath', + 'edenscdplayer' : 'edensCDPlayer', + 'emergencypurge' : 'emergencyPurge', + 'enablesoundint' : 'enableSoundInt', + 'endgame' : 'endGame', + 'endgameseq' : 'endGameSeq', + 'endpaltostart' : 'endPalToStart', + 'entercode' : 'enterCode', + 'entersymbol' : 'enterSymbol', + 'entryanims' : 'entryAnims', + 'entrytexts' : 'entryTexts', + 'eraseoldobs' : 'eraseOldObs', + 'error' : 'error', + 'errormessage1' : 'errorMessage1', + 'errormessage2' : 'errorMessage2', + 'errormessage3' : 'errorMessage3', + 'examicon' : 'examIcon', + 'examineob' : 'examineOb', + 'examineobtext' : 'examineObText', + 'examinventory' : 'examineInventory', + 'execcommand' : 'execCommand', + 'facerightway' : 'faceRightWay', + 'fadecalculation' : 'fadeCalculation', + 'fadedownmon' : 'fadeDownMon', + 'fadefromwhite' : 'fadeFromWhite', + 'fadescreendown' : 'fadeScreenDown', + 'fadescreendownhalf' : 'fadeScreenDownHalf', + 'fadescreendowns' : 'fadeScreenDowns', + 'fadescreenup' : 'fadeScreenUp', + 'fadescreenuphalf' : 'fadeScreenUpHalf', + 'fadescreenups' : 'fadeScreenUps', + 'fadetowhite' : 'fadeToWhite', + 'fadeupmon' : 'fadeUpMon', + 'fadeupmonfirst' : 'fadeUpMonFirst', + 'fadeupyellows' : 'fadeUpYellows', + 'femalefan' : 'femaleFan', + 'fillopen' : 'fillOpen', + 'fillryan' : 'fillRyan', + 'fillspace' : 'fillSpace', + 'finalframe' : 'finalFrame', + 'findallopen' : 'findAllOpen', + 'findallryan' : 'findAllRyan', + 'findexobject' : 'findExObject', + 'findfirstpath' : 'findFirstPath', + 'findinvpos' : 'findInvPos', + 'findlen' : 'findLen', + 'findnextcolon' : 'findNextColon', + 'findobname' : 'findObName', + 'findopenpos' : 'findOpenPos', + 'findormake' : 'findOrMake', + 'findpathofpoint' : 'findPathOfPoint', + 'findpuztext' : 'findPuzText', + 'findroominloc' : 'findRoomInLoc', + 'findsetobject' : 'findSetObject', + 'findsource' : 'findSource', + 'findtext1' : 'findText1', + 'findxyfrompath' : 'findXYFromPath', + 'finishedwalking' : 'finishedWalking', + 'foghornsound' : 'foghornSound', + 'folderexit' : 'folderExit', + 'folderhints' : 'folderHints', + 'frameoutbh' : 'frameOutbh', + 'frameoutfx' : 'frameOutfx', + 'frameoutnm' : 'frameOutnm', + 'frameoutv' : 'frameOutV', + 'gamer' : 'gamer', + 'gates' : 'gates', + 'generalerror' : 'generalError', + 'getanyad' : 'getAnyAd', + 'getanyaddir' : 'getAnyAdDir', + 'getback1' : 'getBack1', + 'getbackfromob' : 'getBackFromOb', + 'getbackfromops' : 'getBackFromOps', + 'getbacktoops' : 'getBackToOps', + 'getblockofpixel' : 'getBlockOfPixel', + 'getdestinfo' : 'getDestInfo', + 'getdimension' : 'getDimension', + 'geteitherad' : 'getEitherAd', + 'getexad' : 'getExAd', + 'getexpos' : 'getExPos', + 'getflagunderp' : 'getFlagUnderP', + 'getfreead' : 'getFreeAd', + 'getkeyandlogo' : 'getKeyAndLogo', + 'getlocation' : 'getLocation', + 'getmapad' : 'getMapAd', + 'getnamepos' : 'getNamePos', + 'getnextword' : 'getNextWord', + 'getnumber' : 'getNumber', + 'getobtextstart' : 'getObTextStart', + 'getopenedsize' : 'getOpenedSize', + 'getpersframe' : 'getPersFrame', + 'getpersontext' : 'getPersonText', + 'getreelframeax' : 'getReelFrameAX', + 'getreelstart' : 'getReelStart', + 'getridofall' : 'getRidOfAll', + 'getridofpit' : 'getRidOfPit', + 'getridofpitsetuppit' : 'getRidOfPitSetupPit', + 'getridofreels' : 'getRidOfReels', + 'getridoftemp' : 'getRidOfTemp', + 'getridoftemp2' : 'getRidOfTemp2', + 'getridoftemp3' : 'getRidOfTemp3', + 'getridoftempcharset' : 'getRidOfTempCharset', + 'getridoftempsp' : 'getRidOfTempsP', + 'getridoftemptext' : 'getRidOfTempText', + 'getroomdata' : 'getRoomData', + 'getroomspaths' : 'getRoomsPaths', + 'getsetad' : 'getSetAd', + 'gettime' : 'getTime', + 'gettingshot' : 'gettingShot', + 'getundercentre' : 'getUnderCentre', + 'getundermenu' : 'getUnderMenu', + 'getundertimed' : 'getUnderTimed', + 'getunderzoom' : 'getUnderZoom', + 'getxad' : 'getXAd', + 'getyad' : 'getYAd', + 'grafittidoor' : 'grafittiDoor', + 'handclap' : 'handClap', + 'hangon' : 'hangOn', + 'hangoncurs' : 'hangOnCurs', + 'hangone' : 'hangOne', + 'hangonp' : 'hangOnP', + 'hangonpq' : 'hangOnPQ', + 'hangonw' : 'hangOnW', + 'heavy' : 'heavy', + 'helicopter' : 'helicopter', + 'hotelbell' : 'hotelBell', + 'hotelcontrol' : 'hotelControl', + 'identifyob' : 'identifyOb', + 'incryanpage' : 'incRyanPage', + 'initialinv' : 'initialInv', + 'initialmoncols' : 'initialMonCols', + 'initman' : 'initMan', + 'initrain' : 'initRain', + 'interupttest' : 'interruptTest', + 'interviewer' : 'interviewer', + 'intoinv' : 'inToInv', + 'intro' : 'intro', + 'intro1text' : 'intro1Text', + 'intro2text' : 'intro2Text', + 'intro3text' : 'intro3Text', + 'intromagic1' : 'introMagic1', + 'intromagic2' : 'introMagic2', + 'intromagic3' : 'introMagic3', + 'intromonks1' : 'introMonks1', + 'intromonks2' : 'introMonks2', + 'intromusic' : 'introMusic', + 'inventory' : 'inventory', + 'isitdescribed' : 'isItDescribed', + 'isitright' : 'isItRight', + 'isitworn' : 'isItWorn', + 'isryanholding' : 'isRyanHolding', + 'issetobonmap' : 'isSetObOnMap', + 'keeper' : 'keeper', + 'kernchars' : 'kernChars', + 'keyboardread' : 'keyboardRead', + 'lastdest' : 'lastDest', + 'lastfolder' : 'lastFolder', + 'liftnoise' : 'liftNoise', + 'liftsprite' : 'liftSprite', + 'loadcart' : 'loadCart', + 'loadfolder' : 'loadFolder', + 'loadgame' : 'loadGame', + 'loadintotemp' : 'loadIntoTemp', + 'loadintotemp2' : 'loadIntoTemp2', + 'loadintotemp3' : 'loadIntoTemp3', + 'loadintroroom' : 'loadIntroRoom', + 'loadkeypad' : 'loadKeypad', + 'loadmenu' : 'loadMenu', + 'loadnews' : 'loadNews', + 'loadold' : 'loadOld', + 'loadpalfromiff' : 'loadPalFromIFF', + 'loadpersonal' : 'loadPersonal', + 'loadposition' : 'loadPosition', + 'loadroom' : 'loadRoom', + 'loadroomssample' : 'loadRoomsSample', + 'loadsample' : 'loadSample', + 'loadsavebox' : 'loadSaveBox', + 'loadsecondsample' : 'loadSecondSample', + 'loadseg' : 'loadSeg', + 'loadspeech' : 'loadSpeech', + 'loadtempcharset' : 'loadTempCharset', + 'loadtemptext' : 'loadTempText', + 'loadtraveltext' : 'loadTravelText', + 'locationpic' : 'locationPic', + 'lockeddoorway' : 'lockedDoorway', + 'locklightoff' : 'lockLightOff', + 'locklighton' : 'lockLightOn', + 'lockmon' : 'lockMon', + 'lookatcard' : 'lookAtCard', + 'lookatplace' : 'lookAtPlace', + 'lookininterface' : 'lookInInterface', + 'loopchannel0' : 'loopChannel0', + 'louis' : 'louis', + 'louischair' : 'louisChair', + 'madman' : 'madman', + 'madmanrun' : 'madmanRun', + 'madmanstelly' : 'madmansTelly', + 'madmantext' : 'madmanText', + 'madmode' : 'madMode', + 'mainman' : 'mainMan', + 'mainscreen' : 'mainScreen', + 'makebackob' : 'makeBackOb', + 'makecaps' : 'makeCaps', + 'makeheader' : 'makeHeader', + 'makemainscreen' : 'makeMainScreen', + 'makename' : 'makeName', + 'makenextblock' : 'makeNextBlock', + 'makesprite' : 'makeSprite', + 'makeworn' : 'makeWorn', + 'malefan' : 'maleFan', + 'manasleep' : 'manAsleep', + 'manasleep2' : 'manAsleep2', + 'mansatstill' : 'manSatStill', + 'maptopanel' : 'mapToPanel', + 'middlepanel' : 'middlePanel', + 'mode640x480' : 'mode640x480', + 'modifychar' : 'modifyChar', + 'moneypoke' : 'moneyPoke', + 'monitorlogo' : 'monitorLogo', + 'monkandryan' : 'monkAndRyan', + 'monks2text' : 'monks2text', + 'monkspeaking' : 'monkSpeaking', + 'monmessage' : 'monMessage', + 'monprint' : 'monPrint', + 'moretalk' : 'moreTalk', + 'mousecall' : 'mouseCall', + 'movemap' : 'moveMap', + 'mugger' : 'mugger', + 'multidump' : 'multiDump', + 'multiget' : 'multiGet', + 'multiput' : 'multiPut', + 'namestoold' : 'namesToOld', + 'neterror' : 'netError', + 'newgame' : 'newGame', + 'newplace' : 'newPlace', + 'nextcolon' : 'nextColon', + 'nextdest' : 'nextDest', + 'nextfolder' : 'nextFolder', + 'nextsymbol' : 'nextSymbol', + 'nothelderror' : 'notHeldError', + 'obicons' : 'obIcons', + 'obname' : 'obName', + 'obpicture' : 'obPicture', + 'obsthatdothings' : 'obsThatDoThings', + 'obtoinv' : 'obToInv', + 'oldtonames' : 'oldToNames', + 'onedigit' : 'oneDigit', + 'openeden' : 'openEden', + 'openfile' : 'openFile', + 'openfilefromc' : 'openFileFromC', + 'openfilenocheck' : 'openFileNoCheck', + 'openforsave' : 'openForSave', + 'openhoteldoor' : 'openHotelDoor', + 'openhoteldoor2' : 'openHotelDoor2', + 'openinv' : 'openInv', + 'openlouis' : 'openLouis', + 'openob' : 'openOb', + 'openpoolboss' : 'openPoolBoss', + 'openryan' : 'openRyan', + 'opensarters' : 'openSarters', + 'opentomb' : 'openTomb', + 'opentvdoor' : 'openTVDoor', + 'openyourneighbour' : 'openYourNeighbour', + 'othersmoker' : 'otherSmoker', + 'out22c' : 'out22c', + 'outofinv' : 'outOfInv', + 'outofopen' : 'outOfOpen', + 'paltoendpal' : 'palToEndPal', + 'paltostartpal' : 'palToStartPal', + 'panelicons1' : 'panelIcons1', + 'paneltomap' : 'panelToMap', + 'parseblaster' : 'parseBlaster', + 'parser' : 'parser', + 'personnametext' : 'personNameText', + 'pickupconts' : 'pickupConts', + 'pickupob' : 'pickupOb', + 'pitinterupt' : 'pitInterrupt', + 'pixelcheckset' : 'pixelCheckSet', + 'placefreeobject' : 'placeFreeObject', + 'placesetobject' : 'placeSetObject', + 'playchannel0' : 'playChannel0', + 'playchannel1' : 'playChannel1', + 'playguitar' : 'playGuitar', + 'plotreel' : 'plotReel', + 'poolguard' : 'poolGuard', + 'powerlightoff' : 'powerLightOff', + 'powerlighton' : 'powerLightOn', + 'priest' : 'priest', + 'priesttext' : 'priestText', + 'printasprite' : 'printASprite', + 'printboth' : 'printBoth', + 'printchar' : 'printChar', + 'printcurs' : 'printCurs', + 'printdirect' : 'printDirect', + 'printlogo' : 'printLogo', + 'printmessage' : 'printMessage', + 'printmessage2' : 'printmessage2', + 'printoutermon' : 'printOuterMon', + 'printslow' : 'printSlow', + 'printsprites' : 'printSprites', + 'printundermon' : 'printUnderMon', + 'processtrigger' : 'processTrigger', + 'purgealocation' : 'purgeALocation', + 'purgeanitem' : 'purgeAnItem', + 'putbackobstuff' : 'putBackObStuff', + 'putundercentre' : 'putUnderCentre', + 'putundermenu' : 'putUnderMenu', + 'putundertimed' : 'putUnderTimed', + 'putunderzoom' : 'putUnderZoom', + 'quickquit' : 'quickQuit', + 'quickquit2' : 'quickQuit2', + 'quitkey' : 'quitKey', + 'quitsymbol' : 'quitSymbol', + 'random' : 'random', + 'randomaccess' : 'randomAccess', + 'randomnum1' : 'randomNum1', + 'randomnum2' : 'randomNum2', + 'randomnumber' : 'randomNumber', + 'read' : 'read', + 'readabyte' : 'readAByte', + 'readcitypic' : 'readCityPic', + 'readdesticon' : 'readDestIcon', + 'readfromfile' : 'readFromFile', + 'readheader' : 'readHeader', + 'readkey' : 'readKey', + 'readmouse' : 'readMouse', + 'readmouse1' : 'readMouse1', + 'readmouse2' : 'readMouse2', + 'readmouse3' : 'readMouse3', + 'readmouse4' : 'readMouse4', + 'readoneblock' : 'readOneBlock', + 'readsetdata' : 'readSetData', + 'realcredits' : 'realCredits', + 'receptionist' : 'receptionist', + 'redes' : 'redes', + 'redrawmainscrn' : 'redrawMainScrn', + 'reelsonscreen' : 'reelsOnScreen', + 'reexfrominv' : 'reExFromInv', + 'reexfromopen' : 'reExFromOpen', + 'reminders' : 'reminders', + 'removeemm' : 'removeEMM', + 'removefreeobject' : 'removeFreeObject', + 'removeobfrominv' : 'removeObFromInv', + 'removesetobject' : 'removeSetObject', + 'resetkeyboard' : 'resetKeyboard', + 'resetlocation' : 'resetLocation', + 'restoreall' : 'restoreAll', + 'restoreems' : 'restoreEMS', + 'restorereels' : 'restoreReels', + 'rockstar' : 'rockstar', + 'rollem' : 'rollEm', + 'rollendcredits' : 'rollEndCredits', + 'rollendcredits2' : 'rollEndCredits2', + 'roomname' : 'roomName', + 'runendseq' : 'runEndSeq', + 'runintroseq' : 'runIntroSeq', + 'runtap' : 'runTap', + 'saveems' : 'saveEMS', + 'savefileread' : 'saveFileRead', + 'savefilewrite' : 'savefileWrite', + 'savegame' : 'saveGame', + 'saveload' : 'saveLoad', + 'saveposition' : 'savePosition', + 'saveseg' : 'saveSeg', + 'scanfornames' : 'scanForNames', + 'screenupdate' : 'screenUpdate', + 'scrollmonitor' : 'scrollMonitor', + 'searchforfiles' : 'searchForFiles', + 'searchforsame' : 'searchForSame', + 'searchforstring' : 'searchForString', + 'security' : 'security', + 'seecommandtail' : 'seeCommandTail', + 'selectlocation' : 'selectLocation', + 'selectob' : 'selectOb', + 'selectopenob' : 'selectOpenOb', + 'selectslot' : 'selectSlot', + 'selectslot2' : 'selectSlot2', + 'set16colpalette' : 'set16ColPalette', + 'setallchanges' : 'setAllChanges', + 'setbotleft' : 'setBotLeft', + 'setbotright' : 'setBotRight', + 'setkeyboardint' : 'setKeyboardInt', + 'setlocation' : 'setLocation', + 'setmode' : 'setMode', + 'setmouse' : 'setMouse', + 'setpickup' : 'setPickup', + 'setsoundoff' : 'setSoundOff', + 'settopleft' : 'setTopLeft', + 'settopright' : 'setTopRight', + 'setupemm' : 'setupEMM', + 'setuppit' : 'setupPit', + 'setuptimedtemp' : 'setupTimedTemp', + 'setuptimeduse' : 'setupTimedUse', + 'setwalk' : 'setWalk', + 'showallex' : 'showAllEx', + 'showallfree' : 'showAllFree', + 'showallobs' : 'showAllObs', + 'showarrows' : 'showArrows', + 'showblink' : 'showBlink', + 'showbyte' : 'showByte', + 'showcity' : 'showCity', + 'showcurrentfile' : 'showCurrentFile', + 'showdecisions' : 'showDecisions', + 'showdiary' : 'showDiary', + 'showdiarykeys' : 'showDiaryKeys', + 'showdiarypage' : 'showDiaryPage', + 'showdiscops' : 'showDiscOps', + 'showexit' : 'showExit', + 'showfirstuse' : 'showFirstUse', + 'showfolder' : 'showFolder', + 'showframe' : 'showFrame', + 'showgamereel' : 'showGameReel', + 'showgroup' : 'showGroup', + 'showgun' : 'showGun', + 'showicon' : 'showIcon', + 'showkeypad' : 'showKeypad', + 'showkeys' : 'showKeys', + 'showleftpage' : 'showLeftPage', + 'showloadops' : 'showLoadOps', + 'showmainops' : 'showMainOps', + 'showman' : 'showMan', + 'showmenu' : 'showMenu', + 'showmonk' : 'showMonk', + 'shownames' : 'showNames', + 'showopbox' : 'showOpBox', + 'showoutermenu' : 'showOuterMenu', + 'showouterpad' : 'showOuterPad', + 'showpanel' : 'showPanel', + 'showpcx' : 'showPCX', + 'showpointer' : 'showPointer', + 'showpuztext' : 'showPuzText', + 'showrain' : 'showRain', + 'showreelframe' : 'showReelFrame', + 'showrightpage' : 'showRightPage', + 'showryanpage' : 'showRyanPage', + 'showsaveops' : 'showSaveOps', + 'showseconduse' : 'showSecondUse', + 'showslots' : 'showSlots', + 'showsymbol' : 'showSymbol', + 'showtime' : 'showTime', + 'showwatch' : 'showWatch', + 'showword' : 'showWord', + 'signon' : 'signOn', + 'singlekey' : 'singleKey', + 'sitdowninbar' : 'sitDownInBar', + 'slabdoora' : 'sLabDoorA', + 'slabdoorb' : 'sLabDoorB', + 'slabdoorc' : 'sLabDoorC', + 'slabdoord' : 'sLabDoorD', + 'slabdoore' : 'sLabDoorE', + 'slabdoorf' : 'sLabDoorF', + 'smallcandle' : 'smallCandle', + 'smokebloke' : 'smokeBloke', + 'soldier1' : 'soldier1', + 'sortoutmap' : 'sortOutMap', + 'soundend' : 'soundEnd', + 'soundonreels' : 'soundOnReels', + 'soundstartup' : 'soundStartup', + 'sparky' : 'sparky', + 'sparkydrip' : 'sparkyDrip', + 'splitintolines' : 'splitIntoLines', + 'spriteupdate' : 'spriteUpdate', + 'standardload' : 'standardLoad', + 'startdmablock' : 'startDMABlock', + 'startloading' : 'startLoading', + 'startpaltoend' : 'startPalToEnd', + 'starttalk' : 'startTalk', + 'steady' : 'steady', + 'storeit' : 'storeIt', + 'swapwithinv' : 'swapWithInv', + 'swapwithopen' : 'swapWithOpen', + 'switchryanoff' : 'switchRyanOff', + 'switchryanon' : 'switchRyanOn', + 'talk' : 'talk', + 'tattooman' : 'tattooMan', + 'textforend' : 'textForEnd', + 'textformonk' : 'textForMonk', + 'titles' : 'titles', + 'train' : 'train', + 'transfercontoex' : 'transferConToEx', + 'transferinv' : 'transferInv', + 'transfermap' : 'transferMap', + 'transfertext' : 'transferText', + 'transfertoex' : 'transferToEx', + 'trapdoor' : 'trapDoor', + 'triggermessage' : 'triggerMessage', + 'trysoundalloc' : 'trySoundAlloc', + 'turnanypathoff' : 'turnAnyPathOff', + 'turnanypathon' : 'turnAnyPathOn', + 'turnonpower' : 'turnOnPower', + 'turnpathoff' : 'turnPathOff', + 'turnpathon' : 'turnPathOn', + 'twodigitnum' : 'twoDigitNum', + 'undertextline' : 'underTextLine', + 'updatepeople' : 'updatePeople', + 'updatesymbolbot' : 'updateSymbolBot', + 'updatesymboltop' : 'updateSymbolTop', + 'usealtar' : 'useAltar', + 'useaxe' : 'useAxe', + 'usebalcony' : 'useBalcony', + 'usebuttona' : 'useButtonA', + 'usecardreader1' : 'useCardReader1', + 'usecardreader2' : 'useCardReader2', + 'usecardreader3' : 'useCardReader3', + 'usecart' : 'useCart', + 'usecashcard' : 'useCashCard', + 'usecharset1' : 'useCharset1', + 'usechurchgate' : 'useChurchGate', + 'usechurchhole' : 'useChurchHole', + 'useclearbox' : 'useClearBox', + 'usecontrol' : 'useControl', + 'usecooker' : 'useCooker', + 'usecoveredbox' : 'useCoveredBox', + 'usediary' : 'useDiary', + 'usedryer' : 'useDryer', + 'useelevator1' : 'useElevator1', + 'useelevator2' : 'useElevator2', + 'useelevator3' : 'useElevator3', + 'useelevator4' : 'useElevator4', + 'useelevator5' : 'useElevator5', + 'useelvdoor' : 'useElvDoor', + 'usefullcart' : 'useFullCart', + 'usegun' : 'useGun', + 'usehandle' : 'useHandle', + 'usehatch' : 'useHatch', + 'usehole' : 'useHole', + 'usekey' : 'useKey', + 'useladder' : 'useLadder', + 'useladderb' : 'useLadderB', + 'uselighter' : 'useLighter', + 'usemenu' : 'useMenu', + 'usemon' : 'useMon', + 'useobject' : 'useObject', + 'useopenbox' : 'useOpenBox', + 'useopened' : 'useOpened', + 'usepipe' : 'usePipe', + 'useplate' : 'usePlate', + 'useplinth' : 'usePlinth', + 'usepoolreader' : 'usePoolReader', + 'userailing' : 'useRailing', + 'useroutine' : 'useRoutine', + 'useshield' : 'useShield', + 'useslab' : 'useSLab', + 'usestereo' : 'useStereo', + 'usetempcharset' : 'useTempCharset', + 'usetext' : 'useText', + 'usetimedtext' : 'useTimedText', + 'usetrainer' : 'useTrainer', + 'usewall' : 'useWall', + 'usewinch' : 'useWinch', + 'usewindow' : 'useWindow', + 'usewire' : 'useWire', + 'viewfolder' : 'viewFolder', + 'vsync' : 'vSync', + 'waitframes' : 'waitFrames', + 'walkandexamine' : 'walkAndExamine', + 'walkintoroom' : 'walkIntoRoom', + 'walktotext' : 'walkToText', + 'watchcount' : 'watchCount', + 'watchreel' : 'watchReel', + 'wearshades' : 'wearShades', + 'wearwatch' : 'wearWatch', + 'wheelsound' : 'wheelSound', + 'widedoor' : 'wideDoor', + 'withwhat' : 'withWhat', + 'worktoscreen' : 'workToScreen', + 'worktoscreenm' : 'workToScreenM', + 'wornerror' : 'wornError', + 'zoomicon' : 'zoomIcon', + 'zoomonoff' : 'zoomOnOff', + }) generator.generate('dreamweb') #start routine diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py index 61edb41fb2..686aea9ee9 100644 --- a/devtools/tasmrecover/tasm/cpp.py +++ b/devtools/tasmrecover/tasm/cpp.py @@ -33,7 +33,7 @@ def parse_bin(s): return v class cpp: - def __init__(self, context, namespace, skip_first = 0, blacklist = [], skip_output = []): + def __init__(self, context, namespace, skip_first = 0, blacklist = [], skip_output = [], skip_dispatch_call = False, skip_addr_constants = False, header_omit_blacklisted = False, function_name_remapping = { }): self.namespace = namespace fname = namespace.lower() + ".cpp" header = namespace.lower() + ".h" @@ -60,7 +60,6 @@ class cpp: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ - """ self.fd = open(fname, "wt") self.hd = open(header, "wt") @@ -68,9 +67,7 @@ class cpp: self.hd.write("""#ifndef %s #define %s -%s - -""" %(hid, hid, banner)) +%s""" %(hid, hid, banner)) self.context = context self.data_seg = context.binary_data self.procs = context.proc_list @@ -80,12 +77,15 @@ class cpp: self.blacklist = blacklist self.failed = list(blacklist) self.skip_output = skip_output + self.skip_dispatch_call = skip_dispatch_call + self.skip_addr_constants = skip_addr_constants + self.header_omit_blacklisted = header_omit_blacklisted + self.function_name_remapping = function_name_remapping self.translated = [] self.proc_addr = [] self.used_data_offsets = set() self.methods = [] self.fd.write("""%s - #include \"%s\" namespace %s { @@ -286,7 +286,10 @@ namespace %s { jump_proc = True if jump_proc: - return "{ %s(); return; }" %name + if name in self.function_name_remapping: + return "{ %s(); return; }" %self.function_name_remapping[name] + else: + return "{ %s(); return; }" %name else: # TODO: name or self.resolve_label(name) or self.mangle_label(name)?? if name in self.proc.retlabels: @@ -308,7 +311,10 @@ namespace %s { if name == 'ax': self.body += "\t__dispatch_call(%s);\n" %self.expand('ax', 2) return - self.body += "\t%s();\n" %name + if name in self.function_name_remapping: + self.body += "\t%s();\n" %self.function_name_remapping[name] + else: + self.body += "\t%s();\n" %name self.schedule(name) def _ret(self): @@ -499,7 +505,10 @@ namespace %s { self.proc_addr.append((name, self.proc.offset)) self.body = str() - self.body += "void %sContext::%s() {\n\tSTACK_CHECK;\n" %(self.namespace, name); + if name in self.function_name_remapping: + self.body += "void %sContext::%s() {\n\tSTACK_CHECK;\n" %(self.namespace, self.function_name_remapping[name]); + else: + self.body += "void %sContext::%s() {\n\tSTACK_CHECK;\n" %(self.namespace, name); self.proc.optimize() self.unbounded = [] self.proc.visit(self, skip) @@ -550,8 +559,11 @@ namespace %s { fd = open(fname, "wt") fd.write("namespace %s {\n" %self.namespace) for p in procs: - fd.write("void %sContext::%s() {\n\t::error(\"%s\");\n}\n\n" %(self.namespace, p, p)) - fd.write("} /*namespace %s */\n" %self.namespace) + if p in self.function_name_remapping: + fd.write("void %sContext::%s() {\n\t::error(\"%s\");\n}\n\n" %(self.namespace, self.function_name_remapping[p], self.function_name_remapping[p])) + else: + fd.write("void %sContext::%s() {\n\t::error(\"%s\");\n}\n\n" %(self.namespace, p, p)) + fd.write("} // End of namespace %s\n" %self.namespace) fd.close() @@ -578,7 +590,7 @@ namespace %s { self.fd.write("\n") self.fd.write("\n".join(self.translated)) - self.fd.write("\n\n") + self.fd.write("\n") print "%d ok, %d failed of %d, %.02g%% translated" %(done, failed, done + failed, 100.0 * done / (done + failed)) print "\n".join(self.failed) data_bin = self.data_seg @@ -596,26 +608,25 @@ namespace %s { elif (n & 0x3) == 0: comment += " " data_impl += "};\n\tds.assign(src, src + sizeof(src));\n" + self.hd.write( """\n#include "dreamweb/runtime.h" +#include "dreamweb/structs.h" +#include "dreamweb/dreambase.h" + namespace %s { -#include "structs.h" -class %sContext : public Context { -public: - void __start(); - void __dispatch_call(uint16 addr); -#include "stubs.h" // Allow hand-reversed functions to have a signature different than void f() -""" -%(self.namespace, self.namespace)) +""" +%(self.namespace)) - for name,addr in self.proc_addr: - self.hd.write("\tstatic const uint16 addr_%s = 0x%04x;\n" %(name, addr)) + if self.skip_addr_constants == False: + for name,addr in self.proc_addr: + self.hd.write("static const uint16 addr_%s = 0x%04x;\n" %(name, addr)) for name,addr in self.used_data_offsets: - self.hd.write("\tstatic const uint16 offset_%s = 0x%04x;\n" %(name, addr)) + self.hd.write("static const uint16 offset_%s = 0x%04x;\n" %(name, addr)) offsets = [] for k, v in self.context.get_globals().items(): @@ -626,24 +637,50 @@ public: offsets = sorted(offsets, key=lambda t: t[1]) for o in offsets: - self.hd.write("\tstatic const uint16 k%s = %s;\n" %o) + self.hd.write("static const uint16 k%s = %s;\n" %o) self.hd.write("\n") + + self.hd.write( +""" +class %sContext : public DreamBase, public Context { +public: + DreamGenContext(DreamWeb::DreamWebEngine *en) : DreamBase(en), Context(this) {} + + void __start(); +""" +%(self.namespace)) + if self.skip_dispatch_call == False: + self.hd.write( +""" void __dispatch_call(uint16 addr); +""") + self.hd.write( +"""#include "stubs.h" // Allow hand-reversed functions to have a signature different than void f() + +""") + + for p in set(self.methods): if p in self.blacklist: - self.hd.write("\t//void %s();\n" %p) + if self.header_omit_blacklisted == False: + self.hd.write("\t//void %s();\n" %p) else: - self.hd.write("\tvoid %s();\n" %p) + if p in self.function_name_remapping: + self.hd.write("\tvoid %s();\n" %self.function_name_remapping[p]) + else: + self.hd.write("\tvoid %s();\n" %p) - self.hd.write("};\n}\n\n#endif\n") + self.hd.write("};\n\n} // End of namespace DreamGen\n\n#endif\n") self.hd.close() - self.fd.write("\nvoid %sContext::__start() { %s%s(); \n}\n" %(self.namespace, data_impl, start)) + self.fd.write("void %sContext::__start() { %s\t%s(); \n}\n" %(self.namespace, data_impl, start)) - self.fd.write("\nvoid %sContext::__dispatch_call(uint16 addr) {\n\tswitch(addr) {\n" %self.namespace) - self.proc_addr.sort(cmp = lambda x, y: x[1] - y[1]) - for name,addr in self.proc_addr: - self.fd.write("\t\tcase addr_%s: %s(); break;\n" %(name, name)) - self.fd.write("\t\tdefault: ::error(\"invalid call to %04x dispatched\", (uint16)ax);") - self.fd.write("\n\t}\n}\n\n} /*namespace*/\n") - + if self.skip_dispatch_call == False: + self.fd.write("\nvoid %sContext::__dispatch_call(uint16 addr) {\n\tswitch(addr) {\n" %self.namespace) + self.proc_addr.sort(cmp = lambda x, y: x[1] - y[1]) + for name,addr in self.proc_addr: + self.fd.write("\t\tcase addr_%s: %s(); break;\n" %(name, name)) + self.fd.write("\t\tdefault: ::error(\"invalid call to %04x dispatched\", (uint16)ax);") + self.fd.write("\n\t}\n}") + + self.fd.write("\n} // End of namespace DreamGen\n") self.fd.close() diff --git a/devtools/tasmrecover/tasm/parser.py b/devtools/tasmrecover/tasm/parser.py index ebbd714cf4..6fd3567b01 100644 --- a/devtools/tasmrecover/tasm/parser.py +++ b/devtools/tasmrecover/tasm/parser.py @@ -25,7 +25,8 @@ import lex import op class parser: - def __init__(self): + def __init__(self, skip_binary_data = []): + self.skip_binary_data = skip_binary_data self.strip_path = 0 self.__globals = {} self.__offsets = {} @@ -186,6 +187,7 @@ class parser: def parse(self, fname): # print "opening file %s..." %(fname, basedir) + skipping_binary_data = False fd = open(fname, 'rb') for line in fd: line = line.strip() @@ -198,10 +200,15 @@ class parser: line = line[len(m.group(0)):].strip() if self.visible(): name = m.group(1) - if self.proc is not None: - self.proc.add_label(name) - print "offset %s -> %d" %(name, len(self.binary_data)) - self.set_offset(name, (len(self.binary_data), self.proc, len(self.proc.stmts) if self.proc is not None else 0)) + if not (name.lower() in self.skip_binary_data): + if self.proc is not None: + self.proc.add_label(name) + print "offset %s -> %d" %(name, len(self.binary_data)) + self.set_offset(name, (len(self.binary_data), self.proc, len(self.proc.stmts) if self.proc is not None else 0)) + skipping_binary_data = False + else: + print "skipping binary data for %s" % (name,) + skipping_binary_data = True #print line cmd = line.split() @@ -224,9 +231,10 @@ class parser: if cmd0 == 'db' or cmd0 == 'dw' or cmd0 == 'dd': arg = line[len(cmd0):].strip() - print "%d:1: %s" %(len(self.binary_data), arg) #fixme: COPYPASTE - binary_width = {'b': 1, 'w': 2, 'd': 4}[cmd0[1]] - self.binary_data += self.compact_data(binary_width, lex.parse_args(arg)) + if not skipping_binary_data: + print "%d:1: %s" %(len(self.binary_data), arg) #fixme: COPYPASTE + binary_width = {'b': 1, 'w': 2, 'd': 4}[cmd0[1]] + self.binary_data += self.compact_data(binary_width, lex.parse_args(arg)) continue elif cmd0 == 'include': self.include(os.path.dirname(fname), cmd[1]) @@ -248,13 +256,18 @@ class parser: v = cmd[2] self.set_global(cmd0, op.const(self.fix_dollar(v))) elif cmd1 == 'db' or cmd1 == 'dw' or cmd1 == 'dd': - binary_width = {'b': 1, 'w': 2, 'd': 4}[cmd1[1]] - offset = len(self.binary_data) - arg = line[len(cmd0):].strip() - arg = arg[len(cmd1):].strip() - print "%d: %s" %(offset, arg) - self.binary_data += self.compact_data(binary_width, lex.parse_args(arg)) - self.set_global(cmd0.lower(), op.var(binary_width, offset)) + if not (cmd0.lower() in self.skip_binary_data): + binary_width = {'b': 1, 'w': 2, 'd': 4}[cmd1[1]] + offset = len(self.binary_data) + arg = line[len(cmd0):].strip() + arg = arg[len(cmd1):].strip() + print "%d: %s" %(offset, arg) + self.binary_data += self.compact_data(binary_width, lex.parse_args(arg)) + self.set_global(cmd0.lower(), op.var(binary_width, offset)) + skipping_binary_data = False + else: + print "skipping binary data for %s" % (cmd0.lower(),) + skipping_binary_data = True continue elif cmd1 == 'proc': name = cmd0.lower() |