summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-05-30 12:47:53 -0400
committerscnorton <scnorton@biociphers.org>2017-05-30 12:47:53 -0400
commit07d55ccf72316bf23792797da807514fc254d647 (patch)
treea3f685059925118dd6730007cf175e147d73d337
parent43567f631bd3ccf4539a277d5b2f01a6bc0b518e (diff)
Fill another gap in tv.c
-rwxr-xr-xasm/tv.s281
-rw-r--r--ld_script.txt2
-rwxr-xr-xsrc/tv.c134
3 files changed, 107 insertions, 310 deletions
diff --git a/asm/tv.s b/asm/tv.s
index 1b6a42d94..5fe5371a9 100755
--- a/asm/tv.s
+++ b/asm/tv.s
@@ -7,287 +7,6 @@
.text
- thumb_func_start sub_80C04A0
-sub_80C04A0: @ 80C04A0
- push {r4,r5,lr}
- movs r3, 0
- movs r2, 0x5
- ldr r5, _080C0508 @ =gSaveBlock1
- ldr r4, _080C050C @ =0x00002738
-_080C04AA:
- lsls r0, r2, 24
- asrs r1, r0, 24
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _080C04C8
- lsls r0, r3, 24
- movs r2, 0x80
- lsls r2, 17
- adds r0, r2
- lsrs r3, r0, 24
-_080C04C8:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- asrs r0, 24
- cmp r0, 0x17
- ble _080C04AA
- movs r2, 0
- lsls r0, r3, 24
- asrs r0, 24
- movs r1, 0x5
- subs r0, r1, r0
- cmp r2, r0
- bge _080C0502
- adds r5, r0, 0
-_080C04E4:
- lsls r1, r2, 24
- asrs r4, r1, 24
- movs r0, 0xA0
- lsls r0, 19
- adds r1, r0
- lsrs r1, 24
- ldr r0, _080C0510 @ =gSaveBlock1 + 0x2738
- bl sub_80BF55C
- adds r4, 0x1
- lsls r4, 24
- lsrs r2, r4, 24
- asrs r4, 24
- cmp r4, r5
- blt _080C04E4
-_080C0502:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C0508: .4byte gSaveBlock1
-_080C050C: .4byte 0x00002738
-_080C0510: .4byte gSaveBlock1 + 0x2738
- thumb_func_end sub_80C04A0
-
- thumb_func_start sub_80C0514
-sub_80C0514: @ 80C0514
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r5, r2, 24
- movs r4, 0
-_080C0524:
- lsls r0, r4, 6
- ldr r6, _080C0550 @ =0x02007000
- adds r0, r6
- adds r1, r4, 0
- muls r1, r7
- add r1, r8
- movs r2, 0x40
- bl memcpy
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _080C0524
- adds r4, r6, 0
- cmp r5, 0x1
- beq _080C0578
- cmp r5, 0x1
- bgt _080C0554
- cmp r5, 0
- beq _080C055E
- b _080C05AC
- .align 2, 0
-_080C0550: .4byte 0x02007000
-_080C0554:
- cmp r5, 0x2
- beq _080C0584
- cmp r5, 0x3
- beq _080C059C
- b _080C05AC
-_080C055E:
- ldr r0, _080C0574 @ =gSaveBlock1 + 0x2ABC
- adds r1, r4, 0
- adds r1, 0x40
- adds r2, r4, 0
- adds r2, 0x80
- adds r3, r4, 0
- adds r3, 0xC0
- bl sub_80C05C4
- b _080C05AC
- .align 2, 0
-_080C0574: .4byte gSaveBlock1 + 0x2ABC
-_080C0578:
- ldr r1, _080C0580 @ =gSaveBlock1 + 0x2ABC
- adds r2, r4, 0
- adds r2, 0x80
- b _080C058A
- .align 2, 0
-_080C0580: .4byte gSaveBlock1 + 0x2ABC
-_080C0584:
- adds r1, r4, 0
- adds r1, 0x40
- ldr r2, _080C0598 @ =gSaveBlock1 + 0x2ABC
-_080C058A:
- adds r3, r4, 0
- adds r3, 0xC0
- adds r0, r4, 0
- bl sub_80C05C4
- b _080C05AC
- .align 2, 0
-_080C0598: .4byte gSaveBlock1 + 0x2ABC
-_080C059C:
- adds r1, r6, 0
- adds r1, 0x40
- adds r2, r6, 0
- adds r2, 0x80
- ldr r3, _080C05C0 @ =gSaveBlock1 + 0x2ABC
- adds r0, r6, 0
- bl sub_80C05C4
-_080C05AC:
- bl sub_80C0750
- bl sub_80C0788
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C05C0: .4byte gSaveBlock1 + 0x2ABC
- thumb_func_end sub_80C0514
-
- thumb_func_start sub_80C05C4
-sub_80C05C4: @ 80C05C4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- str r0, [sp, 0x10]
- str r1, [sp, 0x14]
- str r2, [sp, 0x18]
- str r3, [sp, 0x1C]
- add r0, sp, 0x10
- str r0, [sp]
- add r0, sp, 0x14
- str r0, [sp, 0x4]
- add r0, sp, 0x18
- str r0, [sp, 0x8]
- add r0, sp, 0x1C
- str r0, [sp, 0xC]
- bl GetLinkPlayerCount
- ldr r1, _080C0600 @ =gUnknown_03000721
- strb r0, [r1]
- movs r0, 0
- mov r10, r0
-_080C05F4:
- movs r7, 0
- mov r1, r10
- adds r1, 0x1
- str r1, [sp, 0x20]
- b _080C068C
- .align 2, 0
-_080C0600: .4byte gUnknown_03000721
-_080C0604:
- lsls r4, r7, 2
- mov r1, sp
- adds r0, r1, r4
- ldr r0, [r0]
- ldr r0, [r0]
- mov r1, r10
- bl sub_80C0730
- ldr r1, _080C06B0 @ =gUnknown_03000722
- strb r0, [r1]
- lsls r0, 24
- asrs r0, 24
- mov r8, r4
- adds r1, r7, 0x1
- mov r9, r1
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _080C0686
- movs r5, 0
- ldr r1, _080C06B4 @ =gUnknown_03000721
- ldrb r0, [r1]
- subs r0, 0x1
- cmp r5, r0
- bge _080C0686
- adds r6, r1, 0
-_080C0638:
- adds r0, r7, r5
- adds r4, r0, 0x1
- ldrb r1, [r6]
- adds r0, r4, 0
- bl __modsi3
- lsls r0, 2
- add r0, sp
- ldr r0, [r0]
- ldr r0, [r0]
- bl sub_80BEBC8
- ldr r1, _080C06B8 @ =gUnknown_03005D38
- strb r0, [r1]
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _080C0678
- ldrb r1, [r6]
- adds r0, r4, 0
- bl __modsi3
- lsls r0, 2
- add r0, sp
- ldr r0, [r0]
- mov r1, sp
- add r1, r8
- ldr r1, [r1]
- bl sub_80C06BC
-_080C0678:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r0, [r6]
- subs r0, 0x1
- cmp r5, r0
- blt _080C0638
-_080C0686:
- mov r1, r9
- lsls r0, r1, 24
- lsrs r7, r0, 24
-_080C068C:
- ldr r0, _080C06B4 @ =gUnknown_03000721
- ldrb r0, [r0]
- cmp r7, r0
- bcc _080C0604
- ldr r1, [sp, 0x20]
- lsls r0, r1, 24
- lsrs r0, 24
- mov r10, r0
- cmp r0, 0xF
- bls _080C05F4
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C06B0: .4byte gUnknown_03000722
-_080C06B4: .4byte gUnknown_03000721
-_080C06B8: .4byte gUnknown_03005D38
- thumb_func_end sub_80C05C4
-
-.section .dotvshow
-
thumb_func_start DoTVShowBravoTrainerPokemonProfile
DoTVShowBravoTrainerPokemonProfile: @ 80C091C
push {r4,r5,lr}
diff --git a/ld_script.txt b/ld_script.txt
index 205881133..df7a8748a 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -175,8 +175,6 @@ SECTIONS {
asm/secret_base.o(.text_80BC1D0);
src/tv.o(.text);
asm/tv.o(.text);
- src/tv.o(.dotvshow);
- asm/tv.o(.dotvshow);
src/tv.o(.text_c);
asm/contest_link_80C2020.o(.text);
src/script_pokemon_util_80C4BF0.o(.text);
diff --git a/src/tv.c b/src/tv.c
index 012e8dde1..f06f93acf 100755
--- a/src/tv.c
+++ b/src/tv.c
@@ -124,6 +124,22 @@ void sub_80BEB20(void);
u8 sub_80BFB54(u8);
+s8 sub_80BF74C(TVShow tvShow[]);
+
+void sub_80BF55C(TVShow tvShow[], u8 showidx);
+void sub_80BEA88(void);
+
+void sub_80BE138(TVShow *show);
+void sub_80BE160(TVShow *show);
+extern u16 gUnknown_02024C04;
+
+void sub_80BE5FC(void);
+void sub_80BE65C(void);
+void sub_80BE6A0(void);
+void nullsub_21(void);
+void sub_80BE188(void);
+void sub_80BE320(void);
+
#ifdef NONMATCHING
u8 special_0x44(void)
{
@@ -494,24 +510,6 @@ u8 sub_80BDD18(void)
return 0;
}
-s8 sub_80BF74C(TVShow tvShow[]);
-
-void sub_80BF55C(TVShow tvShow[], u8 showidx);
-void sub_80BEA88(void);
-
-void sub_80BE138(TVShow *show);
-void sub_80BE160(TVShow *show);
-extern u16 gUnknown_02024C04;
-
-void sub_80BE5FC(void);
-void sub_80BE65C(void);
-void sub_80BE6A0(void);
-void nullsub_21(void);
-void sub_80BE188(void);
-void sub_80BE320(void);
-
-extern u8 GabbyAndTyGetBattleNum(void);
-
void GabbyAndTySetScriptVarsToFieldObjectLocalIds(void) {
switch (GabbyAndTyGetBattleNum()) {
case 1:
@@ -1198,7 +1196,6 @@ void sub_80BEA50(u16 var)
gUnknown_020387E0 = var;
}
-void sub_80BF55C(TVShow tvShow[], u8 showidx);
void sub_80BEA88(void);
void sub_80BEA5C(u16 arg0)
@@ -2162,12 +2159,13 @@ void sub_80BFD20(void)
}
extern u8 ewram[];
-#define gUnknown_02007000 (*(struct ewramStruct_0207000 *)(ewram + 0x7000))
+#define gUnknown_02007000 (*(ewramStruct_02007000 *)(ewram + 0x7000))
extern u8 gUnknown_020387E4;
-struct ewramStruct_0207000 {
+typedef union ewramStruct_02007000 {
TVShow tvshows[4][25];
-};
+ struct UnknownSaveStruct2ABC unknown_2abc[4][16];
+} ewramStruct_02007000;
void sub_80BFE24(TVShow arg0[25], TVShow arg1[25], TVShow arg2[25], TVShow arg3[25]);
@@ -2178,7 +2176,7 @@ void sub_80C0408(void);
void sub_80BFD44(u8 *arg0, u32 arg1, u8 arg2)
{
u8 i;
- struct ewramStruct_0207000 *ewramTVShows;
+ ewramStruct_02007000 *ewramTVShows;
for (i=0; i<4; i++) {
memcpy(&gUnknown_02007000.tvshows[i], &arg0[i * arg1], 25 * sizeof(TVShow));
}
@@ -2205,6 +2203,7 @@ void sub_80BFD44(u8 *arg0, u32 arg1, u8 arg2)
}
extern u8 gUnknown_03000720;
+extern u8 gUnknown_03000721;
extern s8 gUnknown_03000722;
s8 sub_80C019C(TVShow tvShows[]);
bool8 sub_80BFF68(TVShow * tv1[25], TVShow * tv2[25], u8 idx);
@@ -2793,7 +2792,88 @@ void sub_80C045C(void) {
}
}
-asm(".section .dotvshow\n");
+void sub_80C04A0(void)
+{
+ s8 showIdx;
+ s8 count;
+ count = 0;
+ for (showIdx=5; showIdx<24; showIdx++)
+ {
+ if (gSaveBlock1.tvShows[showIdx].common.var00 == 0)
+ {
+ count ++;
+ }
+ }
+ for (showIdx=0; showIdx<5-count; showIdx++)
+ {
+ sub_80BF55C(gSaveBlock1.tvShows, showIdx+5);
+ }
+}
+
+void sub_80C05C4(struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16], struct UnknownSaveStruct2ABC[16]);
+void sub_80C0750(void);
+void sub_80C0788(void);
+s8 sub_80C0730(struct UnknownSaveStruct2ABC[16], u8);
+void sub_80C06BC(struct UnknownSaveStruct2ABC *[16], struct UnknownSaveStruct2ABC *[16]);
+
+void sub_80C0514(void *a0, u32 a1, u8 a2)
+{
+ ewramStruct_02007000 *struct02007000;
+ u8 i;
+ for (i=0; i<4; i++)
+ {
+ memcpy(gUnknown_02007000.unknown_2abc[i], a0 + i * a1, 64);
+ }
+ struct02007000 = &gUnknown_02007000;
+ switch (a2)
+ {
+ case 0:
+ sub_80C05C4(gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[1], struct02007000->unknown_2abc[2], struct02007000->unknown_2abc[3]);
+ break;
+ case 1:
+ sub_80C05C4(struct02007000->unknown_2abc[0], gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[2], struct02007000->unknown_2abc[3]);
+ break;
+ case 2:
+ sub_80C05C4(struct02007000->unknown_2abc[0], struct02007000->unknown_2abc[1], gSaveBlock1.unknown_2ABC, struct02007000->unknown_2abc[3]);
+ break;
+ case 3:
+ sub_80C05C4(struct02007000->unknown_2abc[0], struct02007000->unknown_2abc[1], struct02007000->unknown_2abc[2], gSaveBlock1.unknown_2ABC);
+ break;
+ }
+ sub_80C0750();
+ sub_80C0788();
+}
+
+void sub_80C05C4(struct UnknownSaveStruct2ABC a0[16], struct UnknownSaveStruct2ABC a1[16], struct UnknownSaveStruct2ABC a2[16], struct UnknownSaveStruct2ABC a3[16])
+{
+ u8 i;
+ u8 j;
+ u8 k;
+ struct UnknownSaveStruct2ABC ** arglist[4];
+ arglist[0] = &a0;
+ arglist[1] = &a1;
+ arglist[2] = &a2;
+ arglist[3] = &a3;
+ gUnknown_03000721 = GetLinkPlayerCount();
+ for (i=0; i<16; i++)
+ {
+ for (j=0; j<gUnknown_03000721; j++)
+ {
+ gUnknown_03000722 = sub_80C0730(*arglist[j], i);
+ if (gUnknown_03000722 != -1)
+ {
+ for (k=0; k<gUnknown_03000721-1; k++)
+ {
+ gUnknown_03005D38.var0 = sub_80BEBC8(*arglist[(j + k + 1) % gUnknown_03000721]);
+ if (gUnknown_03005D38.var0 != -1)
+ {
+ sub_80C06BC(arglist[(j + k + 1) % gUnknown_03000721], arglist[j]);
+ }
+ }
+ }
+ }
+ }
+}
void DoTVShowPokemonFanClubLetter(void);
void DoTVShowRecentHappenings(void);
@@ -2811,11 +2891,11 @@ void DoTVShowTheWorldOfMasters(void);
bool8 sub_80C06E8(struct UnknownSaveStruct2ABC *arg0, struct UnknownSaveStruct2ABC *arg1, s8 arg2);
-void sub_80C06BC(int *arg0, int *arg1) {
+void sub_80C06BC(struct UnknownSaveStruct2ABC *arg0[16], struct UnknownSaveStruct2ABC *arg1[16]) {
struct UnknownSaveStruct2ABC *str0;
struct UnknownSaveStruct2ABC *str1;
- str0 = (void *)arg0[0];
- str1 = (void *)arg1[0];
+ str0 = arg0[0];
+ str1 = arg1[0];
str1 += gUnknown_03000722;
sub_80C06E8(str0, str1, gUnknown_03005D38.var0);
}