diff options
Diffstat (limited to 'src/record_mixing.c')
-rw-r--r-- | src/record_mixing.c | 705 |
1 files changed, 149 insertions, 556 deletions
diff --git a/src/record_mixing.c b/src/record_mixing.c index 4c3c3d03c..5f1aef1df 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -33,31 +33,17 @@ #include "new_game.h" #include "daycare.h" #include "international_string_util.h" +#include "constants/battle_frontier.h" extern void ReceiveSecretBasesData(struct SecretBaseRecord *, size_t, u8); extern void ReceiveEasyChatPairsData(struct EasyChatPair *, size_t, u8); // Static type declarations -struct UnknownRecMixingStruct +struct RecordMixingHallRecords { - u32 field_0; - u16 field_4; - u8 field_6[9]; -}; - -struct UnknownRecMixingStruct2 -{ - u32 field_0; - u16 field_4; - u16 field_6; - u16 field_8; - u8 field_A[16]; -}; - -struct UnknownRecMixingStruct3 -{ - u8 field_0[0x810]; + struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][2][6]; + struct RankingHall2P hallRecords2P[2][6]; }; struct PlayerRecordsRS @@ -69,6 +55,7 @@ struct PlayerRecordsRS struct EasyChatPair easyChatPairs[5]; struct RecordMixingDayCareMail dayCareMail; struct RSBattleTowerRecord battleTowerRecord; + u16 giftItem; u16 filler11C8[0x32]; }; @@ -81,10 +68,10 @@ struct PlayerRecordsEmerald /* 0x1084 */ struct EasyChatPair easyChatPairs[5]; /* 0x10ac */ struct RecordMixingDayCareMail dayCareMail; /* 0x1124 */ struct EmeraldBattleTowerRecord battleTowerRecord; - /* 0x1210 */ u16 unk_1210; + /* 0x1210 */ u16 giftItem; /* 0x1214 */ LilycoveLady lilycoveLady; /* 0x1254 */ struct Apprentice apprentice[2]; - /* 0x12dc */ struct UnkRecordMixingStruct2 unk_12dc; + /* 0x12dc */ struct PlayerHallRecords hallRecords; /* 0x1434 */ u8 field_1434[0x10]; }; // 0x1444 @@ -105,12 +92,12 @@ static IWRAM_DATA struct EasyChatPair *sEasyChatPairsSave; static IWRAM_DATA struct RecordMixingDayCareMail *gUnknown_03001148; static IWRAM_DATA void *sBattleTowerSave; static IWRAM_DATA LilycoveLady *sLilycoveLadySave; -static IWRAM_DATA void *gUnknown_03001154; // gSaveBlock2Ptr->field_0DC; +static IWRAM_DATA void *sApprenticesSave; static IWRAM_DATA void *sBattleTowerSave_Duplicate; static IWRAM_DATA u32 sRecordStructSize; static IWRAM_DATA u8 gUnknown_03001160; static IWRAM_DATA u32 filler_03001164; -static IWRAM_DATA u32 gUnknown_03001168[3]; +static IWRAM_DATA struct PlayerHallRecords *gUnknown_03001168[3]; static EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02039F9C = {0}; static EWRAM_DATA union PlayerRecords *sReceivedRecords = NULL; @@ -132,11 +119,11 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t, u8); static void ReceiveLilycoveLadyData(LilycoveLady *, size_t, u8); static void sub_80E7B2C(const u8 *); static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *, size_t, u8, TVShow *); -static void sub_80E7F68(u16 *item, u8 which); +static void ReceiveGiftItem(u16 *item, u8 which); static void sub_80E7FF8(u8 taskId); static void sub_80E8110(struct Apprentice *arg0, struct Apprentice *arg1); static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2); -static void sub_80E89AC(struct UnkRecordMixingStruct2 *arg0, size_t arg1, u32 arg2); +static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2); static void sub_80E89F8(struct RecordMixingDayCareMail *dst); static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src); static void SanitizeEmeraldBattleTowerRecord(struct EmeraldBattleTowerRecord *arg0); @@ -197,10 +184,10 @@ static void SetSrcLookupPointers(void) sOldManSave = &gSaveBlock1Ptr->oldMan; sEasyChatPairsSave = gSaveBlock1Ptr->easyChatPairs; gUnknown_03001148 = &gUnknown_02039F9C; - sBattleTowerSave = &gSaveBlock2Ptr->frontier.battleTower; + sBattleTowerSave = &gSaveBlock2Ptr->frontier.towerPlayer; sLilycoveLadySave = &gSaveBlock1Ptr->lilycoveLady; - gUnknown_03001154 = gSaveBlock2Ptr->apprentices; - sBattleTowerSave_Duplicate = &gSaveBlock2Ptr->frontier.battleTower; + sApprenticesSave = gSaveBlock2Ptr->apprentices; + sBattleTowerSave_Duplicate = &gSaveBlock2Ptr->frontier.towerPlayer; } static void PrepareUnknownExchangePacket(struct PlayerRecordsRS *dest) @@ -212,10 +199,10 @@ static void PrepareUnknownExchangePacket(struct PlayerRecordsRS *dest) memcpy(&dest->oldMan, sOldManSave, sizeof(dest->oldMan)); memcpy(dest->easyChatPairs, sEasyChatPairsSave, sizeof(dest->easyChatPairs)); sub_80E89F8(&dest->dayCareMail); - sub_81659DC(sBattleTowerSave, &dest->battleTowerRecord); + EmeraldBattleTowerRecordToRuby(sBattleTowerSave, &dest->battleTowerRecord); if (GetMultiplayerId() == 0) - dest->battleTowerRecord.unk_11c8 = GetRecordMixingGift(); + dest->giftItem = GetRecordMixingGift(); } static void PrepareExchangePacketForRubySapphire(struct PlayerRecordsRS *dest) @@ -230,11 +217,11 @@ static void PrepareExchangePacketForRubySapphire(struct PlayerRecordsRS *dest) memcpy(dest->easyChatPairs, sEasyChatPairsSave, sizeof(dest->easyChatPairs)); sub_80E89F8(&dest->dayCareMail); SanitizeDayCareMailForRuby(&dest->dayCareMail); - sub_81659DC(sBattleTowerSave, &dest->battleTowerRecord); + EmeraldBattleTowerRecordToRuby(sBattleTowerSave, &dest->battleTowerRecord); SanitizeRubyBattleTowerRecord(&dest->battleTowerRecord); if (GetMultiplayerId() == 0) - dest->battleTowerRecord.unk_11c8 = GetRecordMixingGift(); + dest->giftItem = GetRecordMixingGift(); } static void PrepareExchangePacket(void) @@ -263,10 +250,10 @@ static void PrepareExchangePacket(void) SanitizeEmeraldBattleTowerRecord(&sSentRecord->emerald.battleTowerRecord); if (GetMultiplayerId() == 0) - sSentRecord->emerald.unk_1210 = GetRecordMixingGift(); + sSentRecord->emerald.giftItem = GetRecordMixingGift(); - sub_80E8110(sSentRecord->emerald.apprentice, gUnknown_03001154); - sub_80E8260(&sSentRecord->emerald.unk_12dc); + sub_80E8110(sSentRecord->emerald.apprentice, sApprenticesSave); + GetPlayerHallRecords(&sSentRecord->emerald.hallRecords); } } @@ -283,7 +270,7 @@ static void ReceiveExchangePacket(u32 which) ReceivePokeNewsData(sReceivedRecords->ruby.pokeNews, sizeof(struct PlayerRecordsRS), which); ReceiveOldManData(&sReceivedRecords->ruby.oldMan, sizeof(struct PlayerRecordsRS), which); ReceiveEasyChatPairsData(sReceivedRecords->ruby.easyChatPairs, sizeof(struct PlayerRecordsRS), which); - sub_80E7F68(&sReceivedRecords->ruby.battleTowerRecord.unk_11c8, which); + ReceiveGiftItem(&sReceivedRecords->ruby.giftItem, which); } else { @@ -296,10 +283,10 @@ static void ReceiveExchangePacket(u32 which) ReceiveEasyChatPairsData(sReceivedRecords->emerald.easyChatPairs, sizeof(struct PlayerRecordsEmerald), which); ReceiveDaycareMailData(&sReceivedRecords->emerald.dayCareMail, sizeof(struct PlayerRecordsEmerald), which, sReceivedRecords->emerald.tvShows); ReceiveBattleTowerData(&sReceivedRecords->emerald.battleTowerRecord, sizeof(struct PlayerRecordsEmerald), which); - sub_80E7F68(&sReceivedRecords->emerald.unk_1210, which); + ReceiveGiftItem(&sReceivedRecords->emerald.giftItem, which); ReceiveLilycoveLadyData(&sReceivedRecords->emerald.lilycoveLady, sizeof(struct PlayerRecordsEmerald), which); ReceiveApprenticeData(sReceivedRecords->emerald.apprentice, sizeof(struct PlayerRecordsEmerald), (u8) which); - sub_80E89AC(&sReceivedRecords->emerald.unk_12dc, sizeof(struct PlayerRecordsEmerald), (u8) which); + ReceiveRankingHallRecords(&sReceivedRecords->emerald.hallRecords, sizeof(struct PlayerRecordsEmerald), (u8) which); } } @@ -667,7 +654,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u ShufflePlayerIndices(mixIndices); if (Link_AnyPartnersPlayingRubyOrSapphire()) { - if (sub_816587C((void *)battleTowerRecord + recordSize * mixIndices[which], (void *)battleTowerRecord + recordSize * which) == TRUE) + if (RubyBattleTowerRecordToEmerald((void *)battleTowerRecord + recordSize * mixIndices[which], (void *)battleTowerRecord + recordSize * which) == TRUE) { dest = (void *)battleTowerRecord + recordSize * which; dest->language = gLinkPlayers[mixIndices[which]].language; @@ -676,7 +663,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u } else { - memcpy((void *)battleTowerRecord + recordSize * which, (void *)battleTowerRecord + recordSize * mixIndices[which], sizeof(union BattleTowerRecord)); + memcpy((void *)battleTowerRecord + recordSize * which, (void *)battleTowerRecord + recordSize * mixIndices[which], sizeof(struct EmeraldBattleTowerRecord)); dest = (void *)battleTowerRecord + recordSize * which; for (i = 0; i < 4; i ++) { @@ -686,7 +673,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u } CalcEmeraldBattleTowerChecksum(dest); } - sub_81628A0((void *)battleTowerRecord + recordSize * which); + PutNewBattleTowerRecord((void *)battleTowerRecord + recordSize * which); } static void ReceiveLilycoveLadyData(LilycoveLady *lilycoveLady, size_t recordSize, u8 which) @@ -1460,7 +1447,7 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r } #endif // NONMATCHING -static void sub_80E7F68(u16 *item, u8 which) +static void ReceiveGiftItem(u16 *item, u8 which) { if (which != 0 && *item != ITEM_NONE && GetPocketByItemId(*item) == POCKET_KEY_ITEMS) { @@ -1570,12 +1557,12 @@ static void sub_80E8110(struct Apprentice *dst, struct Apprentice *src) id = ((i + gSaveBlock2Ptr->playerApprentice.field_B2_1) % 3) + 1; if (src[id].playerName[0] != EOS) { - if (ReadUnalignedWord(src[id].playerId) != ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId)) + if (GetTrainerId(src[id].playerId) != GetTrainerId(gSaveBlock2Ptr->playerTrainerId)) { r8++; var_2C = id; } - if (ReadUnalignedWord(src[id].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId)) + if (GetTrainerId(src[id].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId)) { var_24++; var_28 = id; @@ -1607,42 +1594,42 @@ static void sub_80E8110(struct Apprentice *dst, struct Apprentice *src) } } -void sub_80E8260(struct UnkRecordMixingStruct2 *dst) +void GetPlayerHallRecords(struct PlayerHallRecords *dst) { s32 i, j; - for (i = 0; i < 9; i++) + for (i = 0; i < HALL_FACILITIES_COUNT; i++) { for (j = 0; j < 2; j++) { - CopyUnalignedWord(dst->field_0[i][j].playerId, gSaveBlock2Ptr->playerTrainerId); - dst->field_0[i][j].language = GAME_LANGUAGE; - StringCopy(dst->field_0[i][j].playerName, gSaveBlock2Ptr->playerName); + CopyTrainerId(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId); + dst->onePlayer[i][j].language = GAME_LANGUAGE; + StringCopy(dst->onePlayer[i][j].name, gSaveBlock2Ptr->playerName); } } for (j = 0; j < 2; j++) { - dst->field_120[j].language = GAME_LANGUAGE; - CopyUnalignedWord(dst->field_120[j].playerId1, gSaveBlock2Ptr->playerTrainerId); - CopyUnalignedWord(dst->field_120[j].playerId2, gSaveBlock2Ptr->frontier.field_EF1[j]); - StringCopy(dst->field_120[j].playerName1, gSaveBlock2Ptr->playerName); - StringCopy(dst->field_120[j].playerName2, gSaveBlock2Ptr->frontier.field_EE1[j]); + dst->twoPlayers[j].language = GAME_LANGUAGE; + CopyTrainerId(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId); + CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]); + StringCopy(dst->twoPlayers[j].name1, gSaveBlock2Ptr->playerName); + StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.field_EE1[j]); } for (i = 0; i < 2; i++) { - dst->field_0[0][i].field_4 = gSaveBlock2Ptr->frontier.field_CF0[i]; - dst->field_0[1][i].field_4 = gSaveBlock2Ptr->frontier.field_CF4[i]; - dst->field_0[2][i].field_4 = gSaveBlock2Ptr->frontier.field_CF8[i]; - dst->field_0[3][i].field_4 = gSaveBlock2Ptr->frontier.field_D14[0][i]; - dst->field_0[4][i].field_4 = gSaveBlock2Ptr->frontier.field_DD0[0][i]; - dst->field_0[5][i].field_4 = gSaveBlock2Ptr->frontier.field_DDE[i]; - dst->field_0[6][i].field_4 = gSaveBlock2Ptr->frontier.field_DEA[i]; - dst->field_0[7][i].field_4 = gSaveBlock2Ptr->frontier.field_E08[i]; - dst->field_0[8][i].field_4 = gSaveBlock2Ptr->frontier.field_E1E[i]; - - dst->field_120[i].field_8 = gSaveBlock2Ptr->frontier.field_CFC[i]; + dst->onePlayer[0][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[1][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_DOUBLES][i]; + dst->onePlayer[2][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_MULTIS][i]; + dst->onePlayer[3][i].winStreak = gSaveBlock2Ptr->frontier.domeRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[4][i].winStreak = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[5][i].winStreak = gSaveBlock2Ptr->frontier.arenaRecordStreaks[i]; + dst->onePlayer[6][i].winStreak = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[7][i].winStreak = gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]; + dst->onePlayer[8][i].winStreak = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[i]; + + dst->twoPlayers[i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_LINK_MULTIS][i]; } } @@ -1652,7 +1639,7 @@ static bool32 sub_80E841C(struct Apprentice *arg0, struct Apprentice *arg1) for (i = 0; i < 4; i++) { - if (ReadUnalignedWord(arg0->playerId) == ReadUnalignedWord(arg1[i].playerId) + if (GetTrainerId(arg0->playerId) == GetTrainerId(arg1[i].playerId) && arg0->number == arg1[i].number) { return TRUE; @@ -1700,538 +1687,144 @@ static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2 } } -NAKED -static void sub_80E8578(struct UnknownRecMixingStruct3 *arg0, struct UnkRecordMixingStruct2 *arg1, size_t arg2, u32 arg3, u32 arg4) +static void sub_80E8578(struct RecordMixingHallRecords *dst, void *hallRecords, size_t recordSize, u32 arg3, s32 linkPlayerCount) { - asm_unified(" push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x54\n\ - str r0, [sp]\n\ - ldr r0, [sp, 0x74]\n\ - movs r4, 0\n\ - mov r8, r4\n\ - movs r5, 0\n\ - str r5, [sp, 0x4]\n\ - ldr r4, =gUnknown_03001168\n\ - b _080E85A0\n\ - .pool\n\ -_080E8598:\n\ - adds r1, r2\n\ - ldr r6, [sp, 0x4]\n\ - adds r6, 0x1\n\ - str r6, [sp, 0x4]\n\ -_080E85A0:\n\ - ldr r5, [sp, 0x4]\n\ - cmp r5, r0\n\ - bge _080E85B6\n\ - cmp r5, r3\n\ - beq _080E85B0\n\ - stm r4!, {r1}\n\ - movs r6, 0x1\n\ - add r8, r6\n\ -_080E85B0:\n\ - mov r5, r8\n\ - cmp r5, 0x3\n\ - bne _080E8598\n\ -_080E85B6:\n\ - movs r6, 0\n\ - str r6, [sp, 0x4]\n\ - subs r0, 0x1\n\ - str r0, [sp, 0x24]\n\ -_080E85BE:\n\ - movs r0, 0\n\ - str r0, [sp, 0x8]\n\ - ldr r1, [sp, 0x4]\n\ - adds r1, 0x1\n\ - str r1, [sp, 0x28]\n\ - ldr r2, [sp, 0x4]\n\ - lsls r2, 1\n\ - str r2, [sp, 0x34]\n\ - ldr r3, [sp, 0x4]\n\ - adds r3, r2, r3\n\ - str r3, [sp, 0x10]\n\ - movs r4, 0\n\ - str r4, [sp, 0x44]\n\ - movs r5, 0\n\ - str r5, [sp, 0x48]\n\ -_080E85DC:\n\ - movs r6, 0\n\ - mov r8, r6\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r1, [r0]\n\ - ldr r2, [sp, 0x10]\n\ - lsls r0, r2, 5\n\ - ldr r3, [sp, 0x48]\n\ - adds r0, r3, r0\n\ - adds r3, r0, r1\n\ - lsls r0, r2, 6\n\ - ldr r4, [sp, 0x44]\n\ - adds r0, r4, r0\n\ - ldr r5, [sp]\n\ - adds r2, r0, r5\n\ -_080E85F8:\n\ - adds r0, r2, 0\n\ - movs r6, 0x87\n\ - lsls r6, 2\n\ - adds r1, r3, r6\n\ - ldm r1!, {r4-r6}\n\ - stm r0!, {r4-r6}\n\ - ldr r1, [r1]\n\ - str r1, [r0]\n\ - adds r3, 0x10\n\ - adds r2, 0x10\n\ - movs r0, 0x1\n\ - add r8, r0\n\ - mov r1, r8\n\ - cmp r1, 0x2\n\ - ble _080E85F8\n\ - movs r2, 0\n\ - mov r8, r2\n\ - ldr r3, [sp, 0x24]\n\ - cmp r8, r3\n\ - bge _080E86DC\n\ - ldr r4, [sp, 0x4]\n\ - lsls r4, 5\n\ - mov r9, r4\n\ - ldr r5, [sp, 0x8]\n\ - lsls r7, r5, 4\n\ - ldr r6, [sp, 0x34]\n\ - ldr r1, [sp, 0x4]\n\ - adds r0, r6, r1\n\ - lsls r0, 6\n\ - str r0, [sp, 0x14]\n\ - ldr r2, [sp]\n\ - adds r0, r2, r0\n\ - ldr r3, [sp, 0x44]\n\ - str r3, [sp, 0x18]\n\ - adds r0, r3\n\ - str r0, [sp, 0x1C]\n\ - ldr r4, [sp, 0x14]\n\ - adds r0, r3, r4\n\ - adds r0, r2\n\ - adds r0, 0x30\n\ - mov r10, r0\n\ -_080E864A:\n\ - movs r5, 0\n\ - str r5, [sp, 0xC]\n\ - movs r3, 0\n\ - mov r6, r8\n\ - lsls r6, 2\n\ - str r6, [sp, 0x38]\n\ - ldr r1, [sp, 0x18]\n\ - ldr r2, [sp, 0x14]\n\ - adds r0, r1, r2\n\ - ldr r4, [sp]\n\ - adds r5, r0, r4\n\ - ldr r0, =gUnknown_03001168\n\ - adds r0, r6, r0\n\ - str r0, [sp, 0x50]\n\ -_080E8666:\n\ - lsls r0, r3, 4\n\ - ldr r6, [sp, 0x1C]\n\ - adds r0, r6, r0\n\ - str r3, [sp, 0x4C]\n\ - bl ReadUnalignedWord\n\ - adds r4, r0, 0\n\ - ldr r1, [sp, 0x50]\n\ - ldr r0, [r1]\n\ - add r0, r9\n\ - adds r0, r7\n\ - bl ReadUnalignedWord\n\ - ldr r3, [sp, 0x4C]\n\ - cmp r4, r0\n\ - bne _080E86A8\n\ - ldr r2, [sp, 0xC]\n\ - adds r2, 0x1\n\ - str r2, [sp, 0xC]\n\ - ldr r4, [sp, 0x50]\n\ - ldr r0, [r4]\n\ - mov r6, r9\n\ - adds r1, r7, r6\n\ - adds r1, r0, r1\n\ - ldrh r0, [r5, 0x4]\n\ - ldrh r2, [r1, 0x4]\n\ - cmp r0, r2\n\ - bcs _080E86A8\n\ - adds r0, r5, 0\n\ - ldm r1!, {r2,r4,r6}\n\ - stm r0!, {r2,r4,r6}\n\ - ldr r1, [r1]\n\ - str r1, [r0]\n\ -_080E86A8:\n\ - adds r5, 0x10\n\ - adds r3, 0x1\n\ - cmp r3, 0x2\n\ - ble _080E8666\n\ - ldr r3, [sp, 0xC]\n\ - cmp r3, 0\n\ - bne _080E86CE\n\ - ldr r0, =gUnknown_03001168\n\ - ldr r4, [sp, 0x38]\n\ - adds r0, r4, r0\n\ - ldr r0, [r0]\n\ - mov r5, r9\n\ - adds r2, r7, r5\n\ - mov r1, r10\n\ - adds r0, r2\n\ - ldm r0!, {r2,r3,r6}\n\ - stm r1!, {r2,r3,r6}\n\ - ldr r0, [r0]\n\ - str r0, [r1]\n\ -_080E86CE:\n\ - movs r4, 0x10\n\ - add r10, r4\n\ - movs r5, 0x1\n\ - add r8, r5\n\ - ldr r6, [sp, 0x24]\n\ - cmp r8, r6\n\ - blt _080E864A\n\ -_080E86DC:\n\ - ldr r0, [sp, 0x44]\n\ - adds r0, 0x60\n\ - str r0, [sp, 0x44]\n\ - ldr r1, [sp, 0x48]\n\ - adds r1, 0x30\n\ - str r1, [sp, 0x48]\n\ - ldr r2, [sp, 0x8]\n\ - adds r2, 0x1\n\ - str r2, [sp, 0x8]\n\ - cmp r2, 0x1\n\ - bgt _080E86F4\n\ - b _080E85DC\n\ -_080E86F4:\n\ - ldr r3, [sp, 0x28]\n\ - str r3, [sp, 0x4]\n\ - cmp r3, 0x8\n\ - bgt _080E86FE\n\ - b _080E85BE\n\ -_080E86FE:\n\ - movs r4, 0\n\ - str r4, [sp, 0x8]\n\ -_080E8702:\n\ - ldr r5, [sp, 0x8]\n\ - adds r5, 0x1\n\ - str r5, [sp, 0x2C]\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r1, [r0]\n\ - movs r0, 0x54\n\ - ldr r6, [sp, 0x8]\n\ - muls r0, r6\n\ - adds r3, r0, r1\n\ - movs r0, 0xA8\n\ - muls r0, r6\n\ - ldr r1, [sp]\n\ - adds r2, r0, r1\n\ - movs r4, 0x2\n\ - mov r8, r4\n\ -_080E8720:\n\ - movs r5, 0xD8\n\ - lsls r5, 3\n\ - adds r0, r2, r5\n\ - ldr r6, =0x0000057c\n\ - adds r1, r3, r6\n\ - ldm r1!, {r4-r6}\n\ - stm r0!, {r4-r6}\n\ - ldm r1!, {r4-r6}\n\ - stm r0!, {r4-r6}\n\ - ldr r1, [r1]\n\ - str r1, [r0]\n\ - adds r3, 0x1C\n\ - adds r2, 0x1C\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - add r8, r0\n\ - mov r1, r8\n\ - cmp r1, 0\n\ - bge _080E8720\n\ - movs r2, 0\n\ - mov r8, r2\n\ - ldr r3, [sp, 0x24]\n\ - cmp r8, r3\n\ - blt _080E8752\n\ - b _080E885A\n\ -_080E8752:\n\ - ldr r4, [sp, 0x8]\n\ - lsls r1, r4, 3\n\ - movs r0, 0xA8\n\ - adds r5, r4, 0\n\ - muls r5, r0\n\ - str r5, [sp, 0x20]\n\ - str r5, [sp, 0x3C]\n\ - subs r1, r4\n\ - lsls r1, 2\n\ - mov r10, r1\n\ -_080E8766:\n\ - movs r6, 0\n\ - str r6, [sp, 0xC]\n\ - mov r0, r8\n\ - lsls r0, 2\n\ - str r0, [sp, 0x38]\n\ - mov r1, r8\n\ - adds r1, 0x1\n\ - str r1, [sp, 0x30]\n\ - ldr r0, =gUnknown_03001168\n\ - ldr r2, [sp, 0x38]\n\ - adds r2, r0\n\ - mov r9, r2\n\ - ldr r3, [sp]\n\ - movs r4, 0xD8\n\ - lsls r4, 3\n\ - adds r0, r3, r4\n\ - ldr r5, [sp, 0x3C]\n\ - adds r7, r5, r0\n\ - str r6, [sp, 0x40]\n\ - movs r3, 0x2\n\ -_080E878E:\n\ - ldr r1, [sp, 0x20]\n\ - movs r2, 0xD8\n\ - lsls r2, 3\n\ - adds r0, r1, r2\n\ - ldr r4, [sp]\n\ - adds r0, r4, r0\n\ - ldr r6, [sp, 0x40]\n\ - adds r5, r0, r6\n\ - adds r0, r5, 0\n\ - str r3, [sp, 0x4C]\n\ - bl ReadUnalignedWord\n\ - adds r4, r0, 0\n\ - movs r6, 0x90\n\ - lsls r6, 1\n\ - add r6, r10\n\ - mov r1, r9\n\ - ldr r0, [r1]\n\ - adds r0, r6\n\ - bl ReadUnalignedWord\n\ - ldr r3, [sp, 0x4C]\n\ - cmp r4, r0\n\ - bne _080E8808\n\ - adds r0, r5, 0x4\n\ - bl ReadUnalignedWord\n\ - adds r4, r0, 0\n\ - mov r2, r9\n\ - ldr r0, [r2]\n\ - adds r0, r6\n\ - adds r0, 0x4\n\ - bl ReadUnalignedWord\n\ - ldr r3, [sp, 0x4C]\n\ - cmp r4, r0\n\ - bne _080E8808\n\ - ldr r4, [sp, 0xC]\n\ - adds r4, 0x1\n\ - str r4, [sp, 0xC]\n\ - mov r5, r9\n\ - ldr r0, [r5]\n\ - mov r6, r10\n\ - adds r2, r0, r6\n\ - movs r0, 0x94\n\ - lsls r0, 1\n\ - adds r1, r2, r0\n\ - ldrh r0, [r7, 0x8]\n\ - ldrh r1, [r1]\n\ - cmp r0, r1\n\ - bcs _080E8808\n\ - adds r0, r7, 0\n\ - movs r4, 0x90\n\ - lsls r4, 1\n\ - adds r1, r2, r4\n\ - ldm r1!, {r2,r5,r6}\n\ - stm r0!, {r2,r5,r6}\n\ - ldm r1!, {r4-r6}\n\ - stm r0!, {r4-r6}\n\ - ldr r1, [r1]\n\ - str r1, [r0]\n\ -_080E8808:\n\ - adds r7, 0x1C\n\ - ldr r0, [sp, 0x40]\n\ - adds r0, 0x1C\n\ - str r0, [sp, 0x40]\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _080E878E\n\ - ldr r1, [sp, 0xC]\n\ - cmp r1, 0\n\ - bne _080E8850\n\ - mov r0, r8\n\ - adds r0, 0x3\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - ldr r2, [sp, 0x20]\n\ - adds r1, r2\n\ - ldr r3, [sp]\n\ - adds r1, r3, r1\n\ - ldr r0, =gUnknown_03001168\n\ - ldr r4, [sp, 0x38]\n\ - adds r0, r4, r0\n\ - ldr r0, [r0]\n\ - add r0, r10\n\ - movs r5, 0xD8\n\ - lsls r5, 3\n\ - adds r1, r5\n\ - movs r6, 0x90\n\ - lsls r6, 1\n\ - adds r0, r6\n\ - ldm r0!, {r2-r4}\n\ - stm r1!, {r2-r4}\n\ - ldm r0!, {r2,r5,r6}\n\ - stm r1!, {r2,r5,r6}\n\ - ldr r0, [r0]\n\ - str r0, [r1]\n\ -_080E8850:\n\ - ldr r3, [sp, 0x30]\n\ - mov r8, r3\n\ - ldr r4, [sp, 0x24]\n\ - cmp r8, r4\n\ - blt _080E8766\n\ -_080E885A:\n\ - ldr r5, [sp, 0x2C]\n\ - str r5, [sp, 0x8]\n\ - cmp r5, 0x1\n\ - bgt _080E8864\n\ - b _080E8702\n\ -_080E8864:\n\ - add sp, 0x54\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - "); + s32 i, j, k, l; + s32 var_68; + + k = 0; + i = 0; + while (1) + { + if (i >= linkPlayerCount) + break; + if (i != arg3) + gUnknown_03001168[k++] = hallRecords; + + if (k == 3) + break; + hallRecords += recordSize; + i++; + } + + for (i = 0; i < HALL_FACILITIES_COUNT; i++) + { + for (j = 0; j < 2; j++) + { + for (k = 0; k < 3; k++) + dst->hallRecords1P[i][j][k] = gSaveBlock2Ptr->hallRecords1P[i][j][k]; + + for (k = 0; k < linkPlayerCount - 1; k++) + { + var_68 = 0; + for (l = 0; l < 3; l++) + { + if (GetTrainerId(dst->hallRecords1P[i][j][l].id) == GetTrainerId(gUnknown_03001168[k]->onePlayer[i][j].id)) + { + var_68++; + if (dst->hallRecords1P[i][j][l].winStreak < gUnknown_03001168[k]->onePlayer[i][j].winStreak) + dst->hallRecords1P[i][j][l] = gUnknown_03001168[k]->onePlayer[i][j]; + } + } + if (var_68 == 0) + dst->hallRecords1P[i][j][k + 3] = gUnknown_03001168[k]->onePlayer[i][j]; + } + } + } + + for (j = 0; j < 2; j++) + { + for (k = 0; k < 3; k++) + dst->hallRecords2P[j][k] = gSaveBlock2Ptr->hallRecords2P[j][k]; + + for (k = 0; k < linkPlayerCount - 1; k++) + { + var_68 = 0; + for (l = 0; l < 3; l++) + { + if (GetTrainerId(dst->hallRecords2P[j][l].id1) == GetTrainerId(gUnknown_03001168[k]->twoPlayers[j].id1) + && GetTrainerId(dst->hallRecords2P[j][l].id2) == GetTrainerId(gUnknown_03001168[k]->twoPlayers[j].id2)) + { + var_68++; + if (dst->hallRecords2P[j][l].winStreak < gUnknown_03001168[k]->twoPlayers[j].winStreak) + dst->hallRecords2P[j][l] = gUnknown_03001168[k]->twoPlayers[j]; + } + } + if (var_68 == 0) + dst->hallRecords2P[j][k + 3] = gUnknown_03001168[k]->twoPlayers[j]; + } + } } -static void sub_80E8880(struct UnknownRecMixingStruct *arg0, struct UnknownRecMixingStruct *arg1) +static void sub_80E8880(struct RankingHall1P *arg0, struct RankingHall1P *arg1) { s32 i, j; for (i = 0; i < 3; i++) { - s32 r2 = 0; - s32 r4 = -1; + s32 highestWinStreak = 0; + s32 highestId = -1; for (j = 0; j < 6; j++) { - if (arg1[j].field_4 > r2) + if (arg1[j].winStreak > highestWinStreak) { - r4 = j; - r2 = arg1[j].field_4; + highestId = j; + highestWinStreak = arg1[j].winStreak; } } - if (r4 >= 0) + if (highestId >= 0) { - arg0[i] = arg1[r4]; - arg1[r4].field_4 = 0; + arg0[i] = arg1[highestId]; + arg1[highestId].winStreak = 0; } } } -static void sub_80E88CC(struct UnknownRecMixingStruct2 *arg0, struct UnknownRecMixingStruct2 *arg1) +static void sub_80E88CC(struct RankingHall2P *arg0, struct RankingHall2P *arg1) { s32 i, j; for (i = 0; i < 3; i++) { - s32 r2 = 0; - s32 r4 = -1; + s32 highestWinStreak = 0; + s32 highestId = -1; for (j = 0; j < 6; j++) { - if (arg1[j].field_8 > r2) + if (arg1[j].winStreak > highestWinStreak) { - r4 = j; - r2 = arg1[j].field_8; + highestId = j; + highestWinStreak = arg1[j].winStreak; } } - if (r4 >= 0) + if (highestId >= 0) { - arg0[i] = arg1[r4]; - arg1[r4].field_8 = 0; + arg0[i] = arg1[highestId]; + arg1[highestId].winStreak = 0; } } } -NAKED -static void sub_80E8924(struct UnknownRecMixingStruct3 *arg0) +static void sub_80E8924(struct RecordMixingHallRecords *arg0) { - asm_unified("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - mov r9, r0\n\ - movs r0, 0\n\ - ldr r1, =gSaveBlock2Ptr\n\ - mov r10, r1\n\ -_080E8936:\n\ - lsls r1, r0, 1\n\ - adds r2, r0, 0x1\n\ - mov r8, r2\n\ - adds r1, r0\n\ - lsls r0, r1, 5\n\ - movs r2, 0x87\n\ - lsls r2, 2\n\ - adds r7, r0, r2\n\ - lsls r1, 6\n\ - mov r0, r9\n\ - adds r4, r0, r1\n\ - movs r6, 0\n\ - movs r5, 0x1\n\ -_080E8950:\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - adds r0, r7\n\ - adds r0, r6\n\ - adds r1, r4, 0\n\ - bl sub_80E8880\n\ - adds r4, 0x60\n\ - adds r6, 0x30\n\ - subs r5, 0x1\n\ - cmp r5, 0\n\ - bge _080E8950\n\ - mov r0, r8\n\ - cmp r0, 0x8\n\ - ble _080E8936\n\ - movs r5, 0\n\ - ldr r4, =gSaveBlock2Ptr\n\ -_080E8972:\n\ - movs r0, 0x54\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r2, =0x0000057c\n\ - adds r1, r2\n\ - ldr r0, [r4]\n\ - adds r0, r1\n\ - movs r1, 0xA8\n\ - muls r1, r5\n\ - movs r2, 0xD8\n\ - lsls r2, 3\n\ - adds r1, r2\n\ - add r1, r9\n\ - bl sub_80E88CC\n\ - adds r5, 0x1\n\ - cmp r5, 0x1\n\ - ble _080E8972\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); + s32 i, j; + + for (i = 0; i < HALL_FACILITIES_COUNT; i++) + { + for (j = 0; j < 2; j++) + sub_80E8880(gSaveBlock2Ptr->hallRecords1P[i][j], arg0->hallRecords1P[i][j]); + } + for (j = 0; j < 2; j++) + sub_80E88CC(gSaveBlock2Ptr->hallRecords2P[j], arg0->hallRecords2P[j]); } -static void sub_80E89AC(struct UnkRecordMixingStruct2 *arg0, size_t arg1, u32 arg2) +static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t recordSize, u32 arg2) { u8 linkPlayerCount = GetLinkPlayerCount(); - struct UnknownRecMixingStruct3 *largeStructPtr = AllocZeroed(sizeof(struct UnknownRecMixingStruct3)); + struct RecordMixingHallRecords *largeStructPtr = AllocZeroed(sizeof(struct RecordMixingHallRecords)); - sub_80E8578(largeStructPtr, arg0, arg1, arg2, linkPlayerCount); + sub_80E8578(largeStructPtr, hallRecords, recordSize, arg2, linkPlayerCount); sub_80E8924(largeStructPtr); Free(largeStructPtr); |