summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-01-21 12:41:32 -0600
committercamthesaxman <cameronghall@cox.net>2017-01-21 12:41:32 -0600
commita1f2856816f0114983bfd55975eca1d9d3072f61 (patch)
tree8cd6cedf3fa9d0de3e952e1a491259ce992f1169
parent9900ca5af2d9e3d081831fa6f1a2c8b6554ab970 (diff)
decompile more of battle_party_menu
-rw-r--r--asm/battle_party_menu.s302
-rw-r--r--src/battle_party_menu.c273
2 files changed, 199 insertions, 376 deletions
diff --git a/asm/battle_party_menu.s b/asm/battle_party_menu.s
index 5855724c4..4599c51ac 100644
--- a/asm/battle_party_menu.s
+++ b/asm/battle_party_menu.s
@@ -6,308 +6,6 @@
.text
- thumb_func_start SetUpBattlePokemonMenu
-SetUpBattlePokemonMenu: @ 8095118
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08095150 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809512C
- b _08095268
-_0809512C:
- ldr r0, _08095154 @ =gUnknown_02038473
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _08095164
- ldr r5, _08095158 @ =gScriptItemId
- ldrh r0, [r5]
- bl GetItemEffectType
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xA
- bne _08095164
- ldr r0, _0809515C @ =gUnknown_03004AE4
- ldrh r1, [r5]
- ldr r2, _08095160 @ =sub_80952E4
- ldr r3, [r0]
- b _080951AA
- .align 2, 0
-_08095150: .4byte gPaletteFade
-_08095154: .4byte gUnknown_02038473
-_08095158: .4byte gScriptItemId
-_0809515C: .4byte gUnknown_03004AE4
-_08095160: .4byte sub_80952E4
-_08095164:
- adds r0, r4, 0
- bl sub_806BD80
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _08095178
- cmp r0, 0x2
- beq _08095214
- b _08095268
-_08095178:
- ldr r0, _080951B4 @ =gUnknown_02038473
- ldrb r0, [r0]
- cmp r0, 0x3
- bne _080951C8
- adds r0, r4, 0
- bl sub_806CA38
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _080951B8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0809521C
- bl sub_806D5A4
- ldr r3, _080951BC @ =gUnknown_03004AE4
- ldr r0, _080951C0 @ =gScriptItemId
- ldrh r1, [r0]
- ldr r2, _080951C4 @ =sub_80952E4
- ldr r3, [r3]
-_080951AA:
- adds r0, r4, 0
- bl _call_via_r3
- b _08095268
- .align 2, 0
-_080951B4: .4byte gUnknown_02038473
-_080951B8: .4byte gPlayerParty
-_080951BC: .4byte gUnknown_03004AE4
-_080951C0: .4byte gScriptItemId
-_080951C4: .4byte sub_80952E4
-_080951C8:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_806CA38
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _08095204 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08095208 @ =gStringVar1
- bl GetMonNickname
- adds r0, r4, 0
- bl sub_806CA38
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8095050
- ldr r1, _0809520C @ =sub_8095408
- ldr r2, _08095210 @ =SetUpBattlePokemonMenu
- adds r0, r4, 0
- bl SetTaskFuncWithFollowupFunc
- b _08095268
- .align 2, 0
-_08095204: .4byte gPlayerParty
-_08095208: .4byte gStringVar1
-_0809520C: .4byte sub_8095408
-_08095210: .4byte SetUpBattlePokemonMenu
-_08095214:
- ldr r5, _08095224 @ =gUnknown_02038473
- ldrb r0, [r5]
- cmp r0, 0x1
- bne _08095228
-_0809521C:
- movs r0, 0x20
- bl PlaySE
- b _08095268
- .align 2, 0
-_08095224: .4byte gUnknown_02038473
-_08095228:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r5]
- cmp r0, 0x3
- bne _08095254
- ldr r1, _08095248 @ =gUnknown_0202E8F4
- movs r0, 0
- strb r0, [r1]
- ldr r1, _0809524C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08095250 @ =sub_80952E4
- b _08095266
- .align 2, 0
-_08095248: .4byte gUnknown_0202E8F4
-_0809524C: .4byte gTasks
-_08095250: .4byte sub_80952E4
-_08095254:
- ldr r1, _08095270 @ =gUnknown_0202E8F4
- movs r0, 0
- strb r0, [r1]
- ldr r1, _08095274 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08095278 @ =sub_809527C
-_08095266:
- str r1, [r0]
-_08095268:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08095270: .4byte gUnknown_0202E8F4
-_08095274: .4byte gTasks
-_08095278: .4byte sub_809527C
- thumb_func_end SetUpBattlePokemonMenu
-
- thumb_func_start sub_809527C
-sub_809527C: @ 809527C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _080952AC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080952B0 @ =sub_80952B4
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080952AC: .4byte gTasks
-_080952B0: .4byte sub_80952B4
- thumb_func_end sub_809527C
-
- thumb_func_start sub_80952B4
-sub_80952B4: @ 80952B4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080952DC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080952D6
- bl sub_8094D60
- adds r0, r4, 0
- bl DestroyTask
- ldr r0, _080952E0 @ =sub_802E414
- bl SetMainCallback2
-_080952D6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080952DC: .4byte gPaletteFade
-_080952E0: .4byte sub_802E414
- thumb_func_end sub_80952B4
-
- thumb_func_start sub_80952E4
-sub_80952E4: @ 80952E4
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080952FC @ =gUnknown_0202E8F4
- ldrb r1, [r0]
- cmp r1, 0
- beq _08095300
- adds r0, r4, 0
- bl sub_809527C
- b _0809531E
- .align 2, 0
-_080952FC: .4byte gUnknown_0202E8F4
-_08095300:
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08095328 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0809532C @ =sub_8095330
- str r1, [r0]
-_0809531E:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08095328: .4byte gTasks
-_0809532C: .4byte sub_8095330
- thumb_func_end sub_80952E4
-
- thumb_func_start sub_8095330
-sub_8095330: @ 8095330
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08095358 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08095350
- bl sub_8094D60
- adds r0, r4, 0
- bl DestroyTask
- bl sub_80A6DCC
-_08095350:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08095358: .4byte gPaletteFade
- thumb_func_end sub_8095330
-
- thumb_func_start sub_809535C
-sub_809535C: @ 809535C
- push {lr}
- ldr r2, _08095380 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldr r2, _08095384 @ =SetUpBattlePokemonMenu
- movs r0, 0x1
- movs r1, 0xFF
- movs r3, 0x5
- bl sub_806AF4C
- ldr r0, _08095388 @ =sub_809538C
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08095380: .4byte gPaletteFade
-_08095384: .4byte SetUpBattlePokemonMenu
-_08095388: .4byte sub_809538C
- thumb_func_end sub_809535C
-
thumb_func_start sub_809538C
sub_809538C: @ 809538C
push {r4,r5,lr}
diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c
index 33a44c345..d8b5b48f3 100644
--- a/src/battle_party_menu.c
+++ b/src/battle_party_menu.c
@@ -1,6 +1,12 @@
#include "global.h"
+#include "asm.h"
+#include "main.h"
+#include "palette.h"
#include "pokemon.h"
+#include "songs.h"
+#include "sound.h"
#include "task.h"
+#include "text.h"
struct PartyMenuItem
{
@@ -28,6 +34,13 @@ extern void PartyMenuDrawHPBars(void);
extern u8 sub_806B58C(u8);
extern u8 GetItemEffectType();
extern void sub_806E750(u8, const struct UnknownStruct2 *, const struct PartyMenuItem *, int);
+extern u16 sub_806BD80();
+extern u8 sub_806CA38();
+extern void sub_806D5A4(void);
+extern void sub_802E414(void);
+extern void sub_8094D60(void);
+extern void sub_80A6DCC(void);
+extern void sub_806AF4C();
struct UnknownStruct1
{
@@ -45,102 +58,111 @@ extern u8 unk_2000000[];
#define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000))
extern u16 gScriptItemId;
+extern u8 gUnknown_0202E8F4;
extern u8 gUnknown_02038473;
+extern void (*gUnknown_03004AE4)(); //don't know types yet
extern const struct PartyMenuItem gUnknown_083B5FCC[];
extern const struct UnknownStruct2 gUnknown_083B5FF4[];
+void sub_80952E4(u8);
+void sub_8095408(u8);
+void sub_809527C(u8);
+void sub_80952B4(u8);
+void sub_8095330(u8);
+void sub_809538C(void);
+
int SetUpBattlePartyMenu(void)
{
switch (EWRAM_1B000.unk264)
{
- case 0:
- //TODO: try to get rid of this duplicate code
- if (IsLinkDoubleBattle() == TRUE)
+ case 0:
+ //TODO: try to get rid of this duplicate code
+ if (IsLinkDoubleBattle() == TRUE)
+ {
+ if (EWRAM_1B000.unk266 != 6)
{
- if (EWRAM_1B000.unk266 != 6)
- {
- TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]);
- EWRAM_1B000.unk266++;
- }
- else
- {
- EWRAM_1B000.unk266 = 0;
- EWRAM_1B000.unk264++;
- }
+ TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]);
+ EWRAM_1B000.unk266++;
}
else
{
- if (EWRAM_1B000.unk266 <= 5)
- {
- TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]);
- EWRAM_1B000.unk266++;
- }
- else
- {
- EWRAM_1B000.unk266 = 0;
- EWRAM_1B000.unk264++;
- }
- }
- break;
- case 1:
- LoadHeldItemIconGraphics();
- EWRAM_1B000.unk264++;
- break;
- case 2:
- CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260);
- EWRAM_1B000.unk264++;
- break;
- case 3:
- if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) == 1)
- {
EWRAM_1B000.unk266 = 0;
EWRAM_1B000.unk264++;
}
- else
+ }
+ else
+ {
+ if (EWRAM_1B000.unk266 <= 5)
{
+ TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]);
EWRAM_1B000.unk266++;
}
- break;
- case 4:
- PartyMenuPrintMonsLevelOrStatus();
- EWRAM_1B000.unk264++;
- break;
- case 5:
- PrintPartyMenuMonNicknames();
- EWRAM_1B000.unk264++;
- break;
- case 6:
- PartyMenuTryPrintMonsHP();
- EWRAM_1B000.unk264++;
- break;
- case 7:
- nullsub_13();
- EWRAM_1B000.unk264++;
- break;
- case 8:
- PartyMenuDrawHPBars();
- EWRAM_1B000.unk264++;
- break;
- case 9:
- if (sub_806B58C(EWRAM_1B000.unk266) == 1)
+ else
{
EWRAM_1B000.unk266 = 0;
EWRAM_1B000.unk264++;
- }
+ }
+ }
+ break;
+ case 1:
+ LoadHeldItemIconGraphics();
+ EWRAM_1B000.unk264++;
+ break;
+ case 2:
+ CreateHeldItemIcons_806DC34(EWRAM_1B000.unk260);
+ EWRAM_1B000.unk264++;
+ break;
+ case 3:
+ if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) == 1)
+ {
+ EWRAM_1B000.unk266 = 0;
+ EWRAM_1B000.unk264++;
+ }
+ else
+ {
+ EWRAM_1B000.unk266++;
+ }
+ break;
+ case 4:
+ PartyMenuPrintMonsLevelOrStatus();
+ EWRAM_1B000.unk264++;
+ break;
+ case 5:
+ PrintPartyMenuMonNicknames();
+ EWRAM_1B000.unk264++;
+ break;
+ case 6:
+ PartyMenuTryPrintMonsHP();
+ EWRAM_1B000.unk264++;
+ break;
+ case 7:
+ nullsub_13();
+ EWRAM_1B000.unk264++;
+ break;
+ case 8:
+ PartyMenuDrawHPBars();
+ EWRAM_1B000.unk264++;
+ break;
+ case 9:
+ if (sub_806B58C(EWRAM_1B000.unk266) == 1)
+ {
+ EWRAM_1B000.unk266 = 0;
+ EWRAM_1B000.unk264++;
+ }
+ else
+ {
+ EWRAM_1B000.unk266++;
+ }
+ break;
+ case 10:
+ if (gUnknown_02038473 == 3)
+ {
+ if (GetItemEffectType(gScriptItemId) == 10)
+ EWRAM_1B000.unk259 = 0xFF;
else
- {
- EWRAM_1B000.unk266++;
- }
- break;
- case 10:
- if (gUnknown_02038473 == 3)
- {
- if (GetItemEffectType(gScriptItemId) == 10)
- EWRAM_1B000.unk259 = 0xFF;
- else
- EWRAM_1B000.unk259 = 3;
- }
- return TRUE;
+ EWRAM_1B000.unk259 = 3;
+ }
+ return TRUE;
}
return FALSE;
}
@@ -167,3 +189,106 @@ void sub_8095050(u8 a, u8 b)
}
sub_806E750(gTasks[a].data[4], gUnknown_083B5FF4, gUnknown_083B5FCC, 0);
}
+
+void SetUpBattlePokemonMenu(u8 a)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_02038473 == 3 && GetItemEffectType(gScriptItemId) == 10)
+ {
+ gUnknown_03004AE4(a, gScriptItemId, sub_80952E4);
+ return;
+ }
+
+ switch (sub_806BD80(a))
+ {
+ case 1:
+ if (gUnknown_02038473 == 3)
+ {
+ if (GetMonData(&gPlayerParty[sub_806CA38(a)], MON_DATA_IS_EGG))
+ {
+ PlaySE(SE_HAZURE);
+ }
+ else
+ {
+ sub_806D5A4();
+ gUnknown_03004AE4(a, gScriptItemId, sub_80952E4);
+ }
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ GetMonNickname(&gPlayerParty[sub_806CA38(a)], gStringVar1);
+ sub_8095050(a, sub_806CA38(a));
+ SetTaskFuncWithFollowupFunc(a, sub_8095408, SetUpBattlePokemonMenu);
+ }
+ break;
+ case 2:
+ if (gUnknown_02038473 == 1)
+ {
+ PlaySE(SE_HAZURE);
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ if (gUnknown_02038473 == 3)
+ {
+ gUnknown_0202E8F4 = 0;
+ gTasks[a].func = sub_80952E4;
+ }
+ else
+ {
+ gUnknown_0202E8F4 = 0;
+ gTasks[a].func = sub_809527C;
+ }
+ }
+ break;
+ }
+ }
+}
+
+void sub_809527C(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_80952B4;
+}
+
+void sub_80952B4(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ sub_8094D60();
+ DestroyTask(taskId);
+ SetMainCallback2(sub_802E414);
+ }
+}
+
+void sub_80952E4(u8 taskId)
+{
+ if (gUnknown_0202E8F4 != 0)
+ {
+ sub_809527C(taskId);
+ }
+ else
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_8095330;
+ }
+}
+
+void sub_8095330(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ sub_8094D60();
+ DestroyTask(taskId);
+ sub_80A6DCC();
+ }
+}
+
+void sub_809535C(u8 taskId)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ sub_806AF4C(1, 0xFF, SetUpBattlePokemonMenu, 5);
+ SetMainCallback2(sub_809538C);
+}