aboutsummaryrefslogtreecommitdiff
path: root/devtools
diff options
context:
space:
mode:
Diffstat (limited to 'devtools')
-rw-r--r--devtools/create_macventure/AltBox_act.bmpbin0 -> 822 bytes
-rw-r--r--devtools/create_macventure/AltBox_inac.bmpbin0 -> 822 bytes
-rw-r--r--devtools/create_macventure/InvWindow_act.bmpbin0 -> 16686 bytes
-rw-r--r--devtools/create_macventure/InvWindow_inac.bmpbin0 -> 8414 bytes
-rw-r--r--devtools/create_macventure/NoGrowDoc_act.bmpbin0 -> 8622 bytes
-rw-r--r--devtools/create_macventure/NoGrowDoc_inac.bmpbin0 -> 8622 bytes
-rw-r--r--devtools/create_macventure/PlainDBox_act.bmpbin0 -> 6966 bytes
-rw-r--r--devtools/create_macventure/PlainDBox_inac.bmpbin0 -> 6966 bytes
-rw-r--r--devtools/create_macventure/RDoc4_act.bmpbin0 -> 8694 bytes
-rw-r--r--devtools/create_macventure/RDoc4_inac.bmpbin0 -> 8694 bytes
-rw-r--r--devtools/create_macventure/ZoomDoc_act.bmpbin0 -> 11302 bytes
-rw-r--r--devtools/create_macventure/ZoomDoc_inac.bmpbin0 -> 8622 bytes
-rwxr-xr-xdevtools/create_macventure/create_macventure.sh8
-rw-r--r--devtools/create_project/cmake.cpp4
-rw-r--r--devtools/create_project/create_project.cpp17
-rw-r--r--devtools/create_project/create_project.h2
-rw-r--r--devtools/create_titanic/create_titanic_dat.cpp338
-rwxr-xr-xdevtools/credits.pl8
-rw-r--r--devtools/md5table.c4
-rw-r--r--devtools/sci/scitrace.asm4
-rw-r--r--devtools/tasmrecover/tasm/cpp.py64
21 files changed, 346 insertions, 103 deletions
diff --git a/devtools/create_macventure/AltBox_act.bmp b/devtools/create_macventure/AltBox_act.bmp
new file mode 100644
index 0000000000..aa9fa7e841
--- /dev/null
+++ b/devtools/create_macventure/AltBox_act.bmp
Binary files differ
diff --git a/devtools/create_macventure/AltBox_inac.bmp b/devtools/create_macventure/AltBox_inac.bmp
new file mode 100644
index 0000000000..aa9fa7e841
--- /dev/null
+++ b/devtools/create_macventure/AltBox_inac.bmp
Binary files differ
diff --git a/devtools/create_macventure/InvWindow_act.bmp b/devtools/create_macventure/InvWindow_act.bmp
new file mode 100644
index 0000000000..a38b0a9834
--- /dev/null
+++ b/devtools/create_macventure/InvWindow_act.bmp
Binary files differ
diff --git a/devtools/create_macventure/InvWindow_inac.bmp b/devtools/create_macventure/InvWindow_inac.bmp
new file mode 100644
index 0000000000..f3f2cfaa8b
--- /dev/null
+++ b/devtools/create_macventure/InvWindow_inac.bmp
Binary files differ
diff --git a/devtools/create_macventure/NoGrowDoc_act.bmp b/devtools/create_macventure/NoGrowDoc_act.bmp
new file mode 100644
index 0000000000..3570e798d9
--- /dev/null
+++ b/devtools/create_macventure/NoGrowDoc_act.bmp
Binary files differ
diff --git a/devtools/create_macventure/NoGrowDoc_inac.bmp b/devtools/create_macventure/NoGrowDoc_inac.bmp
new file mode 100644
index 0000000000..f3f97652e5
--- /dev/null
+++ b/devtools/create_macventure/NoGrowDoc_inac.bmp
Binary files differ
diff --git a/devtools/create_macventure/PlainDBox_act.bmp b/devtools/create_macventure/PlainDBox_act.bmp
new file mode 100644
index 0000000000..6521080588
--- /dev/null
+++ b/devtools/create_macventure/PlainDBox_act.bmp
Binary files differ
diff --git a/devtools/create_macventure/PlainDBox_inac.bmp b/devtools/create_macventure/PlainDBox_inac.bmp
new file mode 100644
index 0000000000..6521080588
--- /dev/null
+++ b/devtools/create_macventure/PlainDBox_inac.bmp
Binary files differ
diff --git a/devtools/create_macventure/RDoc4_act.bmp b/devtools/create_macventure/RDoc4_act.bmp
new file mode 100644
index 0000000000..ab78661359
--- /dev/null
+++ b/devtools/create_macventure/RDoc4_act.bmp
Binary files differ
diff --git a/devtools/create_macventure/RDoc4_inac.bmp b/devtools/create_macventure/RDoc4_inac.bmp
new file mode 100644
index 0000000000..ab78661359
--- /dev/null
+++ b/devtools/create_macventure/RDoc4_inac.bmp
Binary files differ
diff --git a/devtools/create_macventure/ZoomDoc_act.bmp b/devtools/create_macventure/ZoomDoc_act.bmp
new file mode 100644
index 0000000000..b2ccc9c602
--- /dev/null
+++ b/devtools/create_macventure/ZoomDoc_act.bmp
Binary files differ
diff --git a/devtools/create_macventure/ZoomDoc_inac.bmp b/devtools/create_macventure/ZoomDoc_inac.bmp
new file mode 100644
index 0000000000..963949b392
--- /dev/null
+++ b/devtools/create_macventure/ZoomDoc_inac.bmp
Binary files differ
diff --git a/devtools/create_macventure/create_macventure.sh b/devtools/create_macventure/create_macventure.sh
new file mode 100755
index 0000000000..1408179039
--- /dev/null
+++ b/devtools/create_macventure/create_macventure.sh
@@ -0,0 +1,8 @@
+printf "Creating border file...\n"
+
+zip -r macventure.zip *.bmp
+mv macventure.zip macventure.dat
+
+echo done
+
+ls -l macventure.dat
diff --git a/devtools/create_project/cmake.cpp b/devtools/create_project/cmake.cpp
index 1423e686be..fad9a28367 100644
--- a/devtools/create_project/cmake.cpp
+++ b/devtools/create_project/cmake.cpp
@@ -48,7 +48,9 @@ const CMakeProvider::Library *CMakeProvider::getLibraryFromFeature(const char *f
{ "vorbis", 0, 0, 0, 0, "vorbisfile vorbis ogg" },
{ "theora", 0, 0, 0, 0, "theoradec" },
{ "fluidsynth",0, 0, 0, 0, "fluidsynth" },
- { "faad", 0, 0, 0, 0, "faad" }
+ { "faad", 0, 0, 0, 0, "faad" },
+ { "libcurl", "FindCURL", "CURL", "CURL_INCLUDE_DIRS", "CURL_LIBRARIES", 0 },
+ { "sdlnet", "FindSDL_net", "SDL_net", "SDL_NET_INCLUDE_DIRS", "SDL_NET_LIBRARIES", 0 }
};
for (unsigned int i = 0; i < sizeof(s_libraries) / sizeof(s_libraries[0]); i++) {
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp
index 8841eaa73d..91690c2128 100644
--- a/devtools/create_project/create_project.cpp
+++ b/devtools/create_project/create_project.cpp
@@ -284,8 +284,8 @@ int main(int argc, char *argv[]) {
setup.devTools = true;
} else if (!std::strcmp(argv[i], "--tests")) {
setup.tests = true;
- } else if (!std::strcmp(argv[i], "--sdl2")) {
- setup.useSDL2 = true;
+ } else if (!std::strcmp(argv[i], "--sdl1")) {
+ setup.useSDL2 = false;
} else {
std::cerr << "ERROR: Unknown parameter \"" << argv[i] << "\"\n";
return -1;
@@ -700,7 +700,7 @@ void displayHelp(const char *exe) {
" --disable-<name> disable inclusion of the feature \"name\"\n"
"\n"
"SDL settings:\n"
- " --sdl2 link to SDL 2.0, instead of SDL 1.2\n"
+ " --sdl1 link to SDL 1.2, instead of SDL 2.0\n"
"\n"
" There are the following features available:\n"
"\n";
@@ -1000,10 +1000,12 @@ const Feature s_features[] = {
{ "png", "USE_PNG", "libpng16", true, "libpng support" },
{ "faad", "USE_FAAD", "libfaad", false, "AAC support" },
{ "mpeg2", "USE_MPEG2", "libmpeg2", false, "MPEG-2 support" },
- { "theora", "USE_THEORADEC", "libtheora_static", true, "Theora decoding support" },
- { "freetype", "USE_FREETYPE2", "freetype", true, "FreeType support" },
- { "jpeg", "USE_JPEG", "jpeg-static", true, "libjpeg support" },
- {"fluidsynth", "USE_FLUIDSYNTH", "libfluidsynth", true, "FluidSynth support" },
+ { "theora", "USE_THEORADEC", "libtheora_static", true, "Theora decoding support" },
+ { "freetype", "USE_FREETYPE2", "freetype", true, "FreeType support" },
+ { "jpeg", "USE_JPEG", "jpeg-static", true, "libjpeg support" },
+ {"fluidsynth", "USE_FLUIDSYNTH", "libfluidsynth", true, "FluidSynth support" },
+ { "libcurl", "USE_LIBCURL", "libcurl", true, "libcurl support" },
+ { "sdlnet", "USE_SDL_NET", "SDL_net", true, "SDL_net support" },
// Feature flags
{ "bink", "USE_BINK", "", true, "Bink video support" },
@@ -1015,6 +1017,7 @@ const Feature s_features[] = {
{ "opengl", "USE_OPENGL", "", true, "OpenGL support" },
{ "opengles", "USE_GLES", "", true, "forced OpenGL ES mode" },
{ "taskbar", "USE_TASKBAR", "", true, "Taskbar integration support" },
+ { "cloud", "USE_CLOUD", "", true, "Cloud integration support" },
{ "translation", "USE_TRANSLATION", "", true, "Translation support" },
{ "vkeybd", "ENABLE_VKEYBD", "", false, "Virtual keyboard support"},
{ "keymapper", "ENABLE_KEYMAPPER", "", false, "Keymapper support"},
diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h
index 1e417d485b..bd0dcf6be9 100644
--- a/devtools/create_project/create_project.h
+++ b/devtools/create_project/create_project.h
@@ -239,7 +239,7 @@ struct BuildSetup {
tests = false;
runBuildEvents = false;
createInstaller = false;
- useSDL2 = false;
+ useSDL2 = true;
}
};
diff --git a/devtools/create_titanic/create_titanic_dat.cpp b/devtools/create_titanic/create_titanic_dat.cpp
index 8e1584f675..61e5de1149 100644
--- a/devtools/create_titanic/create_titanic_dat.cpp
+++ b/devtools/create_titanic/create_titanic_dat.cpp
@@ -62,19 +62,24 @@ Common::PEResources res;
uint headerOffset = 6;
uint dataOffset = HEADER_SIZE;
-#define ENGLISH_GOG_FILESIZE 4099072
-#define ENGLISH_ORIG_FILESIZE 4095488
+#define ENGLISH_10042C_FILESIZE 4099072
+#define ENGLISH_10042B_FILESIZE 4095488
+#define ENGLISH_10042_FILESIZE 4094976
enum {
- ENGLISH_ORIG_DIFF = 0x401400,
- ENGLISH_GOG_DIFF = 0x401C00
+ ENGLISH_10042C_DIFF = 0x401C00,
+ ENGLISH_10042B_DIFF = 0x401400,
+ ENGLISH_10042_DIFF = 0x402000
};
enum Version {
- ENGLISH_GOG = 0,
- ENGLISH_ORIG = 1
+ ENGLISH_10042C = 0,
+ ENGLISH_10042B = 1,
+ ENGLISH_10042 = 2
};
Version _version;
-const int FILE_DIFF[2] = { ENGLISH_GOG_DIFF, ENGLISH_ORIG_DIFF };
+const int FILE_DIFF[3] = {
+ ENGLISH_10042C_DIFF, ENGLISH_10042B_DIFF, ENGLISH_10042_DIFF
+};
static const char *const ITEM_NAMES[46] = {
"LeftArmWith", "LeftArmWithout", "RightArmWith", "RightArmWithout", "BridgeRed",
@@ -280,6 +285,136 @@ static const FrameRange BARBOT_FRAME_RANGES[60] = {
{ 202, 281 }, { 182, 202 }, { 165, 182 }, { 96, 165 }, { 0, 95 }
};
+static const char *const MISSIVEOMAT_MESSAGES[3] = {
+ "Welcome, Leovinus.\n"
+ "\n"
+ "This is your Missive-O-Mat.\n"
+ "\n"
+ "You have received 1827 Electric Missives.\n"
+ "\n"
+ "For your convenience I have deleted:\n"
+ " 453 things that people you don't know thought it would be "
+ "terribly witty to forward to you,\n"
+ " 63 Missives containing double or triple exclamation marks,\n"
+ " 846 Missives from mailing-lists you once thought might be quite "
+ "interesting and now can't figure out how to cancel,\n"
+ " 962 Chain Missives,\n"
+ " 1034 instructions on how to become a millionaire using butter,\n"
+ " 3 Yassaccan Death Threats (slightly down on last week which is"
+ " pleasing news),\n"
+ " and a Missive from your Mother which I have answered reassuringly.\n"
+ "\n"
+ "I have selected the following Missives for your particular attention. "
+ "You will not need to run Fib-Finder to see why. Something Is Up and I "
+ "suspect those two slippery urchins Brobostigon and Scraliontis are behind it.",
+
+ "Hello Droot. I have evaluated your recent missives.\n"
+ "Contents break down as follows:\n"
+ "\n"
+ "Good news 49%\n"
+ "Bad news 48%\n"
+ "Indifferent news 4%\n"
+ "Petty mailings and Family Missives 5%\n"
+ "Special Offers from the Blerontin Sand Society 1% (note - there's"
+ " a rather pretty dune for hire on p4)\n"
+ "\n"
+ "In general terms you Thrive. You continue to Prosper. Your shares are"
+ " Secure. Your hair, as always, looks Good. Carpet 14 needs cleaning. \n"
+ "\n"
+ "I am pleased to report there have been no further comments about "
+ "foot odor.\n"
+ "\n"
+ "Recommend urgently you sell all fish paste shares as Market jittery.\n"
+ "\n"
+ "As your Great Scheme nears completion I have taken the liberty of"
+ " replying to all non-urgent Missives and list below only communic"
+ "ations with Manager Brobostigon and His Pain in the Ass Loftiness"
+ " Leovinus. \n"
+ "\n"
+ "Beware - Leovinus grows suspicious. Don't take your eye off B"
+ "robostigon. \n"
+ "\n"
+ "Weather for the Launch tomorrow is bright and sunny. Hazy clouds"
+ " will be turned on at eleven. I suggest the red suit with the st"
+ "reamers.\n"
+ "\n"
+ "All money transfers will be completed through alias accounts by m"
+ "oonsup.\n"
+ "\n"
+ "Eat well. Your fish levels are down and you may suffer indecisio"
+ "n flutters mid-morning.\n"
+ "\n"
+ "Here are your Missives...",
+
+ "Hello Antar, this is your Missive-o-Mat.\n"
+ "Not that you need reminding but today is the Glorious Dawning of "
+ "a New Age in Luxury Space Travel.\n"
+ "\n"
+ "Generally my assessment of your position this morning is that you"
+ " are well, albeit not as rich as you would like to be. I hope yo"
+ "ur interesting collaboration with Mr Scraliontis will soon bear f"
+ "ruit. \n"
+ "\n"
+ "I trust your flatulence has eased during the night. Such a distr"
+ "essing condition for a man in your position.\n"
+ "\n"
+ "Most of your Missives are routine construction matters which I ha"
+ "ve dealt with and deleted. All Missives from Mr Scraliontis and "
+ "His Loftiness Leovinus are here."
+};
+
+struct BedheadEntry {
+ const char *_name1;
+ const char *_name2;
+ const char *_name3;
+ const char *_name4;
+ int _startFrame;
+ int _endFrame;
+};
+
+static const BedheadEntry ON_CLOSED[4] = {
+ { "Closed", "Closed", "Open", "Open", 0, 12 },
+ { "Open", "Any", "Any", "RestingUTV", 0, 4 },
+ { "Closed", "Open", "Any", "RestingV", 0, 6 },
+ { "Closed", "Closed", "Closed", "RestingG", 0, 21 }
+};
+static const BedheadEntry ON_RESTING_TV[2] = {
+ { "Any", "Closed", "Open", "Open", 6, 12 },
+ { "Any", "Closed", "Closed", "RestingG", 6, 21 }
+};
+static const BedheadEntry ON_RESTING_UV[2] = {
+ { "Any", "Any", "Open", "Open", 8, 12 },
+ { "Any", "Any", "Closed", "RestingG", 8, 21 }
+};
+static const BedheadEntry ON_CLOSED_WRONG[2] = {
+ { "Any", "Any", "Closed", "OpenWrong", 42, 56 },
+ { "Any", "Any", "Open", "RestingDWrong", 42, 52 }
+};
+
+static const BedheadEntry OFF_OPEN[3] = {
+ { "Closed", "Closed", "Open", "Closed", 27, 41 },
+ { "Any", "Open", "Any", "RestingUV", 27, 29 },
+ { "Open", "Closed", "Any", "RestingTV", 27, 33 }
+};
+static const BedheadEntry OFF_RESTING_UTV[1] = {
+ { "Any", "Any", "Any", "Closed", 36, 41 }
+};
+static const BedheadEntry OFF_RESTING_V[1] = {
+ { "Closed", "Any", "Any", "Closed", 32, 41 }
+};
+static const BedheadEntry OFF_RESTING_G[3] = {
+ { "Closed", "Closed", "Closed", "Closed", 21, 41 },
+ { "Any", "Open", "Closed", "RestingUV", 21, 29 },
+ { "Open", "Closed", "Closed", "RestingTV", 21, 33 }
+};
+static const BedheadEntry OFF_OPEN_WRONG[1] = {
+ { "Any", "Any", "Any", "ClosedWrong", 56, 70 }
+};
+static const BedheadEntry OFF_RESTING_D_WRONG[1] = {
+ { "Any", "Any", "Any", "ClosedWrong", 59, 70 }
+};
+
+
void NORETURN_PRE error(const char *s, ...) {
printf("%s\n", s);
exit(1);
@@ -305,7 +440,7 @@ void writeFinalEntryHeader() {
void writeStringArray(const char *name, uint offset, int count) {
outputFile.seek(dataOffset);
- inputFile.seek(offset);
+ inputFile.seek(offset - FILE_DIFF[_version]);
uint *offsets = new uint[count];
for (int idx = 0; idx < count; ++idx)
offsets[idx] = inputFile.readLong();
@@ -443,7 +578,7 @@ void writeString(uint offset) {
void writeResponseTree() {
outputFile.seek(dataOffset);
- const int OFFSETS[2] = { 0x619520, 0x618340 };
+ const int OFFSETS[3] = { 0x619520, 0x618340, 0x617380 };
for (int idx = 0; idx < 1022; ++idx) {
inputFile.seek(OFFSETS[_version] - FILE_DIFF[_version] + idx * 8);
uint id = inputFile.readLong();
@@ -558,7 +693,7 @@ void writeSentenceMappings(const char *name, uint offset, int numValues) {
void writeStarfieldPoints() {
outputFile.seek(dataOffset);
- const int OFFSETS[2] = { 0x59DE4C, 0x59DBEC };
+ const int OFFSETS[3] = { 0x59DE4C, 0x59DBEC, 0x59CC1C };
inputFile.seek(OFFSETS[_version] - FILE_DIFF[_version]);
uint size = 876 * 12;
@@ -570,7 +705,7 @@ void writeStarfieldPoints() {
void writeStarfieldPoints2() {
outputFile.seek(dataOffset);
- const int OFFSETS[2] = { 0x5A2F28, 0x5A2CC8 };
+ const int OFFSETS[3] = { 0x5A2F28, 0x5A2CC8, 0x5A1CF8 };
for (int rootCtr = 0; rootCtr < 80; ++rootCtr) {
inputFile.seek(OFFSETS[_version] - FILE_DIFF[_version] + rootCtr * 8);
uint offset = inputFile.readUint32LE();
@@ -614,6 +749,86 @@ void writeBarbotFrameRanges() {
dataOffset += size;
}
+void writeMissiveOMatMessages() {
+ outputFile.seek(dataOffset);
+
+ for (int idx = 0; idx < 3; ++idx)
+ outputFile.writeString(MISSIVEOMAT_MESSAGES[idx]);
+
+ uint size = outputFile.size() - dataOffset;
+ writeEntryHeader("TEXT/MISSIVEOMAT/WELCOME", dataOffset, size);
+ dataOffset += size;
+
+ static const int MESSAGES[3] = { 0x5A63C0, 0x5A5BA8, 0x5A4A18 };
+ writeStringArray("TEXT/MISSIVEOMAT/MESSAGES", MESSAGES[_version], 58);
+ static const int FROM[3] = { 0x5A61F0, 0x5A59D8, 0x5A4BE8 };
+ writeStringArray("TEXT/MISSIVEOMAT/FROM", FROM[_version], 58);
+ static const int TO[3] = { 0x5A62D8, 0x5A5AC0, 0x5A4B00 };
+ writeStringArray("TEXT/MISSIVEOMAT/TO", TO[_version], 58);
+}
+
+void writeBedheadGroup(const BedheadEntry *data, int count) {
+ for (int idx = 0; idx < count; ++idx, ++data) {
+ outputFile.writeString(data->_name1);
+ outputFile.writeString(data->_name2);
+ outputFile.writeString(data->_name3);
+ outputFile.writeString(data->_name4);
+ outputFile.writeLong(data->_startFrame);
+ outputFile.writeLong(data->_endFrame);
+ }
+}
+
+void writeBedheadData() {
+ outputFile.seek(dataOffset);
+
+ writeBedheadGroup(ON_CLOSED, 4);
+ writeBedheadGroup(ON_RESTING_TV, 2);
+ writeBedheadGroup(ON_RESTING_UV, 2);
+ writeBedheadGroup(ON_CLOSED_WRONG, 2);
+ writeBedheadGroup(OFF_OPEN, 3);
+ writeBedheadGroup(OFF_RESTING_UTV, 1);
+ writeBedheadGroup(OFF_RESTING_V, 1);
+ writeBedheadGroup(OFF_RESTING_G, 3);
+ writeBedheadGroup(OFF_OPEN_WRONG, 1);
+ writeBedheadGroup(OFF_RESTING_D_WRONG, 1);
+
+ uint size = outputFile.size() - dataOffset;
+ writeEntryHeader("DATA/BEDHEAD", dataOffset, size);
+ dataOffset += size;
+}
+
+void writeParrotLobbyLinkUpdaterEntries() {
+ static const int OFFSETS[3] = { 0x5A5B38, 0x5A5320, 0x5A4360 };
+ static const int COUNTS[5] = { 7, 5, 6, 9, 1 };
+ static const int SKIP[5] = { 36, 36, 40, 36, 0 };
+ uint recordOffset = OFFSETS[_version], linkOffset;
+ byte vals[8];
+
+ outputFile.seek(dataOffset);
+
+ for (int groupNum = 0; groupNum < 4; ++groupNum) {
+ for (int entryNum = 0; entryNum < COUNTS[groupNum];
+ ++entryNum, recordOffset += 36) {
+ inputFile.seek(recordOffset - FILE_DIFF[_version]);
+ linkOffset = inputFile.readUint32LE();
+ for (int idx = 0; idx < 8; ++idx)
+ vals[idx] = inputFile.readUint32LE();
+
+ // Write out the entry
+ inputFile.seek(linkOffset - FILE_DIFF[_version]);
+ outputFile.writeString(inputFile);
+ outputFile.write(vals, 8);
+ }
+
+ // Skip space between groups
+ recordOffset += SKIP[groupNum];
+ }
+
+ uint size = outputFile.size() - dataOffset;
+ writeEntryHeader("DATA/PARROT_LOBBY_LINK_UPDATOR", dataOffset, size);
+ dataOffset += size;
+}
+
void writeHeader() {
// Write out magic string
const char *MAGIC_STR = "SVTN";
@@ -655,27 +870,32 @@ void writeData() {
writeStringArray("TEXT/ITEM_IDS", ITEM_IDS, 40);
writeStringArray("TEXT/ROOM_NAMES", ROOM_NAMES, 34);
- const int TEXT_PHRASES[2] = { 0x21B7C8, 0x21ADA0 };
- const int TEXT_REPLACEMENTS1[2] = { 0x21BDB0, 0x21B388 };
- const int TEXT_REPLACEMENTS2[2] = { 0x21C120, 0x21B6F8 };
- const int TEXT_REPLACEMENTS3[2] = { 0x21D9C8, 0x21CFA0 };
- const int TEXT_PRONOUNS[2] = { 0x22F718, 0x22ECF8 };
+ const int TEXT_PHRASES[3] = { 0x61D3C8, 0x618340, 0x61B1E0 };
+ const int TEXT_REPLACEMENTS1[3] = { 0x61D9B0, 0x61C788, 0x61B7C8 };
+ const int TEXT_REPLACEMENTS2[3] = { 0x61DD20, 0x61CAF8, 0x61BB38 };
+ const int TEXT_REPLACEMENTS3[3] = { 0x61F5C8, 0x61E3A0, 0x61D3E0 };
+ const int TEXT_PRONOUNS[3] = { 0x631318, 0x6300F8, 0x62F138 };
writeStringArray("TEXT/PHRASES", TEXT_PHRASES[_version], 376);
writeStringArray("TEXT/REPLACEMENTS1", TEXT_REPLACEMENTS1[_version], 218);
writeStringArray("TEXT/REPLACEMENTS2", TEXT_REPLACEMENTS2[_version], 1576);
writeStringArray("TEXT/REPLACEMENTS3", TEXT_REPLACEMENTS3[_version], 82);
writeStringArray("TEXT/PRONOUNS", TEXT_PRONOUNS[_version], 15);
- const int SENTENCES_DEFAULT[2] = { 0x5C0130, 0x5BEFC8 };
- const int SENTENCES_BARBOT[2][2] = { { 0x5ABE60, 0x5AACF8 }, { 0x5BD4E8, 0x5BC380 } };
- const int SENTENCES_BELLBOT[21][2] = {
- { 0x5C2230, 0x5C10C8 }, { 0x5D1670, 0x5D0508 }, { 0x5D1A80, 0x5D0918 },
- { 0x5D1AE8, 0x5D0980 }, { 0x5D1B88, 0x5D0A20 }, { 0x5D2A60, 0x5D18F8 },
- { 0x5D2CD0, 0x5D1B68 }, { 0x5D3488, 0x5D2320 }, { 0x5D3900, 0x5D2798 },
- { 0x5D3968, 0x5D2800 }, { 0x5D4668, 0x5D3500 }, { 0x5D47A0, 0x5D3638 },
- { 0x5D4EC0, 0x5D3D58 }, { 0x5D5100, 0x5D3F98 }, { 0x5D5370, 0x5D4208 },
- { 0x5D5548, 0x5D43E0 }, { 0x5D56B8, 0x5D4550 }, { 0x5D57C0, 0x5D4658 },
- { 0x5D5B38, 0x5D49D0 }, { 0x5D61B8, 0x5D5050 }
+ const int SENTENCES_DEFAULT[3] = { 0x5C0130, 0x5BEFC8, 0x5BE008 };
+ const int SENTENCES_BARBOT[2][3] = {
+ { 0x5ABE60, 0x5AACF8, 0x5A9D38 }, { 0x5BD4E8, 0x5BC380, 0x5BB3C0 }
+ };
+ const int SENTENCES_BELLBOT[20][3] = {
+ { 0x5C2230, 0x5C10C8, 0X5C0108 }, { 0x5D1670, 0x5D0508, 0x5CF548 },
+ { 0x5D1A80, 0x5D0918, 0x5CF958 }, { 0x5D1AE8, 0x5D0980, 0x5CF9C0 },
+ { 0x5D1B88, 0x5D0A20, 0x5CFA60 }, { 0x5D2A60, 0x5D18F8, 0x5D0938 },
+ { 0x5D2CD0, 0x5D1B68, 0x5D0BA8 }, { 0x5D3488, 0x5D2320, 0x5D1360 },
+ { 0x5D3900, 0x5D2798, 0x5D17D8 }, { 0x5D3968, 0x5D2800, 0x5D1840 },
+ { 0x5D4668, 0x5D3500, 0x5D2540 }, { 0x5D47A0, 0x5D3638, 0x5D2678 },
+ { 0x5D4EC0, 0x5D3D58, 0x5D2D98 }, { 0x5D5100, 0x5D3F98, 0x5D2FD8 },
+ { 0x5D5370, 0x5D4208, 0x5D3248 }, { 0x5D5548, 0x5D43E0, 0x5D3420 },
+ { 0x5D56B8, 0x5D4550, 0x5D3590 }, { 0x5D57C0, 0x5D4658, 0x5D3698 },
+ { 0x5D5B38, 0x5D49D0, 0x5D3A10 }, { 0x5D61B8, 0x5D5050, 0x5D4090 }
};
writeSentenceEntries("Sentences/Default", SENTENCES_DEFAULT[_version]);
writeSentenceEntries("Sentences/Barbot", SENTENCES_BARBOT[0][_version]);
@@ -701,18 +921,21 @@ void writeData() {
writeSentenceEntries("Sentences/Bellbot/18", SENTENCES_BELLBOT[18][_version]);
writeSentenceEntries("Sentences/Bellbot/19", SENTENCES_BELLBOT[19][_version]);
- const int SENTENCES_DESKBOT[3][2] = {
- { 0x5DCD10, 0x5DBBA8 }, { 0x5E8E18, 0x5E7CB0 }, { 0x5E8BA8, 0x5E7A40 }
+ const int SENTENCES_DESKBOT[3][3] = {
+ { 0x5DCD10, 0x5DBBA8, 0x5DABE8 }, { 0x5E8E18, 0x5E7CB0, 0x5E6CF0 },
+ { 0x5E8BA8, 0x5E7A40, 0x5E6A80 }
};
writeSentenceEntries("Sentences/Deskbot", SENTENCES_DESKBOT[0][_version]);
writeSentenceEntries("Sentences/Deskbot/2", SENTENCES_DESKBOT[1][_version]);
writeSentenceEntries("Sentences/Deskbot/3", SENTENCES_DESKBOT[2][_version]);
- const int SENTENCES_DOORBOT[12][2] = {
- { 0x5EC110, 0x5EAFA8 }, { 0x5FD930, 0x5FC7C8 }, { 0x5FDD0C, 0x5FCBA4 },
- { 0x5FE668, 0x5FD500 }, { 0x5FDD40, 0x5FCBD8 }, { 0x5FFF08, 0x5FEDA0 },
- { 0x5FE3C0, 0x5FD258 }, { 0x5FF0C8, 0x5FDF60 }, { 0x5FF780, 0x5FE618 },
- { 0x5FFAC0, 0x5FE958 }, { 0x5FFC30, 0x5FEAC8 }, { 0x6000E0, 0x5FEF78 }
+ const int SENTENCES_DOORBOT[12][3] = {
+ { 0x5EC110, 0x5EAFA8, 0x5E9FE8 }, { 0x5FD930, 0x5FC7C8, 0x5FB808 },
+ { 0x5FDD0C, 0x5FCBA4, 0x5FBBE4 }, { 0x5FE668, 0x5FD500, 0x5FC540 },
+ { 0x5FDD40, 0x5FCBD8, 0X5FBC18 }, { 0x5FFF08, 0x5FEDA0, 0x5FDDE0 },
+ { 0x5FE3C0, 0x5FD258, 0x5FC298 }, { 0x5FF0C8, 0x5FDF60, 0x5FCFA0 },
+ { 0x5FF780, 0x5FE618, 0x5FD658 }, { 0x5FFAC0, 0x5FE958, 0x5FD998 },
+ { 0x5FFC30, 0x5FEAC8, 0x5FDB08 }, { 0x6000E0, 0x5FEF78, 0x5FDFB8 }
};
writeSentenceEntries("Sentences/Doorbot", SENTENCES_DOORBOT[0][_version]);
writeSentenceEntries("Sentences/Doorbot/2", SENTENCES_DOORBOT[1][_version]);
@@ -727,23 +950,25 @@ void writeData() {
writeSentenceEntries("Sentences/Doorbot/131", SENTENCES_DOORBOT[10][_version]);
writeSentenceEntries("Sentences/Doorbot/132", SENTENCES_DOORBOT[11][_version]);
- const int SENTENCES_LIFTBOT[2] = { 0x6026B0, 0x601548 };
- const int SENTENCES_MAITRED[2][2] = { { 0x60CFD8, 0x60BE70 }, { 0x614288, 0x613120 } };
- const int SENTENCES_PARROT[2] = { 0x615858, 0x6146F0 };
- const int SENTENCES_SUCCUBUS[2] = { 0x616698, 0x615530 };
- const int MAPPINGS_BARBOT[2] = { 0x5B28A0, 0x5B173E };
- const int MAPPINGS_BELLBOT[2] = { 0x5CD830, 0x5CC6C8 };
- const int MAPPINGS_DESKBOT[2] = { 0x5E2BB8, 0x5E1A50 };
- const int MAPPINGS_DOORBOT[2] = { 0x5F7950, 0x5F67E8 };
- const int MAPPINGS_LIFTBOT[2] = { 0x608660, 0x6074F8 };
- const int MAPPINGS_MAITRED[2] = { 0x6125C8, 0x611460 };
- const int MAPPINGS_PARROT[2] = { 0x615B68, 0x614A00 };
- const int MAPPINGS_SUCCUBUS[2] = { 0x6189F0, 0x617888 };
- const int WORDS_BARBOT[2] = { 0x5BE2E0, 0x5BD178 };
- const int WORDS_BELLBOT[2] = { 0x5D8230, 0x5D70C8 };
- const int WORDS_DESKBOT[2] = { 0x5EAAA8, 0x5E9940 };
- const int WORDS_DOORBOT[2] = { 0x601098, 0x5FFF30 };
- const int WORDS_LIFTBOT[2] = { 0x60C788, 0x60B620 };
+ const int SENTENCES_LIFTBOT[3] = { 0x6026B0, 0x601548, 0x600588 };
+ const int SENTENCES_MAITRED[2][3] = {
+ { 0x60CFD8, 0x60BE70, 0x60AEB0 }, { 0x614288, 0x613120, 0x612160 }
+ };
+ const int SENTENCES_PARROT[3] = { 0x615858, 0x6146F0, 0x613730 };
+ const int SENTENCES_SUCCUBUS[3] = { 0x616698, 0x615530, 0x614570 };
+ const int MAPPINGS_BARBOT[3] = { 0x5B28A0, 0x5B173E, 0x5B0778 };
+ const int MAPPINGS_BELLBOT[3] = { 0x5CD830, 0x5CC6C8, 0x5CB708 };
+ const int MAPPINGS_DESKBOT[3] = { 0x5E2BB8, 0x5E1A50, 0x5E0A90 };
+ const int MAPPINGS_DOORBOT[3] = { 0x5F7950, 0x5F67E8, 0x5F5828 };
+ const int MAPPINGS_LIFTBOT[3] = { 0x608660, 0x6074F8, 0x606538 };
+ const int MAPPINGS_MAITRED[3] = { 0x6125C8, 0x611460, 0x6104A0 };
+ const int MAPPINGS_PARROT[3] = { 0x615B68, 0x614A00, 0x613A40 };
+ const int MAPPINGS_SUCCUBUS[3] = { 0x6189F0, 0x617888, 0x6168C8 };
+ const int WORDS_BARBOT[3] = { 0x5BE2E0, 0x5BD178, 0x5BC1B8 };
+ const int WORDS_BELLBOT[3] = { 0x5D8230, 0x5D70C8, 0x5D6108 };
+ const int WORDS_DESKBOT[3] = { 0x5EAAA8, 0x5E9940, 0x5E8980 };
+ const int WORDS_DOORBOT[3] = { 0x601098, 0x5FFF30, 0x5FEF70 };
+ const int WORDS_LIFTBOT[3] = { 0x60C788, 0x60B620, 0x60A660 };
writeSentenceEntries("Sentences/Liftbot", SENTENCES_LIFTBOT[_version]);
writeSentenceEntries("Sentences/MaitreD", SENTENCES_MAITRED[0][_version]);
writeSentenceEntries("Sentences/MaitreD/1", SENTENCES_MAITRED[1][_version]);
@@ -774,6 +999,9 @@ void writeData() {
writeAllUpdateStates();
writeAllScriptPreResponses();
writeBarbotFrameRanges();
+ writeMissiveOMatMessages();
+ writeBedheadData();
+ writeParrotLobbyLinkUpdaterEntries();
}
void createScriptMap() {
@@ -827,10 +1055,12 @@ int main(int argc, char *argv[]) {
}
res.loadFromEXE(argv[1]);
- if (inputFile.size() == ENGLISH_GOG_FILESIZE)
- _version = ENGLISH_GOG;
- else if (inputFile.size() == ENGLISH_ORIG_FILESIZE)
- _version = ENGLISH_ORIG;
+ if (inputFile.size() == ENGLISH_10042C_FILESIZE)
+ _version = ENGLISH_10042C;
+ else if (inputFile.size() == ENGLISH_10042B_FILESIZE)
+ _version = ENGLISH_10042B;
+ else if (inputFile.size() == ENGLISH_10042_FILESIZE)
+ _version = ENGLISH_10042;
else {
printf("Unknown version of ST.exe specified");
exit(0);
diff --git a/devtools/credits.pl b/devtools/credits.pl
index 9cc5ad4227..3f1511c399 100755
--- a/devtools/credits.pl
+++ b/devtools/credits.pl
@@ -1244,7 +1244,7 @@ begin_credits("Credits");
begin_persons();
add_person("Daniel Balsom", "DanielFox", "For the original Reinherit (SAGA) code");
add_person("Sander Buskens", "", "For his work on the initial reversing of Monkey2");
- add_person("", "Canadacow", "For the original MT-32 emulator");
+ add_person("Dean Beeler", "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");
@@ -1253,12 +1253,12 @@ begin_credits("Credits");
add_person("DOSBox Team", "", "For their awesome OPL2 and OPL3 emulator");
add_person("Yusuke Kamiyamane", "", "For contributing some GUI icons");
add_person("Till Kresslein", "Krest", "For design of modern ScummVM GUI");
- add_person("", "Jezar", "For his freeverb filter implementation");
+ add_person("Jezar Wakefield", "", "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 &amp; MM");
+ add_person("Lloyd Rosen", "", "For deep tech details about C64 Zak &amp; MM");
add_person("Sarien Team", "", "Original AGI engine code");
add_person("Jimmi Th&oslash;gersen", "", "For ScummRev, and much obscure code/documentation");
- add_person("", "Tristan", "For additional work on the original MT-32 emulator");
+ add_person("Tristan Matthews", "", "For additional work on the original MT-32 emulator");
add_person("James Woodcock", "", "Soundtrack enhancements");
add_person("Anton Yartsev", "Zidane", "For the original re-implementation of the Z-Vision engine");
end_persons();
diff --git a/devtools/md5table.c b/devtools/md5table.c
index e94a11c9de..de084121bb 100644
--- a/devtools/md5table.c
+++ b/devtools/md5table.c
@@ -8,12 +8,12 @@
* 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.
diff --git a/devtools/sci/scitrace.asm b/devtools/sci/scitrace.asm
index 2c5d2cc4cc..35d0186f07 100644
--- a/devtools/sci/scitrace.asm
+++ b/devtools/sci/scitrace.asm
@@ -8,12 +8,12 @@
; 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.
diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py
index e1f8228ab7..813606d1f8 100644
--- a/devtools/tasmrecover/tasm/cpp.py
+++ b/devtools/tasmrecover/tasm/cpp.py
@@ -49,12 +49,12 @@ class cpp:
* 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.
@@ -107,7 +107,7 @@ namespace %s {
self.indirection = 0
self.used_data_offsets.add((name,offset))
return "offset_%s" % (name,)
-
+
g = self.context.get_global(name)
if isinstance(g, op.const):
value = self.expand_equ(g.value)
@@ -129,7 +129,7 @@ namespace %s {
else:
raise Exception("invalid indirection %d" %self.indirection)
return value
-
+
def get_size(self, expr):
#print 'get_size("%s")' %expr
try:
@@ -184,7 +184,7 @@ namespace %s {
m = re.match(r'seg\s+(.*?)$', expr)
if m is not None:
return "data"
-
+
match_id = True
m = re.match(r'offset\s+(.*?)$', expr)
if m is not None:
@@ -233,7 +233,7 @@ namespace %s {
expr = re.sub(r'\b[a-zA-Z_][a-zA-Z0-9_]+\b', self.expand_cb, expr)
indirection = self.indirection
#print "AFTER: %d" %indirection
-
+
if indirection == 1:
if size == 1:
expr = "%s.byte(%s)" %(seg_prefix, expr)
@@ -248,7 +248,7 @@ namespace %s {
else:
raise Exception("invalid indirection %d" %indirection)
return expr
-
+
def mangle_label(self, name):
name = name.lower()
return re.sub(r'\$', '_tmp', name)
@@ -272,19 +272,19 @@ namespace %s {
self.unbounded[i] = (name, proc, pos)
return self.mangle_label(name)
self.unbounded.append((name, proc, pos))
-
+
return self.mangle_label(name)
def jump_to_label(self, name):
jump_proc = False
if name in self.blacklist:
jump_proc = True
-
+
if self.context.has_global(name) :
g = self.context.get_global(name)
if isinstance(g, proc_module.proc):
jump_proc = True
-
+
if jump_proc:
if name in self.function_name_remapping:
return "{ %s(); return; }" %self.function_name_remapping[name]
@@ -295,10 +295,10 @@ namespace %s {
if name in self.proc.retlabels:
return "return /* (%s) */" % (name)
return "goto %s" %self.resolve_label(name)
-
+
def _label(self, name):
self.body += "%s:\n" %self.mangle_label(name)
-
+
def schedule(self, name):
name = name.lower()
if name in self.proc_queue or name in self.proc_done or name in self.failed:
@@ -402,37 +402,37 @@ namespace %s {
self.body += "\tif (flags.s())\n\t\t%s;\n" %(self.jump_to_label(label))
def _jns(self, label):
- self.body += "\tif (!flags.s())\n\t\t%s;\n" %(self.jump_to_label(label))
+ self.body += "\tif (!flags.s())\n\t\t%s;\n" %(self.jump_to_label(label))
def _jz(self, label):
- self.body += "\tif (flags.z())\n\t\t%s;\n" %(self.jump_to_label(label))
+ self.body += "\tif (flags.z())\n\t\t%s;\n" %(self.jump_to_label(label))
def _jnz(self, label):
- self.body += "\tif (!flags.z())\n\t\t%s;\n" %(self.jump_to_label(label))
+ self.body += "\tif (!flags.z())\n\t\t%s;\n" %(self.jump_to_label(label))
def _jl(self, label):
- self.body += "\tif (flags.l())\n\t\t%s;\n" %(self.jump_to_label(label))
+ self.body += "\tif (flags.l())\n\t\t%s;\n" %(self.jump_to_label(label))
def _jg(self, label):
- self.body += "\tif (!flags.le())\n\t\t%s;\n" %(self.jump_to_label(label))
+ self.body += "\tif (!flags.le())\n\t\t%s;\n" %(self.jump_to_label(label))
def _jle(self, label):
- self.body += "\tif (flags.le())\n\t\t%s;\n" %(self.jump_to_label(label))
+ self.body += "\tif (flags.le())\n\t\t%s;\n" %(self.jump_to_label(label))
def _jge(self, label):
- self.body += "\tif (!flags.l())\n\t\t%s;\n" %(self.jump_to_label(label))
+ self.body += "\tif (!flags.l())\n\t\t%s;\n" %(self.jump_to_label(label))
def _jc(self, label):
- self.body += "\tif (flags.c())\n\t\t%s;\n" %(self.jump_to_label(label))
+ self.body += "\tif (flags.c())\n\t\t%s;\n" %(self.jump_to_label(label))
def _jnc(self, label):
- self.body += "\tif (!flags.c())\n\t\t%s;\n" %(self.jump_to_label(label))
-
+ self.body += "\tif (!flags.c())\n\t\t%s;\n" %(self.jump_to_label(label))
+
def _xchg(self, dst, src):
self.body += "\t_xchg(%s, %s);\n" %self.parse2(dst, src)
def _jmp(self, label):
- self.body += "\t%s;\n" %(self.jump_to_label(label))
+ self.body += "\t%s;\n" %(self.jump_to_label(label))
def _loop(self, label):
self.body += "\tif (--cx)\n\t\t%s;\n" %self.jump_to_label(label)
@@ -490,7 +490,7 @@ namespace %s {
else:
print "No procedure named %s, trying label" %name
off, src_proc, skip = self.context.get_offset(name)
-
+
self.proc = proc_module.proc(name)
self.proc.stmts = copy(src_proc.stmts)
self.proc.labels = copy(src_proc.labels)
@@ -501,8 +501,8 @@ namespace %s {
# o, p, s = self.context.get_offset(s.label)
# if p == src_proc and s < skip:
# skip = s
-
-
+
+
self.proc_addr.append((name, self.proc.offset))
self.body = str()
if name in self.function_name_remapping:
@@ -522,7 +522,7 @@ namespace %s {
s = proc.stmts[p]
if isinstance(s, op.basejmp):
self.resolve_label(s.label)
-
+
#adding statements
#BIG FIXME: this is quite ugly to handle code analysis from the code generation. rewrite me!
for label, proc, offset in self.unbounded:
@@ -554,7 +554,7 @@ namespace %s {
def get_type(self, width):
return "uint%d_t" %(width * 8)
-
+
def write_stubs(self, fname, procs):
fd = open(fname, "wt")
fd.write("namespace %s {\n" %self.namespace)
@@ -634,7 +634,7 @@ namespace %s {
offsets.append((k.capitalize(), v.offset))
elif isinstance(v, op.const):
offsets.append((k.capitalize(), self.expand_equ(v.value))) #fixme: try to save all constants here
-
+
offsets = sorted(offsets, key=lambda t: t[1])
for o in offsets:
self.hd.write("static const uint16 k%s = %s;\n" %o)
@@ -667,9 +667,9 @@ public:
self.hd.write("};\n\n} // End of namespace DreamGen\n\n#endif\n")
self.hd.close()
-
+
self.fd.write("void %sContext::__start() { %s\t%s(); \n}\n" %(self.namespace, data_impl, start))
-
+
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])
@@ -677,6 +677,6 @@ public:
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()