summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <YamaArashi@users.noreply.github.com>2017-01-05 15:58:02 -0800
committerGitHub <noreply@github.com>2017-01-05 15:58:02 -0800
commit297de575412e42bdc91850fb5c8bba0df3babae4 (patch)
treeed32bbce2652971927b37808002f74225faac006
parent9c364f5d179273a38f71eec468e2ad132e58b5d4 (diff)
parent505ad946b9b9e102ceb01f86a03769c5b6d22749 (diff)
Merge pull request #162 from marijnvdwerf/decompile/party_menu
Decompile party_menu functions
-rw-r--r--asm/party_menu.s367
-rw-r--r--data/party_menu.s14
-rw-r--r--include/asm.inc.h61
-rw-r--r--ld_script.txt6
-rw-r--r--shared_syms.txt4
-rw-r--r--src/party_menu.c317
6 files changed, 378 insertions, 391 deletions
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 1d51711f1..0edec1623 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -7446,82 +7446,9 @@ sub_806E81C: @ 806E81C
bx lr
thumb_func_end sub_806E81C
- thumb_func_start sub_806E834
-sub_806E834: @ 806E834
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r4, r1, 24
- lsrs r4, 24
- ldr r1, _0806E878 @ =gUnknown_0202E8F6
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0x3
- movs r1, 0xE
- movs r2, 0x1A
- movs r3, 0x13
- bl MenuDrawTextWindow
- adds r0, r5, 0
- movs r1, 0x4
- movs r2, 0xF
- bl MenuPrintMessage
- ldr r0, _0806E87C @ =sub_806E884
- movs r1, 0x1
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0806E880 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x8]
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0806E878: .4byte gUnknown_0202E8F6
-_0806E87C: .4byte sub_806E884
-_0806E880: .4byte gTasks
- thumb_func_end sub_806E834
+ .section .text_806E884
+
- thumb_func_start sub_806E884
-sub_806E884: @ 806E884
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl MenuUpdateWindowText
- lsls r0, 24
- cmp r0, 0
- beq _0806E8C0
- ldr r1, _0806E8C8 @ =gUnknown_0202E8F6
- movs r0, 0
- strb r0, [r1]
- ldr r1, _0806E8CC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0806E8BA
- movs r0, 0x3
- movs r1, 0xE
- movs r2, 0x1A
- movs r3, 0x13
- bl MenuZeroFillWindowRect
-_0806E8BA:
- adds r0, r5, 0
- bl DestroyTask
-_0806E8C0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806E8C8: .4byte gUnknown_0202E8F6
-_0806E8CC: .4byte gTasks
- thumb_func_end sub_806E884
thumb_func_start sub_806E8D0
sub_806E8D0: @ 806E8D0
@@ -10379,159 +10306,7 @@ _08070080: .4byte 0xfffff27e
_08070084: .4byte 0xfffff280
thumb_func_end sub_8070048
- thumb_func_start sub_8070088
-sub_8070088: @ 8070088
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08070120 @ =gTasks
- mov r10, r1
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- mov r2, r10
- adds r7, r1, r2
- ldr r5, _08070124 @ =TaskDummy
- str r5, [r7]
- ldr r4, _08070128 @ =0x0201c000
- ldrb r0, [r4, 0x5]
- movs r1, 0x64
- mov r9, r1
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- ldr r1, _0807012C @ =gPlayerParty
- mov r8, r1
- add r0, r8
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08070118
- adds r0, r5, 0
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- str r0, [sp]
- mov r0, r10
- adds r0, 0x8
- ldr r2, [sp]
- adds r6, r2, r0
- ldrb r0, [r4, 0x5]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- add r0, r8
- str r0, [r4]
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r6, 0x14]
- ldr r0, [r4]
- movs r1, 0x39
- bl GetMonData
- strh r0, [r6, 0x16]
- ldrb r0, [r4, 0x5]
- ldrh r1, [r4, 0x6]
- movs r2, 0
- bl ExecuteTableBasedItemEffect__
- lsls r0, 24
- cmp r0, 0
- beq _08070134
- adds r0, r5, 0
- bl DestroyTask
-_08070118:
- ldr r0, _08070130 @ =sub_80701DC
- str r0, [r7]
- b _080701B0
- .align 2, 0
-_08070120: .4byte gTasks
-_08070124: .4byte TaskDummy
-_08070128: .4byte 0x0201c000
-_0807012C: .4byte gPlayerParty
-_08070130: .4byte sub_80701DC
-_08070134:
- ldr r1, _080701C0 @ =gUnknown_0202E8F4
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0x3
- movs r1, 0xE
- movs r2, 0x1A
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- movs r0, 0x1
- bl PlaySE
- ldr r0, [r4]
- ldrb r1, [r4, 0x5]
- bl PartyMenuUpdateLevelOrStatus
- 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, _080701C4 @ =gUnknown_083769A8
- adds r0, r1
- movs r1, 0x9
- bl task_pc_turn_off
- ldr r2, _080701C8 @ =0xfffff261
- adds r1, r4, r2
- movs r0, 0x2
- strb r0, [r1]
- ldr r0, [r4]
- movs r1, 0x39
- bl GetMonData
- ldrh r1, [r6, 0x16]
- subs r0, r1
- strh r0, [r6, 0x18]
- movs r0, 0x1
- strh r0, [r6, 0x1C]
- ldr r1, _080701CC @ =0xfffff27e
- adds r0, r4, r1
- movs r1, 0x1
- strh r1, [r0]
- ldr r2, _080701D0 @ =0xfffff280
- adds r0, r4, r2
- strh r1, [r0]
- ldrh r1, [r6, 0x16]
- adds r2, 0x2
- adds r0, r4, r2
- strh r1, [r0]
- ldr r0, _080701D4 @ =0xffff8000
- str r0, [r4, 0xC]
- ldr r1, [sp]
- add r1, r10
- ldr r0, _080701D8 @ =sub_806F8AC
- str r0, [r1]
-_080701B0:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080701C0: .4byte gUnknown_0202E8F4
-_080701C4: .4byte gUnknown_083769A8
-_080701C8: .4byte 0xfffff261
-_080701CC: .4byte 0xfffff27e
-_080701D0: .4byte 0xfffff280
-_080701D4: .4byte 0xffff8000
-_080701D8: .4byte sub_806F8AC
- thumb_func_end sub_8070088
+ .section .text_80701DC
thumb_func_start sub_80701DC
sub_80701DC: @ 80701DC
@@ -11296,141 +11071,7 @@ _08070840: .4byte gTasks
_08070844: .4byte Task_RareCandy3
thumb_func_end Task_RareCandy2
- thumb_func_start sub_8070848
-sub_8070848: @ 8070848
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0xB
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x7
- bl MenuDrawTextWindow
- movs r7, 0
- ldr r0, _080708E4 @ =gStringVar1
- mov r10, r0
-_08070864:
- ldr r1, _080708E8 @ =0x0201c000
- ldr r0, [r1]
- ldr r1, _080708EC @ =gUnknown_08376D1C
- adds r1, r7, r1
- ldrb r1, [r1]
- bl GetMonData
- adds r1, r7, 0x6
- lsls r1, 1
- ldr r2, _080708F0 @ =0x0201b264
- adds r1, r2
- strh r0, [r1]
- lsls r4, r7, 1
- adds r2, r4, r2
- ldrh r1, [r2]
- subs r0, r1
- strh r0, [r2]
- adds r0, r7, 0
- movs r1, 0x3
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- adds r1, 0xB
- lsls r1, 24
- lsrs r6, r1, 24
- adds r0, r7, 0
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 1
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r1, _080708F4 @ =gUnknown_08376D04
- lsls r0, r7, 2
- adds r0, r1
- ldr r0, [r0]
- adds r1, r6, 0x1
- lsls r1, 27
- lsrs r1, 24
- mov r2, r9
- lsls r5, r2, 3
- adds r2, r5, 0
- movs r3, 0x1
- bl MenuPrint_PixelCoords
- mov r8, r4
- cmp r7, 0x2
- bne _080708FC
- adds r4, r6, 0x6
- lsls r1, r4, 3
- adds r1, 0x6
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _080708F8 @ =gOtherText_TallPlusAndRightArrow
- adds r2, r5, 0
- movs r3, 0
- bl MenuPrint_PixelCoords
- b _08070910
- .align 2, 0
-_080708E4: .4byte gStringVar1
-_080708E8: .4byte 0x0201c000
-_080708EC: .4byte gUnknown_08376D1C
-_080708F0: .4byte 0x0201b264
-_080708F4: .4byte gUnknown_08376D04
-_080708F8: .4byte gOtherText_TallPlusAndRightArrow
-_080708FC:
- adds r4, r6, 0x6
- lsls r1, r4, 3
- adds r1, 0x6
- lsls r1, 24
- lsrs r1, 24
- ldr r0, _08070960 @ =gOtherText_TallPlusAndRightArrow
- adds r2, r5, 0
- movs r3, 0x1
- bl MenuPrint_PixelCoords
-_08070910:
- movs r0, 0xFC
- mov r1, r10
- strb r0, [r1]
- movs r0, 0x14
- strb r0, [r1, 0x1]
- movs r0, 0x6
- strb r0, [r1, 0x2]
- ldr r0, _08070964 @ =0x0201b264
- add r0, r8
- movs r2, 0
- ldrsh r1, [r0, r2]
- mov r0, r10
- adds r0, 0x3
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- lsls r1, r4, 27
- movs r0, 0xC0
- lsls r0, 20
- adds r1, r0
- lsrs r1, 24
- mov r0, r9
- lsls r2, r0, 3
- mov r0, r10
- movs r3, 0
- bl MenuPrint_PixelCoords
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x5
- bls _08070864
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08070960: .4byte gOtherText_TallPlusAndRightArrow
-_08070964: .4byte 0x0201b264
- thumb_func_end sub_8070848
+ .section .text_8070968
thumb_func_start sub_8070968
sub_8070968: @ 8070968
diff --git a/data/party_menu.s b/data/party_menu.s
index 59a4dbfa3..5596ff2ed 100644
--- a/data/party_menu.s
+++ b/data/party_menu.s
@@ -355,18 +355,8 @@ gUnknown_08376978:: @ 8376978
.align 2
gUnknown_083769A8:: @ 83769A8
- .byte 0, 3
- .byte 11, 1
- .byte 11, 4
- .byte 11, 7
- .byte 11, 10
- .byte 11, 13
- .byte 0, 1
- .byte 0, 8
- .byte 11, 1
- .byte 11, 5
- .byte 11, 9
- .byte 11, 13
+ .byte 0, 3, 11, 1, 11, 4, 11, 7, 11, 10, 11, 13
+ .byte 0, 1, 0, 8, 11, 1, 11, 5, 11, 9, 11, 13
.align 2
gUnknown_083769C0:: @ 83769C0
diff --git a/include/asm.inc.h b/include/asm.inc.h
index 5e2b49a84..61790e8ce 100644
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -9,15 +9,17 @@ u8 sub_8015A98(u8, u8, u8);
u8 sub_8018324(u8, u8, u8, u8, u16);
void sub_8032AA8(u8 index, int i);
-// asm/rom_803D1FC.o
+// src/pokemon_3.o
u16 SpeciesToNationalPokedexNum(u16);
+
+// asm/pokemon_3.o
void DrawSpindaSpots(u16, u32, void *, u8);
u8 sub_803FC58(u16);
void AdjustFriendship(struct Pokemon *, u8);
void sub_80408BC();
void current_map_music_set__default_for_battle(u16);
-// asm/rom_8040EB4.o
+// asm/util.o
void StoreWordInTwoHalfwords(u16 *, u32);
void LoadWordFromTwoHalfwords(u16 *, u32 *);
@@ -30,7 +32,7 @@ void sub_8041940(void);
void sub_8041950(void);
u8 daycare_relationship_score_from_savegame(void);
-// asm/rom_804373C.o
+// asm/pokeball.o
void CreatePokeballSprite(u8 r0, u8 r1, u8 r2, u8 r3, u8 s1, u8 s2, u8 s3, u16 s4);
// asm/berry_blender.o
@@ -134,7 +136,7 @@ u8 ZCoordToPriority(u8);
void FieldObjectUpdateZCoord(struct MapObject *pObject);
void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
-// src/map_obj_80643A4.o
+// src/field_map_obj_helpers.o
bool8 FreezeMapObject(struct MapObject *);
void FreezeMapObjects(void);
void FreezeMapObjectsExceptOne(u8);
@@ -142,7 +144,7 @@ void UnfreezeMapObjects(void);
void sub_806487C(struct Sprite *sprite, bool8 invisible);
void sub_8064990(u8, u8);
-// asm/rom_8065394.o
+// asm/field_control_avatar.o
void sub_8067EEC(struct UnkInputStruct *pStruct);
void process_overworld_input(struct UnkInputStruct *pStruct, u16 keys, u16 heldKeys);
int sub_8068024(struct UnkInputStruct *pStruct);
@@ -152,23 +154,26 @@ void prev_quest_postbuffer_cursor_backup_reset(void);
u8 *sub_8068E24(struct UnkStruct_8054FF8_Substruct *);
u8 *GetFieldObjectScriptPointerForComparison();
-// asm/rom_806936C.o
+// asm/field_tasks.o
void SetUpFieldTasks();
void ActivatePerStepCallback(u8);
void ResetFieldTasksArgs(void);
+
+// asm/clock.o
void DoTimeBasedEvents(void);
// asm/reset_rtc_screen.o
void CB2_InitResetRtcScreen(void);
-// asm/rom_806D7F8.o
+// asm/party_menu.o
void GetMonNickname(struct Pokemon *mon, u8 *nickname);
bool8 pokemon_has_move(struct Pokemon *, u16);
-// asm/rom_8074BAC.o
+// asm/rom_8077ABC.o
u8 battle_side_get_owner(u8);
u8 battle_get_per_side_status(u8);
u8 battle_get_side_with_given_state(u8);
+bool8 IsDoubleBattle();
// asm/weather.o
void SetWeather(u32);
@@ -204,27 +209,41 @@ void objc_exclamation_mark_probably(struct Sprite *sprite);
u8 CreateTrainerSprite_BirchSpeech(u8, u16, u16, u8, void *);
void LoadTrainerGfx_TrainerCard(u8 gender, int, void *);
u8 CreateBirchSprite(u8, u8, u8);
+
+// asm/unknown_task.o
void remove_some_task(void);
void dp12_8087EA4(void);
void sub_80895F8(u32 i, u32 i1, u32 i2);
void sub_8089668(void);
void sub_8089944(int i, int i1, int i2, int i3, int i4, int i5, int i6);
+
+// asm/pokemon_menu.o
void sub_8089A70(void);
void sub_808AB90(void);
-// asm/rom_8094928.o
+// asm/pokemon_storage_system.o
void sub_80961D8(void);
+
+// asm/pokemon_icon.o
u8 sub_809D3A4(u16 arg0, void (*)(struct Sprite *), int, u8 arg3, u32 arg4);
u16 sub_809D4A8(u16);
void sub_809D510(struct Sprite *);
void sub_809D580(u16);
void sub_809D608(u16);
+
+// asm/pokemon_summary_screen.o
u8 pokemon_ailments_get_primary(u32);
+
+// asm/script_movement.o
u8 exec_movement(u8, u8, u8, void *);
bool8 sub_80A212C(u8, u8, u8);
void sub_80A2178(void);
+
+// asm/mail_data.o
void sub_80A2B18(void);
u16 sub_80A2D64(u16, u8 *);
+
+// asm/map_name_popup.o
void AddMapNamePopUpWindowTask(void);
void HideMapNamePopUpWindow();
@@ -258,7 +277,7 @@ void CreatePokemartMenu(void *);
void CreateDecorationShop1Menu(void *);
void CreateDecorationShop2Menu(void *);
-// asm/script_menu.o
+// src/script_menu.o
bool8 sub_80B5054(u8, u8, u8, u8);
bool8 sub_80B50B0(u8, u8, u8, u8, u8);
bool8 Multichoice(u8, u8, u8, u8);
@@ -297,6 +316,8 @@ s8 sub_80BF720(TVShow *);
u8 sub_80BF77C(u32);
void sub_80BFD44(void *, u32, u8);
void sub_80C0514(void *, u32, u8);
+
+// src/tv.o
void StartMassOutbreak(void);
void TVShowDone(void);
@@ -376,8 +397,8 @@ bool8 IsEasyChatPairEqual(u16 *, u16 *);
// asm/region_map.o
void sub_80FBFB4(u8 *str, u8 region, u8);
-u8 *CopyLocationName(u8 *dest, u8 location);
void CopyMapName();
+u8 *CopyLocationName(u8 *dest, u8 location);
// asm/slot_machine.o
void PlaySlotMachine(u8, void *);
@@ -388,9 +409,13 @@ void sub_8106630(u32);
// asm/rom6.o
bool8 npc_before_player_of_type(u8);
u8 oei_task_add(void);
+
+// asm/pokeblock.o
void sub_810C994(void);
void sub_810CA6C(s32);
s16 sub_810CAE4(u8, struct Pokeblock *);
+
+// asm/rom_810CBB4.o
void sub_810CC80(void);
u8 sub_810D32C(void);
void ResetCyclingRoadChallengeData(void);
@@ -407,9 +432,11 @@ void sub_811AABC(u8);
void sub_811AAD8(u8);
u8 sub_811AAE8(void);
-// asm/mystery_event_script.o
+// src/mystery_event_script.o
u32 sub_812613C(u8 *);
void sub_8126160(u8);
+
+// asm/mystery_event_script.o
u16 sub_8126338(void);
// asm/field_effect_helpers.o
@@ -435,10 +462,10 @@ void sub_8134394();
u8 sub_81344CC(void);
void sub_8134AC0(void *);
-// asm/player_pc.o
+// src/player_pc.o
void NewGameInitPCItems(void);
-// asm/rom_813BA94.o
+// asm/intro.o
void sub_813CAF4(u8);
void intro_reset_and_hide_bgs(void);
void sub_813CCE8(u8);
@@ -459,11 +486,11 @@ void sub_813E930(/*TODO: arg types*/);
void InitIntroTorchicAttackAnim(u8);
void InitIntroMudkipAttackAnim(/*TODO: arg types*/);
-// asm/rom_81473B8.o
+// asm/braille_puzzles.o
bool8 ShouldDoBrailleStrengthEffect(void);
void DoBrailleStrengthEffect(void);
-// asm/rom_8148B8C.o
+// asm/intro_credits_graphics.o
void load_intro_part2_graphics(/*TODO: arg types*/);
void sub_8148C78(/*TODO: arg types*/);
u8 sub_8148EC0(/*TODO: arg types*/);
@@ -472,6 +499,8 @@ u8 intro_create_brendan_sprite(/*TODO: arg types*/);
u8 intro_create_may_sprite(/*TODO: arg types*/);
u8 intro_create_latios_sprite(/*TODO: arg types*/);
u8 intro_create_latias_sprite(/*TODO: arg types*/);
+
+// asm/name_string_util.o
void SanitizeNameString(u8*);
// src/agb_flash.o
diff --git a/ld_script.txt b/ld_script.txt
index ea02b3356..6423e5d22 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -93,6 +93,12 @@ SECTIONS {
src/clock.o(.text);
asm/reset_rtc_screen.o(.text);
asm/party_menu.o(.text);
+ src/party_menu.o(.text);
+ asm/party_menu.o(.text_806E884);
+ src/party_menu.o(.text_b);
+ asm/party_menu.o(.text_80701DC);
+ src/party_menu.o(.text_c);
+ asm/party_menu.o(.text_8070968);
src/start_menu.o(.text);
src/menu.o(.text);
src/tileset_anim.o(.text);
diff --git a/shared_syms.txt b/shared_syms.txt
index 074572234..d805ebfde 100644
--- a/shared_syms.txt
+++ b/shared_syms.txt
@@ -24,4 +24,8 @@ dword_2017100 = 0x2017100;
unk_2018000 = 0x2018000;
+unk_201B260 = 0x201b260;
+unk_201B264 = 0x201B264;
+unk_201C000 = 0x201C000;
+
gHallOfFame = 0x201E000;
diff --git a/src/party_menu.c b/src/party_menu.c
new file mode 100644
index 000000000..ce1b0f32a
--- /dev/null
+++ b/src/party_menu.c
@@ -0,0 +1,317 @@
+#include "global.h"
+#include "menu.h"
+#include "pokemon.h"
+#include "songs.h"
+#include "sound.h"
+#include "string_util.h"
+#include "task.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;
+};
+
+struct Unk201B260 {
+ /* 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;
+};
+
+extern struct Unk201B260 unk_201B260;
+extern struct Unk201C000 unk_201C000;
+extern u8 gStringVar1[];
+extern u8 gUnknown_0202E8F4;
+extern u8 gUnknown_0202E8F6;
+
+extern u8 gUnknown_083769A8[][12];
+extern u8 gUnknown_08376D1C[DATA_COUNT];
+extern u8 *gUnknown_08376D04[DATA_COUNT];
+extern u8 gOtherText_TallPlusAndRightArrow[];
+
+void task_pc_turn_off(u8 *u8, int i);
+static void sub_806E884(u8 taskId);
+void sub_806F8AC(u8 taskId);
+void PartyMenuUpdateLevelOrStatus(struct Pokemon *, u8);
+u8 ExecuteTableBasedItemEffect__(u8 u8, u16 u16, int i);
+void sub_80701DC(u8 taskId);
+
+u8 sub_806E834(u8 *message, u8 arg1) {
+ u8 taskId;
+
+ gUnknown_0202E8F6 = 1;
+
+ MenuDrawTextWindow(3, 14, 26, 19);
+ MenuPrintMessage(message, 4, 15);
+
+ taskId = CreateTask(sub_806E884, 1);
+ gTasks[taskId].data[0] = arg1;
+
+ return taskId;
+}
+
+static void sub_806E884(u8 taskId) {
+ if (MenuUpdateWindowText() == 0) {
+ return;
+ }
+
+ gUnknown_0202E8F6 = 0;
+
+ if (gTasks[taskId].data[0] == 0) {
+ MenuZeroFillWindowRect(3, 14, 26, 19);
+ }
+
+ DestroyTask(taskId);
+}
+
+asm(".section .text_b");
+
+#ifdef NONMATCHING
+void sub_8070088(u8 taskId) {
+ u8 dummyTaskId;
+ struct Task *task2;
+
+ gTasks[taskId].func = TaskDummy;
+
+ if (GetMonData(&gPlayerParty[unk_201C000.var04], MON_DATA_SPECIES) == 0) {
+ gTasks[taskId].func = sub_80701DC;
+ return;
+ }
+
+ dummyTaskId = CreateTask(TaskDummy, 5);
+ task2 = &gTasks[dummyTaskId];
+
+ task2->data[10] = GetMonData(unk_201C000.pokemon, MON_DATA_MAX_HP);
+ task2->data[11] = GetMonData(unk_201C000.pokemon, MON_DATA_HP);
+
+ if (ExecuteTableBasedItemEffect__(unk_201C000.var05, unk_201C000.var06, 0)) {
+ DestroyTask(dummyTaskId);
+ gTasks[taskId].func = sub_80701DC;
+ return;
+ }
+
+ gUnknown_0202E8F4 = 1;
+ MenuZeroFillWindowRect(3, 14, 26, 19);
+ PlaySE(SE_KAIFUKU);
+ PartyMenuUpdateLevelOrStatus(unk_201C000.pokemon, unk_201C000.var05);
+
+ task_pc_turn_off(&gUnknown_083769A8[IsDoubleBattle()][unk_201C000.var05], 9);
+ unk_201B260.var01 = 2; // u8
+
+ 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
+
+ unk_201C000.var12 = -0x8000;
+ task2->func = sub_806F8AC;
+}
+#else
+__attribute__((naked))
+void sub_8070088(void) {
+ 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");
+}
+#endif
+
+
+asm(".section .text_c");
+
+void sub_8070848(u8 taskId) {
+ u8 i;
+
+ MenuDrawTextWindow(11, 0, 29, 7);
+
+ for (i = 0; i < DATA_COUNT; i++) {
+ u8 x;
+ u8 y;
+ u32 stat;
+ struct Pokemon **pokemon;
+
+ pokemon = &unk_201C000.pokemon;
+ asm("" ::: "r0");
+ stat = GetMonData(*pokemon, gUnknown_08376D1C[i]);
+
+ unk_201B260.var04[i + DATA_COUNT] = stat;
+ unk_201B260.var04[i] = stat - unk_201B260.var04[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[1] = 0x14;
+ gStringVar1[2] = 0x06;
+
+ ConvertIntToDecimalStringN(gStringVar1 + 3, unk_201B260.var04[i], 1, 2);
+
+ MenuPrint_PixelCoords(gStringVar1, (x + 6) * 8 + 12, y * 8, 0);
+ }
+}