Decompile party_menu functions

This commit is contained in:
Marijn van der Werf 2017-01-06 00:42:09 +01:00
parent 9c364f5d17
commit 505ad946b9
6 changed files with 378 additions and 391 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -24,4 +24,8 @@ dword_2017100 = 0x2017100;
unk_2018000 = 0x2018000;
unk_201B260 = 0x201b260;
unk_201B264 = 0x201B264;
unk_201C000 = 0x201C000;
gHallOfFame = 0x201E000;

317
src/party_menu.c Normal file
View File

@ -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);
}
}