diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/create_lure/create_lure_dat.cpp | 84 | ||||
-rw-r--r-- | tools/create_lure/create_lure_dat.h | 17 | ||||
-rw-r--r-- | tools/create_lure/process_actions.cpp | 16 | ||||
-rwxr-xr-x | tools/credits.pl | 18 | ||||
-rw-r--r-- | tools/scumm-md5.txt | 3 | ||||
-rwxr-xr-x | tools/update-version.pl | 2 |
6 files changed, 103 insertions, 37 deletions
diff --git a/tools/create_lure/create_lure_dat.cpp b/tools/create_lure/create_lure_dat.cpp index 89a12be8e9..13f7c97964 100644 --- a/tools/create_lure/create_lure_dat.cpp +++ b/tools/create_lure/create_lure_dat.cpp @@ -121,7 +121,6 @@ void read_room_data(byte *&data, uint16 &totalSize) if ((FROM_LE_16(headerEntry.offset) != 0) && (FROM_LE_16(headerEntry.offset) != 0xffff) && - (FROM_LE_16(headerEntry.roomNumber) != 0xc09) && (FROM_LE_16(headerEntry.roomNumber) != 0)) { // Store offset of room entry *offsetPtr++ = TO_LE_16(offset); @@ -129,11 +128,10 @@ void read_room_data(byte *&data, uint16 &totalSize) // Copy over basic room details lure_exe.seek(DATA_SEGMENT + headerEntry.offset); lure_exe.read(&buffer, sizeof(RoomResource)); - RoomResourceOutput *rec = (RoomResourceOutput *) (data + offset); rec->hdrFlags = headerEntry.hdrFlags; rec->actions = FROM_LE_32(buffer.actions); - rec->roomNumber = headerEntry.roomNumber; + rec->roomNumber = index; rec->descId = headerEntry.descId; rec->numLayers = buffer.numLayers; memcpy(rec->layers, buffer.layers, 8); @@ -141,6 +139,8 @@ void read_room_data(byte *&data, uint16 &totalSize) rec->clippingXStart = TO_LE_16(FROM_LE_16(buffer.clippingXStart) - 0x80); rec->clippingXEnd = (FROM_LE_16(buffer.clippingXEnd) == 0) ? 0 : TO_LE_16(FROM_LE_16(buffer.clippingXEnd) - 0x80); + rec->exitTime = FROM_LE_32(buffer.exitTime); + rec->areaFlag = buffer.areaFlag; rec->numExits = 0; offset += sizeof(RoomResourceOutput); @@ -283,10 +283,15 @@ void read_hotspot_data(byte *&data, uint16 &totalSize) r->roomNumber = TO_LE_16(28); // Find the walk-to coordinates for the hotspot + uint16 findId = FROM_LE_16(r->hotspotId); walkCtr = 0; - while ((walkCtr < walkNumEntries) && - (FROM_LE_16(walkList[walkCtr].hotspotId) != FROM_LE_16(r->hotspotId))) + while (walkCtr < walkNumEntries) { + uint16 id = FROM_LE_16(walkList[walkCtr].hotspotId); + if ((id == findId) || ((findId == 1007) && (id == 0xffff))) + break; ++walkCtr; + } + if (walkCtr == walkNumEntries) { r->walkX = 0; r->walkY = 0; @@ -473,11 +478,33 @@ void read_room_exit_joins(byte *&data, uint16 &totalSize) { void read_anim_data(byte *&data, uint16 &totalSize) { // Add special pixel records - add_anim_record(0x5c95); - add_anim_record(0x5ce9); // Blacksmith in bar? + add_anim_record(0x55C0); // Player midswing animation + add_anim_record(0x55C9); // Player mid-level defend + add_anim_record(0x55D2); // Player high-level strike + add_anim_record(0x55DB); // Player high-level defend + add_anim_record(0x55E4); // Player low-level strike + add_anim_record(0x55ED); // Player low-level defend + add_anim_record(0x55F6); // Player fight animation + add_anim_record(0x55FF); // Pig fight animation + add_anim_record(0x5611); // Player mid-level strike + add_anim_record(0x5623); // Pig fight animation + add_anim_record(0x562C); // Misc fight animation + add_anim_record(0x5635); // Pig fight animation + add_anim_record(0x563E); // Player recoiling from hit + add_anim_record(0x5647); // Pig recoiling from hit + add_anim_record(0x5650); // Pig dies add_anim_record(0x5915); // Blacksmith hammering add_anim_record(0x59ED); // Ewan's alternate animation + add_anim_record(0x59FF); // Dragon breathing fire + add_anim_record(0x5A08); // Dragon breathing fire 2 + add_anim_record(0x5A11); // Dragon breathing fire 3 + add_anim_record(0x5A1A); // Player turning winch in room #48 + add_anim_record(0x5A59); // Player pulling lever in room #48 + add_anim_record(0x5A62); // Minnow pulling lever in room #48 + add_anim_record(0x5AAA); // Goewin mixing potion + add_anim_record(0x5C95); add_anim_record(0x5CAA); // Selena animation + add_anim_record(0x5CE9); // Blacksmith in bar? add_anim_record(0x5D28); // Goewin animation // Get the animation data records @@ -881,32 +908,40 @@ void read_room_exit_coordinate_data(byte *&data, uint16 &totalSize) { // Read in the exit coordinates list int roomNum, entryNum; + uint16 x, y; + RoomExitCoordinateEntryInputResource dataIn; - totalSize = EXIT_COORDINATES_NUM_ROOMS * sizeof(RoomExitCoordinateEntryResource) + 2; + totalSize = EXIT_COORDINATES_NUM_ROOMS * sizeof(RoomExitCoordinateEntryOutputResource) + 2; data = (byte *) malloc(totalSize); lure_exe.seek(DATA_SEGMENT + EXIT_COORDINATES_OFFSET); - lure_exe.read(data, totalSize - 2); WRITE_LE_UINT16(data + totalSize - 2, 0xffff); // Post process the list to adjust data - RoomExitCoordinateEntryResource *rec = (RoomExitCoordinateEntryResource *) data; + RoomExitCoordinateEntryOutputResource *rec = (RoomExitCoordinateEntryOutputResource *) data; for (roomNum = 1; roomNum <= EXIT_COORDINATES_NUM_ROOMS; ++roomNum, ++rec) { + lure_exe.read(&dataIn, sizeof(RoomExitCoordinateEntryInputResource)); + for (entryNum = 0; entryNum < ROOM_EXIT_COORDINATES_NUM_ENTRIES; ++entryNum) { - if ((rec->entries[entryNum].x != 0) || (rec->entries[entryNum].y != 0)) { - rec->entries[entryNum].x = TO_LE_16(FROM_LE_16(rec->entries[entryNum].x) - 0x80); - uint16 tempY = FROM_LE_16(rec->entries[entryNum].y); - rec->entries[entryNum].y = TO_LE_16( - ((tempY & 0xfff) - 0x80) | (tempY & 0xf000)); + x = FROM_LE_16(dataIn.entries[entryNum].x); + y = FROM_LE_16(dataIn.entries[entryNum].y); + if ((x != 0) || (y != 0)) { + x -= 0x80; + y = ((y & 0xfff) - 0x80) | (y & 0xf000); } + + RoomExitCoordinateResource *p = &rec->entries[entryNum]; + p->x = TO_LE_16(x); + p->y = TO_LE_16(y); + p->roomNumber = dataIn.entries[entryNum].roomNumber; } for (entryNum = 0; entryNum < ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS; ++entryNum) { - rec->roomIndex[entryNum] = TO_LE_16(FROM_LE_16(rec->roomIndex[entryNum]) / 6); + rec->roomIndex[entryNum] = TO_LE_16(FROM_LE_16(dataIn.roomIndex[entryNum]) / 6); } - // Bugfix for the original game data to get to room #27 via rooms #10 or #11 + // WORKAROUND: Bugfix for the original game data to get to room #27 via rooms #10 or #11 if ((roomNum == 10) || (roomNum == 11)) - rec->roomIndex[26] = 1; + rec->roomIndex[26] = TO_LE_16(1); } } @@ -928,6 +963,14 @@ void read_room_exit_hotspots_data(byte *&data, uint16 &totalSize) { totalSize += sizeof(uint16); } +void save_fight_segment(byte *&data, uint16 &totalSize) { + lure_exe.seek(FIGHT_SEGMENT); + + totalSize = FIGHT_SEGMENT_SIZE; + data = (byte *) malloc(totalSize); + lure_exe.read(data, totalSize); +} + #define NUM_TEXT_ENTRIES 40 const char *text_strings[NUM_TEXT_ENTRIES] = { "Get", NULL, "Push", "Pull", "Operate", "Open", "Close", "Lock", "Unlock", "Use", @@ -1075,6 +1118,11 @@ void getEntry(uint8 entryIndex, uint16 &resourceId, byte *&data, uint16 &size) break; case 21: + // Save the fight segment data + save_fight_segment(data, size); + break; + + case 22: // Set up the list of text strings used by the game save_text_strings(data, size); break; diff --git a/tools/create_lure/create_lure_dat.h b/tools/create_lure/create_lure_dat.h index ed66909cd8..4429baf8bb 100644 --- a/tools/create_lure/create_lure_dat.h +++ b/tools/create_lure/create_lure_dat.h @@ -30,7 +30,7 @@ #include "common/endian.h" #define VERSION_MAJOR 1 -#define VERSION_MINOR 19 +#define VERSION_MINOR 20 #define ENGLISH_LURE #define DATA_SEGMENT 0xac50 @@ -53,6 +53,8 @@ #define SCRIPT_SEGMENT_SIZE 0x2c57 #define SCRIPT2_SEGMENT 0x19c70 #define SCRIPT2_SEGMENT_SIZE 0x2800 +#define FIGHT_SEGMENT 0x1C400 +#define FIGHT_SEGMENT_SIZE 0x1850 #define HOTSPOT_SCRIPT_LIST 0x57e0 #define HOTSPOT_SCRIPT_SIZE 0x30 @@ -200,7 +202,8 @@ struct RoomResource { byte numLayers; uint16 layers[4]; uint16 sequenceOffset; - byte unknown2[5]; + uint32 exitTime; + uint8 areaFlag; uint8 walkBoundsIndex; int16 clippingXStart; int16 clippingXEnd; @@ -227,6 +230,8 @@ struct RoomResourceOutput { uint16 sequenceOffset; int16 clippingXStart; int16 clippingXEnd; + uint32 exitTime; + uint8 areaFlag; RoomRectOut walkBounds; uint16 numExits; }; @@ -343,11 +348,17 @@ struct RoomExitIndexedHotspotResource { #define ROOM_EXIT_COORDINATES_NUM_ENTRIES 6 #define ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS 52 -struct RoomExitCoordinateEntryResource { +struct RoomExitCoordinateEntryInputResource { RoomExitCoordinateResource entries[ROOM_EXIT_COORDINATES_NUM_ENTRIES]; uint8 roomIndex[ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS]; }; +struct RoomExitCoordinateEntryOutputResource { + uint8 roomIndex[ROOM_EXIT_COORDINATES_ENTRY_NUM_ROOMS]; + RoomExitCoordinateResource entries[ROOM_EXIT_COORDINATES_NUM_ENTRIES]; +}; + + enum CurrentAction {NO_ACTION, START_WALKING, DISPATCH_ACTION, EXEC_HOTSPOT_SCRIPT, PROCESSING_PATH, WALKING}; diff --git a/tools/create_lure/process_actions.cpp b/tools/create_lure/process_actions.cpp index 8a194f2ac5..1521ce442d 100644 --- a/tools/create_lure/process_actions.cpp +++ b/tools/create_lure/process_actions.cpp @@ -33,9 +33,9 @@ enum Action { LOOK = 15, LOOK_AT = 16, LOOK_THROUGH = 17, ASK = 18, DRINK = 20, STATUS = 21, GO_TO = 22, RETURN = 23, BRIBE = 24, EXAMINE = 25, NPC_SET_ROOM_AND_BLOCKED_OFFSET = 28, NPC_HEY_SIR = 29, NPC_EXEC_SCRIPT = 30, - NPC_UNKNOWN2 = 31, NPC_SET_RAND_DEST = 32, NPC_WALKING_CHECK = 33, + NPC_RESET_PAUSED_LIST = 31, NPC_SET_RAND_DEST = 32, NPC_WALKING_CHECK = 33, NPC_SET_SUPPORT_OFFSET = 34, NPC_SUPPORT_OFFSET_COND = 35, - NPC_DISPATCH_ACTION = 36, NPC_UNKNOWN3 = 37, NPC_UNKNOWN4 = 38, + NPC_DISPATCH_ACTION = 36, NPC_TALK_NPC_TO_NPC = 37, NPC_PAUSE = 38, NPC_START_TALKING = 39, NPC_JUMP_ADDRESS = 40, NONE = 0 }; @@ -365,11 +365,13 @@ void read_action_sequence(byte *&data, uint16 &totalSize) // Handle required initial entries - the Lure engine refers to them directly by // index, so they need to be first, and in that order #ifdef ENGLISH_LURE - process_entry(0x13c2, data, totalSize); - process_entry(0xbb95, data, totalSize); - process_entry(0x7060, data, totalSize); - process_entry(0x728a, data, totalSize); - process_entry(0x76ec, data, totalSize); + process_entry(0x13c2, data, totalSize); // RETURN sequence + process_entry(0xbb95, data, totalSize); // Exit blocked sequence + process_entry(0x7060, data, totalSize); // Jump proc #2 - go to castle basement + process_entry(0x728a, data, totalSize); + process_entry(0x76ec, data, totalSize); + process_entry(0x4ebb, data, totalSize); // Goewin as a follower in cave + process_entry(0x7D9D, data, totalSize); // Goewin standard handler #endif // Process the script engine list diff --git a/tools/credits.pl b/tools/credits.pl index 00a19944fa..acdbe03797 100755 --- a/tools/credits.pl +++ b/tools/credits.pl @@ -689,7 +689,7 @@ begin_credits("Credits"); end_section(); begin_section("MorphOS"); - add_person("Fabien Coeurjoly", "", ""); + add_person("Fabien Coeurjoly", "fab1", ""); end_section(); begin_section("OS/2"); @@ -735,24 +735,24 @@ begin_credits("Credits"); add_person("Paolo Costabel", "", "PSP port contributions"); add_person("Thierry Crozat", "criezy", "Support for Broken Sword 1 Macintosh version"); add_person("Thomas Fach-Pedersen", "madmoose", "ProTracker module player"); - add_person("Benjamin Haisch", "", "Heavily improved de-/encoder for DXA videos"); + add_person("Benjamin Haisch", "john_doe", "Heavily improved de-/encoder for DXA videos"); 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", "", "Numerous readability and bugfix patches"); + add_person("Jeroen Janssen", "japj", "Numerous readability and bugfix patches"); add_person("Florian Kagerer", "athrxx", "Various Kyrandia 1 FM-Towns code contributions"); add_person("Andreas Karlsson", "Sprawl", "Initial port for EPOC/SymbianOS"); add_person("Claudio Matsuoka", "", "Daily Linux builds"); add_person("Thomas Mayer", "", "PSP port contributions"); add_person("", "n0p", "Windows CE port aspect ratio correction scaler and right click input method"); - add_person("Mikesch Nepomuk", "", "MI1 VGA floppy patches"); + 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("Andreas Röver", "", "Broken Sword 1/2 MPEG2 cutscene support"); - add_person("Edward Rudd", "", "Fixes for playing MP3 versions of MI1/Loom audio"); - add_person("Daniel Schepler", "", "Final MI1 CD music support, initial Ogg Vorbis support"); - add_person("André Souza", "", "SDL-based OpenGL renderer"); - add_person("Tim Phillips", "realmz", "Initial MI1 CD music support"); - add_person("Robin Watts", "", "ARM assembly routines for the Windows CE port"); + 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"); + add_person("Robin Watts", "robinwatts", "ARM assembly routines for the Windows CE port"); end_persons(); end_section(); diff --git a/tools/scumm-md5.txt b/tools/scumm-md5.txt index 711b59dc87..468bb6b6ce 100644 --- a/tools/scumm-md5.txt +++ b/tools/scumm-md5.txt @@ -477,6 +477,7 @@ freddi3 Freddi Fish 3: The Case of the Stolen Conch Shell bbadf7309c4a2c2763e4bbba3c3be634 -1 fr All - Demo - Kirben 754feb59d3bf86b8a00840df74fd7b26 -1 nl Windows - Demo - adutchguy ed2b074bc3166087a747acb2a3c6abb0 -1 de All HE 98.5 Demo - Joachim Eberhard + d73c851b942af44deb9b6d5f416a0972 -1 hb Windows HE 99 Demo - Ori Avtalion freddi4 Freddi Fish 4: The Case of the Hogfish Rustlers of Briny Gulch 4f580a021eee026f3b4589e17d130d78 -1 All All - - - Kirben, sev @@ -577,6 +578,7 @@ pajama2 Pajama Sam 2: Thunder and Lightning Aren't so Frightening 36a6750e03fb505fc19fc2bf3e4dbe91 58749 en All - Demo - sev 30ba1e825d4ad2b448143ae8df18482a -1 nl All HE 98.5 Demo - Kirben 4521138d15d1fd7649c31fb981746231 -1 de All HE 98.5 Demo - Joachim Eberhard + 2a8658dbd13d84d1bce64a71a35995eb -1 hb Windows HE 99 Demo - Ori Avtalion pajama3 Pajama Sam 3: You Are What You Eat From Your Head to Your Feet f7711f9264d4d43c2a1518ec7c10a607 79382 us All - - - Kirben @@ -654,6 +656,7 @@ puttcircus Putt-Putt Joins the Circus a7cacad9c40c4dc9e1812abf6c8af9d5 -1 en All - Demo - Kirben, sev 1387d16aa620dc1c2d1fd87f8a9e7a09 -1 fr Windows - Demo - Mevi + 3af61c5edf8e15b43dbafd285b2e9777 -1 hb Windows - Demo - Ori Avtalion puttputt Putt-Putt Joins the Parade 0b3222aaa7efcf283eb621e0cefd26cc -1 ru DOS HE 60 - - sev diff --git a/tools/update-version.pl b/tools/update-version.pl index 7787fb905b..4a93582d13 100755 --- a/tools/update-version.pl +++ b/tools/update-version.pl @@ -31,10 +31,12 @@ print "Setting version to '$VERSION'\n"; # List of the files in which we need to perform substitution. my @subs_files = qw( + backends/platform/ds/arm9/makefile base/internal_version.h dists/macosx/Info.plist dists/redhat/scummvm.spec dists/scummvm.rc + dists/slackware/scummvm.SlackBuild ); # The following files also contain version data and should possible be modified |