diff options
author | camthesaxman <cameronghall@cox.net> | 2017-01-21 12:41:32 -0600 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-01-21 12:41:32 -0600 |
commit | a1f2856816f0114983bfd55975eca1d9d3072f61 (patch) | |
tree | 8cd6cedf3fa9d0de3e952e1a491259ce992f1169 | |
parent | 9900ca5af2d9e3d081831fa6f1a2c8b6554ab970 (diff) |
decompile more of battle_party_menu
-rw-r--r-- | asm/battle_party_menu.s | 302 | ||||
-rw-r--r-- | src/battle_party_menu.c | 273 |
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); +} |