summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest_link_80C2020.s170
-rw-r--r--src/battle/contest_link_80C2020.c72
2 files changed, 72 insertions, 170 deletions
diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s
index 2b60f2dd3..503ccd4be 100644
--- a/asm/contest_link_80C2020.s
+++ b/asm/contest_link_80C2020.s
@@ -5,176 +5,6 @@
.text
- thumb_func_start sub_80C42C0
-sub_80C42C0: @ 80C42C0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- movs r6, 0
- mov r9, r6
- ldr r1, _080C4308 @ =gTasks
- lsls r0, 2
- add r0, r12
- lsls r0, 3
- adds r0, r1
- ldrb r5, [r0, 0x8]
- ldrh r7, [r0, 0xA]
- ldrh r1, [r0, 0xC]
- mov r8, r1
- movs r2, 0xC
- ldrsh r0, [r0, r2]
- cmp r0, 0
- beq _080C4310
- ldr r1, _080C430C @ =gSharedMem + 0x18000
- lsls r2, r5, 1
- adds r0, r1, 0
- adds r0, 0xC
- adds r0, r2, r0
- movs r3, 0
- ldrsh r0, [r0, r3]
- mov r10, r1
- adds r4, r2, 0
- cmp r0, 0
- bgt _080C4328
- b _080C4326
- .align 2, 0
-_080C4308: .4byte gTasks
-_080C430C: .4byte gSharedMem + 0x18000
-_080C4310:
- ldr r1, _080C4350 @ =gSharedMem + 0x18000
- lsls r2, r5, 1
- adds r0, r1, 0
- adds r0, 0xC
- adds r0, r2, r0
- movs r3, 0
- ldrsh r0, [r0, r3]
- mov r10, r1
- adds r4, r2, 0
- cmp r0, 0x57
- ble _080C4328
-_080C4326:
- movs r6, 0x1
-_080C4328:
- mov r0, r10
- adds r0, 0xC
- adds r3, r4, r0
- ldrh r2, [r3]
- movs r0, 0
- ldrsh r1, [r3, r0]
- lsls r0, r7, 16
- asrs r0, 16
- cmp r1, r0
- bne _080C4340
- movs r1, 0x1
- mov r9, r1
-_080C4340:
- mov r0, r9
- cmp r0, 0
- bne _080C4362
- cmp r6, 0
- beq _080C4354
- strh r7, [r3]
- b _080C4362
- .align 2, 0
-_080C4350: .4byte gSharedMem + 0x18000
-_080C4354:
- mov r1, r8
- cmp r1, 0
- beq _080C435E
- subs r0, r2, 0x1
- b _080C4360
-_080C435E:
- adds r0, r2, 0x1
-_080C4360:
- strh r0, [r3]
-_080C4362:
- cmp r6, 0
- bne _080C43C8
- mov r2, r9
- cmp r2, 0
- bne _080C43CE
- movs r2, 0
- ldr r0, _080C4388 @ =gSharedMem + 0x1800C
- adds r6, r4, r0
- adds r0, r4, r5
- lsls r5, r0, 5
-_080C4376:
- movs r0, 0
- ldrsh r3, [r6, r0]
- adds r0, r2, 0x1
- lsls r1, r0, 3
- adds r4, r0, 0
- cmp r3, r1
- blt _080C438C
- movs r0, 0x8
- b _080C43A8
- .align 2, 0
-_080C4388: .4byte gSharedMem + 0x1800C
-_080C438C:
- lsls r0, r2, 3
- cmp r3, r0
- blt _080C43A6
- adds r0, r3, 0
- cmp r3, 0
- bge _080C439A
- adds r0, r3, 0x7
-_080C439A:
- asrs r0, 3
- lsls r0, 3
- subs r0, r3, r0
- lsls r0, 24
- lsrs r0, 24
- b _080C43A8
-_080C43A6:
- movs r0, 0
-_080C43A8:
- cmp r0, 0x3
- bhi _080C43B4
- ldr r3, _080C43B0 @ =0x0000504c
- b _080C43B6
- .align 2, 0
-_080C43B0: .4byte 0x0000504c
-_080C43B4:
- ldr r3, _080C43EC @ =0x00005057
-_080C43B6:
- adds r1, r0, r3
- adds r0, r5, r2
- lsls r0, 1
- ldr r2, _080C43F0 @ =0x0600e18e
- adds r0, r2
- strh r1, [r0]
- adds r2, r4, 0
- cmp r2, 0xA
- ble _080C4376
-_080C43C8:
- mov r3, r9
- cmp r3, 0
- beq _080C43DC
-_080C43CE:
- mov r1, r10
- ldrb r0, [r1, 0x14]
- subs r0, 0x1
- strb r0, [r1, 0x14]
- mov r0, r12
- bl DestroyTask
-_080C43DC:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C43EC: .4byte 0x00005057
-_080C43F0: .4byte 0x0600e18e
- thumb_func_end sub_80C42C0
-
thumb_func_start sub_80C43F4
sub_80C43F4: @ 80C43F4
push {r4,r5,lr}
diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c
index cbef4f9b7..72f78ead5 100644
--- a/src/battle/contest_link_80C2020.c
+++ b/src/battle/contest_link_80C2020.c
@@ -2478,3 +2478,75 @@ void sub_80C40D4(u8 arg0, u8 arg1)
"_080C42BC: .4byte gSharedMem + 0x18000");
}
#endif //NONMATCHING
+
+void sub_80C42C0(u8 taskId /*r12*/)
+{
+ bool32 r6 = FALSE;
+ bool32 r9 = FALSE;
+ u8 r5 = gTasks[taskId].data[0];
+ s16 r7 = gTasks[taskId].data[1];
+ s16 r1 = gTasks[taskId].data[2];
+ s32 i;
+
+ if (r1 != 0)
+ {
+ if (eContestLink80C2020Struct2018000.unk_0c[r5] <= 0)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (eContestLink80C2020Struct2018000.unk_0c[r5] >= 88)
+ r6 = TRUE;
+ }
+ if (eContestLink80C2020Struct2018000.unk_0c[r5] == r7)
+ r9 = TRUE;
+
+ if (!r9)
+ {
+ if (r6)
+ {
+ eContestLink80C2020Struct2018000.unk_0c[r5] = r7;
+ }
+ else if (r1 != 0)
+ {
+ eContestLink80C2020Struct2018000.unk_0c[r5]--;
+ }
+ else
+ {
+ eContestLink80C2020Struct2018000.unk_0c[r5]++;
+ }
+ }
+ if (!r6)
+ {
+ if (!r9)
+ {
+ for (i = 0; i < 11; i++)
+ {
+ u8 r0;
+ u16 tile;
+ if (eContestLink80C2020Struct2018000.unk_0c[r5] >= 8 * (i + 1))
+ {
+ r0 = 8;
+ }
+ else if (eContestLink80C2020Struct2018000.unk_0c[r5] >= 8 * i)
+ {
+ r0 = eContestLink80C2020Struct2018000.unk_0c[r5] % 8;
+ }
+ else
+ {
+ r0 = 0;
+ }
+ if (r0 < 4)
+ tile = 0x504C + r0;
+ else
+ tile = 0x5057 + r0;
+ *(vu16 *)(0x0600E18E + 2 * (96 * r5 + i)) = tile;
+ }
+ }
+ }
+ if (r9)
+ {
+ eContestLink80C2020Struct2018000.unk_14--;
+ DestroyTask(taskId);
+ }
+}