summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/party_menu.s515
-rw-r--r--src/party_menu.c457
2 files changed, 244 insertions, 728 deletions
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 534d4aaa4..bf00aa168 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -10308,521 +10308,6 @@ _08070084: .4byte 0xfffff280
.section .text_80701DC
- thumb_func_start sub_80701DC
-sub_80701DC: @ 80701DC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _08070280 @ =0x0201b000
- ldr r0, _08070284 @ =0x0000027e
- adds r7, r6, r0
- movs r1, 0
- ldrsh r0, [r7, r1]
- cmp r0, 0x1
- bne _0807023E
- movs r0, 0x80
- lsls r0, 5
- adds r4, r6, r0
- ldrh r0, [r4, 0x6]
- movs r1, 0x1
- bl AddBagItem
- ldrb r1, [r4, 0x5]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08070288 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0807023A
- bl IsDoubleBattle
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldrb r1, [r4, 0x5]
- lsls r1, 1
- adds r0, r1
- ldr r1, _0807028C @ =gUnknown_083769A8
- adds r0, r1
- movs r1, 0x3
- bl task_pc_turn_off
- ldr r0, _08070290 @ =0x00000261
- adds r1, r6, r0
- movs r0, 0x2
- strb r0, [r1]
-_0807023A:
- movs r0, 0
- strh r0, [r7]
-_0807023E:
- ldr r4, _08070294 @ =0x0201c000
- ldrb r0, [r4, 0x5]
- adds r0, 0x1
- strb r0, [r4, 0x5]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- bne _080702D8
- ldr r1, _08070298 @ =gUnknown_0202E8F4
- movs r0, 0
- strb r0, [r1]
- ldr r1, _0807029C @ =0xfffff280
- adds r0, r4, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _080702B0
- ldr r1, _080702A0 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _080702A4 @ =TaskDummy
- str r1, [r0]
- ldr r0, _080702A8 @ =gOtherText_WontHaveAnyEffect
- movs r1, 0x1
- bl sub_806E834
- ldr r0, _080702AC @ =sub_806FB0C
- movs r1, 0x8
- bl CreateTask
- b _080702C6
- .align 2, 0
-_08070280: .4byte 0x0201b000
-_08070284: .4byte 0x0000027e
-_08070288: .4byte gPlayerParty
-_0807028C: .4byte gUnknown_083769A8
-_08070290: .4byte 0x00000261
-_08070294: .4byte 0x0201c000
-_08070298: .4byte gUnknown_0202E8F4
-_0807029C: .4byte 0xfffff280
-_080702A0: .4byte gTasks
-_080702A4: .4byte TaskDummy
-_080702A8: .4byte gOtherText_WontHaveAnyEffect
-_080702AC: .4byte sub_806FB0C
-_080702B0:
- ldrh r0, [r4, 0x6]
- movs r1, 0x1
- bl RemoveBagItem
- ldr r1, _080702D0 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, [r4, 0x10]
- str r1, [r0]
-_080702C6:
- ldr r1, _080702D4 @ =gLastFieldPokeMenuOpened
- movs r0, 0
- strb r0, [r1]
- b _080702DE
- .align 2, 0
-_080702D0: .4byte gTasks
-_080702D4: .4byte gLastFieldPokeMenuOpened
-_080702D8:
- adds r0, r5, 0
- bl sub_8070088
-_080702DE:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80701DC
-
- thumb_func_start CreateItemUseMoveMenu
-CreateItemUseMoveMenu: @ 80702E4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r6, 0
- movs r0, 0x13
- movs r1, 0xA
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuDrawTextWindow
- movs r5, 0
- movs r0, 0x64
- adds r7, r4, 0
- muls r7, r0
- ldr r0, _0807036C @ =gPlayerParty
- mov r8, r0
-_0807030C:
- adds r1, r5, 0
- adds r1, 0xD
- mov r2, r8
- adds r0, r7, r2
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0xD
- muls r0, r4
- ldr r1, _08070370 @ =gMoveNames
- adds r0, r1
- lsls r2, r5, 25
- movs r1, 0xB0
- lsls r1, 20
- adds r2, r1
- lsrs r2, 24
- movs r1, 0x14
- bl MenuPrint
- cmp r4, 0
- beq _08070340
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_08070340:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _0807030C
- movs r0, 0
- str r0, [sp]
- movs r0, 0x9
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x14
- movs r2, 0xB
- adds r3, r6, 0
- bl InitMenu
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807036C: .4byte gPlayerParty
-_08070370: .4byte gMoveNames
- thumb_func_end CreateItemUseMoveMenu
-
- thumb_func_start Task_HandleItemUseMoveMenuInput
-Task_HandleItemUseMoveMenuInput: @ 8070374
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r4, r2, 0
- ldr r0, _08070398 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0807039C
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- b _080703E4
- .align 2, 0
-_08070398: .4byte gMain
-_0807039C:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080703B2
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl MoveMenuCursor
- b _080703E4
-_080703B2:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080703CC
- ldr r0, _080703C8 @ =gUnknown_08376B54
- ldr r1, [r0]
- adds r0, r2, 0
- bl _call_via_r1
- b _080703E4
- .align 2, 0
-_080703C8: .4byte gUnknown_08376B54
-_080703CC:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080703E4
- movs r0, 0x5
- bl PlaySE
- ldr r0, _080703EC @ =gUnknown_08376B54
- ldr r1, [r0, 0x4]
- adds r0, r4, 0
- bl _call_via_r1
-_080703E4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080703EC: .4byte gUnknown_08376B54
- thumb_func_end Task_HandleItemUseMoveMenuInput
-
- thumb_func_start DoPPRecoveryItemEffect
-DoPPRecoveryItemEffect: @ 80703F0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r2
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- cmp r5, 0xAF
- bne _08070410
- ldr r0, _0807040C @ =gSaveBlock1 + 0x3676
- b _0807041C
- .align 2, 0
-_0807040C: .4byte gSaveBlock1 + 0x3676
-_08070410:
- ldr r1, _08070464 @ =gItemEffectTable
- adds r0, r5, 0
- subs r0, 0xD
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
-_0807041C:
- mov r8, r0
- ldr r7, _08070468 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r7
- ldr r0, _0807046C @ =TaskDummy
- str r0, [r1]
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r6, 0
- adds r1, r5, 0
- mov r2, r9
- bl sub_806E8D0
- mov r0, r8
- ldrb r1, [r0, 0x4]
- movs r0, 0x10
- ands r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08070470
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r7
- strh r1, [r0, 0x1E]
- adds r0, r4, 0
- bl DoRecoverPP
- b _08070498
- .align 2, 0
-_08070464: .4byte gItemEffectTable
-_08070468: .4byte gTasks
-_0807046C: .4byte TaskDummy
-_08070470:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0xA
- movs r1, 0x3
- bl sub_806D538
- ldr r0, _080704A4 @ =0x0201c000
- ldrb r0, [r0, 0x5]
- bl CreateItemUseMoveMenu
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r7
- ldr r1, _080704A8 @ =Task_HandleItemUseMoveMenuInput
- str r1, [r0]
- ldr r1, _080704AC @ =gMain
- movs r0, 0
- strh r0, [r1, 0x2E]
-_08070498:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080704A4: .4byte 0x0201c000
-_080704A8: .4byte Task_HandleItemUseMoveMenuInput
-_080704AC: .4byte gMain
- thumb_func_end DoPPRecoveryItemEffect
-
- thumb_func_start ItemUseMoveMenu_HandleMoveSelection
-ItemUseMoveMenu_HandleMoveSelection: @ 80704B0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8072DEC
- movs r0, 0x13
- movs r1, 0xA
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- bl sub_806D5A4
- bl GetMenuCursorPos
- ldr r2, _080704EC @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x1E]
- adds r0, r4, 0
- bl DoRecoverPP
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080704EC: .4byte gTasks
- thumb_func_end ItemUseMoveMenu_HandleMoveSelection
-
- thumb_func_start ItemUseMoveMenu_HandleCancel
-ItemUseMoveMenu_HandleCancel: @ 80704F0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8072DEC
- movs r0, 0x13
- movs r1, 0xA
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldr r0, _08070528 @ =gMain
- ldr r1, _0807052C @ =0x0000043d
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0807053C
- ldr r2, _08070530 @ =gTasks
- ldr r0, _08070534 @ =0x0201c000
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, _08070538 @ =SetUpBattlePokemonMenu
- b _0807054C
- .align 2, 0
-_08070528: .4byte gMain
-_0807052C: .4byte 0x0000043d
-_08070530: .4byte gTasks
-_08070534: .4byte 0x0201c000
-_08070538: .4byte SetUpBattlePokemonMenu
-_0807053C:
- ldr r2, _08070564 @ =gTasks
- ldr r0, _08070568 @ =0x0201c000
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, _0807056C @ =sub_808B0C0
-_0807054C:
- str r1, [r0]
- movs r0, 0x3
- movs r1, 0
- bl sub_806D538
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08070564: .4byte gTasks
-_08070568: .4byte 0x0201c000
-_0807056C: .4byte sub_808B0C0
- thumb_func_end ItemUseMoveMenu_HandleCancel
-
- thumb_func_start DoRecoverPP
-DoRecoverPP: @ 8070570
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r5, 0
- ldr r6, _080705A8 @ =0x0201c000
- ldrb r0, [r6, 0x5]
- ldrh r1, [r6, 0x6]
- ldr r3, _080705AC @ =gTasks
- lsls r2, r4, 2
- adds r2, r4
- lsls r2, 3
- adds r7, r2, r3
- ldrb r2, [r7, 0x1E]
- bl ExecuteTableBasedItemEffect__
- lsls r0, 24
- cmp r0, 0
- beq _080705B8
- ldr r0, _080705B0 @ =gUnknown_0202E8F4
- strb r5, [r0]
- movs r0, 0x5
- bl PlaySE
- ldr r0, _080705B4 @ =gOtherText_WontHaveAnyEffect
- movs r1, 0x1
- bl sub_806E834
- b _080705F8
- .align 2, 0
-_080705A8: .4byte 0x0201c000
-_080705AC: .4byte gTasks
-_080705B0: .4byte gUnknown_0202E8F4
-_080705B4: .4byte gOtherText_WontHaveAnyEffect
-_080705B8:
- ldr r1, _0807060C @ =gUnknown_0202E8F4
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0x1
- bl PlaySE
- ldrh r0, [r6, 0x6]
- movs r1, 0x1
- bl RemoveBagItem
- ldr r0, [r6]
- movs r2, 0x1E
- ldrsh r1, [r7, r2]
- adds r1, 0xD
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _08070610 @ =gStringVar1
- movs r1, 0xD
- muls r1, r5
- ldr r2, _08070614 @ =gMoveNames
- adds r1, r2
- bl StringCopy
- ldrh r0, [r6, 0x6]
- bl GetMedicineItemEffectMessage
- ldr r0, _08070618 @ =gStringVar4
- movs r1, 0x1
- bl sub_806E834
-_080705F8:
- ldr r0, _0807061C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08070620 @ =sub_806FB0C
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807060C: .4byte gUnknown_0202E8F4
-_08070610: .4byte gStringVar1
-_08070614: .4byte gMoveNames
-_08070618: .4byte gStringVar4
-_0807061C: .4byte gTasks
-_08070620: .4byte sub_806FB0C
- thumb_func_end DoRecoverPP
-
thumb_func_start DoPPUpItemEffect
DoPPUpItemEffect: @ 8070624
push {r4,lr}
diff --git a/src/party_menu.c b/src/party_menu.c
index d473eae6d..b38e89376 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -5,46 +5,99 @@
#include "sound.h"
#include "string_util.h"
#include "task.h"
+#include "sprite.h"
+#include "palette.h"
+#include "event_data.h"
+#include "main.h"
#define DATA_COUNT (6)
struct Unk201C000
{
/*0x00*/ struct Pokemon *pokemon;
- /*0x04*/ u8 var04;
- /*0x05*/ u8 var05;
- /*0x06*/ u16 var06;
- u8 pad_08[10];
- /*0x12*/ u16 var12;
+ /*0x04*/ u8 unk4;
+ /*0x05*/ u8 unk5;
+ /*0x06*/ u16 unk6;
+ /*0x08*/ u8 pad_08[4];
+ /*0x0C*/ s32 var0C;
+ /*0x10*/ TaskFunc unk10;
};
-struct Unk201B260
+struct Unk201B000
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
- u8 pad_02[2];
- /*0x04*/ s16 var04[DATA_COUNT * 2];
- u8 pad_1C[2];
- /*0x1E*/ u16 var1E;
- /*0x20*/ u16 var20;
+ u8 filler0[0x260];
+ u8 unk260;
+ u8 unk261;
+ u8 filler262[2];
+ s16 unk264[DATA_COUNT * 2];
+ u8 filler27C[2];
+ s16 unk27E;
+ s16 unk280;
+ u16 unk282;
};
-extern struct Unk201B260 unk_201B260;
-extern struct Unk201C000 unk_201C000;
+struct UnknownStruct5
+{
+ u8 unk0;
+ u8 unk1;
+ u16 *unk4;
+};
+
+extern u8 ewram[];
+#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000))
+#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000))
+
extern u8 gUnknown_0202E8F4;
extern u8 gUnknown_0202E8F6;
+extern u8 gUnknown_0202E8FA;
+extern u8 gLastFieldPokeMenuOpened;
-extern u8 gUnknown_083769A8[][12];
+//extern const u16 gUnknown_083769A8[][6];
+//extern const u8 gUnknown_083769A8[][12];
+extern const u8 gUnknown_083769A8[];
extern u8 gUnknown_08376D1C[DATA_COUNT];
extern u8 *gUnknown_08376D04[DATA_COUNT];
+extern void (*const gUnknown_08376B54[])(u8);
+extern const struct UnknownStruct5 gUnknown_08376BB4[][6];
extern u8 gOtherText_TallPlusAndRightArrow[];
+extern u8 gOtherText_WontHaveAnyEffect[];
+extern const u8 gMoveNames[][13];
+extern u8 *const gItemEffectTable[];
+
+extern bool8 IsDoubleBattle(void);
+extern void AddBagItem();
+extern void RemoveBagItem();
+extern void SetUpBattlePokemonMenu(u8);
+extern void sub_808B0C0(u8);
-void task_pc_turn_off(u8 *u8, int i);
+void task_pc_turn_off();
static void sub_806E884(u8 taskId);
void sub_806F8AC(u8 taskId);
+void sub_806FB0C(u8 taskId);
void PartyMenuUpdateLevelOrStatus(struct Pokemon *, u8);
-u8 ExecuteTableBasedItemEffect__(u8 u8, u16 u16, int i);
+u8 ExecuteTableBasedItemEffect__(u8, u16, u8);
void sub_80701DC(u8 taskId);
+void DoRecoverPP(u8);
+void sub_806D538();
+void sub_806D5A4(void);
+void sub_806E8D0();
+void GetMedicineItemEffectMessage();
+
+/*
+void sub_806AEDC(void)
+{
+ const struct UnknownStruct5 *r5;
+ s32 i;
+
+ AnimateSprites();
+ BuildOamBuffer();
+ r5 = gUnknown_08376BB4[gUnknown_0202E8FA];
+ for (i = 0; i < 6; i++)
+ sub_800142C(r5[i].unk0 * 8, r5[i].unk1 * 8, r5[i].unk4, 0, (i << 5) | 0x200);
+ RunTasks();
+ UpdatePaletteFade();
+}
+*/
u8 sub_806E834(u8 *message, u8 arg1)
{
@@ -80,208 +133,194 @@ static void sub_806E884(u8 taskId)
asm(".section .text_b");
-#ifdef NONMATCHING
void sub_8070088(u8 taskId)
{
- u8 dummyTaskId;
- struct Task *task2;
+ u8 taskId2;
gTasks[taskId].func = TaskDummy;
-
- if (GetMonData(&gPlayerParty[unk_201C000.var04], MON_DATA_SPECIES) == 0)
+ if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) == 0)
{
gTasks[taskId].func = sub_80701DC;
- return;
}
+ else
+ {
+ s16 *taskData;
+
+ taskId2 = CreateTask(TaskDummy, 5);
+ taskData = gTasks[taskId2].data;
+ ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5];
+ taskData[10] = GetMonData(ewram1C000.pokemon, MON_DATA_MAX_HP);
+ taskData[11] = GetMonData(ewram1C000.pokemon, MON_DATA_HP);
+ if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, 0))
+ {
+ DestroyTask(taskId2);
+ gTasks[taskId].func = sub_80701DC;
+ }
+ else
+ {
+ gUnknown_0202E8F4 = 1;
+ MenuZeroFillWindowRect(3, 14, 26, 19);
+ PlaySE(SE_KAIFUKU);
+ PartyMenuUpdateLevelOrStatus(ewram1C000.pokemon, ewram1C000.unk5);
+ task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 9);
+ ewram1B000.unk261 = 2;
+ taskData[12] = GetMonData(ewram1C000.pokemon, MON_DATA_HP) - taskData[11];
+ taskData[14] = 1;
+ ewram1B000.unk27E = 1;
+ ewram1B000.unk280 = 1;
+ ewram1B000.unk282 = taskData[11];
+ ewram1C000.var0C = -32768;
+ gTasks[taskId2].func = sub_806F8AC;
+ }
+ }
+}
- dummyTaskId = CreateTask(TaskDummy, 5);
- task2 = &gTasks[dummyTaskId];
+void sub_80701DC(u8 taskId)
+{
+ if (ewram1B000.unk27E == 1)
+ {
+ AddBagItem(ewram1C000.unk6, 1);
+ if (GetMonData(&gPlayerParty[ewram1C000.unk5], MON_DATA_SPECIES) != 0)
+ {
+ task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle() * 12 + ewram1C000.unk5 * 2], 3);
+ ewram1B000.unk261 = 2;
+ }
+ ewram1B000.unk27E = 0;
+ }
+ ewram1C000.unk5++;
+ if (ewram1C000.unk5 == 6)
+ {
+ gUnknown_0202E8F4 = 0;
+ if (ewram1B000.unk280 == 0)
+ {
+ gTasks[taskId].func = TaskDummy;
+ sub_806E834(gOtherText_WontHaveAnyEffect, 1);
+ CreateTask(sub_806FB0C, 8);
+ }
+ else
+ {
+ RemoveBagItem(ewram1C000.unk6, 1);
+ gTasks[taskId].func = ewram1C000.unk10;
+ }
+ gLastFieldPokeMenuOpened = 0;
+ }
+ else
+ {
+ sub_8070088(taskId);
+ }
+}
- task2->data[10] = GetMonData(unk_201C000.pokemon, MON_DATA_MAX_HP);
- task2->data[11] = GetMonData(unk_201C000.pokemon, MON_DATA_HP);
+void CreateItemUseMoveMenu(u8 partyMonIndex)
+{
+ u8 r6;
+ u8 i;
- if (ExecuteTableBasedItemEffect__(unk_201C000.var05, unk_201C000.var06, 0))
+ r6 = 0;
+ MenuDrawTextWindow(19, 10, 29, 19);
+ for (i = 0; i < 4; i++)
{
- DestroyTask(dummyTaskId);
- gTasks[taskId].func = sub_80701DC;
- return;
+ u16 move = GetMonData(&gPlayerParty[partyMonIndex], MON_DATA_MOVE1 + i);
+
+ MenuPrint(gMoveNames[move], 20, i * 2 + 11);
+ if (move != 0)
+ r6++;
}
+ InitMenu(0, 20, 11, r6, 0, 9);
+}
- gUnknown_0202E8F4 = 1;
- MenuZeroFillWindowRect(3, 14, 26, 19);
- PlaySE(SE_KAIFUKU);
- PartyMenuUpdateLevelOrStatus(unk_201C000.pokemon, unk_201C000.var05);
+void Task_HandleItemUseMoveMenuInput(u8 taskId)
+{
+ if (gMain.newKeys & DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(-1);
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ MoveMenuCursor(1);
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ gUnknown_08376B54[0](taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gUnknown_08376B54[1](taskId);
+ }
+}
- task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle()][unk_201C000.var05], 9);
- unk_201B260.var01 = 2; // u8
+void DoPPRecoveryItemEffect(u8 taskId, u16 b, TaskFunc c)
+{
+ u8 *itemEffect;
+ u8 taskId2;
- task2->data[12] = GetMonData(unk_201C000.pokemon, MON_DATA_HP) - task2->data[11];
- task2->data[14] = 1;
- unk_201B260.var1E = 1; // u16
- unk_201B260.var20 = 1; // u16
+ if (b == 0xAF)
+ itemEffect = gSaveBlock1.enigmaBerry.itemEffect;
+ else
+ itemEffect = gItemEffectTable[b - 13];
+ gTasks[taskId].func = TaskDummy;
+ taskId2 = CreateTask(TaskDummy, 5);
+ sub_806E8D0(taskId, b, c);
+ if (!(itemEffect[4] & 0x10))
+ {
+ gTasks[taskId2].data[11] = 0;
+ DoRecoverPP(taskId2);
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ sub_806D538(10, 3);
+ CreateItemUseMoveMenu(ewram1C000.unk5);
+ gTasks[taskId2].func = Task_HandleItemUseMoveMenuInput;
+ gMain.newKeys = 0;
+ }
+}
- unk_201C000.var12 = -0x8000;
- task2->func = sub_806F8AC;
+void ItemUseMoveMenu_HandleMoveSelection(u8 taskId)
+{
+ sub_8072DEC();
+ MenuZeroFillWindowRect(19, 10, 29, 19);
+ sub_806D5A4();
+ gTasks[taskId].data[11] = GetMenuCursorPos();
+ DoRecoverPP(taskId);
}
-#else
-__attribute__((naked))
-void sub_8070088(void)
+
+void ItemUseMoveMenu_HandleCancel(u8 taskId)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- ldr r1, _08070120 @ =gTasks\n\
- mov r10, r1\n\
- lsls r1, r0, 2\n\
- adds r1, r0\n\
- lsls r1, 3\n\
- mov r2, r10\n\
- adds r7, r1, r2\n\
- ldr r5, _08070124 @ =TaskDummy\n\
- str r5, [r7]\n\
- ldr r4, _08070128 @ =0x0201c000\n\
- ldrb r0, [r4, 0x5]\n\
- movs r1, 0x64\n\
- mov r9, r1\n\
- mov r2, r9\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- ldr r1, _0807012C @ =gPlayerParty\n\
- mov r8, r1\n\
- add r0, r8\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08070118\n\
- adds r0, r5, 0\n\
- movs r1, 0x5\n\
- bl CreateTask\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- str r0, [sp]\n\
- mov r0, r10\n\
- adds r0, 0x8\n\
- ldr r2, [sp]\n\
- adds r6, r2, r0\n\
- ldrb r0, [r4, 0x5]\n\
- mov r1, r9\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- add r0, r8\n\
- str r0, [r4]\n\
- movs r1, 0x3A\n\
- bl GetMonData\n\
- strh r0, [r6, 0x14]\n\
- ldr r0, [r4]\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- strh r0, [r6, 0x16]\n\
- ldrb r0, [r4, 0x5]\n\
- ldrh r1, [r4, 0x6]\n\
- movs r2, 0\n\
- bl ExecuteTableBasedItemEffect__\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08070134\n\
- adds r0, r5, 0\n\
- bl DestroyTask\n\
-_08070118:\n\
- ldr r0, _08070130 @ =sub_80701DC\n\
- str r0, [r7]\n\
- b _080701B0\n\
- .align 2, 0\n\
-_08070120: .4byte gTasks\n\
-_08070124: .4byte TaskDummy\n\
-_08070128: .4byte 0x0201c000\n\
-_0807012C: .4byte gPlayerParty\n\
-_08070130: .4byte sub_80701DC\n\
-_08070134:\n\
- ldr r1, _080701C0 @ =gUnknown_0202E8F4\n\
- movs r0, 0x1\n\
- strb r0, [r1]\n\
- movs r0, 0x3\n\
- movs r1, 0xE\n\
- movs r2, 0x1A\n\
- movs r3, 0x13\n\
- bl MenuZeroFillWindowRect\n\
- movs r0, 0x1\n\
- bl PlaySE\n\
- ldr r0, [r4]\n\
- ldrb r1, [r4, 0x5]\n\
- bl PartyMenuUpdateLevelOrStatus\n\
- bl IsDoubleBattle\n\
- adds r1, r0, 0\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldrb r1, [r4, 0x5]\n\
- lsls r1, 1\n\
- adds r0, r1\n\
- ldr r1, _080701C4 @ =gUnknown_083769A8\n\
- adds r0, r1\n\
- movs r1, 0x9\n\
- bl task_pc_turn_off\n\
- ldr r2, _080701C8 @ =0xfffff261\n\
- adds r1, r4, r2\n\
- movs r0, 0x2\n\
- strb r0, [r1]\n\
- ldr r0, [r4]\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- ldrh r1, [r6, 0x16]\n\
- subs r0, r1\n\
- strh r0, [r6, 0x18]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0x1C]\n\
- ldr r1, _080701CC @ =0xfffff27e\n\
- adds r0, r4, r1\n\
- movs r1, 0x1\n\
- strh r1, [r0]\n\
- ldr r2, _080701D0 @ =0xfffff280\n\
- adds r0, r4, r2\n\
- strh r1, [r0]\n\
- ldrh r1, [r6, 0x16]\n\
- adds r2, 0x2\n\
- adds r0, r4, r2\n\
- strh r1, [r0]\n\
- ldr r0, _080701D4 @ =0xffff8000\n\
- str r0, [r4, 0xC]\n\
- ldr r1, [sp]\n\
- add r1, r10\n\
- ldr r0, _080701D8 @ =sub_806F8AC\n\
- str r0, [r1]\n\
-_080701B0:\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080701C0: .4byte gUnknown_0202E8F4\n\
-_080701C4: .4byte gUnknown_083769A8\n\
-_080701C8: .4byte 0xfffff261\n\
-_080701CC: .4byte 0xfffff27e\n\
-_080701D0: .4byte 0xfffff280\n\
-_080701D4: .4byte 0xffff8000\n\
-_080701D8: .4byte sub_806F8AC\n\
- .syntax divided\n");
+ sub_8072DEC();
+ MenuZeroFillWindowRect(19, 10, 29, 19);
+ if (gMain.inBattle)
+ gTasks[ewram1C000.unk4].func = SetUpBattlePokemonMenu;
+ else
+ gTasks[ewram1C000.unk4].func = sub_808B0C0;
+ sub_806D538(3, 0);
+ DestroyTask(taskId);
}
-#endif
+void DoRecoverPP(u8 taskId)
+{
+ u16 r5 = 0;
+
+ if (ExecuteTableBasedItemEffect__(ewram1C000.unk5, ewram1C000.unk6, gTasks[taskId].data[11]))
+ {
+ gUnknown_0202E8F4 = r5;
+ PlaySE(SE_SELECT);
+ sub_806E834(gOtherText_WontHaveAnyEffect, 1);
+ }
+ else
+ {
+ gUnknown_0202E8F4 = 1;
+ PlaySE(SE_KAIFUKU);
+ RemoveBagItem(ewram1C000.unk6, 1);
+ r5 = GetMonData(ewram1C000.pokemon, MON_DATA_MOVE1 + gTasks[taskId].data[11]);
+ StringCopy(gStringVar1, gMoveNames[r5]);
+ GetMedicineItemEffectMessage(ewram1C000.unk6);
+ sub_806E834(gStringVar4, 1);
+ }
+ gTasks[taskId].func = sub_806FB0C;
+}
asm(".section .text_c");
@@ -296,35 +335,27 @@ void sub_8070848(u8 taskId)
u8 x;
u8 y;
u32 stat;
- struct Pokemon **pokemon;
- pokemon = &unk_201C000.pokemon;
- asm("" ::: "r0");
- stat = GetMonData(*pokemon, gUnknown_08376D1C[i]);
+ stat = GetMonData(ewram1C000.pokemon, gUnknown_08376D1C[i]);
- unk_201B260.var04[i + DATA_COUNT] = stat;
- unk_201B260.var04[i] = stat - unk_201B260.var04[i];
+ ewram1B000.unk264[i + DATA_COUNT] = stat;
+ ewram1B000.unk264[i] = stat - ewram1B000.unk264[i];
x = (i / 3) * 9 + 11;
y = ((i % 3) << 1) + 1;
MenuPrint_PixelCoords(gUnknown_08376D04[i], (x + 1) * 8, y * 8, 1);
-
if (i == 2)
- {
MenuPrint_PixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 0);
- }
else
- {
MenuPrint_PixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 1);
- }
- gStringVar1[0] = 0xFC;
+ gStringVar1[0] = EXT_CTRL_CODE_BEGIN;
gStringVar1[1] = 0x14;
gStringVar1[2] = 0x06;
- ConvertIntToDecimalStringN(gStringVar1 + 3, unk_201B260.var04[i], 1, 2);
+ ConvertIntToDecimalStringN(gStringVar1 + 3, ewram1B000.unk264[i], 1, 2);
MenuPrint_PixelCoords(gStringVar1, (x + 6) * 8 + 12, y * 8, 0);
}