summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/contest.s228
-rw-r--r--include/contest.h4
-rw-r--r--src/contest.c86
-rw-r--r--src/pokemon/learn_move.c2
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[];