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.c607
1 files changed, 107 insertions, 500 deletions
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 374e73d2e..8588bf637 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -88,7 +88,7 @@ void RecordMixing_ReceiveExchangePacket(u32 a)
sub_80C0514(ewram_2008000.pokeNews, sizeof(struct PlayerRecords), a);
sub_80B9B1C((u8 *)&ewram_2008000.mauvilleMan, sizeof(struct PlayerRecords), a);
sub_80FA4E4(ewram_2008000.easyChatPairs, sizeof(struct PlayerRecords), a);
- sub_80B9C6C((u8 *)&ewram_2008000.daycareMailRecord, sizeof(struct PlayerRecords), a, ewram_2008000.tvShows);
+ sub_80B9C6C(&ewram_2008000.daycareMailRecord, sizeof(struct PlayerRecords), a, ewram_2008000.tvShows);
sub_80B9B70(&ewram_2008000.battleTowerRecord, sizeof(struct PlayerRecords), a);
sub_80B9F3C(ewram_2008000.filler11C8, a);
}
@@ -451,9 +451,9 @@ void sub_80B9B70(void *battleTowerRecord, u32 size, u8 index)
sub_8134AC0(battleTowerRecord + size * index);
}
-u8 sub_80B9BBC(u16 *a)
+u8 sub_80B9BBC(struct DayCareMail *a)
{
- return a[16];
+ return a->message.itemId;
}
void sub_80B9BC4(u8 *a, size_t b, u8 c[][2], u8 d, u8 e)
@@ -494,519 +494,126 @@ const u8 gUnknown_083D02BA[3][4] =
{0, 3, 2, 1},
};
-#ifdef NONMATCHING
-void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
+void sub_80B9C6C(struct RecordMixingDayCareMail *src, size_t recordSize, u8 which, TVShow *shows)
{
- u8 r8;
- u8 sp4[4];
- u8 sp8[4];
- void *spC[4];
- u8 sp1C[4][2];
- u8 sp24[4][2];
- u8 sp3C;
- u16 sp40 = Random();
- u16 i; // r3
- u16 r7;
- u8 r1;
- struct DayCareMisc *r6;
-
- //asm("":::"r8");
- SeedRng(gLinkPlayers[0].trainerId);
- r8 = GetLinkPlayerCount();
- for (i = 0; i < 4; i++)
{
- sp4[i] = 0xFF;
- sp8[i] = 0;
- sp1C[i][0] = 0;
- sp1C[i][1] = 0;
- }
- sp3C = 0;
- for (i = 0; i < r8; i++)
- {
- r6 = (struct DayCareMisc *)(a + b * i);
- if (r6->numDaycareMons != 0)
- {
- for (r7 = 0; r7 < r6->numDaycareMons; r7++)
- {
- if (r6->itemsHeld[r7] == 0)
- sp1C[i][r7] = 1;
- }
- }
- //_080B9D3C
- }
- //_080B9D46
- for (r7 = 0, i = 0; i < r8; i++)
- {
- r6 = (struct DayCareMisc *)(a + b * i);
- if (sp1C[i][0] == 1 || sp1C[i][1] == 1)
- sp3C++;
- if (sp1C[i][0] == 1 && sp1C[i][1] == 0)
+ u16 i, j;
+ u8 linkPlayerCount;
+ u8 tableId;
+ struct RecordMixingDayCareMail *_src;
+ u8 which0, which1;
+ void *ptr;
+ u8 sp04[4];
+ u8 sp08[4];
+ struct RecordMixingDayCareMail *sp0c[4];
+ u8 sp1c[4][2];
+ u8 sp24[4][2];
+ u8 sp34;
+ u16 oldSeed;
+
+ oldSeed = Random();
+ SeedRng(gLinkPlayers[0].trainerId);
+ linkPlayerCount = GetLinkPlayerCount();
+ for (i = 0; i < 4; i++)
{
- sp24[r7][0] = i;
- sp24[r7][1] = 0;
- r7++;
+ sp04[i] = 0xFF;
+ sp08[i] = 0;
+ sp1c[i][0] = 0;
+ sp1c[i][1] = 0;
}
- else if (sp1C[i][0] == 0 && sp1C[i][1] == 1)
+ sp34 = 0;
+ for (i = 0; i < linkPlayerCount; i++)
{
- sp24[r7][0] = i;
- sp24[r7][1] = 0;
- r7++;
+ _src = (void *)src + recordSize * i;
+ if (_src->numDaycareMons == 0)
+ continue;
+
+ for (j = 0; j < _src->numDaycareMons; j ++)
+ {
+ if (!_src->itemsHeld[j])
+ sp1c[i][j] = 1;
+ }
}
- //else if (sp1C[i][0] == 1 + 1 && sp1C[i][1] + 1 == 1 + 1)
- else if (sp1C[i][0] == 1 && sp1C[i][1] == 1)
+
+ j = 0;
+ for (i = 0; i < linkPlayerCount; i++)
{
- u8 r4, r1;
+ _src = (void *)src + recordSize * i;
+ if (sp1c[i][0] == TRUE || sp1c[i][1] == TRUE)
+ sp34++;
- sp24[r7][0] = i;
- r4 = sub_80B9BBC((u16 *)&r6->data[0]);
- r1 = sub_80B9BBC((u16 *)&r6->data[1]);
+ if (sp1c[i][0] == TRUE && sp1c[i][1] == FALSE)
+ {
+ sp24[j][0] = i;
+ sp24[j][1] = 0;
+ j++;
+ }
+ else if (sp1c[i][0] == FALSE && sp1c[i][1] == TRUE)
+ {
+ sp24[j][0] = i;
+ sp24[j][1] = 1;
+ j++;
+ }
+ else if (sp1c[i][0] == TRUE && sp1c[i][1] == TRUE)
+ {
+ u32 var1, var2;
- asm("");
- if (r4 == 0 && r1 != 0)
- sp24[r7][1] = 1;
- else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0))
- sp24[r7][1] = Random() % 2;
- else
- sp24[r7][1] = 0;
- /*
- if (r4 == 0 && r1 != 0)
- sp24[r7][1] = 1;
- else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0))
- sp24[r7][1] = Random() % 2;
- else
- sp24[r7][1] = 0;
- */
-
- /*
- if (r4 == 0 && r1 != 0)
- sp24[r7][1] = 1;
- else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0))
- //sp24[r7][1] = ((Random() << 16) >> 16) % 2;
- sp24[r7][1] = Random() % 2;
- else
- sp24[r7][1] = 0;
- */
- //_080B9E2C:
- r7++;
- }
- }
- //_080B9E3E
- for (i = 0; i < 4; i++)
- {
- r6 = (struct DayCareMisc *)a + b * c;
- spC[i] = r6;
- }
- r1 = sub_80B9C4C(d) % 3;
- switch (sp3C)
- {
- case 2:
- sub_80B9BC4(a, b, (u8 *)sp24, 0, 1);
- break;
- case 3:
- {
- u8 var1 = gUnknown_083D02B4[r1][0];
- u8 var2 = gUnknown_083D02B4[r1][1];
- sub_80B9BC4(a, b, (u8 *)sp24, var1, var2);
+ sp24[j][0] = i;
+ var1 = sub_80B9BBC(&_src->mail[0]);
+ var2 = sub_80B9BBC(&_src->mail[1]);
+ if (!var1 && var2)
+ {
+ register u8 one asm("r0") = 1; // boo, a fakematch
+ sp24[j][1] = one;
+ }
+ else if ((var1 && var2) || (!var1 && !var2))
+ {
+ sp24[j][1] = Random() % 2;
+ }
+ else if (var1 && !var2)
+ {
+ sp24[j][1] = 0;
+ }
+ j++;
+ }
}
- break;
- case 4:
+
+ for (i = 0; i < 4; i++)
{
- u8 *r6 = (u8 *)sp24;
- u8 var1 = gUnknown_083D02BA[r1][0];
- u8 var2 = gUnknown_083D02BA[r1][1];
- sub_80B9BC4(a, b, r6, var1, var2);
+ _src = &src[recordSize * which];
+ sp0c[i] = _src;
}
+
+ tableId = sub_80B9C4C((void *)shows) % 3;
+ switch (sp34)
{
- u8 *r6 = (u8 *)sp24;
- u8 var1 = gUnknown_083D02BA[r1][2];
- u8 var2 = gUnknown_083D02BA[r1][3];
- sub_80B9BC4(a, b, r6, var1, var2);
+ case 2:
+ sub_80B9BC4((void *)src, recordSize, sp24, 0, 1);
+ break;
+ case 3:
+ which0 = gUnknown_083D02B4[tableId][0];
+ which1 = gUnknown_083D02B4[tableId][1];
+ sub_80B9BC4((void *)src, recordSize, sp24, which0, which1);
+ break;
+ case 4:
+ ptr = sp24;
+ which0 = gUnknown_083D02BA[tableId][0];
+ which1 = gUnknown_083D02BA[tableId][1];
+ sub_80B9BC4((void *)src, recordSize, ptr, which0, which1);
+ which0 = gUnknown_083D02BA[tableId][2];
+ which1 = gUnknown_083D02BA[tableId][3];
+ sub_80B9BC4((void *)src, recordSize, ptr, which0, which1);
+ break;
}
- break;
+
+ _src = (void *)src + which * recordSize;
+ gSaveBlock1.daycare.misc.mail[0] = _src->mail[0];
+ gSaveBlock1.daycare.misc.mail[1] = _src->mail[1];
+ //memcpy(&gSaveBlock1.daycare.misc.mail[0], &_src->mail[0], sizeof(struct DayCareMail));
+ //memcpy(&gSaveBlock1.daycare.misc.mail[1], &_src->mail[1], sizeof(struct DayCareMail));
+ SeedRng(oldSeed);
}
- //_080B9EF0
- //memcpy(&gSaveBlock1.filler_303C.data[0], a + b * c, 0x38);
- //memcpy(&gSaveBlock1.filler_303C.data[1], a + b * c + 0x38, 0x38);
- r6 = (struct DayCareMisc *)(a + b * c);
- gSaveBlock1.filler_303C.data[0] = r6->data[0];
- gSaveBlock1.filler_303C.data[1] = r6->data[1];
- //memcpy(&gSaveBlock1.filler_303C.data[0], &r6->data[0], 0x38);
- //memcpy(&gSaveBlock1.filler_303C.data[1], &r6->data[1], 0x38);
- SeedRng(sp40);
-}
-#else
-NAKED
-void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x58\n\
- str r0, [sp, 0x2C]\n\
- str r1, [sp, 0x30]\n\
- str r3, [sp, 0x38]\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- str r2, [sp, 0x34]\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x40]\n\
- ldr r0, _080B9DA8 @ =gLinkPlayers\n\
- ldrh r0, [r0, 0x4]\n\
- bl SeedRng\n\
- bl GetLinkPlayerCount\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- movs r3, 0\n\
- add r0, sp, 0x1C\n\
- mov r9, r0\n\
- movs r1, 0x1D\n\
- add r1, sp\n\
- mov r10, r1\n\
- mov r2, sp\n\
- adds r2, 0xC\n\
- str r2, [sp, 0x4C]\n\
- movs r7, 0xFF\n\
- add r4, sp, 0x8\n\
- movs r2, 0\n\
- mov r6, r9\n\
- mov r5, r10\n\
-_080B9CBC:\n\
- mov r1, sp\n\
- adds r1, r3\n\
- adds r1, 0x4\n\
- ldrb r0, [r1]\n\
- orrs r0, r7\n\
- strb r0, [r1]\n\
- adds r0, r4, r3\n\
- strb r2, [r0]\n\
- lsls r1, r3, 1\n\
- adds r0, r6, r1\n\
- strb r2, [r0]\n\
- adds r1, r5, r1\n\
- strb r2, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x3\n\
- bls _080B9CBC\n\
- movs r4, 0\n\
- str r4, [sp, 0x3C]\n\
- movs r3, 0\n\
- mov r1, r8\n\
- lsls r0, r1, 16\n\
- lsrs r1, r0, 16\n\
- str r0, [sp, 0x50]\n\
- ldr r4, [sp, 0x30]\n\
- ldr r0, [sp, 0x34]\n\
- adds r2, r4, 0\n\
- muls r2, r0\n\
- str r2, [sp, 0x48]\n\
- ldr r2, [sp, 0x3C]\n\
- cmp r2, r1\n\
- bcs _080B9D46\n\
- mov r8, r1\n\
-_080B9D00:\n\
- ldr r4, [sp, 0x30]\n\
- adds r0, r4, 0\n\
- muls r0, r3\n\
- ldr r1, [sp, 0x2C]\n\
- adds r6, r1, r0\n\
- ldr r0, [r6, 0x70]\n\
- cmp r0, 0\n\
- beq _080B9D3C\n\
- movs r7, 0\n\
- cmp r7, r0\n\
- bcs _080B9D3C\n\
- adds r4, r6, 0\n\
- adds r4, 0x74\n\
- mov r2, r9\n\
- lsls r1, r3, 1\n\
- movs r5, 0x1\n\
-_080B9D20:\n\
- lsls r0, r7, 1\n\
- adds r0, r4, r0\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- bne _080B9D30\n\
- adds r0, r7, r1\n\
- adds r0, r2, r0\n\
- strb r5, [r0]\n\
-_080B9D30:\n\
- adds r0, r7, 0x1\n\
- lsls r0, 16\n\
- lsrs r7, r0, 16\n\
- ldr r0, [r6, 0x70]\n\
- cmp r7, r0\n\
- bcc _080B9D20\n\
-_080B9D3C:\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, r8\n\
- bcc _080B9D00\n\
-_080B9D46:\n\
- movs r7, 0\n\
- movs r3, 0\n\
- ldr r2, [sp, 0x50]\n\
- cmp r2, 0\n\
- beq _080B9E3E\n\
- mov r4, sp\n\
- adds r4, 0x24\n\
- str r4, [sp, 0x44]\n\
- movs r0, 0x25\n\
- add r0, sp\n\
- mov r8, r0\n\
-_080B9D5C:\n\
- ldr r1, [sp, 0x30]\n\
- adds r0, r1, 0\n\
- muls r0, r3\n\
- ldr r2, [sp, 0x2C]\n\
- adds r6, r2, r0\n\
- lsls r1, r3, 1\n\
- mov r4, r9\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- beq _080B9D7C\n\
- mov r2, r10\n\
- adds r0, r2, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080B9D86\n\
-_080B9D7C:\n\
- ldr r0, [sp, 0x3C]\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x3C]\n\
-_080B9D86:\n\
- mov r4, r9\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080B9DAC\n\
- mov r2, r10\n\
- adds r0, r2, r1\n\
- ldrb r2, [r0]\n\
- cmp r2, 0\n\
- bne _080B9DAC\n\
-_080B9D9A:\n\
- lsls r1, r7, 1\n\
- ldr r4, [sp, 0x44]\n\
- adds r0, r4, r1\n\
- strb r3, [r0]\n\
- add r1, r8\n\
- strb r2, [r1]\n\
- b _080B9E2C\n\
- .align 2, 0\n\
-_080B9DA8: .4byte gLinkPlayers\n\
-_080B9DAC:\n\
- mov r2, r9\n\
- adds r0, r2, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _080B9DC0\n\
- mov r4, r10\n\
- adds r0, r4, r1\n\
- ldrb r2, [r0]\n\
- cmp r2, 0x1\n\
- beq _080B9D9A\n\
-_080B9DC0:\n\
- mov r2, r9\n\
- adds r0, r2, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080B9E32\n\
- mov r4, r10\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080B9E32\n\
- lsls r5, r7, 1\n\
- ldr r1, [sp, 0x44]\n\
- adds r0, r1, r5\n\
- strb r3, [r0]\n\
- adds r0, r6, 0\n\
- str r3, [sp, 0x54]\n\
- bl sub_80B9BBC\n\
- adds r4, r0, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- adds r0, r6, 0\n\
- adds r0, 0x38\n\
- bl sub_80B9BBC\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- ldr r3, [sp, 0x54]\n\
- cmp r4, 0\n\
- bne _080B9E0A\n\
- cmp r1, 0\n\
- beq _080B9E0E\n\
- mov r2, r8\n\
- adds r1, r2, r5\n\
- movs r0, 0x1\n\
- strb r0, [r1]\n\
- b _080B9E2C\n\
-_080B9E0A:\n\
- cmp r1, 0\n\
- beq _080B9E26\n\
-_080B9E0E:\n\
- str r3, [sp, 0x54]\n\
- bl Random\n\
- mov r4, r8\n\
- adds r2, r4, r5\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x1\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
- ldr r3, [sp, 0x54]\n\
- b _080B9E2C\n\
-_080B9E26:\n\
- mov r2, r8\n\
- adds r0, r2, r5\n\
- strb r1, [r0]\n\
-_080B9E2C:\n\
- adds r0, r7, 0x1\n\
- lsls r0, 16\n\
- lsrs r7, r0, 16\n\
-_080B9E32:\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- ldr r4, [sp, 0x50]\n\
- cmp r0, r4\n\
- bcc _080B9D5C\n\
-_080B9E3E:\n\
- movs r3, 0\n\
- ldr r1, [sp, 0x48]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 3\n\
- ldr r2, [sp, 0x2C]\n\
- adds r6, r2, r0\n\
- ldr r1, [sp, 0x4C]\n\
-_080B9E4E:\n\
- lsls r0, r3, 2\n\
- adds r0, r1, r0\n\
- str r6, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x3\n\
- bls _080B9E4E\n\
- ldr r0, [sp, 0x38]\n\
- bl sub_80B9C4C\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- ldr r4, [sp, 0x3C]\n\
- cmp r4, 0x3\n\
- beq _080B9E9C\n\
- cmp r4, 0x3\n\
- bgt _080B9E82\n\
- cmp r4, 0x2\n\
- beq _080B9E8A\n\
- b _080B9EF0\n\
-_080B9E82:\n\
- ldr r0, [sp, 0x3C]\n\
- cmp r0, 0x4\n\
- beq _080B9EBC\n\
- b _080B9EF0\n\
-_080B9E8A:\n\
- add r2, sp, 0x24\n\
- movs r0, 0x1\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- ldr r1, [sp, 0x30]\n\
- movs r3, 0\n\
- bl sub_80B9BC4\n\
- b _080B9EF0\n\
-_080B9E9C:\n\
- ldr r0, _080B9EB8 @ =gUnknown_083D02B4\n\
- lsls r1, 1\n\
- adds r2, r1, r0\n\
- ldrb r3, [r2]\n\
- adds r0, 0x1\n\
- adds r1, r0\n\
- ldrb r0, [r1]\n\
- add r2, sp, 0x24\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- ldr r1, [sp, 0x30]\n\
- bl sub_80B9BC4\n\
- b _080B9EF0\n\
- .align 2, 0\n\
-_080B9EB8: .4byte gUnknown_083D02B4\n\
-_080B9EBC:\n\
- add r6, sp, 0x24\n\
- ldr r4, _080B9F2C @ =gUnknown_083D02BA\n\
- lsls r5, r1, 2\n\
- adds r0, r5, r4\n\
- ldrb r3, [r0]\n\
- adds r0, r4, 0x1\n\
- adds r0, r5, r0\n\
- ldrb r0, [r0]\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- ldr r1, [sp, 0x30]\n\
- adds r2, r6, 0\n\
- bl sub_80B9BC4\n\
- adds r0, r4, 0x2\n\
- adds r0, r5, r0\n\
- ldrb r3, [r0]\n\
- adds r4, 0x3\n\
- adds r5, r4\n\
- ldrb r0, [r5]\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- ldr r1, [sp, 0x30]\n\
- adds r2, r6, 0\n\
- bl sub_80B9BC4\n\
-_080B9EF0:\n\
- ldr r1, [sp, 0x2C]\n\
- ldr r2, [sp, 0x48]\n\
- adds r6, r1, r2\n\
- ldr r4, _080B9F30 @ =gSaveBlock1\n\
- ldr r1, _080B9F34 @ =0x0000303c\n\
- adds r0, r4, r1\n\
- adds r1, r6, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r2, _080B9F38 @ =0x00003074\n\
- adds r4, r2\n\
- adds r1, r6, 0\n\
- adds r1, 0x38\n\
- adds r0, r4, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r0, [sp, 0x40]\n\
- bl SeedRng\n\
- add sp, 0x58\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\
- .align 2, 0\n\
-_080B9F2C: .4byte gUnknown_083D02BA\n\
-_080B9F30: .4byte gSaveBlock1\n\
-_080B9F34: .4byte 0x0000303c\n\
-_080B9F38: .4byte 0x00003074\n\
- .syntax divided\n");
}
-#endif
void sub_80B9F3C(u16 *a, u8 b)
{