diff options
-rw-r--r-- | asm/contest_effect.s | 245 | ||||
-rw-r--r-- | include/contest.h | 4 | ||||
-rw-r--r-- | src/contest_effect.c | 117 |
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); + } +} |