added MoveFailFlags

This commit is contained in:
Adrienn Tindall 2023-06-15 10:27:07 -05:00
parent 6a718e0490
commit 75ee37006f
5 changed files with 42 additions and 112 deletions

View File

@ -8,117 +8,6 @@
.text
.public AddBattlerVar
thumb_func_start ov12_02251710
ov12_02251710: ; 0x02251710
push {r4, r5, r6, r7, lr}
sub sp, #0xc
str r0, [sp]
mov r0, #0
str r0, [sp, #4]
mov r0, #0x75
add r5, r1, #0
lsl r0, r0, #2
add r7, r5, r0
mov r0, #0xd1
lsl r0, r0, #2
add r6, r5, r0
mov r0, #8
add r4, r5, #0
str r0, [sp, #8]
_0225172E:
mov r0, #0
add r1, r7, #0
mov r2, #0x40
bl MIi_CpuClearFast
mov r0, #0
add r1, r6, #0
mov r2, #4
bl MIi_CpuClearFast
ldr r0, _022517D8 ; =0x00002DB0
ldr r1, [r4, r0]
ldr r0, [sp, #8]
bic r1, r0
ldr r0, _022517D8 ; =0x00002DB0
str r1, [r4, r0]
add r0, #0x20
ldr r0, [r4, r0]
add r1, r0, #1
mov r0, #0x15
lsl r0, r0, #4
ldr r0, [r5, r0]
cmp r1, r0
bge _0225176A
ldr r0, _022517D8 ; =0x00002DB0
ldr r1, [r4, r0]
ldr r0, _022517DC ; =0xFFBFFFFF
and r1, r0
ldr r0, _022517D8 ; =0x00002DB0
str r1, [r4, r0]
_0225176A:
ldr r0, _022517E0 ; =0x00002DAC
ldr r1, [r4, r0]
mov r0, #7
tst r0, r1
beq _0225178A
ldr r0, _022517D8 ; =0x00002DB0
ldr r1, [r4, r0]
mov r0, #1
lsl r0, r0, #0xc
tst r0, r1
beq _0225178A
ldr r0, [sp]
ldr r2, [sp, #4]
add r1, r5, #0
bl UnlockBattlerOutOfCurrentMove
_0225178A:
ldr r0, _022517E0 ; =0x00002DAC
ldr r1, [r4, r0]
mov r0, #7
tst r0, r1
beq _022517AC
ldr r0, _022517D8 ; =0x00002DB0
ldr r1, [r4, r0]
mov r0, #3
lsl r0, r0, #0xa
tst r0, r1
beq _022517AC
ldr r0, _022517D8 ; =0x00002DB0
ldr r1, [r4, r0]
ldr r0, _022517E4 ; =0xFFFFF3FF
and r1, r0
ldr r0, _022517D8 ; =0x00002DB0
str r1, [r4, r0]
_022517AC:
ldr r0, [sp, #4]
add r7, #0x40
add r0, r0, #1
add r6, r6, #4
add r4, #0xc0
str r0, [sp, #4]
cmp r0, #4
blt _0225172E
mov r2, #0x71
lsl r2, r2, #2
ldr r0, [r5, r2]
ldr r1, _022517E8 ; =0xFFEFFFFF
and r0, r1
str r0, [r5, r2]
add r0, r2, #0
add r0, #8
ldr r0, [r5, r0]
add r2, #8
and r0, r1
str r0, [r5, r2]
add sp, #0xc
pop {r4, r5, r6, r7, pc}
.balign 4, 0
_022517D8: .word 0x00002DB0
_022517DC: .word 0xFFBFFFFF
_022517E0: .word 0x00002DAC
_022517E4: .word 0xFFFFF3FF
_022517E8: .word 0xFFEFFFFF
thumb_func_end ov12_02251710
thumb_func_start StruggleCheck
StruggleCheck: ; 0x022517EC
push {r4, r5, r6, r7, lr}

View File

@ -124,6 +124,20 @@ typedef struct UnkBtlCtxSub_76 {
u16 unk288[4];
} UnkBtlCtxSub_76;
typedef struct MoveFailFlags {
u32 paralysis:1;
u32 unk0_1:1;
u32 imprison:1;
u32 infatuation:1;
u32 asleep:1;
u32 unk0_5:1;
u32 flinch:1;
u32 confusion:1;
u32 unk0_8:1;
u32 healBlock:1;
u32 unused:21;
} MoveFailFlags;
typedef struct UnkBattlemonSub {
u32 disabledTurns:3;
u32 encoredTurns:3;
@ -306,7 +320,7 @@ typedef struct BATTLECONTEXT {
SideConditionData fieldSideConditionData[2];
TurnData turnData[4];
SelfTurnData selfTurnData[4];
u32 unk_324[4]; //note: this is an unidentified bitfield array
MoveFailFlags moveFail[4];
UnkBtlCtxSub_76 unk_334;
u32 * unk_2134;
u32 unk_2138;

View File

@ -134,6 +134,8 @@ enum Terrain {
#define CONDITION_PARALYSIS 5
//Status 2
#define STATUS2_FLINCH (1 << 3)
#define STATUS2_RAGE (3 << 10)
#define STATUS2_LOCKED_INTO_MOVE (1 << 12)
#define STATUS2_13 (1 << 13)
#define STATUS2_14 (1 << 14)
@ -144,6 +146,7 @@ enum Terrain {
#define STATUS2_ATTRACT_BATTLER4 (1 << 19)
#define STATUS2_FOCUS_ENERGY (1 << 20)
#define STATUS2_TRANSFORMED (1 << 21)
#define STATUS2_RECHARGE (1 << 22)
#define STATUS2_24 (1 << 24)
#define STATUS2_MEAN_LOOK (1 << 26)
#define STATUS2_27 (1 << 27)

View File

@ -33,6 +33,7 @@ void BattleContext_Init(BATTLECONTEXT *ctx);
void ov12_02251038(BattleSystem *bsys, BATTLECONTEXT *ctx);
void InitSwitchWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId);
void InitFaintedWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId);
void ov12_02251710(BattleSystem *bsys, BATTLECONTEXT *ctx);
//The following functions haven't been decompiled as of now
void ov12_02256F78(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, u8 monIndex);

View File

@ -1939,3 +1939,26 @@ void InitFaintedWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) {
ov12_0225859C(ctx, battlerId);
ov12_022585A8(ctx, battlerId);
}
//BattleContext_InitTurnData..?
void ov12_02251710(BattleSystem *bsys, BATTLECONTEXT *ctx) {
int battlerId;
for (battlerId = 0; battlerId < 4; battlerId++) {
MIi_CpuClearFast(0, (u32 *)&ctx->turnData[battlerId], sizeof(TurnData));
MIi_CpuClearFast(0, (u32 *)&ctx->moveFail[battlerId], sizeof(MoveFailFlags));
ctx->battleMons[battlerId].status2 &= ~STATUS2_FLINCH;
if (ctx->battleMons[battlerId].unk88.rechargeCount + 1 < ctx->totalTurns) {
ctx->battleMons[battlerId].status2 &= ~STATUS2_RECHARGE;
}
if ((ctx->battleMons[battlerId].status & STATUS_SLEEP) && (ctx->battleMons[battlerId].status2 & STATUS2_LOCKED_INTO_MOVE)) {
UnlockBattlerOutOfCurrentMove(bsys, ctx, battlerId);
}
if ((ctx->battleMons[battlerId].status & STATUS_SLEEP) && (ctx->battleMons[battlerId].status2 & STATUS2_RAGE)) {
ctx->battleMons[battlerId].status2 &= ~STATUS2_RAGE;
}
}
ctx->fieldSideConditionData[0].followMeFlag = 0;
ctx->fieldSideConditionData[1].followMeFlag = 0;
}