# HG changeset patch # User Nomad # Date 1364076901 -7200 # Node ID b9f6dd6f1444d98a0ce9919cbc0647be8c36088e # Parent 7994986603d59666f8955da0d104840ee601ce5b Travel by Transport finally works (phew). diff -r 7994986603d5 -r b9f6dd6f1444 MapInfo.h --- a/MapInfo.h Sat Mar 23 21:40:30 2013 +0200 +++ b/MapInfo.h Sun Mar 24 00:15:01 2013 +0200 @@ -19,6 +19,8 @@ MAP_AVLEE = 14, MAP_SHOALS = 15, //... + MAP_ARENA = 76, + //... }; diff -r 7994986603d5 -r b9f6dd6f1444 UIHouses.cpp --- a/UIHouses.cpp Sat Mar 23 21:40:30 2013 +0200 +++ b/UIHouses.cpp Sun Mar 24 00:15:01 2013 +0200 @@ -23,6 +23,7 @@ #include "NPC.h" #include "IndoorCamera.h" #include "MapInfo.h" +#include "Log.h" #include "MM7.h" #include "mm7_data.h" @@ -43,42 +44,80 @@ unsigned char pSchedule[7]; unsigned char uTravelTime; unsigned char field_9[3]; - int field_C; - int field_10; - int field_14; - int field_18; + int arrival_x; + int arrival_y; + int arrival_z; + int arrival_rot_y; unsigned int uQuestBit; // quest bit required to set for this travel option to be enabled; otherwise 0 }; #pragma pack(pop) -stru365_travel_info array_4F09B0[25] = +stru365_travel_info transport_schedule[35] = // 004F09B0 { - { 3, {1, 0, 1, 0, 1, 0, 0}, 2, {0, 0, 0}, 0xFFFFB980, 4636, 833, 1536, 0}, - { 4, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, 0xFFFFF621, 4294960523, 1153, 896, 0}, - {13, {1, 0, 1, 0, 1, 0, 0}, 2, {0, 0, 0}, 0x127A, 4294956716, 320, 1024, 0}, - { 2, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, 0xFFFFE9C4, 11137, 1, 1024, 0}, - { 5, {1, 0, 0, 1, 0, 0, 0}, 3, {0, 0, 0}, 0x1C3B, 4294951289, 2625, 640, 0}, - { 6, {0, 0, 1, 0, 0, 1, 0}, 3, {0, 0, 0}, 0x22DB, 17191, 1, 512, 0}, - {14, {1, 0, 1, 0, 1, 0, 0}, 3, {0, 0, 0}, 0x42A3, 12331, 512, 1152, 0}, - { 5, {0, 1, 0, 0, 1, 0, 1}, 2, {0, 0, 0}, 0x1C3B, 4294951289, 2625, 640, 0}, - { 2, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, 0xFFFFE9C4, 11137, 1, 1024, 0}, - { 3, {1, 0, 1, 0, 1, 0, 0}, 3, {0, 0, 0}, 0xFFFFB980, 4636, 833, 1536, 0}, - { 4, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, 0xFFFFF621, 4294960523, 1153, 896, 0}, - { 3, {1, 0, 1, 0, 1, 0, 1}, 3, {0, 0, 0}, 0xFFFFB980, 4636, 833, 1536, 0}, - { 2, {0, 1, 0, 0, 0, 1, 0}, 5, {0, 0, 0}, 0xFFFFE9C4, 11137, 1, 1024, 0}, - { 3, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, 0xFFFFB980, 4636, 833, 1536, 0}, - { 4, {0, 1, 0, 1, 0, 1, 0}, 3, {0, 0, 0}, 0xFFFFF621, 4294960523, 1153, 896, 0}, - { 5, {0, 0, 1, 0, 0, 0, 1}, 5, {0, 0, 0}, 0x1C3B, 4294951289, 2625, 640, 0}, - {13, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, 0xFFFFF779, 4294960355, 97, 0, 0}, - {14, {1, 0, 0, 0, 1, 0, 0}, 4, {0, 0, 0}, 0x1EE9, 9476, 193, 0, 0}, - { 9, {0, 0, 0, 0, 0, 0, 1}, 7, {0, 0, 0}, 0x3D00, 6390, 193, 1536, 0x40}, - { 6, {0, 0, 1, 0, 0, 0, 0}, 6, {0, 0, 0}, 0x4AE3, 4294947574, 193, 1024, 0}, - {14, {0, 1, 0, 1, 0, 1, 0}, 3, {0, 0, 0}, 0x1EE9, 9476, 193, 0, 0}, - { 6, {1, 0, 1, 0, 0, 0, 0}, 6, {0, 0, 0}, 0x4AE3, 4294947574, 193, 1024, 0}, - {13, {1, 0, 1, 0, 1, 0, 0}, 4, {0, 0, 0}, 0xFFFFF779, 4294960355, 97, 0, 0}, - { 4, {0, 0, 0, 0, 0, 1, 0}, 6, {0, 0, 0}, 0xFFFFFD3B, 4294953209, 193, 1024, 0}, - { 3, {0, 0, 0, 0, 0, 0, 1}, 6, {0, 0, 0}, 0xFFFFD719, 13497, 193, 1536, 0}, + {MAP_STEADWICK, {1, 0, 1, 0, 1, 0, 0}, 2, {0, 0, 0}, -18048, 4636, 833, 1536, 0}, + {MAP_PIERPONT, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, -2527, -6773, 1153, 896, 0}, + {MAP_TATALIA, {1, 0, 1, 0, 1, 0, 0}, 2, {0, 0, 0}, 4730, -10580, 320, 1024, 0}, + {MAP_HARMONDALE, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, -5692, 11137, 1, 1024, 0}, + {MAP_DEYJA, {1, 0, 0, 1, 0, 0, 0}, 3, {0, 0, 0}, 7227, -16007, 2625, 640, 0}, + {MAP_BRAKADA_DESERT, {0, 0, 1, 0, 0, 1, 0}, 3, {0, 0, 0}, 8923, 17191, 1, 512, 0}, + {MAP_AVLEE, {1, 0, 1, 0, 1, 0, 0}, 3, {0, 0, 0}, 17059, 12331, 512, 1152, 0}, + {MAP_DEYJA, {0, 1, 0, 0, 1, 0, 1}, 2, {0, 0, 0}, 7227, -16007, 2625, 640, 0}, + {MAP_HARMONDALE, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, -5692, 11137, 1, 1024, 0}, + {MAP_STEADWICK, {1, 0, 1, 0, 1, 0, 0}, 3, {0, 0, 0}, -18048, 4636, 833, 1536, 0}, + {MAP_PIERPONT, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, -2527, -6773, 1153, 896, 0}, + {MAP_STEADWICK, {1, 0, 1, 0, 1, 0, 1}, 3, {0, 0, 0}, -18048, 4636, 833, 1536, 0}, + {MAP_HARMONDALE, {0, 1, 0, 0, 0, 1, 0}, 5, {0, 0, 0}, -5692, 11137, 1, 1024, 0}, + {MAP_STEADWICK, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, 0xFFFFB980, 4636, 833, 1536, 0}, + {MAP_PIERPONT, {0, 1, 0, 1, 0, 1, 0}, 3, {0, 0, 0}, 0xFFFFF621, 4294960523, 1153, 896, 0}, + {MAP_DEYJA, {0, 0, 1, 0, 0, 0, 1}, 5, {0, 0, 0}, 0x1C3B, 4294951289, 2625, 640, 0}, + {MAP_TATALIA, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, 0xFFFFF779, 4294960355, 97, 0, 0}, + {MAP_AVLEE, {1, 0, 0, 0, 1, 0, 0}, 4, {0, 0, 0}, 0x1EE9, 9476, 193, 0, 0}, + {MAP_EVENMORN_ISLE, {0, 0, 0, 0, 0, 0, 1}, 7, {0, 0, 0}, 0x3D00, 6390, 193, 1536, 64}, + {MAP_BRAKADA_DESERT, {0, 0, 1, 0, 0, 0, 0}, 6, {0, 0, 0}, 0x4AE3, 4294947574, 193, 1024, 0}, + {MAP_AVLEE, {0, 1, 0, 1, 0, 1, 0}, 3, {0, 0, 0}, 0x1EE9, 9476, 193, 0, 0}, + {MAP_BRAKADA_DESERT, {1, 0, 1, 0, 0, 0, 0}, 6, {0, 0, 0}, 0x4AE3, 4294947574, 193, 1024, 0}, + {MAP_TATALIA, {1, 0, 1, 0, 1, 0, 0}, 4, {0, 0, 0}, 0xFFFFF779, 4294960355, 97, 0, 0}, + {MAP_PIERPONT, {0, 0, 0, 0, 0, 1, 0}, 6, {0, 0, 0}, 0xFFFFFD3B, 4294953209, 193, 1024, 0}, + {MAP_STEADWICK, {0, 0, 0, 0, 0, 0, 1}, 6, {0, 0, 0}, 0xFFFFD719, 13497, 193, 1536, 0}, + {MAP_EVENMORN_ISLE, {0, 1, 0, 1, 0, 0, 0}, 1, {0, 0, 0}, 15616, 6390, 193, 1536, 64}, + {MAP_BRAKADA_DESERT, {0, 1, 0, 1, 0, 0, 0}, 1, {0, 0, 0}, 19171, 4294947574, 193, 1024, 0}, + {MAP_STEADWICK, {0, 1, 0, 1, 0, 1, 0}, 2, {0, 0, 0}, 4294956825, 13497, 193, 1536, 0}, + {MAP_BRAKADA_DESERT, {1, 0, 1, 0, 0, 0, 0}, 4, {0, 0, 0}, 19171, 4294947574, 193, 1024, 0}, + {MAP_EVENMORN_ISLE, {0, 0, 0, 0, 0, 0, 1}, 5, {0, 0, 0}, 15616, 6390, 193, 1536, 64}, + {MAP_AVLEE, {0, 0, 0, 0, 1, 0, 0}, 5, {0, 0, 0}, 7913, 9476, 193, 0, 0}, + {MAP_STEADWICK, {0, 1, 0, 0, 0, 1, 0}, 4, {0, 0, 0}, 4294956825, 13497, 193, 1536, 0}, + {MAP_PIERPONT, {1, 0, 1, 0, 1, 0, 0}, 3, {0, 0, 0}, 4294966587, 4294953209, 193, 1024, 0}, + {MAP_TATALIA, {0, 0, 0, 1, 0, 0, 0}, 5, {0, 0, 0}, 4294965113, 4294960355, 97, 0, 0}, + {MAP_ARENA, {0, 0, 0, 0, 0, 0, 1}, 4, {0, 0, 0}, 3844, 2906, 193, 512, 0} }; +unsigned char transport_routes[20][4] = +{ + { 0, 1, 1, 34}, // HOUSE_STABLES_HARMONDALE + { 2, 3, 4, 5}, // HOUSE_STABLES_STEADWICK + { 6, 7, 8, 8}, // HOUSE_STABLES_56 + { 9, 10, 10, 10}, // HOUSE_STABLES_57 + { 11, 11, 12, 12}, // HOUSE_STABLES_58 + { 13, 13, 13, 13}, // HOUSE_STABLES_59 + { 14, 14, 15, 15}, // HOUSE_STABLES_60 + {255, 255, 255, 255}, // HOUSE_STABLES_61 + {255, 255, 255, 255}, // HOUSE_STABLES_62 + {255, 255, 255, 255}, // HOUSE_BOATS_63 + { 16, 17, 18, 19}, // HOUSE_BOATS_64 + { 18, 20, 21, 21}, // HOUSE_BOATS_65 + { 22, 23, 24, 25}, // HOUSE_BOATS_66 + { 22, 22, 23, 23}, // HOUSE_BOATS_67 + {255, 255, 255, 255}, // HOUSE_BOATS_68 + { 27, 28, 29, 30}, // HOUSE_BOATS_69 + { 31, 32, 33, 33}, // HOUSE_BOATS_70 + { 24, 24, 24, 24}, // HOUSE_BOATS_71 + {255, 255, 255, 255}, // HOUSE_BOATS_72 + {255, 255, 255, 255} // HOUSE_BOATS_73 +}; + + + + + const stru159 pAnimatedRooms[196] = //0x4E5F70 { {"", 0x4, 0x1F4, 0, 0, 0}, @@ -673,7 +712,7 @@ { if ( in_current_building_type == BildingType_Training ) { - if ( uMessageParam == 17 ) + if ( uMessageParam == HOUSE_DIALOGUE_TRAININGHALL_TRAIN ) { v4 = 0; v5 = 0; @@ -703,7 +742,7 @@ { v8 = window_SpeakInHouse; if ((in_current_building_type == BildingType_Stables || in_current_building_type == BildingType_Boats) && - array_4F09B0[byte_4F0CD0[(unsigned int)window_SpeakInHouse->ptr_1C - 1][uMessageParam - 1]].pSchedule[pParty->uDaysPlayed % 7] + transport_schedule[transport_routes[(unsigned int)window_SpeakInHouse->ptr_1C - HOUSE_STABLES_HARMONDALE][uMessageParam - HOUSE_DIALOGUE_TRANSPORT_SCHEDULE_1]].pSchedule[pParty->uDaysPlayed % 7] || in_current_building_type != BildingType_Temple || uMessageParam != BildingType_MindGuild ) { //LABEL_9: @@ -1687,11 +1726,11 @@ unsigned int v3; // eax@1 signed int v4; // ebx@1 stru365_travel_info *v5; // esi@7 - int v6; // eax@9 - int v7; // eax@9 - int v8; // eax@12 - int v9; // edi@12 - int v10; // edx@12 + //int v6; // eax@9 + //int v7; // eax@9 + //int v8; // eax@12 + //int v9; // edi@12 + //int v10; // edx@12 int v11; // ecx@12 signed int v12; // esi@13 signed int v13; // edi@14 @@ -1708,7 +1747,7 @@ GUIButton *v24; // ebx@39 signed int v25; // eax@41 //int v26; // esi@44 - const char *v27; // eax@46 + //const char *v27; // eax@46 char *v28; // eax@62 int v29; // eax@62 unsigned int v30; // ecx@62 @@ -1729,18 +1768,18 @@ unsigned int v45; // [sp-8h] [bp-298h]@62 char *v46; // [sp-4h] [bp-294h]@62 const char *v47[5]; // [sp+0h] [bp-290h]@7*/ - char v48[100]; // [sp+14h] [bp-27Ch]@37 - char v49[100]; // [sp+78h] [bp-218h]@68 - char v50[100]; // [sp+DCh] [bp-1B4h]@68 - char v51[100]; // [sp+140h] [bp-150h]@68 - char Dest[100]; // [sp+1A4h] [bp-ECh]@36 + char v48[5][100]; // [sp+14h] [bp-27Ch]@37 + //char v49[100]; // [sp+78h] [bp-218h]@68 + //char v50[100]; // [sp+DCh] [bp-1B4h]@68 + //char v51[100]; // [sp+140h] [bp-150h]@68 + //char Dest[100]; // [sp+1A4h] [bp-ECh]@36 GUIWindow v53; // [sp+208h] [bp-88h]@1 int v54; // [sp+25Ch] [bp-34h]@36 int v55; // [sp+260h] [bp-30h]@36 - unsigned int v56; // [sp+264h] [bp-2Ch]@1 - int v57; // [sp+268h] [bp-28h]@1 + //unsigned int v56; // [sp+264h] [bp-2Ch]@1 + //int v57; // [sp+268h] [bp-28h]@1 int v58; // [sp+26Ch] [bp-24h]@36 - GUIWindow *v59; // [sp+270h] [bp-20h]@1 + //GUIWindow *v59; // [sp+270h] [bp-20h]@1 unsigned int v60; // [sp+274h] [bp-1Ch]@36 //Player *v61; // [sp+278h] [bp-18h]@1 int v62; // [sp+27Ch] [bp-14h]@36 @@ -1757,13 +1796,16 @@ v53.uFrameX = 483; v53.uFrameWidth = 148; v53.uFrameZ = 334; - v57 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu); - v56 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu); + auto color_default = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(255, 255, 255); + auto color_selected = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(255, 255, 155); v3 = 52 * (unsigned int)v0->ptr_1C; //v59 = (GUIWindow *)((((p2DEvents_minus1___00[v3 / 2] != 27) - 1) & 0xFFFFFFE7) + 50); - v59 = (GUIWindow *)((((p2DEvents[(unsigned int)v0->ptr_1C - 1].uType != 27) - 1) & 0xFFFFFFE7) + 50); + //v59 = (GUIWindow *)((((p2DEvents[(unsigned int)v0->ptr_1C - 1].uType != BildingType_Stables) - 1) & 0xFFFFFFE7) + 50); //v4 = (signed __int64)((double)(signed int)v59 * p2DEvents_minus1__20[v3 / 4]); - v4 = (signed __int64)((double)(signed int)v59 * p2DEvents[(unsigned int)v0->ptr_1C - 1].fPriceMultiplier); + + v4 = p2DEvents[(unsigned int)v0->ptr_1C - 1].uType == BildingType_Stables ? 25 : 50; + v4 *= p2DEvents[(unsigned int)v0->ptr_1C - 1].fPriceMultiplier; + s1 = v4 * (100 - v1->GetMerchant()) / 100; if ( (signed int)s1 < v4 / 3 ) s1 = v4 / 3; @@ -1772,12 +1814,12 @@ if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) { v16 = pDialogueWindow; - v58 = -1; + v58 = 255; v62 = 0; v17 = LOBYTE(pFontArrus->uFontHeight) - 3; - v59 = pDialogueWindow; + //v59 = pDialogueWindow; v54 = v17; - strcpy(Dest, ""); + strcpy(v48[4], ""); sprintfex(pTmpBuf2, pGlobalTXT_LocalizationStrings[405], s1); // Price: %lu gold v18 = pFontArrus->CalcTextHeight(pTmpBuf2, &v53, 0, 0); v19 = v16->pNumPresenceButton; @@ -1789,40 +1831,47 @@ if ( v21 >= v21 + v19 ) goto LABEL_71; s1 = 2; - a1 = v48; + a1 = (char *)v48; while ( 1 ) { int v47 = v60; v22 = window_SpeakInHouse->ptr_1C; - v23 = byte_4F0E10[(unsigned int)v22 - HOUSE_STABLES_HARMONDALE][v62]; + v23 = transport_routes[(unsigned int)v22 - HOUSE_STABLES_HARMONDALE][v62]; //v23 = (unsigned __int8)*(&_4F0D38_TravelInfo[4 * (unsigned int)v22] + v62); // negindex. actual address is around + 0x36 //v61 = (Player *)(unsigned __int8)*(&_4F0D38_TravelInfo[4 * (unsigned int)v22] + v62); // + 0x3F for sea travels, less for land v24 = v16->GetControl(v60); - if ( v23 != v58 - && ((signed int)s1 >= 6 ? (v25 = 1) : (v25 = array_4F09B0[v23].pSchedule[pParty->uDaysPlayed % 7]), - v25 - && (array_4F09B0[v23].uQuestBit || _449B57_test_bit(pParty->_quest_bits, array_4F09B0[v23].uQuestBit))) ) + + if (v23 != v58) { - v58 = v23; - v27 = (const char *)v56; - if ( pDialogueWindow->pCurrentPosActiveItem != s1 ) - v27 = (const char *)v57; + if (v23 >= 25) + Log::Warning(L"Transport UI: scedule overflow"); + if (s1 >= 6) + v25 = true; + else + v25 = transport_schedule[v23].pSchedule[pParty->uDaysPlayed % 7]; + } + + if (v23 != v58 && v25 && (!transport_schedule[v23].uQuestBit || _449B57_test_bit(pParty->_quest_bits, transport_schedule[v23].uQuestBit)) ) + { + v58 = v23; + if ( pDialogueWindow->pCurrentPosActiveItem == s1 ) + sprintf(a1, "\f%05d", color_selected); + else + sprintf(a1, "\f%05d", color_default); + //v32.uRedbookTrackID = v27; - sprintf(a1, "\f%05d", v27); - v66 = array_4F09B0[v23].uTravelTime; - if ( (signed int)window_SpeakInHouse->ptr_1C >= 63 ) + v66 = transport_schedule[v23].uTravelTime; + if ( (unsigned int)window_SpeakInHouse->ptr_1C >= HOUSE_BOATS_63 ) { if ( CheckHiredNPCSpeciality(Sailor) ) v66 -= 2; if ( CheckHiredNPCSpeciality(Navigator) ) v66 -= 3; - //v47 = Pirate; if ( CheckHiredNPCSpeciality(Pirate) ) v66 -= 2; } else { - //v47 = Horseman; if ( CheckHiredNPCSpeciality(Horseman) ) v66 -= 2; } @@ -1832,9 +1881,9 @@ v66 = 1; if ( v23 != v2 ) { - memcpy(&v32, &pMapStats->pInfos[array_4F09B0[v23].uMapInfoID], 0x44u); + memcpy(&v32, &pMapStats->pInfos[transport_schedule[v23].uMapInfoID], 0x44u); sprintfex(pTmpBuf, pGlobalTXT_LocalizationStrings[404], // Time - %d days, destination %s - v66, v32.pName); + v66, v32.pName); strcat(a1, pTmpBuf); v28 = a1; a1 += 100; @@ -1865,9 +1914,9 @@ } } ++v60; - if ( (signed int)v60 >= v59->pNumPresenceButton + v59->pStartingPosActiveItem ) + if ( (signed int)v60 >= v16->pNumPresenceButton + v16->pStartingPosActiveItem ) break; - v16 = v59; + //v16 = v59; } if ( v63 != v55 ) { @@ -1877,21 +1926,21 @@ v45 = (unsigned int)&v49; v44 = &v48; v43 = pTmpBuf2;*/ - sprintf(pTmpBuf, "%s\n \n%s%s%s%s%s", pTmpBuf2, v48, v49, v50, v51, Dest); + sprintf(pTmpBuf, "%s\n \n%s%s%s%s%s", pTmpBuf2, v48[0], v48[1], v48[2], v48[3], v48[4]); v53.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u); } else { LABEL_71: v53.DrawTitleText(pFontArrus, 0, (174 - pFontArrus->CalcTextHeight(pGlobalTXT_LocalizationStrings[561], &v53, 0, 0)) / 2 + 138, - v57, pGlobalTXT_LocalizationStrings[561], 3); + color_default, pGlobalTXT_LocalizationStrings[561], 3); pAudioPlayer->StopChannels(-1, -1); } } } else { - if ( dialog_menu_id > HOUSE_DIALOGUE_TAVERN_ARCOMAGE_RESULT && dialog_menu_id <= HOUSE_DIALOGUE_108 ) + if ( dialog_menu_id >= HOUSE_DIALOGUE_TRANSPORT_SCHEDULE_1 && dialog_menu_id <= HOUSE_DIALOGUE_TRANSPORT_SCHEDULE_4 ) { if ( pParty->uNumGold < s1 ) { @@ -1906,39 +1955,35 @@ } Party::TakeGold(s1); //v47[1] = (const char *)7; - v5 = &array_4F09B0[byte_4F0CD0[(unsigned int)window_SpeakInHouse->ptr_1C - 1][dialog_menu_id - 1]]; + v5 = &transport_schedule[transport_routes[(unsigned int)window_SpeakInHouse->ptr_1C - HOUSE_STABLES_HARMONDALE][dialog_menu_id - HOUSE_DIALOGUE_TRANSPORT_SCHEDULE_1]]; if ( v5->pSchedule[pParty->uDaysPlayed % 7] ) { if ( _strcmpi(pCurrentMapName, pMapStats->pInfos[v5->uMapInfoID].pFilename) ) { SaveGame(1, 0); strcpy(pCurrentMapName, pMapStats->pInfos[v5->uMapInfoID].pFilename); - v8 = v5->field_18; - v9 = v5->field_14; - v10 = v5->field_10; + dword_6BE364_game_settings_1 |= 1u; _5B65B8_npcdata_hiword_house_or_other = 0; dword_5B65BC = 0; - _5B65B4_npcdata_loword_house_or_other = v8; + _5B65B4_npcdata_loword_house_or_other = v5->arrival_rot_y; v11 = *((int *)v5 + 3); uGameState = 2; _5B65A8_npcdata_uflags_or_other = v11; - _5B65AC_npcdata_fame_or_other = v10; - _5B65B0_npcdata_rep_or_other = v9; - dword_5B65C0 = v11 | v10 | v9 | v8; + _5B65AC_npcdata_fame_or_other = v5->arrival_y; + _5B65B0_npcdata_rep_or_other = v5->arrival_z; + dword_5B65C0 = v11 | v5->arrival_y | v5->arrival_z | v5->arrival_rot_y; } else { - v6 = v5->field_C; - pParty->sRotationX = 0; - pParty->vPosition.x = v6; - v7 = v5->field_10; pIndoorCamera->sRotationY = 0; pParty->uFlags |= 2u; - pParty->vPosition.y = v7; - pParty->vPosition.z = v5->field_14; + pParty->vPosition.x = v5->arrival_x; + pParty->vPosition.y = v5->arrival_y; + pParty->vPosition.z = v5->arrival_z; pParty->uFallStartY = pParty->vPosition.z; - pParty->sRotationY = v5->field_18; + pParty->sRotationX = 0; + pParty->sRotationY = v5->arrival_rot_y; } PlayHouseSound((unsigned int)window_SpeakInHouse->ptr_1C, HouseSound_NotEnoughMoney_TrainingSuccessful); v12 = v5->uTravelTime; @@ -2005,29 +2050,16 @@ //----- (004B68EA) -------------------------------------------------------- bool __fastcall IsTravelAvailable(int a1) { - //signed int v1; // edi@1 - //int *v2; // esi@1 - //int v3; // ecx@2 - - __debugbreak(); // fill all 25 elements of array_4F09B0 before continue - //v1 = 0; - //v2 = &dword_4F0E10[a1]; - //while ( 1 ) for (uint i = 0; i < 4; ++i) { - uint idx = byte_4F0E10[a1][i]; - //v3 = 8 * byte_4F0E10[a1][i]; - if (array_4F09B0[idx].pSchedule[pParty->uDaysPlayed % 7]) + uint route = transport_routes[a1][i]; + if (transport_schedule[route].pSchedule[pParty->uDaysPlayed % 7]) { - if (!array_4F09B0[idx].uQuestBit || _449B57_test_bit(pParty->_quest_bits, array_4F09B0[idx].uQuestBit)) + if (!transport_schedule[route].uQuestBit || _449B57_test_bit(pParty->_quest_bits, transport_schedule[route].uQuestBit)) return true; } - //++v1; - //if ( v1 >= 4 ) - // return 0; } return false; - //return 1; } diff -r 7994986603d5 -r b9f6dd6f1444 UIHouses.h --- a/UIHouses.h Sat Mar 23 21:40:30 2013 +0200 +++ b/UIHouses.h Sun Mar 24 00:15:01 2013 +0200 @@ -37,9 +37,10 @@ HOUSE_DIALOGUE_TAVERN_ARCOMAGE_102 = 102, HOUSE_DIALOGUE_TAVERN_ARCOMAGE_103 = 103, HOUSE_DIALOGUE_TAVERN_ARCOMAGE_RESULT = 104, - - HOUSE_DIALOGUE_108 = 108, - + HOUSE_DIALOGUE_TRANSPORT_SCHEDULE_1 = 105, + HOUSE_DIALOGUE_TRANSPORT_SCHEDULE_2 = 106, + HOUSE_DIALOGUE_TRANSPORT_SCHEDULE_3 = 107, + HOUSE_DIALOGUE_TRANSPORT_SCHEDULE_4 = 108, HOUSE_DIALOGUE_OTHER = -1 }; @@ -53,6 +54,25 @@ HOUSE_ALCHEMIST_EMERALD_ISLE = 42, HOUSE_ALCHEMIST_HARMONDALE = 43, HOUSE_STABLES_HARMONDALE = 54, + HOUSE_STABLES_STEADWICK = 55, + HOUSE_STABLES_56 = 56, + HOUSE_STABLES_57 = 57, + HOUSE_STABLES_58 = 58, + HOUSE_STABLES_59 = 59, + HOUSE_STABLES_60 = 60, + HOUSE_STABLES_61 = 61, + HOUSE_STABLES_62 = 62, + HOUSE_BOATS_63 = 63, + HOUSE_BOATS_64 = 64, + HOUSE_BOATS_65 = 65, + HOUSE_BOATS_66 = 66, + HOUSE_BOATS_67 = 67, + HOUSE_BOATS_68 = 68, + HOUSE_BOATS_69 = 69, + HOUSE_BOATS_70 = 70, + HOUSE_BOATS_71 = 71, + HOUSE_BOATS_72 = 72, + HOUSE_BOATS_73 = 73, HOUSE_TEMPLE_EMERALD_ISLE = 74, HOUSE_TEMPLE_HARMONDALE = 75, HOUSE_TRAINING_HALL_EMERALD_ISLE = 89, diff -r 7994986603d5 -r b9f6dd6f1444 mm7_data.cpp --- a/mm7_data.cpp Sat Mar 23 21:40:30 2013 +0200 +++ b/mm7_data.cpp Sun Mar 24 00:15:01 2013 +0200 @@ -1497,64 +1497,6 @@ int price_for_membership[11]={100, 100, 50, 50, 50, 50, 50, 50, 50, 1000, 1000}; // weak - -unsigned char byte_4F0CD0[30][4] = -{ - { 9, 0, 1, 0}, // BildingType_WeaponShop - { 1, 0, 0, 0}, // BildingType_ArmorShop - { 1, 0, 0, 0}, // BildingType_MagicShop - { 0, 61, 0, 0}, // BildingType_AlchemistShop - {246, 24, 0, 0}, // BildingType_FireGuild - {193, 0, 0, 0}, // BildingType_AirGuild - { 0, 6, 0, 0}, // BildingType_WaterGuild - { 64, 0, 0, 0}, // BildingType_EarthGuild - { 6, 0, 1, 0}, // BildingType_SpiritGuild - { 1, 0, 0, 0}, // BildingType_MindGuild - { 1, 0, 0, 0}, // BildingType_BodyGuild - {227, 74, 0, 0}, // BildingType_LightGuild - {246, 178, 255, 255}, // BildingType_DarkGuild - {193, 0, 0, 0}, // BildingType_14 - { 0, 4, 0, 0}, // BildingType_15 - { 0, 0, 0, 0}, // BildingType_16 - { 3, 0, 1, 0}, // BildingType_TownHall - { 1, 0, 1, 0}, // BildingType_18 - { 2, 0, 0, 0}, // BildingType_19 - { 25, 215, 255, 255}, // BildingType_Throne_Room - {185, 52, 0, 0}, // BildingType_Tavern - {193, 0, 0, 0}, // BildingType_Bank - { 0, 6, 0, 0}, // BildingType_Temple - { 0, 0, 0, 0}, // BuildingType_24 - { 6, 1, 0, 1}, // BildingType_Unic - { 0, 0, 0, 0}, // BildingType_1A - { 4, 0, 0, 0}, // BildingType_Stables - {227, 74, 0, 0}, // BildingType_Boats - {246, 178, 255, 255}, // BildingType_House - {193, 0, 0, 0} // BildingType_Training -}; - -unsigned char byte_4F0E10[20][4] = -{ - { 0, 1, 1, 34}, - { 2, 3, 4, 5}, - { 6, 7, 8, 8}, - { 9, 10, 10, 10}, - { 11, 11, 12, 12}, - { 13, 13, 13, 13}, - { 14, 14, 15, 15}, - {255, 255, 255, 255}, - {255, 255, 255, 255}, - {255, 255, 255, 255}, - { 16, 17, 18, 19}, - { 18, 20, 21, 21}, - { 22, 23, 24, 25}, - { 22, 22, 23, 23}, - {255, 255, 255, 255}, - { 27, 28, 29, 30}, - { 31, 32, 33, 33}, - { 24, 24, 24, 24}, - {255, 255, 255, 255}, - {255, 255, 255, 255} -}; Vec2_int_ pMonsterArenaPlacements[20]; __int16 word_4F0F30[32] ={ 4, 7, 10, 11, 4, 7, 10, 11, diff -r 7994986603d5 -r b9f6dd6f1444 mm7_data.h --- a/mm7_data.h Sat Mar 23 21:40:30 2013 +0200 +++ b/mm7_data.h Sun Mar 24 00:15:01 2013 +0200 @@ -1011,15 +1011,7 @@ extern __int16 _4F0882_evt_VAR_PlayerItemInHands_vals[54]; extern unsigned short pMaxLevelPerTrainingHallType[]; extern int price_for_membership[]; // weak -//extern char byte_4F09B0[]; // weak -//extern char byte_4F09B1[]; // weak -//extern char byte_4F09B8[]; // weak -//extern int dword_4F09CC[192]; -//extern char byte_4F0CCF[]; // weak -extern unsigned char byte_4F0CD0[30][4]; -//extern char _4F0D38_TravelInfo[]; // negindex inside byte_4F0CD0; indexing furthers structs -//extern int dword_4F0E10[32]; -extern unsigned char byte_4F0E10[20][4]; + extern Vec2_int_ pMonsterArenaPlacements[20]; extern __int16 word_4F0F30[32]; // weak extern char aS03d[]; // idb