summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-12-22 01:57:16 -0600
committercamthesaxman <cameronghall@cox.net>2017-12-22 01:57:16 -0600
commitd108f8dbe7f5fb08557d9ea82a0a9710532cac54 (patch)
treeb70148ae34731ae917b1194c29f12b66ba0c8afe
parent2415720ea6760217355f286da83b9955c881bf1b (diff)
finish decompiling contest.s
-rw-r--r--asm/contest.s147
-rw-r--r--include/global.h4
-rw-r--r--src/contest.c53
-rw-r--r--src/scene/new_game.c4
-rw-r--r--src/script_pokemon_util_80C4BF0.c2
5 files changed, 55 insertions, 155 deletions
diff --git a/asm/contest.s b/asm/contest.s
index 7e6baa6e3..a71aefb42 100644
--- a/asm/contest.s
+++ b/asm/contest.s
@@ -5,151 +5,4 @@
.text
- thumb_func_start sub_80B2C4C
-sub_80B2C4C: @ 80B2C4C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- lsls r1, 24
- lsrs r1, 24
- cmp r0, 0x2
- beq _080B2C6E
- cmp r0, 0x2
- ble _080B2C66
- cmp r0, 0x3
- beq _080B2CA0
- b _080B2CD4
-_080B2C66:
- cmp r2, 0
- blt _080B2CD4
- adds r0, r2, 0
- b _080B2D16
-_080B2C6E:
- cmp r1, 0
- beq _080B2C98
- movs r2, 0x4
- ldr r0, _080B2C9C @ =gSaveBlock1 + 0x2DFC
- adds r4, r0, 0
- adds r4, 0x60
- adds r3, r0, 0
- adds r3, 0x80
-_080B2C7E:
- adds r1, r3, 0
- adds r0, r4, 0
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5,r6}
- stm r1!, {r5,r6}
- subs r4, 0x20
- subs r3, 0x20
- subs r2, 0x1
- cmp r2, 0x2
- bgt _080B2C7E
-_080B2C98:
- movs r0, 0x2
- b _080B2D16
- .align 2, 0
-_080B2C9C: .4byte gSaveBlock1 + 0x2DFC
-_080B2CA0:
- cmp r1, 0
- beq _080B2CCA
- movs r2, 0x7
- ldr r0, _080B2CD0 @ =gSaveBlock1 + 0x2DFC
- adds r4, r0, 0
- adds r4, 0xC0
- adds r3, r0, 0
- adds r3, 0xE0
-_080B2CB0:
- adds r1, r3, 0
- adds r0, r4, 0
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5,r7}
- stm r1!, {r5,r7}
- subs r4, 0x20
- subs r3, 0x20
- subs r2, 0x1
- cmp r2, 0x5
- bgt _080B2CB0
-_080B2CCA:
- movs r0, 0x5
- b _080B2D16
- .align 2, 0
-_080B2CD0: .4byte gSaveBlock1 + 0x2DFC
-_080B2CD4:
- ldr r0, _080B2CE8 @ =gScriptContestCategory
- ldrh r0, [r0]
- cmp r0, 0x4
- bhi _080B2D14
- lsls r0, 2
- ldr r1, _080B2CEC @ =_080B2CF0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080B2CE8: .4byte gScriptContestCategory
-_080B2CEC: .4byte _080B2CF0
- .align 2, 0
-_080B2CF0:
- .4byte _080B2D04
- .4byte _080B2D08
- .4byte _080B2D0C
- .4byte _080B2D10
- .4byte _080B2D14
-_080B2D04:
- movs r0, 0x8
- b _080B2D16
-_080B2D08:
- movs r0, 0x9
- b _080B2D16
-_080B2D0C:
- movs r0, 0xA
- b _080B2D16
-_080B2D10:
- movs r0, 0xB
- b _080B2D16
-_080B2D14:
- movs r0, 0xC
-_080B2D16:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80B2C4C
-
- thumb_func_start sub_80B2D1C
-sub_80B2D1C: @ 80B2D1C
- push {r4-r7,lr}
- ldr r0, _080B2D48 @ =gSaveBlock1
- ldr r4, _080B2D4C @ =gUnknown_083CC5D0
- ldr r1, _080B2D50 @ =0x00002dfc
- adds r3, r0, r1
- movs r2, 0x7
-_080B2D28:
- adds r1, r3, 0
- adds r0, r4, 0
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5-r7}
- stm r1!, {r5-r7}
- ldm r0!, {r5,r6}
- stm r1!, {r5,r6}
- adds r4, 0x20
- adds r3, 0x20
- subs r2, 0x1
- cmp r2, 0
- bge _080B2D28
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B2D48: .4byte gSaveBlock1
-_080B2D4C: .4byte gUnknown_083CC5D0
-_080B2D50: .4byte 0x00002dfc
- thumb_func_end sub_80B2D1C
-
.align 2, 0 @ Don't pad with nop.
diff --git a/include/global.h b/include/global.h
index d5b1bfa59..a8c185731 100644
--- a/include/global.h
+++ b/include/global.h
@@ -694,8 +694,8 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2D90*/ u8 filler_2D90[0x4];
/*0x2D94*/ union MauvilleMan mauvilleMan;
/*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
- /*0x2DFC*/ struct ContestWinner contestWinners[4]; // how long is this?
- /*0x2E7C*/ u8 filler_2E7C[0x2F9C-0x2E7C];
+ /*0x2DFC*/ struct ContestWinner contestWinners[8];
+ /*0x2EFC*/ struct ContestWinner museumPortraits[5];
/*0x2F9C*/ struct DayCare daycare;
/*0x30B8*/ struct LinkBattleRecord linkBattleRecords[5];
/*0x3108*/ u8 filler_3108[8];
diff --git a/src/contest.c b/src/contest.c
index cd7efee7a..a712edf8a 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -324,6 +324,7 @@ extern const u8 gUnknownText_UnknownFormatting3[];
extern const u8 gUnknown_083CC59C[];
extern const u8 gUnknown_083CC5A2[];
extern const u16 gUnknown_083CC5A4[];
+extern const struct ContestWinner gUnknown_083CC5D0[];
extern const u8 gUnknownText_MissedTurn[];
extern const u8 gUnknownText_LinkStandbyAndWinner[];
extern void (*const gContestEffectFuncs[])(void);
@@ -5535,7 +5536,6 @@ bool8 sub_80B2A7C(u8 a)
}
if (a == 0xFF && i != gContestPlayerMonIndex)
return FALSE;
- //_080B2AD0
switch (gScriptContestCategory)
{
case 0:
@@ -5554,7 +5554,6 @@ bool8 sub_80B2A7C(u8 a)
r7 += 12;
break;
}
- //_080B2B16
if (a != 0xFE)
{
u8 r4 = sub_80B2C4C(a, 1);
@@ -5569,7 +5568,6 @@ bool8 sub_80B2A7C(u8 a)
else
gSaveBlock1.contestWinners[r4].contestCategory = r7;
}
- //_080B2BC4
else
{
shared15DE0.personality = gContestMons[i].personality;
@@ -5584,3 +5582,52 @@ bool8 sub_80B2A7C(u8 a)
}
return TRUE;
}
+
+u8 sub_80B2C4C(u8 a, u8 b)
+{
+ s32 i;
+
+ switch (a)
+ {
+ case 0:
+ case 1:
+ return a;
+ case 2:
+ if (b != 0)
+ {
+ for (i = 4; i >= 3; i--)
+ memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
+ }
+ return 2;
+ case 3:
+ if (b != 0)
+ {
+ for (i = 7; i >= 6; i--)
+ memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner));
+ }
+ return 5;
+ default:
+ switch (gScriptContestCategory)
+ {
+ case 0:
+ return 8;
+ case 1:
+ return 9;
+ case 2:
+ return 10;
+ case 3:
+ return 11;
+ case 4:
+ default:
+ return 12;
+ }
+ }
+}
+
+void sub_80B2D1C(void)
+{
+ s32 i;
+
+ for (i = 0; i < 8; i++)
+ gSaveBlock1.contestWinners[i] = gUnknown_083CC5D0[i];
+}
diff --git a/src/scene/new_game.c b/src/scene/new_game.c
index 98ef0853d..1a3d40e0c 100644
--- a/src/scene/new_game.c
+++ b/src/scene/new_game.c
@@ -36,7 +36,7 @@ extern u16 gSaveFileStatus;
extern u8 gUnknown_0819FA81[];
-static const struct ContestWinner sEmptyContestWinner =
+static const struct ContestWinner sEmptyMuseumPortrait =
{
.nickname = {EOS},
.trainerName = {EOS},
@@ -86,7 +86,7 @@ void sub_8052DA8(void)
sub_80B2D1C();
for (i = 0; i < 5; i++)
- gSaveBlock1.contestWinners[8 + i] = sEmptyContestWinner;
+ gSaveBlock1.museumPortraits[i] = sEmptyMuseumPortrait;
}
void ZeroBattleTowerData(void)
diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c
index 1128e386d..c555a88bf 100644
--- a/src/script_pokemon_util_80C4BF0.c
+++ b/src/script_pokemon_util_80C4BF0.c
@@ -144,7 +144,7 @@ u8 sub_80C4D50(void)
int i;
for (i = 0; i < 5; i++)
- if (gSaveBlock1.contestWinners[i + 8].species != 0)
+ if (gSaveBlock1.museumPortraits[i].species != 0)
retVar++;
return retVar;