diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2021-07-01 21:35:25 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2021-07-01 21:35:25 -0400 |
commit | 23872d44fc48a3a879f90443c4d77db1826b8ec8 (patch) | |
tree | a12afb094b79548d0c0700a9936f8970e59b583d /src | |
parent | 050cce5c3ef7e1979c09579d246bbf339833ae6c (diff) |
Decompile debug version of OpponentHandlecmd20
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_controller_opponent.c | 384 | ||||
-rw-r--r-- | src/battle_main.c | 4 |
2 files changed, 67 insertions, 321 deletions
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 1481ca220..d82f2e197 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -25,6 +25,7 @@ #include "text.h" #include "util.h" #include "ewram.h" +#include "constants/moves.h" struct MovePpInfo { @@ -1209,7 +1210,7 @@ void OpponentHandleTrainerThrow(void) #if DEBUG if (gUnknown_02023A14_50 & 0x10) { - trainerPicIndex = gSharedMem[0x160A3]; + trainerPicIndex = gSharedMem[BSTRUCT_OFF(unk160A3)]; } else #endif @@ -1430,320 +1431,65 @@ void OpponentHandlecmd19(void) OpponentBufferExecCompleted(); } -#if DEBUG -NAKED -void OpponentHandlecmd20(void) -{ - asm("\ - push {r4, r5, r6, r7, lr}\n\ - mov r7, sl\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5, r6, r7}\n\ - ldr r6, ._549 @ gActiveBattler\n\ - ldrb r0, [r6]\n\ - lsl r0, r0, #0x9\n\ - ldr r1, ._549 + 4 @ gBattleBufferA\n\ - add r5, r0, r1\n\ - ldr r2, ._549 + 8 @ gUnknown_02023A14_50\n\ - ldrb r1, [r2]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - mov sl, r6\n\ - cmp r0, #0\n\ - beq ._546 @cond_branch\n\ - ldr r0, ._549 + 12 @ gBattleMoves\n\ - mov r9, r0\n\ - ldr r1, ._549 + 16 @ \n\ - mov ip, r1\n\ - add r7, r6, #0\n\ - mov r0, #0x2\n\ - mov r8, r0\n\ - ldr r6, ._549 + 20 @ \n\ -._552:\n\ - ldrb r1, [r7]\n\ - mov r0, r8\n\ - and r0, r0, r1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x19\n\ - add r0, r0, r6\n\ - mov r1, ip\n\ - add r3, r0, r1\n\ - ldrb r1, [r3]\n\ - lsl r0, r1, #0x1\n\ - add r0, r5, r0\n\ - ldrh r2, [r0]\n\ - add r4, r1, #0\n\ - cmp r2, #0\n\ - beq ._547 @cond_branch\n\ - add r0, r4, #1\n\ - strb r0, [r3]\n\ - b ._548\n\ -._550:\n\ - .align 2, 0\n\ -._549:\n\ - .word gActiveBattler\n\ - .word gBattleBufferA+4\n\ - .word gUnknown_02023A14_50\n\ - .word gBattleMoves\n\ - .word +0x2000000\n\ - .word 0x1609e\n\ -._547:\n\ - strb r2, [r3]\n\ -._548:\n\ - ldrb r0, [r7]\n\ - mov r1, r8\n\ - and r1, r1, r0\n\ - lsl r1, r1, #0x18\n\ - lsr r1, r1, #0x19\n\ - add r1, r1, r6\n\ - add r1, r1, ip\n\ - ldrb r0, [r1]\n\ - cmp r0, #0x3\n\ - bls ._551 @cond_branch\n\ - mov r0, #0x0\n\ - strb r0, [r1]\n\ -._551:\n\ - cmp r2, #0\n\ - beq ._552 @cond_branch\n\ - lsl r0, r2, #0x1\n\ - add r0, r0, r2\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r9\n\ - ldrb r3, [r0, #0x6]\n\ - mov r0, #0x12\n\ - and r0, r0, r3\n\ - cmp r0, #0\n\ - beq ._553 @cond_branch\n\ - mov r1, sl\n\ - ldrb r0, [r1]\n\ - b ._561\n\ -._553:\n\ - ldr r0, ._559 @ gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._557 @cond_branch\n\ - ldr r0, ._559 + 4 @ gUnknown_02023A14_50\n\ - ldrb r1, [r0]\n\ - mov r5, #0x2\n\ - add r0, r5, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._556 @cond_branch\n\ - cmp r3, #0\n\ - bne ._557 @cond_branch\n\ - mov r1, sl\n\ - ldrb r0, [r1]\n\ - bl GetBattlerPosition\n\ - mov r1, #0x2\n\ - eor r0, r0, r1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - b ._558\n\ -._560:\n\ - .align 2, 0\n\ -._559:\n\ - .word gBattleTypeFlags\n\ - .word gUnknown_02023A14_50\n\ -._556:\n\ - bl Random\n\ - add r1, r5, #0\n\ - and r1, r1, r0\n\ - lsl r1, r1, #0x10\n\ - lsr r0, r1, #0x10\n\ - b ._561\n\ -._557:\n\ - mov r0, #0x0\n\ -._558:\n\ - bl GetBattlerAtPosition\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ -._561:\n\ - lsl r2, r0, #0x8\n\ - orr r2, r2, r4\n\ - mov r0, #0x1\n\ - mov r1, #0xa\n\ -._569:\n\ - bl BtlController_EmitTwoReturnValues\n\ -._573:\n\ - bl OpponentBufferExecCompleted\n\ - b ._562\n\ -._546:\n\ - ldr r0, ._567 @ gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - mov r0, #0x93\n\ - lsl r0, r0, #0x3\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._563 @cond_branch\n\ - bl BattleAI_SetupAIData\n\ - bl BattleAI_GetAIActionToUse\n\ - lsl r0, r0, #0x18\n\ - lsr r4, r0, #0x18\n\ - cmp r4, #0x4\n\ - beq ._564 @cond_branch\n\ - cmp r4, #0x5\n\ - bne ._565 @cond_branch\n\ - mov r0, #0x1\n\ - mov r1, #0x4\n\ - b ._566\n\ -._568:\n\ - .align 2, 0\n\ -._567:\n\ - .word gBattleTypeFlags\n\ -._564:\n\ - mov r0, #0x1\n\ - mov r1, #0x3\n\ -._566:\n\ - mov r2, #0x0\n\ - b ._569\n\ -._565:\n\ - ldr r3, ._574 @ gBattleMoves\n\ - lsl r0, r4, #0x1\n\ - add r2, r5, r0\n\ - ldrh r1, [r2]\n\ - lsl r0, r1, #0x1\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r3\n\ - ldrb r1, [r0, #0x6]\n\ - mov r0, #0x12\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._570 @cond_branch\n\ - ldr r1, ._574 + 4 @ gBattlerTarget\n\ - ldrb r0, [r6]\n\ - strb r0, [r1]\n\ -._570:\n\ - ldrh r1, [r2]\n\ - lsl r0, r1, #0x1\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r3\n\ - ldrb r1, [r0, #0x6]\n\ - mov r0, #0x8\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._572 @cond_branch\n\ - mov r0, #0x0\n\ - bl GetBattlerAtPosition\n\ - ldr r5, ._574 + 4 @ gBattlerTarget\n\ - strb r0, [r5]\n\ - ldr r0, ._574 + 8 @ gAbsentBattlerFlags\n\ - ldrb r1, [r0]\n\ - ldr r2, ._574 + 12 @ gBitTable\n\ - ldrb r0, [r5]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r2\n\ - ldr r0, [r0]\n\ - and r1, r1, r0\n\ - cmp r1, #0\n\ - beq ._572 @cond_branch\n\ - mov r0, #0x2\n\ - bl GetBattlerAtPosition\n\ - strb r0, [r5]\n\ -._572:\n\ - ldr r0, ._574 + 4 @ gBattlerTarget\n\ - ldrb r2, [r0]\n\ - lsl r2, r2, #0x8\n\ - orr r2, r2, r4\n\ - mov r0, #0x1\n\ - mov r1, #0xa\n\ - bl BtlController_EmitTwoReturnValues\n\ - b ._573\n\ -._575:\n\ - .align 2, 0\n\ -._574:\n\ - .word gBattleMoves\n\ - .word gBattlerTarget\n\ - .word gAbsentBattlerFlags\n\ - .word gBitTable\n\ -._563:\n\ - mov r6, #0x3\n\ -._576:\n\ - bl Random\n\ - add r4, r0, #0\n\ - and r4, r4, r6\n\ - lsl r0, r4, #0x1\n\ - add r0, r5, r0\n\ - ldrh r2, [r0]\n\ - cmp r2, #0\n\ - beq ._576 @cond_branch\n\ - ldr r1, ._579 @ gBattleMoves\n\ - lsl r0, r2, #0x1\n\ - add r0, r0, r2\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x6]\n\ - mov r0, #0x12\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._577 @cond_branch\n\ - ldr r0, ._579 + 4 @ gActiveBattler\n\ - ldrb r2, [r0]\n\ - lsl r2, r2, #0x8\n\ - b ._578\n\ -._580:\n\ - .align 2, 0\n\ -._579:\n\ - .word gBattleMoves\n\ - .word gActiveBattler\n\ -._577:\n\ - ldr r0, ._583 @ gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._581 @cond_branch\n\ - bl Random\n\ - mov r1, #0x2\n\ - and r1, r1, r0\n\ - lsl r1, r1, #0x18\n\ - lsr r1, r1, #0x18\n\ - add r0, r1, #0\n\ - bl GetBattlerAtPosition\n\ - add r2, r0, #0\n\ - lsl r2, r2, #0x18\n\ - lsr r2, r2, #0x10\n\ -._578:\n\ - orr r2, r2, r4\n\ - mov r0, #0x1\n\ - mov r1, #0xa\n\ - bl BtlController_EmitTwoReturnValues\n\ - b ._582\n\ -._584:\n\ - .align 2, 0\n\ -._583:\n\ - .word gBattleTypeFlags\n\ -._581:\n\ - mov r0, #0x0\n\ - bl GetBattlerAtPosition\n\ - add r2, r0, #0\n\ - lsl r2, r2, #0x18\n\ - lsr r2, r2, #0x10\n\ - orr r2, r2, r4\n\ - mov r0, #0x1\n\ - mov r1, #0xa\n\ - bl BtlController_EmitTwoReturnValues\n\ -._582:\n\ - bl OpponentBufferExecCompleted\n\ -._562:\n\ - pop {r3, r4, r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov sl, r5\n\ - pop {r4, r5, r6, r7}\n\ - pop {r0}\n\ - bx r0"); -} -#else void OpponentHandlecmd20(void) { u8 chosenMoveId; + u16 move; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)&gBattleBufferA[gActiveBattler][4]; - +#if DEBUG + u16 battler; + if (gUnknown_02023A14_50 & 4) + { + // Move selection cycle + move = MOVE_NONE; + while (move == MOVE_NONE) + { + move = moveInfo->moves[gSharedMem[BSTRUCT_OFF(dbgAICycleMoveTracker) + ((gActiveBattler & BIT_FLANK) >> 1)]]; + chosenMoveId = gSharedMem[BSTRUCT_OFF(dbgAICycleMoveTracker) + ((gActiveBattler & BIT_FLANK) >> 1)]; + if (move != MOVE_NONE) + { + gSharedMem[BSTRUCT_OFF(dbgAICycleMoveTracker) + ((gActiveBattler & BIT_FLANK) >> 1)]++; + } + else + { + gSharedMem[BSTRUCT_OFF(dbgAICycleMoveTracker) + ((gActiveBattler & BIT_FLANK) >> 1)] = 0; + } + if (gSharedMem[BSTRUCT_OFF(dbgAICycleMoveTracker) + ((gActiveBattler & BIT_FLANK) >> 1)] >= 4) + { + gSharedMem[BSTRUCT_OFF(dbgAICycleMoveTracker) + ((gActiveBattler & BIT_FLANK) >> 1)] = 0; + } + } + if (gBattleMoves[move].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) + { + battler = gActiveBattler; + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (gUnknown_02023A14_50 & 2) + { + if (gBattleMoves[move].target == MOVE_TARGET_SELECTED) + { + battler = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK); + } + else + { + battler = GetBattlerAtPosition(0); + } + } + else + { + battler = (Random() & BIT_FLANK); + } + } + else + { + battler = GetBattlerAtPosition(0); + } + BtlController_EmitTwoReturnValues(1, B_ACTION_EXEC_SCRIPT, (battler << 8) | chosenMoveId); + OpponentBufferExecCompleted(); + } + else +#endif //DEBUG if (gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER)) { BattleAI_SetupAIData(); @@ -1760,7 +1506,7 @@ void OpponentHandlecmd20(void) default: if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) gBattlerTarget = gActiveBattler; - if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & 8) + if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH) { gBattlerTarget = GetBattlerAtPosition(0); if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) @@ -1773,25 +1519,25 @@ void OpponentHandlecmd20(void) } else { - u16 move; - - do + while (1) { - // Can't for the life of me get this to match. chosenMoveId = Random() & 3; move = moveInfo->moves[chosenMoveId]; - } while (move == 0); + if (move != MOVE_NONE) + { + break; + } + } if (gBattleMoves[move].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) BtlController_EmitTwoReturnValues(1, B_ACTION_EXEC_SCRIPT, chosenMoveId | (gActiveBattler << 8)); else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - BtlController_EmitTwoReturnValues(1, B_ACTION_EXEC_SCRIPT, chosenMoveId | (GetBattlerAtPosition(Random() & 2) << 8)); + BtlController_EmitTwoReturnValues(1, B_ACTION_EXEC_SCRIPT, chosenMoveId | (GetBattlerAtPosition(Random() & BIT_FLANK) << 8)); else BtlController_EmitTwoReturnValues(1, B_ACTION_EXEC_SCRIPT, chosenMoveId | (GetBattlerAtPosition(0) << 8)); OpponentBufferExecCompleted(); } } -#endif void OpponentHandleOpenBag(void) { diff --git a/src/battle_main.c b/src/battle_main.c index 7e200adfe..f09ffe29d 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3508,8 +3508,8 @@ void BattleStartClearSetData(void) gBattleResults.caughtNick[i] = 0; } #if DEBUG - gBattleStruct->unk1609E = 0; - gBattleStruct->unk1609F = 0; + gSharedMem[BSTRUCT_OFF(dbgAICycleMoveTracker) + 0] = 0; + gSharedMem[BSTRUCT_OFF(dbgAICycleMoveTracker) + 1] = 0; #endif } |