summaryrefslogtreecommitdiff
path: root/src/record_mixing.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/record_mixing.c')
-rw-r--r--src/record_mixing.c705
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);