diff options
-rw-r--r-- | asm/fldeff_softboiled.s | 366 | ||||
-rw-r--r-- | data/data_83FECCC.s | 6 | ||||
-rw-r--r-- | include/party_menu.h | 24 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/fldeff_softboiled.c | 109 |
5 files changed, 138 insertions, 369 deletions
diff --git a/asm/fldeff_softboiled.s b/asm/fldeff_softboiled.s deleted file mode 100644 index 857686ab3..000000000 --- a/asm/fldeff_softboiled.s +++ /dev/null @@ -1,366 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start hm_prepare_dive_probably -hm_prepare_dive_probably: @ 80E5684 - push {r4-r6,lr} - bl GetCursorSelectionMonId - lsls r0, 24 - lsrs r0, 24 - movs r6, 0x64 - muls r0, r6 - ldr r4, _080E56D0 @ =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 _080E56D4 - movs r0, 0 - b _080E56D6 - .align 2, 0 -_080E56D0: .4byte gPlayerParty -_080E56D4: - movs r0, 0x1 -_080E56D6: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end hm_prepare_dive_probably - - thumb_func_start sub_80E56DC -sub_80E56DC: @ 80E56DC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080E5718 @ =gUnknown_203B0A0 - 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_811F818 - movs r0, 0x5 - bl sub_8121D0C - ldr r1, _080E571C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080E5720 @ =sub_811FB28 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5718: .4byte gUnknown_203B0A0 -_080E571C: .4byte gTasks -_080E5720: .4byte sub_811FB28 - thumb_func_end sub_80E56DC - - thumb_func_start sub_80E5724 -sub_80E5724: @ 80E5724 - 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, _080E575C @ =gUnknown_203B0A0 - ldrb r7, [r1, 0x9] - mov r8, r7 - ldrb r0, [r1, 0xA] - adds r5, r0, 0 - cmp r5, 0x6 - bls _080E5768 - movs r0, 0 - strb r0, [r1, 0xB] - bl sub_8121D0C - ldr r1, _080E5760 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080E5764 @ =sub_811FB28 - str r1, [r0] - b _080E57D4 - .align 2, 0 -_080E575C: .4byte gUnknown_203B0A0 -_080E5760: .4byte gTasks -_080E5764: .4byte sub_811FB28 -_080E5768: - movs r0, 0x64 - mov r10, r0 - mov r0, r10 - muls r0, r5 - ldr r1, _080E57A0 @ =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 _080E5796 - cmp r7, r5 - beq _080E5796 - adds r0, r6, 0 - movs r1, 0x3A - bl GetMonData - cmp r0, r4 - bne _080E57A4 -_080E5796: - ldr r0, [sp, 0x4] - bl sub_80E5934 - b _080E57D4 - .align 2, 0 -_080E57A0: .4byte gPlayerParty -_080E57A4: - 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, _080E57E4 @ =sub_80E57E8 - str r0, [sp] - ldr r0, [sp, 0x4] - mov r1, r8 - bl sub_8120760 -_080E57D4: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E57E4: .4byte sub_80E57E8 - thumb_func_end sub_80E5724 - - thumb_func_start sub_80E57E8 -sub_80E57E8: @ 80E57E8 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl PlaySE - ldr r5, _080E5830 @ =gUnknown_203B0A0 - movs r1, 0x9 - ldrsb r1, [r5, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E5834 @ =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, _080E5838 @ =sub_80E583C - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x1 - bl sub_8120760 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E5830: .4byte gUnknown_203B0A0 -_080E5834: .4byte gPlayerParty -_080E5838: .4byte sub_80E583C - thumb_func_end sub_80E57E8 - - thumb_func_start sub_80E583C -sub_80E583C: @ 80E583C - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _080E5884 @ =gUnknown_203B0A0 - movs r1, 0xA - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E5888 @ =gPlayerParty - adds r0, r1 - ldr r1, _080E588C @ =gStringVar1 - bl GetMonNickname - ldr r4, _080E5890 @ =gStringVar4 - ldr r1, _080E5894 @ =gUnknown_8416F27 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r4, 0 - movs r1, 0 - bl sub_81202F8 - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - ldr r1, _080E5898 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080E589C @ =sub_80E58A0 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E5884: .4byte gUnknown_203B0A0 -_080E5888: .4byte gPlayerParty -_080E588C: .4byte gStringVar1 -_080E5890: .4byte gStringVar4 -_080E5894: .4byte gUnknown_8416F27 -_080E5898: .4byte gTasks -_080E589C: .4byte sub_80E58A0 - thumb_func_end sub_80E583C - - thumb_func_start sub_80E58A0 -sub_80E58A0: @ 80E58A0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_8120370 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080E58EE - ldr r4, _080E58F4 @ =gUnknown_203B0A0 - movs r0, 0 - strb r0, [r4, 0xB] - ldrb r0, [r4, 0x9] - movs r1, 0 - bl sub_811F818 - ldrb r0, [r4, 0xA] - strb r0, [r4, 0x9] - ldrb r0, [r4, 0xA] - movs r1, 0x1 - bl sub_811F818 - movs r0, 0x6 - movs r1, 0 - bl sub_810F4D8 - movs r0, 0x6 - bl ClearWindowTilemap - movs r0, 0 - bl sub_8121D0C - ldr r1, _080E58F8 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080E58FC @ =sub_811FB28 - str r1, [r0] -_080E58EE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E58F4: .4byte gUnknown_203B0A0 -_080E58F8: .4byte gTasks -_080E58FC: .4byte sub_811FB28 - thumb_func_end sub_80E58A0 - - thumb_func_start sub_80E5900 -sub_80E5900: @ 80E5900 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8120370 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080E5926 - movs r0, 0x5 - bl sub_8121D0C - ldr r0, _080E592C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080E5930 @ =sub_811FB28 - str r0, [r1] -_080E5926: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E592C: .4byte gTasks -_080E5930: .4byte sub_811FB28 - thumb_func_end sub_80E5900 - - thumb_func_start sub_80E5934 -sub_80E5934: @ 80E5934 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x5 - bl PlaySE - ldr r0, _080E5964 @ =gUnknown_84169F8 - movs r1, 0 - bl sub_81202F8 - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - ldr r1, _080E5968 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080E596C @ =sub_80E5900 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5964: .4byte gUnknown_84169F8 -_080E5968: .4byte gTasks -_080E596C: .4byte sub_80E5900 - thumb_func_end sub_80E5934 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s index 839ef6d21..edddda0ab 100644 --- a/data/data_83FECCC.s +++ b/data/data_83FECCC.s @@ -1063,7 +1063,8 @@ gUnknown_84169DC:: @ 84169DC .incbin "baserom.gba", 0x4169DC, 0x1C gUnknown_84169F8:: @ 84169F8 - .incbin "baserom.gba", 0x4169F8, 0x26 + .string "This can't be used on\n" + .string "that POKéMON.{PAUSE_UNTIL_PRESS}$" gUnknown_8416A1E:: @ 8416A1E .incbin "baserom.gba", 0x416A1E, 0x1C @@ -1159,7 +1160,8 @@ gUnknown_8416F10:: @ 8416F10 .incbin "baserom.gba", 0x416F10, 0x17 gUnknown_8416F27:: @ 8416F27 - .incbin "baserom.gba", 0x416F27, 0x27 + .string "{STR_VAR_1}'s HP was restored\n" + .string "by {STR_VAR_2} point(s).{PAUSE_UNTIL_PRESS}$" gUnknown_8416F4E:: @ 8416F4E .incbin "baserom.gba", 0x416F4E, 0x21 diff --git a/include/party_menu.h b/include/party_menu.h index 34b375e42..01cd0ef57 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -13,6 +13,23 @@ enum { AILMENT_BRN }; +struct Struct203B0A0 +{ + MainCallback exitCallback; + TaskFunc unk4; + u8 unk8_0:4; + u8 mode:2; + u8 unk8_2:2; + s8 unk9; + s8 unkA; + u8 unkB; + u16 unkC; + s16 unkE; + s16 unk10; +}; + +extern struct Struct203B0A0 gUnknown_203B0A0; + extern void (*gUnknown_3005E98)(u8 taskId, TaskFunc func); bool8 FieldCallback_PrepareFadeInFromMenu(void); @@ -27,5 +44,12 @@ void sub_8126EDC(void); void c2_8123744(void); u8 GetCursorSelectionMonId(void); void sub_8128370(void); +void sub_811F818(u8 monId, u8 a1); +void sub_8121D0C(u8); +void sub_811FB28(u8 taskId); +void sub_8120760(u8 taskId, u8 a1, s8 a2, s16 amount, TaskFunc followupFunc); +void GetMonNickname(const struct Pokemon * mon, u8 * dest); +void sub_81202F8(const u8 * src, u8 a1); +bool8 sub_8120370(void); #endif // GUARD_PARTY_MENU_H diff --git a/ld_script.txt b/ld_script.txt index a524fc643..ecc924060 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -205,7 +205,7 @@ SECTIONS { asm/fldeff_sweetscent.o(.text); asm/battle_anim_effects_3.o(.text); asm/learn_move.o(.text); - asm/fldeff_softboiled.o(.text); + src/fldeff_softboiled.o(.text); asm/battle_tower.o(.text); asm/battle_controller_oak.o(.text); asm/player_pc.o(.text); diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c new file mode 100644 index 000000000..deaa36eb5 --- /dev/null +++ b/src/fldeff_softboiled.c @@ -0,0 +1,109 @@ +#include "global.h" +#include "party_menu.h" +#include "sound.h" +#include "string_util.h" +#include "menu.h" +#include "constants/songs.h" + +void sub_80E57E8(u8 taskId); +void sub_80E583C(u8 taskId); +void sub_80E58A0(u8 taskId); +void sub_80E5934(u8 taskId); + +extern const u8 gUnknown_84169F8[]; +extern const u8 gUnknown_8416F27[]; + +bool8 hm_prepare_dive_probably(void) +{ + u16 maxHp = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_MAX_HP); + u16 curHp = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_HP); + + if (curHp > maxHp / 5) + return TRUE; + else + return FALSE; +} + +void sub_80E56DC(u8 taskId) +{ + gUnknown_203B0A0.unkB = 10; + gUnknown_203B0A0.unkA = gUnknown_203B0A0.unk9; + sub_811F818(GetCursorSelectionMonId(), 1); + sub_8121D0C(5); + gTasks[taskId].func = sub_811FB28; +} + +void sub_80E5724(u8 taskId) +{ + u8 r8 = gUnknown_203B0A0.unk9; + u8 r5 = gUnknown_203B0A0.unkA; + u16 curHp; + s16 delta; + + if (r5 > 6) + { + gUnknown_203B0A0.unkB = 0; + sub_8121D0C(0); + gTasks[taskId].func = sub_811FB28; + } + else + { + curHp = GetMonData(&gPlayerParty[r5], MON_DATA_HP); + if (curHp == 0 || r8 == r5 || GetMonData(&gPlayerParty[r5], MON_DATA_MAX_HP) == curHp) + { + sub_80E5934(taskId); + } + else + { + PlaySE(SE_KAIFUKU); + sub_8120760(taskId, r8, -1, GetMonData(&gPlayerParty[r8], MON_DATA_MAX_HP) / 5, sub_80E57E8); + } + } +} + +void sub_80E57E8(u8 taskId) +{ + PlaySE(SE_KAIFUKU); + sub_8120760(taskId, gUnknown_203B0A0.unkA, 1, GetMonData(&gPlayerParty[gUnknown_203B0A0.unk9], MON_DATA_MAX_HP) / 5, sub_80E583C); +} + +void sub_80E583C(u8 taskId) +{ + GetMonNickname(&gPlayerParty[gUnknown_203B0A0.unkA], gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_8416F27); + sub_81202F8(gStringVar4, 0); + schedule_bg_copy_tilemap_to_vram(2); + gTasks[taskId].func = sub_80E58A0; +} + +void sub_80E58A0(u8 taskId) +{ + if (sub_8120370() != TRUE) + { + gUnknown_203B0A0.unkB = 0; + sub_811F818(gUnknown_203B0A0.unk9, 0); + gUnknown_203B0A0.unk9 = gUnknown_203B0A0.unkA; + sub_811F818(gUnknown_203B0A0.unkA, 1); + sub_810F4D8(6, 0); + ClearWindowTilemap(6); + sub_8121D0C(0); + gTasks[taskId].func = sub_811FB28; + } +} + +void sub_80E5900(u8 taskId) +{ + if (sub_8120370() != TRUE) + { + sub_8121D0C(5); + gTasks[taskId].func = sub_811FB28; + } +} + +void sub_80E5934(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_81202F8(gUnknown_84169F8, 0); + schedule_bg_copy_tilemap_to_vram(2); + gTasks[taskId].func = sub_80E5900; +} |