diff --git a/asm/code_801EE10.s b/asm/code_801EE10.s index 213c5c277..7701afe3c 100644 --- a/asm/code_801EE10.s +++ b/asm/code_801EE10.s @@ -5,424 +5,6 @@ .text - thumb_func_start sub_801EF38 -sub_801EF38: - push {r4-r7,lr} - lsls r0, 24 - movs r7, 0 - cmp r0, 0 - bne _0801EF54 - ldr r0, _0801EF50 - ldr r0, [r0] - adds r0, 0x1C - bl sub_8013660 - b _0801F18C - .align 2, 0 -_0801EF50: .4byte gUnknown_203B270 -_0801EF54: - ldr r0, _0801EF70 - ldr r0, [r0] - adds r0, 0x1C - bl GetKeyPress - subs r0, 0x1 - cmp r0, 0xC - bls _0801EF66 - b _0801F12E -_0801EF66: - lsls r0, 2 - ldr r1, _0801EF74 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801EF70: .4byte gUnknown_203B270 -_0801EF74: .4byte _0801EF78 - .align 2, 0 -_0801EF78: - .4byte _0801EFB6 - .4byte _0801EFAC - .4byte _0801F0E4 - .4byte _0801EFC0 - .4byte _0801F12E - .4byte _0801F12E - .4byte _0801EFE4 - .4byte _0801EFCA - .4byte _0801F12E - .4byte _0801F12E - .4byte _0801F074 - .4byte _0801F04C - .4byte _0801F018 -_0801EFAC: - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _0801F18E -_0801EFB6: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _0801F18E -_0801EFC0: - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0x4 - b _0801F18E -_0801EFCA: - ldr r5, _0801EFE0 - ldr r0, [r5] - movs r1, 0x34 - ldrsh r6, [r0, r1] - adds r4, r0, 0 - adds r4, 0x1C - ldr r0, [r0, 0x10] - adds r1, r6, 0 - bl unk_FindMoveEnabledForAIAfter8_v2 - b _0801EFF8 - .align 2, 0 -_0801EFE0: .4byte gUnknown_203B270 -_0801EFE4: - ldr r5, _0801F014 - ldr r0, [r5] - movs r1, 0x34 - ldrsh r6, [r0, r1] - adds r4, r0, 0 - adds r4, 0x1C - ldr r0, [r0, 0x10] - adds r1, r6, 0 - bl unk_FindMoveEnabledForAIBefore8_v2 -_0801EFF8: - adds r1, r0, 0 - adds r0, r4, 0 - bl sub_8013780 - ldr r0, [r5] - movs r2, 0x34 - ldrsh r0, [r0, r2] - cmp r6, r0 - bne _0801F00C - b _0801F12E -_0801F00C: - movs r0, 0x3 - bl PlayMenuSoundEffect - b _0801F12E - .align 2, 0 -_0801F014: .4byte gUnknown_203B270 -_0801F018: - ldr r0, _0801F048 - ldr r2, [r0] - ldrb r1, [r2, 0x5] - adds r5, r0, 0 - cmp r1, 0 - bne _0801F026 - b _0801F12E -_0801F026: - movs r0, 0x34 - ldrsh r4, [r2, r0] - ldr r0, [r2, 0x10] - adds r1, r4, 0 - bl unk_SetMoveToLastInLinkedSequence8_v2 -_0801F032: - ldr r1, [r5] - strh r0, [r1, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r4, r0 - beq _0801F06C - movs r0, 0x3 - bl PlayMenuSoundEffect - b _0801F182 - .align 2, 0 -_0801F048: .4byte gUnknown_203B270 -_0801F04C: - ldr r0, _0801F068 - ldr r2, [r0] - ldrb r1, [r2, 0x5] - adds r5, r0, 0 - cmp r1, 0 - beq _0801F12E - movs r1, 0x34 - ldrsh r4, [r2, r1] - ldr r0, [r2, 0x10] - adds r1, r4, 0 - bl unk_SetMoveToFirstInLinkedSequence8_v2 - b _0801F032 - .align 2, 0 -_0801F068: .4byte gUnknown_203B270 -_0801F06C: - movs r0, 0x2 - bl PlayMenuSoundEffect - b _0801F182 -_0801F074: - ldr r0, _0801F0C8 - ldr r2, [r0] - ldrb r1, [r2, 0x6] - adds r5, r0, 0 - cmp r1, 0 - beq _0801F12E - ldr r0, _0801F0CC - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0x95 - ble _0801F0D0 - movs r1, 0x34 - ldrsh r0, [r2, r1] - ldr r1, [r2, 0x10] - bl sub_8093318 - lsls r0, 24 - cmp r0, 0 - beq _0801F0D0 - ldr r1, [r5] - movs r2, 0x34 - ldrsh r0, [r1, r2] - ldr r1, [r1, 0x10] - bl TryLinkMovesAfter - movs r0, 0x6 - bl PlayMenuSoundEffect - movs r7, 0x1 - ldr r1, [r5] - ldrb r0, [r1, 0x4] - cmp r0, 0 - bne _0801F12E - strb r7, [r1, 0x4] - movs r0, 0xA6 - lsls r0, 1 - bl PlaySound - b _0801F12E - .align 2, 0 -_0801F0C8: .4byte gUnknown_203B270 -_0801F0CC: .4byte gTeamInventoryRef -_0801F0D0: - ldr r0, _0801F0E0 - ldr r1, [r0] - movs r2, 0x34 - ldrsh r0, [r1, r2] - ldr r1, [r1, 0x10] - bl UnlinkMovesAfter - b _0801F0FE - .align 2, 0 -_0801F0E0: .4byte gUnknown_203B270 -_0801F0E4: - ldr r0, _0801F10C - ldr r1, [r0] - ldrb r0, [r1, 0x7] - cmp r0, 0 - beq _0801F12E - ldrb r0, [r1, 0xC] - cmp r0, 0 - beq _0801F110 - movs r2, 0x34 - ldrsh r0, [r1, r2] - ldr r1, [r1, 0x10] - bl ToggleSetMove -_0801F0FE: - lsls r0, 24 - cmp r0, 0 - bne _0801F120 - movs r0, 0x2 - bl PlayMenuSoundEffect - b _0801F12E - .align 2, 0 -_0801F10C: .4byte gUnknown_203B270 -_0801F110: - movs r2, 0x34 - ldrsh r0, [r1, r2] - ldr r1, [r1, 0x10] - bl ToggleMoveEnabled - lsls r0, 24 - cmp r0, 0 - beq _0801F128 -_0801F120: - movs r0, 0x6 - bl PlayMenuSoundEffect - b _0801F182 -_0801F128: - movs r0, 0x2 - bl PlayMenuSoundEffect -_0801F12E: - cmp r7, 0 - bne _0801F182 - movs r3, 0 - ldr r5, _0801F160 - movs r4, 0x1 -_0801F138: - ldr r2, [r5] - lsls r0, r3, 3 - ldr r1, [r2, 0x10] - adds r1, r0 - ldrb r1, [r1] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _0801F16C - movs r0, 0x2 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _0801F164 - adds r0, r2, 0 - adds r0, 0x14 - adds r0, r3 - strb r4, [r0] - b _0801F16C - .align 2, 0 -_0801F160: .4byte gUnknown_203B270 -_0801F164: - adds r0, r2, 0 - adds r0, 0x14 - adds r0, r3 - strb r1, [r0] -_0801F16C: - adds r3, 0x1 - cmp r3, 0x7 - ble _0801F138 - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x1C - adds r1, 0x14 - bl AddMenuCursorSprite_ - cmp r7, 0 - beq _0801F18C -_0801F182: - movs r0, 0x1 - bl sub_801F280 - movs r0, 0x1 - b _0801F18E -_0801F18C: - movs r0, 0 -_0801F18E: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_801EF38 - - thumb_func_start sub_801F194 -sub_801F194: - ldr r0, _0801F1A0 - ldr r0, [r0] - movs r1, 0x34 - ldrsh r0, [r0, r1] - bx lr - .align 2, 0 -_0801F1A0: .4byte gUnknown_203B270 - thumb_func_end sub_801F194 - - thumb_func_start sub_801F1A4 -sub_801F1A4: - ldr r0, _0801F1AC - ldr r0, [r0] - ldrb r0, [r0, 0x4] - bx lr - .align 2, 0 -_0801F1AC: .4byte gUnknown_203B270 - thumb_func_end sub_801F1A4 - - thumb_func_start sub_801F1B0 -sub_801F1B0: - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r4, _0801F210 - ldr r2, [r4] - ldrb r0, [r2, 0x4] - cmp r0, 0 - bne _0801F1C6 - strb r1, [r2, 0x4] -_0801F1C6: - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x58 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - bl sub_801F3F8 - adds r1, r0, 0 - ldr r0, [r4] - strh r1, [r0, 0x3E] - adds r0, 0x1C - bl sub_8013984 - ldr r1, [r4] - ldr r0, [r1, 0x10] - movs r2, 0x34 - ldrsh r1, [r1, r2] - bl sub_8092F4C - ldr r1, [r4] - strh r0, [r1, 0x34] - movs r0, 0x1 - bl sub_801F280 - cmp r5, 0 - beq _0801F208 - ldr r0, [r4] - adds r0, 0x1C - bl AddMenuCursorSprite -_0801F208: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0801F210: .4byte gUnknown_203B270 - thumb_func_end sub_801F1B0 - - thumb_func_start sub_801F214 -sub_801F214: - push {r4-r6,lr} - ldr r4, _0801F278 - ldr r2, [r4] - cmp r2, 0 - beq _0801F272 - ldr r0, [r2, 0x50] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - ldr r3, _0801F27C - adds r1, 0x58 - adds r0, r3, 0 - ldm r0!, {r2,r5,r6} - stm r1!, {r2,r5,r6} - ldm r0!, {r2,r5,r6} - stm r1!, {r2,r5,r6} - ldr r2, [r4] - adds r0, r2, 0 - adds r0, 0xB8 - ldr r0, [r0] - cmp r0, 0 - beq _0801F258 - ldr r0, [r2, 0x54] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x58 - adds r0, r3, 0 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} -_0801F258: - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x58 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0801F272: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0801F278: .4byte gUnknown_203B270 -_0801F27C: .4byte gUnknown_80DC240 - thumb_func_end sub_801F214 - thumb_func_start sub_801F280 sub_801F280: push {r4-r7,lr} diff --git a/include/code_801EE10.h b/include/code_801EE10.h index 3201fc987..94c95baf6 100644 --- a/include/code_801EE10.h +++ b/include/code_801EE10.h @@ -10,7 +10,7 @@ typedef struct unkStruct_203B270 { u32 unk0; - u8 unk4; + bool8 unk4; u8 unk5; u8 unk6; u8 unk7; @@ -18,7 +18,7 @@ typedef struct unkStruct_203B270 /* 0xC */ u8 isTeamLeader; /* 0x10 */ Move *moves; u8 fill14[0x1C - 0x14]; - MenuInputStruct input; + /* 0x1C */ MenuInputStruct input; u32 unk50; u32 unk54; UnkTextStruct2 unk58[4]; @@ -26,13 +26,13 @@ typedef struct unkStruct_203B270 } unkStruct_203B270; u8 sub_801EE10(u32, s16 species, Move *moves, u32, const u8 *text, u32); +u32 sub_801EF38(char); +s32 sub_801F194(void); +bool8 sub_801F1A4(void); +void sub_801F1B0(bool8, bool8); +void sub_801F214(void); // code_801EE10.s -extern u32 sub_801EF38(u32); -extern u32 sub_801F194(void); -extern bool8 sub_801F1A4(void); -extern void sub_801F1B0(bool8, bool8); -extern void sub_801F214(void); extern void sub_801F280(u32); // Probably bool -#endif // CODE_801EE10_H \ No newline at end of file +#endif // CODE_801EE10_H diff --git a/include/menu_input.h b/include/menu_input.h index a0e26e4f0..1d4bf20a7 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -40,7 +40,7 @@ bool8 sub_8013938(MenuInputStruct *param_1); void sub_8013984(MenuInputStruct * param_1); void sub_8013A54(MenuInputStruct *param_1); void sub_8013A7C(MenuInputStruct *param_1); -void AddMenuCursorSprite_(MenuInputStruct *, u32); +void AddMenuCursorSprite_(MenuInputStruct *, u8 *); void nullsub_34(MenuInputStructSub *); void sub_8013AA0(unkStructFor8013AA0 *); @@ -48,4 +48,4 @@ u32 sub_8013BBC(unkStructFor8013AA0 *); void sub_8013C68(unkStructFor8013AA0 *); void sub_8013D10(unkStructFor8013AA0 *); -#endif // GUARD_MENU_INPUT_H \ No newline at end of file +#endif // GUARD_MENU_INPUT_H diff --git a/src/code_801EE10.c b/src/code_801EE10.c index 92a14e6bc..bd82577c7 100644 --- a/src/code_801EE10.c +++ b/src/code_801EE10.c @@ -1,14 +1,18 @@ #include "global.h" #include "input.h" +#include "items.h" #include "text1.h" #include "text2.h" #include "memory.h" +#include "moves.h" #include "code_801EE10.h" +#include "code_80118A4.h" #include "menu_input.h" extern unkStruct_203B270 *gUnknown_203B270; extern UnkTextStruct2 gUnknown_80DC25C; extern UnkTextStruct2 gUnknown_80DC274; +extern UnkTextStruct2 gUnknown_80DC240; u32 sub_8006544(u32 index); s32 sub_801F3F8(void); @@ -65,3 +69,190 @@ u8 sub_801EE10(u32 param_1, s16 species, Move *moves, u32 param_4, const u8 *tex sub_801F280(1); return 1; } + +u32 sub_801EF38(char param_1) +{ + bool8 bVar2; + s32 index; + s32 index2; + s32 moveIndex; + s32 newIndex; + struct Move *move; + + bVar2 = 0; + if (param_1 == 0) { + sub_8013660(&gUnknown_203B270->input); + return 0; + } + switch(GetKeyPress(&gUnknown_203B270->input)) { + // B_BUTTON + case 2: + PlayMenuSoundEffect(1); + return 2; + // A_BUTTON + case 1: + PlayMenuSoundEffect(0); + return 3; + // START_BUTTON + case 4: + PlayMenuSoundEffect(4); + return 4; + // DPAD_DOWN + case 8: + index = gUnknown_203B270->input.menuIndex; + sub_8013780(&gUnknown_203B270->input, unk_FindMoveEnabledForAIAfter8_v2(gUnknown_203B270->moves, index)); + if (index != gUnknown_203B270->input.menuIndex) { + PlayMenuSoundEffect(3); + } + break; + // DPAD_UP + case 7: + index = gUnknown_203B270->input.menuIndex; + sub_8013780(&gUnknown_203B270->input,unk_FindMoveEnabledForAIBefore8_v2(gUnknown_203B270->moves,index)); + if (index != gUnknown_203B270->input.menuIndex) { + PlayMenuSoundEffect(3); + } + break; + // R_PAD_DOWN_BUTTONS + case 0xd: + if (gUnknown_203B270->unk5 == 0) break; + moveIndex = gUnknown_203B270->input.menuIndex; + newIndex = gUnknown_203B270->input.menuIndex = unk_SetMoveToLastInLinkedSequence8_v2(gUnknown_203B270->moves, moveIndex); + if (moveIndex != newIndex) { + PlayMenuSoundEffect(3); + } + else { + goto _134; + } + sub_801F280(1); + return 1; + // R_PAD_UP_BUTTONS + case 0xc: + if (gUnknown_203B270->unk5 == 0) break; + moveIndex = gUnknown_203B270->input.menuIndex; + newIndex = gUnknown_203B270->input.menuIndex = unk_SetMoveToFirstInLinkedSequence8_v2(gUnknown_203B270->moves,moveIndex); + if (moveIndex != newIndex) { + PlayMenuSoundEffect(3); + } + else { +_134: + PlayMenuSoundEffect(2); + } + sub_801F280(1); + return 1; + // R_A_BUTTONS + case 0xb: + if (gUnknown_203B270->unk6 != 0) { + if ((gTeamInventoryRef->teamMoney > 0x95) && (sub_8093318(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves) != 0)) + { + TryLinkMovesAfter(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves); + PlayMenuSoundEffect(6); + bVar2 = 1; + if (gUnknown_203B270->unk4 == 0) { + gUnknown_203B270->unk4 = 1; + PlaySound(0x14c); + } + break; + } + else if (UnlinkMovesAfter(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves) != 0) { + PlayMenuSoundEffect(6); + goto _ret; + } + else { + PlayMenuSoundEffect(2); + break; + } + } + break; + // SELECT_BUTTON + case 3: + if (gUnknown_203B270->unk7 != 0) { + if (gUnknown_203B270->isTeamLeader) { + if (ToggleSetMove(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves) == 0) { + PlayMenuSoundEffect(2); + break; + } + else { + PlayMenuSoundEffect(6); + goto _ret; + } + } + else + { + if (ToggleMoveEnabled(gUnknown_203B270->input.menuIndex,gUnknown_203B270->moves) != 0) { + PlayMenuSoundEffect(6); + goto _ret; + } + else { + PlayMenuSoundEffect(2); + break; + } + } + } + break; + } + if (!bVar2) { + for(index2 = 0; index2 < 8; index2++) + { + move = &gUnknown_203B270->moves[index2]; + if ((move->moveFlags & 1)) { + if ((move->moveFlags & 2)) { + gUnknown_203B270->fill14[index2] = 1; + } + else { + gUnknown_203B270->fill14[index2] = 0; + } + } + } + AddMenuCursorSprite_(&gUnknown_203B270->input, gUnknown_203B270->fill14); + } + if (bVar2) { +_ret: + sub_801F280(1); + return 1; + } + else + { + return 0; + } +} + +s32 sub_801F194 (void) +{ + return gUnknown_203B270->input.menuIndex; +} + +u8 sub_801F1A4(void) +{ + return gUnknown_203B270->unk4; +} + +void sub_801F1B0(bool8 param_1, bool8 param_2) +{ + if(!gUnknown_203B270->unk4) + gUnknown_203B270->unk4 = param_2; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B270->unk58, TRUE, TRUE); + gUnknown_203B270->input.unk22 = sub_801F3F8(); + sub_8013984(&gUnknown_203B270->input); + gUnknown_203B270->input.menuIndex = sub_8092F4C(gUnknown_203B270->moves, gUnknown_203B270->input.menuIndex); + sub_801F280(1); + if(param_1) + AddMenuCursorSprite(&gUnknown_203B270->input); +} + +void sub_801F214(void) +{ + if(gUnknown_203B270) + { + gUnknown_203B270->unk58[gUnknown_203B270->unk50] = gUnknown_80DC240; + if(gUnknown_203B270->text) + { + gUnknown_203B270->unk58[gUnknown_203B270->unk54] = gUnknown_80DC240; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B270->unk58, TRUE, TRUE); + MemoryFree(gUnknown_203B270); + gUnknown_203B270 = NULL; + } +} diff --git a/src/menu_input.c b/src/menu_input.c index f06d16ceb..4990e8347 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -587,7 +587,7 @@ void AddMenuCursorSprite(MenuInputStruct *param_1) AddMenuCursorSprite_(param_1, 0); } -void AddMenuCursorSprite_(MenuInputStruct *a0, u32 a1) +void AddMenuCursorSprite_(MenuInputStruct *a0, u8 *a1) { SpriteOAM sp = {}; SpriteOAM* ptr; diff --git a/src/status_actions.c b/src/status_actions.c index 2f2163810..cd3823ed3 100644 --- a/src/status_actions.c +++ b/src/status_actions.c @@ -20,8 +20,9 @@ #include "dungeon_visibility.h" #include "structs/map.h" #include "moves.h" +#include "move_util.h" #include "number_util.h" -//#include "pokemon.h" // NOTE: overriding some of the funcs below... when fixed, uncomment this +#include "pokemon.h" #include "status.h" #include "status_checks_1.h" @@ -31,7 +32,6 @@ #include "weather.h" extern void sub_807F43C(Entity *, Entity *); -extern void MobileStatusTarget(Entity *, Entity *); extern void sub_807DC68(Entity *, Entity *); extern void sub_8078A58(Entity *, Entity *, s16, u32); extern u32 sub_803D73C(u32); @@ -59,16 +59,12 @@ extern void sub_807DA14(Entity *, Entity *, s32); extern s16 sub_803D970(u32); extern u8 sub_806AA0C(s32, u32); extern void sub_806BB6C(Entity *, s32); -extern void sub_8075C58(Entity *, Entity *, s32, s32); extern void sub_807E254(Entity *, Entity *, u32); -extern bool8 sub_805727C(Entity * pokemon, Entity * target, s32 chance); extern u32 sub_8055640(Entity *, Entity *, Move *, u32, u32); extern void sub_806A6E8(Entity *); extern void sub_807D3CC(Entity *, Entity *); extern u8 sub_8069D18(Position *); extern u8 sub_804AD34(Position *); -extern u8 sub_8057308(Entity *, u32); - // TODO include dungeon_ai.h when SqueezedStatusTarget is figured out extern void LowerDefenseStageTarget(Entity *, Entity *, s32, s32, u8, bool8); @@ -80,8 +76,9 @@ extern void LowerAttackStageTarget(Entity *, Entity *, s32, s32, u8, bool8); extern void PetrifiedStatusTarget(Entity *, Entity *); extern void WrapTarget(Entity *, Entity *); -// TODO having matching issues when this isn't s32.. +// TODO having matching issues when this isn't s32.. (move_effects_target.h) extern void SqueezedStatusTarget(Entity *, Entity *, s32, bool32); +extern void sub_8075C58(Entity *, Entity *, s32, s32); extern void sub_806F324(Entity *, s32, u32, u32); extern bool8 sub_805755C(Entity* pokemon,u16 moveID);