diff options
Diffstat (limited to 'devtools')
21 files changed, 346 insertions, 103 deletions
diff --git a/devtools/create_macventure/AltBox_act.bmp b/devtools/create_macventure/AltBox_act.bmp Binary files differnew file mode 100644 index 0000000000..aa9fa7e841 --- /dev/null +++ b/devtools/create_macventure/AltBox_act.bmp diff --git a/devtools/create_macventure/AltBox_inac.bmp b/devtools/create_macventure/AltBox_inac.bmp Binary files differnew file mode 100644 index 0000000000..aa9fa7e841 --- /dev/null +++ b/devtools/create_macventure/AltBox_inac.bmp diff --git a/devtools/create_macventure/InvWindow_act.bmp b/devtools/create_macventure/InvWindow_act.bmp Binary files differnew file mode 100644 index 0000000000..a38b0a9834 --- /dev/null +++ b/devtools/create_macventure/InvWindow_act.bmp diff --git a/devtools/create_macventure/InvWindow_inac.bmp b/devtools/create_macventure/InvWindow_inac.bmp Binary files differnew file mode 100644 index 0000000000..f3f2cfaa8b --- /dev/null +++ b/devtools/create_macventure/InvWindow_inac.bmp diff --git a/devtools/create_macventure/NoGrowDoc_act.bmp b/devtools/create_macventure/NoGrowDoc_act.bmp Binary files differnew file mode 100644 index 0000000000..3570e798d9 --- /dev/null +++ b/devtools/create_macventure/NoGrowDoc_act.bmp diff --git a/devtools/create_macventure/NoGrowDoc_inac.bmp b/devtools/create_macventure/NoGrowDoc_inac.bmp Binary files differnew file mode 100644 index 0000000000..f3f97652e5 --- /dev/null +++ b/devtools/create_macventure/NoGrowDoc_inac.bmp diff --git a/devtools/create_macventure/PlainDBox_act.bmp b/devtools/create_macventure/PlainDBox_act.bmp Binary files differnew file mode 100644 index 0000000000..6521080588 --- /dev/null +++ b/devtools/create_macventure/PlainDBox_act.bmp diff --git a/devtools/create_macventure/PlainDBox_inac.bmp b/devtools/create_macventure/PlainDBox_inac.bmp Binary files differnew file mode 100644 index 0000000000..6521080588 --- /dev/null +++ b/devtools/create_macventure/PlainDBox_inac.bmp diff --git a/devtools/create_macventure/RDoc4_act.bmp b/devtools/create_macventure/RDoc4_act.bmp Binary files differnew file mode 100644 index 0000000000..ab78661359 --- /dev/null +++ b/devtools/create_macventure/RDoc4_act.bmp diff --git a/devtools/create_macventure/RDoc4_inac.bmp b/devtools/create_macventure/RDoc4_inac.bmp Binary files differnew file mode 100644 index 0000000000..ab78661359 --- /dev/null +++ b/devtools/create_macventure/RDoc4_inac.bmp diff --git a/devtools/create_macventure/ZoomDoc_act.bmp b/devtools/create_macventure/ZoomDoc_act.bmp Binary files differnew file mode 100644 index 0000000000..b2ccc9c602 --- /dev/null +++ b/devtools/create_macventure/ZoomDoc_act.bmp diff --git a/devtools/create_macventure/ZoomDoc_inac.bmp b/devtools/create_macventure/ZoomDoc_inac.bmp Binary files differnew file mode 100644 index 0000000000..963949b392 --- /dev/null +++ b/devtools/create_macventure/ZoomDoc_inac.bmp 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 & MM"); + add_person("Lloyd Rosen", "", "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("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() |