summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tv.c202
1 files changed, 201 insertions, 1 deletions
diff --git a/src/tv.c b/src/tv.c
index 665949feb..ad466c7d0 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -12,6 +12,7 @@
#include "rom4.h"
#include "map_constants.h"
#include "strings.h"
+#include "link.h"
enum
{
@@ -346,7 +347,7 @@ void sub_80BE97C(bool8 flag)
}
}
-s8 sub_80BF74C(TVShow tvShows[]);
+s8 sub_80BF74C(TVShow tvShow[]);
u8 sub_80BF1B4(s8);
void sub_80BE9D4()
@@ -912,6 +913,7 @@ void sub_80BFD20(void)
extern u8 ewram[];
#define gUnknown_02007000 (*(struct ewramStruct_0207000 *)(ewram + 0x7000))
+extern u8 gUnknown_020387E4;
struct ewramStruct_0207000 {
struct SaveTVStruct tvshows[4];
@@ -952,6 +954,204 @@ void sub_80BFD44(u8 *arg0, u32 arg1, u8 arg2)
sub_80C0408();
}
+extern u8 gUnknown_03000720;
+extern s8 gUnknown_03000722;
+s8 sub_80C019C(struct SaveTVStruct *tvStruct);
+extern u8 sub_80BFF68(struct SaveTVStruct *tv1, struct SaveTVStruct *tv2, u8 idx);
+
+#ifdef NONMATCHING
+void sub_80BFE24(struct SaveTVStruct *arg0, struct SaveTVStruct *arg1, struct SaveTVStruct *arg2, struct SaveTVStruct *arg3)
+{
+ struct SaveTVStruct ** argslist[4] = {&arg0, &arg1, &arg2, &arg3};
+ u8 i;
+ u8 j;
+ gUnknown_03000720 = GetLinkPlayerCount();
+ for (i=0; i < gUnknown_03000720; i++) {
+ while (gUnknown_03000720 > 0);
+ if (i == 0)
+ gUnknown_020387E4 = 0;
+ gUnknown_03000722 = sub_80C019C(*(argslist[i]));
+ if (gUnknown_03000722 == -1) {
+ gUnknown_020387E4++;
+ if (gUnknown_020387E4 == gUnknown_03000720)
+ return;
+ } else {
+ for (j=0; j<gUnknown_03000720-1; j++) {
+ gUnknown_03005D38.var0 = sub_80BF74C(*(argslist[(j + 1) % gUnknown_03000720])->shows);
+ if (gUnknown_03005D38.var0 != -1 && sub_80BFF68(*(argslist[(i + 1) % gUnknown_03000720]), *(argslist[(i + 1)]), (i + 1) % gUnknown_03000720) == 1) {
+ break;
+ }
+ }
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_80BFE24(struct SaveTVStruct *arg0, struct SaveTVStruct *arg1, struct SaveTVStruct *arg2, struct SaveTVStruct *arg3)
+{
+ 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, 0x20\n\
+ str r0, [sp, 0x10]\n\
+ str r1, [sp, 0x14]\n\
+ str r2, [sp, 0x18]\n\
+ str r3, [sp, 0x1C]\n\
+ add r0, sp, 0x10\n\
+ str r0, [sp]\n\
+ add r0, sp, 0x14\n\
+ str r0, [sp, 0x4]\n\
+ add r0, sp, 0x18\n\
+ str r0, [sp, 0x8]\n\
+ add r0, sp, 0x1C\n\
+ str r0, [sp, 0xC]\n\
+ bl GetLinkPlayerCount\n\
+ ldr r1, _080BFEA0 @ =gUnknown_03000720\n\
+ strb r0, [r1]\n\
+_080BFE50:\n\
+ movs r6, 0\n\
+ ldr r0, _080BFEA0 @ =gUnknown_03000720\n\
+ ldrb r1, [r0]\n\
+ cmp r6, r1\n\
+ bcs _080BFE50\n\
+ mov r10, r0\n\
+_080BFE5C:\n\
+ cmp r6, 0\n\
+ bne _080BFE64\n\
+ ldr r2, _080BFEA4 @ =gUnknown_020387E4\n\
+ strb r6, [r2]\n\
+_080BFE64:\n\
+ lsls r4, r6, 2\n\
+ mov r3, sp\n\
+ adds r0, r3, r4\n\
+ ldr r0, [r0]\n\
+ ldr r0, [r0]\n\
+ bl sub_80C019C\n\
+ ldr r1, _080BFEA8 @ =gUnknown_03000722\n\
+ strb r0, [r1]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ movs r1, 0x1\n\
+ negs r1, r1\n\
+ adds r7, r4, 0\n\
+ cmp r0, r1\n\
+ bne _080BFEAC\n\
+ ldr r1, _080BFEA4 @ =gUnknown_020387E4\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r2, r10\n\
+ ldrb r2, [r2]\n\
+ cmp r0, r2\n\
+ beq _080BFF58\n\
+ adds r6, 0x1\n\
+ mov r9, r6\n\
+ b _080BFF3C\n\
+ .align 2, 0\n\
+_080BFEA0: .4byte gUnknown_03000720\n\
+_080BFEA4: .4byte gUnknown_020387E4\n\
+_080BFEA8: .4byte gUnknown_03000722\n\
+_080BFEAC:\n\
+ movs r5, 0\n\
+ mov r3, r10\n\
+ ldrb r0, [r3]\n\
+ subs r0, 0x1\n\
+ adds r2, r6, 0x1\n\
+ mov r9, r2\n\
+ cmp r5, r0\n\
+ bge _080BFF22\n\
+ ldr r3, _080BFF4C @ =gUnknown_03000720\n\
+ mov r8, r3\n\
+_080BFEC0:\n\
+ adds r0, r6, r5\n\
+ adds r4, r0, 0x1\n\
+ mov r0, r8\n\
+ ldrb r1, [r0]\n\
+ adds r0, r4, 0\n\
+ bl __modsi3\n\
+ lsls r0, 2\n\
+ add r0, sp\n\
+ ldr r0, [r0]\n\
+ ldr r0, [r0]\n\
+ bl sub_80BF74C\n\
+ ldr r1, _080BFF50 @ =gUnknown_03005D38\n\
+ strb r0, [r1]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ movs r1, 0x1\n\
+ negs r1, r1\n\
+ cmp r0, r1\n\
+ beq _080BFF12\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ adds r0, r4, 0\n\
+ bl __modsi3\n\
+ adds r2, r0, 0\n\
+ lsls r0, r2, 2\n\
+ add r0, sp\n\
+ ldr r0, [r0]\n\
+ mov r3, sp\n\
+ adds r1, r3, r7\n\
+ ldr r1, [r1]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ bl sub_80BFF68\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ beq _080BFF22\n\
+_080BFF12:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0x1\n\
+ cmp r5, r0\n\
+ blt _080BFEC0\n\
+_080BFF22:\n\
+ mov r2, r10\n\
+ ldrb r0, [r2]\n\
+ subs r0, 0x1\n\
+ cmp r5, r0\n\
+ bne _080BFF3C\n\
+ mov r3, sp\n\
+ adds r0, r3, r7\n\
+ ldr r0, [r0]\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080BFF54 @ =gUnknown_03000722\n\
+ ldrb r1, [r1]\n\
+ bl sub_80BF55C\n\
+_080BFF3C:\n\
+ mov r1, r9\n\
+ lsls r0, r1, 24\n\
+ lsrs r6, r0, 24\n\
+ mov r2, r10\n\
+ ldrb r2, [r2]\n\
+ cmp r6, r2\n\
+ bcc _080BFE5C\n\
+ b _080BFE50\n\
+ .align 2, 0\n\
+_080BFF4C: .4byte gUnknown_03000720\n\
+_080BFF50: .4byte gUnknown_03005D38\n\
+_080BFF54: .4byte gUnknown_03000722\n\
+_080BFF58:\n\
+ add sp, 0x20\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\
+.syntax divided\n");
+}
+#endif
asm(".section .text_c");