summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest_link_80C2020.s327
-rw-r--r--src/battle/contest_link_80C2020.c139
2 files changed, 137 insertions, 329 deletions
diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s
index e0d1937d3..736ccd5e3 100644
--- a/asm/contest_link_80C2020.s
+++ b/asm/contest_link_80C2020.s
@@ -5,333 +5,6 @@
.text
- thumb_func_start sub_80C255C
-sub_80C255C: @ 80C255C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080C2594 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080C258C
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _080C258C
- ldr r0, _080C2598 @ =sub_80C25A4
- movs r1, 0
- bl CreateTask
- ldr r1, _080C259C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C25A0 @ =TaskDummy
- str r1, [r0]
-_080C258C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C2594: .4byte gReceivedRemoteLinkPlayers
-_080C2598: .4byte sub_80C25A4
-_080C259C: .4byte gTasks
-_080C25A0: .4byte TaskDummy
- thumb_func_end sub_80C255C
-
- thumb_func_start sub_80C25A4
-sub_80C25A4: @ 80C25A4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080C25B8 @ =sub_80C89DC
- ldr r2, _080C25BC @ =sub_80C25C0
- bl SetTaskFuncWithFollowupFunc
- pop {r0}
- bx r0
- .align 2, 0
-_080C25B8: .4byte sub_80C89DC
-_080C25BC: .4byte sub_80C25C0
- thumb_func_end sub_80C25A4
-
- thumb_func_start sub_80C25C0
-sub_80C25C0: @ 80C25C0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8007ECC
- lsls r0, 24
- cmp r0, 0
- beq _080C25EC
- adds r0, r4, 0
- bl DestroyTask
- ldr r2, _080C25F4 @ =gTasks
- ldr r0, _080C25F8 @ =gSharedMem + 0x18000
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, _080C25FC @ =sub_80C2600
- str r1, [r0]
- bl sub_80C3764
-_080C25EC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C25F4: .4byte gTasks
-_080C25F8: .4byte gSharedMem + 0x18000
-_080C25FC: .4byte sub_80C2600
- thumb_func_end sub_80C25C0
-
- thumb_func_start sub_80C2600
-sub_80C2600: @ 80C2600
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C2644 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r5, r1, r2
- ldrh r1, [r5, 0x8]
- movs r2, 0x8
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _080C2654
- ldr r0, _080C2648 @ =sub_80C2F64
- movs r1, 0x14
- bl CreateTask
- ldr r4, _080C264C @ =gContestText_AnnounceResults
- ldr r0, _080C2650 @ =gSharedMem + 0x18000
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_80C3158
- adds r0, r4, 0
- bl sub_80C34AC
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
- movs r2, 0x78
- b _080C26A6
- .align 2, 0
-_080C2644: .4byte gTasks
-_080C2648: .4byte sub_80C2F64
-_080C264C: .4byte gContestText_AnnounceResults
-_080C2650: .4byte gSharedMem + 0x18000
-_080C2654:
- cmp r0, 0x1
- bne _080C2668
- ldr r0, _080C2664 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- bne _080C26D4
- b _080C267C
- .align 2, 0
-_080C2664: .4byte gSharedMem + 0x18000
-_080C2668:
- cmp r0, 0x2
- bne _080C2684
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x15
- bne _080C26D4
- movs r0, 0
-_080C267C:
- strh r0, [r5, 0xA]
- adds r0, r1, 0x1
- strh r0, [r5, 0x8]
- b _080C26D4
-_080C2684:
- cmp r0, 0x3
- bne _080C26C0
- ldr r4, _080C26B4 @ =gContestText_PreliminaryResults
- ldr r0, _080C26B8 @ =gSharedMem + 0x18000
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_80C3158
- adds r0, r4, 0
- bl sub_80C34AC
- lsls r0, 16
- asrs r0, 16
- ldr r2, _080C26BC @ =0x0000ffff
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
-_080C26A6:
- bl sub_80C34CC
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _080C26D4
- .align 2, 0
-_080C26B4: .4byte gContestText_PreliminaryResults
-_080C26B8: .4byte gSharedMem + 0x18000
-_080C26BC: .4byte 0x0000ffff
-_080C26C0:
- cmp r0, 0x4
- bne _080C26D4
- ldr r0, _080C26DC @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x4]
- cmp r0, 0x2
- bne _080C26D4
- movs r0, 0
- strh r0, [r5, 0x8]
- ldr r0, _080C26E0 @ =sub_80C26E4
- str r0, [r5]
-_080C26D4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C26DC: .4byte gSharedMem + 0x18000
-_080C26E0: .4byte sub_80C26E4
- thumb_func_end sub_80C2600
-
- thumb_func_start sub_80C26E4
-sub_80C26E4: @ 80C26E4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C2708 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080C2744
- cmp r0, 0x1
- bgt _080C270C
- cmp r0, 0
- beq _080C2712
- b _080C2766
- .align 2, 0
-_080C2708: .4byte gTasks
-_080C270C:
- cmp r0, 0x2
- beq _080C2754
- b _080C2766
-_080C2712:
- ldr r5, _080C2738 @ =gSharedMem + 0x18000
- ldrb r0, [r5, 0xA]
- cmp r0, 0
- bne _080C2766
- ldrh r1, [r4, 0xC]
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_80C40D4
- ldrb r0, [r5, 0x14]
- cmp r0, 0
- bne _080C273C
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _080C2766
- .align 2, 0
-_080C2738: .4byte gSharedMem + 0x18000
-_080C273C:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080C2766
-_080C2744:
- ldr r0, _080C2750 @ =gSharedMem + 0x18000
- ldrb r0, [r0, 0x14]
- cmp r0, 0
- bne _080C2766
- strh r0, [r4, 0x8]
- b _080C2766
- .align 2, 0
-_080C2750: .4byte gSharedMem + 0x18000
-_080C2754:
- movs r0, 0x88
- lsls r0, 3
- bl sub_80C3520
- movs r0, 0
- strh r0, [r4, 0x8]
- strh r0, [r4, 0xC]
- ldr r0, _080C276C @ =sub_80C2770
- str r0, [r4]
-_080C2766:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C276C: .4byte sub_80C2770
- thumb_func_end sub_80C26E4
-
- thumb_func_start sub_80C2770
-sub_80C2770: @ 80C2770
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r4, r2, 0
- ldr r5, _080C27BC @ =gSharedMem + 0x18000
- ldrb r3, [r5, 0x4]
- cmp r3, 0
- bne _080C27CC
- ldr r1, _080C27C0 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0, r1
- ldrh r0, [r1, 0xA]
- adds r0, 0x1
- strh r0, [r1, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x15
- bne _080C27DE
- strh r3, [r1, 0xA]
- ldr r4, _080C27C4 @ =gContestText_Round2Results
- ldrb r1, [r5]
- adds r0, r4, 0
- bl sub_80C3158
- adds r0, r4, 0
- bl sub_80C34AC
- lsls r0, 16
- asrs r0, 16
- ldr r2, _080C27C8 @ =0x0000ffff
- movs r3, 0x88
- lsls r3, 3
- movs r1, 0x90
- bl sub_80C34CC
- b _080C27DE
- .align 2, 0
-_080C27BC: .4byte gSharedMem + 0x18000
-_080C27C0: .4byte gTasks
-_080C27C4: .4byte gContestText_Round2Results
-_080C27C8: .4byte 0x0000ffff
-_080C27CC:
- cmp r3, 0x2
- bne _080C27DE
- ldr r0, _080C27E4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _080C27E8 @ =sub_80C27EC
- str r0, [r1]
-_080C27DE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080C27E4: .4byte gTasks
-_080C27E8: .4byte sub_80C27EC
- thumb_func_end sub_80C2770
-
thumb_func_start sub_80C27EC
sub_80C27EC: @ 80C27EC
push {r4,r5,lr}
diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c
index 1fe6e8cb6..dd09e2465 100644
--- a/src/battle/contest_link_80C2020.c
+++ b/src/battle/contest_link_80C2020.c
@@ -14,13 +14,21 @@
#include "battle.h"
#include "contest.h"
#include "link.h"
+#include "contest_link_80C857C.h"
+#include "contest_link_80C2020.h"
#define ABS(x) ((x) < 0 ? -(x) : (x))
struct UnkEwramStruct18000 {
- u8 filler_00[2];
+ u8 unk_00;
+ u8 filler_01[1];
u8 unk_02;
- u8 filler_03[0x15];
+ u8 filler_03[1];
+ u8 unk_04;
+ u8 filler_05[5];
+ u8 unk_0a;
+ u8 filler_0b[9];
+ u8 unk_14;
};
struct UnkEwramStruct18018 {
@@ -34,8 +42,19 @@ void sub_80C2430(void);
void sub_80C2448(void);
void sub_80C24F4(u8 taskId);
void sub_80C255C(u8 taskId);
+void sub_80C25A4(u8 taskId);
+void sub_80C25C0(u8 taskId);
void sub_80C2600(u8 taskId);
+void sub_80C26E4(u8 taskId);
+void sub_80C2770(u8 taskId);
+void sub_80C27EC(u8 taskId);
void sub_80C2F28(u8 taskId);
+void sub_80C2F64(u8 taskId);
+void sub_80C3158(const u8 *string, u8 spriteId);
+u16 sub_80C34AC(const u8 *string);
+void sub_80C34CC(s16 data4, s16 pos0y, u16 data5, s16 data6);
+void sub_80C3520(u16 a0);
+void sub_80C3764(void);
void sub_80C37E4(void);
void sub_80C310C(void);
void sub_80C30D4(u8 a0, u8 a1);
@@ -44,6 +63,7 @@ void sub_80C3698(const u8 *string);
void sub_80C3F00(void);
u8 sub_80C3990(u8 a0, u8 a1);
s8 sub_80C39E4(u8 a0, u8 a1);
+void sub_80C40D4(u8 a0, u8 a1);
extern const u8 gUnknown_083D17DC[];
extern const u8 gUnknown_083D17E0[];
@@ -235,3 +255,118 @@ void sub_80C24F4(u8 taskId)
}
}
}
+
+void sub_80C255C(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers && GetLinkPlayerCount() == MAX_LINK_PLAYERS)
+ {
+ CreateTask(sub_80C25A4, 0);
+ gTasks[taskId].func = TaskDummy;
+ }
+}
+
+void sub_80C25A4(u8 taskId)
+{
+ SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80C25C0);
+}
+
+void sub_80C25C0(u8 taskId)
+{
+ if (sub_8007ECC())
+ {
+ DestroyTask(taskId);
+ gTasks[eContestLink80C2020Struct2018000.unk_02].func = sub_80C2600;
+ sub_80C3764();
+ }
+}
+
+void sub_80C2600(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ {
+ CreateTask(sub_80C2F64, 20);
+ sub_80C3158(gContestText_AnnounceResults, eContestLink80C2020Struct2018000.unk_00);
+ sub_80C34CC(sub_80C34AC(gContestText_AnnounceResults), 0x90, 0x78, 0x440);
+ gTasks[taskId].data[0]++;
+ }
+ else if (gTasks[taskId].data[0] == 1)
+ {
+ if (eContestLink80C2020Struct2018000.unk_04 == 0)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else if (gTasks[taskId].data[0] == 2)
+ {
+ if (++gTasks[taskId].data[1] == 0x15)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else if (gTasks[taskId].data[0] == 3)
+ {
+ sub_80C3158(gContestText_PreliminaryResults, eContestLink80C2020Struct2018000.unk_00);
+ sub_80C34CC(sub_80C34AC(gContestText_PreliminaryResults), 0x90, 0xffff, 0x440);
+ gTasks[taskId].data[0]++;
+ }
+ else if (gTasks[taskId].data[0] == 4)
+ {
+ if (eContestLink80C2020Struct2018000.unk_04 == 2)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80C26E4;
+ }
+ }
+}
+
+void sub_80C26E4(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (eContestLink80C2020Struct2018000.unk_0a == 0)
+ {
+ sub_80C40D4(0, gTasks[taskId].data[2]++);
+ if (eContestLink80C2020Struct2018000.unk_14 == 0)
+ {
+ gTasks[taskId].data[0] = 2;
+ }
+ else
+ {
+ gTasks[taskId].data[0]++;
+ }
+ }
+ break;
+ case 1:
+ if (eContestLink80C2020Struct2018000.unk_14 == 0)
+ {
+ gTasks[taskId].data[0] = 0;
+ }
+ break;
+ case 2:
+ sub_80C3520(0x440);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_80C2770;
+ break;
+ }
+}
+
+void sub_80C2770(u8 taskId)
+{
+ if (eContestLink80C2020Struct2018000.unk_04 == 0)
+ {
+ if (++gTasks[taskId].data[1] == 21)
+ {
+ gTasks[taskId].data[1] = 0;
+ sub_80C3158(gContestText_Round2Results, eContestLink80C2020Struct2018000.unk_00);
+ sub_80C34CC(sub_80C34AC(gContestText_Round2Results), 0x90, 0xffff, 0x440);
+ }
+ }
+ else if (eContestLink80C2020Struct2018000.unk_04 == 2)
+ {
+ gTasks[taskId].func = sub_80C27EC;
+ }
+}