diff options
-rw-r--r-- | asm/contest.s | 228 | ||||
-rw-r--r-- | include/contest.h | 4 | ||||
-rw-r--r-- | src/contest.c | 86 | ||||
-rw-r--r-- | src/pokemon/learn_move.c | 2 |
4 files changed, 81 insertions, 239 deletions
diff --git a/asm/contest.s b/asm/contest.s index 61c68f501..66605f3c4 100644 --- a/asm/contest.s +++ b/asm/contest.s @@ -5,234 +5,6 @@ .text - thumb_func_start sub_80AF038 -sub_80AF038: @ 80AF038 - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - movs r5, 0x1 - movs r4, 0 - ldr r0, _080AF074 @ =gUnknown_02038696 - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - adds r0, 0x2 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 2 - ldr r1, _080AF078 @ =gSharedMem + 0x19260 - adds r2, r0, r1 - ldr r0, [r2, 0x10] - ldr r1, _080AF07C @ =0x00ff0003 - ands r0, r1 - cmp r0, 0 - bne _080AF06C - ldrb r0, [r2, 0xF] - cmp r0, 0 - beq _080AF080 -_080AF06C: - adds r0, r3, 0 - movs r1, 0 - b _080AF0A6 - .align 2, 0 -_080AF074: .4byte gUnknown_02038696 -_080AF078: .4byte gSharedMem + 0x19260 -_080AF07C: .4byte 0x00ff0003 -_080AF080: - ldrb r1, [r2, 0xC] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _080AF090 - adds r0, r3, 0 - movs r1, 0x1 - b _080AF0A6 -_080AF090: - movs r0, 0x6 - ands r0, r1 - cmp r0, 0 - bne _080AF0A2 - ldrb r1, [r2, 0xB] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080AF0B0 -_080AF0A2: - adds r0, r3, 0 - movs r1, 0x2 -_080AF0A6: - bl sub_80AEFE8 - lsls r0, 16 - lsrs r4, r0, 16 - b _080AF0B2 -_080AF0B0: - movs r5, 0 -_080AF0B2: - cmp r5, 0 - beq _080AF0EC - lsls r2, r6, 6 - ldr r0, _080AF0DC @ =0x0600c028 - adds r0, r2, r0 - strh r4, [r0] - ldr r0, _080AF0E0 @ =0x0600c02a - adds r0, r2, r0 - adds r1, r4, 0x1 - strh r1, [r0] - ldr r0, _080AF0E4 @ =0x0600c068 - adds r1, r2, r0 - adds r0, r4, 0 - adds r0, 0x10 - strh r0, [r1] - ldr r0, _080AF0E8 @ =0x0600c06a - adds r2, r0 - adds r0, r4, 0 - adds r0, 0x11 - strh r0, [r2] - b _080AF106 - .align 2, 0 -_080AF0DC: .4byte 0x0600c028 -_080AF0E0: .4byte 0x0600c02a -_080AF0E4: .4byte 0x0600c068 -_080AF0E8: .4byte 0x0600c06a -_080AF0EC: - lsls r1, r6, 6 - ldr r0, _080AF110 @ =0x0600c028 - adds r0, r1, r0 - strh r5, [r0] - ldr r0, _080AF114 @ =0x0600c02a - adds r0, r1, r0 - strh r5, [r0] - ldr r2, _080AF118 @ =0x0600c068 - adds r0, r1, r2 - strh r5, [r0] - ldr r0, _080AF11C @ =0x0600c06a - adds r1, r0 - strh r5, [r1] -_080AF106: - adds r0, r5, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080AF110: .4byte 0x0600c028 -_080AF114: .4byte 0x0600c02a -_080AF118: .4byte 0x0600c068 -_080AF11C: .4byte 0x0600c06a - thumb_func_end sub_80AF038 - - thumb_func_start sub_80AF120 -sub_80AF120: @ 80AF120 - push {r4,lr} - movs r4, 0 -_080AF124: - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_80AF038 - adds r4, 0x1 - cmp r4, 0x3 - ble _080AF124 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AF120 - - thumb_func_start sub_80AF138 -sub_80AF138: @ 80AF138 - push {lr} - sub sp, 0x8 - ldr r0, _080AF158 @ =gUnknown_03004210 - movs r1, 0x11 - str r1, [sp] - movs r1, 0x12 - str r1, [sp, 0x4] - movs r1, 0 - movs r2, 0x1 - movs r3, 0xF - bl FillWindowRect_DefaultPalette - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_080AF158: .4byte gUnknown_03004210 - thumb_func_end sub_80AF138 - - thumb_func_start sub_80AF15C -sub_80AF15C: @ 80AF15C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - adds r0, r4, 0 - bl sub_80AF59C - lsls r0, 24 - cmp r0, 0 - beq _080AF174 - movs r0, 0 - b _080AF1AA -_080AF174: - ldr r0, _080AF190 @ =gContestPlayerMonIndex - ldrb r0, [r0] - cmp r4, r0 - beq _080AF198 - adds r0, r4, 0 - bl sub_81288F4 - bl sub_8128944 - lsls r0, 24 - ldr r2, _080AF194 @ =gContestMons - lsrs r0, 23 - lsls r1, r4, 6 - b _080AF1A2 - .align 2, 0 -_080AF190: .4byte gContestPlayerMonIndex -_080AF194: .4byte gContestMons -_080AF198: - ldr r2, _080AF1B0 @ =gContestMons - ldr r0, _080AF1B4 @ =gSharedMem + 0x19204 - ldrb r0, [r0] - lsls r0, 1 - lsls r1, r5, 6 -_080AF1A2: - adds r0, r1 - adds r2, 0x1E - adds r0, r2 - ldrh r0, [r0] -_080AF1AA: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080AF1B0: .4byte gContestMons -_080AF1B4: .4byte gSharedMem + 0x19204 - thumb_func_end sub_80AF15C - - thumb_func_start sub_80AF1B8 -sub_80AF1B8: @ 80AF1B8 - push {r4,lr} - movs r4, 0 -_080AF1BC: - adds r0, r4, 0 - bl sub_80AF15C - lsls r1, r4, 3 - subs r1, r4 - lsls r1, 2 - ldr r2, _080AF1E0 @ =gSharedMem + 0x19260 - adds r1, r2 - strh r0, [r1, 0x6] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080AF1BC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AF1E0: .4byte gSharedMem + 0x19260 - thumb_func_end sub_80AF1B8 - thumb_func_start sub_80AF1E4 sub_80AF1E4: @ 80AF1E4 push {r4,r5,lr} diff --git a/include/contest.h b/include/contest.h index 13786e006..fe161bac4 100644 --- a/include/contest.h +++ b/include/contest.h @@ -47,7 +47,9 @@ struct ContestPokemon }; // wow extern struct ContestPokemon gContestMons[]; -extern struct ContestEffect gContestEffects[]; +extern const struct ContestMove gContestMoves[]; +extern const struct ContestEffect gContestEffects[]; +extern const u8 *const gContestEffectStrings[]; void ResetLinkContestBoolean(void); void sub_80AB2AC(void); diff --git a/src/contest.c b/src/contest.c index c4fd99e32..b0f7c6381 100644 --- a/src/contest.c +++ b/src/contest.c @@ -31,6 +31,8 @@ extern bool8 AreMovesContestCombo(u16, u16); extern void sub_80C8A38(u8); extern void sub_80C8AD0(u8); extern void sub_80C8C80(u8); +extern void sub_81288F4(); +extern u8 sub_8128944(void); struct Shared18000 { @@ -92,11 +94,12 @@ struct UnknownContestStruct1 u8 unkC; s8 unkD; u8 unkE; - u8 fillerF; - u8 unk10_0:4; + u8 unkF; + u8 unk10_0:2; + u8 unk10_2:2; u8 unk10_4:2; // definitely a bitfield u8 unk11; - u8 filler12; + u8 unk12; u8 unk13; u8 unk14; u8 unk15_0:1; // Is this a bitfield or not? sub_80ABCDC says no. @@ -233,14 +236,12 @@ extern const u8 gUnknown_083CC14A[]; extern const u8 gUnknown_083CC16E[]; extern const u8 *const gUnknown_083CC2D8[]; extern const u8 *const gUnknown_083CC330[]; -extern const struct ContestMove gContestMoves[]; extern const u8 gUnknownText_UnknownFormatting2[]; extern const u8 gUnknownText_UnknownFormatting3[]; extern const u8 gUnknown_083CB02C[]; extern const u8 *const gUnknown_083CB2F0[]; extern const u8 gUnknown_083CC59C[]; extern const u8 gUnknown_083CC5A2[]; -extern const u8 *const gContestEffectStrings[]; void sub_80AB350(void); @@ -307,7 +308,7 @@ void sub_80AEB30(void); void sub_80AEBEC(u16); void sub_80AED58(void); bool8 sub_80AEE54(u8, u8); -u8 sub_80AF038(u8); +bool8 sub_80AF038(u8); void sub_80AF120(void); void sub_80AF138(void); u16 sub_80AF15C(u8); @@ -1358,7 +1359,7 @@ void sub_80AC2CC(u8 taskId) } return; case 50: - if (sub_80AF038(r7) != 0) + if (sub_80AF038(r7)) PlaySE(SE_C_PASI); gTasks[taskId].data[0] = 25; return; @@ -1444,7 +1445,7 @@ void sub_80AC2CC(u8 taskId) if (gUnknown_02038696[r6] == gTasks[taskId].data[1]) break; } - if (sub_80AF038(r6) != 0) + if (sub_80AF038(r6)) PlaySE(SE_C_PASI); else PlaySE(SE_C_SYU); @@ -2810,3 +2811,72 @@ u16 sub_80AEFE8(int unused, u8 b) return var; } +bool8 sub_80AF038(u8 a) +{ + bool8 r5 = TRUE; + u16 r4 = 0; + u8 r6 = gUnknown_02038696[a] * 5 + 2; + + if (shared19260_[a].unk10_0 != 0 || shared19260_[a].unk12 != 0 || shared19260_[a].unkF != 0) + r4 = sub_80AEFE8(a, 0); + else if (shared19260_[a].unkC & 1) + r4 = sub_80AEFE8(a, 1); + else if ((shared19260_[a].unkC & 6) || (shared19260_[a].unkB & 0x80)) + r4 = sub_80AEFE8(a, 2); + else + r5 = FALSE; + if (r5) + { + *(u16 *)(VRAM + 0xC028 + r6 * 64) = r4; + *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = r4 + 1; + *(u16 *)(VRAM + 0xC068 + r6 * 64) = r4 + 16; + *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = r4 + 17; + } + else + { + *(u16 *)(VRAM + 0xC028 + r6 * 64) = 0; + *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = 0; + *(u16 *)(VRAM + 0xC068 + r6 * 64) = 0; + *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = 0; + } + return r5; +} + +void sub_80AF120(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + sub_80AF038(i); +} + +void sub_80AF138(void) +{ + FillWindowRect_DefaultPalette(&gUnknown_03004210, 0, 1, 15, 17, 18); +} + +u16 sub_80AF15C(u8 a) +{ + if (sub_80AF59C(a) != 0) + return 0; + if (a == gContestPlayerMonIndex) + { + return gContestMons[a].moves[shared19204.unk19204]; + } + else + { + u8 moveChoice; + + sub_81288F4(a); + moveChoice = sub_8128944(); + return gContestMons[a].moves[moveChoice]; + } +} + +void sub_80AF1B8(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + shared19260_[i].unk6 = sub_80AF15C(i); +} diff --git a/src/pokemon/learn_move.c b/src/pokemon/learn_move.c index d2538decd..5eee45b23 100644 --- a/src/pokemon/learn_move.c +++ b/src/pokemon/learn_move.c @@ -25,8 +25,6 @@ extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u8 gTileBuffer[]; -extern const struct ContestMove gContestMoves[]; -extern const struct ContestEffect gContestEffects[]; extern const struct WindowConfig gWindowConfig_81E6CE4; extern const struct WindowConfig gWindowConfig_81E7240; extern const u8 *const gContestEffectStrings[]; |