From ca2d1943e925101e6a02f7e84d9b60d8a6eff81b Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 3 Mar 2024 20:26:46 -0800 Subject: [PATCH] Nonmatch SketchMoveAction for now --- asm/code_8057824.s | 126 -------------------------------- ld_script.txt | 1 - src/code_8057824.c | 175 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 175 insertions(+), 127 deletions(-) delete mode 100644 asm/code_8057824.s diff --git a/asm/code_8057824.s b/asm/code_8057824.s deleted file mode 100644 index 382b6882b..000000000 --- a/asm/code_8057824.s +++ /dev/null @@ -1,126 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start SketchMoveAction -SketchMoveAction: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r6, r0, 0 - adds r7, r1, 0 - adds r5, r2, 0 - movs r0, 0 - mov r10, r0 - ldr r1, [r6, 0x70] - str r1, [sp] - ldr r0, [r7, 0x70] - movs r2, 0 - mov r12, r2 - movs r4, 0 - movs r1, 0x8C - lsls r1, 1 - adds r3, r0, r1 - adds r1, r0, 0 - movs r2, 0x1 - mov r9, r2 - movs r0, 0x10 - mov r8, r0 -_08059372: - ldrb r2, [r3] - mov r0, r9 - ands r0, r2 - cmp r0, 0 - beq _08059384 - mov r0, r8 - ands r0, r2 - cmp r0, 0 - bne _080593A8 -_08059384: - adds r3, 0x8 - adds r1, 0x8 - adds r4, 0x1 - cmp r4, 0x3 - ble _08059372 - movs r0, 0 - cmp r0, 0 - bne _080593B2 - ldr r0, _080593A4 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r7, 0 - bl sub_80522F4 - movs r0, 0 - b _0805940A - .align 2, 0 -_080593A4: .4byte gUnknown_80FE3BC -_080593A8: - movs r2, 0x8D - lsls r2, 1 - adds r0, r1, r2 - ldrh r0, [r0] - mov r12, r0 -_080593B2: - mov r0, r12 - cmp r0, 0 - bne _080593CC - ldr r0, _080593C8 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r7, 0 - bl sub_80522F4 - b _08059408 - .align 2, 0 -_080593C8: .4byte gUnknown_80FE3BC -_080593CC: - adds r0, r5, 0 - mov r1, r12 - bl InitPokemonMove - ldr r0, _0805941C - adds r1, r5, 0 - movs r2, 0 - bl sub_80928C0 - ldrb r1, [r5, 0x1] - movs r0, 0x4 - orrs r0, r1 - movs r1, 0x20 - orrs r0, r1 - strb r0, [r5, 0x1] - ldr r0, _08059420 - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r7, 0 - bl sub_80522F4 - ldr r1, [sp] - adds r1, 0xFB - ldrb r0, [r1] - cmp r0, 0 - bne _08059404 - movs r0, 0x1 - strb r0, [r1] -_08059404: - movs r1, 0x1 - mov r10, r1 -_08059408: - mov r0, r10 -_0805940A: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0805941C: .4byte gUnknown_202DE58 -_08059420: .4byte gUnknown_80FE38C - thumb_func_end SketchMoveAction - - .align 2, 0 diff --git a/ld_script.txt b/ld_script.txt index f8e59bf5f..b8dfdea37 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -226,7 +226,6 @@ SECTIONS { src/charge_move.o(.text); src/move_util.o(.text); src/code_8057824.o(.text); - asm/code_8057824.o(.text); src/code_805A120.o(.text); src/status_actions.o(.text); src/move_checks.o(.text); diff --git a/src/code_8057824.c b/src/code_8057824.c index 0c1bd45bb..19e8e9cc7 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -34,6 +34,8 @@ extern u8 gUnknown_202DE58[]; extern u8 gAvailablePokemonNames[]; extern u8 gUnknown_202DFE8[]; +extern u8 *gUnknown_80FE3BC[]; +extern u8 *gUnknown_80FE38C[]; extern u8 *gUnknown_80FC888[]; extern u8 *gUnknown_80FC8C0[]; extern s16 gUnknown_80F4DEA; @@ -1718,3 +1720,176 @@ bool8 SkillSwapMoveAction(Entity *pokemon, Entity *target, Move *move, s32 param } return flag; } + +// https://decomp.me/scratch/Ul8x5 +#ifdef NONMATCHING +bool32 SketchMoveAction(struct Entity *pokemon, struct Entity *target, struct Move *move) +{ + u16 moveID; + struct EntityInfo *targetInfo; + struct EntityInfo *pokeInfo; + int moveIndex; + register bool32 flag asm("sl"); + struct Move *move1; + s32 other_flag = 0; + + flag = 0; + pokeInfo = pokemon->info; + targetInfo = target->info; + moveID = 0; + + for(moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + move1 = &targetInfo->moves[moveIndex]; + if ((((move1->moveFlags & MOVE_FLAG_EXISTS))) && ((targetInfo->moves[moveIndex].moveFlags & 0x10))) { + moveID = targetInfo->moves[moveIndex].id; + goto _moveIDcheck; + } + } + + if(other_flag == 0) + { + sub_80522F4(pokemon, target, *gUnknown_80FE3BC); + return 0; + } + +_moveIDcheck: + if (moveID == 0) { + sub_80522F4(pokemon, target, *gUnknown_80FE3BC); + } + else { + InitPokemonMove(move, moveID); + sub_80928C0(gUnknown_202DE58, move, 0); + move->moveFlags2 |= MOVE_FLAG2_UNK4; + move->moveFlags2 |= MOVE_FLAG_REPLACE; + sub_80522F4(pokemon, target, *gUnknown_80FE38C); + if (pokeInfo->unkFB == 0) { + pokeInfo->unkFB = 1; + } + flag = 1; + } + return flag; +} + +#else +NAKED +bool32 SketchMoveAction(struct Entity *pokemon, struct Entity *target, struct Move *move) +{ + asm_unified( + "\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x4\n" + "\tadds r6, r0, 0\n" + "\tadds r7, r1, 0\n" + "\tadds r5, r2, 0\n" + "\tmovs r0, 0\n" + "\tmov r10, r0\n" + "\tldr r1, [r6, 0x70]\n" + "\tstr r1, [sp]\n" + "\tldr r0, [r7, 0x70]\n" + "\tmovs r2, 0\n" + "\tmov r12, r2\n" + "\tmovs r4, 0\n" + "\tmovs r1, 0x8C\n" + "\tlsls r1, 1\n" + "\tadds r3, r0, r1\n" + "\tadds r1, r0, 0\n" + "\tmovs r2, 0x1\n" + "\tmov r9, r2\n" + "\tmovs r0, 0x10\n" + "\tmov r8, r0\n" +"_08059372:\n" + "\tldrb r2, [r3]\n" + "\tmov r0, r9\n" + "\tands r0, r2\n" + "\tcmp r0, 0\n" + "\tbeq _08059384\n" + "\tmov r0, r8\n" + "\tands r0, r2\n" + "\tcmp r0, 0\n" + "\tbne _080593A8\n" +"_08059384:\n" + "\tadds r3, 0x8\n" + "\tadds r1, 0x8\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x3\n" + "\tble _08059372\n" + "\tmovs r0, 0\n" + "\tcmp r0, 0\n" + "\tbne _080593B2\n" + "\tldr r0, _080593A4\n" + "\tldr r2, [r0]\n" + "\tadds r0, r6, 0\n" + "\tadds r1, r7, 0\n" + "\tbl sub_80522F4\n" + "\tmovs r0, 0\n" + "\tb _0805940A\n" + "\t.align 2, 0\n" +"_080593A4: .4byte gUnknown_80FE3BC\n" +"_080593A8:\n" + "\tmovs r2, 0x8D\n" + "\tlsls r2, 1\n" + "\tadds r0, r1, r2\n" + "\tldrh r0, [r0]\n" + "\tmov r12, r0\n" +"_080593B2:\n" + "\tmov r0, r12\n" + "\tcmp r0, 0\n" + "\tbne _080593CC\n" + "\tldr r0, _080593C8\n" + "\tldr r2, [r0]\n" + "\tadds r0, r6, 0\n" + "\tadds r1, r7, 0\n" + "\tbl sub_80522F4\n" + "\tb _08059408\n" + "\t.align 2, 0\n" +"_080593C8: .4byte gUnknown_80FE3BC\n" +"_080593CC:\n" + "\tadds r0, r5, 0\n" + "\tmov r1, r12\n" + "\tbl InitPokemonMove\n" + "\tldr r0, _0805941C\n" + "\tadds r1, r5, 0\n" + "\tmovs r2, 0\n" + "\tbl sub_80928C0\n" + "\tldrb r1, [r5, 0x1]\n" + "\tmovs r0, 0x4\n" + "\torrs r0, r1\n" + "\tmovs r1, 0x20\n" + "\torrs r0, r1\n" + "\tstrb r0, [r5, 0x1]\n" + "\tldr r0, _08059420\n" + "\tldr r2, [r0]\n" + "\tadds r0, r6, 0\n" + "\tadds r1, r7, 0\n" + "\tbl sub_80522F4\n" + "\tldr r1, [sp]\n" + "\tadds r1, 0xFB\n" + "\tldrb r0, [r1]\n" + "\tcmp r0, 0\n" + "\tbne _08059404\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r1]\n" +"_08059404:\n" + "\tmovs r1, 0x1\n" + "\tmov r10, r1\n" +"_08059408:\n" + "\tmov r0, r10\n" +"_0805940A:\n" + "\tadd sp, 0x4\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" +"_0805941C: .4byte gUnknown_202DE58\n" +"_08059420: .4byte gUnknown_80FE38C\n" + ); +} +#endif