diff options
-rw-r--r-- | asm/party_menu.s | 367 | ||||
-rw-r--r-- | data/party_menu.s | 14 | ||||
-rw-r--r-- | include/asm.inc.h | 61 | ||||
-rw-r--r-- | ld_script.txt | 6 | ||||
-rw-r--r-- | shared_syms.txt | 4 | ||||
-rw-r--r-- | src/party_menu.c | 317 |
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); + } +} |