From 64683e1473d8b3c99f9bb1eb846c0be6d43cbbcc Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Thu, 15 Feb 2018 15:29:26 +0530 Subject: [PATCH 1/4] [WIP] Decompile fledd_softboiled.h --- asm/fldeff_softboiled.s | 322 ++++++++++++++++++------------------ data/party_menu.s | 4 +- include/fldeff_softboiled.h | 7 + include/party_menu.h | 15 ++ ld_script.txt | 1 + src/fldeff_softboiled.c | 191 +++++++++++++++++++++ 6 files changed, 377 insertions(+), 163 deletions(-) create mode 100644 include/fldeff_softboiled.h create mode 100644 src/fldeff_softboiled.c diff --git a/asm/fldeff_softboiled.s b/asm/fldeff_softboiled.s index c3aa4f1ed1..8d06c9c8fe 100644 --- a/asm/fldeff_softboiled.s +++ b/asm/fldeff_softboiled.s @@ -5,169 +5,169 @@ .text - thumb_func_start hm_prepare_dive_probably -hm_prepare_dive_probably: @ 8161508 - push {r4-r6,lr} - bl GetCursorSelectionMonId - lsls r0, 24 - lsrs r0, 24 - movs r6, 0x64 - muls r0, r6 - ldr r4, =gPlayerParty - adds r0, r4 - movs r1, 0x3A - bl GetMonData - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - bl GetCursorSelectionMonId - lsls r0, 24 - lsrs r0, 24 - muls r0, r6 - adds r0, r4 - movs r1, 0x39 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r5, 0 - movs r1, 0x5 - bl __udivsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r4, r0 - bhi _08161558 - movs r0, 0 - b _0816155A - .pool -_08161558: - movs r0, 0x1 -_0816155A: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end hm_prepare_dive_probably +// thumb_func_start hm_prepare_dive_probably +//hm_prepare_dive_probably: @ 8161508 +// push {r4-r6,lr} +// bl GetCursorSelectionMonId +// lsls r0, 24 +// lsrs r0, 24 +// movs r6, 0x64 +// muls r0, r6 +// ldr r4, =gPlayerParty +// adds r0, r4 +// movs r1, 0x3A +// bl GetMonData +// adds r5, r0, 0 +// lsls r5, 16 +// lsrs r5, 16 +// bl GetCursorSelectionMonId +// lsls r0, 24 +// lsrs r0, 24 +// muls r0, r6 +// adds r0, r4 +// movs r1, 0x39 +// bl GetMonData +// adds r4, r0, 0 +// lsls r4, 16 +// lsrs r4, 16 +// adds r0, r5, 0 +// movs r1, 0x5 +// bl __udivsi3 +// lsls r0, 16 +// lsrs r0, 16 +// cmp r4, r0 +// bhi _08161558 +// movs r0, 0 +// b _0816155A +// .pool +//_08161558: +// movs r0, 0x1 +//_0816155A: +// pop {r4-r6} +// pop {r1} +// bx r1 +// thumb_func_end hm_prepare_dive_probably - thumb_func_start sub_8161560 -sub_8161560: @ 8161560 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, =gUnknown_0203CEC8 - movs r1, 0xA - strb r1, [r0, 0xB] - ldrb r1, [r0, 0x9] - strb r1, [r0, 0xA] - bl GetCursorSelectionMonId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl sub_81B0FCC - movs r0, 0x5 - bl display_pokemon_menu_message - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, =sub_81B1370 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8161560 +// thumb_func_start sub_8161560 +//sub_8161560: @ 8161560 +// push {r4,lr} +// adds r4, r0, 0 +// lsls r4, 24 +// lsrs r4, 24 +// ldr r0, =gUnknown_0203CEC8 +// movs r1, 0xA +// strb r1, [r0, 0xB] +// ldrb r1, [r0, 0x9] +// strb r1, [r0, 0xA] +// bl GetCursorSelectionMonId +// lsls r0, 24 +// lsrs r0, 24 +// movs r1, 0x1 +// bl sub_81B0FCC +// movs r0, 0x5 +// bl display_pokemon_menu_message +// ldr r1, =gTasks +// lsls r0, r4, 2 +// adds r0, r4 +// lsls r0, 3 +// adds r0, r1 +// ldr r1, =sub_81B1370 +// str r1, [r0] +// pop {r4} +// pop {r0} +// bx r0 +// .pool +// thumb_func_end sub_8161560 - thumb_func_start sub_81615A8 -sub_81615A8: @ 81615A8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - str r4, [sp, 0x4] - ldr r1, =gUnknown_0203CEC8 - ldrb r7, [r1, 0x9] - mov r8, r7 - ldrb r0, [r1, 0xA] - adds r5, r0, 0 - cmp r5, 0x6 - bls _081615EC - movs r0, 0 - strb r0, [r1, 0xB] - bl display_pokemon_menu_message - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, =sub_81B1370 - str r1, [r0] - b _08161658 - .pool -_081615EC: - movs r0, 0x64 - mov r10, r0 - mov r0, r10 - muls r0, r5 - ldr r1, =gPlayerParty - mov r9, r1 - adds r6, r0, r1 - adds r0, r6, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - beq _0816161A - cmp r7, r5 - beq _0816161A - adds r0, r6, 0 - movs r1, 0x3A - bl GetMonData - cmp r0, r4 - bne _08161628 -_0816161A: - ldr r0, [sp, 0x4] - bl sub_81617B8 - b _08161658 - .pool -_08161628: - movs r0, 0x1 - bl PlaySE - mov r1, r10 - mov r0, r8 - muls r0, r1 - add r0, r9 - movs r1, 0x3A - bl GetMonData - movs r1, 0x5 - bl __udivsi3 - adds r3, r0, 0 - lsls r3, 16 - asrs r3, 16 - movs r2, 0x1 - negs r2, r2 - ldr r0, =sub_816166C - str r0, [sp] - ldr r0, [sp, 0x4] - mov r1, r8 - bl sub_81B1F18 -_08161658: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81615A8 +// thumb_func_start sub_81615A8 +//sub_81615A8: @ 81615A8 +// push {r4-r7,lr} +// mov r7, r10 +// mov r6, r9 +// mov r5, r8 +// push {r5-r7} +// sub sp, 0x8 +// lsls r0, 24 +// lsrs r4, r0, 24 +// str r4, [sp, 0x4] +// ldr r1, =gUnknown_0203CEC8 +// ldrb r7, [r1, 0x9] +// mov r8, r7 +// ldrb r0, [r1, 0xA] +// adds r5, r0, 0 +// cmp r5, 0x6 +// bls _081615EC +// movs r0, 0 +// strb r0, [r1, 0xB] +// bl display_pokemon_menu_message +// ldr r1, =gTasks +// lsls r0, r4, 2 +// adds r0, r4 +// lsls r0, 3 +// adds r0, r1 +// ldr r1, =sub_81B1370 +// str r1, [r0] +// b _08161658 +// .pool +//_081615EC: +// movs r0, 0x64 +// mov r10, r0 +// mov r0, r10 +// muls r0, r5 +// ldr r1, =gPlayerParty +// mov r9, r1 +// adds r6, r0, r1 +// adds r0, r6, 0 +// movs r1, 0x39 +// bl GetMonData +// lsls r0, 16 +// lsrs r4, r0, 16 +// cmp r4, 0 +// beq _0816161A +// cmp r7, r5 +// beq _0816161A +// adds r0, r6, 0 +// movs r1, 0x3A +// bl GetMonData +// cmp r0, r4 +// bne _08161628 +//_0816161A: +// ldr r0, [sp, 0x4] +// bl sub_81617B8 +// b _08161658 +// .pool +//_08161628: +// movs r0, 0x1 +// bl PlaySE +// mov r1, r10 +// mov r0, r8 +// muls r0, r1 +// add r0, r9 +// movs r1, 0x3A +// bl GetMonData +// movs r1, 0x5 +// bl __udivsi3 +// adds r3, r0, 0 +// lsls r3, 16 +// asrs r3, 16 +// movs r2, 0x1 +// negs r2, r2 +// ldr r0, =sub_816166C +// str r0, [sp] +// ldr r0, [sp, 0x4] +// mov r1, r8 +// bl sub_81B1F18 +//_08161658: +// add sp, 0x8 +// pop {r3-r5} +// mov r8, r3 +// mov r9, r4 +// mov r10, r5 +// pop {r4-r7} +// pop {r0} +// bx r0 +// .pool +// thumb_func_end sub_81615A8 thumb_func_start sub_816166C sub_816166C: @ 816166C diff --git a/data/party_menu.s b/data/party_menu.s index 9eae24ab9c..b60a1f927f 100644 --- a/data/party_menu.s +++ b/data/party_menu.s @@ -442,8 +442,8 @@ gUnknown_08615D9C:: @ 8615D9C .4byte SetUpFieldMove_Teleport, 0x0000000d .4byte sub_813572C, 0x0000000d .4byte sub_80FA004, 0x0000000d - .4byte hm_prepare_dive_probably, 0x00000010 - .4byte hm_prepare_dive_probably, 0x00000010 + .4byte SetUpFieldMove_SoftBoiled, 0x00000010 + .4byte SetUpFieldMove_SoftBoiled, 0x00000010 .4byte SetUpFieldMove_SweetScent, 0x0000000d .align 2 diff --git a/include/fldeff_softboiled.h b/include/fldeff_softboiled.h new file mode 100644 index 0000000000..065dcbf029 --- /dev/null +++ b/include/fldeff_softboiled.h @@ -0,0 +1,7 @@ +#ifndef GUARD_FLDEFF_SOFTBOILED_H +#define GUARD_FLDEFF_SOFTBOILED_H + +bool8 SetUpFieldMove_SoftBoiled(void); +void sub_8161560(u8 taskid); + +#endif // GUARD_FLDEFF_SOFTBOILED_H diff --git a/include/party_menu.h b/include/party_menu.h index 14aacce881..8f361663b4 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -11,6 +11,17 @@ enum AILMENT_BRN }; +struct Struct203CEC8 +{ + u8 filler[0x9]; + u8 unk9; + u8 unkA; + u8 unkB; + u8 filler2[0x2]; +}; + +extern struct Struct203CEC8 gUnknown_0203CEC8; + bool8 pokemon_has_move(struct Pokemon *, u16); void sub_81B58A8(void); void DoWallyTutorialBagMenu(void); @@ -20,4 +31,8 @@ u8 GetCursorSelectionMonId(void); bool8 FieldCallback_Teleport(void); void sub_81B7F60(void); +void sub_81B0FCC(u8 partyMonId, u8 a); +void sub_81B1370(u8 taskId); +void display_pokemon_menu_message(u8 windowBorderId); + #endif // GUARD_PARTY_MENU_H diff --git a/ld_script.txt b/ld_script.txt index b084d866e6..ae782a00be 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -210,6 +210,7 @@ SECTIONS { src/fldeff_sweetscent.o(.text); asm/battle_anim_815A0D4.o(.text); asm/learn_move.o(.text); + src/fldeff_softboiled.o(.text); asm/fldeff_softboiled.o(.text); src/decoration_inventory.o(.text); src/roamer.o(.text); diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c new file mode 100644 index 0000000000..8211cc77d2 --- /dev/null +++ b/src/fldeff_softboiled.c @@ -0,0 +1,191 @@ +#include "global.h" +#include "fldeff_softboiled.h" +#include "menu.h" +#include "party_menu.h" +#include "pokemon.h" +//#include "pokemon_menu.h" +#include "constants/songs.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" +//#include "ewram.h" + +/* +struct Struct2001000 { + u8 unk0; + u8 unk1; + u8 unk2; + u8 filler3[9]; + void *unkC; +}; + +struct Struct201C000 { + struct Pokemon *unk0; + u8 filler4[1]; + u8 unk5; + u16 unk6; + u8 filler8[4]; + s32 unkC; + void* unk10; + u8 filler14[26]; + s16 unk2E; +}; + +#if ENGLISH +#define WINDOW_LEFT 3 +#define WINDOW_RIGHT 26 +#elif GERMAN +#define WINDOW_LEFT 0 +#define WINDOW_RIGHT 29 +#endif +*/ +/* +// extern +extern u8 gUnknown_0202E8F6; +extern u8 gLastFieldPokeMenuOpened; +extern u8 gUnknown_0202E8F4; + +// Static +static void sub_8133D50(u8 taskId); +static void sub_8133E74(u8 taskId); +static void sub_8133EB8(u8 taskId); +static void sub_8133EF8(void); +*/ + +void sub_816166C(u8 taskId); +void sub_81617B8(u8 taskId); +void sub_81B1F18(u8 taskId, u8 pokemonIdx, s8 a, s16 hp, TaskFunc func); + +bool8 SetUpFieldMove_SoftBoiled(void) +{ + u16 maxHp; + u16 hp; + u16 minHp; + + maxHp = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_MAX_HP); + hp = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_HP); + + minHp = (maxHp / 5); + if (hp > minHp) + { + return TRUE; + } + return FALSE; +} + +void sub_8161560(u8 taskId) +{ + gUnknown_0203CEC8.unkB = 0xA; + gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.unk9; + sub_81B0FCC(GetCursorSelectionMonId(), 0x1); + display_pokemon_menu_message(0x5); + gTasks[taskId].func = sub_81B1370; +} + +void sub_81615A8(u8 taskId) +{ + u16 hp; + + u8 unk9 = gUnknown_0203CEC8.unk9; + u8 pokemonIndex = gUnknown_0203CEC8.unkA; + if(pokemonIndex > 6) + { + gUnknown_0203CEC8.unkB = 0; + display_pokemon_menu_message(0x0); + gTasks[taskId].func = sub_81B1370; + return; + } + + hp = GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_HP); + if(hp == 0 || unk9 == pokemonIndex || GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_MAX_HP) == hp) + { + sub_81617B8(taskId); + return; + } + + PlaySE(SE_KAIFUKU); + sub_81B1F18(taskId, unk9, -1, GetMonData(&gPlayerParty[unk9], MON_DATA_MAX_HP)/5, sub_816166C); +} + +/* +void sub_8133D28(u8 taskid) { + EWRAM_1000.unkC = sub_8133D50; + EWRAM_1B000_2.unk272 = 3; + DoPokemonMenu_Switch(taskid); +} + +static void sub_8133D50(u8 taskId) { + u8 unk1, unk2; + u16 hp; + struct Pokemon *pokemon; + //struct Task *task; + + struct Sprite *sprites = gSprites; + + + unk1 = sprites[EWRAM_1000.unk1].data[0]; + unk2 = sprites[EWRAM_1000.unk2].data[0]; + + if (unk1 > 5 || unk2 > 5) + { + sub_806CD44(taskId); + return; + } + + EWRAM_1C000.unk0 = &gPlayerParty[sprites[EWRAM_1000.unk2].data[0]]; + hp = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP); + + if (hp == 0 || unk1 == unk2 || GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP) == hp) + { + sub_8133EB8(taskId); + return; + } + + PlaySE(SE_KAIFUKU); + + EWRAM_1C000.unk5 = gSprites[EWRAM_1000.unk1].data[0]; + + pokemon = &gPlayerParty[EWRAM_1C000.unk5]; + EWRAM_1C000.unk0 = pokemon; + EWRAM_1C000.unk6 = 0; + EWRAM_1C000.unkC = -0x8000; + EWRAM_1C000.unk10 = sub_8133EF8; + + + gTasks[taskId].data[10] = GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP); + gTasks[taskId].data[11] = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP); + gTasks[taskId].data[12] = gTasks[taskId].data[10] / 5; + + sub_806D5A4(); + gTasks[taskId].func = sub_806FA18; + EWRAM_1B000_2.unk282 = gTasks[taskId].data[11]; +} + +static void sub_8133E74(u8 taskId) { + if (gUnknown_0202E8F6) + { + return; + } + + MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); + PrintPartyMenuPromptText(3, 0); + gTasks[taskId].func = HandlePartyMenuSwitchPokemonInput; +} + +static void sub_8133EB8(u8 taskId) { + gUnknown_0202E8F4 = 0; + sub_806D5A4(); + sub_806E834(gOtherText_CantUseOnPoke, 1); + gTasks[taskId].func = sub_8133E74; +} + +static void sub_8133EF8(void) { + sub_806CCE4(); + EWRAM_1B000_2.unk261 = 2; + DestroySprite(&gSprites[EWRAM_1000.unk1]); + MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); + PrintPartyMenuPromptText(0, 0); + SwitchTaskToFollowupFunc(EWRAM_1000.unk0); +} +*/ From 44c1ea16b9ec4d4a1c285bdab84b514f376625cc Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Thu, 15 Feb 2018 16:05:27 +0530 Subject: [PATCH 2/4] Cleanup and one non-matching function --- asm/fldeff_softboiled.s | 70 ++++++++--------- src/fldeff_softboiled.c | 162 +++++++++++----------------------------- 2 files changed, 79 insertions(+), 153 deletions(-) diff --git a/asm/fldeff_softboiled.s b/asm/fldeff_softboiled.s index 8d06c9c8fe..4af5a25929 100644 --- a/asm/fldeff_softboiled.s +++ b/asm/fldeff_softboiled.s @@ -169,41 +169,41 @@ // .pool // thumb_func_end sub_81615A8 - thumb_func_start sub_816166C -sub_816166C: @ 816166C - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl PlaySE - ldr r5, =gUnknown_0203CEC8 - movs r1, 0x9 - ldrsb r1, [r5, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - movs r1, 0x3A - bl GetMonData - movs r1, 0x5 - bl __udivsi3 - adds r3, r0, 0 - lsls r3, 16 - asrs r3, 16 - ldrb r1, [r5, 0xA] - ldr r0, =sub_81616C0 - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x1 - bl sub_81B1F18 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_816166C +// thumb_func_start sub_816166C +//sub_816166C: @ 816166C +// push {r4,r5,lr} +// sub sp, 0x4 +// adds r4, r0, 0 +// lsls r4, 24 +// lsrs r4, 24 +// movs r0, 0x1 +// bl PlaySE +// ldr r5, =gUnknown_0203CEC8 +// movs r1, 0x9 +// ldrsb r1, [r5, r1] +// movs r0, 0x64 +// muls r0, r1 +// ldr r1, =gPlayerParty +// adds r0, r1 +// movs r1, 0x3A +// bl GetMonData +// movs r1, 0x5 +// bl __udivsi3 +// adds r3, r0, 0 +// lsls r3, 16 +// asrs r3, 16 +// ldrb r1, [r5, 0xA] +// ldr r0, =sub_81616C0 +// str r0, [sp] +// adds r0, r4, 0 +// movs r2, 0x1 +// bl sub_81B1F18 +// add sp, 0x4 +// pop {r4,r5} +// pop {r0} +// bx r0 +// .pool +// thumb_func_end sub_816166C thumb_func_start sub_81616C0 sub_81616C0: @ 81616C0 diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index 8211cc77d2..d4193b9177 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -9,52 +9,10 @@ #include "sprite.h" #include "strings.h" #include "task.h" -//#include "ewram.h" - -/* -struct Struct2001000 { - u8 unk0; - u8 unk1; - u8 unk2; - u8 filler3[9]; - void *unkC; -}; - -struct Struct201C000 { - struct Pokemon *unk0; - u8 filler4[1]; - u8 unk5; - u16 unk6; - u8 filler8[4]; - s32 unkC; - void* unk10; - u8 filler14[26]; - s16 unk2E; -}; - -#if ENGLISH -#define WINDOW_LEFT 3 -#define WINDOW_RIGHT 26 -#elif GERMAN -#define WINDOW_LEFT 0 -#define WINDOW_RIGHT 29 -#endif -*/ -/* -// extern -extern u8 gUnknown_0202E8F6; -extern u8 gLastFieldPokeMenuOpened; -extern u8 gUnknown_0202E8F4; - -// Static -static void sub_8133D50(u8 taskId); -static void sub_8133E74(u8 taskId); -static void sub_8133EB8(u8 taskId); -static void sub_8133EF8(void); -*/ void sub_816166C(u8 taskId); void sub_81617B8(u8 taskId); +void sub_81616C0(u8 taskId); void sub_81B1F18(u8 taskId, u8 pokemonIdx, s8 a, s16 hp, TaskFunc func); bool8 SetUpFieldMove_SoftBoiled(void) @@ -108,84 +66,52 @@ void sub_81615A8(u8 taskId) sub_81B1F18(taskId, unk9, -1, GetMonData(&gPlayerParty[unk9], MON_DATA_MAX_HP)/5, sub_816166C); } -/* -void sub_8133D28(u8 taskid) { - EWRAM_1000.unkC = sub_8133D50; - EWRAM_1B000_2.unk272 = 3; - DoPokemonMenu_Switch(taskid); -} - -static void sub_8133D50(u8 taskId) { - u8 unk1, unk2; - u16 hp; - struct Pokemon *pokemon; - //struct Task *task; - - struct Sprite *sprites = gSprites; - - - unk1 = sprites[EWRAM_1000.unk1].data[0]; - unk2 = sprites[EWRAM_1000.unk2].data[0]; - - if (unk1 > 5 || unk2 > 5) - { - sub_806CD44(taskId); - return; - } - - EWRAM_1C000.unk0 = &gPlayerParty[sprites[EWRAM_1000.unk2].data[0]]; - hp = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP); - - if (hp == 0 || unk1 == unk2 || GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP) == hp) - { - sub_8133EB8(taskId); - return; - } - +#ifdef NONMATCHING +void sub_816166C(u8 taskId) +{ PlaySE(SE_KAIFUKU); - - EWRAM_1C000.unk5 = gSprites[EWRAM_1000.unk1].data[0]; - - pokemon = &gPlayerParty[EWRAM_1C000.unk5]; - EWRAM_1C000.unk0 = pokemon; - EWRAM_1C000.unk6 = 0; - EWRAM_1C000.unkC = -0x8000; - EWRAM_1C000.unk10 = sub_8133EF8; - - - gTasks[taskId].data[10] = GetMonData(EWRAM_1C000.unk0, MON_DATA_MAX_HP); - gTasks[taskId].data[11] = GetMonData(EWRAM_1C000.unk0, MON_DATA_HP); - gTasks[taskId].data[12] = gTasks[taskId].data[10] / 5; - - sub_806D5A4(); - gTasks[taskId].func = sub_806FA18; - EWRAM_1B000_2.unk282 = gTasks[taskId].data[11]; + sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAX_HP)/5, sub_81616C0); } +#else +__attribute__((naked)) +void sub_816166C(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + sub sp, 0x4\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + movs r0, 0x1\n\ + bl PlaySE\n\ + ldr r5, =gUnknown_0203CEC8\n\ + movs r1, 0x9\n\ + ldrsb r1, [r5, r1]\n\ + movs r0, 0x64\n\ + muls r0, r1\n\ + ldr r1, =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x3A\n\ + bl GetMonData\n\ + movs r1, 0x5\n\ + bl __udivsi3\n\ + adds r3, r0, 0\n\ + lsls r3, 16\n\ + asrs r3, 16\n\ + ldrb r1, [r5, 0xA]\n\ + ldr r0, =sub_81616C0\n\ + str r0, [sp]\n\ + adds r0, r4, 0\n\ + movs r2, 0x1\n\ + bl sub_81B1F18\n\ + add sp, 0x4\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided\n"); -static void sub_8133E74(u8 taskId) { - if (gUnknown_0202E8F6) - { - return; - } - - MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); - PrintPartyMenuPromptText(3, 0); - gTasks[taskId].func = HandlePartyMenuSwitchPokemonInput; } +#endif -static void sub_8133EB8(u8 taskId) { - gUnknown_0202E8F4 = 0; - sub_806D5A4(); - sub_806E834(gOtherText_CantUseOnPoke, 1); - gTasks[taskId].func = sub_8133E74; -} -static void sub_8133EF8(void) { - sub_806CCE4(); - EWRAM_1B000_2.unk261 = 2; - DestroySprite(&gSprites[EWRAM_1000.unk1]); - MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); - PrintPartyMenuPromptText(0, 0); - SwitchTaskToFollowupFunc(EWRAM_1000.unk0); -} -*/ From 301664db2f7459e6f819a5f6eceeefccc78f0414 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Thu, 15 Feb 2018 17:12:02 +0530 Subject: [PATCH 3/4] Matching the unmatched and another function --- asm/fldeff_softboiled.s | 72 ++++++++++++++++++------------------- include/fldeff_softboiled.h | 1 + include/party_menu.h | 10 +++--- include/strings.h | 4 +++ src/fldeff_softboiled.c | 51 +++++--------------------- 5 files changed, 56 insertions(+), 82 deletions(-) diff --git a/asm/fldeff_softboiled.s b/asm/fldeff_softboiled.s index 4af5a25929..9f5f6a26e9 100644 --- a/asm/fldeff_softboiled.s +++ b/asm/fldeff_softboiled.s @@ -205,42 +205,42 @@ // .pool // thumb_func_end sub_816166C - thumb_func_start sub_81616C0 -sub_81616C0: @ 81616C0 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, =gUnknown_0203CEC8 - movs r1, 0xA - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, =gPlayerParty - adds r0, r1 - ldr r1, =gStringVar1 - bl GetMonNickname - ldr r4, =gStringVar4 - ldr r1, =gText_PkmnHPRestoredByVar2 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0 - bl sub_81B1B5C - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - ldr r1, =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, =sub_8161724 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81616C0 +// thumb_func_start sub_81616C0 +//sub_81616C0: @ 81616C0 +// push {r4,r5,lr} +// adds r5, r0, 0 +// lsls r5, 24 +// lsrs r5, 24 +// ldr r0, =gUnknown_0203CEC8 +// movs r1, 0xA +// ldrsb r1, [r0, r1] +// movs r0, 0x64 +// muls r0, r1 +// ldr r1, =gPlayerParty +// adds r0, r1 +// ldr r1, =gStringVar1 +// bl GetMonNickname +// ldr r4, =gStringVar4 +// ldr r1, =gText_PkmnHPRestoredByVar2 +// adds r0, r4, 0 +// bl StringExpandPlaceholders +// adds r0, r4, 0 +// movs r1, 0 +// bl sub_81B1B5C +// movs r0, 0x2 +// bl schedule_bg_copy_tilemap_to_vram +// ldr r1, =gTasks +// lsls r0, r5, 2 +// adds r0, r5 +// lsls r0, 3 +// adds r0, r1 +// ldr r1, =sub_8161724 +// str r1, [r0] +// pop {r4,r5} +// pop {r0} +// bx r0 +// .pool +// thumb_func_end sub_81616C0 thumb_func_start sub_8161724 sub_8161724: @ 8161724 diff --git a/include/fldeff_softboiled.h b/include/fldeff_softboiled.h index 065dcbf029..0e3b98a463 100644 --- a/include/fldeff_softboiled.h +++ b/include/fldeff_softboiled.h @@ -4,4 +4,5 @@ bool8 SetUpFieldMove_SoftBoiled(void); void sub_8161560(u8 taskid); + #endif // GUARD_FLDEFF_SOFTBOILED_H diff --git a/include/party_menu.h b/include/party_menu.h index 8f361663b4..25c3894934 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -1,6 +1,6 @@ #ifndef GUARD_PARTY_MENU_H #define GUARD_PARTY_MENU_H - +#include "task.h" enum { AILMENT_NONE, @@ -14,8 +14,8 @@ enum struct Struct203CEC8 { u8 filler[0x9]; - u8 unk9; - u8 unkA; + s8 unk9; + s8 unkA; u8 unkB; u8 filler2[0x2]; }; @@ -31,8 +31,10 @@ u8 GetCursorSelectionMonId(void); bool8 FieldCallback_Teleport(void); void sub_81B7F60(void); -void sub_81B0FCC(u8 partyMonId, u8 a); +void sub_81B0FCC(u8 partyIdx, u8 a); void sub_81B1370(u8 taskId); void display_pokemon_menu_message(u8 windowBorderId); +void sub_81B1F18(u8 taskId, u8 pokemonIdx, s8 a, s16 hp, TaskFunc func); +void sub_81B1B5C(void *a, u8 b); #endif // GUARD_PARTY_MENU_H diff --git a/include/strings.h b/include/strings.h index c9ebc175f8..4632938daf 100644 --- a/include/strings.h +++ b/include/strings.h @@ -348,6 +348,10 @@ extern const u8 gText_DepositedVar2Var1s[]; extern const u8 gText_NoRoomForItems[]; extern const u8 gText_ThreeDashes[]; +//party menu text +extern const u8 gText_PkmnHPRestoredByVar2[]; + +//birch dex rating text extern const u8 gBirchDexRatingText_LessThan10[]; extern const u8 gBirchDexRatingText_LessThan20[]; extern const u8 gBirchDexRatingText_LessThan30[]; diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index d4193b9177..3420faed71 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -7,13 +7,14 @@ #include "constants/songs.h" #include "sound.h" #include "sprite.h" +#include "string_util.h" #include "strings.h" #include "task.h" void sub_816166C(u8 taskId); void sub_81617B8(u8 taskId); void sub_81616C0(u8 taskId); -void sub_81B1F18(u8 taskId, u8 pokemonIdx, s8 a, s16 hp, TaskFunc func); +void sub_8161724(u8 taskId); bool8 SetUpFieldMove_SoftBoiled(void) { @@ -66,52 +67,18 @@ void sub_81615A8(u8 taskId) sub_81B1F18(taskId, unk9, -1, GetMonData(&gPlayerParty[unk9], MON_DATA_MAX_HP)/5, sub_816166C); } -#ifdef NONMATCHING void sub_816166C(u8 taskId) { PlaySE(SE_KAIFUKU); sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAX_HP)/5, sub_81616C0); } -#else -__attribute__((naked)) -void sub_816166C(u8 taskId) + +void sub_81616C0(u8 taskId) { - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - sub sp, 0x4\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - movs r0, 0x1\n\ - bl PlaySE\n\ - ldr r5, =gUnknown_0203CEC8\n\ - movs r1, 0x9\n\ - ldrsb r1, [r5, r1]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - movs r1, 0x5\n\ - bl __udivsi3\n\ - adds r3, r0, 0\n\ - lsls r3, 16\n\ - asrs r3, 16\n\ - ldrb r1, [r5, 0xA]\n\ - ldr r0, =sub_81616C0\n\ - str r0, [sp]\n\ - adds r0, r4, 0\n\ - movs r2, 0x1\n\ - bl sub_81B1F18\n\ - add sp, 0x4\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided\n"); - + GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unkA], gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2); + sub_81B1B5C(gStringVar4, 0); + schedule_bg_copy_tilemap_to_vram(2); + gTasks[taskId].func = sub_8161724; } -#endif - From a200d9406b15f722b34775050f6fe73894d23629 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Thu, 15 Feb 2018 22:32:28 +0530 Subject: [PATCH 4/4] Finish fldeff_softboiled.c --- asm/fldeff_softboiled.s | 339 ------------------------------------ include/fldeff_softboiled.h | 8 - include/party_menu.h | 3 +- include/strings.h | 1 + ld_script.txt | 1 - src/fldeff_softboiled.c | 33 +++- 6 files changed, 32 insertions(+), 353 deletions(-) delete mode 100644 asm/fldeff_softboiled.s delete mode 100644 include/fldeff_softboiled.h diff --git a/asm/fldeff_softboiled.s b/asm/fldeff_softboiled.s deleted file mode 100644 index 9f5f6a26e9..0000000000 --- a/asm/fldeff_softboiled.s +++ /dev/null @@ -1,339 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - -// thumb_func_start hm_prepare_dive_probably -//hm_prepare_dive_probably: @ 8161508 -// push {r4-r6,lr} -// bl GetCursorSelectionMonId -// lsls r0, 24 -// lsrs r0, 24 -// movs r6, 0x64 -// muls r0, r6 -// ldr r4, =gPlayerParty -// adds r0, r4 -// movs r1, 0x3A -// bl GetMonData -// adds r5, r0, 0 -// lsls r5, 16 -// lsrs r5, 16 -// bl GetCursorSelectionMonId -// lsls r0, 24 -// lsrs r0, 24 -// muls r0, r6 -// adds r0, r4 -// movs r1, 0x39 -// bl GetMonData -// adds r4, r0, 0 -// lsls r4, 16 -// lsrs r4, 16 -// adds r0, r5, 0 -// movs r1, 0x5 -// bl __udivsi3 -// lsls r0, 16 -// lsrs r0, 16 -// cmp r4, r0 -// bhi _08161558 -// movs r0, 0 -// b _0816155A -// .pool -//_08161558: -// movs r0, 0x1 -//_0816155A: -// pop {r4-r6} -// pop {r1} -// bx r1 -// thumb_func_end hm_prepare_dive_probably - -// thumb_func_start sub_8161560 -//sub_8161560: @ 8161560 -// push {r4,lr} -// adds r4, r0, 0 -// lsls r4, 24 -// lsrs r4, 24 -// ldr r0, =gUnknown_0203CEC8 -// movs r1, 0xA -// strb r1, [r0, 0xB] -// ldrb r1, [r0, 0x9] -// strb r1, [r0, 0xA] -// bl GetCursorSelectionMonId -// lsls r0, 24 -// lsrs r0, 24 -// movs r1, 0x1 -// bl sub_81B0FCC -// movs r0, 0x5 -// bl display_pokemon_menu_message -// ldr r1, =gTasks -// lsls r0, r4, 2 -// adds r0, r4 -// lsls r0, 3 -// adds r0, r1 -// ldr r1, =sub_81B1370 -// str r1, [r0] -// pop {r4} -// pop {r0} -// bx r0 -// .pool -// thumb_func_end sub_8161560 - -// thumb_func_start sub_81615A8 -//sub_81615A8: @ 81615A8 -// push {r4-r7,lr} -// mov r7, r10 -// mov r6, r9 -// mov r5, r8 -// push {r5-r7} -// sub sp, 0x8 -// lsls r0, 24 -// lsrs r4, r0, 24 -// str r4, [sp, 0x4] -// ldr r1, =gUnknown_0203CEC8 -// ldrb r7, [r1, 0x9] -// mov r8, r7 -// ldrb r0, [r1, 0xA] -// adds r5, r0, 0 -// cmp r5, 0x6 -// bls _081615EC -// movs r0, 0 -// strb r0, [r1, 0xB] -// bl display_pokemon_menu_message -// ldr r1, =gTasks -// lsls r0, r4, 2 -// adds r0, r4 -// lsls r0, 3 -// adds r0, r1 -// ldr r1, =sub_81B1370 -// str r1, [r0] -// b _08161658 -// .pool -//_081615EC: -// movs r0, 0x64 -// mov r10, r0 -// mov r0, r10 -// muls r0, r5 -// ldr r1, =gPlayerParty -// mov r9, r1 -// adds r6, r0, r1 -// adds r0, r6, 0 -// movs r1, 0x39 -// bl GetMonData -// lsls r0, 16 -// lsrs r4, r0, 16 -// cmp r4, 0 -// beq _0816161A -// cmp r7, r5 -// beq _0816161A -// adds r0, r6, 0 -// movs r1, 0x3A -// bl GetMonData -// cmp r0, r4 -// bne _08161628 -//_0816161A: -// ldr r0, [sp, 0x4] -// bl sub_81617B8 -// b _08161658 -// .pool -//_08161628: -// movs r0, 0x1 -// bl PlaySE -// mov r1, r10 -// mov r0, r8 -// muls r0, r1 -// add r0, r9 -// movs r1, 0x3A -// bl GetMonData -// movs r1, 0x5 -// bl __udivsi3 -// adds r3, r0, 0 -// lsls r3, 16 -// asrs r3, 16 -// movs r2, 0x1 -// negs r2, r2 -// ldr r0, =sub_816166C -// str r0, [sp] -// ldr r0, [sp, 0x4] -// mov r1, r8 -// bl sub_81B1F18 -//_08161658: -// add sp, 0x8 -// pop {r3-r5} -// mov r8, r3 -// mov r9, r4 -// mov r10, r5 -// pop {r4-r7} -// pop {r0} -// bx r0 -// .pool -// thumb_func_end sub_81615A8 - -// thumb_func_start sub_816166C -//sub_816166C: @ 816166C -// push {r4,r5,lr} -// sub sp, 0x4 -// adds r4, r0, 0 -// lsls r4, 24 -// lsrs r4, 24 -// movs r0, 0x1 -// bl PlaySE -// ldr r5, =gUnknown_0203CEC8 -// movs r1, 0x9 -// ldrsb r1, [r5, r1] -// movs r0, 0x64 -// muls r0, r1 -// ldr r1, =gPlayerParty -// adds r0, r1 -// movs r1, 0x3A -// bl GetMonData -// movs r1, 0x5 -// bl __udivsi3 -// adds r3, r0, 0 -// lsls r3, 16 -// asrs r3, 16 -// ldrb r1, [r5, 0xA] -// ldr r0, =sub_81616C0 -// str r0, [sp] -// adds r0, r4, 0 -// movs r2, 0x1 -// bl sub_81B1F18 -// add sp, 0x4 -// pop {r4,r5} -// pop {r0} -// bx r0 -// .pool -// thumb_func_end sub_816166C - -// thumb_func_start sub_81616C0 -//sub_81616C0: @ 81616C0 -// push {r4,r5,lr} -// adds r5, r0, 0 -// lsls r5, 24 -// lsrs r5, 24 -// ldr r0, =gUnknown_0203CEC8 -// movs r1, 0xA -// ldrsb r1, [r0, r1] -// movs r0, 0x64 -// muls r0, r1 -// ldr r1, =gPlayerParty -// adds r0, r1 -// ldr r1, =gStringVar1 -// bl GetMonNickname -// ldr r4, =gStringVar4 -// ldr r1, =gText_PkmnHPRestoredByVar2 -// adds r0, r4, 0 -// bl StringExpandPlaceholders -// adds r0, r4, 0 -// movs r1, 0 -// bl sub_81B1B5C -// movs r0, 0x2 -// bl schedule_bg_copy_tilemap_to_vram -// ldr r1, =gTasks -// lsls r0, r5, 2 -// adds r0, r5 -// lsls r0, 3 -// adds r0, r1 -// ldr r1, =sub_8161724 -// str r1, [r0] -// pop {r4,r5} -// pop {r0} -// bx r0 -// .pool -// thumb_func_end sub_81616C0 - - thumb_func_start sub_8161724 -sub_8161724: @ 8161724 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_81B1BD4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08161772 - ldr r4, =gUnknown_0203CEC8 - movs r0, 0 - strb r0, [r4, 0xB] - ldrb r0, [r4, 0x9] - movs r1, 0 - bl sub_81B0FCC - ldrb r0, [r4, 0xA] - strb r0, [r4, 0x9] - ldrb r0, [r4, 0xA] - movs r1, 0x1 - bl sub_81B0FCC - movs r0, 0x6 - movs r1, 0 - bl sub_8198070 - movs r0, 0x6 - bl ClearWindowTilemap - movs r0, 0 - bl display_pokemon_menu_message - ldr r1, =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, =sub_81B1370 - str r1, [r0] -_08161772: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8161724 - - thumb_func_start sub_8161784 -sub_8161784: @ 8161784 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_81B1BD4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081617AA - movs r0, 0x5 - bl display_pokemon_menu_message - ldr r0, =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, =sub_81B1370 - str r0, [r1] -_081617AA: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8161784 - - thumb_func_start sub_81617B8 -sub_81617B8: @ 81617B8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x5 - bl PlaySE - ldr r0, =gText_CantBeUsedOnPkmn - movs r1, 0 - bl sub_81B1B5C - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, =sub_8161784 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81617B8 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/fldeff_softboiled.h b/include/fldeff_softboiled.h deleted file mode 100644 index 0e3b98a463..0000000000 --- a/include/fldeff_softboiled.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef GUARD_FLDEFF_SOFTBOILED_H -#define GUARD_FLDEFF_SOFTBOILED_H - -bool8 SetUpFieldMove_SoftBoiled(void); -void sub_8161560(u8 taskid); - - -#endif // GUARD_FLDEFF_SOFTBOILED_H diff --git a/include/party_menu.h b/include/party_menu.h index 25c3894934..1ce12d98f6 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -33,8 +33,9 @@ void sub_81B7F60(void); void sub_81B0FCC(u8 partyIdx, u8 a); void sub_81B1370(u8 taskId); -void display_pokemon_menu_message(u8 windowBorderId); +void display_pokemon_menu_message(u8 windowId); void sub_81B1F18(u8 taskId, u8 pokemonIdx, s8 a, s16 hp, TaskFunc func); void sub_81B1B5C(void *a, u8 b); +u8 sub_81B1BD4(); #endif // GUARD_PARTY_MENU_H diff --git a/include/strings.h b/include/strings.h index 4632938daf..70b2777e16 100644 --- a/include/strings.h +++ b/include/strings.h @@ -350,6 +350,7 @@ extern const u8 gText_ThreeDashes[]; //party menu text extern const u8 gText_PkmnHPRestoredByVar2[]; +extern const u8 gText_CantBeUsedOnPkmn[]; //birch dex rating text extern const u8 gBirchDexRatingText_LessThan10[]; diff --git a/ld_script.txt b/ld_script.txt index ae782a00be..a6971b8d12 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -211,7 +211,6 @@ SECTIONS { asm/battle_anim_815A0D4.o(.text); asm/learn_move.o(.text); src/fldeff_softboiled.o(.text); - asm/fldeff_softboiled.o(.text); src/decoration_inventory.o(.text); src/roamer.o(.text); asm/battle_tower.o(.text); diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index 3420faed71..b61cf9f324 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -1,9 +1,7 @@ #include "global.h" -#include "fldeff_softboiled.h" #include "menu.h" #include "party_menu.h" #include "pokemon.h" -//#include "pokemon_menu.h" #include "constants/songs.h" #include "sound.h" #include "sprite.h" @@ -27,9 +25,7 @@ bool8 SetUpFieldMove_SoftBoiled(void) minHp = (maxHp / 5); if (hp > minHp) - { return TRUE; - } return FALSE; } @@ -82,3 +78,32 @@ void sub_81616C0(u8 taskId) gTasks[taskId].func = sub_8161724; } +void sub_8161724(u8 taskId) +{ + if(sub_81B1BD4() == 1) + return; + gUnknown_0203CEC8.unkB = 0x0; + sub_81B0FCC(gUnknown_0203CEC8.unk9, 0); + gUnknown_0203CEC8.unk9 = gUnknown_0203CEC8.unkA; + sub_81B0FCC(gUnknown_0203CEC8.unkA, 1); + sub_8198070(0x6, FALSE); + ClearWindowTilemap(0x6); + display_pokemon_menu_message(0); + gTasks[taskId].func = sub_81B1370; +} + +void sub_8161784(u8 taskId) +{ + if(sub_81B1BD4() == 1) + return; + display_pokemon_menu_message(0x5); + gTasks[taskId].func = sub_81B1370; +} + +void sub_81617B8(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_81B1B5C(&gText_CantBeUsedOnPkmn, 0); + schedule_bg_copy_tilemap_to_vram(2); + gTasks[taskId].func = sub_8161784; +}