summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_party_menu.s341
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_party_menu.c169
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);
+}