summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/record_mixing.c156
1 files changed, 70 insertions, 86 deletions
diff --git a/src/record_mixing.c b/src/record_mixing.c
index e1a72cf2e..169d8f168 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -10,6 +10,7 @@
#include "mauville_old_man.h"
#include "menu.h"
#include "mystery_event_script.h"
+#include "rng.h"
#include "rom4.h"
#include "script.h"
#include "secret_base.h"
@@ -86,7 +87,6 @@ void RecordMixing_ReceiveExchangePacket(u32 a)
sub_80BFD44((u8 *)unk_2008000.tvShows, sizeof(struct PlayerRecords), a);
sub_80C0514(unk_2008000.filler1004, sizeof(struct PlayerRecords), a);
sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a);
- //UB: Too many arguments for function "sub_80FA4E4"
sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a);
sub_80B9C6C(&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows);
sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), a);
@@ -430,93 +430,26 @@ u8 sub_80B9BBC(u16 *a)
return a[16];
}
-#undef NONMATCHING
-#ifdef NONMATCHING
-
-void sub_80B9BC4(struct RecordMixing_UnknownStruct *a, size_t b, u8 c[][2], u8 d, u8 e)
-{
- struct RecordMixing_UnknownStructSub *offA;
- struct RecordMixing_UnknownStructSub *offB;
- struct RecordMixing_UnknownStructSub v0;
- v0 = (offA = ((struct RecordMixing_UnknownStruct *)(b * c[d][0] + (u32)&a))->data)[c[d][1]];
- offA[c[d][1]] = (offB = ((struct RecordMixing_UnknownStruct *)(b * c[e][0] + (u32)&a))->data)[c[e][1]];
- offB[c[e][1]] = v0;
- //ToDo: Figure out what this strange stack usage is
-}
-
-#else
-__attribute__((naked))
-void sub_80B9BC4(struct RecordMixing_UnknownStruct *a, size_t b, u8 c[][2], u8 d, u8 e)
+// TODO: clean this up
+void sub_80B9BC4(u8 *a, size_t b, u8 *c, u8 d, u8 e)
{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- mov r6, r10\n\
- mov r5, r9\n\
- mov r4, r8\n\
- push {r4-r6}\n\
- sub sp, 0x38\n\
- mov r8, r0\n\
- mov r10, r1\n\
- mov r9, r2\n\
- adds r4, r3, 0\n\
- ldr r5, [sp, 0x54]\n\
- lsls r4, 24\n\
- lsls r5, 24\n\
- lsrs r5, 24\n\
- lsrs r4, 23\n\
- add r4, r9\n\
- ldrb r0, [r4]\n\
- mov r6, r10\n\
- muls r6, r0\n\
- add r6, r8\n\
- ldrb r0, [r4, 0x1]\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 3\n\
- adds r1, r6, r1\n\
- mov r0, sp\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- lsls r5, 1\n\
- add r5, r9\n\
- ldrb r0, [r5]\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- add r8, r0\n\
- ldrb r1, [r4, 0x1]\n\
- lsls r0, r1, 3\n\
- subs r0, r1\n\
- lsls r0, 3\n\
- adds r6, r0\n\
- ldrb r0, [r5, 0x1]\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 3\n\
- add r1, r8\n\
- adds r0, r6, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldrb r1, [r5, 0x1]\n\
- lsls r0, r1, 3\n\
- subs r0, r1\n\
- lsls r0, 3\n\
- add r8, r0\n\
- mov r0, r8\n\
- mov r1, sp\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- add sp, 0x38\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+ struct RecordMixing_UnknownStructSub sp0;
+ struct RecordMixing_UnknownStructSub *r8;
+ struct RecordMixing_UnknownStructSub *r6 = (struct RecordMixing_UnknownStructSub *)(a + b * c[d * 2]);
+
+ {
+ struct RecordMixing_UnknownStructSub *src = r6 + c[2 * d + 1];
+
+ memcpy(&sp0, src, 0x38);
+ }
+
+ r8 = (struct RecordMixing_UnknownStructSub *)(a + c[e * 2] * b);
+ r6 += c[d * 2 + 1];
+ memcpy(r6, r8 + c[e * 2 + 1], 0x38);
+
+ r8 += c[e * 2 + 1];
+ memcpy(r8, &sp0, 0x38);
}
-#endif
u8 sub_80B9C4C(u8 *a)
{
@@ -528,3 +461,54 @@ u8 sub_80B9C4C(u8 *a)
return r2;
}
+void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
+{
+ u8 sp0[0x58];
+ u8 sp3C;
+ u16 sp40 = Random();
+ u8 r8;
+ u16 i; // r3
+ u16 r7;
+ struct RecordMixing_UnknownStruct *r6;
+
+ SeedRng(gLinkPlayers[0].trainerId);
+ r8 = GetLinkPlayerCount();
+ for (i = 0; i < 4; i++)
+ {
+ sp0[4 + i] = 0xFF;
+ sp0[8 + i] = 0;
+ sp0[0x1C + i * 2 + 0] = 0;
+ sp0[0x1C + i * 2 + 1] = 0;
+ }
+ sp3C = 0;
+ for (i = 0; i < r8; i++)
+ {
+ r6 = (struct RecordMixing_UnknownStruct *)(a + b * i);
+ if (r6->unk70 != 0)
+ {
+ for (r7 = 0; r7 < r6->unk70; r7++)
+ {
+ if (r6->unk74[r7] == 0)
+ sp0[0x1C + i * 2 + r7] = 1;
+ }
+ }
+ //_080B9D3C
+ }
+ //_080B9D46
+ r7 = 0;
+ for (i = 0; i < r8; i++)
+ {
+ r6 = (struct RecordMixing_UnknownStruct *)(a + b * i);
+ if (sp0[0x1C + i * 2 + 0] == 1 || sp0[0x1C + i * 2 + 1] == 1)
+ sp3C++;
+ while (1)
+ {
+ if (sp0[0x1C + i * 2 + 0] == 1 || sp0[0x1C + i * 2 + 1] == 0)
+ {
+ sp0[0x24] = i;
+ sp0[0x25] = 0;
+ }
+ }
+ }
+ //_080B9E3E
+}