summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest_effect.s245
-rw-r--r--include/contest.h4
-rw-r--r--src/contest_effect.c117
3 files changed, 116 insertions, 250 deletions
diff --git a/asm/contest_effect.s b/asm/contest_effect.s
index 523f4d85b..1996857eb 100644
--- a/asm/contest_effect.s
+++ b/asm/contest_effect.s
@@ -5,251 +5,6 @@
.text
- thumb_func_start ContestEffect_09
-ContestEffect_09: @ 80B7F3C
- push {r4-r6,lr}
- movs r2, 0
- ldr r1, _080B7F9C @ =gSharedMem + 0x192D0
- ldrb r0, [r1, 0x11]
- adds r4, r0, r1
- ldrb r0, [r4]
- cmp r0, 0
- beq _080B7F7C
- movs r3, 0
- adds r5, r1, 0
- adds r6, r5, 0
- adds r6, 0x8
-_080B7F54:
- adds r1, r2, r5
- ldrb r0, [r4]
- ldrb r1, [r1]
- cmp r0, r1
- bls _080B7F64
- adds r0, r3, r6
- strb r2, [r0]
- adds r3, 0x1
-_080B7F64:
- adds r2, 0x1
- cmp r2, 0x3
- ble _080B7F54
- ldr r0, _080B7F9C @ =gSharedMem + 0x192D0
- adds r0, 0x8
- adds r0, r3, r0
- movs r1, 0xFF
- strb r1, [r0]
- bl sub_80B9120
- lsls r0, 24
- lsrs r2, r0, 24
-_080B7F7C:
- cmp r2, 0
- bne _080B7F8A
- ldr r0, _080B7F9C @ =gSharedMem + 0x192D0
- ldrb r0, [r0, 0x11]
- movs r1, 0x36
- bl SetContestantStatusUnk14
-_080B7F8A:
- ldr r0, _080B7F9C @ =gSharedMem + 0x192D0
- ldrb r0, [r0, 0x11]
- movs r1, 0x30
- bl SetContestantStatusUnk13
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B7F9C: .4byte gSharedMem + 0x192D0
- thumb_func_end ContestEffect_09
-
- thumb_func_start ContestEffect_14
-ContestEffect_14: @ 80B7FA0
- push {lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x14
- cmp r0, 0x1
- bls _080B7FC2
- movs r1, 0x3C
- cmp r0, 0x7
- bhi _080B7FC2
- movs r1, 0x28
-_080B7FC2:
- ldr r0, _080B7FD0 @ =gSharedMem + 0x192D0
- strh r1, [r0, 0x4]
- bl ContestEffect_08
- pop {r0}
- bx r0
- .align 2, 0
-_080B7FD0: .4byte gSharedMem + 0x192D0
- thumb_func_end ContestEffect_14
-
- thumb_func_start ContestEffect_15
-ContestEffect_15: @ 80B7FD4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r7, 0
- ldr r0, _080B806C @ =gSharedMem + 0x192D0
- ldrb r6, [r0, 0x11]
- adds r1, r6, r0
- ldrb r1, [r1]
- mov r8, r0
- cmp r1, 0
- beq _080B804A
- movs r5, 0
- mov r4, r8
-_080B7FEE:
- adds r0, r6, r4
- adds r1, r5, r4
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bls _080B8044
- strb r5, [r4, 0x8]
- movs r0, 0xFF
- strb r0, [r4, 0x9]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- cmp r0, 0
- beq _080B8032
- movs r1, 0xA
- cmp r0, 0x2
- bls _080B8032
- movs r1, 0x14
- cmp r0, 0x4
- bls _080B8032
- movs r1, 0x1E
- cmp r0, 0x6
- bls _080B8032
- movs r1, 0x3C
- cmp r0, 0x8
- bhi _080B8032
- movs r1, 0x28
-_080B8032:
- strh r1, [r4, 0x4]
- bl sub_80B9120
- lsls r0, 24
- cmp r0, 0
- beq _080B8044
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_080B8044:
- adds r5, 0x1
- cmp r5, 0x3
- ble _080B7FEE
-_080B804A:
- mov r1, r8
- ldrb r0, [r1, 0x11]
- movs r1, 0x30
- bl SetContestantStatusUnk13
- cmp r7, 0
- bne _080B8062
- mov r1, r8
- ldrb r0, [r1, 0x11]
- movs r1, 0x36
- bl SetContestantStatusUnk14
-_080B8062:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B806C: .4byte gSharedMem + 0x192D0
- thumb_func_end ContestEffect_15
-
- thumb_func_start ContestEffect_16
-ContestEffect_16: @ 80B8070
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0
- mov r9, r0
- ldr r0, _080B8108 @ =gSharedMem + 0x192D0
- ldrb r7, [r0, 0x11]
- adds r1, r7, r0
- ldrb r1, [r1]
- mov r10, r0
- cmp r1, 0
- beq _080B80E0
- movs r6, 0
- mov r8, r10
- mov r5, r10
- subs r5, 0x5B
-_080B8094:
- mov r1, r8
- adds r0, r7, r1
- adds r1, r6, r1
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bls _080B80D8
- ldrb r1, [r5]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080B80D8
- lsls r0, r6, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_80B90C0
- lsls r0, 24
- cmp r0, 0
- beq _080B80D8
- ldrb r0, [r5]
- movs r2, 0x11
- negs r2, r2
- adds r1, r2, 0
- ands r0, r1
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r5]
- adds r0, r4, 0
- movs r1, 0x8
- bl SetContestantStatusUnk13
- movs r0, 0x1
- mov r9, r0
-_080B80D8:
- adds r5, 0x1C
- adds r6, 0x1
- cmp r6, 0x3
- ble _080B8094
-_080B80E0:
- mov r1, r10
- ldrb r0, [r1, 0x11]
- movs r1, 0x7
- bl SetContestantStatusUnk13
- mov r2, r9
- cmp r2, 0
- bne _080B80FA
- mov r1, r10
- ldrb r0, [r1, 0x11]
- movs r1, 0x36
- bl SetContestantStatusUnk14
-_080B80FA:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B8108: .4byte gSharedMem + 0x192D0
- thumb_func_end ContestEffect_16
-
thumb_func_start ContestEffect_17
ContestEffect_17: @ 80B810C
push {r4-r7,lr}
diff --git a/include/contest.h b/include/contest.h
index 241fd19fc..9ac51b536 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -227,9 +227,7 @@ struct UnknownContestStruct7
u8 unk0[4];
u16 unk4;
u16 unk6;
- u8 unk8;
- u8 unk9;
- u8 fillerA[3];
+ u8 unk8[5];
u8 unkD[4];
u8 unk11;
u8 filler12[2];
diff --git a/src/contest_effect.c b/src/contest_effect.c
index abc630dd8..60dd2f320 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -1,8 +1,10 @@
#include "global.h"
#include "ewram.h"
+#include "random.h"
#include "contest.h"
u8 sub_80B9120(void);
+bool8 sub_80B90C0(u8);
extern bool8 const gComboStarterLookupTable[];
@@ -79,13 +81,124 @@ void ContestEffect_08(void)
if (shared192D0.unk0[a] != 0) {
int i;
+
for (i = 0; i < 4 && shared192D0.unk0[a] - 1 != shared192D0.unk0[i]; i++)
;
- shared192D0.unk8 = i;
- shared192D0.unk9 = 0xFF;
+ shared192D0.unk8[0] = i;
+ shared192D0.unk8[1] = 0xFF;
+ idx = sub_80B9120();
+ }
+ if (idx == 0)
+ SetContestantStatusUnk14(shared192D0.unk11, 0x36);
+ SetContestantStatusUnk13(shared192D0.unk11, 48);
+}
+
+void ContestEffect_09(void)
+{
+ u8 idx = 0;
+ u8 a = shared192D0.unk11;
+
+ if (shared192D0.unk0[a] != 0) {
+ int i;
+ int j = 0;
+
+ for (i = 0; i < 4; i++)
+ if (shared192D0.unk0[a] > shared192D0.unk0[i])
+ shared192D0.unk8[j++] = i;
+ shared192D0.unk8[j] = 0xFF;
idx = sub_80B9120();
}
if (idx == 0)
SetContestantStatusUnk14(shared192D0.unk11, 0x36);
SetContestantStatusUnk13(shared192D0.unk11, 48);
}
+
+void ContestEffect_14(void)
+{
+ u8 r0 = Random() % 10;
+ int r1 = 20;
+ if (r0 >= 2)
+ {
+ r1 = 60;
+ if (r0 < 8)
+ r1 = 40;
+ }
+ shared192D0.unk4 = r1;
+ ContestEffect_08();
+}
+
+void ContestEffect_15(void) {
+ u8 r7 = 0;
+ u8 r6 = shared192D0.unk11;
+
+ if (shared192D0.unk0[r6] != 0)
+ {
+ int r5;
+
+ for (r5 = 0; r5 < 4; r5++)
+ {
+ if (shared192D0.unk0[r6] > shared192D0.unk0[r5])
+ {
+ shared192D0.unk8[0] = r5;
+ shared192D0.unk8[1] = 0xFF;
+ {
+ u8 r0 = Random() % 10;
+ int r1 = 0;
+ if (r0 > 0)
+ {
+ r1 = 10;
+ if (r0 > 2)
+ {
+ r1 = 20;
+ if (r0 > 4)
+ {
+ r1 = 30;
+ if (r0 > 6)
+ {
+ r1 = 60;
+ if (r0 <= 8)
+ r1 = 40;
+ }
+ }
+ }
+ }
+ shared192D0.unk4 = r1;
+ }
+ if (sub_80B9120())
+ r7++;
+ }
+ }
+ }
+ SetContestantStatusUnk13(shared192D0.unk11, 48);
+ if (r7 == 0)
+ SetContestantStatusUnk14(shared192D0.unk11, 0x36);
+}
+
+void ContestEffect_16(void)
+{
+ bool32 r9 = FALSE;
+ u8 r7 = shared192D0.unk11;
+
+ if (shared192D0.unk0[shared192D0.unk11] != 0)
+ {
+ int r6;
+
+ for (r6 = 0; r6 < 4; r6++)
+ {
+ if (shared192D0.unk0[r7] > shared192D0.unk0[r6] &&
+ sContestantStatus[r6].unk15_4 &&
+ sub_80B90C0(r6))
+ {
+ sContestantStatus[r6].unk15_4 = FALSE;
+ sContestantStatus[r6].unk15_5 = TRUE;
+ SetContestantStatusUnk13(r6, 8);
+ r9 = TRUE;
+ }
+ }
+ }
+ SetContestantStatusUnk13(shared192D0.unk11, 7);
+ if (!r9)
+ {
+ SetContestantStatusUnk14(shared192D0.unk11, 0x36);
+ }
+}