diff options
-rw-r--r-- | asm/battle_party_menu.s | 341 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle_party_menu.c | 169 |
3 files changed, 170 insertions, 341 deletions
diff --git a/asm/battle_party_menu.s b/asm/battle_party_menu.s index 471c5ccc0..5855724c4 100644 --- a/asm/battle_party_menu.s +++ b/asm/battle_party_menu.s @@ -6,347 +6,6 @@ .text - thumb_func_start SetUpBattlePartyMenu -SetUpBattlePartyMenu: @ 8094E58 - push {r4,r5,lr} - ldr r1, _08094E78 @ =0x0201b000 - movs r2, 0x99 - lsls r2, 2 - adds r0, r1, r2 - movs r3, 0 - ldrsh r0, [r0, r3] - adds r4, r1, 0 - cmp r0, 0xA - bls _08094E6E - b _08095048 -_08094E6E: - lsls r0, 2 - ldr r1, _08094E7C @ =_08094E80 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08094E78: .4byte 0x0201b000 -_08094E7C: .4byte _08094E80 - .align 2, 0 -_08094E80: - .4byte _08094EAC - .4byte _08094F28 - .4byte _08094F3C - .4byte _08094F4A - .4byte _08094F6C - .4byte _08094F80 - .4byte _08094F94 - .4byte _08094FA8 - .4byte _08094FBC - .4byte _08094FD0 - .4byte _08095000 -_08094EAC: - bl IsLinkDoubleBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08094EDC - ldr r1, _08094ED4 @ =0x0201b000 - ldr r0, _08094ED8 @ =0x00000266 - adds r4, r1, r0 - ldrh r2, [r4] - movs r3, 0 - ldrsh r0, [r4, r3] - cmp r0, 0x6 - bne _08094EEC - movs r0, 0 - strh r0, [r4] - movs r3, 0x99 - lsls r3, 2 - adds r1, r3 - b _08094FEC - .align 2, 0 -_08094ED4: .4byte 0x0201b000 -_08094ED8: .4byte 0x00000266 -_08094EDC: - ldr r1, _08094F10 @ =0x0201b000 - ldr r0, _08094F14 @ =0x00000266 - adds r4, r1, r0 - ldrh r2, [r4] - movs r3, 0 - ldrsh r0, [r4, r3] - cmp r0, 0x5 - bgt _08094F1C -_08094EEC: - movs r3, 0x98 - lsls r3, 2 - adds r0, r1, r3 - ldrb r0, [r0] - lsls r1, r2, 24 - lsrs r1, 24 - movs r2, 0 - ldrsh r3, [r4, r2] - movs r2, 0x64 - muls r2, r3 - ldr r3, _08094F18 @ =gPlayerParty - adds r2, r3 - bl TryCreatePartyMenuMonIcon - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _08095048 - .align 2, 0 -_08094F10: .4byte 0x0201b000 -_08094F14: .4byte 0x00000266 -_08094F18: .4byte gPlayerParty -_08094F1C: - movs r0, 0 - strh r0, [r4] - movs r3, 0x99 - lsls r3, 2 - adds r1, r3 - b _08094FEC -_08094F28: - bl LoadHeldItemIconGraphics - ldr r1, _08094F38 @ =0x0201b000 - movs r0, 0x99 - lsls r0, 2 - adds r1, r0 - b _08094FEC - .align 2, 0 -_08094F38: .4byte 0x0201b000 -_08094F3C: - movs r1, 0x98 - lsls r1, 2 - adds r0, r4, r1 - ldrb r0, [r0] - bl CreateHeldItemIcons_806DC34 - b _08094FE6 -_08094F4A: - movs r3, 0x98 - lsls r3, 2 - adds r0, r4, r3 - ldrb r0, [r0] - ldr r1, _08094F68 @ =0x00000266 - adds r5, r4, r1 - ldrb r1, [r5] - bl sub_806BD58 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08094FE2 - b _08094FF8 - .align 2, 0 -_08094F68: .4byte 0x00000266 -_08094F6C: - bl PartyMenuPrintMonsLevelOrStatus - ldr r1, _08094F7C @ =0x0201b000 - movs r3, 0x99 - lsls r3, 2 - adds r1, r3 - b _08094FEC - .align 2, 0 -_08094F7C: .4byte 0x0201b000 -_08094F80: - bl PrintPartyMenuMonNicknames - ldr r1, _08094F90 @ =0x0201b000 - movs r0, 0x99 - lsls r0, 2 - adds r1, r0 - b _08094FEC - .align 2, 0 -_08094F90: .4byte 0x0201b000 -_08094F94: - bl PartyMenuTryPrintMonsHP - ldr r1, _08094FA4 @ =0x0201b000 - movs r2, 0x99 - lsls r2, 2 - adds r1, r2 - b _08094FEC - .align 2, 0 -_08094FA4: .4byte 0x0201b000 -_08094FA8: - bl nullsub_13 - ldr r1, _08094FB8 @ =0x0201b000 - movs r3, 0x99 - lsls r3, 2 - adds r1, r3 - b _08094FEC - .align 2, 0 -_08094FB8: .4byte 0x0201b000 -_08094FBC: - bl PartyMenuDrawHPBars - ldr r1, _08094FCC @ =0x0201b000 - movs r0, 0x99 - lsls r0, 2 - adds r1, r0 - b _08094FEC - .align 2, 0 -_08094FCC: .4byte 0x0201b000 -_08094FD0: - ldr r1, _08094FF4 @ =0x00000266 - adds r5, r4, r1 - ldrb r0, [r5] - bl sub_806B58C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08094FF8 -_08094FE2: - movs r0, 0 - strh r0, [r5] -_08094FE6: - movs r2, 0x99 - lsls r2, 2 - adds r1, r4, r2 -_08094FEC: - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _08095048 - .align 2, 0 -_08094FF4: .4byte 0x00000266 -_08094FF8: - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - b _08095048 -_08095000: - ldr r0, _08095024 @ =gUnknown_02038473 - ldrb r4, [r0] - cmp r4, 0x3 - bne _0809503C - ldr r0, _08095028 @ =gScriptItemId - ldrh r0, [r0] - bl GetItemEffectType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xA - bne _08095034 - ldr r0, _0809502C @ =0x0201b000 - ldr r3, _08095030 @ =0x00000259 - adds r0, r3 - movs r1, 0xFF - strb r1, [r0] - b _0809503C - .align 2, 0 -_08095024: .4byte gUnknown_02038473 -_08095028: .4byte gScriptItemId -_0809502C: .4byte 0x0201b000 -_08095030: .4byte 0x00000259 -_08095034: - ldr r0, _08095040 @ =0x0201b000 - ldr r1, _08095044 @ =0x00000259 - adds r0, r1 - strb r4, [r0] -_0809503C: - movs r0, 0x1 - b _0809504A - .align 2, 0 -_08095040: .4byte 0x0201b000 -_08095044: .4byte 0x00000259 -_08095048: - movs r0, 0 -_0809504A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end SetUpBattlePartyMenu - - thumb_func_start sub_8095050 -sub_8095050: @ 8095050 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x64 - muls r0, r1 - ldr r1, _0809508C @ =gPlayerParty - adds r0, r1 - movs r1, 0x2D - bl GetMonData - adds r5, r0, 0 - cmp r5, 0 - bne _080950C8 - ldr r0, _08095090 @ =gUnknown_02038473 - ldrb r4, [r0] - cmp r4, 0x1 - bne _0809509C - ldr r3, _08095094 @ =gTasks - ldr r2, _08095098 @ =0x0201b000 - movs r0, 0x98 - lsls r0, 2 - adds r2, r0 - ldrb r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - b _080950DE - .align 2, 0 -_0809508C: .4byte gPlayerParty -_08095090: .4byte gUnknown_02038473 -_08095094: .4byte gTasks -_08095098: .4byte 0x0201b000 -_0809509C: - ldr r3, _080950C0 @ =gTasks - ldr r2, _080950C4 @ =0x0201b000 - movs r0, 0x98 - lsls r0, 2 - adds r2, r0 - ldrb r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - strh r5, [r0, 0x10] - ldrb r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - strh r5, [r0, 0x12] - b _080950EC - .align 2, 0 -_080950C0: .4byte gTasks -_080950C4: .4byte 0x0201b000 -_080950C8: - ldr r3, _08095108 @ =gTasks - ldr r2, _0809510C @ =0x0201b000 - movs r0, 0x98 - lsls r0, 2 - adds r2, r0 - ldrb r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - movs r4, 0x2 -_080950DE: - strh r4, [r0, 0x10] - ldrb r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - strh r4, [r0, 0x12] -_080950EC: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r3 - ldrb r0, [r0, 0x10] - ldr r1, _08095110 @ =gUnknown_083B5FF4 - ldr r2, _08095114 @ =gUnknown_083B5FCC - movs r3, 0 - bl sub_806E750 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08095108: .4byte gTasks -_0809510C: .4byte 0x0201b000 -_08095110: .4byte gUnknown_083B5FF4 -_08095114: .4byte gUnknown_083B5FCC - thumb_func_end sub_8095050 - thumb_func_start SetUpBattlePokemonMenu SetUpBattlePokemonMenu: @ 8095118 push {r4,r5,lr} diff --git a/ld_script.txt b/ld_script.txt index 6074ad1ae..d25991f0d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -132,6 +132,7 @@ SECTIONS { src/save_menu_util.o(.text); src/rom_8094928.o(.text); asm/rom_8094928.o(.text); + src/battle_party_menu.o(.text); asm/battle_party_menu.o(.text); asm/pokemon_storage_system.o(.text); asm/pokemon_icon.o(.text); diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c new file mode 100644 index 000000000..33a44c345 --- /dev/null +++ b/src/battle_party_menu.c @@ -0,0 +1,169 @@ +#include "global.h" +#include "pokemon.h" +#include "task.h" + +struct PartyMenuItem +{ + const u8 *text; + void (*func)(void); +}; + +struct UnknownStruct2 +{ + u8 unk0; + u8 unk1; + const u8 *unk4; +}; + +extern u8 IsLinkDoubleBattle(void); +extern void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *); +extern void LoadHeldItemIconGraphics(void); +extern void CreateHeldItemIcons_806DC34(); +extern u8 sub_806BD58(u8, u8); +extern void PartyMenuPrintMonsLevelOrStatus(void); +extern void PrintPartyMenuMonNicknames(void); +extern void PartyMenuTryPrintMonsHP(void); +extern void nullsub_13(void); +extern void PartyMenuDrawHPBars(void); +extern u8 sub_806B58C(u8); +extern u8 GetItemEffectType(); +extern void sub_806E750(u8, const struct UnknownStruct2 *, const struct PartyMenuItem *, int); + +struct UnknownStruct1 +{ + u8 filler0[0x259]; + u8 unk259; + u8 filler25A[6]; + u8 unk260; + u8 filler261[3]; + s16 unk264; + s16 unk266; +}; + +extern u8 unk_2000000[]; + +#define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000)) + +extern u16 gScriptItemId; +extern u8 gUnknown_02038473; +extern const struct PartyMenuItem gUnknown_083B5FCC[]; +extern const struct UnknownStruct2 gUnknown_083B5FF4[]; + +int SetUpBattlePartyMenu(void) +{ + switch (EWRAM_1B000.unk264) + { + case 0: + //TODO: try to get rid of this duplicate code + if (IsLinkDoubleBattle() == TRUE) + { + 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++; + } + } + 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 + { + 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.unk259 = 3; + } + return TRUE; + } + return FALSE; +} + +void sub_8095050(u8 a, u8 b) +{ + if (!GetMonData(&gPlayerParty[b], MON_DATA_IS_EGG)) + { + if (gUnknown_02038473 == 1) + { + gTasks[EWRAM_1B000.unk260].data[4] = 1; + gTasks[EWRAM_1B000.unk260].data[5] = 1; + } + else + { + gTasks[EWRAM_1B000.unk260].data[4] = 0; + gTasks[EWRAM_1B000.unk260].data[5] = 0; + } + } + else + { + gTasks[EWRAM_1B000.unk260].data[4] = 2; + gTasks[EWRAM_1B000.unk260].data[5] = 2; + } + sub_806E750(gTasks[a].data[4], gUnknown_083B5FF4, gUnknown_083B5FCC, 0); +} |