From 7165b02a6f47a58b1a465aaeb4e8cc91409ea21c Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Sun, 9 Jul 2023 13:59:11 -0400 Subject: [PATCH 01/18] Document SelfTurnData variables --- asm/overlay_12_0224E4FC_s.s | 264 ------------------------------- include/battle.h | 10 +- include/constants/moves.h | 6 +- include/move.h | 2 +- include/overlay_12_0224E4FC.h | 4 +- src/battle/battle_command.c | 4 +- src/battle/overlay_12_0224E4FC.c | 89 +++++++++-- src/move.c | 2 +- 8 files changed, 88 insertions(+), 293 deletions(-) diff --git a/asm/overlay_12_0224E4FC_s.s b/asm/overlay_12_0224E4FC_s.s index 4f6a174fee..c069142f48 100644 --- a/asm/overlay_12_0224E4FC_s.s +++ b/asm/overlay_12_0224E4FC_s.s @@ -16,270 +16,6 @@ .public GetHeldItemFlingPower .public ov12_02256F28 - thumb_func_start CheckItemEffectOnUTurn -CheckItemEffectOnUTurn: ; 0x02257FA0 - push {r4, r5, r6, r7, lr} - sub sp, #0x14 - add r5, r1, #0 - ldr r1, [r5, #0x64] - str r0, [sp] - add r0, r5, #0 - add r4, r2, #0 - mov r6, #0 - bl GetBattlerHeldItemEffect - str r0, [sp, #0xc] - ldr r1, [r5, #0x64] - add r0, r5, #0 - add r2, r6, #0 - bl GetHeldItemModifier - str r0, [sp, #0x10] - ldr r1, [r5, #0x6c] - add r0, r5, #0 - bl GetBattlerHeldItemEffect - add r7, r0, #0 - ldr r1, [r5, #0x6c] - add r0, r5, #0 - add r2, r6, #0 - bl GetHeldItemModifier - str r0, [sp, #8] - ldr r0, [sp] - ldr r1, [r5, #0x64] - bl BattleSystem_GetFieldSide - str r0, [sp, #4] - ldr r0, [sp, #0xc] - cmp r0, #0x58 - bne _0225803C - ldr r0, _02258164 ; =0x0000213C - ldr r1, [r5, r0] - mov r0, #2 - lsl r0, r0, #0xc - tst r0, r1 - beq _0225803C - ldr r0, [r5, #0x64] - mov r1, #0x1c - mul r1, r0 - add r2, r5, r1 - mov r1, #0xbb - lsl r1, r1, #2 - ldr r2, [r2, r1] - cmp r2, #0 - beq _0225803C - ldr r1, [r5, #0x6c] - cmp r0, r1 - beq _0225803C - mov r1, #0xc0 - mul r1, r0 - ldr r3, _02258168 ; =0x00002D8C - add r1, r5, r1 - ldr r0, [r1, r3] - add r3, r3, #4 - ldr r1, [r1, r3] - cmp r0, r1 - bhs _0225803C - cmp r0, #0 - beq _0225803C - ldr r1, [sp, #0x10] - neg r0, r2 - bl DamageDivide - ldr r1, _0225816C ; =0x0000215C - mov r6, #1 - str r0, [r5, r1] - mov r0, #0x46 - ldr r1, [r5, #0x64] - lsl r0, r0, #2 - str r1, [r5, r0] - mov r0, #0xd5 - str r0, [r4] -_0225803C: - ldr r0, [sp, #0xc] - cmp r0, #0x62 - bne _0225809E - ldr r1, [r5, #0x64] - add r0, r5, #0 - bl GetBattlerAbility - cmp r0, #0x62 - beq _0225809E - ldr r0, _02258164 ; =0x0000213C - ldr r1, [r5, r0] - mov r0, #2 - lsl r0, r0, #0xc - tst r0, r1 - beq _0225809E - ldr r0, _02258170 ; =0x00003044 - ldr r0, [r5, r0] - lsl r0, r0, #4 - add r1, r5, r0 - mov r0, #0x3e - lsl r0, r0, #4 - ldrb r0, [r1, r0] - cmp r0, #2 - beq _0225809E - ldr r1, [r5, #0x64] - mov r0, #0xc0 - add r2, r1, #0 - mul r2, r0 - ldr r3, _02258168 ; =0x00002D8C - add r2, r5, r2 - ldr r1, [r2, r3] - cmp r1, #0 - beq _0225809E - add r1, r3, #4 - ldr r1, [r2, r1] - sub r0, #0xc1 - mul r0, r1 - mov r1, #0xa - bl DamageDivide - ldr r1, _0225816C ; =0x0000215C - mov r6, #1 - str r0, [r5, r1] - mov r0, #0x46 - ldr r1, [r5, #0x64] - lsl r0, r0, #2 - str r1, [r5, r0] - mov r0, #0xd6 - str r0, [r4] -_0225809E: - cmp r7, #0x2e - bne _022580F2 - ldr r1, [r5, #0x64] - mov r0, #0xc0 - mul r0, r1 - add r2, r5, r0 - ldr r0, _02258168 ; =0x00002D8C - ldr r0, [r2, r0] - cmp r0, #0 - beq _022580F2 - add r0, r5, #0 - bl GetBattlerAbility - cmp r0, #0x62 - beq _022580F2 - ldr r1, [r5, #0x6c] - mov r0, #0x1c - mul r0, r1 - add r1, r5, r0 - mov r0, #0xb6 - lsl r0, r0, #2 - ldr r0, [r1, r0] - cmp r0, #0 - beq _022580F2 - ldr r0, [r5, #0x64] - mov r1, #0xc0 - add r2, r0, #0 - mul r2, r1 - ldr r0, _02258174 ; =0x00002D90 - add r2, r5, r2 - ldr r2, [r2, r0] - sub r1, #0xc1 - add r0, r2, #0 - mul r0, r1 - ldr r1, [sp, #8] - bl DamageDivide - ldr r1, _0225816C ; =0x0000215C - mov r6, #1 - str r0, [r5, r1] - lsr r0, r1, #5 - str r0, [r4] -_022580F2: - cmp r7, #0x74 - bne _0225815E - ldr r0, [r5, #0x64] - mov r1, #0xc0 - mul r1, r0 - add r3, r5, r1 - ldr r1, _02258168 ; =0x00002D8C - ldr r2, [r3, r1] - cmp r2, #0 - beq _0225815E - add r1, #0x2c - ldrh r1, [r3, r1] - cmp r1, #0 - bne _0225815E - add r1, r5, r0 - ldr r0, _02258178 ; =0x0000219C - ldrb r0, [r1, r0] - bl MaskOfFlagNo - ldr r1, [sp, #4] - lsl r1, r1, #3 - add r2, r5, r1 - mov r1, #0x71 - lsl r1, r1, #2 - ldr r1, [r2, r1] - lsl r1, r1, #3 - lsr r1, r1, #0x1a - tst r0, r1 - bne _0225815E - ldr r1, [r5, #0x6c] - mov r0, #0x1c - mul r0, r1 - add r2, r5, r0 - mov r0, #0xb6 - lsl r0, r0, #2 - ldr r1, [r2, r0] - cmp r1, #0 - bne _02258146 - add r0, #8 - ldr r0, [r2, r0] - cmp r0, #0 - beq _0225815E -_02258146: - ldr r0, _02258170 ; =0x00003044 - ldr r0, [r5, r0] - lsl r0, r0, #4 - add r1, r5, r0 - ldr r0, _0225817C ; =0x000003E9 - ldrb r1, [r1, r0] - mov r0, #1 - tst r1, r0 - beq _0225815E - mov r1, #0xd8 - str r1, [r4] - add r6, r0, #0 -_0225815E: - add r0, r6, #0 - add sp, #0x14 - pop {r4, r5, r6, r7, pc} - .balign 4, 0 -_02258164: .word 0x0000213C -_02258168: .word 0x00002D8C -_0225816C: .word 0x0000215C -_02258170: .word 0x00003044 -_02258174: .word 0x00002D90 -_02258178: .word 0x0000219C -_0225817C: .word 0x000003E9 - thumb_func_end CheckItemEffectOnUTurn - - thumb_func_start CheckIgnorePressure -CheckIgnorePressure: ; 0x02258180 - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - cmp r2, #0xff - beq _022581B0 - add r1, r2, #0 - bl GetBattlerAbility - cmp r0, #0x2e - bne _022581B0 - ldr r0, _022581B4 ; =0x00002D6C - add r1, r5, r0 - mov r0, #0xc0 - mul r0, r4 - add r0, r1, r0 - lsl r1, r4, #1 - add r2, r5, r1 - ldr r1, _022581B8 ; =0x000030BC - ldrh r2, [r2, r1] - ldrb r1, [r0, r2] - cmp r1, #0 - beq _022581B0 - sub r1, r1, #1 - strb r1, [r0, r2] -_022581B0: - pop {r3, r4, r5, pc} - nop -_022581B4: .word 0x00002D6C -_022581B8: .word 0x000030BC - thumb_func_end CheckIgnorePressure - thumb_func_start ov12_022581BC ov12_022581BC: ; 0x022581BC push {r4, lr} diff --git a/include/battle.h b/include/battle.h index 081208b333..413ed9ae0a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -86,12 +86,12 @@ typedef struct SelfTurnData { u32 unk0_5:1; u32 rolloutCount:3; u32 unk0_9:23; - int unk4; - int unk8; - int unkC; - int unk10; + int physicalDamage; + int battlerIdPhysicalAttacker; + int specialDamage; + int battlerIdSpecialAttacker; int unk14; - int unk18; + int shellBellDamage; } SelfTurnData; typedef struct UnkBtlCtxSub_76 { diff --git a/include/constants/moves.h b/include/constants/moves.h index bdf243c14c..1d383b3ce5 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -472,9 +472,9 @@ #define MOVE_OMINOUS_WIND 466 #define MOVE_SHADOW_FORCE 467 -#define CLASS_PHYSICAL 0 -#define CLASS_SPECIAL 1 -#define CLASS_STATUS 2 +#define CATEGORY_PHYSICAL 0 +#define CATEGORY_SPECIAL 1 +#define CATEGORY_STATUS 2 #define RANGE_0 0 #define RANGE_SINGLE_TARGET (1 << 0) diff --git a/include/move.h b/include/move.h index 1289a135ff..ab92c10070 100644 --- a/include/move.h +++ b/include/move.h @@ -3,7 +3,7 @@ typedef struct MoveTbl { u16 effect; - u8 class; + u8 category; u8 power; u8 type; u8 accuracy; diff --git a/include/overlay_12_0224E4FC.h b/include/overlay_12_0224E4FC.h index e06250720d..f03bd96208 100644 --- a/include/overlay_12_0224E4FC.h +++ b/include/overlay_12_0224E4FC.h @@ -115,6 +115,8 @@ s32 GetItemVar(BATTLECONTEXT *ctx, u16 itemNo, u16 var); int ov12_02257E98(BattleSystem *bsys, BATTLECONTEXT *ctx, int side); void ov12_02257EC0(BattleSystem *bsys, BATTLECONTEXT *ctx); BOOL CheckStatusEffectsSubstitute(BATTLECONTEXT *bsys, int battlerId, int status); +BOOL CheckItemEffectOnUTurn(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script); +void CheckIgnorePressure(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget); //The following functions are static, but the rest of the file is still being worked on BOOL ov12_02251C74(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget, int index); @@ -122,9 +124,7 @@ BOOL ov12_02251C74(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarge //The following functions haven't been decompiled as of now void Link_CheckTimeout(BATTLECONTEXT *ctx); BOOL CheckLegalMeFirstMove(BATTLECONTEXT *ctx, u16 move); -void CheckIgnorePressure(BATTLECONTEXT *ctx, int battlerIdA, int battlerIdB); int ov12_02253DA0(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); -BOOL CheckItemEffectOnUTurn(BattleSystem *bsys, BATTLECONTEXT *ctx, int *work); u32 BattleSystem_GetBattleType(BattleSystem *bsys); u32 BattleSystem_GetBattleFlags(BattleSystem *bsys); u32 ov12_022581D4(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 a2, int battlerId); diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index dc99c7d70d..d53f6aa868 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -6039,13 +6039,13 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BATTLECONTEXT *ctx, i case 64: return &ctx->battlerIdTargetTemp; case 65: - return &ctx->selfTurnData[ctx->battlerIdTarget].unk4; + return &ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage; case 66: return &ctx->turnData[ctx->battlerIdTemp].unk3C; case 67: return &ctx->turnData[ctx->battlerIdTarget].unk3C; case 68: - return &ctx->selfTurnData[ctx->battlerIdAttacker].unk18; + return &ctx->selfTurnData[ctx->battlerIdAttacker].shellBellDamage; case 69: return &ctx->battlersOnField; case 70: diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 038b316fa3..162fd29ab3 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -3911,7 +3911,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && !(ctx->linkStatus & 0x20) && !(ctx->linkStatus2 & 0x10) && - (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && + (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && (BattleSystem_Random(bsys) % 10 < 3)) { ctx->statChangeType = 3; @@ -3935,7 +3935,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script if (ctx->battleMons[ctx->battlerIdTarget].hp && !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && ctx->moveNoCur != MOVE_STRUGGLE && - (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && + (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && !(ctx->linkStatus2 & 0x10) && ctx->unk_334.moveData[ctx->moveNoCur].power && GetBattlerVar(ctx, ctx->battlerIdTarget, BMON_DATA_TYPE_1, NULL) != moveType && @@ -3951,7 +3951,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && !(ctx->linkStatus & 0x20) && !(ctx->linkStatus2 & 0x10) && - (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && + (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1)) { ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, 8); ctx->battlerIdTemp = ctx->battlerIdAttacker; @@ -3965,7 +3965,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && !(ctx->linkStatus & 0x20) && !(ctx->linkStatus2 & 0x10) && - (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && + (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && (BattleSystem_Random(bsys) % 10 < 3)) { switch (BattleSystem_Random(bsys) % 3) { @@ -3992,7 +3992,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && !(ctx->linkStatus & 0x20) && !(ctx->linkStatus2 & 0x10) && - (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && + (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && (BattleSystem_Random(bsys) % 10 < 3)) { ctx->statChangeType = 3; @@ -4008,7 +4008,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && !(ctx->linkStatus & 0x20) && !(ctx->linkStatus2 & 0x10) && - (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && + (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && ((BattleSystem_Random(bsys) % 10) < 3)) { ctx->statChangeType = 3; @@ -4024,7 +4024,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && !(ctx->linkStatus & 0x20) && !(ctx->linkStatus2 & 0x10) && - (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && + (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && ctx->battleMons[ctx->battlerIdTarget].hp && ((BattleSystem_Random(bsys) % 10) < 3)) { @@ -4915,7 +4915,7 @@ BOOL CheckItemEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script) { !(ctx->battleMons[ctx->battlerIdAttacker].item) && !(ctx->fieldSideConditionData[side].battlerBitKnockedOffItem & MaskOfFlagNo(ctx->selectedMonIndex[ctx->battlerIdAttacker])) && ctx->moveNoCur != MOVE_KNOCK_OFF && - (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && + (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && !(ctx->linkStatus2 & 0x10) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1)) { *script = 216; @@ -4926,7 +4926,7 @@ BOOL CheckItemEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script) { if (ctx->battleMons[ctx->battlerIdAttacker].hp && GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_MAGIC_GUARD && !(ctx->linkStatus2 & 0x10) && - ctx->selfTurnData[ctx->battlerIdTarget].unk4) { + ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage) { ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, boost); *script = 266; ret = TRUE; @@ -4935,7 +4935,7 @@ BOOL CheckItemEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script) { case HOLD_EFFECT_RECOIL_SPECIAL: //rowap berry if (ctx->battleMons[ctx->battlerIdAttacker].hp && GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_MAGIC_GUARD && - ctx->selfTurnData[ctx->battlerIdTarget].unkC) { + ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) { ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, boost); *script = 266; ret = TRUE; @@ -5973,7 +5973,7 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC movePower = movePower * 15 / 10; } - moveCategory = ctx->unk_334.moveData[moveNo].class; + moveCategory = ctx->unk_334.moveData[moveNo].category; if (calcAttacker.ability == ABILITY_HUGE_POWER || calcAttacker.ability == ABILITY_PURE_POWER) { monAtk *= 2; @@ -6037,11 +6037,11 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC movePower = movePower * (100 + calcAttacker.mod) / 100; } - if (calcAttacker.item == HOLD_EFFECT_POWER_UP_PHYS && moveCategory == CLASS_PHYSICAL) { + if (calcAttacker.item == HOLD_EFFECT_POWER_UP_PHYS && moveCategory == CATEGORY_PHYSICAL) { movePower = movePower * (100 + calcAttacker.mod) / 100; } - if (calcAttacker.item == HOLD_EFFECT_POWER_UP_SPEC && moveCategory == CLASS_SPECIAL) { + if (calcAttacker.item == HOLD_EFFECT_POWER_UP_SPEC && moveCategory == CATEGORY_SPECIAL) { movePower = movePower * (100 + calcAttacker.mod) / 100; } @@ -6182,7 +6182,7 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC monDef /= 2; } - if (moveCategory == CLASS_PHYSICAL) { + if (moveCategory == CATEGORY_PHYSICAL) { if (crit > 1) { if (statChangeAtk > 6) { dmg = monAtk * sStatChangeTable[statChangeAtk][0] / sStatChangeTable[statChangeAtk][1]; @@ -6220,7 +6220,7 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC dmg /= 2; } } - } else if (moveCategory == CLASS_SPECIAL) { + } else if (moveCategory == CATEGORY_SPECIAL) { if (crit > 1) { if (statChangeSpAtk > 6) { dmg = monSpAtk * sStatChangeTable[statChangeSpAtk][0] / sStatChangeTable[statChangeSpAtk][1]; @@ -6478,3 +6478,62 @@ BOOL CheckStatusEffectsSubstitute(BATTLECONTEXT *ctx, int battlerId, int status) return ret; } + +BOOL CheckItemEffectOnUTurn(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script) { + BOOL ret = FALSE; + int itemAttacker = GetBattlerHeldItemEffect(ctx, ctx->battlerIdAttacker); + int modAttacker = GetHeldItemModifier(ctx, ctx->battlerIdAttacker, 0); + int itemTarget = GetBattlerHeldItemEffect(ctx, ctx->battlerIdTarget); + int modTarget = GetHeldItemModifier(ctx, ctx->battlerIdTarget, 0); + int side = BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker); + + if (itemAttacker == HOLD_EFFECT_HP_RESTORE_ON_DMG && + (ctx->linkStatus & (1 << 13)) && + (ctx->selfTurnData[ctx->battlerIdAttacker].shellBellDamage) && + (ctx->battlerIdAttacker != ctx->battlerIdTarget) && + (ctx->battleMons[ctx->battlerIdAttacker].hp < ctx->battleMons[ctx->battlerIdAttacker].maxHp) && + ctx->battleMons[ctx->battlerIdAttacker].hp) { + ctx->hpCalc = DamageDivide(ctx->selfTurnData[ctx->battlerIdAttacker].shellBellDamage * -1, modAttacker); + ctx->battlerIdTemp = ctx->battlerIdAttacker; + *script = 213; + ret = TRUE; + } + + if (itemAttacker == HOLD_EFFECT_HP_DRAIN_ON_ATK && + GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_MAGIC_GUARD && + (ctx->linkStatus & (1 << 13)) && + ctx->unk_334.moveData[ctx->moveNoCur].category != CATEGORY_STATUS && + ctx->battleMons[ctx->battlerIdAttacker].hp) { + ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, 10); + ctx->battlerIdTemp = ctx->battlerIdAttacker; + *script = 214; + ret = TRUE; + } + + if (itemTarget == HOLD_EFFECT_RECOIL_PHYSICAL && + ctx->battleMons[ctx->battlerIdAttacker].hp && + GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_MAGIC_GUARD && + ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage) { + ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, modTarget); + *script = 266; + ret = TRUE; + } + + if (itemTarget == HOLD_EFFECT_DMG_USER_CONTACT_XFR && + ctx->battleMons[ctx->battlerIdAttacker].hp && + !ctx->battleMons[ctx->battlerIdAttacker].item && + !(ctx->fieldSideConditionData[side].battlerBitKnockedOffItem & MaskOfFlagNo(ctx->selectedMonIndex[ctx->battlerIdAttacker])) && + (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && + (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1)) { + *script = 216; + ret = TRUE; + } + + return ret; +} + +void CheckIgnorePressure(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget) { + if (battlerIdTarget != BATTLER_NONE && GetBattlerAbility(ctx, battlerIdTarget) == ABILITY_PRESSURE && ctx->battleMons[battlerIdAttacker].movePPCur[ctx->movePos[battlerIdAttacker]]) { + ctx->battleMons[battlerIdAttacker].movePPCur[ctx->movePos[battlerIdAttacker]]--; + } +} diff --git a/src/move.c b/src/move.c index 9822fb9b5d..8b2d105da1 100644 --- a/src/move.c +++ b/src/move.c @@ -29,7 +29,7 @@ u32 GetMoveTblAttr(MOVE * moveTbl, MoveAttr attr) { case MOVEATTR_EFFECT: return moveTbl->effect; case MOVEATTR_CLASS: - return moveTbl->class; + return moveTbl->category; case MOVEATTR_POWER: return moveTbl->power; case MOVEATTR_TYPE: From d622a16cefdbb71e76dd635a3d3ecd4f6216bfb6 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Mon, 10 Jul 2023 11:47:20 -0400 Subject: [PATCH 02/18] Finish functions --- asm/overlay_12_0224E4FC_s.s | 934 +------------------------------ include/battle.h | 7 +- include/battle_system.h | 1 + include/constants/moves.h | 4 +- include/overlay_12_0224E4FC.h | 13 +- src/battle/battle_command.c | 4 +- src/battle/overlay_12_0224E4FC.c | 385 ++++++++++++- 7 files changed, 399 insertions(+), 949 deletions(-) diff --git a/asm/overlay_12_0224E4FC_s.s b/asm/overlay_12_0224E4FC_s.s index c069142f48..d67ff397be 100644 --- a/asm/overlay_12_0224E4FC_s.s +++ b/asm/overlay_12_0224E4FC_s.s @@ -6,937 +6,6 @@ .include "overlay_12_0224E4FC.inc" .include "global.inc" - .text - .public AddBattlerVar - .public sTypeEffectiveness - .public ov12_02251C74 - .public CheckMoveEffectOnField - .public GetHeldItemStealBerryEffect - .public GetHeldItemFlingEffect - .public GetHeldItemFlingPower - .public ov12_02256F28 - - thumb_func_start ov12_022581BC -ov12_022581BC: ; 0x022581BC - push {r4, lr} - add r4, r1, #0 - bl ov12_0223BFEC - cmp r0, #0 - beq _022581D0 - mov r0, #0x2b - str r0, [r4, #8] - mov r0, #1 - pop {r4, pc} -_022581D0: - mov r0, #0 - pop {r4, pc} - thumb_func_end ov12_022581BC - - thumb_func_start ov12_022581D4 -ov12_022581D4: ; 0x022581D4 - push {r4, lr} - add r4, r1, #0 - cmp r2, #0xe - bhi _02258294 - add r1, r2, r2 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_022581E8: ; jump table - .short _02258206 - _022581E8 - 2 ; case 0 - .short _02258218 - _022581E8 - 2 ; case 1 - .short _0225822E - _022581E8 - 2 ; case 2 - .short _02258236 - _022581E8 - 2 ; case 3 - .short _0225823E - _022581E8 - 2 ; case 4 - .short _02258244 - _022581E8 - 2 ; case 5 - .short _0225824A - _022581E8 - 2 ; case 6 - .short _02258256 - _022581E8 - 2 ; case 7 - .short _02258262 - _022581E8 - 2 ; case 8 - .short _0225826C - _022581E8 - 2 ; case 9 - .short _02258274 - _022581E8 - 2 ; case 10 - .short _0225827A - _022581E8 - 2 ; case 11 - .short _02258282 - _022581E8 - 2 ; case 12 - .short _0225828C - _022581E8 - 2 ; case 13 - .short _02258290 - _022581E8 - 2 ; case 14 -_02258206: - add r1, r3, #0 - bl BattleSystem_GetFieldSide - lsl r0, r0, #2 - add r1, r4, r0 - mov r0, #0x6f - lsl r0, r0, #2 - ldr r0, [r1, r0] - pop {r4, pc} -_02258218: - add r1, r3, #0 - bl BattleSystem_GetFieldSide - lsl r0, r0, #3 - add r1, r4, r0 - mov r0, #0x71 - lsl r0, r0, #2 - ldr r0, [r1, r0] - lsl r0, r0, #0x11 - lsr r0, r0, #0x1d - pop {r4, pc} -_0225822E: - ldr r0, _0225829C ; =0x0000219C - add r1, r4, r3 - ldrb r0, [r1, r0] - pop {r4, pc} -_02258236: - mov r0, #0x15 - lsl r0, r0, #4 - ldr r0, [r4, r0] - pop {r4, pc} -_0225823E: - ldr r0, _022582A0 ; =0x00003109 - ldrb r0, [r4, r0] - pop {r4, pc} -_02258244: - ldr r0, _022582A4 ; =0x0000311D - ldrb r0, [r4, r0] - pop {r4, pc} -_0225824A: - lsl r0, r3, #2 - add r1, r4, r0 - mov r0, #0x55 - lsl r0, r0, #2 - ldr r0, [r1, r0] - pop {r4, pc} -_02258256: - lsl r0, r3, #2 - add r1, r4, r0 - mov r0, #0x59 - lsl r0, r0, #2 - ldr r0, [r1, r0] - pop {r4, pc} -_02258262: - lsl r0, r3, #4 - add r1, r4, r0 - ldr r0, _022582A8 ; =0x000021A8 - ldr r0, [r1, r0] - pop {r4, pc} -_0225826C: - mov r0, #0x3d - lsl r0, r0, #4 - ldrb r0, [r4, r0] - pop {r4, pc} -_02258274: - ldr r0, _022582AC ; =0x00003108 - ldrb r0, [r4, r0] - pop {r4, pc} -_0225827A: - ldr r0, _022582B0 ; =0x000003DA - add r1, r4, r3 - ldrb r0, [r1, r0] - pop {r4, pc} -_02258282: - lsl r0, r3, #4 - add r1, r4, r0 - ldr r0, _022582B4 ; =0x000021B0 - ldr r0, [r1, r0] - pop {r4, pc} -_0225828C: - ldr r0, [r4, #8] - pop {r4, pc} -_02258290: - ldr r0, [r4, #0xc] - pop {r4, pc} -_02258294: - bl GF_AssertFail - mov r0, #0 - pop {r4, pc} - .balign 4, 0 -_0225829C: .word 0x0000219C -_022582A0: .word 0x00003109 -_022582A4: .word 0x0000311D -_022582A8: .word 0x000021A8 -_022582AC: .word 0x00003108 -_022582B0: .word 0x000003DA -_022582B4: .word 0x000021B0 - thumb_func_end ov12_022581D4 - - thumb_func_start ov12_022582B8 -ov12_022582B8: ; 0x022582B8 - push {r3, r4, r5, lr} - add r5, r1, #0 - ldr r4, [sp, #0x10] - cmp r2, #0xb - bhi _02258336 - add r1, r2, r2 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_022582CE: ; jump table - .short _022582E6 - _022582CE - 2 ; case 0 - .short _022582F8 - _022582CE - 2 ; case 1 - .short _02258316 - _022582CE - 2 ; case 2 - .short _0225831E - _022582CE - 2 ; case 3 - .short _02258336 - _022582CE - 2 ; case 4 - .short _02258336 - _022582CE - 2 ; case 5 - .short _02258336 - _022582CE - 2 ; case 6 - .short _02258336 - _022582CE - 2 ; case 7 - .short _02258336 - _022582CE - 2 ; case 8 - .short _02258326 - _022582CE - 2 ; case 9 - .short _02258336 - _022582CE - 2 ; case 10 - .short _0225832E - _022582CE - 2 ; case 11 -_022582E6: - add r1, r3, #0 - bl BattleSystem_GetFieldSide - lsl r0, r0, #2 - add r1, r5, r0 - mov r0, #0x6f - lsl r0, r0, #2 - str r4, [r1, r0] - pop {r3, r4, r5, pc} -_022582F8: - add r1, r3, #0 - bl BattleSystem_GetFieldSide - mov r1, #0x71 - lsl r1, r1, #2 - add r1, r5, r1 - lsl r0, r0, #3 - ldr r3, [r1, r0] - ldr r2, _0225833C ; =0xFFFF8FFF - and r3, r2 - lsl r2, r4, #0x1d - lsr r2, r2, #0x11 - orr r2, r3 - str r2, [r1, r0] - pop {r3, r4, r5, pc} -_02258316: - ldr r0, _02258340 ; =0x0000219C - add r1, r5, r3 - strb r4, [r1, r0] - pop {r3, r4, r5, pc} -_0225831E: - mov r0, #0x15 - lsl r0, r0, #4 - str r4, [r5, r0] - pop {r3, r4, r5, pc} -_02258326: - mov r0, #0x3d - lsl r0, r0, #4 - strb r4, [r5, r0] - pop {r3, r4, r5, pc} -_0225832E: - ldr r0, _02258344 ; =0x000003DA - add r1, r5, r3 - strb r4, [r1, r0] - pop {r3, r4, r5, pc} -_02258336: - bl GF_AssertFail - pop {r3, r4, r5, pc} - .balign 4, 0 -_0225833C: .word 0xFFFF8FFF -_02258340: .word 0x0000219C -_02258344: .word 0x000003DA - thumb_func_end ov12_022582B8 - - thumb_func_start ov12_02258348 -ov12_02258348: ; 0x02258348 - push {r4, lr} - add r3, r0, #0 - add r3, #0x88 - str r1, [r3] - add r3, r0, #0 - ldr r1, _022583AC ; =0x007FFFFF - add r4, r2, #0 - and r4, r1 - add r3, #0x8c - str r4, [r3] - lsl r1, r1, #0x17 - add r3, r2, #0 - and r3, r1 - add r1, r0, #0 - add r1, #0x90 - str r3, [r1] - mov r3, #1 - lsl r3, r3, #0x1e - add r1, r2, #0 - tst r1, r3 - beq _0225837A - ldr r1, [r0, #0x64] - add r0, #0x94 - str r1, [r0] - b _0225839A -_0225837A: - lsl r1, r3, #1 - tst r1, r2 - beq _02258388 - ldr r1, [r0, #0x6c] - add r0, #0x94 - str r1, [r0] - b _0225839A -_02258388: - lsr r1, r3, #1 - tst r1, r2 - bne _02258394 - lsr r1, r3, #2 - tst r1, r2 - beq _0225839A -_02258394: - mov r1, #0 - add r0, #0x94 - str r1, [r0] -_0225839A: - cmp r4, #0x91 - blo _022583A2 - bl GF_AssertFail -_022583A2: - ldr r0, _022583B0 ; =ov12_0226CDCC - lsl r1, r4, #2 - ldr r0, [r0, r1] - pop {r4, pc} - nop -_022583AC: .word 0x007FFFFF -_022583B0: .word ov12_0226CDCC - thumb_func_end ov12_02258348 - - thumb_func_start ov12_022583B4 -ov12_022583B4: ; 0x022583B4 - push {r3, r4, r5, lr} - ldr r1, _0225843C ; =0x0000213C - add r5, r2, #0 - ldr r2, [r0, r1] - mov r0, #2 - lsl r0, r0, #0xa - add r1, r2, #0 - ldr r4, [sp, #0x14] - tst r1, r0 - bne _022583DE - lsl r0, r0, #4 - tst r0, r2 - bne _022583DE - cmp r3, #0 - beq _022583DE - add r0, r3, #0 - mul r0, r5 - mov r1, #0xa - bl DamageDivide - add r3, r0, #0 -_022583DE: - cmp r5, #0 - beq _022583EC - cmp r5, #5 - beq _022583FE - cmp r5, #0x14 - beq _0225841C - b _02258438 -_022583EC: - ldr r1, [r4] - mov r0, #8 - orr r1, r0 - mov r0, #4 - bic r1, r0 - mov r0, #2 - bic r1, r0 - str r1, [r4] - b _02258438 -_022583FE: - ldr r0, [sp, #0x10] - cmp r0, #0 - beq _02258438 - ldr r1, [r4] - mov r0, #2 - tst r0, r1 - beq _02258414 - mov r0, #2 - bic r1, r0 - str r1, [r4] - b _02258438 -_02258414: - mov r0, #4 - orr r0, r1 - str r0, [r4] - b _02258438 -_0225841C: - ldr r0, [sp, #0x10] - cmp r0, #0 - beq _02258438 - ldr r1, [r4] - mov r0, #4 - tst r0, r1 - beq _02258432 - mov r0, #4 - bic r1, r0 - str r1, [r4] - b _02258438 -_02258432: - mov r0, #2 - orr r0, r1 - str r0, [r4] -_02258438: - add r0, r3, #0 - pop {r3, r4, r5, pc} - .balign 4, 0 -_0225843C: .word 0x0000213C - thumb_func_end ov12_022583B4 - - thumb_func_start ov12_02258440 -ov12_02258440: ; 0x02258440 - lsl r1, r1, #4 - add r2, r0, r1 - ldr r1, _022584A4 ; =0x000003DE - ldrh r3, [r2, r1] - cmp r3, #0x9b - bgt _02258472 - cmp r3, #0x97 - blt _02258458 - beq _02258492 - cmp r3, #0x9b - beq _02258492 - b _0225849E -_02258458: - cmp r3, #0x27 - bgt _02258464 - bge _02258492 - cmp r3, #0x1a - beq _02258492 - b _0225849E -_02258464: - cmp r3, #0x4b - bgt _0225846C - beq _02258492 - b _0225849E -_0225846C: - cmp r3, #0x91 - beq _02258492 - b _0225849E -_02258472: - mov r2, #1 - lsl r2, r2, #8 - cmp r3, r2 - bgt _02258482 - bge _02258492 - cmp r3, #0xff - beq _02258492 - b _0225849E -_02258482: - add r1, r2, #7 - cmp r3, r1 - bgt _0225848C - beq _02258492 - b _0225849E -_0225848C: - add r2, #0x11 - cmp r3, r2 - bne _0225849E -_02258492: - ldr r1, _022584A8 ; =0x0000213C - ldr r1, [r0, r1] - mov r0, #2 - lsl r0, r0, #8 - and r0, r1 - bx lr -_0225849E: - mov r0, #1 - bx lr - nop -_022584A4: .word 0x000003DE -_022584A8: .word 0x0000213C - thumb_func_end ov12_02258440 - - thumb_func_start ov12_022584AC -ov12_022584AC: ; 0x022584AC - push {r4, r5, r6, lr} - add r5, r0, #0 - add r6, r1, #0 - cmp r2, #0x1b - bne _022584C2 - mov r0, #0xc0 - mul r0, r6 - add r1, r5, r0 - ldr r0, _02258578 ; =0x00002D64 - ldrb r4, [r1, r0] - b _022584D6 -_022584C2: - cmp r2, #0x1c - bne _022584D2 - mov r0, #0xc0 - mul r0, r6 - add r1, r5, r0 - ldr r0, _0225857C ; =0x00002D65 - ldrb r4, [r1, r0] - b _022584D6 -_022584D2: - bl GF_AssertFail -_022584D6: - mov r0, #0xc0 - mul r0, r6 - mov r2, #0xb5 - add r1, r5, r0 - lsl r2, r2, #6 - ldrh r3, [r1, r2] - ldr r0, _02258580 ; =0x000001ED - cmp r3, r0 - bne _02258572 - add r0, r2, #0 - add r0, #0x27 - ldrb r0, [r1, r0] - cmp r0, #0x79 - bne _02258572 - add r2, #0x78 - ldrh r1, [r1, r2] - add r0, r5, #0 - mov r2, #1 - bl GetItemVar - sub r0, #0x7e - cmp r0, #0xf - bhi _02258570 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02258510: ; jump table - .short _02258530 - _02258510 - 2 ; case 0 - .short _02258534 - _02258510 - 2 ; case 1 - .short _02258538 - _02258510 - 2 ; case 2 - .short _0225853C - _02258510 - 2 ; case 3 - .short _02258540 - _02258510 - 2 ; case 4 - .short _02258544 - _02258510 - 2 ; case 5 - .short _02258548 - _02258510 - 2 ; case 6 - .short _0225854C - _02258510 - 2 ; case 7 - .short _02258550 - _02258510 - 2 ; case 8 - .short _02258554 - _02258510 - 2 ; case 9 - .short _02258558 - _02258510 - 2 ; case 10 - .short _0225855C - _02258510 - 2 ; case 11 - .short _02258560 - _02258510 - 2 ; case 12 - .short _02258564 - _02258510 - 2 ; case 13 - .short _02258568 - _02258510 - 2 ; case 14 - .short _0225856C - _02258510 - 2 ; case 15 -_02258530: - mov r4, #0xa - b _02258572 -_02258534: - mov r4, #0xb - b _02258572 -_02258538: - mov r4, #0xd - b _02258572 -_0225853C: - mov r4, #0xc - b _02258572 -_02258540: - mov r4, #0xf - b _02258572 -_02258544: - mov r4, #1 - b _02258572 -_02258548: - mov r4, #3 - b _02258572 -_0225854C: - mov r4, #4 - b _02258572 -_02258550: - mov r4, #2 - b _02258572 -_02258554: - mov r4, #0xe - b _02258572 -_02258558: - mov r4, #6 - b _02258572 -_0225855C: - mov r4, #5 - b _02258572 -_02258560: - mov r4, #7 - b _02258572 -_02258564: - mov r4, #0x10 - b _02258572 -_02258568: - mov r4, #0x11 - b _02258572 -_0225856C: - mov r4, #8 - b _02258572 -_02258570: - mov r4, #0 -_02258572: - add r0, r4, #0 - pop {r4, r5, r6, pc} - nop -_02258578: .word 0x00002D64 -_0225857C: .word 0x00002D65 -_02258580: .word 0x000001ED - thumb_func_end ov12_022584AC - - thumb_func_start ov12_02258584 -ov12_02258584: ; 0x02258584 - lsl r1, r1, #3 - add r3, r0, r1 - mov r2, #0 - mov r0, #0x37 - add r1, r2, #0 - lsl r0, r0, #4 -_02258590: - add r2, r2, #1 - strh r1, [r3, r0] - add r3, r3, #2 - cmp r2, #4 - blt _02258590 - bx lr - thumb_func_end ov12_02258584 - - thumb_func_start ov12_0225859C -ov12_0225859C: ; 0x0225859C - add r1, r0, r1 - mov r0, #0x39 - mov r2, #0 - lsl r0, r0, #4 - strb r2, [r1, r0] - bx lr - thumb_func_end ov12_0225859C - - thumb_func_start ov12_022585A8 -ov12_022585A8: ; 0x022585A8 - lsl r1, r1, #1 - add r1, r0, r1 - mov r0, #0xe5 - mov r2, #0 - lsl r0, r0, #2 - strh r2, [r1, r0] - bx lr - .balign 4, 0 - thumb_func_end ov12_022585A8 - - thumb_func_start ov12_022585B8 -ov12_022585B8: ; 0x022585B8 - push {r3, r4, r5, r6, r7, lr} - add r5, r2, #0 - mov r2, #0xff - mov ip, r2 - mov r2, #0xc0 - add r7, r5, #0 - mul r7, r2 - ldr r2, _02258654 ; =0x00002D67 - add r6, r1, r7 - add r4, r3, #0 - ldrb r3, [r6, r2] - cmp r3, #0x3b - beq _02258614 - cmp r3, #0x24 - beq _02258614 - cmp r3, #0x79 - beq _02258614 - add r2, #0x25 - ldr r2, [r6, r2] - cmp r2, #0 - beq _02258614 - mov r2, #0xc0 - mul r2, r4 - add r6, r1, r2 - ldr r2, _02258654 ; =0x00002D67 - add r2, #0x25 - ldr r2, [r6, r2] - cmp r2, #0 - beq _02258614 - ldr r2, _02258654 ; =0x00002D67 - ldrb r2, [r6, r2] - cmp r2, #0x3b - beq _02258614 - cmp r2, #0x24 - beq _02258614 - cmp r2, #0x79 - beq _02258614 - bl BattleSystem_Random - mov r1, #1 - tst r0, r1 - beq _02258610 - mov ip, r4 - b _0225864E -_02258610: - mov ip, r5 - b _0225864E -_02258614: - cmp r3, #0x3b - beq _0225862E - cmp r3, #0x24 - beq _0225862E - ldr r0, _02258658 ; =0x00002D8C - add r2, r1, r7 - ldr r0, [r2, r0] - cmp r0, #0 - beq _0225862E - cmp r3, #0x79 - beq _0225862E - mov ip, r5 - b _0225864E -_0225862E: - mov r0, #0xc0 - mul r0, r4 - add r2, r1, r0 - ldr r0, _02258654 ; =0x00002D67 - ldrb r1, [r2, r0] - cmp r1, #0x3b - beq _0225864E - cmp r1, #0x24 - beq _0225864E - add r0, #0x25 - ldr r0, [r2, r0] - cmp r0, #0 - beq _0225864E - cmp r1, #0x79 - beq _0225864E - mov ip, r4 -_0225864E: - mov r0, ip - pop {r3, r4, r5, r6, r7, pc} - nop -_02258654: .word 0x00002D67 -_02258658: .word 0x00002D8C - thumb_func_end ov12_022585B8 - - thumb_func_start ov12_0225865C -ov12_0225865C: ; 0x0225865C - lsl r1, r1, #4 - add r1, r0, r1 - ldr r0, _02258680 ; =0x000003DE - ldr r3, _02258684 ; =ov12_0226CB64 - ldrh r1, [r1, r0] - mov r2, #0 -_02258668: - ldrh r0, [r3] - cmp r0, r1 - bne _02258672 - mov r0, #1 - bx lr -_02258672: - add r2, r2, #1 - add r3, r3, #2 - cmp r2, #6 - blo _02258668 - mov r0, #0 - bx lr - nop -_02258680: .word 0x000003DE -_02258684: .word ov12_0226CB64 - thumb_func_end ov12_0225865C - - thumb_func_start BattleSystem_GetMoveType -BattleSystem_GetMoveType: ; 0x02258688 - push {r3, r4, r5, r6, r7, lr} - add r6, r2, #0 - ldr r2, _022587F4 ; =0x00000137 - add r7, r0, #0 - add r4, r1, #0 - cmp r3, r2 - bgt _022586A0 - blt _0225869A - b _0225879C -_0225869A: - cmp r3, #0xed - beq _02258742 - b _022587EE -_022586A0: - add r0, r2, #0 - add r0, #0x34 - cmp r3, r0 - bgt _022586B0 - add r2, #0x34 - cmp r3, r2 - beq _022586B8 - b _022587EE -_022586B0: - add r2, #0x8a - cmp r3, r2 - beq _022586C4 - b _022587EE -_022586B8: - add r0, r4, #0 - add r1, r6, #0 - bl GetNaturalGiftType - add r5, r0, #0 - b _022587F0 -_022586C4: - add r0, r4, #0 - add r1, r6, #0 - bl GetBattlerHeldItemEffect - sub r0, #0x7e - cmp r0, #0xf - bhi _0225873E - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_022586DE: ; jump table - .short _0225871E - _022586DE - 2 ; case 0 - .short _02258722 - _022586DE - 2 ; case 1 - .short _0225872A - _022586DE - 2 ; case 2 - .short _02258726 - _022586DE - 2 ; case 3 - .short _02258732 - _022586DE - 2 ; case 4 - .short _022586FE - _022586DE - 2 ; case 5 - .short _02258706 - _022586DE - 2 ; case 6 - .short _0225870A - _022586DE - 2 ; case 7 - .short _02258702 - _022586DE - 2 ; case 8 - .short _0225872E - _022586DE - 2 ; case 9 - .short _02258712 - _022586DE - 2 ; case 10 - .short _0225870E - _022586DE - 2 ; case 11 - .short _02258716 - _022586DE - 2 ; case 12 - .short _02258736 - _022586DE - 2 ; case 13 - .short _0225873A - _022586DE - 2 ; case 14 - .short _0225871A - _022586DE - 2 ; case 15 -_022586FE: - mov r5, #1 - b _022587F0 -_02258702: - mov r5, #2 - b _022587F0 -_02258706: - mov r5, #3 - b _022587F0 -_0225870A: - mov r5, #4 - b _022587F0 -_0225870E: - mov r5, #5 - b _022587F0 -_02258712: - mov r5, #6 - b _022587F0 -_02258716: - mov r5, #7 - b _022587F0 -_0225871A: - mov r5, #8 - b _022587F0 -_0225871E: - mov r5, #0xa - b _022587F0 -_02258722: - mov r5, #0xb - b _022587F0 -_02258726: - mov r5, #0xc - b _022587F0 -_0225872A: - mov r5, #0xd - b _022587F0 -_0225872E: - mov r5, #0xe - b _022587F0 -_02258732: - mov r5, #0xf - b _022587F0 -_02258736: - mov r5, #0x10 - b _022587F0 -_0225873A: - mov r5, #0x11 - b _022587F0 -_0225873E: - mov r5, #0 - b _022587F0 -_02258742: - ldr r0, _022587F8 ; =0x00002D54 - add r1, r4, r0 - mov r0, #0xc0 - mul r0, r6 - ldr r4, [r1, r0] - lsl r0, r4, #2 - lsr r0, r0, #0x1b - lsl r0, r0, #0x1f - lsr r5, r0, #0x1a - lsl r0, r4, #7 - lsr r0, r0, #0x1b - lsl r0, r0, #0x1f - lsr r3, r0, #0x1b - lsl r0, r4, #0xc - lsr r0, r0, #0x1b - lsl r0, r0, #0x1f - lsr r2, r0, #0x1c - lsl r0, r4, #0x11 - lsr r0, r0, #0x1b - lsl r0, r0, #0x1f - lsr r1, r0, #0x1d - lsl r0, r4, #0x1b - lsl r4, r4, #0x16 - lsr r4, r4, #0x1b - lsr r6, r0, #0x1b - mov r0, #1 - lsl r4, r4, #0x1f - and r0, r6 - lsr r4, r4, #0x1e - orr r0, r4 - orr r0, r1 - orr r0, r2 - orr r0, r3 - add r1, r5, #0 - orr r1, r0 - mov r0, #0xf - mul r0, r1 - mov r1, #0x3f - bl _s32_div_f - add r5, r0, #1 - cmp r5, #9 - blt _022587F0 - add r5, r5, #1 - b _022587F0 -_0225879C: - mov r2, #0xd - str r2, [sp] - mov r2, #8 - mov r3, #0 - bl CheckAbilityActive - cmp r0, #0 - bne _022587F0 - mov r0, #0x4c - str r0, [sp] - add r0, r7, #0 - add r1, r4, #0 - mov r2, #8 - mov r3, #0 - bl CheckAbilityActive - cmp r0, #0 - bne _022587F0 - mov r0, #6 - lsl r0, r0, #6 - ldr r0, [r4, r0] - ldr r1, _022587FC ; =0x000080FF - tst r1, r0 - beq _022587F0 - mov r1, #3 - tst r1, r0 - beq _022587D4 - mov r5, #0xb -_022587D4: - mov r1, #0xc - tst r1, r0 - beq _022587DC - mov r5, #5 -_022587DC: - mov r1, #0x30 - tst r1, r0 - beq _022587E4 - mov r5, #0xa -_022587E4: - mov r1, #0xc0 - tst r0, r1 - beq _022587F0 - mov r5, #0xf - b _022587F0 -_022587EE: - mov r5, #0 -_022587F0: - add r0, r5, #0 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_022587F4: .word 0x00000137 -_022587F8: .word 0x00002D54 -_022587FC: .word 0x000080FF - thumb_func_end BattleSystem_GetMoveType - .rodata .public sCritChance @@ -952,6 +21,7 @@ sEncoreFailMoves: ; 0x0226CB58 .short MOVE_TRANSFORM, MOVE_MIMIC, MOVE_SKETCH, MOVE_MIRROR_MOVE .short MOVE_ENCORE, MOVE_STRUGGLE +.public ov12_0226CB64 ov12_0226CB64: ; 0x0226CB64 .byte 0x29, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x90, 0x00, 0xE3, 0x00 @@ -1035,6 +105,7 @@ sTypeEnhancingItems: ; 0x0226CC3A .byte HOLD_EFFECT_ARCEUS_STEEL, TYPE_STEEL ; format: attacking type, defending type, damage multiplier +.public sTypeEffectiveness sTypeEffectiveness: ; 0x0226CC7C .byte TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE .byte TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE @@ -1149,6 +220,7 @@ sTypeEffectiveness: ; 0x0226CC7C .byte TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT .byte TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT +.public ov12_0226CDCC ov12_0226CDCC: ; 0x0226CDCC .byte 0x00, 0x00, 0x00, 0x00 .byte 0x12, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 diff --git a/include/battle.h b/include/battle.h index 413ed9ae0a..8f65550887 100644 --- a/include/battle.h +++ b/include/battle.h @@ -7,6 +7,7 @@ #include "trainer_data.h" #include "filesystem.h" #include "constants/battle.h" +#include "constants/moves.h" typedef struct BATTLEMSG { u8 unk0; @@ -120,7 +121,7 @@ typedef struct UnkBtlCtxSub_76 { u8 unk9F[2]; u16 unkA0[2]; u8 unkA4[4]; - MOVE moveData[468]; + MOVE moveData[NUM_MOVES + 1]; ItemData *itemData; u16 unk280[4]; u16 unk288[4]; @@ -383,13 +384,13 @@ typedef struct BATTLECONTEXT { int unk_30F4[4]; int unk_3104; u8 unk_3108; - u8 unk_3109; + u8 levelUpMons; u16 unk_310A; u16 unk_310C[4]; int flingData; int flingScript; u8 unk_311C; - u8 unk_311D; + u8 safariRunAttempts; u8 runAttempts; u8 battleEndFlag; u8 magnitude; diff --git a/include/battle_system.h b/include/battle_system.h index f7bedbf54b..c1a69dc323 100644 --- a/include/battle_system.h +++ b/include/battle_system.h @@ -36,5 +36,6 @@ u32 BattleSystem_GetWinLoseFlags(BattleSystem *bsys); void ov12_0223C0C4(BattleSystem *bsys); int BattleSystem_GetWeather(BattleSystem *bsys); int ov12_0223AB60(BattleSystem *bsys); +BOOL ov12_0223BFEC(BattleSystem *bsys); #endif diff --git a/include/constants/moves.h b/include/constants/moves.h index 1d383b3ce5..39813057a6 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -472,6 +472,8 @@ #define MOVE_OMINOUS_WIND 466 #define MOVE_SHADOW_FORCE 467 +#define NUM_MOVES MOVE_SHADOW_FORCE + #define CATEGORY_PHYSICAL 0 #define CATEGORY_SPECIAL 1 #define CATEGORY_STATUS 2 @@ -489,8 +491,6 @@ #define RANGE_SINGLE_TARGET_USER_SIDE (1 << 9) #define RANGE_10 (1 << 10) -#define NUM_MOVES MOVE_SHADOW_FORCE - // Tutor move flags #define TUTOR_DIVE 0 #define TUTOR_MUD_SLAP 1 diff --git a/include/overlay_12_0224E4FC.h b/include/overlay_12_0224E4FC.h index f03bd96208..965bdbfc76 100644 --- a/include/overlay_12_0224E4FC.h +++ b/include/overlay_12_0224E4FC.h @@ -117,6 +117,9 @@ void ov12_02257EC0(BattleSystem *bsys, BATTLECONTEXT *ctx); BOOL CheckStatusEffectsSubstitute(BATTLECONTEXT *bsys, int battlerId, int status); BOOL CheckItemEffectOnUTurn(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script); void CheckIgnorePressure(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget); +BOOL ov12_022581BC(BattleSystem *bsys, BATTLECONTEXT *ctx); +int ov12_022581D4(BattleSystem *bsys, BATTLECONTEXT *ctx, int var, int battlerId); +void ov12_022582B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int var, int battlerId, int data); //The following functions are static, but the rest of the file is still being worked on BOOL ov12_02251C74(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget, int index); @@ -127,20 +130,10 @@ BOOL CheckLegalMeFirstMove(BATTLECONTEXT *ctx, u16 move); int ov12_02253DA0(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); u32 BattleSystem_GetBattleType(BattleSystem *bsys); u32 BattleSystem_GetBattleFlags(BattleSystem *bsys); -u32 ov12_022581D4(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 a2, int battlerId); u32 ov12_0223C24C(PARTY *party, u32 *a1); int ov12_0223AB0C(BattleSystem *bsys, int battlerId); int ov12_02251D28(BattleSystem *bsys, BATTLECONTEXT *ctx, int moveNo, int moveType, int battlerIdAttacker, int battlerIdTarget, int dmg, u32 *statusFlag); void ov12_02252D14(BattleSystem *bsys, BATTLECONTEXT *ctx); -int ov12_022584AC(BATTLECONTEXT *ctx, int battlerId, int id); -int ov12_02258348(BATTLECONTEXT *ctx, int a1, int a2); -int BattleSystem_GetMoveType(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int moveNo); -void ov12_022585A8(BATTLECONTEXT *ctx, u8 battlerId); -void ov12_02258584(BATTLECONTEXT *ctx, u8 battlerId); void ov12_0225859C(BATTLECONTEXT *ctx, u8 battlerId); -int ov12_02258440(BATTLECONTEXT *ctx, int moveNo); -u32 ov12_022583B4(BATTLECONTEXT *ctx, int battlerIdA, u8 effectiveness, int damage, u32 movePower, u32 *moveStatusFlag); -int ov12_022585B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId1, int battlerId2); -BOOL ov12_0225865C(BATTLECONTEXT *ctx, int moveNo); #endif diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index d53f6aa868..a0c94ba492 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -3642,8 +3642,8 @@ BOOL BtlCmd_HiddenPowerDamageCalc(BattleSystem *bsys, BATTLECONTEXT *ctx) { ((ctx->battleMons[ctx->battlerIdAttacker].spAtkIV & 1) << 4) | ((ctx->battleMons[ctx->battlerIdAttacker].spDefIV & 1) << 5); - ctx->movePower = ctx->movePower * 40/63 + 30; - ctx->moveType = ctx->moveType * 15/63 + 1; + ctx->movePower = ctx->movePower * 40 / 63 + 30; + ctx->moveType = ctx->moveType * 15 / 63 + 1; if (ctx->moveType >= TYPE_MYSTERY) { ctx->moveType++; diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 162fd29ab3..971c4373d2 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -19,6 +19,16 @@ static BOOL CheckFlyingImmunity(BATTLECONTEXT *ctx, int item, int index); static void ApplyEffectivenessFlags(int effectiveness, u32 *moveStatusFlag); +static int ov12_02258348(BATTLECONTEXT *ctx, int statChangeType, u32 flag); +static int ov12_022583B4(BATTLECONTEXT *ctx, int battlerId, int typeEffectiveness, int damage, int moveDamage, u32 *flag); +static int ov12_02258440(BATTLECONTEXT *ctx, int moveNo); +static u8 ov12_022584AC(BATTLECONTEXT *ctx, int battlerId, int var); +static void ov12_02258584(BATTLECONTEXT *ctx, u8 battlerId); +static void ov12_0225859C(BATTLECONTEXT *ctx, u8 battlerId); +static void ov12_022585A8(BATTLECONTEXT *ctx, u8 battlerId); +static int ov12_022585B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdTarget1, int battlerIdTarget2); +static BOOL ov12_0225865C(BATTLECONTEXT *ctx, int moveNo); +static int BattleSystem_GetMoveType(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int moveNo); void BattleSystem_GetBattleMon(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, u8 selectedMon) { Pokemon *mon = BattleSystem_GetPartyMon(bsys, battlerId, selectedMon); @@ -1774,7 +1784,7 @@ void ov12_02251038(BattleSystem *bsys, BATTLECONTEXT *ctx) { } ctx->unk_311C = 6; - ctx->unk_311D = 6; + ctx->safariRunAttempts = 6; } void InitSwitchWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { @@ -6537,3 +6547,376 @@ void CheckIgnorePressure(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerI ctx->battleMons[battlerIdAttacker].movePPCur[ctx->movePos[battlerIdAttacker]]--; } } + +BOOL ov12_022581BC(BattleSystem *bsys, BATTLECONTEXT *ctx) { + if (ov12_0223BFEC(bsys)) { + ctx->command = CONTROLLER_COMMAND_43; + return TRUE; + } + return FALSE; +} + +int ov12_022581D4(BattleSystem *bsys, BATTLECONTEXT *ctx, int var, int battlerId) { + switch (var) { + case 0: + return ctx->fieldSideConditionFlags[BattleSystem_GetFieldSide(bsys, battlerId)]; + case 1: + return ctx->fieldSideConditionData[BattleSystem_GetFieldSide(bsys, battlerId)].mistTurns; + case 2: + return ctx->selectedMonIndex[battlerId]; + case 3: + return ctx->totalTurns; + case 4: + return ctx->levelUpMons; + case 5: + return ctx->safariRunAttempts; + case 6: + return ctx->totalTimesFainted[battlerId]; + case 7: + return ctx->totalDamage[battlerId]; + case 8: + return ctx->unk_21A8[battlerId][0]; + case 9: + return ctx->unk_334.unk9C; + case 10: + return ctx->unk_3108; + case 11: + return ctx->unk_334.unkA4[battlerId]; + case 12: + return ctx->unk_21A8[battlerId][2]; + case 13: + return (int) ctx->command; + case 14: + return (int) ctx->commandNext; + } + + GF_ASSERT(FALSE); + return 0; +} + +void ov12_022582B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int var, int battlerId, int data) { + switch (var) { + case 0: + ctx->fieldSideConditionFlags[BattleSystem_GetFieldSide(bsys, battlerId)] = data; + break; + case 1: + ctx->fieldSideConditionData[BattleSystem_GetFieldSide(bsys, battlerId)].mistTurns = data; + break; + case 2: + ctx->selectedMonIndex[battlerId] = data; + break; + case 3: + ctx->totalTurns = data; + break; + case 9: + ctx->unk_334.unk9C = data; + break; + case 11: + ctx->unk_334.unkA4[battlerId] = data; + break; + default: + GF_ASSERT(FALSE); + } +} + +extern const int ov12_0226CDCC[145]; + +static int ov12_02258348(BATTLECONTEXT *ctx, int statChangeType, u32 flag) { + ctx->statChangeType = statChangeType; + ctx->statChangeParam = flag & (0x7FFFFF); + ctx->statChangeFlag = flag & (0xFF800000); + + if (flag & (1 << 30)) { + ctx->battlerIdStatChange = ctx->battlerIdAttacker; + } else if (flag & (1 << 31)) { + ctx->battlerIdStatChange = ctx->battlerIdTarget; + } else if ((flag & (1 << 29)) || (flag & (1 << 28))) { + ctx->battlerIdStatChange = BATTLER_PLAYER; + } + + GF_ASSERT(NELEMS(ov12_0226CDCC) > (flag & (0x7FFFFF))); + + return ov12_0226CDCC[flag & (0x7FFFFF)]; +} + +static int ov12_022583B4(BATTLECONTEXT *ctx, int battlerId, int typeEffectiveness, int damage, int moveDamage, u32 *flag) { + if (!(ctx->linkStatus & (1 << 11)) && !(ctx->linkStatus & (1 << 15)) && damage) { + damage = DamageDivide(damage * typeEffectiveness, 10); + } + + switch (typeEffectiveness) { + case TYPE_MUL_NO_EFFECT: + *flag |= MOVE_STATUS_NO_EFFECT; + *flag &= ~MOVE_STATUS_NOT_VERY_EFFECTIVE; + *flag &= ~MOVE_STATUS_SUPER_EFFECTIVE; + break; + case TYPE_MUL_NOT_EFFECTIVE: + if (moveDamage) { + if (*flag & MOVE_STATUS_SUPER_EFFECTIVE) { + *flag &= ~MOVE_STATUS_SUPER_EFFECTIVE; + } else { + *flag |= MOVE_STATUS_NOT_VERY_EFFECTIVE; + } + } + break; + case TYPE_MUL_SUPER_EFFECTIVE: + if (moveDamage) { + if (*flag & MOVE_STATUS_NOT_VERY_EFFECTIVE) { + *flag &= ~MOVE_STATUS_NOT_VERY_EFFECTIVE; + } else { + *flag |= MOVE_STATUS_SUPER_EFFECTIVE; + } + } + break; + } + + return damage; +} + +static int ov12_02258440(BATTLECONTEXT *ctx, int moveNo) { + switch (ctx->unk_334.moveData[moveNo].effect) { + case 26: + case 39: + case 75: + case 145: + case 151: + case 155: + case 255: + case 256: + case 263: + case 273: + return (ctx->linkStatus & (1 << 9)); + } + + return TRUE; +} + +static u8 ov12_022584AC(BATTLECONTEXT *ctx, int battlerId, int var) { + u8 type; + + if (var == BMON_DATA_TYPE_1) { + type = ctx->battleMons[battlerId].type1; + } else if (var == BMON_DATA_TYPE_2) { + type = ctx->battleMons[battlerId].type2; + } else { + GF_ASSERT(FALSE); + } + + if (ctx->battleMons[battlerId].species == SPECIES_ARCEUS && ctx->battleMons[battlerId].ability == ABILITY_MULTITYPE) { + switch (GetItemVar(ctx, ctx->battleMons[battlerId].item, ITEM_VAR_HOLD_EFFECT)) { + case HOLD_EFFECT_ARCEUS_FIRE: + type = TYPE_FIRE; + break; + case HOLD_EFFECT_ARCEUS_WATER: + type = TYPE_WATER; + break; + case HOLD_EFFECT_ARCEUS_ELECTRIC: + type = TYPE_ELECTRIC; + break; + case HOLD_EFFECT_ARCEUS_GRASS: + type = TYPE_GRASS; + break; + case HOLD_EFFECT_ARCEUS_ICE: + type = TYPE_ICE; + break; + case HOLD_EFFECT_ARCEUS_FIGHT: + type = TYPE_FIGHTING; + break; + case HOLD_EFFECT_ARCEUS_POISON: + type = TYPE_POISON; + break; + case HOLD_EFFECT_ARCEUS_GROUND: + type = TYPE_GROUND; + break; + case HOLD_EFFECT_ARCEUS_FLYING: + type = TYPE_FLYING; + break; + case HOLD_EFFECT_ARCEUS_PSYCHIC: + type = TYPE_PSYCHIC; + break; + case HOLD_EFFECT_ARCEUS_BUG: + type = TYPE_BUG; + break; + case HOLD_EFFECT_ARCEUS_ROCK: + type = TYPE_ROCK; + break; + case HOLD_EFFECT_ARCEUS_GHOST: + type = TYPE_GHOST; + break; + case HOLD_EFFECT_ARCEUS_DRAGON: + type = TYPE_DRAGON; + break; + case HOLD_EFFECT_ARCEUS_DARK: + type = TYPE_DARK; + break; + case HOLD_EFFECT_ARCEUS_STEEL: + type = TYPE_STEEL; + break; + default: + type = TYPE_NORMAL; + break; + } + } + + return type; +} + +static void ov12_02258584(BATTLECONTEXT *ctx, u8 battlerId) { + for (int i = 0; i < LEARNED_MOVES_MAX; i++) { + ctx->unk_334.unk1C[battlerId][i] = 0; + } +} + +static void ov12_0225859C(BATTLECONTEXT *ctx, u8 battlerId) { + ctx->unk_334.unk5C[battlerId] = 0; +} + +static void ov12_022585A8(BATTLECONTEXT *ctx, u8 battlerId) { + ctx->unk_334.unk60[battlerId] = 0; +} + +static int ov12_022585B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdTarget1, int battlerIdTarget2) { + int ret = BATTLER_NONE; + + if (ctx->battleMons[battlerIdTarget1].ability != ABILITY_FORECAST && + ctx->battleMons[battlerIdTarget1].ability != ABILITY_TRACE && + ctx->battleMons[battlerIdTarget1].ability != ABILITY_MULTITYPE && + ctx->battleMons[battlerIdTarget1].hp && ctx->battleMons[battlerIdTarget2].hp && + ctx->battleMons[battlerIdTarget2].ability != ABILITY_FORECAST && + ctx->battleMons[battlerIdTarget2].ability != ABILITY_TRACE && + ctx->battleMons[battlerIdTarget2].ability != ABILITY_MULTITYPE) { + if (BattleSystem_Random(bsys) & 1) { + ret = battlerIdTarget2; + } else { + ret = battlerIdTarget1; + } + } else if (ctx->battleMons[battlerIdTarget1].ability != ABILITY_FORECAST && + ctx->battleMons[battlerIdTarget1].ability != ABILITY_TRACE && + ctx->battleMons[battlerIdTarget1].hp && + ctx->battleMons[battlerIdTarget1].ability != ABILITY_MULTITYPE) { + ret = battlerIdTarget1; + } else if (ctx->battleMons[battlerIdTarget2].ability != ABILITY_FORECAST && + ctx->battleMons[battlerIdTarget2].ability != ABILITY_TRACE && + ctx->battleMons[battlerIdTarget2].hp && + ctx->battleMons[battlerIdTarget2].ability != ABILITY_MULTITYPE) { + ret = battlerIdTarget2; + } + + return ret; +} + +extern u16 ov12_0226CB64[6]; + +static BOOL ov12_0225865C(BATTLECONTEXT *ctx, int moveNo) { + for (int i = 0; i < NELEMS(ov12_0226CB64); i++) { + if (ov12_0226CB64[i] == ctx->unk_334.moveData[moveNo].effect) { + return TRUE; + } + } + + return FALSE; +} + +static int BattleSystem_GetMoveType(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int moveNo) { + int type; + + switch (moveNo) { + case MOVE_NATURAL_GIFT: + type = GetNaturalGiftType(ctx, battlerId); + break; + case MOVE_JUDGMENT: + switch (GetBattlerHeldItemEffect(ctx, battlerId)) { + case HOLD_EFFECT_ARCEUS_FIGHT: + type = TYPE_FIGHTING; + break; + case HOLD_EFFECT_ARCEUS_FLYING: + type = TYPE_FLYING; + break; + case HOLD_EFFECT_ARCEUS_POISON: + type = TYPE_POISON; + break; + case HOLD_EFFECT_ARCEUS_GROUND: + type = TYPE_GROUND; + break; + case HOLD_EFFECT_ARCEUS_ROCK: + type = TYPE_ROCK; + break; + case HOLD_EFFECT_ARCEUS_BUG: + type = TYPE_BUG; + break; + case HOLD_EFFECT_ARCEUS_GHOST: + type = TYPE_GHOST; + break; + case HOLD_EFFECT_ARCEUS_STEEL: + type = TYPE_STEEL; + break; + case HOLD_EFFECT_ARCEUS_FIRE: + type = TYPE_FIRE; + break; + case HOLD_EFFECT_ARCEUS_WATER: + type = TYPE_WATER; + break; + case HOLD_EFFECT_ARCEUS_GRASS: + type = TYPE_GRASS; + break; + case HOLD_EFFECT_ARCEUS_ELECTRIC: + type = TYPE_ELECTRIC; + break; + case HOLD_EFFECT_ARCEUS_PSYCHIC: + type = TYPE_PSYCHIC; + break; + case HOLD_EFFECT_ARCEUS_ICE: + type = TYPE_ICE; + break; + case HOLD_EFFECT_ARCEUS_DRAGON: + type = TYPE_DRAGON; + break; + case HOLD_EFFECT_ARCEUS_DARK: + type = TYPE_DARK; + break; + default: + type = TYPE_NORMAL; + break; + } + break; + case MOVE_HIDDEN_POWER: + type = (ctx->battleMons[battlerId].hpIV & 1) | + ((ctx->battleMons[battlerId].atkIV & 1) << 1)| + ((ctx->battleMons[battlerId].defIV & 1) << 2) | + ((ctx->battleMons[battlerId].speedIV & 1) << 3) | + ((ctx->battleMons[battlerId].spAtkIV & 1) << 4) | + ((ctx->battleMons[battlerId].spDefIV & 1) << 5); + + type = (type * 15 / 63) + 1; + + if (type >= TYPE_MYSTERY) { + type++; + } + break; + case MOVE_WEATHER_BALL: + if (!CheckAbilityActive(bsys, ctx, CHECK_ABILITY_ALL_HP, 0, ABILITY_CLOUD_NINE) && !CheckAbilityActive(bsys, ctx, CHECK_ABILITY_ALL_HP, 0, ABILITY_AIR_LOCK)) { + if (ctx->fieldCondition & FIELD_CONDITION_WEATHER) { + if (ctx->fieldCondition & FIELD_CONDITION_RAIN_ALL) { + type = TYPE_WATER; + } + if (ctx->fieldCondition & FIELD_CONDITION_SANDSTORM_ALL) { + type = TYPE_ROCK; + } + if (ctx->fieldCondition & FIELD_CONDITION_SUN_ALL) { + type = TYPE_FIRE; + } + if (ctx->fieldCondition & FIELD_CONDITION_HAIL_ALL) { + type = TYPE_ICE; + } + //BUG: If the weather is foggy, then type doesn't get set properly before being returned + } + } + break; + default: + type = TYPE_NORMAL; + break; + } + + return type; +} + From 7e9abc169f9ef26a0a78fe9423028260da8ea7cf Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Tue, 11 Jul 2023 21:46:07 -0400 Subject: [PATCH 03/18] Add arrays --- asm/include/overlay_12_0224E4FC.inc | 178 ----------- asm/overlay_12_0224E4FC_s.s | 270 ----------------- main.lsf | 1 - src/battle/overlay_12_0224E4FC.c | 450 +++++++++++++++++++++++++++- 4 files changed, 435 insertions(+), 464 deletions(-) delete mode 100644 asm/include/overlay_12_0224E4FC.inc delete mode 100644 asm/overlay_12_0224E4FC_s.s diff --git a/asm/include/overlay_12_0224E4FC.inc b/asm/include/overlay_12_0224E4FC.inc deleted file mode 100644 index b5ba8c25b8..0000000000 --- a/asm/include/overlay_12_0224E4FC.inc +++ /dev/null @@ -1,178 +0,0 @@ -#include -#pragma once -.public StringNotEqualN -.public ReadWholeNarcMemberByIdPair -.public GetNarcMemberSizeByIdPair -.public FreeToHeap -.public GF_AssertFail -.public CopyU16ArrayToString -.public PlayerProfile_GetNamePtr -.public PlayerProfile_GetTrainerID -.public PlayerProfile_GetTrainerGender -.public sub_02039AD8 -.public AllocMonZeroed -.public GetMonData -.public SetMonData -.public GetMonGender -.public MonIsShiny -.public CopyPokemonToPokemon -.public GetFlavorPreferenceFromPID -.public GetArceusTypeByHeldItemEffect -.public Mon_UpdateGiratinaForm -.public sub_020720FC -.public MaskOfFlagNo -.public GetMoveMaxPP -.public TrainerMessageWithIdPairExists -.public GetPartyCount -.public GetPartyMonByIndex -.public GetItemIndexMapping -.public GetItemAttr -.public GetItemAttr_PreloadedItemData -.public ItemIdIsMail -.public BallToItemId -.public ItemIdIsBerry -.public GetItemDataPtrFromArray -.public sub_020880B0 -.public PokedexData_Create -.public PokedexData_Delete -.public PokedexData_LoadAll -.public PokedexData_UnloadAll -.public PokedexData_GetWeight -.public SetDexBanksByGiratinaForm -.public MIi_CpuClearFast -.public _s32_div_f -.public _u32_div_f -.public BattleSystem_GetBattleType -.public BattleSystem_GetOpponentDataByBattlerId -.public BattleSystem_GetMaxBattlers -.public BattleSystem_GetParty -.public BattleSystem_GetPartySize -.public BattleSystem_GetPartyMon -.public BattleSystem_GetTrainerIndex -.public BattleSystem_GetPlayerProfile -.public BattleSystem_GetMonBall -.public ov12_0223AB0C -.public BattleSystem_GetFieldSide -.public BattleSystem_GetTerrainId -.public ov12_0223AB60 -.public BattleSystem_GetBattlerIdPartner -.public ov12_0223ABB8 -.public BattleSystem_GetBattleFlags -.public BattleSystem_GetWeather -.public BattleSystem_Random -.public ov12_0223BFEC -.public BattleSystem_GetBattleMon -.public BattleSystem_ReloadMonData -.public ReadBattleScriptFromNarc -.public ov12_0224EBDC -.public ov12_0224EC74 -.public ov12_0224ECC4 -.public ov12_0224ED00 -.public Link_QueueNotEmpty -.public Link_CheckTimeout -.public ov12_0224EDC0 -.public GetBattlerVar -.public SetBattlerVar -.public ov12_0224F794 -.public CheckSortSpeed -.public BattleSystem_ClearExperienceEarnFlags -.public BattleSystem_SetExperienceEarnFlags -.public ov12_022503EC -.public ov12_02250490 -.public ov12_022506D4 -.public ov12_02250A18 -.public ov12_02250BBC -.public CopyBattleMonToPartyMon -.public LockBattlerIntoCurrentMove -.public UnlockBattlerOutOfCurrentMove -.public GetBattlerStatusCondition -.public CheckTrainerMessage -.public BattleContext_Init -.public ov12_02251038 -.public InitSwitchWork -.public InitFaintedWork -.public ov12_02251710 -.public StruggleCheck -.public ov12_02251A28 -.public BattleMon_GetMoveIndex -.public ov12_02251D28 -.public ov12_02252054 -.public ov12_02252218 -.public GetMonsHitCount -.public CreateNicknameTag -.public GetBattlerSelectedMove -.public CheckAbilityActive -.public BattleCtx_IsIdenticalToCurrentMove -.public GetTypeEffectivnessData -.public CalculateTypeEffectiveness -.public CheckMoveCallsOtherMove -.public CurseUserIsGhost -.public CanStealHeldItem -.public CanTrickHeldItem -.public WhirlwindCheck -.public GetBattlerAbility -.public CheckBattlerAbilityIfNotIgnored -.public CanSwitchMon -.public CantEscape -.public BattleTryRun -.public CheckTruant -.public BattleContext_CheckMoveImprisoned -.public ov12_02252D14 -.public SortMonsBySpeed -.public BattleContext_CheckMoveUnuseableInGravity -.public BattleContext_CheckMoveHealBlocked -.public ov12_02252E30 -.public GetBattlerLearnedMoveCount -.public ov12_02252EC8 -.public ov12_02253068 -.public DamageDivide -.public TryAbilityOnEntry -.public ov12_02253DA0 -.public CheckAbilityEffectOnHit -.public CheckStatusHealAbility -.public CheckStatusHealSwitch -.public TrySyncronizeStatus -.public TryUseHeldItem -.public CheckItemGradualHPRestore -.public CheckUseHeldItem -.public TryHeldItemNegativeEffect -.public GetBattlerHeldItem -.public ov12_0225561C -.public CheckItemEffectOnHit -.public GetBattlerHeldItemEffect -.public GetHeldItemModifier -.public GetNaturalGiftPower -.public GetNaturalGiftType -.public GetHeldItemFlingPower -.public BattlerCanSwitch -.public TryEatOpponentBerry -.public TryFling -.public ov12_022565E0 -.public ov12_02256694 -.public ov12_02256748 -.public Battler_CanSelectAction -.public ov12_022567D4 -.public ov12_0225682C -.public ov12_02256854 -.public ov12_022568B0 -.public ov12_02256F28 -.public ov12_02256F78 -.public CalcMoveDamage -.public ApplyDamageRange -.public TryCriticalHit -.public CheckLegalMimicMove -.public CheckLegalMetronomeMove -.public IsMoveEncored -.public CheckLegalMeFirstMove -.public GetItemVar -.public ov12_02257E98 -.public ov12_02257EC0 -.public CheckStatusEffectsSubstitute -.public CheckItemEffectOnUTurn -.public CheckIgnorePressure -.public ov12_022581BC -.public ov12_022581D4 -.public ov12_022582B8 -.public ov12_02261258 -.public BattleController_EmitBattleMonToPartyMonCopy -.public BattleController_EmitIncrementGameStat diff --git a/asm/overlay_12_0224E4FC_s.s b/asm/overlay_12_0224E4FC_s.s deleted file mode 100644 index d67ff397be..0000000000 --- a/asm/overlay_12_0224E4FC_s.s +++ /dev/null @@ -1,270 +0,0 @@ -#include "constants/pokemon.h" -#include "constants/sndseq.h" -#include "constants/items.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "overlay_12_0224E4FC.inc" - .include "global.inc" - - .rodata - -.public sCritChance -sCritChance: ; 0x0226CB48 - .byte 0x10, 0x08, 0x04, 0x03, 0x02, 0x00, 0x00, 0x00 - -.public sSpeedHalvingItemEffects -sSpeedHalvingItemEffects: ; 0x0226CB50 - .byte HOLD_EFFECT_EXP_UP_SPEED_DOWN, HOLD_EFFECT_SPEED_DOWN_GROUNDED, HOLD_EFFECT_LVLUP_HP_EV_UP, HOLD_EFFECT_LVLUP_ATK_EV_UP, HOLD_EFFECT_LVLUP_DEF_EV_UP, HOLD_EFFECT_LVLUP_SPEED_EV_UP, HOLD_EFFECT_LVLUP_SPATK_EV_UP, HOLD_EFFECT_LVLUP_SPDEF_EV_UP - -.public sEncoreFailMoves -sEncoreFailMoves: ; 0x0226CB58 - .short MOVE_TRANSFORM, MOVE_MIMIC, MOVE_SKETCH, MOVE_MIRROR_MOVE - .short MOVE_ENCORE, MOVE_STRUGGLE - -.public ov12_0226CB64 -ov12_0226CB64: ; 0x0226CB64 - .byte 0x29, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x90, 0x00, 0xE3, 0x00 - -.public sMeFirstUnuseableMoves -sMeFirstUnuseableMoves: ; 0x0226CB70 - .short MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_THIEF, MOVE_COVET, MOVE_FOCUS_PUNCH, MOVE_CHATTER - -.public sGravityUnusableMoves -sGravityUnusableMoves: ; 0x0226CB7C - .short MOVE_FLY, MOVE_BOUNCE - .short MOVE_JUMP_KICK, MOVE_HIGH_JUMP_KICK, MOVE_SPLASH, MOVE_MAGNET_RISE - -.public sStatChangeTable -sStatChangeTable: ; 0x0226CB88 - .byte 0x0A - -ov12_0226CB89: ; 0x0226CB89 - .byte 0x28, 0x0A, 0x23, 0x0A, 0x1E, 0x0A, 0x19 - .byte 0x0A, 0x14, 0x0A, 0x0F, 0x0A, 0x0A, 0x0F, 0x0A, 0x14, 0x0A, 0x19, 0x0A, 0x1E, 0x0A, 0x23, 0x0A - .byte 0x28, 0x0A - -.public sHealBlockUnusableMoves -sHealBlockUnusableMoves: ; 0x0226CBA2 - .short MOVE_RECOVER, MOVE_SOFT_BOILED, MOVE_REST, MOVE_MILK_DRINK, MOVE_MORNING_SUN, MOVE_SYNTHESIS, MOVE_MOONLIGHT - .short MOVE_SWALLOW, MOVE_HEAL_ORDER, MOVE_SLACK_OFF, MOVE_ROOST, MOVE_LUNAR_DANCE, MOVE_HEALING_WISH, MOVE_WISH - -.public sPunchingMoves -sPunchingMoves: ; 0x0226CBBE - .short MOVE_ICE_PUNCH - .short MOVE_FIRE_PUNCH, MOVE_THUNDER_PUNCH, MOVE_MACH_PUNCH, MOVE_FOCUS_PUNCH, MOVE_DIZZY_PUNCH, MOVE_DYNAMIC_PUNCH, MOVE_HAMMER_ARM, MOVE_MEGA_PUNCH - .short MOVE_COMET_PUNCH, MOVE_METEOR_MASH, MOVE_SHADOW_PUNCH, MOVE_DRAIN_PUNCH, MOVE_BULLET_PUNCH, MOVE_SKY_UPPERCUT - -.public ov12_0226CBDC -ov12_0226CBDC: ; 0x0226CBDC - .byte 0x0F, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00 - .byte 0x14, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00 - .byte 0x1A, 0x00, 0x00, 0x00 - -.public sMetronomeUnuseableMoves -sMetronomeUnuseableMoves: ; 0x0226CC04 - .short MOVE_METRONOME, MOVE_STRUGGLE, MOVE_SKETCH, MOVE_MIMIC, MOVE_CHATTER, 0xFFFE - .short MOVE_SLEEP_TALK, MOVE_ASSIST, MOVE_MIRROR_MOVE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_PROTECT, MOVE_DETECT, MOVE_ENDURE - .short MOVE_DESTINY_BOND, MOVE_THIEF, MOVE_FOLLOW_ME, MOVE_SNATCH, MOVE_HELPING_HAND, MOVE_COVET, MOVE_TRICK, MOVE_FOCUS_PUNCH - .short MOVE_FEINT, MOVE_COPYCAT, MOVE_ME_FIRST, MOVE_SWITCHEROO, 0xFFFF - -.public sTypeEnhancingItems -sTypeEnhancingItems: ; 0x0226CC3A - .byte HOLD_EFFECT_STRENGTHEN_BUG, TYPE_BUG - .byte HOLD_EFFECT_STRENGTHEN_STEEL, TYPE_STEEL - .byte HOLD_EFFECT_STRENGTHEN_GROUND, TYPE_GROUND - .byte HOLD_EFFECT_STRENGTHEN_ROCK, TYPE_ROCK - .byte HOLD_EFFECT_STRENGTHEN_GRASS, TYPE_GRASS - .byte HOLD_EFFECT_STRENGTHEN_DARK, TYPE_DARK - .byte HOLD_EFFECT_STRENGTHEN_FIGHT, TYPE_FIGHTING - .byte HOLD_EFFECT_STRENGTHEN_ELECTRIC, TYPE_ELECTRIC - .byte HOLD_EFFECT_STRENGTHEN_WATER, TYPE_WATER - .byte HOLD_EFFECT_STRENGTHEN_FLYING, TYPE_FLYING - .byte HOLD_EFFECT_STRENGTHEN_POISON, TYPE_POISON - .byte HOLD_EFFECT_STRENGTHEN_ICE, TYPE_ICE - .byte HOLD_EFFECT_STRENGTHEN_GHOST, TYPE_GHOST - .byte HOLD_EFFECT_STRENGTHEN_PSYCHIC, TYPE_PSYCHIC - .byte HOLD_EFFECT_STRENGTHEN_FIRE, TYPE_FIRE - .byte HOLD_EFFECT_STRENGTHEN_DRAGON, TYPE_DRAGON - .byte HOLD_EFFECT_STRENGTHEN_NORMAL, TYPE_NORMAL - .byte HOLD_EFFECT_ARCEUS_FIRE, TYPE_FIRE - .byte HOLD_EFFECT_ARCEUS_WATER, TYPE_WATER - .byte HOLD_EFFECT_ARCEUS_ELECTRIC, TYPE_ELECTRIC - .byte HOLD_EFFECT_ARCEUS_GRASS, TYPE_GRASS - .byte HOLD_EFFECT_ARCEUS_ICE, TYPE_ICE - .byte HOLD_EFFECT_ARCEUS_FIGHT, TYPE_FIGHTING - .byte HOLD_EFFECT_ARCEUS_POISON, TYPE_POISON - .byte HOLD_EFFECT_ARCEUS_GROUND, TYPE_GROUND - .byte HOLD_EFFECT_ARCEUS_FLYING, TYPE_FLYING - .byte HOLD_EFFECT_ARCEUS_PSYCHIC, TYPE_PSYCHIC - .byte HOLD_EFFECT_ARCEUS_BUG, TYPE_BUG - .byte HOLD_EFFECT_ARCEUS_ROCK, TYPE_ROCK - .byte HOLD_EFFECT_ARCEUS_GHOST, TYPE_GHOST - .byte HOLD_EFFECT_ARCEUS_DRAGON, TYPE_DRAGON - .byte HOLD_EFFECT_ARCEUS_DARK, TYPE_DARK - .byte HOLD_EFFECT_ARCEUS_STEEL, TYPE_STEEL - -; format: attacking type, defending type, damage multiplier -.public sTypeEffectiveness -sTypeEffectiveness: ; 0x0226CC7C - .byte TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT - .byte TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT - .byte TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT - .byte TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT - .byte TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT - .byte TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE - .byte TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE - .byte TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT - .byte TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT - .byte TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT - .byte TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT - -.public ov12_0226CDCC -ov12_0226CDCC: ; 0x0226CDCC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x12, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00 - .byte 0x1F, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00 - .byte 0x37, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00 - .byte 0x3A, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x40, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00 - .byte 0x5D, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00 - .byte 0x8A, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 - .byte 0x2C, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00 - .byte 0x94, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00 - .byte 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00 - .byte 0x2D, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00 - .byte 0x36, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00 - .byte 0x46, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00 - .byte 0x4F, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00 - .byte 0x54, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00 - .byte 0x5B, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00 - .byte 0x61, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00 - .byte 0x67, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00 - .byte 0x70, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00 - .byte 0x7A, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00 - .byte 0x7F, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00 - .byte 0x84, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00 - .byte 0x8D, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00 - .byte 0x9B, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x9F, 0x00, 0x00, 0x00 - .byte 0xA0, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00 - .byte 0xA4, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00 - .byte 0xA8, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00, 0xAD, 0x00, 0x00, 0x00 - .byte 0xAF, 0x00, 0x00, 0x00, 0xDA, 0x00, 0x00, 0x00, 0xDB, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00 - .byte 0xE2, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00 - .byte 0xF9, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00 - - .data - -.public sSoundMoves -sSoundMoves: ; 0x0226EC20 - .short MOVE_GROWL, MOVE_ROAR, MOVE_SING, MOVE_SUPERSONIC, MOVE_SCREECH, MOVE_SNORE, MOVE_UPROAR, MOVE_METAL_SOUND - .short MOVE_GRASS_WHISTLE, MOVE_HYPER_VOICE, MOVE_BUG_BUZZ, MOVE_CHATTER - ; 0x0226EC40 - \ No newline at end of file diff --git a/main.lsf b/main.lsf index 76fdf9d9ae..b84ba393fa 100644 --- a/main.lsf +++ b/main.lsf @@ -570,7 +570,6 @@ Overlay OVY_12 Object src/battle/battle_controller_player.o Object asm/overlay_12_battle_controller_player.o Object src/battle/overlay_12_0224E4FC.o - Object asm/overlay_12_0224E4FC_s.o Object asm/overlay_12_battle_controller_opponent.o Object asm/overlay_12_02261FD4.o Object asm/overlay_12_battle_controller.o diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 971c4373d2..3fbef089a4 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -17,6 +17,8 @@ #include "constants/species.h" #include "msgdata/msg/msg_0197.h" +static const u8 sStatChangeTable[][2]; + static BOOL CheckFlyingImmunity(BATTLECONTEXT *ctx, int item, int index); static void ApplyEffectivenessFlags(int effectiveness, u32 *moveStatusFlag); static int ov12_02258348(BATTLECONTEXT *ctx, int statChangeType, u32 flag); @@ -965,8 +967,16 @@ void AddBattlerVar(BattleMon *mon, u32 varId, int data) { } } -extern u8 sStatChangeTable[13][2]; -extern u8 sSpeedHalvingItemEffects[8]; +static const u8 sSpeedHalvingItemEffects[] = { + HOLD_EFFECT_EXP_UP_SPEED_DOWN, + HOLD_EFFECT_SPEED_DOWN_GROUNDED, + HOLD_EFFECT_LVLUP_HP_EV_UP, + HOLD_EFFECT_LVLUP_ATK_EV_UP, + HOLD_EFFECT_LVLUP_DEF_EV_UP, + HOLD_EFFECT_LVLUP_SPEED_EV_UP, + HOLD_EFFECT_LVLUP_SPATK_EV_UP, + HOLD_EFFECT_LVLUP_SPDEF_EV_UP +}; u8 CheckSortSpeed(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId1, int battlerId2, int flag) { u8 ret = 0; //0 - don't sort, 1 - sort, 2 - sort (speed tie + won random check) @@ -2090,7 +2100,120 @@ int BattleMon_GetMoveIndex(BattleMon *mon, u16 moveNo) { return movePos; } -extern u8 sTypeEffectiveness[112][3]; +static const u8 sTypeEffectiveness[][3] = { + { TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT }, + { TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT }, + { TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT }, + { TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT }, + { TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT }, + { TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT }, + { TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT }, + { TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT }, + { TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT } +}; //static BOOL ov12_02251C74(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget, int index) { @@ -3273,7 +3396,14 @@ void SortMonsBySpeed(BattleSystem *bsys, BATTLECONTEXT *ctx) { } } -extern u16 sGravityUnusableMoves[6]; +static const u16 sGravityUnusableMoves[6] = { + MOVE_FLY, + MOVE_BOUNCE, + MOVE_JUMP_KICK, + MOVE_HIGH_JUMP_KICK, + MOVE_SPLASH, + MOVE_MAGNET_RISE +}; BOOL BattleContext_CheckMoveUnuseableInGravity(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int moveNo) { int i; @@ -3291,7 +3421,22 @@ BOOL BattleContext_CheckMoveUnuseableInGravity(BattleSystem *bsys, BATTLECONTEXT return ret; } -extern u16 sHealBlockUnusableMoves[14]; +static const u16 sHealBlockUnusableMoves[] = { + MOVE_RECOVER, + MOVE_SOFT_BOILED, + MOVE_REST, + MOVE_MILK_DRINK, + MOVE_MORNING_SUN, + MOVE_SYNTHESIS, + MOVE_MOONLIGHT, + MOVE_SWALLOW, + MOVE_HEAL_ORDER, + MOVE_SLACK_OFF, + MOVE_ROOST, + MOVE_LUNAR_DANCE, + MOVE_HEALING_WISH, + MOVE_WISH +}; BOOL BattleContext_CheckMoveHealBlocked(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int moveNo) { int i; @@ -3338,7 +3483,21 @@ int GetBattlerLearnedMoveCount(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl return cnt; } -extern u16 sSoundMoves[12]; +//BUG: There isn't a reason why this shouldn't be const, but it's located in .data and not .rodata +static u16 sSoundMoves[] = { + MOVE_GROWL, + MOVE_ROAR, + MOVE_SING, + MOVE_SUPERSONIC, + MOVE_SCREECH, + MOVE_SNORE, + MOVE_UPROAR, + MOVE_METAL_SOUND, + MOVE_GRASS_WHISTLE, + MOVE_HYPER_VOICE, + MOVE_BUG_BUZZ, + MOVE_CHATTER +}; int ov12_02252EC8(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget) { int state; @@ -5892,8 +6051,75 @@ typedef struct MoveDamageCalc { u8 type2; } MoveDamageCalc; -extern u8 sTypeEnhancingItems[33][2]; -extern u16 sPunchingMoves[15]; +static const u8 sTypeEnhancingItems[][2] = { + { HOLD_EFFECT_STRENGTHEN_BUG, TYPE_BUG }, + { HOLD_EFFECT_STRENGTHEN_STEEL, TYPE_STEEL }, + { HOLD_EFFECT_STRENGTHEN_GROUND, TYPE_GROUND }, + { HOLD_EFFECT_STRENGTHEN_ROCK, TYPE_ROCK }, + { HOLD_EFFECT_STRENGTHEN_GRASS, TYPE_GRASS }, + { HOLD_EFFECT_STRENGTHEN_DARK, TYPE_DARK }, + { HOLD_EFFECT_STRENGTHEN_FIGHT, TYPE_FIGHTING }, + { HOLD_EFFECT_STRENGTHEN_ELECTRIC, TYPE_ELECTRIC }, + { HOLD_EFFECT_STRENGTHEN_WATER, TYPE_WATER }, + { HOLD_EFFECT_STRENGTHEN_FLYING, TYPE_FLYING }, + { HOLD_EFFECT_STRENGTHEN_POISON, TYPE_POISON }, + { HOLD_EFFECT_STRENGTHEN_ICE, TYPE_ICE }, + { HOLD_EFFECT_STRENGTHEN_GHOST, TYPE_GHOST }, + { HOLD_EFFECT_STRENGTHEN_PSYCHIC, TYPE_PSYCHIC }, + { HOLD_EFFECT_STRENGTHEN_FIRE, TYPE_FIRE }, + { HOLD_EFFECT_STRENGTHEN_DRAGON, TYPE_DRAGON }, + { HOLD_EFFECT_STRENGTHEN_NORMAL, TYPE_NORMAL }, + { HOLD_EFFECT_ARCEUS_FIRE, TYPE_FIRE }, + { HOLD_EFFECT_ARCEUS_WATER, TYPE_WATER }, + { HOLD_EFFECT_ARCEUS_ELECTRIC, TYPE_ELECTRIC }, + { HOLD_EFFECT_ARCEUS_GRASS, TYPE_GRASS }, + { HOLD_EFFECT_ARCEUS_ICE, TYPE_ICE }, + { HOLD_EFFECT_ARCEUS_FIGHT, TYPE_FIGHTING }, + { HOLD_EFFECT_ARCEUS_POISON, TYPE_POISON }, + { HOLD_EFFECT_ARCEUS_GROUND, TYPE_GROUND }, + { HOLD_EFFECT_ARCEUS_FLYING, TYPE_FLYING }, + { HOLD_EFFECT_ARCEUS_PSYCHIC, TYPE_PSYCHIC }, + { HOLD_EFFECT_ARCEUS_BUG, TYPE_BUG }, + { HOLD_EFFECT_ARCEUS_ROCK, TYPE_ROCK }, + { HOLD_EFFECT_ARCEUS_GHOST, TYPE_GHOST }, + { HOLD_EFFECT_ARCEUS_DRAGON, TYPE_DRAGON }, + { HOLD_EFFECT_ARCEUS_DARK, TYPE_DARK }, + { HOLD_EFFECT_ARCEUS_STEEL, TYPE_STEEL } +}; + +static const u8 sStatChangeTable[][2] = { + {10, 40}, + {10, 35}, + {10, 30}, + {10, 25}, + {10, 20}, + {10, 15}, + {10, 10}, + {15, 10}, + {20, 10}, + {25, 10}, + {30, 10}, + {35, 10}, + {40, 10} +}; + +static const u16 sPunchingMoves[] = { + MOVE_ICE_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_THUNDER_PUNCH, + MOVE_MACH_PUNCH, + MOVE_FOCUS_PUNCH, + MOVE_DIZZY_PUNCH, + MOVE_DYNAMIC_PUNCH, + MOVE_HAMMER_ARM, + MOVE_MEGA_PUNCH, + MOVE_COMET_PUNCH, + MOVE_METEOR_MASH, + MOVE_SHADOW_PUNCH, + MOVE_DRAIN_PUNCH, + MOVE_BULLET_PUNCH, + MOVE_SKY_UPPERCUT +}; int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideCondition, u32 fieldCondition, u16 power, u8 type, u8 battlerIdAttacker, u8 battlerIdTarget, u8 crit) { int i; @@ -6318,7 +6544,9 @@ int ApplyDamageRange(BattleSystem *bsys, BATTLECONTEXT *ctx, int damage) { return damage; } -extern u8 sCritChance[5]; +static const u8 sCritChance[] = { + 16, 8, 4, 3, 2 +}; u32 TryCriticalHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget, int critCnt, u32 sideCondition) { u16 critUp; @@ -6360,7 +6588,35 @@ u32 TryCriticalHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker return ret; } -extern u16 sMetronomeUnuseableMoves[]; +static const u16 sMetronomeUnuseableMoves[] = { + MOVE_METRONOME, + MOVE_STRUGGLE, + MOVE_SKETCH, + MOVE_MIMIC, + MOVE_CHATTER, + 0xFFFE, + MOVE_SLEEP_TALK, + MOVE_ASSIST, + MOVE_MIRROR_MOVE, + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_PROTECT, + MOVE_DETECT, + MOVE_ENDURE, + MOVE_DESTINY_BOND, + MOVE_THIEF, + MOVE_FOLLOW_ME, + MOVE_SNATCH, + MOVE_HELPING_HAND, + MOVE_COVET, + MOVE_TRICK, + MOVE_FOCUS_PUNCH, + MOVE_FEINT, + MOVE_COPYCAT, + MOVE_ME_FIRST, + MOVE_SWITCHEROO, + 0xFFFF +}; BOOL CheckLegalMimicMove(u16 moveNo) { int i = 0; @@ -6392,7 +6648,14 @@ BOOL CheckLegalMetronomeMove(BattleSystem *bsys, BATTLECONTEXT *ctx, int battler return (sMetronomeUnuseableMoves[i] == 0xFFFF); } -extern u16 sEncoreFailMoves[6]; +static const u16 sEncoreFailMoves[] = { + MOVE_TRANSFORM, + MOVE_MIMIC, + MOVE_SKETCH, + MOVE_MIRROR_MOVE, + MOVE_ENCORE, + MOVE_STRUGGLE +}; BOOL IsMoveEncored(BATTLECONTEXT *ctx, u16 moveNo) { int i = 0; @@ -6407,7 +6670,14 @@ BOOL IsMoveEncored(BATTLECONTEXT *ctx, u16 moveNo) { return (i == NELEMS(sEncoreFailMoves)); } -extern u16 sMeFirstUnuseableMoves[6]; +static const u16 sMeFirstUnuseableMoves[] = { + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_THIEF, + MOVE_COVET, + MOVE_FOCUS_PUNCH, + MOVE_CHATTER +}; BOOL CheckLegalMeFirstMove(BATTLECONTEXT *ctx, u16 moveNo) { int i = 0; @@ -6469,7 +6739,9 @@ void ov12_02257EC0(BattleSystem *bsys, BATTLECONTEXT *ctx) { } } -extern int ov12_0226CBDC[10]; +static const int ov12_0226CBDC[] = { + 15, 16, 17, 18, 19, 20, 21, 22, 25, 26 +}; BOOL CheckStatusEffectsSubstitute(BATTLECONTEXT *ctx, int battlerId, int status) { int i; @@ -6619,7 +6891,153 @@ void ov12_022582B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int var, int battlerI } } -extern const int ov12_0226CDCC[145]; +static const int ov12_0226CDCC[145] = { + 0, + 18, + 22, + 25, + 27, + 31, + 47, + 37, + 14, + 55, + 56, + 48, + 13, + 58, + 63, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 64, + 66, + 85, + 86, + 93, + 119, + 115, + 130, + 138, + 147, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 44, + 142, + 149, + 150, + 148, + 151, + 152, + 24, + 33, + 34, + 35, + 43, + 45, + 46, + 49, + 52, + 54, + 62, + 67, + 68, + 70, + 73, + 77, + 78, + 79, + 80, + 81, + 82, + 84, + 87, + 88, + 89, + 91, + 92, + 95, + 96, + 97, + 126, + 100, + 101, + 103, + 105, + 106, + 109, + 112, + 113, + 114, + 120, + 122, + 123, + 124, + 125, + 127, + 128, + 129, + 131, + 132, + 134, + 135, + 140, + 141, + 143, + 145, + 154, + 155, + 156, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 170, + 171, + 173, + 175, + 218, + 219, + 220, + 226, + 246, + 247, + 248, + 249, + 260, + 261, + 118 +}; static int ov12_02258348(BATTLECONTEXT *ctx, int statChangeType, u32 flag) { ctx->statChangeType = statChangeType; @@ -6805,7 +7223,9 @@ static int ov12_022585B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdTa return ret; } -extern u16 ov12_0226CB64[6]; +static const u16 ov12_0226CB64[] = { + 41, 87, 88, 89, 144, 227 +}; static BOOL ov12_0225865C(BATTLECONTEXT *ctx, int moveNo) { for (int i = 0; i < NELEMS(ov12_0226CB64); i++) { From 3be54ba5acb16671842b6167b216390e2376f6b8 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Tue, 11 Jul 2023 22:01:15 -0400 Subject: [PATCH 04/18] Port move effect consts from @BluRosie's HGSS Engine Co-Authored-By: Nathan <16446370+BluRosie@users.noreply.github.com> --- include/constants/move_effects.h | 63 +++++++++++++++++++++++++++++++ src/battle/overlay_12_0224E4FC.c | 65 +++++++++++++++++--------------- 2 files changed, 98 insertions(+), 30 deletions(-) create mode 100644 include/constants/move_effects.h diff --git a/include/constants/move_effects.h b/include/constants/move_effects.h new file mode 100644 index 0000000000..07f84d9453 --- /dev/null +++ b/include/constants/move_effects.h @@ -0,0 +1,63 @@ +#ifndef POKEHEARTGOLD_CONSTANTS_MOVE_EFFECTS_H +#define POKEHEARTGOLD_CONSTANTS_MOVE_EFFECTS_H + +#define MOVE_EFFECT_HIT 0 +#define MOVE_EFFECT_POISON_HIT 2 +#define MOVE_EFFECT_BURN_HIT 4 +#define MOVE_EFFECT_FREEZE_HIT 5 +#define MOVE_EFFECT_PARALYZE_HIT 6 +#define MOVE_EFFECT_HALVE_DEFENSE 7 +#define MOVE_EFFECT_26 26 +#define MOVE_EFFECT_MULTI_HIT 29 +#define MOVE_EFFECT_FLINCH_HIT 31 +#define MOVE_EFFECT_RANDOM_PRIMARY_STATUS_HIT 36 // tri attack +#define MOVE_EFFECT_ONE_HIT_KO 38 +#define MOVE_EFFECT_39 39 +#define MOVE_EFFECT_41 41 +#define MOVE_EFFECT_HIGH_CRITICAL 43 +#define MOVE_EFFECT_LOWER_ATTACK_HIT 68 +#define MOVE_EFFECT_LOWER_DEFENSE_HIT 69 +#define MOVE_EFFECT_LOWER_SPEED_HIT 70 +#define MOVE_EFFECT_LOWER_SP_ATK_HIT 71 +#define MOVE_EFFECT_LOWER_SP_DEF_HIT 72 +#define MOVE_EFFECT_LOWER_ACCURACY_HIT 73 +#define MOVE_EFFECT_75 75 +#define MOVE_EFFECT_CONFUSE_HIT 76 +#define MOVE_EFFECT_POISON_MULTI_HIT 77 +#define MOVE_EFFECT_87 87 +#define MOVE_EFFECT_88 88 +#define MOVE_EFFECT_COUNTER 89 +#define MOVE_EFFECT_LEAVE_WITH_1_HP 101 +#define MOVE_EFFECT_THAW_AND_BURN_HIT 125 +#define MOVE_EFFECT_RAISE_ATTACK_HIT 139 +#define MOVE_EFFECT_RAISE_ALL_STATS_HIT 140 +#define MOVE_EFFECT_MIRROR_COAT 144 +#define MOVE_EFFECT_145 145 +#define MOVE_EFFECT_FLINCH_DOUBLE_DAMAGE_FLY_OR_BOUNCE 146 +#define MOVE_EFFECT_FLINCH_MINIMIZE_DOUBLE_HIT 150 +#define MOVE_EFFECT_151 151 +#define MOVE_EFFECT_THUNDER 152 +#define MOVE_EFFECT_155 155 +#define MOVE_EFFECT_REMOVE_SCREENS 186 +#define MOVE_EFFECT_SECRET_POWER 197 +#define MOVE_EFFECT_RECOIL_HIT 198 +#define MOVE_EFFECT_HIGH_CRITICAL_BURN_HIT 200 +#define MOVE_EFFECT_FLINCH_POISON_HIT 202 +#define MOVE_EFFECT_HIGH_CRITICAL_POISON_HIT 209 +#define MOVE_EFFECT_METAL_BURST 227 +#define MOVE_EFFECT_RECOIL_BURN_HIT 253 +#define MOVE_EFFECT_255 255 +#define MOVE_EFFECT_256 256 +#define MOVE_EFFECT_BLIZZARD 260 +#define MOVE_EFFECT_RECOIL_PARALYZE_HIT 262 +#define MOVE_EFFECT_263 263 +#define MOVE_EFFECT_CHATTER 267 +#define MOVE_EFFECT_LOWER_SP_DEF_2_HIT 271 +#define MOVE_EFFECT_272 272 +#define MOVE_EFFECT_FLINCH_BURN_HIT 273 +#define MOVE_EFFECT_FLINCH_FREEZE_HIT 274 +#define MOVE_EFFECT_FLINCH_PARALYZE_HIT 275 +#define MOVE_EFFECT_RAISE_SP_ATK_HIT 276 + + +#endif //POKEHEARTGOLD_CONSTANTS_MOVE_EFFECTS_H diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 3fbef089a4..b25ea5322e 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -15,6 +15,7 @@ #include "constants/items.h" #include "constants/moves.h" #include "constants/species.h" +#include "constants/move_effects.h" #include "msgdata/msg/msg_0197.h" static const u8 sStatChangeTable[][2]; @@ -2957,16 +2958,16 @@ int CheckAbilityActive(BattleSystem *bsys, BATTLECONTEXT *ctx, int flag, int bat //FIXME: Function name is wrong BOOL BattleCtx_IsIdenticalToCurrentMove(BATTLECONTEXT *ctx, int moveNo) { switch (ctx->unk_334.moveData[moveNo].effect) { - case 26: - case 39: - case 75: - case 145: - case 151: - case 155: - case 255: - case 256: - case 263: - case 272: + case MOVE_EFFECT_26: + case MOVE_EFFECT_39: + case MOVE_EFFECT_75: + case MOVE_EFFECT_145: + case MOVE_EFFECT_151: + case MOVE_EFFECT_155: + case MOVE_EFFECT_255: + case MOVE_EFFECT_256: + case MOVE_EFFECT_263: + case MOVE_EFFECT_272: return TRUE; } return FALSE; @@ -3800,7 +3801,7 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (moveNo) { moveStatus = 0; ctx->damage = ov12_02251D28(bsys, ctx, moveNo, 0, battlerIdCheck, battlerId, ctx->damage, &moveStatus); - if (!(moveStatus & MOVE_STATUS_NO_EFFECT) && !ov12_0225865C(ctx, moveNo) && ((moveStatus & MOVE_STATUS_SUPER_EFFECTIVE) || (ctx->unk_334.moveData[moveNo].effect == 38 && ctx->battleMons[battlerId].level <= ctx->battleMons[battlerIdCheck].level))) { + if (!(moveStatus & MOVE_STATUS_NO_EFFECT) && !ov12_0225865C(ctx, moveNo) && ((moveStatus & MOVE_STATUS_SUPER_EFFECTIVE) || (ctx->unk_334.moveData[moveNo].effect == MOVE_EFFECT_ONE_HIT_KO && ctx->battleMons[battlerId].level <= ctx->battleMons[battlerIdCheck].level))) { flag = TRUE; break; } @@ -3847,16 +3848,15 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { switch (power) { case 1: switch (ctx->unk_334.moveData[moveNo].effect) { - case 38: //OHKO? + case MOVE_EFFECT_ONE_HIT_KO: if (powerTemp < 150 || (powerTemp == 150 && (BattleSystem_Random(bsys) & 1))) { powerTemp = 150; ctx->moveTemp = moveNo; } break; - //Counter, Mirror Coat, Metal Burst - case 89: - case 144: - case 227: + case MOVE_EFFECT_COUNTER: + case MOVE_EFFECT_MIRROR_COAT: + case MOVE_EFFECT_METAL_BURST: if (powerTemp < 120 || ((powerTemp == 120) && (BattleSystem_Random(bsys) & 1))) { powerTemp = 120; ctx->moveTemp = moveNo; @@ -6414,7 +6414,7 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC } } - if (ctx->unk_334.moveData[moveNo].effect == 7) { + if (ctx->unk_334.moveData[moveNo].effect == MOVE_EFFECT_HALVE_DEFENSE) { monDef /= 2; } @@ -6449,7 +6449,7 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC dmg /= 2; } - if ((sideCondition & SIDE_CONDITION_REFLECT) && crit == 1 && ctx->unk_334.moveData[moveNo].effect != 186) { + if ((sideCondition & SIDE_CONDITION_REFLECT) && crit == 1 && ctx->unk_334.moveData[moveNo].effect != MOVE_EFFECT_REMOVE_SCREENS) { if ((battleType & BATTLE_TYPE_DOUBLES) && GetMonsHitCount(bsys, ctx, 1, battlerIdTarget) == 2) { dmg = dmg * 2 / 3; } else { @@ -6483,7 +6483,7 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC dmg /= dmg2; dmg /= 50; - if ((sideCondition & SIDE_CONDITION_LIGHT_SCREEN) && crit == 1 && ctx->unk_334.moveData[moveNo].effect != 186) { + if ((sideCondition & SIDE_CONDITION_LIGHT_SCREEN) && crit == 1 && ctx->unk_334.moveData[moveNo].effect != MOVE_EFFECT_REMOVE_SCREENS) { if ((battleType & BATTLE_TYPE_DOUBLES) && GetMonsHitCount(bsys, ctx, 1, battlerIdTarget) == 2) { dmg = dmg * 2 / 3; } else { @@ -7093,16 +7093,16 @@ static int ov12_022583B4(BATTLECONTEXT *ctx, int battlerId, int typeEffectivenes static int ov12_02258440(BATTLECONTEXT *ctx, int moveNo) { switch (ctx->unk_334.moveData[moveNo].effect) { - case 26: - case 39: - case 75: - case 145: - case 151: - case 155: - case 255: - case 256: - case 263: - case 273: + case MOVE_EFFECT_26: + case MOVE_EFFECT_39: + case MOVE_EFFECT_75: + case MOVE_EFFECT_145: + case MOVE_EFFECT_151: + case MOVE_EFFECT_155: + case MOVE_EFFECT_255: + case MOVE_EFFECT_256: + case MOVE_EFFECT_263: + case MOVE_EFFECT_FLINCH_BURN_HIT: return (ctx->linkStatus & (1 << 9)); } @@ -7224,7 +7224,12 @@ static int ov12_022585B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdTa } static const u16 ov12_0226CB64[] = { - 41, 87, 88, 89, 144, 227 + MOVE_EFFECT_41, + MOVE_EFFECT_87, + MOVE_EFFECT_88, + MOVE_EFFECT_COUNTER, + MOVE_EFFECT_MIRROR_COAT, + MOVE_EFFECT_METAL_BURST }; static BOOL ov12_0225865C(BATTLECONTEXT *ctx, int moveNo) { From 1e0f9e56441ae837527e04ae97660f82c788c937 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Tue, 11 Jul 2023 22:24:44 -0400 Subject: [PATCH 05/18] Battle script var constants --- include/constants/battle_script.h | 76 ++++++++++++++++ include/constants/move_effects.h | 1 - src/battle/battle_command.c | 145 +++++++++++++++--------------- 3 files changed, 149 insertions(+), 73 deletions(-) create mode 100644 include/constants/battle_script.h diff --git a/include/constants/battle_script.h b/include/constants/battle_script.h new file mode 100644 index 0000000000..1274d2eb8c --- /dev/null +++ b/include/constants/battle_script.h @@ -0,0 +1,76 @@ +#ifndef POKEHEARTGOLD_CONSTANTS_BATTLE_SCRIPT_H +#define POKEHEARTGOLD_CONSTANTS_BATTLE_SCRIPT_H + +#define BSCRIPT_VAR_BATTLE_FLAGS 0 +#define BSCRIPT_VAR_CRIT_COUNT 1 +#define BSCRIPT_VAR_2 2 +#define BSCRIPT_VAR_3 3 +#define BSCRIPT_VAR_4 4 +#define BSCRIPT_VAR_STAT_CHANGE_TYPE 5 +#define BSCRIPT_VAR_LINK_STATUS 6 +#define BSCRIPT_VAR_FIELD_CONDITION 7 +#define BSCRIPT_VAR_8 8 +#define BSCRIPT_VAR_CALC_TEMP 9 +#define BSCRIPT_VAR_MOVE_STATUS_FLAG 10 +#define BSCRIPT_VAR_SIDE_CONDITION_ATTACKER 11 +#define BSCRIPT_VAR_SIDE_CONDITION_TARGET 12 +#define BSCRIPT_VAR_SIDE_CONDITION_STAT_CHANGE 13 +#define BSCRIPT_VAR_DAMAGE 14 +#define BSCRIPT_VAR_BATTLER_ATTACKER 15 +#define BSCRIPT_VAR_BATTLER_TARGET 16 +#define BSCRIPT_VAR_BATTLER_STAT_CHANGE 17 +#define BSCRIPT_VAR_BATTLER_FAINTED 18 +#define BSCRIPT_VAR_BATTLER_SWITCH 19 +#define BSCRIPT_VAR_BATTLER_TEMP 20 +#define BSCRIPT_VAR_21 21 +#define BSCRIPT_VAR_MESSAGE 22 +#define BSCRIPT_VAR_23 23 +#define BSCRIPT_VAR_MOVE_NO_CUR 24 +#define BSCRIPT_VAR_TOTAL_TURNS 25 +#define BSCRIPT_VAR_26 26 +#define BSCRIPT_VAR_27 27 +#define BSCRIPT_VAR_MOVE_NO_TEMP 28 +#define BSCRIPT_VAR_29 29 +#define BSCRIPT_VAR_MOVE_POWER 30 +#define BSCRIPT_VAR_31 31 +#define BSCRIPT_VAR_HP_CALC 32 +#define BSCRIPT_VAR_BATTLE_OUTCOME 33 +#define BSCRIPT_VAR_STAT_CHANGE_PARAM 34 +#define BSCRIPT_VAR_MOVE_TEMP 35 +#define BSCRIPT_VAR_ITEM_TEMP 36 +#define BSCRIPT_VAR_ABILITY_TEMP 37 +#define BSCRIPT_VAR_WEATHER_TURNS 38 +#define BSCRIPT_VAR_39 39 +#define BSCRIPT_VAR_40 40 +#define BSCRIPT_VAR_PHYSICAL_DAMAGE 41 +#define BSCRIPT_VAR_SPECIAL_DAMAGE 42 +#define BSCRIPT_VAR_TEMP_DATA 43 +#define BSCRIPT_VAR_CRIT_MULTIPLIER 44 +#define BSCRIPT_VAR_45 45 +#define BSCRIPT_VAR_46 46 +#define BSCRIPT_VAR_47 47 +#define BSCRIPT_VAR_48 48 +#define BSCRIPT_VAR_49 49 +#define BSCRIPT_VAR_FLING_DATA 50 +#define BSCRIPT_VAR_FLING_SCRIPT 51 +#define BSCRIPT_VAR_52 52 +#define BSCRIPT_VAR_MOVE_LOCKED_INTO_ATTACKER 53 +#define BSCRIPT_VAR_HIT_DAMAGE 54 +#define BSCRIPT_VAR_SAFARI_BALL_CNT 55 +#define BSCRIPT_VAR_BATTLER_SWITCH_TEMP 56 +#define BSCRIPT_VAR_MOVE_TYPE 57 +#define BSCRIPT_VAR_58 58 +#define BSCRIPT_VAR_59 59 +#define BSCRIPT_VAR_LINK_STATUS_2 60 +#define BSCRIPT_VAR_61 61 +#define BSCRIPT_VAR_62 62 +#define BSCRIPT_VAR_BATTLER_ATTACKER_TEMP 63 +#define BSCRIPT_VAR_BATTLER_TARGET_TEMP 64 +#define BSCRIPT_VAR_PHYSICAL_DAMAGE_TAKEN 65 +#define BSCRIPT_VAR_66 66 +#define BSCRIPT_VAR_67 67 +#define BSCRIPT_VAR_SHELL_BELL_HP 68 +#define BSCRIPT_VAR_BATTLERS_ON_FIELD 69 +#define BSCRIPT_VAR_70 70 + +#endif diff --git a/include/constants/move_effects.h b/include/constants/move_effects.h index 07f84d9453..3c4c7af82c 100644 --- a/include/constants/move_effects.h +++ b/include/constants/move_effects.h @@ -59,5 +59,4 @@ #define MOVE_EFFECT_FLINCH_PARALYZE_HIT 275 #define MOVE_EFFECT_RAISE_SP_ATK_HIT 276 - #endif //POKEHEARTGOLD_CONSTANTS_MOVE_EFFECTS_H diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index a0c94ba492..f7d575364c 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -13,6 +13,7 @@ #include "overlay_12_0224E4FC.h" #include "constants/abilities.h" #include "constants/battle.h" +#include "constants/battle_script.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/pokemon.h" @@ -5908,149 +5909,149 @@ static void BattleScriptGotoSubscript(BATTLECONTEXT *ctx, NarcId narcId, int adr static void *BattleScriptGetVarPointer(BattleSystem *bsys, BATTLECONTEXT *ctx, int var) { switch (var) { - case 0: + case BSCRIPT_VAR_BATTLE_FLAGS: return &bsys->battleTypeFlags; - case 1: + case BSCRIPT_VAR_CRIT_COUNT: return &ctx->criticalCnt; - case 2: + case BSCRIPT_VAR_2: return &ctx->unk_2170; - case 3: + case BSCRIPT_VAR_3: return &ctx->unk_2174; - case 4: + case BSCRIPT_VAR_4: return &ctx->unk_2178; - case 5: + case BSCRIPT_VAR_STAT_CHANGE_TYPE: return &ctx->statChangeType; - case 6: + case BSCRIPT_VAR_LINK_STATUS: return &ctx->linkStatus; - case 7: + case BSCRIPT_VAR_FIELD_CONDITION: return &ctx->fieldCondition; - case 8: + case BSCRIPT_VAR_8: return &ctx->unk_2158; - case 9: + case BSCRIPT_VAR_CALC_TEMP: return &ctx->calcTemp; - case 10: + case BSCRIPT_VAR_MOVE_STATUS_FLAG: return &ctx->moveStatusFlag; - case 11: + case BSCRIPT_VAR_SIDE_CONDITION_ATTACKER: return &ctx->fieldSideConditionFlags[BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker)]; - case 12: + case BSCRIPT_VAR_SIDE_CONDITION_TARGET: return &ctx->fieldSideConditionFlags[BattleSystem_GetFieldSide(bsys, ctx->battlerIdTarget)]; - case 13: + case BSCRIPT_VAR_SIDE_CONDITION_STAT_CHANGE: return &ctx->fieldSideConditionFlags[BattleSystem_GetFieldSide(bsys, ctx->battlerIdStatChange)]; - case 14: + case BSCRIPT_VAR_DAMAGE: return &ctx->damage; - case 15: + case BSCRIPT_VAR_BATTLER_ATTACKER: return &ctx->battlerIdAttacker; - case 16: + case BSCRIPT_VAR_BATTLER_TARGET: return &ctx->battlerIdTarget; - case 17: + case BSCRIPT_VAR_BATTLER_STAT_CHANGE: return &ctx->battlerIdStatChange; - case 18: + case BSCRIPT_VAR_BATTLER_FAINTED: return &ctx->battlerIdFainted; - case 19: + case BSCRIPT_VAR_BATTLER_SWITCH: return &ctx->battlerIdSwitch; - case 20: + case BSCRIPT_VAR_BATTLER_TEMP: return &ctx->battlerIdTemp; - case 21: + case BSCRIPT_VAR_21: return &ctx->unk_30E4[ctx->battlerIdAttacker]; - case 22: + case BSCRIPT_VAR_MESSAGE: return &ctx->msgTemp; - case 23: + case BSCRIPT_VAR_23: return &ctx->unk_14C; - case 24: + case BSCRIPT_VAR_MOVE_NO_CUR: return &ctx->moveNoCur; - case 25: + case BSCRIPT_VAR_TOTAL_TURNS: return &ctx->totalTurns; - case 26: + case BSCRIPT_VAR_26: return &ctx->unk_11C; - case 27: + case BSCRIPT_VAR_27: return &ctx->unk_120; - case 28: + case BSCRIPT_VAR_MOVE_NO_TEMP: return &ctx->moveNoTemp; - case 29: + case BSCRIPT_VAR_29: return &ctx->unk_98; - case 30: + case BSCRIPT_VAR_MOVE_POWER: return &ctx->movePower; - case 31: + case BSCRIPT_VAR_31: return &ctx->unk_38; - case 32: + case BSCRIPT_VAR_HP_CALC: return &ctx->hpCalc; - case 33: + case BSCRIPT_VAR_BATTLE_OUTCOME: return &bsys->battleOutcomeFlag; - case 34: + case BSCRIPT_VAR_STAT_CHANGE_PARAM: return &ctx->statChangeParam; - case 35: + case BSCRIPT_VAR_MOVE_TEMP: return &ctx->moveTemp; - case 36: + case BSCRIPT_VAR_ITEM_TEMP: return &ctx->itemTemp; - case 37: + case BSCRIPT_VAR_ABILITY_TEMP: return &ctx->abilityTemp; - case 38: + case BSCRIPT_VAR_WEATHER_TURNS: return &ctx->fieldConditionData.weatherTurns; - case 39: + case BSCRIPT_VAR_39: return &ctx->unk_3104; - case 40: + case BSCRIPT_VAR_40: return &ctx->unk_2180; - case 41: + case BSCRIPT_VAR_PHYSICAL_DAMAGE: return &ctx->turnData[ctx->battlerIdAttacker].battlerBitPhysicalDamage; - case 42: + case BSCRIPT_VAR_SPECIAL_DAMAGE: return &ctx->turnData[ctx->battlerIdAttacker].battlerBitSpecialDamage; - case 43: + case BSCRIPT_VAR_TEMP_DATA: return &ctx->tempData; - case 44: + case BSCRIPT_VAR_CRIT_MULTIPLIER: return &ctx->criticalMultiplier; - case 45: + case BSCRIPT_VAR_45: return &ctx->turnData[ctx->battlerIdAttacker].unk34; - case 46: + case BSCRIPT_VAR_46: return &ctx->turnData[ctx->battlerIdTarget].unk34; - case 47: + case BSCRIPT_VAR_47: return &ctx->selfTurnData[ctx->battlerIdAttacker].unk14; - case 48: + case BSCRIPT_VAR_48: return &ctx->selfTurnData[ctx->battlerIdTarget].unk14; - case 49: + case BSCRIPT_VAR_49: return &ctx->selfTurnData[ctx->battlerIdStatChange].unk14; - case 50: + case BSCRIPT_VAR_FLING_DATA: return &ctx->flingData; - case 51: + case BSCRIPT_VAR_FLING_SCRIPT: return &ctx->flingScript; - case 52: + case BSCRIPT_VAR_52: return &bsys->unk240C; - case 53: + case BSCRIPT_VAR_MOVE_LOCKED_INTO_ATTACKER: return &ctx->moveNoLockedInto[ctx->battlerIdAttacker]; - case 54: + case BSCRIPT_VAR_HIT_DAMAGE: return &ctx->hitDamage; - case 55: + case BSCRIPT_VAR_SAFARI_BALL_CNT: return &bsys->safariBallCnt; - case 56: + case BSCRIPT_VAR_BATTLER_SWITCH_TEMP: return &ctx->battlerIdSwitchTemp; - case 57: + case BSCRIPT_VAR_MOVE_TYPE: return &ctx->moveType; - case 58: + case BSCRIPT_VAR_58: return &ctx->unk_2164; - case 59: + case BSCRIPT_VAR_59: return &bsys->unk241C; - case 60: + case BSCRIPT_VAR_LINK_STATUS_2: return &ctx->linkStatus2; - case 61: + case BSCRIPT_VAR_61: return &ctx->unk_EC; - case 62: + case BSCRIPT_VAR_62: return &bsys->unk44; - case 63: + case BSCRIPT_VAR_BATTLER_ATTACKER_TEMP: return &ctx->battlerIdAttackerTemp; - case 64: + case BSCRIPT_VAR_BATTLER_TARGET_TEMP: return &ctx->battlerIdTargetTemp; - case 65: + case BSCRIPT_VAR_PHYSICAL_DAMAGE_TAKEN: return &ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage; - case 66: + case BSCRIPT_VAR_66: return &ctx->turnData[ctx->battlerIdTemp].unk3C; - case 67: + case BSCRIPT_VAR_67: return &ctx->turnData[ctx->battlerIdTarget].unk3C; - case 68: + case BSCRIPT_VAR_SHELL_BELL_HP: return &ctx->selfTurnData[ctx->battlerIdAttacker].shellBellDamage; - case 69: + case BSCRIPT_VAR_BATTLERS_ON_FIELD: return &ctx->battlersOnField; - case 70: + case BSCRIPT_VAR_70: return &bsys->unk2478; } - return 0; + return NULL; } From 255c9f4a53ab91b88d7243b89c4a316f8812b29b Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Tue, 11 Jul 2023 23:04:38 -0400 Subject: [PATCH 06/18] linkStatus -> battleStatus + add consts --- include/battle.h | 4 +- include/constants/battle.h | 41 ++++++++++++++- include/constants/battle_script.h | 4 +- src/battle/battle_command.c | 56 ++++++++++---------- src/battle/overlay_12_0224E4FC.c | 86 +++++++++++++++---------------- 5 files changed, 115 insertions(+), 76 deletions(-) diff --git a/include/battle.h b/include/battle.h index 8f65550887..d07ba9f866 100644 --- a/include/battle.h +++ b/include/battle.h @@ -327,8 +327,8 @@ typedef struct BATTLECONTEXT { UnkBtlCtxSub_76 unk_334; u32 * unk_2134; u32 unk_2138; - u32 linkStatus; - u32 linkStatus2; + u32 battleStatus; + u32 battleStatus2; int damage; int hitDamage; int criticalCnt; diff --git a/include/constants/battle.h b/include/constants/battle.h index 663022b0e7..d4cf0228c5 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -338,10 +338,49 @@ enum Terrain { #define BMON_DATA_HELD_ITEM_RESTORE_HP 95 #define BMON_DATA_SLOW_START_FLAG 96 #define BMON_DATA_SLOW_START_END 97 -#define BMON_DATA_FORM 98 +#define BMON_DATA_FORM 98 #define BMON_DATA_99 99 //unused #define BMON_DATA_100 100 +//Battle Status +#define BATTLE_STATUS_NO_ATTACK_MESSAGE (1 << 0) +#define BATTLE_STATUS_NO_DOUBLE_CHECK (1 << 1) +#define BATTLE_STATUS_HIT_FLY (1 << 2) +#define BATTLE_STATUS_HIT_DIG (1 << 3) +#define BATTLE_STATUS_HIT_DIVE (1 << 4) +#define BATTLE_STATUS_CHARGE_TURN (1 << 5) +#define BATTLE_STATUS_NO_BLINK (1 << 6) +#define BATTLE_STATUS_SYNCRONIZE (1 << 7) +#define BATTLE_STATUS_BATON_PASS (1 << 8) +#define BATTLE_STATUS_CHARGE_MOVE_HIT (1 << 9) +#define BATTLE_STATUS_FLAT_HIT_RATE (1 << 10) +#define BATTLE_STATUS_IGNORE_TYPE_EFFECTIVENESS (1 << 11) +#define BATTLE_STATUS_CRASH_DAMAGE (1 << 12) +#define BATTLE_STATUS_MOVE_SUCCESSFUL (1 << 13) +#define BATTLE_STATUS_MOVE_ANIMATIONS_OFF (1 << 14) +#define BATTLE_STATUS_IGNORE_TYPE_IMMUNITY (1 << 15) +#define BATTLE_STATUS_MULTI_HIT_IGNORE_MESSAGE (1 << 16) +#define BATTLE_STATUS_NO_MESSAGE_BETWEEN (1 << 17) +#define BATTLE_STATUS_MISS_MESSAGE (1 << 18) +#define BATTLE_STATUS_SHADOW_FORCE (1 << 19) +#define BATTLE_STATUS_NO_MOVE_SET (1 << 20) +#define BATTLE_STATUS_MESSAGES_OFF (1 << 21) +#define BATTLE_STATUS_22 (1 << 22) +#define BATTLE_STATUS_MOLD_BREAKER (1 << 23) + +#define BATTLE_STATUS_FAINTED_SHIFT 24 + +//Battle Status 2 +#define BATTLE_STATUS2_NO_EXP_GAINED (1 << 0) +#define BATTLE_STATUS2_UPDATE_STAT_STAGES (1 << 1) +#define BATTLE_STATUS2_DISPLAY_ATTACK_MESSAGE (1 << 2) +#define BATTLE_STATUS2_MAGIC_COAT (1 << 3) +#define BATTLE_STATUS2_4 (1 << 4) +#define BATTLE_STATUS2_5 (1 << 5) +#define BATTLE_STATUS2_26 (1 << 26) + +#define BATTLE_STATUS2_EXP_GAIN_SHIFT 28 + //Battle Controller Commands typedef enum ControllerCommand { CONTROLLER_COMMAND_GET_BATTLE_MON, diff --git a/include/constants/battle_script.h b/include/constants/battle_script.h index 1274d2eb8c..68c2b6107d 100644 --- a/include/constants/battle_script.h +++ b/include/constants/battle_script.h @@ -7,7 +7,7 @@ #define BSCRIPT_VAR_3 3 #define BSCRIPT_VAR_4 4 #define BSCRIPT_VAR_STAT_CHANGE_TYPE 5 -#define BSCRIPT_VAR_LINK_STATUS 6 +#define BSCRIPT_VAR_BATTLE_STATUS 6 #define BSCRIPT_VAR_FIELD_CONDITION 7 #define BSCRIPT_VAR_8 8 #define BSCRIPT_VAR_CALC_TEMP 9 @@ -61,7 +61,7 @@ #define BSCRIPT_VAR_MOVE_TYPE 57 #define BSCRIPT_VAR_58 58 #define BSCRIPT_VAR_59 59 -#define BSCRIPT_VAR_LINK_STATUS_2 60 +#define BSCRIPT_VAR_BATTLE_STATUS_2 60 #define BSCRIPT_VAR_61 61 #define BSCRIPT_VAR_62 62 #define BSCRIPT_VAR_BATTLER_ATTACKER_TEMP 63 diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index f7d575364c..315ece2a4b 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -760,12 +760,12 @@ BOOL BtlCmd_DamageCalcRaw(BattleSystem *bsys, BATTLECONTEXT *ctx) { BOOL BtlCmd_PrintAttackMessage(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); - if ((ctx->linkStatus & 1) == FALSE) { + if (!(ctx->battleStatus & BATTLE_STATUS_NO_ATTACK_MESSAGE)) { BattleController_EmitPrintAttackMessage(bsys, ctx); } - ctx->linkStatus |= 1; - ctx->linkStatus2 |= 4; + ctx->battleStatus |= BATTLE_STATUS_NO_ATTACK_MESSAGE; + ctx->battleStatus2 |= BATTLE_STATUS2_DISPLAY_ATTACK_MESSAGE; return FALSE; } @@ -847,8 +847,8 @@ BOOL BtlCmd_PlayMoveAnimation(BattleSystem *bsys, BATTLECONTEXT *ctx) { move = ctx->moveNoCur; } - if ((!(ctx->linkStatus & (1 << 14)) && BattleSystem_AreBattleAnimationsOn(bsys) == TRUE) || move == MOVE_TRANSFORM) { - ctx->linkStatus |= (1 << 14); + if ((!(ctx->battleStatus & BATTLE_STATUS_MOVE_ANIMATIONS_OFF) && BattleSystem_AreBattleAnimationsOn(bsys) == TRUE) || move == MOVE_TRANSFORM) { + ctx->battleStatus |= BATTLE_STATUS_MOVE_ANIMATIONS_OFF; BattleController_SetMoveEffect(bsys, ctx, move); } @@ -876,8 +876,8 @@ BOOL BtlCmd_PlayMoveAnimation2(BattleSystem *bsys, BATTLECONTEXT *ctx) { u32 attacker = GetBattlerIDBySide(bsys, ctx, attackerSide); u32 defender = GetBattlerIDBySide(bsys, ctx, defenderSide); - if ((!(ctx->linkStatus & (1 << 14)) && BattleSystem_AreBattleAnimationsOn(bsys) == TRUE) || move == MOVE_TRANSFORM) { - ctx->linkStatus |= (1 << 14); + if ((!(ctx->battleStatus & BATTLE_STATUS_MOVE_ANIMATIONS_OFF) && BattleSystem_AreBattleAnimationsOn(bsys) == TRUE) || move == MOVE_TRANSFORM) { + ctx->battleStatus |= BATTLE_STATUS_MOVE_ANIMATIONS_OFF; ov12_0226343C(bsys, ctx, move, attacker, defender); } @@ -941,7 +941,7 @@ BOOL BtlCmd_TryFaintMon(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->battleMons[battlerId].hp == 0) { ctx->battlerIdFainted = battlerId; - ctx->linkStatus |= MaskOfFlagNo(battlerId) << 24; + ctx->battleStatus |= MaskOfFlagNo(battlerId) << BATTLE_STATUS_FAINTED_SHIFT; ctx->totalTimesFainted[battlerId]++; UpdateFrienshipFainted(bsys, ctx, battlerId); } @@ -954,8 +954,8 @@ BOOL BtlCmd_PlayFaintAnimation(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleController_EmitPlayFaintAnimation(bsys, ctx, ctx->battlerIdFainted); - ctx->linkStatus &= (MaskOfFlagNo(ctx->battlerIdFainted) << 24) ^ -1; - ctx->linkStatus2 |= MaskOfFlagNo(ctx->battlerIdFainted) << 28; + ctx->battleStatus &= (MaskOfFlagNo(ctx->battlerIdFainted) << BATTLE_STATUS_FAINTED_SHIFT) ^ -1; + ctx->battleStatus2 |= MaskOfFlagNo(ctx->battlerIdFainted) << BATTLE_STATUS2_EXP_GAIN_SHIFT; ctx->unk_21A8[ctx->battlerIdFainted][0] = 40; InitFaintedWork(bsys, ctx, ctx->battlerIdFainted); @@ -1145,8 +1145,8 @@ BOOL BtlCmd_JumpToEffectScript(BattleSystem *bsys, BATTLECONTEXT *ctx) { u32 unkA = BattleScriptReadWord(ctx); - ctx->linkStatus &= ~1; - ctx->linkStatus &= 0xffffbfff; + ctx->battleStatus &= ~BATTLE_STATUS_NO_ATTACK_MESSAGE; + ctx->battleStatus &= ~BATTLE_STATUS_MOVE_ANIMATIONS_OFF; ctx->moveNoCur = ctx->moveTemp; @@ -1320,8 +1320,8 @@ BOOL BtlCmd_WaitForMonSelection(BattleSystem *bsys, BATTLECONTEXT *ctx) { if ((ctx->unk_13C[battlerId] & 1) && ov12_0225682C(ctx, battlerId)) { ctx->unk_21A0[battlerId] = ctx->unk_2300[battlerId][0] - 1; switchCnt--; - if (!(ctx->linkStatus2 & (MaskOfFlagNo(battlerId) << 24))) { - ctx->linkStatus2 |= (MaskOfFlagNo(battlerId) << 24); + if (!(ctx->battleStatus2 & (MaskOfFlagNo(battlerId) << BATTLE_STATUS_FAINTED_SHIFT))) { + ctx->battleStatus2 |= (MaskOfFlagNo(battlerId) << BATTLE_STATUS_FAINTED_SHIFT); BattleController_EmitShowWaitMessage(bsys, battlerId); } } @@ -1333,7 +1333,7 @@ BOOL BtlCmd_WaitForMonSelection(BattleSystem *bsys, BATTLECONTEXT *ctx) { ov12_0223BDDC(bsys, battlerId, ctx->unk_2300[battlerId][0]); } } - ctx->linkStatus2 &= 0xf0ffffff; + ctx->battleStatus2 &= 0xf0ffffff; BattleScriptIncrementPointer(ctx, 1); } @@ -1524,7 +1524,7 @@ BOOL BtlCmd_BufferStatChangeMsg(BattleSystem *bsys, BATTLECONTEXT *ctx) { int unkD = 0; - ctx->linkStatus &= 0xFFFDFFFF; + ctx->battleStatus &= ~BATTLE_STATUS_NO_MESSAGE_BETWEEN; if (ctx->statChangeParam >= 46) { stat = ctx->statChangeParam - 46; @@ -1546,7 +1546,7 @@ BOOL BtlCmd_BufferStatChangeMsg(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (change > 0) { //Stat Increase if (mon->statChanges[stat + 1] == 12) { - ctx->linkStatus |= (1 << 17); + ctx->battleStatus |= BATTLE_STATUS_NO_MESSAGE_BETWEEN; if (ctx->statChangeType == 3 || ctx->statChangeType == 2) { BattleScriptIncrementPointer(ctx, unkB); } else { @@ -1623,7 +1623,7 @@ BOOL BtlCmd_BufferStatChangeMsg(BattleSystem *bsys, BATTLECONTEXT *ctx) { unkD = TRUE; } else if (mon->statChanges[1 + stat] == 0) { - ctx->linkStatus |= (1 << 17); + ctx->battleStatus |= BATTLE_STATUS_NO_MESSAGE_BETWEEN; if (ctx->statChangeType == 2 || ctx->statChangeType == 3) { BattleScriptIncrementPointer(ctx, unkB); return FALSE; @@ -1641,7 +1641,7 @@ BOOL BtlCmd_BufferStatChangeMsg(BattleSystem *bsys, BATTLECONTEXT *ctx) { unkD = 2; } } else if (mon->statChanges[1 + stat] == 0) { - ctx->linkStatus |= (1 << 17); + ctx->battleStatus |= BATTLE_STATUS_NO_MESSAGE_BETWEEN; if (ctx->statChangeType == 2 || ctx->statChangeType == 3) { BattleScriptIncrementPointer(ctx, unkB); return FALSE; @@ -2021,8 +2021,8 @@ BOOL BtlCmd_SetMoveToMirrorMove(BattleSystem *bsys, BATTLECONTEXT *ctx) { } } if (move && IsMoveEncored(ctx, move) == TRUE) { - ctx->linkStatus &= ~1; - ctx->linkStatus &= 0xFFFFBFFF; + ctx->battleStatus &= ~BATTLE_STATUS_NO_ATTACK_MESSAGE; + ctx->battleStatus &= ~BATTLE_STATUS_MOVE_ANIMATIONS_OFF; ctx->moveNoCur = move; ctx->battlerIdTarget = ov12_022506D4(bsys, ctx, ctx->battlerIdAttacker, move, 1, 0); if (ctx->battlerIdTarget == 255) { @@ -2551,10 +2551,10 @@ BOOL BtlCmd_TryOHKO(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); - ctx->linkStatus |= (1 << 10); + ctx->battleStatus |= BATTLE_STATUS_FLAT_HIT_RATE; if (CheckBattlerAbilityIfNotIgnored(ctx, ctx->battlerIdAttacker, ctx->battlerIdTarget, ABILITY_STURDY) == TRUE) { - ctx->moveStatusFlag |= 1 << 19; + ctx->moveStatusFlag |= MOVE_STATUS_19; } else { if ((ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags & MOVE_EFFECT_LOCK_ON) == FALSE && GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_NO_GUARD && @@ -3950,7 +3950,7 @@ BOOL BtlCmd_MagicCoat(BattleSystem *bsys, BATTLECONTEXT *ctx) { } } - ctx->linkStatus2 |= 8; + ctx->battleStatus2 |= BATTLE_STATUS2_MAGIC_COAT; return FALSE; } @@ -5921,8 +5921,8 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BATTLECONTEXT *ctx, i return &ctx->unk_2178; case BSCRIPT_VAR_STAT_CHANGE_TYPE: return &ctx->statChangeType; - case BSCRIPT_VAR_LINK_STATUS: - return &ctx->linkStatus; + case BSCRIPT_VAR_BATTLE_STATUS: + return &ctx->battleStatus; case BSCRIPT_VAR_FIELD_CONDITION: return &ctx->fieldCondition; case BSCRIPT_VAR_8: @@ -6029,8 +6029,8 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BATTLECONTEXT *ctx, i return &ctx->unk_2164; case BSCRIPT_VAR_59: return &bsys->unk241C; - case BSCRIPT_VAR_LINK_STATUS_2: - return &ctx->linkStatus2; + case BSCRIPT_VAR_BATTLE_STATUS_2: + return &ctx->battleStatus2; case BSCRIPT_VAR_61: return &ctx->unk_EC; case BSCRIPT_VAR_62: diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index b25ea5322e..191c325acf 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -62,7 +62,7 @@ void BattleSystem_GetBattleMon(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl ctx->battleMons[battlerId].isEgg = GetMonData(mon, MON_DATA_IS_EGG, NULL); ctx->battleMons[battlerId].hasNickname = GetMonData(mon, MON_DATA_HAS_NICKNAME, NULL); - if (!(ctx->linkStatus & (1 << 8))) { //Baton pass + if (!(ctx->battleStatus & BATTLE_STATUS_BATON_PASS)) { for (i = 0; i < 8; i++) { ctx->battleMons[battlerId].statChanges[i] = 6; //6 is the default for stat changes } @@ -1336,13 +1336,13 @@ BOOL ov12_02250490(BattleSystem *bsys, BATTLECONTEXT *ctx, int *out) { GF_ASSERT(effectChance); if ((BattleSystem_Random(bsys) % 100) < effectChance) { - ctx->linkStatus |= (1 << 22); + ctx->battleStatus |= BATTLE_STATUS_22; } *out = ov12_02258348(ctx, 2, ctx->unk_2174); ctx->unk_2174 = 0; if (!ctx->battleMons[ctx->battlerIdStatChange].hp) { - ctx->linkStatus &= 0xFFBFFFFF; + ctx->battleStatus &= ~BATTLE_STATUS_22; } ret = TRUE; @@ -1530,7 +1530,7 @@ void ov12_02250A18(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker if (moveType == TYPE_ELECTRIC && (ctx->unk_334.moveData[moveNo].range == RANGE_0 || ctx->unk_334.moveData[moveNo].range == RANGE_RANDOM_OPPONENT) && - !(ctx->linkStatus & 0x20) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && CheckAbilityActive(bsys, ctx, CHECK_ABILITY_ALL_HP_NOT_USER, battlerIdAttacker, ABILITY_LIGHTNINGROD)) { for (battlerId = 0; battlerId < maxBattlers; battlerId++) { battlerIdTarget = ctx->turnOrder[battlerId]; @@ -1544,7 +1544,7 @@ void ov12_02250A18(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker } } else if (moveType == TYPE_WATER && (ctx->unk_334.moveData[moveNo].range == RANGE_0 || ctx->unk_334.moveData[moveNo].range == RANGE_RANDOM_OPPONENT) && - !(ctx->linkStatus & 0x20) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && CheckAbilityActive(bsys, ctx, CHECK_ABILITY_ALL_HP_NOT_USER, battlerIdAttacker, ABILITY_STORM_DRAIN)) { for (battlerId = 0; battlerId < maxBattlers; battlerId++) { battlerIdTarget = ctx->turnOrder[battlerId]; @@ -1643,8 +1643,8 @@ BOOL CheckTrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ctx) { do { switch (state) { case 0: - if (ctx->battleMons[1].unk78 == 1 && !(ctx->linkStatus2 & 0x20) && TrainerMessageWithIdPairExists(trainerIndex, 13, HEAP_ID_BATTLE)) { - ctx->linkStatus2 |= 0x20; + if (ctx->battleMons[1].unk78 == 1 && !(ctx->battleStatus2 & BATTLE_STATUS2_5) && TrainerMessageWithIdPairExists(trainerIndex, 13, HEAP_ID_BATTLE)) { + ctx->battleStatus2 |= BATTLE_STATUS2_5; ctx->msgTemp = 13; return TRUE; } @@ -1763,8 +1763,8 @@ void BattleContext_Init(BATTLECONTEXT *ctx) { ctx->unk_50 = 0; ctx->unk_54 = 0; - ctx->linkStatus &= 0xFF800000; - ctx->linkStatus2 &= 0xFFFFFEA1; + ctx->battleStatus &= 0xFF800000; + ctx->battleStatus2 &= 0xFFFFFEA1; ctx->magnitude = 0; @@ -1808,7 +1808,7 @@ void InitSwitchWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { BattleSystem_GetBattleType(bsys); ctx->unk_21A8[battlerId][0] = 40; - if (!(ctx->linkStatus & (1 << 8))) { //not baton pass + if (!(ctx->battleStatus & BATTLE_STATUS_BATON_PASS)) { for (i = 0; i < maxBattlers; i++) { if ((ctx->battleMons[i].status2 & STATUS2_MEAN_LOOK) && (ctx->battleMons[i].unk88.battlerIdMeanLook == battlerId)) { ctx->battleMons[i].status2 &= ~STATUS2_MEAN_LOOK; @@ -1845,7 +1845,7 @@ void InitSwitchWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { data[i] = 0; } - if (ctx->linkStatus & (1 << 8)) { + if (ctx->battleStatus & BATTLE_STATUS_BATON_PASS) { ctx->battleMons[battlerId].unk88.substituteHp = unkStruct.substituteHp; ctx->battleMons[battlerId].unk88.battlerIdLockOn = unkStruct.battlerIdLockOn; ctx->battleMons[battlerId].unk88.perishSongTurns = unkStruct.perishSongTurns; @@ -2277,7 +2277,7 @@ int ov12_02251D28(BattleSystem *bsys, BATTLECONTEXT *ctx, int moveNo, int moveTy movePower = ctx->unk_334.moveData[moveNo].power; //STAB - if (!(ctx->linkStatus & (1 << 11)) && (GetBattlerVar(ctx, battlerIdAttacker, BMON_DATA_TYPE_1, NULL) == moveType || GetBattlerVar(ctx, battlerIdAttacker, BMON_DATA_TYPE_2, NULL) == moveType)) { + if (!(ctx->battleStatus & BATTLE_STATUS_IGNORE_TYPE_EFFECTIVENESS) && (GetBattlerVar(ctx, battlerIdAttacker, BMON_DATA_TYPE_1, NULL) == moveType || GetBattlerVar(ctx, battlerIdAttacker, BMON_DATA_TYPE_2, NULL) == moveType)) { if (GetBattlerAbility(ctx, battlerIdAttacker) == ABILITY_ADAPTABILITY) { damage *= 2; } else { @@ -2316,7 +2316,7 @@ int ov12_02251D28(BattleSystem *bsys, BATTLECONTEXT *ctx, int moveNo, int moveTy if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_WONDER_GUARD) == TRUE && ov12_02258440(ctx, moveNo) && (!(*moveStatusFlags & MOVE_STATUS_SUPER_EFFECTIVE) || ((*moveStatusFlags & MOVE_STATUS_ANY_EFFECTIVE) == MOVE_STATUS_ANY_EFFECTIVE)) && movePower) { *moveStatusFlags |= MOVE_STATUS_WONDER_GUARD_IMMUNE; - } else if (!(ctx->linkStatus & (1 << 11)) && !(ctx->linkStatus & (1 << 15))) { + } else if (!(ctx->battleStatus & BATTLE_STATUS_IGNORE_TYPE_EFFECTIVENESS) && !(ctx->battleStatus & BATTLE_STATUS_IGNORE_TYPE_IMMUNITY)) { if ((*moveStatusFlags & MOVE_STATUS_SUPER_EFFECTIVE) && movePower) { if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_FILTER) == TRUE || CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_SOLID_ROCK) == TRUE) { damage = DamageDivide(damage * 3, 4); @@ -3076,7 +3076,7 @@ BOOL CheckBattlerAbilityIfNotIgnored(BATTLECONTEXT *ctx, int battlerIdAttacker, } } else if (GetBattlerAbility(ctx, battlerIdTarget) == ability && !ctx->selfTurnData[battlerIdAttacker].moldBreakerFlag) { ctx->selfTurnData[battlerIdAttacker].moldBreakerFlag = TRUE; - ctx->linkStatus |= (1 << 23); + ctx->battleStatus |= BATTLE_STATUS_MOLD_BREAKER; } return ret; @@ -3371,7 +3371,7 @@ BOOL CheckMoveEffectOnField(BattleSystem *bsys, BATTLECONTEXT *ctx, int moveEffe void ov12_02252D14(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->moveStatusFlag = 0; ctx->criticalMultiplier = 1; - ctx->linkStatus &= (0x100000 ^ 0xFFFFFFFF); + ctx->battleStatus &= (0x100000 ^ 0xFFFFFFFF); } void SortMonsBySpeed(BattleSystem *bsys, BATTLECONTEXT *ctx) { @@ -3518,12 +3518,12 @@ int ov12_02252EC8(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget ctx->hpCalc = DamageDivide(ctx->battleMons[battlerIdTarget].maxHp, 4); state = 178; } - if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_WATER_ABSORB) == TRUE && moveType == TYPE_WATER && !(ctx->linkStatus & (1 << 5)) && ctx->unk_334.moveData[ctx->moveNoCur].power) { + if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_WATER_ABSORB) == TRUE && moveType == TYPE_WATER && !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && ctx->unk_334.moveData[ctx->moveNoCur].power) { ctx->hpCalc = DamageDivide(ctx->battleMons[battlerIdTarget].maxHp, 4); state = 178; } int moveNoCur = ctx->moveNoCur; - if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_FLASH_FIRE) == TRUE && moveType == TYPE_FIRE && !(ctx->battleMons[battlerIdTarget].status & STATUS_FREEZE) && !(ctx->linkStatus & (1 << 5))) { + if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_FLASH_FIRE) == TRUE && moveType == TYPE_FIRE && !(ctx->battleMons[battlerIdTarget].status & STATUS_FREEZE) && !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN)) { if (ctx->unk_334.moveData[ctx->moveNoCur].power || ctx->moveNoCur == MOVE_WILL_O_WISP) { state = 179; } @@ -3539,7 +3539,7 @@ int ov12_02252EC8(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_MOTOR_DRIVE) == TRUE && moveType == TYPE_ELECTRIC && battlerIdAttacker != battlerIdTarget) { state = 182; } - if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_DRY_SKIN) == TRUE && moveType == TYPE_WATER && !(ctx->linkStatus & (1 << 5)) && ctx->unk_334.moveData[ctx->moveNoCur].power) { + if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_DRY_SKIN) == TRUE && moveType == TYPE_WATER && !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && ctx->unk_334.moveData[ctx->moveNoCur].power) { ctx->hpCalc = DamageDivide(ctx->battleMons[battlerIdTarget].maxHp, 4); state = 178; } @@ -4078,8 +4078,8 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script if (ctx->battleMons[ctx->battlerIdAttacker].hp && !ctx->battleMons[ctx->battlerIdAttacker].status && !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && - !(ctx->linkStatus & 0x20) && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && (BattleSystem_Random(bsys) % 10 < 3)) { @@ -4105,7 +4105,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && ctx->moveNoCur != MOVE_STRUGGLE && (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && ctx->unk_334.moveData[ctx->moveNoCur].power && GetBattlerVar(ctx, ctx->battlerIdTarget, BMON_DATA_TYPE_1, NULL) != moveType && GetBattlerVar(ctx, ctx->battlerIdTarget, BMON_DATA_TYPE_2, NULL) != moveType) { @@ -4118,8 +4118,8 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script if (ctx->battleMons[ctx->battlerIdAttacker].hp && GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_MAGIC_GUARD && !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && - !(ctx->linkStatus & 0x20) && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1)) { ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, 8); @@ -4132,8 +4132,8 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script if (ctx->battleMons[ctx->battlerIdAttacker].hp && !ctx->battleMons[ctx->battlerIdAttacker].status && !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && - !(ctx->linkStatus & 0x20) && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && (BattleSystem_Random(bsys) % 10 < 3)) { @@ -4159,8 +4159,8 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script if (ctx->battleMons[ctx->battlerIdAttacker].hp && !ctx->battleMons[ctx->battlerIdAttacker].status && !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && - !(ctx->linkStatus & 0x20) && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && (BattleSystem_Random(bsys) % 10 < 3)) { @@ -4175,8 +4175,8 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script if (ctx->battleMons[ctx->battlerIdAttacker].hp && !ctx->battleMons[ctx->battlerIdAttacker].status && !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && - !(ctx->linkStatus & 0x20) && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && ((BattleSystem_Random(bsys) % 10) < 3)) { @@ -4191,8 +4191,8 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script if (ctx->battleMons[ctx->battlerIdAttacker].hp && !(ctx->battleMons[ctx->battlerIdAttacker].status2 & STATUS2_ATTRACT_ALL) && !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && - !(ctx->linkStatus & 0x20) && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && ctx->battleMons[ctx->battlerIdTarget].hp && @@ -4208,7 +4208,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script if (ctx->battlerIdTarget == ctx->battlerIdFainted && GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_MAGIC_GUARD && !CheckAbilityActive(bsys, ctx, CHECK_ABILITY_ALL_HP, 0, ABILITY_DAMP) && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && ctx->battleMons[ctx->battlerIdAttacker].hp && !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1)) { @@ -4333,13 +4333,13 @@ BOOL TrySyncronizeStatus(BattleSystem *bsys, BATTLECONTEXT *ctx, ControllerComma if (ctx->battlerIdTarget != BATTLER_NONE && GetBattlerAbility(ctx, ctx->battlerIdTarget) == ABILITY_SYNCHRONIZE && ctx->battlerIdTarget == ctx->battlerIdStatChange && - (ctx->linkStatus & 0x80)) { + (ctx->battleStatus & BATTLE_STATUS_SYNCRONIZE)) { ctx->battlerIdTemp = ctx->battlerIdTarget; ctx->battlerIdStatChange = ctx->battlerIdAttacker; ret = TRUE; } else if (GetBattlerAbility(ctx, ctx->battlerIdAttacker) == ABILITY_SYNCHRONIZE && ctx->battlerIdAttacker == ctx->battlerIdStatChange && - (ctx->linkStatus & 0x80)) { + (ctx->battleStatus & BATTLE_STATUS_SYNCRONIZE)) { ctx->battlerIdTemp = ctx->battlerIdAttacker; ctx->battlerIdStatChange = ctx->battlerIdTarget; ret = TRUE; @@ -5085,7 +5085,7 @@ BOOL CheckItemEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script) { !(ctx->fieldSideConditionData[side].battlerBitKnockedOffItem & MaskOfFlagNo(ctx->selectedMonIndex[ctx->battlerIdAttacker])) && ctx->moveNoCur != MOVE_KNOCK_OFF && (ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage || ctx->selfTurnData[ctx->battlerIdTarget].specialDamage) && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1)) { *script = 216; ret = TRUE; @@ -5094,7 +5094,7 @@ BOOL CheckItemEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script) { case HOLD_EFFECT_RECOIL_PHYSICAL: //jacoba berry if (ctx->battleMons[ctx->battlerIdAttacker].hp && GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_MAGIC_GUARD && - !(ctx->linkStatus2 & 0x10) && + !(ctx->battleStatus2 & BATTLE_STATUS2_4) && ctx->selfTurnData[ctx->battlerIdTarget].physicalDamage) { ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, boost); *script = 266; @@ -5716,7 +5716,7 @@ void ov12_022565E0(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (GetBattlerHeldItemEffect(ctx, ctx->battlerIdAttacker) == HOLD_EFFECT_BOOST_REPEATED) { if (!(ctx->battleMons[ctx->battlerIdAttacker].status2 & STATUS2_RAGE) && !(ctx->battleMons[ctx->battlerIdAttacker].status2 & STATUS2_UPROAR) && - !(ctx->linkStatus & (1 << 9)) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_MOVE_HIT) && !(ctx->battleMons[ctx->battlerIdAttacker].status2 & STATUS2_LOCKED_INTO_MOVE)) { if (ctx->moveNoMetronome[ctx->battlerIdAttacker] == ctx->moveNoTemp) { if (ctx->battleMons[ctx->battlerIdAttacker].unk88.metronomeTurns < 10) { @@ -5740,7 +5740,7 @@ void ov12_02256694(BattleSystem *bsys, BATTLECONTEXT *ctx) { !(ctx->selfTurnData[ctx->battlerIdAttacker].rolloutCount) && !(ctx->battleMons[ctx->battlerIdAttacker].status2 & STATUS2_RAGE) && !(ctx->battleMons[ctx->battlerIdAttacker].status2 & STATUS2_UPROAR) && - !(ctx->linkStatus & (1 << 9)) && + !(ctx->battleStatus & BATTLE_STATUS_CHARGE_MOVE_HIT) && !(ctx->battleMons[ctx->battlerIdAttacker].status2 & STATUS2_LOCKED_INTO_MOVE)) { ctx->battleMons[ctx->battlerIdAttacker].unk88.metronomeTurns--; } @@ -5978,7 +5978,7 @@ BOOL Battler_CheckWeatherFormChange(BattleSystem *bsys, BATTLECONTEXT *ctx, int ctx->battleMons[ctx->battlerIdTemp].spDef = GetMonData(mon2, MON_DATA_SPDEF, NULL); ctx->battleMons[ctx->battlerIdTemp].ability = GetMonData(mon2, MON_DATA_ABILITY, NULL); ctx->battleMons[ctx->battlerIdTemp].form = GIRATINA_ALTERED; - ctx->linkStatus2 |= (1 << 26); + ctx->battleStatus2 |= BATTLE_STATUS2_26; BattleController_EmitBattleMonToPartyMonCopy(bsys, ctx, ctx->battlerIdTemp); FreeToHeap(mon2); *script = 262; @@ -6770,7 +6770,7 @@ BOOL CheckItemEffectOnUTurn(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script) int side = BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker); if (itemAttacker == HOLD_EFFECT_HP_RESTORE_ON_DMG && - (ctx->linkStatus & (1 << 13)) && + (ctx->battleStatus & BATTLE_STATUS_MOVE_SUCCESSFUL) && (ctx->selfTurnData[ctx->battlerIdAttacker].shellBellDamage) && (ctx->battlerIdAttacker != ctx->battlerIdTarget) && (ctx->battleMons[ctx->battlerIdAttacker].hp < ctx->battleMons[ctx->battlerIdAttacker].maxHp) && @@ -6783,7 +6783,7 @@ BOOL CheckItemEffectOnUTurn(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script) if (itemAttacker == HOLD_EFFECT_HP_DRAIN_ON_ATK && GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_MAGIC_GUARD && - (ctx->linkStatus & (1 << 13)) && + (ctx->battleStatus & BATTLE_STATUS_MOVE_SUCCESSFUL) && ctx->unk_334.moveData[ctx->moveNoCur].category != CATEGORY_STATUS && ctx->battleMons[ctx->battlerIdAttacker].hp) { ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, 10); @@ -7058,7 +7058,7 @@ static int ov12_02258348(BATTLECONTEXT *ctx, int statChangeType, u32 flag) { } static int ov12_022583B4(BATTLECONTEXT *ctx, int battlerId, int typeEffectiveness, int damage, int moveDamage, u32 *flag) { - if (!(ctx->linkStatus & (1 << 11)) && !(ctx->linkStatus & (1 << 15)) && damage) { + if (!(ctx->battleStatus & BATTLE_STATUS_IGNORE_TYPE_EFFECTIVENESS) && !(ctx->battleStatus & BATTLE_STATUS_IGNORE_TYPE_IMMUNITY) && damage) { damage = DamageDivide(damage * typeEffectiveness, 10); } @@ -7103,7 +7103,7 @@ static int ov12_02258440(BATTLECONTEXT *ctx, int moveNo) { case MOVE_EFFECT_256: case MOVE_EFFECT_263: case MOVE_EFFECT_FLINCH_BURN_HIT: - return (ctx->linkStatus & (1 << 9)); + return (ctx->battleStatus & BATTLE_STATUS_CHARGE_MOVE_HIT); } return TRUE; From 625ce48dfa3875c875eb3c90ee5468a3b28da037 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Tue, 11 Jul 2023 23:11:32 -0400 Subject: [PATCH 07/18] Rename functions Also forgor to credit Lhea as a co-author for providing me with battleStatus consts from PlatEngine Co-Authored-By: Rachel --- asm/include/overlay_12_battle_controller.inc | 2 +- asm/overlay_12_battle_controller.s | 6 +++--- include/battle_controller.h | 2 +- src/battle/battle_command.c | 2 +- src/battle/overlay_12_0224E4FC.c | 12 ++++++------ 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/asm/include/overlay_12_battle_controller.inc b/asm/include/overlay_12_battle_controller.inc index fe46483c40..181abf23a2 100644 --- a/asm/include/overlay_12_battle_controller.inc +++ b/asm/include/overlay_12_battle_controller.inc @@ -80,7 +80,7 @@ .public BattleController_EmitDrawYesNoBox .public BattleController_EmitPrintAttackMessage .public BattleController_EmitPrintMessage -.public BattleController_SetMoveEffect +.public BattleController_SetMoveAnimation .public ov12_0226343C .public BattleController_EmitMonFlicker .public BattleController_EmitHealthbarUpdate diff --git a/asm/overlay_12_battle_controller.s b/asm/overlay_12_battle_controller.s index 2d2e4fe50b..be1561dba8 100644 --- a/asm/overlay_12_battle_controller.s +++ b/asm/overlay_12_battle_controller.s @@ -2540,8 +2540,8 @@ BattleController_EmitPrintMessage: ; 0x022633F0 pop {r3, r4, pc} thumb_func_end BattleController_EmitPrintMessage - thumb_func_start BattleController_SetMoveEffect -BattleController_SetMoveEffect: ; 0x0226340C + thumb_func_start BattleController_SetMoveAnimation +BattleController_SetMoveAnimation: ; 0x0226340C push {r4, r5, r6, lr} sub sp, #0x68 mov r3, #0 @@ -2564,7 +2564,7 @@ BattleController_SetMoveEffect: ; 0x0226340C bl ov12_02262240 add sp, #0x68 pop {r4, r5, r6, pc} - thumb_func_end BattleController_SetMoveEffect + thumb_func_end BattleController_SetMoveAnimation thumb_func_start ov12_0226343C ov12_0226343C: ; 0x0226343C diff --git a/include/battle_controller.h b/include/battle_controller.h index d03c056f5d..3338d3052c 100644 --- a/include/battle_controller.h +++ b/include/battle_controller.h @@ -23,7 +23,7 @@ void BattleController_EmitDrawYesNoBox(BattleSystem *bsys, BATTLECONTEXT *ctx, i void BattleController_EmitShowWaitMessage(BattleSystem *bsys, int battlerId); void BattleController_EmitPrintAttackMessage(BattleSystem *bsys, BATTLECONTEXT *ctx); void BattleController_EmitPrintMessage(BattleSystem *bsys, BATTLECONTEXT *ctx, BATTLEMSG *msg); -void BattleController_SetMoveEffect(BattleSystem *bsys, BATTLECONTEXT *ctx, u16 move); +void BattleController_SetMoveAnimation(BattleSystem *bsys, BATTLECONTEXT *ctx, u16 move); void ov12_0226343C(BattleSystem *bsys, BATTLECONTEXT *ctx, u16 move, int attacker, int target); void BattleController_EmitMonFlicker(BattleSystem *bsys, int side, int a2); void BattleController_EmitHealthbarUpdate(BattleSystem *bsys, BATTLECONTEXT *ctx, int side); diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index 315ece2a4b..fc7eac48cd 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -849,7 +849,7 @@ BOOL BtlCmd_PlayMoveAnimation(BattleSystem *bsys, BATTLECONTEXT *ctx) { if ((!(ctx->battleStatus & BATTLE_STATUS_MOVE_ANIMATIONS_OFF) && BattleSystem_AreBattleAnimationsOn(bsys) == TRUE) || move == MOVE_TRANSFORM) { ctx->battleStatus |= BATTLE_STATUS_MOVE_ANIMATIONS_OFF; - BattleController_SetMoveEffect(bsys, ctx, move); + BattleController_SetMoveAnimation(bsys, ctx, move); } if (!BattleSystem_AreBattleAnimationsOn(bsys)) { diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 191c325acf..fea6c48fb8 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -25,13 +25,13 @@ static void ApplyEffectivenessFlags(int effectiveness, u32 *moveStatusFlag); static int ov12_02258348(BATTLECONTEXT *ctx, int statChangeType, u32 flag); static int ov12_022583B4(BATTLECONTEXT *ctx, int battlerId, int typeEffectiveness, int damage, int moveDamage, u32 *flag); static int ov12_02258440(BATTLECONTEXT *ctx, int moveNo); -static u8 ov12_022584AC(BATTLECONTEXT *ctx, int battlerId, int var); +static u8 Battler_GetType(BATTLECONTEXT *ctx, int battlerId, int var); static void ov12_02258584(BATTLECONTEXT *ctx, u8 battlerId); static void ov12_0225859C(BATTLECONTEXT *ctx, u8 battlerId); static void ov12_022585A8(BATTLECONTEXT *ctx, u8 battlerId); static int ov12_022585B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdTarget1, int battlerIdTarget2); static BOOL ov12_0225865C(BATTLECONTEXT *ctx, int moveNo); -static int BattleSystem_GetMoveType(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int moveNo); +static int GetDynamicMoveType(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int moveNo); void BattleSystem_GetBattleMon(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, u8 selectedMon) { Pokemon *mon = BattleSystem_GetPartyMon(bsys, battlerId, selectedMon); @@ -319,7 +319,7 @@ int GetBattlerVar(BATTLECONTEXT *ctx, int battlerId, u32 id, void *data) { return mon->ability; case BMON_DATA_TYPE_1: case BMON_DATA_TYPE_2: - return ov12_022584AC(ctx, battlerId, id); + return Battler_GetType(ctx, battlerId, id); case BMON_DATA_GENDER: return mon->gender; case BMON_DATA_IS_SHINY: @@ -1521,7 +1521,7 @@ void ov12_02250A18(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker return; } - moveType = BattleSystem_GetMoveType(bsys, ctx, battlerIdAttacker, moveNo); + moveType = GetDynamicMoveType(bsys, ctx, battlerIdAttacker, moveNo); if (!moveType) { moveType = ctx->unk_334.moveData[moveNo].type; } @@ -7109,7 +7109,7 @@ static int ov12_02258440(BATTLECONTEXT *ctx, int moveNo) { return TRUE; } -static u8 ov12_022584AC(BATTLECONTEXT *ctx, int battlerId, int var) { +static u8 Battler_GetType(BATTLECONTEXT *ctx, int battlerId, int var) { u8 type; if (var == BMON_DATA_TYPE_1) { @@ -7242,7 +7242,7 @@ static BOOL ov12_0225865C(BATTLECONTEXT *ctx, int moveNo) { return FALSE; } -static int BattleSystem_GetMoveType(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int moveNo) { +static int GetDynamicMoveType(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int moveNo) { int type; switch (moveNo) { From 85766080c4c38cb8331b2aaaa939cb5eb4342daa Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Wed, 12 Jul 2023 17:10:48 -0400 Subject: [PATCH 08/18] Update consts Co-Authored-By: Rachel --- asm/overlay_12_battle_controller_player.s | 8 +- include/constants/battle.h | 68 +++--- include/constants/move_effects.h | 240 ++++++++++++++++++++-- include/constants/moves.h | 24 +-- src/battle/battle_command.c | 26 +-- src/battle/overlay_12_0224E4FC.c | 104 +++++----- 6 files changed, 342 insertions(+), 128 deletions(-) diff --git a/asm/overlay_12_battle_controller_player.s b/asm/overlay_12_battle_controller_player.s index 687f4e5969..58278fb72e 100644 --- a/asm/overlay_12_battle_controller_player.s +++ b/asm/overlay_12_battle_controller_player.s @@ -10,8 +10,8 @@ .public BattleControllerPlayer_TrainerMessage .public BattleControllerPlayer_PokemonAppear - thumb_func_start ov12_022487FC -ov12_022487FC: ; 0x022487FC + thumb_func_start BattleControllerPlayer_SelectionScreenInit +BattleControllerPlayer_SelectionScreenInit: ; 0x022487FC push {r3, r4, r5, r6, r7, lr} str r0, [sp] add r7, r1, #0 @@ -48,7 +48,7 @@ _0224882C: pop {r3, r4, r5, r6, r7, pc} nop _02248844: .word 0x0000314C - thumb_func_end ov12_022487FC + thumb_func_end BattleControllerPlayer_SelectionScreenInit thumb_func_start ov12_02248848 ov12_02248848: ; 0x02248848 @@ -12125,7 +12125,7 @@ sPlayerBattleCommands: ; 0x0226CA90 .word BattleControllerPlayer_StartEncounter .word BattleControllerPlayer_TrainerMessage .word BattleControllerPlayer_PokemonAppear - .word ov12_022487FC + .word BattleControllerPlayer_SelectionScreenInit .word ov12_02248848 .word ov12_02249190 .word ov12_0224930C diff --git a/include/constants/battle.h b/include/constants/battle.h index d4cf0228c5..80791d0bfb 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -65,41 +65,41 @@ enum Terrain { //Battle Flags #define BATTLE_FLAG_7 (1 << 7) -//Move Effects -#define MOVE_EFFECT_0 (1 << 0) -#define MOVE_EFFECT_1 (1 << 1) -#define MOVE_EFFECT_LEECH_SEED (1 << 2) -#define MOVE_EFFECT_LOCK_ON (3 << 3) -#define MOVE_EFFECT_LOCK_ON_SET (1 << 4) -#define MOVE_EFFECT_PERISH_SONG (1 << 5) -#define MOVE_EFFECT_6 (1 << 6) -#define MOVE_EFFECT_7 (1 << 7) -#define MOVE_EFFECT_8 (1 << 8) -#define MOVE_EFFECT_CHARGE (1 << 9) -#define MOVE_EFFECT_INGRAIN (1 << 10) -#define MOVE_EFFECT_11 (1 << 11) -#define MOVE_EFFECT_YAWN (1 << 12) -#define MOVE_EFFECT_IMPRISON_USER (1 << 13) -#define MOVE_EFFECT_GRUDGE (1 << 14) -#define MOVE_EFFECT_LUCKY_CHANT (1 << 15) -#define MOVE_EFFECT_MUD_SPORT (1 << 16) -#define MOVE_EFFECT_WATER_SPORT (1 << 17) -#define MOVE_EFFECT_DIVE (1 << 18) -#define MOVE_EFFECT_INTIMIDATE (1 << 19) //unclear why this is a move effect -#define MOVE_EFFECT_ROLE_PLAY (1 << 20) -#define MOVE_EFFECT_GASTRO_ACID (1 << 21) -#define MOVE_EFFECT_MIRACLE_EYE (1 << 22) -#define MOVE_EFFECT_POWER_TRICK (1 << 23) -#define MOVE_EFFECT_AQUA_RING (1 << 24) -#define MOVE_EFFECT_HEAL_BLOCK (1 << 25) -#define MOVE_EFFECT_EMBARGO (1 << 26) -#define MOVE_EFFECT_MAGNET_RISE (1 << 27) -#define MOVE_EFFECT_CAMOFLAUGE (1 << 28) -#define MOVE_EFFECT_PHANTOM_FORCE (1 << 29) -#define MOVE_EFFECT_IMPRISON (1 << 30) +//Move Effects Flags +#define MOVE_EFFECT_FLAG_0 (1 << 0) +#define MOVE_EFFECT_FLAG_1 (1 << 1) +#define MOVE_EFFECT_FLAG_LEECH_SEED (1 << 2) +#define MOVE_EFFECT_FLAG_LOCK_ON (3 << 3) +#define MOVE_EFFECT_FLAG_LOCK_ON_SET (1 << 4) +#define MOVE_EFFECT_FLAG_PERISH_SONG (1 << 5) +#define MOVE_EFFECT_FLAG_6 (1 << 6) +#define MOVE_EFFECT_FLAG_7 (1 << 7) +#define MOVE_EFFECT_FLAG_8 (1 << 8) +#define MOVE_EFFECT_FLAG_CHARGE (1 << 9) +#define MOVE_EFFECT_FLAG_INGRAIN (1 << 10) +#define MOVE_EFFECT_FLAG_11 (1 << 11) +#define MOVE_EFFECT_FLAG_YAWN (1 << 12) +#define MOVE_EFFECT_FLAG_IMPRISON_USER (1 << 13) +#define MOVE_EFFECT_FLAG_GRUDGE (1 << 14) +#define MOVE_EFFECT_FLAG_LUCKY_CHANT (1 << 15) +#define MOVE_EFFECT_FLAG_MUD_SPORT (1 << 16) +#define MOVE_EFFECT_FLAG_WATER_SPORT (1 << 17) +#define MOVE_EFFECT_FLAG_DIVE (1 << 18) +#define MOVE_EFFECT_FLAG_INTIMIDATE (1 << 19) //unclear why this is a move effect +#define MOVE_EFFECT_FLAG_ROLE_PLAY (1 << 20) +#define MOVE_EFFECT_FLAG_GASTRO_ACID (1 << 21) +#define MOVE_EFFECT_FLAG_MIRACLE_EYE (1 << 22) +#define MOVE_EFFECT_FLAG_POWER_TRICK (1 << 23) +#define MOVE_EFFECT_FLAG_AQUA_RING (1 << 24) +#define MOVE_EFFECT_FLAG_HEAL_BLOCK (1 << 25) +#define MOVE_EFFECT_FLAG_EMBARGO (1 << 26) +#define MOVE_EFFECT_FLAG_MAGNET_RISE (1 << 27) +#define MOVE_EFFECT_FLAG_CAMOFLAUGE (1 << 28) +#define MOVE_EFFECT_FLAG_PHANTOM_FORCE (1 << 29) +#define MOVE_EFFECT_FLAG_IMPRISON (1 << 30) -#define MOVE_EFFECT_BATON_PASSABLE (MOVE_EFFECT_0 | MOVE_EFFECT_1 | MOVE_EFFECT_LEECH_SEED | MOVE_EFFECT_LOCK_ON | MOVE_EFFECT_PERISH_SONG | MOVE_EFFECT_INGRAIN | MOVE_EFFECT_LUCKY_CHANT | MOVE_EFFECT_MUD_SPORT | MOVE_EFFECT_WATER_SPORT | MOVE_EFFECT_GASTRO_ACID | MOVE_EFFECT_POWER_TRICK | MOVE_EFFECT_AQUA_RING | MOVE_EFFECT_HEAL_BLOCK | MOVE_EFFECT_EMBARGO | MOVE_EFFECT_MAGNET_RISE) -#define MOVE_EFFECT_SUBSTITUTE_HIDE (MOVE_EFFECT_6 | MOVE_EFFECT_7 | MOVE_EFFECT_DIVE | MOVE_EFFECT_PHANTOM_FORCE) +#define MOVE_EFFECT_FLAG_BATON_PASSABLE (MOVE_EFFECT_FLAG_0 | MOVE_EFFECT_FLAG_1 | MOVE_EFFECT_FLAG_LEECH_SEED | MOVE_EFFECT_FLAG_LOCK_ON | MOVE_EFFECT_FLAG_PERISH_SONG | MOVE_EFFECT_FLAG_INGRAIN | MOVE_EFFECT_FLAG_LUCKY_CHANT | MOVE_EFFECT_FLAG_MUD_SPORT | MOVE_EFFECT_FLAG_WATER_SPORT | MOVE_EFFECT_FLAG_GASTRO_ACID | MOVE_EFFECT_FLAG_POWER_TRICK | MOVE_EFFECT_FLAG_AQUA_RING | MOVE_EFFECT_FLAG_HEAL_BLOCK | MOVE_EFFECT_FLAG_EMBARGO | MOVE_EFFECT_FLAG_MAGNET_RISE) +#define MOVE_EFFECT_FLAG_HIDE_SUBSTITUTE (MOVE_EFFECT_FLAG_6 | MOVE_EFFECT_FLAG_7 | MOVE_EFFECT_FLAG_DIVE | MOVE_EFFECT_FLAG_PHANTOM_FORCE) //Move status #define MOVE_STATUS_MISS (1 << 0) #define MOVE_STATUS_SUPER_EFFECTIVE (1 << 1) diff --git a/include/constants/move_effects.h b/include/constants/move_effects.h index 3c4c7af82c..4604dd788d 100644 --- a/include/constants/move_effects.h +++ b/include/constants/move_effects.h @@ -2,58 +2,272 @@ #define POKEHEARTGOLD_CONSTANTS_MOVE_EFFECTS_H #define MOVE_EFFECT_HIT 0 +#define MOVE_EFFECT_STATUS_SLEEP 1 #define MOVE_EFFECT_POISON_HIT 2 +#define MOVE_EFFECT_RECOVER_HALF_DAMAGE_DELT 3 #define MOVE_EFFECT_BURN_HIT 4 #define MOVE_EFFECT_FREEZE_HIT 5 #define MOVE_EFFECT_PARALYZE_HIT 6 #define MOVE_EFFECT_HALVE_DEFENSE 7 -#define MOVE_EFFECT_26 26 +#define MOVE_EFFECT_RECOVER_DAMAGE_SLEEP 8 +#define MOVE_EFFECT_COPY_MOVE 9 +#define MOVE_EFFECT_ATK_UP 10 +#define MOVE_EFFECT_DEF_UP 11 +#define MOVE_EFFECT_SPEED_UP 12 +#define MOVE_EFFECT_SP_ATK_UP 13 +#define MOVE_EFFECT_SP_DEF_UP 14 +#define MOVE_EFFECT_ACC_UP 15 +#define MOVE_EFFECT_EVA_UP 16 +#define MOVE_EFFECT_BYPASS_ACCURACY 17 +#define MOVE_EFFECT_ATK_DOWN 18 +#define MOVE_EFFECT_DEF_DOWN 19 +#define MOVE_EFFECT_SPEED_DOWN 20 +#define MOVE_EFFECT_SP_ATK_DOWN 21 +#define MOVE_EFFECT_SP_DEF_DOWN 22 +#define MOVE_EFFECT_ACC_DOWN 23 +#define MOVE_EFFECT_EVA_DOWN 24 +#define MOVE_EFFECT_RESET_STAT_CHANGES 25 +#define MOVE_EFFECT_BIDE 26 +#define MOVE_EFFECT_CONTINUE_AND_CONFUSE_SELF 27 +#define MOVE_EFFECT_FORCE_SWITCH 28 #define MOVE_EFFECT_MULTI_HIT 29 +#define MOVE_EFFECT_CONVERSION 30 #define MOVE_EFFECT_FLINCH_HIT 31 +#define MOVE_EFFECT_RESTORE_HALF_HP 32 +#define MOVE_EFFECT_STATUS_BADLY_POISON 33 +#define MOVE_EFFECT_INCREASE_PRIZE_MONEY 34 +#define MOVE_EFFECT_SET_LIGHT_SCREEN 35 #define MOVE_EFFECT_RANDOM_PRIMARY_STATUS_HIT 36 // tri attack #define MOVE_EFFECT_ONE_HIT_KO 38 -#define MOVE_EFFECT_39 39 -#define MOVE_EFFECT_41 41 +#define MOVE_EFFECT_CHARGE_TURN_HIGH_CRIT 39 +#define MOVE_EFFECT_HALVE_HP 40 +#define MOVE_EFFECT_40_DAMAGE_FLAT 41 +#define MOVE_EFFECT_BIND_HIT 42 #define MOVE_EFFECT_HIGH_CRITICAL 43 +#define MOVE_EFFECT_HIT_TWICE 44 +#define MOVE_EFFECT_CRASH_ON_MISS 45 +#define MOVE_EFFECT_PREVENT_STAT_REDUCTION 46 +#define MOVE_EFFECT_CRIT_UP_2 47 +#define MOVE_EFFECT_RECOIL_QUARTER_DAMAGE_DELT 48 +#define MOVE_EFFECT_STATUS_CONFUSE 49 +#define MOVE_EFFECT_ATK_UP_2 50 //2 refers to increasing atk by 2 stages +#define MOVE_EFFECT_DEF_UP_2 51 +#define MOVE_EFFECT_SPEED_UP_2 52 +#define MOVE_EFFECT_SP_ATK_UP_2 53 +#define MOVE_EFFECT_SP_DEF_UP_2 54 +#define MOVE_EFFECT_ACC_UP_2 55 +#define MOVE_EFFECT_EVA_UP_2 56 +#define MOVE_EFFECT_TRANSFORM 57 +#define MOVE_EFFECT_ATK_DOWN_2 58 +#define MOVE_EFFECT_DEF_DOWN_2 59 +#define MOVE_EFFECT_SPEED_DOWN_2 60 +#define MOVE_EFFECT_SP_ATK_DOWN_2 61 +#define MOVE_EFFECT_ACC_DOWN_2 62 +#define MOVE_EFFECT_EVA_DOWN_2 63 +#define MOVE_EFFECT_SP_DEF_DOWN_2 64 +#define MOVE_EFFECT_SET_REFLECT 65 +#define MOVE_EFFECT_STATUS_POISON 66 +#define MOVE_EFFECT_STATUS_PARALYZE 67 #define MOVE_EFFECT_LOWER_ATTACK_HIT 68 #define MOVE_EFFECT_LOWER_DEFENSE_HIT 69 #define MOVE_EFFECT_LOWER_SPEED_HIT 70 #define MOVE_EFFECT_LOWER_SP_ATK_HIT 71 #define MOVE_EFFECT_LOWER_SP_DEF_HIT 72 #define MOVE_EFFECT_LOWER_ACCURACY_HIT 73 -#define MOVE_EFFECT_75 75 +#define MOVE_EFFECT_LOWER_EVASION_HIT 74 +#define MOVE_EFFECT_CHARGE_TURN_HIGH_CRIT_FLINCH 75 #define MOVE_EFFECT_CONFUSE_HIT 76 #define MOVE_EFFECT_POISON_MULTI_HIT 77 -#define MOVE_EFFECT_87 87 -#define MOVE_EFFECT_88 88 +#define MOVE_EFFECT_PRIORITY_NEG_1_BYPASS_ACCURACY 78 +#define MOVE_EFFECT_SET_SUBSTITUTE 79 +#define MOVE_EFFECT_RECHARGE_AFTER 80 +#define MOVE_EFFECT_RAISE_ATK_WHEN_HIT 81 +#define MOVE_EFFECT_COPY_MOVE_FOR_BATTLE 82 +#define MOVE_EFFECT_CALL_RANDOM_MOVE 83 +#define MOVE_EFFECT_STATUS_LEECH_SEED 84 +#define MOVE_EFFECT_DO_NOTHING 85 +#define MOVE_EFFECT_DISABLE 86 +#define MOVE_EFFECT_LEVEL_DAMAGE_FLAT 87 +#define MOVE_EFFECT_RANDOM_DAMAGE_1_TO_150_LEVEL 88 #define MOVE_EFFECT_COUNTER 89 +#define MOVE_EFFECT_ENCORE 90 +#define MOVE_EFFECT_AVERAGE_HP 91 +#define MOVE_EFFECT_DAMAGE_WHILE_ASLEEP 92 +#define MOVE_EFFECT_CONVERSION2 93 +#define MOVE_EFFECT_NEXT_ATTACK_ALWAYS_HITS 94 +#define MOVE_EFFECT_LEARN_MOVE_PERMANENT 95 +#define MOVE_EFFECT_UNUSED_96 96 +#define MOVE_EFFECT_USE_RANDOM_LEARNED_MOVE_SLEEP 97 +#define MOVE_EFFECT_KO_MON_THAT_DEFEATED_USER 98 +#define MOVE_EFFECT_INCREASE_POWER_WITH_LESS_HP 99 +#define MOVE_EFFECT_DECREASE_LAST_MOVE_PP 100 #define MOVE_EFFECT_LEAVE_WITH_1_HP 101 +#define MOVE_EFFECT_CURE_PARTY_STATUS 102 +#define MOVE_EFFECT_PRIORITY_1 103 +#define MOVE_EFFECT_HIT_THREE_TIMES 104 +#define MOVE_EFFECT_STEAL_HELD_ITEM 105 +#define MOVE_EFFECT_PREVENT_ESCAPE 106 +#define MOVE_EFFECT_STATUS_NIGHTMARE 107 +#define MOVE_EFFECT_EVA_UP_2_MINIMIZE 108 +#define MOVE_EFFECT_CURSE 109 +#define MOVE_EFFECT_UNUSED_110 110 +#define MOVE_EFFECT_PROTECT 111 +#define MOVE_EFFECT_SET_SPIKES 112 +#define MOVE_EFFECT_IGNORE_EVASION_REMOVE_GHOST_IMMUNE 113 +#define MOVE_EFFECT_ALL_FAINT_3_TURNS 114 +#define MOVE_EFFECT_WEATHER_SANDSTORM 115 +#define MOVE_EFFECT_SURVIVE_WITH_1_HP 116 +#define MOVE_EFFECT_DOUBLE_POWER_EACH_TURN_LOCK_INTO 117 +#define MOVE_EFFECT_ATK_UP_2_STATUS_CONFUSION 118 +#define MOVE_EFFECT_DOUBLE_POWER_EACH_TURN 119 +#define MOVE_EFFECT_INFATUATE 120 +#define MOVE_EFFECT_POWER_BASED_ON_FRIENDSHIP 121 +#define MOVE_EFFECT_RANDOM_POWER_MAYBE_HEAL 122 +#define MOVE_EFFECT_POWER_BASED_ON_LOW_FRIENDSHIP 123 +#define MOVE_EFFECT_PREVENT_STATUS 124 #define MOVE_EFFECT_THAW_AND_BURN_HIT 125 +#define MOVE_EFFECT_RANDOM_POWER_10_CASES 126 +#define MOVE_EFFECT_PASS_STATS_AND_STATUS 127 +#define MOVE_EFFECT_HIT_BEFORE_SWITCH 128 +#define MOVE_EFFECT_REMOVE_HAZARDS_AND_BINDING 129 +#define MOVE_EFFECT_10_DAMAGE_FLAT 130 +#define MOVE_EFFECT_UNUSED_131 131 +#define MOVE_EFFECT_HEAL_HALF_MORE_IN_SUN 132 +#define MOVE_EFFECT_UNUSED_133 133 +#define MOVE_EFFECT_UNUSED_134 134 +#define MOVE_EFFECT_RANDOM_POWER_BASED_ON_IVS 135 +#define MOVE_EFFECT_WEATHER_RAIN 136 +#define MOVE_EFFECT_WEATHER_SUN 137 +#define MOVE_EFFECT_RAISE_DEF_HIT 138 #define MOVE_EFFECT_RAISE_ATTACK_HIT 139 #define MOVE_EFFECT_RAISE_ALL_STATS_HIT 140 +#define MOVE_EFFECT_UNUSED_141 141 +#define MOVE_EFFECT_MAX_ATK_LOSE_HALF_MAX_HP 142 +#define MOVE_EFFECT_COPY_STAT_CHANGES 143 #define MOVE_EFFECT_MIRROR_COAT 144 -#define MOVE_EFFECT_145 145 +#define MOVE_EFFECT_CHARGE_TURN_DEF_UP 145 #define MOVE_EFFECT_FLINCH_DOUBLE_DAMAGE_FLY_OR_BOUNCE 146 +#define MOVE_EFFECT_DOUBLE_DAMAGE_DIG 147 +#define MOVE_EFFECT_HIT_IN_3_TURNS 148 +#define MOVE_EFFECT_DOUBLE_DAMAGE_FLY_OR_BOUNCE 149 #define MOVE_EFFECT_FLINCH_MINIMIZE_DOUBLE_HIT 150 #define MOVE_EFFECT_151 151 #define MOVE_EFFECT_THUNDER 152 -#define MOVE_EFFECT_155 155 +#define MOVE_EFFECT_FLEE_FROM_WILD_BATTLE 153 +#define MOVE_EFFECT_BEAT_UP 154 +#define MOVE_EFFECT_FLY 155 +#define MOVE_EFFECT_DEF_UP_DOUBLE_ROLLOUT_POWER 156 +#define MOVE_EFFECT_UNUSED_157 157 +#define MOVE_EFFECT_ALWAYS_FLINCH_FIRST_TURN_ONLY 158 +#define MOVE_EFFECT_UPROAR 159 +#define MOVE_EFFECT_STOCKPILE 160 +#define MOVE_EFFECT_SPIT_UP 161 +#define MOVE_EFFECT_SWALLOW 162 +#define MOVE_EFFECT_UNUSED_163 163 +#define MOVE_EFFECT_WEATHER_HAIL 164 +#define MOVE_EFFECT_TORMENT 165 +#define MOVE_EFFECT_SP_ATK_UP_CAUSE_CONFUSION 166 +#define MOVE_EFFECT_STATUS_BURN 167 +#define MOVE_EFFECT_FAINT_AND_ATK_SP_ATK_DOWN_2 168 +#define MOVE_EFFECT_DOUBLE_POWER_WHEN_STATUSED 169 +#define MOVE_EFFECT_HIT_LAST_WHIFF_IF_HIT 170 +#define MOVE_EFFECT_DOUBLE_POWER_AND_CURE_PARALYSIS 171 +#define MOVE_EFFECT_MAKE_GLOBAL_TARGET 172 +#define MOVE_EFFECT_NATURE_POWER 173 +#define MOVE_EFFECT_SP_DEF_UP_DOUBLE_ELECTRIC_POWER 174 +#define MOVE_EFFECT_TAUNT 175 +#define MOVE_EFFECT_BOOST_ALLY_POWER_BY_50_PERCENT 176 +#define MOVE_EFFECT_SWITCH_HELD_ITEMS 177 +#define MOVE_EFFECT_COPY_ABILITY 178 +#define MOVE_EFFECT_HEAL_IN_3_TURNS 179 +#define MOVE_EFFECT_USE_RANDOM_ALLY_MOVE 180 +#define MOVE_EFFECT_GROUND_TRAP_USER_CONTINUOUS_HEAL 181 #define MOVE_EFFECT_REMOVE_SCREENS 186 +#define MOVE_EFFECT_STATUS_SLEEP_NEXT_TURN 187 +#define MOVE_EFFECT_REMOVE_HELD_ITEM 188 +#define MOVE_EFFECT_SET_HP_EQUAL_TO_USER 189 +#define MOVE_EFFECT_DECREASE_POWER_WITH_LESS_USER_HP 190 +#define MOVE_EFFECT_SWITCH_ABILITIES 191 +#define MOVE_EFFECT_MAKE_SHARED_MOVES_UNUSEABL 192 +#define MOVE_EFFECT_HEAL_STATUS 193 +#define MOVE_EFFECT_REMOVE_ALL_PP_ON_DEFEAT 194 +#define MOVE_EFFECT_STEAL_STATUS_MOVE 195 +#define MOVE_EFFECT_INCREASE_POWER_WITH_WEIGHT 196 #define MOVE_EFFECT_SECRET_POWER 197 -#define MOVE_EFFECT_RECOIL_HIT 198 +#define MOVE_EFFECT_RECOIL_THIRD 198 #define MOVE_EFFECT_HIGH_CRITICAL_BURN_HIT 200 +#define MOVE_EFFECT_HALVE_ELECTRIC_DAMAGE 201 #define MOVE_EFFECT_FLINCH_POISON_HIT 202 +#define MOVE_EFFECT_CHANGE_TYPE_WITH_WEATHER 203 +#define MOVE_EFFECT_USER_SP_ATK_DOWN_2 204 +#define MOVE_EFFECT_ATK_DEF_DOWN 205 +#define MOVE_EFFECT_DEF_SPD_UP 206 +#define MOVE_EFFECT_HIT_FLY 207 +#define MOVE_EFFECT_ATK_DEF_UP 208 #define MOVE_EFFECT_HIGH_CRITICAL_POISON_HIT 209 +#define MOVE_EFFECT_HALVE_FIRE_DAMAGE 210 +#define MOVE_EFFECT_SP_ATK_SP_DEF_UP 211 +#define MOVE_EFFECT_ATK_SPD_UP 212 +#define MOVE_EFFECT_CAMOUFLAGE 213 +#define MOVE_EFFECT_HEAL_HALF_REMOVE_FLYING_TYPE 214 +#define MOVE_EFFECT_GRAVITY 215 +#define MOVE_EFFECT_IGNORE_EVATION_REMOVE_DARK_IMMUNE 216 +#define MOVE_EFFECT_DOUBLE_POWER_HEAL_SLEEP 217 +#define MOVE_EFFECT_SPEED_DOWN_HIT 218 +#define MOVE_EFFECT_POWER_BASED_ON_LOW_SPEED 219 +#define MOVE_EFFECT_FAINT_AND_FULL_HEAL_NEXT_MON 220 +#define MOVE_EFFECT_DOUBLE_POWER_WHEN_BELOW_HALF 221 +#define MOVE_EFFECT_NATURAL_GIFT 222 +#define MOVE_EFFECT_REMOVE_PROTECT 223 +#define MOVE_EFFECT_EAT_BERRY 224 +#define MOVE_EFFECT_DOUBLE_SPEED_3_TURNS 225 +#define MOVE_EFFECT_RANDOM_STAT_UP_2 226 #define MOVE_EFFECT_METAL_BURST 227 +#define MOVE_EFFECT_SWITCH_HIT 228 +#define MOVE_EFFECT_DEF_SPD_DOWN_HIT 229 +#define MOVE_EFFECT_DOUBLE_POWER_IF_HIT 230 +#define MOVE_EFFECT_DOUBLE_POWER_IF_TARGET_HIT 231 +#define MOVE_EFFECT_PREVENT_ITEM_USE 232 +#define MOVE_EFFECT_FLING 233 +#define MOVE_EFFECT_TRANSFER_STATUS 234 +#define MOVE_EFFECT_HIGHER_POWER_WHEN_LOW_PP 235 +#define MOVE_EFFECT_PREVENT_HEALING 236 +#define MOVE_EFFECT_INCREASE_POWER_WITH_MORE_HP 237 +#define MOVE_EFFECT_SWAP_ATK_DEF 238 +#define MOVE_EFFECT_SUPRESS_ABILITY 239 +#define MOVE_EFFECT_PREVENT_CRITS 240 +#define MOVE_EFFECT_USE_MOVE_FIRST 241 +#define MOVE_EFFECT_USE_LAST_USED_MOVE 242 +#define MOVE_EFFECT_SWAP_ATK_SP_ATK_STAT_CHANGES 243 +#define MOVE_EFFECT_SWAP_DEF_SP_DEF_STAT_CHANGES 244 +#define MOVE_EFFECT_INCREASE_POWER_WITH_MORE_STAT_UP 245 +#define MOVE_EFFECT_FAIL_IF_NOT_USED_ALL_OTHER_MOVES 246 +#define MOVE_EFFECT_SET_ABILITY_TO_INSOMNIA 247 +#define MOVE_EFFECT_HIT_FIRST_IF_TARGET_ATTACKING 248 +#define MOVE_EFFECT_TOXIC_SPIKES 249 +#define MOVE_EFFECT_SWAP_STAT_CHANGES 250 +#define MOVE_EFFECT_RESTORE_HP_EVERY_TURN 251 +#define MOVE_EFFECT_GIVE_GROUND_IMMUNITY 252 #define MOVE_EFFECT_RECOIL_BURN_HIT 253 -#define MOVE_EFFECT_255 255 -#define MOVE_EFFECT_256 256 +#define MOVE_EFFECT_STRUGGLE 254 +#define MOVE_EFFECT_DIVE 255 +#define MOVE_EFFECT_DIG 256 +#define MOVE_EFFECT_DOUBLE_DAMAGE_DIVE 257 +#define MOVE_EFFECT_REMOVE_HAZARDS_SCREENS_EVA_DOWN 258 +#define MOVE_EFFECT_TRICK_ROOM 259 #define MOVE_EFFECT_BLIZZARD 260 +#define MOVE_EFFECT_WHIRLPOOL 261 #define MOVE_EFFECT_RECOIL_PARALYZE_HIT 262 -#define MOVE_EFFECT_263 263 +#define MOVE_EFFECT_BOUNCE 263 +#define MOVE_EFFECT_UNUSED_264 264 +#define MOVE_EFFECT_SP_ATK_DOWN_2_OPPOSITE_GENDER 265 +#define MOVE_EFFECT_STEALTH_ROCK 266 #define MOVE_EFFECT_CHATTER 267 +#define MOVE_EFFECT_JUDGEMENT 268 +#define MOVE_EFFECT_RECOIL_HALF 269 +#define MOVE_EFFECT_FAINT_FULL_RESTORE_NEXT_MON 270 #define MOVE_EFFECT_LOWER_SP_DEF_2_HIT 271 -#define MOVE_EFFECT_272 272 +#define MOVE_EFFECT_SHADOW_FORCE 272 #define MOVE_EFFECT_FLINCH_BURN_HIT 273 #define MOVE_EFFECT_FLINCH_FREEZE_HIT 274 #define MOVE_EFFECT_FLINCH_PARALYZE_HIT 275 diff --git a/include/constants/moves.h b/include/constants/moves.h index 39813057a6..e84404e8fd 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -478,18 +478,18 @@ #define CATEGORY_SPECIAL 1 #define CATEGORY_STATUS 2 -#define RANGE_0 0 -#define RANGE_SINGLE_TARGET (1 << 0) -#define RANGE_RANDOM_OPPONENT (1 << 1) -#define RANGE_BOTH_OPPONENTS (1 << 2) -#define RANGE_ALL_BUT_USER (1 << 3) -#define RANGE_4 (1 << 4) -#define RANGE_5 (1 << 5) -#define RANGE_6 (1 << 6) -#define RANGE_7 (1 << 7) -#define RANGE_8 (1 << 8) -#define RANGE_SINGLE_TARGET_USER_SIDE (1 << 9) -#define RANGE_10 (1 << 10) +#define RANGE_SINGLE_TARGET 0 +#define RANGE_SINGLE_TARGET_SPECIAL (1 << 0) +#define RANGE_RANDOM_OPPONENT (1 << 1) +#define RANGE_ADJACENT_OPPONENTS (1 << 2) +#define RANGE_ALL_ADJACENT (1 << 3) +#define RANGE_USER (1 << 4) +#define RANGE_USER_SIDE (1 << 5) +#define RANGE_FIELD (1 << 6) +#define RANGE_OPPONENT_SIDE (1 << 7) +#define RANGE_ALLY (1 << 8) +#define RANGE_SINGLE_TARGET_USER_SIDE (1 << 9) +#define RANGE_FRONT (1 << 10) // Tutor move flags #define TUTOR_DIVE 0 diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index df1608de38..ef321afdf7 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -2557,7 +2557,7 @@ BOOL BtlCmd_TryOHKO(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (CheckBattlerAbilityIfNotIgnored(ctx, ctx->battlerIdAttacker, ctx->battlerIdTarget, ABILITY_STURDY) == TRUE) { ctx->moveStatusFlag |= MOVE_STATUS_19; } else { - if ((ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags & MOVE_EFFECT_LOCK_ON) == FALSE && + if ((ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags & MOVE_EFFECT_FLAG_LOCK_ON) == FALSE && GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_NO_GUARD && GetBattlerAbility(ctx, ctx->battlerIdTarget) != ABILITY_NO_GUARD) { hitChance = ctx->battleMons[ctx->battlerIdAttacker].level - ctx->battleMons[ctx->battlerIdTarget].level + ctx->unk_334.moveData[ctx->moveNoCur].accuracy; @@ -2567,7 +2567,7 @@ BOOL BtlCmd_TryOHKO(BattleSystem *bsys, BATTLECONTEXT *ctx) { hitChance = 0; } } else { - if ((((ctx->battleMons[ctx->battlerIdTarget].unk88.battlerIdLockOn == ctx->battlerIdAttacker) && (ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags & MOVE_EFFECT_LOCK_ON)) || + if ((((ctx->battleMons[ctx->battlerIdTarget].unk88.battlerIdLockOn == ctx->battlerIdAttacker) && (ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags & MOVE_EFFECT_FLAG_LOCK_ON)) || GetBattlerAbility(ctx, ctx->battlerIdAttacker) == ABILITY_NO_GUARD || GetBattlerAbility(ctx, ctx->battlerIdTarget) == ABILITY_NO_GUARD) && ctx->battleMons[ctx->battlerIdAttacker].level >= ctx->battleMons[ctx->battlerIdTarget].level) { @@ -3292,10 +3292,10 @@ BOOL BtlCmd_TryPerishSong(BattleSystem *bsys, BATTLECONTEXT *ctx) { int cnt = 0; for (battlerId = 0; battlerId < maxBattlers; battlerId++) { - if (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_PERISH_SONG || ctx->battleMons[battlerId].hp == 0 || CheckBattlerAbilityIfNotIgnored(ctx, ctx->battlerIdAttacker, battlerId, ABILITY_SOUNDPROOF) == TRUE) { + if (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_FLAG_PERISH_SONG || ctx->battleMons[battlerId].hp == 0 || CheckBattlerAbilityIfNotIgnored(ctx, ctx->battlerIdAttacker, battlerId, ABILITY_SOUNDPROOF) == TRUE) { cnt++; } else { - ctx->battleMons[battlerId].moveEffectFlags |= MOVE_EFFECT_PERISH_SONG; + ctx->battleMons[battlerId].moveEffectFlags |= MOVE_EFFECT_FLAG_PERISH_SONG; ctx->battleMons[battlerId].unk88.perishSongTurns = 3; } } @@ -3575,8 +3575,8 @@ BOOL BtlCmd_RapidSpin(BattleSystem *bsys, BATTLECONTEXT *ctx) { } //Leech Seed - if (ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags & MOVE_EFFECT_LEECH_SEED) { - ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags &= ~MOVE_EFFECT_LEECH_SEED; + if (ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags & MOVE_EFFECT_FLAG_LEECH_SEED) { + ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags &= ~MOVE_EFFECT_FLAG_LEECH_SEED; ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags &= ~3; ctx->moveTemp = 73; BattleScriptGotoSubscript(ctx, NARC_a_0_0_1, 117); @@ -3940,7 +3940,7 @@ BOOL BtlCmd_MagicCoat(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->fieldSideConditionData[side].followMeFlag && ctx->battleMons[ctx->fieldSideConditionData[side].battlerIdFollowMe].hp) { ctx->battlerIdTarget = ctx->fieldSideConditionData[side].battlerIdFollowMe; - } else if (ctx->unk_334.moveData[ctx->moveNoCur].range == RANGE_BOTH_OPPONENTS || ctx->unk_334.moveData[ctx->moveNoCur].range == RANGE_ALL_BUT_USER) { + } else if (ctx->unk_334.moveData[ctx->moveNoCur].range == RANGE_ADJACENT_OPPONENTS || ctx->unk_334.moveData[ctx->moveNoCur].range == RANGE_ALL_ADJACENT) { ctx->battlerIdTarget = battlerId; } else { side = ov12_022506D4(bsys, ctx, ctx->battlerIdAttacker, (u16) ctx->moveNoCur, 1, 0); @@ -3994,7 +3994,7 @@ BOOL BtlCmd_TryYawn(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags & (192 << 5)) { BattleScriptIncrementPointer(ctx, adrs); } else { - ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags |= MOVE_EFFECT_YAWN; + ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags |= MOVE_EFFECT_FLAG_YAWN; } return FALSE; @@ -4052,10 +4052,10 @@ BOOL BtlCmd_TryImprison(BattleSystem *bsys, BATTLECONTEXT *ctx) { battlerIdA = ov12_0223ABB8(bsys, ctx->battlerIdAttacker, 0); battlerIdB = ov12_0223ABB8(bsys, ctx->battlerIdAttacker, 2); - ctx->battleMons[battlerIdA].moveEffectFlags |= MOVE_EFFECT_IMPRISON; - ctx->battleMons[battlerIdB].moveEffectFlags |= MOVE_EFFECT_IMPRISON; + ctx->battleMons[battlerIdA].moveEffectFlags |= MOVE_EFFECT_FLAG_IMPRISON; + ctx->battleMons[battlerIdB].moveEffectFlags |= MOVE_EFFECT_FLAG_IMPRISON; - if (ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags & MOVE_EFFECT_IMPRISON_USER) { + if (ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags & MOVE_EFFECT_FLAG_IMPRISON_USER) { BattleScriptIncrementPointer(ctx, adrs); } else { side = BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker); @@ -4080,7 +4080,7 @@ BOOL BtlCmd_TryImprison(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (battlerId == maxBattlers) { BattleScriptIncrementPointer(ctx, adrs); } else { - ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags |= MOVE_EFFECT_IMPRISON_USER; + ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags |= MOVE_EFFECT_FLAG_IMPRISON_USER; } } @@ -4240,7 +4240,7 @@ BOOL BtlCmd_TryGrudge(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleSystem_GetFieldSide(bsys, ctx->battlerIdTarget); - if (ctx->battleMons[ctx->battlerIdFainted].moveEffectFlags & MOVE_EFFECT_GRUDGE && + if (ctx->battleMons[ctx->battlerIdFainted].moveEffectFlags & MOVE_EFFECT_FLAG_GRUDGE && BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker) != BattleSystem_GetFieldSide(bsys, ctx->battlerIdFainted) && ctx->battleMons[ctx->battlerIdAttacker].hp && ctx->moveNoTemp != MOVE_STRUGGLE) { pos = ctx->movePos[ctx->battlerIdAttacker]; diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 549a932fce..82e154278f 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -1385,7 +1385,7 @@ int ov12_022506D4(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker, moveRange = range; } - if (moveRange == RANGE_BOTH_OPPONENTS) { + if (moveRange == RANGE_ADJACENT_OPPONENTS) { int battlerId; int maxBattlers = BattleSystem_GetMaxBattlers(bsys); OpponentData *opponent = BattleSystem_GetOpponentDataByBattlerId(bsys, battlerIdAttacker); @@ -1406,7 +1406,7 @@ int ov12_022506D4(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker, if (ctx->unk_217E != maxBattlers) { ctx->unk_217E++; } - } else if (moveRange == RANGE_ALL_BUT_USER) { + } else if (moveRange == RANGE_ALL_ADJACENT) { int battlerId; int maxBattlers = BattleSystem_GetMaxBattlers(bsys); @@ -1434,13 +1434,13 @@ int ov12_022506D4(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker, } else { battlerIdTarget = battlerIdAttacker; } - } else if (moveRange == RANGE_10 && (a4 == 1)) { + } else if (moveRange == RANGE_FRONT && (a4 == 1)) { battlerIdTarget = ov12_02253DA0(bsys, ctx, battlerIdAttacker); - } else if (moveRange == RANGE_7) { + } else if (moveRange == RANGE_OPPONENT_SIDE) { battlerIdTarget = ov12_02253DA0(bsys, ctx, battlerIdAttacker); - } else if (moveRange == RANGE_4 || moveRange == RANGE_5 || moveRange == RANGE_SINGLE_TARGET || moveRange == RANGE_6) { + } else if (moveRange == RANGE_USER || moveRange == RANGE_USER_SIDE || moveRange == RANGE_SINGLE_TARGET_SPECIAL || moveRange == RANGE_FIELD) { battlerIdTarget = battlerIdAttacker; - } else if (moveRange == RANGE_8) { + } else if (moveRange == RANGE_ALLY) { int battleType = BattleSystem_GetBattleType(bsys); if (battleType & BATTLE_TYPE_DOUBLES) { @@ -1530,7 +1530,7 @@ void ov12_02250A18(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker maxBattlers = BattleSystem_GetMaxBattlers(bsys); if (moveType == TYPE_ELECTRIC && - (ctx->unk_334.moveData[moveNo].range == RANGE_0 || ctx->unk_334.moveData[moveNo].range == RANGE_RANDOM_OPPONENT) && + (ctx->unk_334.moveData[moveNo].range == RANGE_SINGLE_TARGET || ctx->unk_334.moveData[moveNo].range == RANGE_RANDOM_OPPONENT) && !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && CheckAbilityActive(bsys, ctx, CHECK_ABILITY_ALL_HP_NOT_USER, battlerIdAttacker, ABILITY_LIGHTNINGROD)) { for (battlerId = 0; battlerId < maxBattlers; battlerId++) { @@ -1544,7 +1544,7 @@ void ov12_02250A18(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker ctx->battlerIdTarget = battlerIdTarget; } } else if (moveType == TYPE_WATER && - (ctx->unk_334.moveData[moveNo].range == RANGE_0 || ctx->unk_334.moveData[moveNo].range == RANGE_RANDOM_OPPONENT) && + (ctx->unk_334.moveData[moveNo].range == RANGE_SINGLE_TARGET || ctx->unk_334.moveData[moveNo].range == RANGE_RANDOM_OPPONENT) && !(ctx->battleStatus & BATTLE_STATUS_CHARGE_TURN) && CheckAbilityActive(bsys, ctx, CHECK_ABILITY_ALL_HP_NOT_USER, battlerIdAttacker, ABILITY_STORM_DRAIN)) { for (battlerId = 0; battlerId < maxBattlers; battlerId++) { @@ -1814,8 +1814,8 @@ void InitSwitchWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { if ((ctx->battleMons[i].status2 & STATUS2_MEAN_LOOK) && (ctx->battleMons[i].unk88.battlerIdMeanLook == battlerId)) { ctx->battleMons[i].status2 &= ~STATUS2_MEAN_LOOK; } - if ((ctx->battleMons[i].moveEffectFlags & MOVE_EFFECT_LOCK_ON) && ctx->battleMons[i].unk88.battlerIdLockOn == battlerId) { - ctx->battleMons[i].moveEffectFlags &= ~MOVE_EFFECT_LOCK_ON; + if ((ctx->battleMons[i].moveEffectFlags & MOVE_EFFECT_FLAG_LOCK_ON) && ctx->battleMons[i].unk88.battlerIdLockOn == battlerId) { + ctx->battleMons[i].moveEffectFlags &= ~MOVE_EFFECT_FLAG_LOCK_ON; ctx->battleMons[i].unk88.battlerIdLockOn = 0; } } @@ -1823,11 +1823,11 @@ void InitSwitchWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { ctx->battleMons[battlerId].moveEffectFlags = 0; } else { //baton pass ctx->battleMons[battlerId].status2 &= STATUS2_BATON_PASSABLE; - ctx->battleMons[battlerId].moveEffectFlags &= MOVE_EFFECT_BATON_PASSABLE; + ctx->battleMons[battlerId].moveEffectFlags &= MOVE_EFFECT_FLAG_BATON_PASSABLE; for (i = 0; i < maxBattlers; i++) { - if ((ctx->battleMons[i].moveEffectFlags & MOVE_EFFECT_LOCK_ON) && ctx->battleMons[i].unk88.battlerIdLockOn == battlerId) { - ctx->battleMons[i].moveEffectFlags &= ~MOVE_EFFECT_LOCK_ON; - ctx->battleMons[i].moveEffectFlags |= MOVE_EFFECT_LOCK_ON_SET; + if ((ctx->battleMons[i].moveEffectFlags & MOVE_EFFECT_FLAG_LOCK_ON) && ctx->battleMons[i].unk88.battlerIdLockOn == battlerId) { + ctx->battleMons[i].moveEffectFlags &= ~MOVE_EFFECT_FLAG_LOCK_ON; + ctx->battleMons[i].moveEffectFlags |= MOVE_EFFECT_FLAG_LOCK_ON_SET; } } } @@ -1878,7 +1878,7 @@ void InitSwitchWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { ctx->fieldCondition &= (MaskOfFlagNo(battlerId) << 8) ^ 0xFFFFFFFF; //?? - if (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_POWER_TRICK) { + if (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_FLAG_POWER_TRICK) { i = ctx->battleMons[battlerId].atk; ctx->battleMons[battlerId].atk = ctx->battleMons[battlerId].def; ctx->battleMons[battlerId].def = i; @@ -2222,7 +2222,7 @@ BOOL ov12_02251C74(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarge int item = GetBattlerHeldItemEffect(ctx, battlerIdTarget); BOOL ret = TRUE; - if (item == HOLD_EFFECT_SPEED_DOWN_GROUNDED || (ctx->battleMons[battlerIdTarget].moveEffectFlags & MOVE_EFFECT_INGRAIN)) { + if (item == HOLD_EFFECT_SPEED_DOWN_GROUNDED || (ctx->battleMons[battlerIdTarget].moveEffectFlags & MOVE_EFFECT_FLAG_INGRAIN)) { if (sTypeEffectiveness[index][1] == TYPE_FLYING && sTypeEffectiveness[index][2] == TYPE_MUL_NO_EFFECT) { ret = FALSE; } @@ -2238,7 +2238,7 @@ BOOL ov12_02251C74(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarge } } - if (ctx->battleMons[battlerIdTarget].moveEffectFlags & MOVE_EFFECT_MIRACLE_EYE) { + if (ctx->battleMons[battlerIdTarget].moveEffectFlags & MOVE_EFFECT_FLAG_MIRACLE_EYE) { if (sTypeEffectiveness[index][1] == TYPE_DARK && sTypeEffectiveness[index][2] == TYPE_MUL_NO_EFFECT) { ret = FALSE; } @@ -2288,7 +2288,7 @@ int ov12_02251D28(BattleSystem *bsys, BATTLECONTEXT *ctx, int moveNo, int moveTy if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_LEVITATE) == TRUE && moveType == TYPE_GROUND && itemTarget != HOLD_EFFECT_SPEED_DOWN_GROUNDED) { *moveStatusFlags |= MOVE_STATUS_LEVITATE_IMMUNE; - } else if (ctx->battleMons[battlerIdTarget].unk88.magnetRiseTurns && !(ctx->battleMons[battlerIdTarget].moveEffectFlags & MOVE_EFFECT_INGRAIN) && moveType == TYPE_GROUND && itemTarget != HOLD_EFFECT_SPEED_DOWN_GROUNDED) { + } else if (ctx->battleMons[battlerIdTarget].unk88.magnetRiseTurns && !(ctx->battleMons[battlerIdTarget].moveEffectFlags & MOVE_EFFECT_FLAG_INGRAIN) && moveType == TYPE_GROUND && itemTarget != HOLD_EFFECT_SPEED_DOWN_GROUNDED) { *moveStatusFlags |= MOVE_STATUS_MAGNET_RISE_IMMUNE; } else { i = 0; @@ -2959,16 +2959,16 @@ int CheckAbilityActive(BattleSystem *bsys, BATTLECONTEXT *ctx, int flag, int bat //FIXME: Function name is wrong BOOL BattleCtx_IsIdenticalToCurrentMove(BATTLECONTEXT *ctx, int moveNo) { switch (ctx->unk_334.moveData[moveNo].effect) { - case MOVE_EFFECT_26: - case MOVE_EFFECT_39: - case MOVE_EFFECT_75: - case MOVE_EFFECT_145: + case MOVE_EFFECT_BIDE: + case MOVE_EFFECT_CHARGE_TURN_HIGH_CRIT: + case MOVE_EFFECT_CHARGE_TURN_HIGH_CRIT_FLINCH: + case MOVE_EFFECT_CHARGE_TURN_DEF_UP: case MOVE_EFFECT_151: - case MOVE_EFFECT_155: - case MOVE_EFFECT_255: - case MOVE_EFFECT_256: - case MOVE_EFFECT_263: - case MOVE_EFFECT_272: + case MOVE_EFFECT_FLY: + case MOVE_EFFECT_DIVE: + case MOVE_EFFECT_DIG: + case MOVE_EFFECT_BOUNCE: + case MOVE_EFFECT_SHADOW_FORCE: return TRUE; } return FALSE; @@ -3057,11 +3057,11 @@ BOOL WhirlwindCheck(BattleSystem *bsys, BATTLECONTEXT *ctx) { } u8 GetBattlerAbility(BATTLECONTEXT *ctx, int battlerId) { - if ((ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_GASTRO_ACID) && ctx->battleMons[battlerId].ability != ABILITY_MULTITYPE) { + if ((ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_FLAG_GASTRO_ACID) && ctx->battleMons[battlerId].ability != ABILITY_MULTITYPE) { return ABILITY_NONE; } else if ((ctx->fieldCondition & FIELD_CONDITION_GRAVITY) && ctx->battleMons[battlerId].ability == ABILITY_LEVITATE) { return ABILITY_NONE; - } else if ((ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_INGRAIN) && ctx->battleMons[battlerId].ability == ABILITY_LEVITATE) { + } else if ((ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_FLAG_INGRAIN) && ctx->battleMons[battlerId].ability == ABILITY_LEVITATE) { return ABILITY_NONE; } else { return ctx->battleMons[battlerId].ability; @@ -3202,7 +3202,7 @@ BOOL CantEscape(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, BATTLEMSG return TRUE; } - if ((ctx->battleMons[battlerId].status2 & (STATUS2_BINDING_ALL | STATUS2_MEAN_LOOK)) || (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_INGRAIN)){ + if ((ctx->battleMons[battlerId].status2 & (STATUS2_BINDING_ALL | STATUS2_MEAN_LOOK)) || (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_FLAG_INGRAIN)){ if (msg == NULL) { return TRUE; } @@ -3275,7 +3275,7 @@ BOOL BattleContext_CheckMoveImprisoned(BattleSystem *bsys, BATTLECONTEXT *ctx, i side = BattleSystem_GetFieldSide(bsys, battlerId); for (battlerIdCur = 0; battlerIdCur < maxBattlers; battlerIdCur++) { - if ((side != BattleSystem_GetFieldSide(bsys, battlerIdCur)) && (ctx->battleMons[battlerIdCur].moveEffectFlags & MOVE_EFFECT_IMPRISON_USER)) { + if ((side != BattleSystem_GetFieldSide(bsys, battlerIdCur)) && (ctx->battleMons[battlerIdCur].moveEffectFlags & MOVE_EFFECT_FLAG_IMPRISON_USER)) { for (i = 0; i < LEARNED_MOVES_MAX; i++) { if (moveNo == ctx->battleMons[battlerIdCur].moves[i]) { break; @@ -5189,7 +5189,7 @@ BOOL BattlerCanSwitch(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { return FALSE; } - if ((ctx->battleMons[battlerId].status2 & (STATUS2_BINDING_ALL | STATUS2_MEAN_LOOK)) || (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_INGRAIN)) { + if ((ctx->battleMons[battlerId].status2 & (STATUS2_BINDING_ALL | STATUS2_MEAN_LOOK)) || (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_FLAG_INGRAIN)) { ret = TRUE; } @@ -5447,7 +5447,7 @@ BOOL TryEatOpponentBerry(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) break; } if (ret == TRUE) { - if (GetBattlerAbility(ctx, ctx->battlerIdAttacker) == ABILITY_KLUTZ || (ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags & MOVE_EFFECT_EMBARGO)) { + if (GetBattlerAbility(ctx, ctx->battlerIdAttacker) == ABILITY_KLUTZ || (ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags & MOVE_EFFECT_FLAG_EMBARGO)) { ctx->tempData = 0; } else { ctx->tempData = script; @@ -5700,7 +5700,7 @@ BOOL TryFling(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { break; } - if (ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags & MOVE_EFFECT_EMBARGO) { + if (ctx->battleMons[ctx->battlerIdTarget].moveEffectFlags & MOVE_EFFECT_FLAG_EMBARGO) { ctx->flingScript = 0; } else { ctx->itemTemp = ctx->battleMons[battlerId].item; @@ -6198,7 +6198,7 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC GF_ASSERT(ctx->unk_2158 >= 10); movePower = movePower * ctx->unk_2158 / 10; - if ((ctx->battleMons[battlerIdAttacker].moveEffectFlags & MOVE_EFFECT_CHARGE) && moveType == TYPE_ELECTRIC) { + if ((ctx->battleMons[battlerIdAttacker].moveEffectFlags & MOVE_EFFECT_FLAG_CHARGE) && moveType == TYPE_ELECTRIC) { movePower *= 2; } @@ -6306,11 +6306,11 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC monSpAtk = monSpAtk * 150 / 100; } - if (moveType == TYPE_ELECTRIC && CheckMoveEffectOnField(bsys, ctx, MOVE_EFFECT_MUD_SPORT)) { + if (moveType == TYPE_ELECTRIC && CheckMoveEffectOnField(bsys, ctx, MOVE_EFFECT_FLAG_MUD_SPORT)) { movePower /= 2; } - if (moveType == TYPE_FIRE && CheckMoveEffectOnField(bsys, ctx, MOVE_EFFECT_WATER_SPORT)) { + if (moveType == TYPE_FIRE && CheckMoveEffectOnField(bsys, ctx, MOVE_EFFECT_FLAG_WATER_SPORT)) { movePower /= 2; } @@ -6493,10 +6493,10 @@ int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 moveNo, u32 sideC } } - if ((battleType & BATTLE_TYPE_DOUBLES) && ctx->unk_334.moveData[moveNo].range == RANGE_BOTH_OPPONENTS && GetMonsHitCount(bsys, ctx, 1, battlerIdTarget) == 2) { + if ((battleType & BATTLE_TYPE_DOUBLES) && ctx->unk_334.moveData[moveNo].range == RANGE_ADJACENT_OPPONENTS && GetMonsHitCount(bsys, ctx, 1, battlerIdTarget) == 2) { dmg = dmg * 3 / 4; } - if ((battleType & BATTLE_TYPE_DOUBLES) && ctx->unk_334.moveData[moveNo].range == RANGE_ALL_BUT_USER && GetMonsHitCount(bsys, ctx, 0, battlerIdTarget) >= 2) { + if ((battleType & BATTLE_TYPE_DOUBLES) && ctx->unk_334.moveData[moveNo].range == RANGE_ALL_ADJACENT && GetMonsHitCount(bsys, ctx, 0, battlerIdTarget) >= 2) { dmg = dmg * 3 / 4; } @@ -6577,7 +6577,7 @@ u32 TryCriticalHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker if ((BattleSystem_Random(bsys) % sCritChance[critUp]) == 0) { if (!CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_BATTLE_ARMOR) && !CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_SHELL_ARMOR) && - !(sideCondition & SIDE_CONDITION_12) && !(moveEffect & MOVE_EFFECT_LUCKY_CHANT)) { + !(sideCondition & SIDE_CONDITION_12) && !(moveEffect & MOVE_EFFECT_FLAG_LUCKY_CHANT)) { ret = 2; } } @@ -6748,7 +6748,7 @@ BOOL CheckStatusEffectsSubstitute(BATTLECONTEXT *ctx, int battlerId, int status) int i; BOOL ret = FALSE; - if ((ctx->battleMons[battlerId].status2 & STATUS2_SUBSTITUTE) || (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_SUBSTITUTE_HIDE)) { + if ((ctx->battleMons[battlerId].status2 & STATUS2_SUBSTITUTE) || (ctx->battleMons[battlerId].moveEffectFlags & MOVE_EFFECT_FLAG_HIDE_SUBSTITUTE)) { for (i = 0; i < NELEMS(ov12_0226CBDC); i++) { if (ov12_0226CBDC[i] == status) { ret = TRUE; @@ -7094,15 +7094,15 @@ static int ov12_022583B4(BATTLECONTEXT *ctx, int battlerId, int typeEffectivenes static int ov12_02258440(BATTLECONTEXT *ctx, int moveNo) { switch (ctx->unk_334.moveData[moveNo].effect) { - case MOVE_EFFECT_26: - case MOVE_EFFECT_39: - case MOVE_EFFECT_75: - case MOVE_EFFECT_145: + case MOVE_EFFECT_BIDE: + case MOVE_EFFECT_CHARGE_TURN_HIGH_CRIT: + case MOVE_EFFECT_CHARGE_TURN_HIGH_CRIT_FLINCH: + case MOVE_EFFECT_CHARGE_TURN_DEF_UP: case MOVE_EFFECT_151: - case MOVE_EFFECT_155: - case MOVE_EFFECT_255: - case MOVE_EFFECT_256: - case MOVE_EFFECT_263: + case MOVE_EFFECT_FLY: + case MOVE_EFFECT_DIVE: + case MOVE_EFFECT_DIG: + case MOVE_EFFECT_BOUNCE: case MOVE_EFFECT_FLINCH_BURN_HIT: return (ctx->battleStatus & BATTLE_STATUS_CHARGE_MOVE_HIT); } @@ -7225,9 +7225,9 @@ static int ov12_022585B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdTa } static const u16 ov12_0226CB64[] = { - MOVE_EFFECT_41, - MOVE_EFFECT_87, - MOVE_EFFECT_88, + MOVE_EFFECT_40_DAMAGE_FLAT, + MOVE_EFFECT_LEVEL_DAMAGE_FLAT, + MOVE_EFFECT_RANDOM_DAMAGE_1_TO_150_LEVEL, MOVE_EFFECT_COUNTER, MOVE_EFFECT_MIRROR_COAT, MOVE_EFFECT_METAL_BURST From 60f923ed6f1954d0b53a84ce0fda114e78787a1c Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Thu, 13 Jul 2023 01:08:26 -0400 Subject: [PATCH 09/18] tab --- src/battle/overlay_12_0224E4FC.c | 324 +++++++++++++++---------------- 1 file changed, 162 insertions(+), 162 deletions(-) diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 82e154278f..5e1067cbac 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -2104,117 +2104,117 @@ int BattleMon_GetMoveIndex(BattleMon *mon, u16 moveNo) { static const u8 sTypeEffectiveness[][3] = { { TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT }, - { TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT }, - { TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT }, - { TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT }, - { TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT }, - { TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, - { TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, - { TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT }, - { TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT }, - { TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT }, - { TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT } + { TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT }, + { TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT }, + { TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT }, + { TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT }, + { TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT }, + { TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE }, + { TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE }, + { TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT }, + { TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT }, + { TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT }, + { TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT } }; //static @@ -3398,10 +3398,10 @@ void SortMonsBySpeed(BattleSystem *bsys, BATTLECONTEXT *ctx) { } } -static const u16 sGravityUnusableMoves[6] = { +static const u16 sGravityUnusableMoves[] = { MOVE_FLY, MOVE_BOUNCE, - MOVE_JUMP_KICK, + MOVE_JUMP_KICK, MOVE_HIGH_JUMP_KICK, MOVE_SPLASH, MOVE_MAGNET_RISE @@ -3431,7 +3431,7 @@ static const u16 sHealBlockUnusableMoves[] = { MOVE_MORNING_SUN, MOVE_SYNTHESIS, MOVE_MOONLIGHT, - MOVE_SWALLOW, + MOVE_SWALLOW, MOVE_HEAL_ORDER, MOVE_SLACK_OFF, MOVE_ROOST, @@ -3487,7 +3487,7 @@ int GetBattlerLearnedMoveCount(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl //BUG: There isn't a reason why this shouldn't be const, but it's located in .data and not .rodata static u16 sSoundMoves[] = { - MOVE_GROWL, + MOVE_GROWL, MOVE_ROAR, MOVE_SING, MOVE_SUPERSONIC, @@ -3495,7 +3495,7 @@ static u16 sSoundMoves[] = { MOVE_SNORE, MOVE_UPROAR, MOVE_METAL_SOUND, - MOVE_GRASS_WHISTLE, + MOVE_GRASS_WHISTLE, MOVE_HYPER_VOICE, MOVE_BUG_BUZZ, MOVE_CHATTER @@ -6056,7 +6056,7 @@ static const u8 sTypeEnhancingItems[][2] = { { HOLD_EFFECT_STRENGTHEN_BUG, TYPE_BUG }, { HOLD_EFFECT_STRENGTHEN_STEEL, TYPE_STEEL }, { HOLD_EFFECT_STRENGTHEN_GROUND, TYPE_GROUND }, - { HOLD_EFFECT_STRENGTHEN_ROCK, TYPE_ROCK }, + { HOLD_EFFECT_STRENGTHEN_ROCK, TYPE_ROCK }, { HOLD_EFFECT_STRENGTHEN_GRASS, TYPE_GRASS }, { HOLD_EFFECT_STRENGTHEN_DARK, TYPE_DARK }, { HOLD_EFFECT_STRENGTHEN_FIGHT, TYPE_FIGHTING }, @@ -6064,7 +6064,7 @@ static const u8 sTypeEnhancingItems[][2] = { { HOLD_EFFECT_STRENGTHEN_WATER, TYPE_WATER }, { HOLD_EFFECT_STRENGTHEN_FLYING, TYPE_FLYING }, { HOLD_EFFECT_STRENGTHEN_POISON, TYPE_POISON }, - { HOLD_EFFECT_STRENGTHEN_ICE, TYPE_ICE }, + { HOLD_EFFECT_STRENGTHEN_ICE, TYPE_ICE }, { HOLD_EFFECT_STRENGTHEN_GHOST, TYPE_GHOST }, { HOLD_EFFECT_STRENGTHEN_PSYCHIC, TYPE_PSYCHIC }, { HOLD_EFFECT_STRENGTHEN_FIRE, TYPE_FIRE }, @@ -6072,7 +6072,7 @@ static const u8 sTypeEnhancingItems[][2] = { { HOLD_EFFECT_STRENGTHEN_NORMAL, TYPE_NORMAL }, { HOLD_EFFECT_ARCEUS_FIRE, TYPE_FIRE }, { HOLD_EFFECT_ARCEUS_WATER, TYPE_WATER }, - { HOLD_EFFECT_ARCEUS_ELECTRIC, TYPE_ELECTRIC }, + { HOLD_EFFECT_ARCEUS_ELECTRIC, TYPE_ELECTRIC }, { HOLD_EFFECT_ARCEUS_GRASS, TYPE_GRASS }, { HOLD_EFFECT_ARCEUS_ICE, TYPE_ICE }, { HOLD_EFFECT_ARCEUS_FIGHT, TYPE_FIGHTING }, @@ -6080,7 +6080,7 @@ static const u8 sTypeEnhancingItems[][2] = { { HOLD_EFFECT_ARCEUS_GROUND, TYPE_GROUND }, { HOLD_EFFECT_ARCEUS_FLYING, TYPE_FLYING }, { HOLD_EFFECT_ARCEUS_PSYCHIC, TYPE_PSYCHIC }, - { HOLD_EFFECT_ARCEUS_BUG, TYPE_BUG }, + { HOLD_EFFECT_ARCEUS_BUG, TYPE_BUG }, { HOLD_EFFECT_ARCEUS_ROCK, TYPE_ROCK }, { HOLD_EFFECT_ARCEUS_GHOST, TYPE_GHOST }, { HOLD_EFFECT_ARCEUS_DRAGON, TYPE_DRAGON }, @@ -6106,7 +6106,7 @@ static const u8 sStatChangeTable[][2] = { static const u16 sPunchingMoves[] = { MOVE_ICE_PUNCH, - MOVE_FIRE_PUNCH, + MOVE_FIRE_PUNCH, MOVE_THUNDER_PUNCH, MOVE_MACH_PUNCH, MOVE_FOCUS_PUNCH, @@ -6114,7 +6114,7 @@ static const u16 sPunchingMoves[] = { MOVE_DYNAMIC_PUNCH, MOVE_HAMMER_ARM, MOVE_MEGA_PUNCH, - MOVE_COMET_PUNCH, + MOVE_COMET_PUNCH, MOVE_METEOR_MASH, MOVE_SHADOW_PUNCH, MOVE_DRAIN_PUNCH, @@ -6596,7 +6596,7 @@ static const u16 sMetronomeUnuseableMoves[] = { MOVE_MIMIC, MOVE_CHATTER, 0xFFFE, - MOVE_SLEEP_TALK, + MOVE_SLEEP_TALK, MOVE_ASSIST, MOVE_MIRROR_MOVE, MOVE_COUNTER, @@ -6604,7 +6604,7 @@ static const u16 sMetronomeUnuseableMoves[] = { MOVE_PROTECT, MOVE_DETECT, MOVE_ENDURE, - MOVE_DESTINY_BOND, + MOVE_DESTINY_BOND, MOVE_THIEF, MOVE_FOLLOW_ME, MOVE_SNATCH, @@ -6612,7 +6612,7 @@ static const u16 sMetronomeUnuseableMoves[] = { MOVE_COVET, MOVE_TRICK, MOVE_FOCUS_PUNCH, - MOVE_FEINT, + MOVE_FEINT, MOVE_COPYCAT, MOVE_ME_FIRST, MOVE_SWITCHEROO, @@ -6654,7 +6654,7 @@ static const u16 sEncoreFailMoves[] = { MOVE_MIMIC, MOVE_SKETCH, MOVE_MIRROR_MOVE, - MOVE_ENCORE, + MOVE_ENCORE, MOVE_STRUGGLE }; @@ -6894,147 +6894,147 @@ void ov12_022582B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int var, int battlerI static const int ov12_0226CDCC[145] = { 0, - 18, + 18, 22, 25, 27, - 31, + 31, 47, 37, 14, - 55, + 55, 56, 48, 13, - 58, + 58, 63, 12, 12, - 12, + 12, 12, 12, 12, - 12, + 12, 12, 12, 12, - 12, + 12, 12, 12, 12, - 64, + 64, 66, 85, 86, - 93, + 93, 119, 115, 130, - 138, + 138, 147, 12, 12, - 12, + 12, 12, 12, 12, - 12, + 12, 12, 12, 12, - 12, + 12, 12, 12, 12, - 44, + 44, 142, 149, 150, - 148, + 148, 151, 152, 24, - 33, + 33, 34, 35, 43, - 45, + 45, 46, 49, 52, - 54, + 54, 62, 67, 68, - 70, + 70, 73, 77, 78, - 79, + 79, 80, 81, 82, - 84, + 84, 87, 88, 89, - 91, + 91, 92, 95, 96, - 97, + 97, 126, 100, 101, - 103, + 103, 105, 106, 109, - 112, + 112, 113, 114, 120, - 122, + 122, 123, 124, 125, - 127, + 127, 128, 129, 131, - 132, + 132, 134, 135, 140, - 141, + 141, 143, 145, 154, - 155, + 155, 156, 158, 159, - 160, + 160, 161, 162, 163, - 164, + 164, 165, 166, 167, - 168, + 168, 170, 171, 173, - 175, + 175, 218, 219, 220, - 226, + 226, 246, 247, 248, - 249, + 249, 260, 261, 118 From 32b5d04c4dc9cfe3c437986bc69460acd7f6c454 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Fri, 14 Jul 2023 19:12:28 -0400 Subject: [PATCH 10/18] Starting progress on Battle Controller Player again --- asm/overlay_12_battle_controller_player.s | 43 ++--------------------- include/battle.h | 2 +- include/battle_controller_player.h | 1 + include/battle_system.h | 2 ++ include/constants/battle.h | 2 +- src/battle/battle_controller_player.c | 17 +++++++++ src/battle/overlay_12_0224E4FC.c | 4 +-- 7 files changed, 26 insertions(+), 45 deletions(-) diff --git a/asm/overlay_12_battle_controller_player.s b/asm/overlay_12_battle_controller_player.s index 58278fb72e..600283982e 100644 --- a/asm/overlay_12_battle_controller_player.s +++ b/asm/overlay_12_battle_controller_player.s @@ -9,47 +9,8 @@ .public BattleControllerPlayer_StartEncounter .public BattleControllerPlayer_TrainerMessage .public BattleControllerPlayer_PokemonAppear - - thumb_func_start BattleControllerPlayer_SelectionScreenInit -BattleControllerPlayer_SelectionScreenInit: ; 0x022487FC - push {r3, r4, r5, r6, r7, lr} - str r0, [sp] - add r7, r1, #0 - bl BattleSystem_GetMaxBattlers - add r5, r0, #0 - mov r4, #0 - cmp r5, #0 - ble _0224882C - add r6, r7, #0 - add r2, r4, #0 -_02248812: - mov r0, #0xb7 - strb r2, [r7, r4] - lsl r0, r0, #6 - ldr r1, [r6, r0] - add r0, r0, #4 - str r1, [r6, r0] - add r3, r7, r4 - ldr r0, _02248844 ; =0x0000314C - add r4, r4, #1 - strb r2, [r3, r0] - add r6, #0xc0 - cmp r4, r5 - blt _02248812 -_0224882C: - ldr r0, [sp] - mov r1, #0 - bl ov12_0223BB64 - ldr r0, [sp] - mov r1, #1 - bl ov12_02237ED0 - mov r0, #5 - str r0, [r7, #8] - pop {r3, r4, r5, r6, r7, pc} - nop -_02248844: .word 0x0000314C - thumb_func_end BattleControllerPlayer_SelectionScreenInit - + .public BattleControllerPlayer_SelectionScreenInit + thumb_func_start ov12_02248848 ov12_02248848: ; 0x02248848 push {r3, r4, r5, r6, r7, lr} diff --git a/include/battle.h b/include/battle.h index d07ba9f866..5ffd056cef 100644 --- a/include/battle.h +++ b/include/battle.h @@ -243,7 +243,7 @@ typedef struct BattleMon { u8 metGender:4; u8 ball; u32 moveEffectFlags; - u32 unk80; + u32 moveEffectFlagsTemp; UnkBattlemonSub unk88; } BattleMon; diff --git a/include/battle_controller_player.h b/include/battle_controller_player.h index 4cca8ff3cc..95fd73d694 100644 --- a/include/battle_controller_player.h +++ b/include/battle_controller_player.h @@ -13,6 +13,7 @@ void BattleControllerPlayer_GetBattleMon(BattleSystem *bsys, BATTLECONTEXT *ctx) void BattleControllerPlayer_StartEncounter(BattleSystem *bsys, BATTLECONTEXT *ctx); void BattleControllerPlayer_TrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ctx); void BattleControllerPlayer_PokemonAppear(BattleSystem *bsys, BATTLECONTEXT *ctx); +void BattleControllerPlayer_SelectionScreenInit(BattleSystem *bsys, BATTLECONTEXT *ctx); //The following functions haven't been decompiled yet void ov12_0224E384(BattleSystem *bsys, BATTLECONTEXT *ctx); diff --git a/include/battle_system.h b/include/battle_system.h index c1a69dc323..da1798f77f 100644 --- a/include/battle_system.h +++ b/include/battle_system.h @@ -37,5 +37,7 @@ void ov12_0223C0C4(BattleSystem *bsys); int BattleSystem_GetWeather(BattleSystem *bsys); int ov12_0223AB60(BattleSystem *bsys); BOOL ov12_0223BFEC(BattleSystem *bsys); +void ov12_0223BB64(BattleSystem *bsys, int a1); +void ov12_02237ED0(BattleSystem *bsys, int a1); #endif diff --git a/include/constants/battle.h b/include/constants/battle.h index 80791d0bfb..c8ad665e2f 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -388,7 +388,7 @@ typedef enum ControllerCommand { CONTROLLER_COMMAND_TRAINER_MESSAGE, CONTROLLER_COMMAND_SEND_OUT, CONTROLLER_COMMAND_SELECTION_SCREEN_INIT, - CONTROLLER_COMMAND_5, + CONTROLLER_COMMAND_SELECTION_SCREEN_INPUT, CONTROLLER_COMMAND_6, CONTROLLER_COMMAND_7, CONTROLLER_COMMAND_8, diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index c246dbfe45..12729583fd 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -91,3 +91,20 @@ void BattleControllerPlayer_PokemonAppear(BattleSystem *bsys, BATTLECONTEXT *ctx ctx->command = CONTROLLER_COMMAND_SELECTION_SCREEN_INIT; } } + +//static +void BattleControllerPlayer_SelectionScreenInit(BattleSystem *bsys, BATTLECONTEXT *ctx) { + int battlerId; + int maxBattlers = BattleSystem_GetMaxBattlers(bsys); + + for (battlerId = 0; battlerId < maxBattlers; battlerId++) { + ctx->unk_0[battlerId] = 0; + ctx->battleMons[battlerId].moveEffectFlagsTemp = ctx->battleMons[battlerId].moveEffectFlags; + ctx->unk_314C[battlerId] = 0; + } + + ov12_0223BB64(bsys, 0); + ov12_02237ED0(bsys, 1); + + ctx->command = CONTROLLER_COMMAND_SELECTION_SCREEN_INPUT; +} diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 5e1067cbac..7fcfdf24bc 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -402,7 +402,7 @@ int GetBattlerVar(BATTLECONTEXT *ctx, int battlerId, u32 id, void *data) { case BMON_DATA_MOVE_EFFECT: return mon->moveEffectFlags; case BMON_DATA_MOVE_EFFECT_TEMP: - return mon->unk80; + return mon->moveEffectFlagsTemp; case BMON_DATA_DISABLED_TURNS: return mon->unk88.disabledTurns; case BMON_DATA_ENCORED_TURNS: @@ -656,7 +656,7 @@ void SetBattlerVar(BATTLECONTEXT *ctx, int battlerId, u32 id, void *data) { mon->moveEffectFlags = *data32; break; case BMON_DATA_MOVE_EFFECT_TEMP: - mon->unk80 = *data32; + mon->moveEffectFlagsTemp = *data32; break; case BMON_DATA_DISABLED_TURNS: mon->unk88.disabledTurns = *data8; From fa25f5bc3a8676ecd925e46ac4909e1fdea031e8 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Fri, 14 Jul 2023 22:01:29 -0400 Subject: [PATCH 11/18] Selection Screen Input --- asm/overlay_12_battle_controller_player.s | 1195 +-------------------- include/battle_controller.h | 9 + include/battle_controller_opponent.h | 1 + include/battle_controller_player.h | 1 + include/battle_system.h | 3 +- include/constants/battle_script.h | 4 +- include/overlay_12_0224E4FC.h | 3 +- src/battle/battle_controller_player.c | 369 +++++++ 8 files changed, 387 insertions(+), 1198 deletions(-) diff --git a/asm/overlay_12_battle_controller_player.s b/asm/overlay_12_battle_controller_player.s index 600283982e..87cceadbb8 100644 --- a/asm/overlay_12_battle_controller_player.s +++ b/asm/overlay_12_battle_controller_player.s @@ -10,1199 +10,8 @@ .public BattleControllerPlayer_TrainerMessage .public BattleControllerPlayer_PokemonAppear .public BattleControllerPlayer_SelectionScreenInit + .public BattleControllerPlayer_SelectionScreenInput - thumb_func_start ov12_02248848 -ov12_02248848: ; 0x02248848 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0xa0 - add r7, r0, #0 - str r1, [sp, #0x1c] - bl BattleSystem_GetMaxBattlers - str r0, [sp, #0x64] - add r0, r7, #0 - bl BattleSystem_GetBattleType - str r0, [sp, #0x28] - mov r4, #0 - ldr r0, [sp, #0x64] - str r4, [sp, #0x60] - cmp r0, #0 - bgt _0224886C - bl _0224912A -_0224886C: - ldr r0, [sp, #0x1c] - mov r1, #0x75 - lsl r1, r1, #2 - str r0, [sp, #0x58] - add r0, r0, r1 - str r0, [sp, #0x54] - ldr r0, [sp, #0x1c] - ldr r1, _02248B84 ; =0x000021AC - str r0, [sp, #0x50] - str r0, [sp, #0x4c] - str r0, [sp, #0x48] - add r0, r0, r1 - str r0, [sp, #0x44] - mov r1, #0x23 - ldr r0, [sp, #0x1c] - lsl r1, r1, #8 - add r0, r0, r1 - str r0, [sp, #0x40] - ldr r0, [sp, #0x28] - mov r1, #2 - and r0, r1 - str r0, [sp, #0x3c] - ldr r0, [sp, #0x28] - mov r1, #8 - and r0, r1 - str r0, [sp, #0x38] - ldr r0, [sp, #0x28] - lsl r1, r1, #6 - and r0, r1 - str r0, [sp, #0x34] - ldr r0, [sp, #0x28] - mov r1, #0x20 - and r0, r1 - str r0, [sp, #0x30] - ldr r0, [sp, #0x28] - mov r1, #4 - and r0, r1 - str r0, [sp, #0x2c] - ldr r0, [sp, #0x28] - mov r1, #0x80 - and r0, r1 - str r0, [sp, #0x24] - ldr r0, [sp, #0x28] - mov r1, #1 - and r0, r1 - str r0, [sp, #0x20] - thumb_func_end ov12_02248848 - - thumb_func_start ov12_022488C8 -ov12_022488C8: ; 0x022488C8 - ldr r0, [sp, #0x1c] - add r5, r0, r4 - ldrb r0, [r0, r4] - cmp r0, #0x11 - bls _022488D6 - bl _022490F0 -_022488D6: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_022488E2: ; jump table - .short _02248906 - _022488E2 - 2 ; case 0 - .short _022489E6 - _022488E2 - 2 ; case 1 - .short _022489A2 - _022488E2 - 2 ; case 2 - .short _02248C86 - _022488E2 - 2 ; case 3 - .short _02248C94 - _022488E2 - 2 ; case 4 - .short _02248D7A - _022488E2 - 2 ; case 5 - .short _02248DB4 - _022488E2 - 2 ; case 6 - .short _02248DF4 - _022488E2 - 2 ; case 7 - .short _02248E02 - _022488E2 - 2 ; case 8 - .short _02248E30 - _022488E2 - 2 ; case 9 - .short _02248EA4 - _022488E2 - 2 ; case 10 - .short _02248F02 - _022488E2 - 2 ; case 11 - .short _02248FFA - _022488E2 - 2 ; case 12 - .short _0224904A - _022488E2 - 2 ; case 13 - .short _0224907E - _022488E2 - 2 ; case 14 - .short _02249086 - _022488E2 - 2 ; case 15 - .short _022490A0 - _022488E2 - 2 ; case 16 - .short _022490E4 - _022488E2 - 2 ; case 17 -_02248906: - ldr r0, [sp, #0x3c] - cmp r0, #0 - beq _0224892A - ldr r0, [sp, #0x38] - cmp r0, #0 - bne _0224892A - cmp r4, #2 - bne _0224891E - ldr r0, [sp, #0x1c] - ldrb r0, [r0] - cmp r0, #0xe - bne _02248A16 -_0224891E: - cmp r4, #3 - bne _0224892A - ldr r0, [sp, #0x1c] - ldrb r0, [r0, #1] - cmp r0, #0xe - bne _02248A16 -_0224892A: - add r0, r4, #0 - bl MaskOfFlagNo - ldr r2, _02248B88 ; =0x00003108 - ldr r1, [sp, #0x1c] - ldrb r1, [r1, r2] - tst r0, r1 - beq _02248948 - mov r0, #0xd - strb r0, [r5] - ldr r1, _02248B8C ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0x28 - str r2, [r0, r1] - b _022490F0 -_02248948: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl Battler_CanSelectAction - cmp r0, #0 - bne _0224896C - ldr r0, [sp, #0x54] - mov r2, #0xd - ldr r1, [r0] - mov r0, #2 - orr r1, r0 - ldr r0, [sp, #0x54] - str r1, [r0] - ldr r1, _02248B8C ; =0x000021A8 - ldr r0, [sp, #0x58] - strb r2, [r5] - str r2, [r0, r1] - b _022490F0 -_0224896C: - add r0, r7, #0 - add r1, r4, #0 - bl BattleSystem_GetOpponentDataByBattlerId - bl ov12_02261264 - cmp r0, #1 - beq _02248988 - mov r1, #0x15 - ldr r0, [sp, #0x1c] - lsl r1, r1, #4 - ldr r0, [r0, r1] - cmp r0, #0 - beq _0224899C -_02248988: - ldr r3, _02248B90 ; =0x0000219C - ldr r1, [sp, #0x1c] - ldrb r3, [r5, r3] - add r0, r7, #0 - add r2, r4, #0 - bl ov12_02262B80 - mov r0, #1 - strb r0, [r5] - b _022490F0 -_0224899C: - mov r0, #2 - strb r0, [r5] - b _022490F0 -_022489A2: - ldr r0, [sp, #0x64] - mov r6, #0 - cmp r0, #0 - ble _022489CE -_022489AA: - cmp r6, r4 - beq _022489C6 - add r0, r7, #0 - add r1, r6, #0 - bl BattleSystem_GetOpponentDataByBattlerId - bl ov12_02261264 - cmp r0, #1 - bne _022489C6 - ldr r0, [sp, #0x1c] - ldrb r0, [r0, r6] - cmp r0, #0xe - bne _022489CE -_022489C6: - ldr r0, [sp, #0x64] - add r6, r6, #1 - cmp r6, r0 - blt _022489AA -_022489CE: - ldr r0, [sp, #0x64] - cmp r6, r0 - bne _02248A16 - ldr r3, _02248B90 ; =0x0000219C - ldr r1, [sp, #0x1c] - ldrb r3, [r5, r3] - add r0, r7, #0 - add r2, r4, #0 - bl ov12_02262B80 - mov r0, #1 - strb r0, [r5] -_022489E6: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0 - beq _02248A16 - mov r1, #0x23 - ldr r0, [sp, #0x50] - lsl r1, r1, #8 - ldrb r2, [r0, r1] - ldr r1, _02248B94 ; =0x000021B4 - ldr r0, [sp, #0x58] - str r2, [r0, r1] - ldr r0, [sp, #0x34] - cmp r0, #0 - beq _02248A3A - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #1 - beq _02248A18 - cmp r0, #4 - beq _02248A28 -_02248A16: - b _022490F0 -_02248A18: - mov r0, #0x11 - strb r0, [r5] - mov r1, #0xd - strb r1, [r5, #4] - ldr r2, _02248B8C ; =0x000021A8 - ldr r1, [sp, #0x58] - str r0, [r1, r2] - b _022490F0 -_02248A28: - mov r0, #0x11 - strb r0, [r5] - mov r0, #0xd - strb r0, [r5, #4] - ldr r1, _02248B8C ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0x10 - str r2, [r0, r1] - b _022490F0 -_02248A3A: - ldr r0, [sp, #0x30] - cmp r0, #0 - beq _02248ABC - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #5 - bhi _02248AFE - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02248A58: ; jump table - .short _022490F0 - _02248A58 - 2 ; case 0 - .short _02248A64 - _02248A58 - 2 ; case 1 - .short _02248A74 - _02248A58 - 2 ; case 2 - .short _02248A86 - _02248A58 - 2 ; case 3 - .short _02248A98 - _02248A58 - 2 ; case 4 - .short _02248AAA - _02248A58 - 2 ; case 5 -_02248A64: - mov r0, #0x11 - strb r0, [r5] - mov r1, #0xd - strb r1, [r5, #4] - ldr r2, _02248B8C ; =0x000021A8 - ldr r1, [sp, #0x58] - str r0, [r1, r2] - b _022490F0 -_02248A74: - mov r0, #0x11 - strb r0, [r5] - mov r0, #0xd - strb r0, [r5, #4] - ldr r1, _02248B8C ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0x12 - str r2, [r0, r1] - b _022490F0 -_02248A86: - mov r0, #0x11 - strb r0, [r5] - mov r0, #0xd - strb r0, [r5, #4] - ldr r1, _02248B8C ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0x13 - str r2, [r0, r1] - b _022490F0 -_02248A98: - mov r0, #0x11 - strb r0, [r5] - mov r0, #0xd - strb r0, [r5, #4] - ldr r1, _02248B8C ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0x10 - str r2, [r0, r1] - b _022490F0 -_02248AAA: - mov r0, #0x11 - strb r0, [r5] - mov r0, #0xd - strb r0, [r5] - ldr r1, _02248B8C ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0x14 - str r2, [r0, r1] - b _022490F0 -_02248ABC: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0xff - beq _02248AD2 - ldr r1, _02248B98 ; =0x0000314C - mov r0, #1 - ldrb r2, [r5, r1] - orr r0, r2 - strb r0, [r5, r1] -_02248AD2: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #4 - bgt _02248AF8 - cmp r0, #0 - blt _02248AFE - add r1, r0, r0 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_02248AEE: ; jump table - .short _022490F0 - _02248AEE - 2 ; case 0 - .short _02248B00 - _02248AEE - 2 ; case 1 - .short _02248BB6 - _02248AEE - 2 ; case 2 - .short _02248C2C - _02248AEE - 2 ; case 3 - .short _02248C3A - _02248AEE - 2 ; case 4 -_02248AF8: - cmp r0, #0xff - bne _02248AFE - b _02248C48 -_02248AFE: - b _022490F0 -_02248B00: - mov r0, #0 - mvn r0, r0 - str r0, [sp] - ldr r1, [sp, #0x1c] - add r0, r7, #0 - add r2, r4, #0 - mov r3, #0 - bl StruggleCheck - cmp r0, #0xf - bne _02248B40 - ldr r0, [sp, #0x54] - ldr r1, [r0] - mov r0, #1 - bic r1, r0 - mov r0, #1 - orr r1, r0 - ldr r0, [sp, #0x54] - str r1, [r0] - add r0, r7, #0 - bl BattleSystem_GetBattleFlags - mov r1, #0x10 - tst r0, r1 - beq _02248B38 - mov r0, #0xd - strb r0, [r5] - b _02248BAC -_02248B38: - mov r0, #0x11 - strb r0, [r5] - strb r1, [r5, #4] - b _02248BAC -_02248B40: - ldr r3, _02248B9C ; =0x00002DEC - ldr r0, [sp, #0x4c] - ldrh r0, [r0, r3] - cmp r0, #0 - beq _02248BA8 - ldr r0, [sp, #0x4c] - add r1, r3, #2 - ldrh r2, [r0, r1] - ldr r1, _02248BA0 ; =0x000030BC - ldr r0, [sp, #0x48] - strh r2, [r0, r1] - ldr r0, [sp, #0x4c] - sub r1, #8 - ldrh r2, [r0, r3] - ldr r0, [sp, #0x48] - strh r2, [r0, r1] - ldr r1, _02248BA4 ; =0x000021B0 - ldr r0, [sp, #0x58] - mov r2, #0 - str r2, [r0, r1] - add r0, r7, #0 - bl BattleSystem_GetBattleFlags - mov r1, #0x10 - tst r0, r1 - beq _02248B7A - mov r0, #0xd - strb r0, [r5] - b _02248BAC -_02248B7A: - mov r0, #0x11 - strb r0, [r5] - mov r0, #0xd - strb r0, [r5, #4] - b _02248BAC - .balign 4, 0 -_02248B84: .word 0x000021AC -_02248B88: .word 0x00003108 -_02248B8C: .word 0x000021A8 -_02248B90: .word 0x0000219C -_02248B94: .word 0x000021B4 -_02248B98: .word 0x0000314C -_02248B9C: .word 0x00002DEC -_02248BA0: .word 0x000030BC -_02248BA4: .word 0x000021B0 -_02248BA8: - mov r0, #3 - strb r0, [r5] -_02248BAC: - ldr r1, _02248EB8 ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0xd - str r2, [r0, r1] - b _022490F0 -_02248BB6: - add r0, r7, #0 - bl BattleSystem_GetBattleType - mov r1, #1 - lsl r1, r1, #0xc - tst r0, r1 - beq _02248BD6 - mov r0, #0x11 - strb r0, [r5] - mov r0, #0xd - strb r0, [r5, #4] - ldr r1, _02248EB8 ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0x15 - str r2, [r0, r1] - b _022490F0 -_02248BD6: - add r0, r7, #0 - bl BattleSystem_GetBattleType - mov r1, #0x84 - tst r0, r1 - beq _02248C1E - ldr r1, _02248EBC ; =0x00000251 - add r0, sp, #0x78 - strh r1, [r0, #6] - mov r1, #0 - strb r1, [r0, #5] - mov r0, sp - str r0, [sp, #0x68] - sub r0, #8 - str r0, [sp, #0x68] - add r2, sp, #0x7c - add r3, r0, #0 - mov r6, #4 -_02248BFA: - ldmia r2!, {r0, r1} - stmia r3!, {r0, r1} - sub r6, r6, #1 - bne _02248BFA - ldr r0, [r2] - add r1, r4, #0 - str r0, [r3] - ldr r0, [sp, #0x68] - ldmia r0!, {r2, r3} - str r0, [sp, #0x68] - add r0, r7, #0 - bl ov12_022639B8 - mov r0, #0xf - strb r0, [r5] - mov r0, #0 - strb r0, [r5, #4] - b _022490F0 -_02248C1E: - ldr r1, _02248EB8 ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0xe - str r2, [r0, r1] - mov r0, #7 - strb r0, [r5] - b _022490F0 -_02248C2C: - ldr r1, _02248EB8 ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0xf - str r2, [r0, r1] - mov r0, #9 - strb r0, [r5] - b _022490F0 -_02248C3A: - ldr r1, _02248EB8 ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0x10 - str r2, [r0, r1] - mov r0, #0xb - strb r0, [r5] - b _022490F0 -_02248C48: - ldr r0, [sp, #0x2c] - cmp r0, #0 - beq _02248C6A - add r0, r7, #0 - add r1, r4, #0 - bl ov12_02263CCC - mov r0, #0 - strb r0, [r5] - add r0, r7, #0 - add r1, r4, #0 - bl BattleSystem_GetBattlerIdPartner - ldr r1, [sp, #0x1c] - mov r2, #0 - strb r2, [r1, r0] - b _022490F0 -_02248C6A: - ldr r0, [sp, #0x3c] - cmp r0, #0 - beq _02248CB2 - cmp r4, #2 - bne _02248CB2 - add r0, r7, #0 - add r1, r4, #0 - bl ov12_02263CCC - ldr r0, [sp, #0x1c] - mov r1, #0 - strb r1, [r0] - strb r1, [r0, #2] - b _022490F0 -_02248C86: - ldr r1, [sp, #0x1c] - add r0, r7, #0 - add r2, r4, #0 - bl ov12_02262F40 - mov r0, #4 - strb r0, [r5] -_02248C94: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0xff - bne _02248CA6 - mov r0, #0 - strb r0, [r5] - b _022490F0 -_02248CA6: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0 - bne _02248CB4 -_02248CB2: - b _022490F0 -_02248CB4: - mov r1, #0x23 - ldr r0, [sp, #0x50] - lsl r1, r1, #8 - ldrb r0, [r0, r1] - sub r3, r0, #1 - cmp r3, #4 - bne _02248CD0 - ldr r1, _02248EB8 ; =0x000021A8 - ldr r0, [sp, #0x58] - mov r2, #0x10 - str r2, [r0, r1] - mov r0, #0xb - strb r0, [r5] - b _022490F0 -_02248CD0: - add r0, sp, #0x7c - str r0, [sp] - ldr r1, [sp, #0x1c] - add r0, r7, #0 - add r2, r4, #0 - bl ov12_02251A28 - cmp r0, #0 - bne _02248D38 - add r0, r7, #0 - bl BattleSystem_GetBattleFlags - mov r1, #0x10 - tst r0, r1 - beq _02248D06 - add r0, r7, #0 - mov r1, #1 - bl ov12_0223BFFC - add r0, r7, #0 - bl ov12_0223A7E4 - add r1, r0, #0 - add r0, r7, #0 - bl ov12_022581BC - b _022490F0 -_02248D06: - mov r0, sp - str r0, [sp, #0x6c] - sub r0, #8 - str r0, [sp, #0x6c] - add r2, sp, #0x7c - add r3, r0, #0 - mov r6, #4 -_02248D14: - ldmia r2!, {r0, r1} - stmia r3!, {r0, r1} - sub r6, r6, #1 - bne _02248D14 - ldr r0, [r2] - add r1, r4, #0 - str r0, [r3] - ldr r0, [sp, #0x6c] - ldmia r0!, {r2, r3} - str r0, [sp, #0x6c] - add r0, r7, #0 - bl ov12_022639B8 - mov r0, #0xf - strb r0, [r5] - mov r0, #3 - strb r0, [r5, #4] - b _022490F0 -_02248D38: - mov r3, #0x23 - ldr r0, [sp, #0x50] - lsl r3, r3, #8 - ldrb r2, [r0, r3] - ldr r1, _02248EC0 ; =0x000021B0 - ldr r0, [sp, #0x58] - str r2, [r0, r1] - ldr r0, [sp, #0x50] - ldrb r0, [r0, r3] - ldr r3, _02248EC4 ; =0x000030BC - sub r1, r0, #1 - ldr r0, [sp, #0x48] - strh r1, [r0, r3] - ldrh r0, [r0, r3] - lsl r1, r0, #1 - ldr r0, [sp, #0x4c] - add r1, r0, r1 - ldr r0, _02248EC8 ; =0x00002D4C - ldrh r2, [r1, r0] - add r1, r3, #0 - ldr r0, [sp, #0x48] - sub r1, #8 - strh r2, [r0, r1] - mov r0, #5 - strb r0, [r5] - add r0, r3, #0 - add r0, #0x90 - ldrb r1, [r5, r0] - mov r0, #2 - add r3, #0x90 - orr r0, r1 - strb r0, [r5, r3] - b _022490F0 -_02248D7A: - add r0, sp, #0x78 - str r0, [sp] - ldr r1, _02248EC4 ; =0x000030BC - ldr r0, [sp, #0x48] - lsl r2, r4, #0x18 - ldrh r0, [r0, r1] - ldr r1, [sp, #0x1c] - ldr r3, [sp, #0x28] - str r0, [sp, #4] - ldr r0, [sp, #0x44] - lsr r2, r2, #0x18 - str r0, [sp, #8] - add r0, r7, #0 - bl ov12_0224DB64 - cmp r0, #0 - beq _02248DAE - ldr r1, [sp, #0x1c] - ldr r2, [sp, #0x78] - add r0, r7, #0 - add r3, r4, #0 - bl ov12_02262FFC - mov r0, #6 - strb r0, [r5] - b _022490F0 -_02248DAE: - mov r0, #0xd - strb r0, [r5] - b _022490F0 -_02248DB4: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0xff - bne _02248DC6 - mov r0, #3 - strb r0, [r5] - b _022490F0 -_02248DC6: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0 - bne _02248DD4 - b _022490F0 -_02248DD4: - mov r1, #0x23 - ldr r0, [sp, #0x50] - lsl r1, r1, #8 - ldrb r0, [r0, r1] - ldr r1, _02248ECC ; =0x000021AC - sub r2, r0, #1 - ldr r0, [sp, #0x58] - str r2, [r0, r1] - mov r0, #0xd - strb r0, [r5] - ldr r1, _02248ED0 ; =0x0000314C - mov r0, #4 - ldrb r2, [r5, r1] - orr r0, r2 - strb r0, [r5, r1] - b _022490F0 -_02248DF4: - ldr r1, [sp, #0x1c] - add r0, r7, #0 - add r2, r4, #0 - bl ov12_02263138 - mov r0, #8 - strb r0, [r5] -_02248E02: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0xff - bne _02248E14 - mov r0, #0 - strb r0, [r5] - b _022490F0 -_02248E14: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0 - beq _02248EE0 - ldr r0, [sp, #0x40] - ldr r1, _02248EC0 ; =0x000021B0 - ldr r2, [r0] - ldr r0, [sp, #0x58] - str r2, [r0, r1] - mov r0, #0xd - strb r0, [r5] - b _022490F0 -_02248E30: - ldr r1, [sp, #0x1c] - add r0, r7, #0 - add r2, r4, #0 - mov r6, #6 - bl BattlerCanSwitch - str r0, [sp, #0x5c] - add r0, r7, #0 - add r1, r4, #0 - bl ov12_0223AB0C - cmp r0, #4 - beq _02248E56 - add r0, r7, #0 - add r1, r4, #0 - bl ov12_0223AB0C - cmp r0, #5 - bne _02248E8E -_02248E56: - ldr r0, [sp, #0x28] - cmp r0, #3 - beq _02248E74 - cmp r0, #7 - beq _02248E74 - cmp r0, #0x83 - beq _02248E74 - cmp r0, #0x13 - bne _02248E8E - add r0, r7, #0 - add r1, r4, #0 - bl ov12_0223AB0C - cmp r0, #4 - bne _02248E8E -_02248E74: - add r0, r7, #0 - add r1, r4, #0 - bl BattleSystem_GetBattlerIdPartner - lsl r1, r0, #4 - ldr r0, [sp, #0x1c] - add r2, r0, r1 - ldr r0, _02248EB8 ; =0x000021A8 - ldr r1, [r2, r0] - cmp r1, #0xf - bne _02248E8E - add r0, #8 - ldr r6, [r2, r0] -_02248E8E: - ldr r0, [sp, #0x5c] - ldr r1, [sp, #0x1c] - str r0, [sp] - add r0, r7, #0 - add r2, r4, #0 - mov r3, #0 - str r6, [sp, #4] - bl BattleController_EmitShowMonList - mov r0, #0xa - strb r0, [r5] -_02248EA4: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0xff - bne _02248ED4 - mov r0, #0 - strb r0, [r5] - b _022490F0 - nop -_02248EB8: .word 0x000021A8 -_02248EBC: .word 0x00000251 -_02248EC0: .word 0x000021B0 -_02248EC4: .word 0x000030BC -_02248EC8: .word 0x00002D4C -_02248ECC: .word 0x000021AC -_02248ED0: .word 0x0000314C -_02248ED4: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0 - bne _02248EE2 -_02248EE0: - b _022490F0 -_02248EE2: - mov r3, #0x23 - ldr r0, [sp, #0x50] - lsl r3, r3, #8 - ldrb r0, [r0, r3] - ldr r1, _0224917C ; =0x000021B0 - sub r2, r0, #1 - ldr r0, [sp, #0x58] - str r2, [r0, r1] - ldr r0, [sp, #0x50] - sub r1, #0x10 - ldrb r0, [r0, r3] - sub r0, r0, #1 - strb r0, [r5, r1] - mov r0, #0xd - strb r0, [r5] - b _022490F0 -_02248F02: - ldr r0, [sp, #0x24] - cmp r0, #0 - beq _02248F22 - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - str r0, [sp, #8] - ldr r1, [sp, #0x1c] - ldr r3, _02249180 ; =0x000003BB - add r0, r7, #0 - add r2, r4, #0 - bl BattleController_EmitDrawYesNoBox - mov r0, #0xc - strb r0, [r5] - b _022490F0 -_02248F22: - ldr r0, [sp, #0x20] - cmp r0, #0 - beq _02248F8E - ldr r0, [sp, #0x2c] - cmp r0, #0 - bne _02248F8E - add r0, r7, #0 - bl BattleSystem_GetBattleFlags - mov r1, #0x10 - tst r0, r1 - beq _02248F52 - add r0, r7, #0 - mov r1, #1 - bl ov12_0223BFFC - add r0, r7, #0 - bl ov12_0223A7E4 - add r1, r0, #0 - add r0, r7, #0 - bl ov12_022581BC - b _022490F0 -_02248F52: - mov r1, #0 - add r0, sp, #0x78 - strb r1, [r0, #5] - ldr r1, _02249184 ; =0x00000319 - add r2, sp, #0x7c - strh r1, [r0, #6] - mov r0, sp - str r0, [sp, #0x70] - sub r0, #8 - str r0, [sp, #0x70] - add r3, r0, #0 - mov r6, #4 -_02248F6A: - ldmia r2!, {r0, r1} - stmia r3!, {r0, r1} - sub r6, r6, #1 - bne _02248F6A - ldr r0, [r2] - add r1, r4, #0 - str r0, [r3] - ldr r0, [sp, #0x70] - ldmia r0!, {r2, r3} - str r0, [sp, #0x70] - add r0, r7, #0 - bl ov12_022639B8 - mov r0, #0xf - strb r0, [r5] - mov r0, #0 - strb r0, [r5, #4] - b _022490F0 -_02248F8E: - ldr r1, [sp, #0x1c] - add r0, r7, #0 - add r2, r4, #0 - add r3, sp, #0x7c - bl CantEscape - cmp r0, #0 - beq _02248FF4 - add r0, r7, #0 - bl BattleSystem_GetBattleFlags - mov r1, #0x10 - tst r0, r1 - beq _02248FC2 - add r0, r7, #0 - mov r1, #1 - bl ov12_0223BFFC - add r0, r7, #0 - bl ov12_0223A7E4 - add r1, r0, #0 - add r0, r7, #0 - bl ov12_022581BC - b _022490F0 -_02248FC2: - mov r0, sp - str r0, [sp, #0x74] - sub r0, #8 - str r0, [sp, #0x74] - add r2, sp, #0x7c - add r3, r0, #0 - mov r6, #4 -_02248FD0: - ldmia r2!, {r0, r1} - stmia r3!, {r0, r1} - sub r6, r6, #1 - bne _02248FD0 - ldr r0, [r2] - add r1, r4, #0 - str r0, [r3] - ldr r0, [sp, #0x74] - ldmia r0!, {r2, r3} - str r0, [sp, #0x74] - add r0, r7, #0 - bl ov12_022639B8 - mov r0, #0xf - strb r0, [r5] - mov r0, #0 - strb r0, [r5, #4] - b _022490F0 -_02248FF4: - mov r0, #0xc - strb r0, [r5] - b _022490F0 -_02248FFA: - ldr r0, [sp, #0x24] - cmp r0, #0 - beq _02249024 - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0 - beq _02249028 - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0xff - bne _0224901E - mov r0, #0 - strb r0, [r5] - b _02249028 -_0224901E: - mov r0, #0xd - strb r0, [r5] - b _02249028 -_02249024: - mov r0, #0xd - strb r0, [r5] -_02249028: - ldr r0, [sp, #0x3c] - cmp r0, #0 - beq _022490F0 - ldr r0, [sp, #0x38] - cmp r0, #0 - bne _022490F0 - ldrb r0, [r5] - cmp r0, #0xd - bne _022490F0 - add r0, r7, #0 - add r1, r4, #0 - bl BattleSystem_GetBattlerIdPartner - ldr r1, [sp, #0x1c] - mov r2, #0xd - strb r2, [r1, r0] - b _022490F0 -_0224904A: - add r0, r7, #0 - add r1, r4, #0 - bl ov12_02263CCC - ldr r0, [sp, #0x28] - cmp r0, #7 - bne _02249072 - add r0, r7, #0 - add r1, r4, #0 - bl BattleSystem_GetBattlerIdPartner - ldr r1, [sp, #0x1c] - ldrb r0, [r1, r0] - cmp r0, #0xe - bne _0224907A - add r0, r7, #0 - add r1, r4, #0 - bl BattleController_EmitShowWaitMessage - b _0224907A -_02249072: - add r0, r7, #0 - add r1, r4, #0 - bl BattleController_EmitShowWaitMessage -_0224907A: - mov r0, #0xe - strb r0, [r5] -_0224907E: - ldr r0, [sp, #0x60] - add r0, r0, #1 - str r0, [sp, #0x60] - b _022490F0 -_02249086: - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0225682C - cmp r0, #0 - beq _022490F0 - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl ov12_0224EDC0 - ldrb r0, [r5, #4] - strb r0, [r5] - b _022490F0 -_022490A0: - mov r1, #2 - add r0, sp, #0x78 - strb r1, [r0, #5] - mov r1, #0x26 - lsl r1, r1, #4 - strh r1, [r0, #6] - ldr r0, [sp, #0x1c] - add r1, r4, #0 - bl CreateNicknameTag - str r0, [sp, #0x80] - mov r0, sp - sub r0, #8 - mov ip, r0 - add r2, sp, #0x7c - add r3, r0, #0 - mov r6, #4 -_022490C2: - ldmia r2!, {r0, r1} - stmia r3!, {r0, r1} - sub r6, r6, #1 - bne _022490C2 - ldr r0, [r2] - add r1, r4, #0 - str r0, [r3] - mov r0, ip - ldmia r0!, {r2, r3} - add r0, r7, #0 - bl ov12_022639B8 - mov r0, #0xf - strb r0, [r5] - mov r0, #0xd - strb r0, [r5, #4] - b _022490F0 -_022490E4: - add r0, r7, #0 - add r1, r4, #0 - bl ov12_02263E18 - ldrb r0, [r5, #4] - strb r0, [r5] -_022490F0: - ldr r0, [sp, #0x58] - ldr r1, [sp, #0x50] - add r0, #0x10 - str r0, [sp, #0x58] - ldr r0, [sp, #0x54] - add r4, r4, #1 - add r0, #0x40 - str r0, [sp, #0x54] - mov r0, #1 - lsl r0, r0, #8 - add r1, r1, r0 - str r1, [sp, #0x50] - ldr r1, [sp, #0x4c] - add r1, #0xc0 - str r1, [sp, #0x4c] - ldr r1, [sp, #0x48] - add r1, r1, #2 - str r1, [sp, #0x48] - ldr r1, [sp, #0x44] - add r1, #0x10 - str r1, [sp, #0x44] - ldr r1, [sp, #0x40] - add r0, r1, r0 - str r0, [sp, #0x40] - ldr r0, [sp, #0x64] - cmp r4, r0 - bge _0224912A - bl ov12_022488C8 -_0224912A: - ldr r1, [sp, #0x60] - ldr r0, [sp, #0x64] - cmp r1, r0 - bne _02249176 - ldr r1, [sp, #0x1c] - add r0, r7, #0 - bl ov12_0224E414 - add r0, r7, #0 - mov r1, #0 - bl ov12_02237ED0 - ldr r0, [sp, #0x1c] - mov r1, #6 - str r1, [r0, #8] - ldr r0, [sp, #0x64] - mov r6, #0 - cmp r0, #0 - ble _02249176 - ldr r4, [sp, #0x1c] -_02249152: - ldr r0, _02249188 ; =0x000021A8 - ldr r0, [r4, r0] - cmp r0, #0xf - bne _0224916C - ldr r1, [sp, #0x1c] - add r0, r7, #0 - add r3, r1, #0 - add r5, r3, r6 - ldr r3, _0224918C ; =0x000021A0 - add r2, r6, #0 - ldrb r3, [r5, r3] - bl ov12_02256F78 -_0224916C: - ldr r0, [sp, #0x64] - add r6, r6, #1 - add r4, #0x10 - cmp r6, r0 - blt _02249152 -_02249176: - add sp, #0xa0 - pop {r3, r4, r5, r6, r7, pc} - nop -_0224917C: .word 0x000021B0 -_02249180: .word 0x000003BB -_02249184: .word 0x00000319 -_02249188: .word 0x000021A8 -_0224918C: .word 0x000021A0 - thumb_func_end ov12_022488C8 - thumb_func_start ov12_02249190 ov12_02249190: ; 0x02249190 push {r4, r5, r6, r7, lr} @@ -12087,7 +10896,7 @@ sPlayerBattleCommands: ; 0x0226CA90 .word BattleControllerPlayer_TrainerMessage .word BattleControllerPlayer_PokemonAppear .word BattleControllerPlayer_SelectionScreenInit - .word ov12_02248848 + .word BattleControllerPlayer_SelectionScreenInput .word ov12_02249190 .word ov12_0224930C .word ov12_02249460 diff --git a/include/battle_controller.h b/include/battle_controller.h index 3338d3052c..812a92d9c4 100644 --- a/include/battle_controller.h +++ b/include/battle_controller.h @@ -64,5 +64,14 @@ void BattleController_EmitPlaySong(BattleSystem *bsys, int battlerId, int song); void BattleSystem_ReloadMonData(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int monIndex); void ov12_022645C8(BattleSystem *bsys, BATTLECONTEXT *ctx, u8 a2); +void ov12_02262B80(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, int index); +void ov12_022639B8(BattleSystem *bsys, int battlerId, BATTLEMSG msg); +void ov12_02263CCC(BattleSystem *bsys, int battlerId); +void ov12_02262F40(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); +BOOL ov12_0224DB64(BattleSystem *bsys, BATTLECONTEXT *ctx, u8 battlerId, u32 battleType, int *out, int movePos, u32 *a6); +void ov12_02262FFC(BattleSystem *bsys, BATTLECONTEXT *ctx, int a2, int battlerId); +void ov12_02263138(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); +void ov12_02263E18(BattleSystem *bsys, int battlerId); +void ov12_0224E414(BattleSystem *bsys, BATTLECONTEXT *ctx); #endif diff --git a/include/battle_controller_opponent.h b/include/battle_controller_opponent.h index 7bde7804aa..ed4a631e72 100644 --- a/include/battle_controller_opponent.h +++ b/include/battle_controller_opponent.h @@ -4,5 +4,6 @@ #include "battle.h" u8 ov12_02261258(OpponentData *opponentData); +u32 ov12_02261264(OpponentData *opponentData); #endif diff --git a/include/battle_controller_player.h b/include/battle_controller_player.h index 95fd73d694..fa090b2c21 100644 --- a/include/battle_controller_player.h +++ b/include/battle_controller_player.h @@ -14,6 +14,7 @@ void BattleControllerPlayer_StartEncounter(BattleSystem *bsys, BATTLECONTEXT *ct void BattleControllerPlayer_TrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ctx); void BattleControllerPlayer_PokemonAppear(BattleSystem *bsys, BATTLECONTEXT *ctx); void BattleControllerPlayer_SelectionScreenInit(BattleSystem *bsys, BATTLECONTEXT *ctx); +void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTEXT *ctx); //The following functions haven't been decompiled yet void ov12_0224E384(BattleSystem *bsys, BATTLECONTEXT *ctx); diff --git a/include/battle_system.h b/include/battle_system.h index da1798f77f..e1be33aa1e 100644 --- a/include/battle_system.h +++ b/include/battle_system.h @@ -6,7 +6,7 @@ #include "pokemon.h" #include "sav_chatot.h" -u32 BattleSystem_GetBattleType(BattleSystem *bsys); +u16 BattleSystem_GetBattleType(BattleSystem *bsys); u32 BattleSystem_GetFieldSide(BattleSystem *bsys, int battlerId); int BattleSystem_GetMaxBattlers(BattleSystem *bsys); int BattleSystem_Random(BattleSystem *bsys); @@ -39,5 +39,6 @@ int ov12_0223AB60(BattleSystem *bsys); BOOL ov12_0223BFEC(BattleSystem *bsys); void ov12_0223BB64(BattleSystem *bsys, int a1); void ov12_02237ED0(BattleSystem *bsys, int a1); +BATTLECONTEXT *ov12_0223A7E4(BattleSystem *bsys); #endif diff --git a/include/constants/battle_script.h b/include/constants/battle_script.h index 68c2b6107d..6d84780599 100644 --- a/include/constants/battle_script.h +++ b/include/constants/battle_script.h @@ -7,7 +7,7 @@ #define BSCRIPT_VAR_3 3 #define BSCRIPT_VAR_4 4 #define BSCRIPT_VAR_STAT_CHANGE_TYPE 5 -#define BSCRIPT_VAR_BATTLE_STATUS 6 +#define BSCRIPT_VAR_BATTLE_STATUS 6 #define BSCRIPT_VAR_FIELD_CONDITION 7 #define BSCRIPT_VAR_8 8 #define BSCRIPT_VAR_CALC_TEMP 9 @@ -61,7 +61,7 @@ #define BSCRIPT_VAR_MOVE_TYPE 57 #define BSCRIPT_VAR_58 58 #define BSCRIPT_VAR_59 59 -#define BSCRIPT_VAR_BATTLE_STATUS_2 60 +#define BSCRIPT_VAR_BATTLE_STATUS_2 60 #define BSCRIPT_VAR_61 61 #define BSCRIPT_VAR_62 62 #define BSCRIPT_VAR_BATTLER_ATTACKER_TEMP 63 diff --git a/include/overlay_12_0224E4FC.h b/include/overlay_12_0224E4FC.h index 965bdbfc76..fa9bcbe10c 100644 --- a/include/overlay_12_0224E4FC.h +++ b/include/overlay_12_0224E4FC.h @@ -124,11 +124,10 @@ void ov12_022582B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int var, int battlerI //The following functions are static, but the rest of the file is still being worked on BOOL ov12_02251C74(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget, int index); -//The following functions haven't been decompiled as of now +//The following functions haven't been decompiled as of now, and are in fact in different files void Link_CheckTimeout(BATTLECONTEXT *ctx); BOOL CheckLegalMeFirstMove(BATTLECONTEXT *ctx, u16 move); int ov12_02253DA0(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); -u32 BattleSystem_GetBattleType(BattleSystem *bsys); u32 BattleSystem_GetBattleFlags(BattleSystem *bsys); u32 ov12_0223C24C(PARTY *party, u32 *a1); int ov12_0223AB0C(BattleSystem *bsys, int battlerId); diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 12729583fd..6b83ae60fe 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle_controller_player.h" #include "battle_controller.h" +#include "battle_controller_opponent.h" #include "battle_system.h" #include "overlay_12_0224E4FC.h" #include "heap.h" @@ -108,3 +109,371 @@ void BattleControllerPlayer_SelectionScreenInit(BattleSystem *bsys, BATTLECONTEX ctx->command = CONTROLLER_COMMAND_SELECTION_SCREEN_INPUT; } + +//static +void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTEXT *ctx) { + int battlerId; + int battlersMax; + int var; + u16 battleType; + BATTLEMSG msg; + + battlersMax = BattleSystem_GetMaxBattlers(bsys); + battleType = BattleSystem_GetBattleType(bsys); + + var = 0; + + for (battlerId = 0; battlerId < battlersMax; battlerId++) { + switch (ctx->unk_0[battlerId]) { + case 0: + if ((battleType & BATTLE_TYPE_DOUBLES) && !(battleType & BATTLE_TYPE_MULTI) && ((battlerId == BATTLER_PLAYER2) && (ctx->unk_0[0] != 14) || (battlerId == BATTLER_ENEMY2) && (ctx->unk_0[1] != 14))) { + break; + } + if (ctx->unk_3108 & MaskOfFlagNo(battlerId)) { + ctx->unk_0[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 40; + break; + } else if (Battler_CanSelectAction(ctx, battlerId) == 0) { + ctx->turnData[battlerId].unk0_1 = 1; + ctx->unk_0[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 13; + break; + } + + if ((ov12_02261264(BattleSystem_GetOpponentDataByBattlerId(bsys, battlerId)) == 1) || (ctx->totalTurns)) { + ov12_02262B80(bsys, ctx, battlerId, ctx->selectedMonIndex[battlerId]); + ctx->unk_0[battlerId] = 1; + } else { + ctx->unk_0[battlerId] = 2; + } + break; + case 2: + int battlerIdCheck; + + for (battlerIdCheck = 0; battlerIdCheck < battlersMax; battlerIdCheck++) { + if (battlerIdCheck == battlerId) { + continue; + } + + if (ov12_02261264(BattleSystem_GetOpponentDataByBattlerId(bsys, battlerIdCheck)) != 0x1) { + continue; + } + + if (ctx->unk_0[battlerIdCheck] != 14) { + break; + } + } + + if (battlerIdCheck == battlersMax) { + ov12_02262B80(bsys, ctx, battlerId, ctx->selectedMonIndex[battlerId]); + ctx->unk_0[battlerId] = 1; + } else { + break; + } + //fallthrough + case 1: + if (ov12_0225682C(ctx, battlerId)) { + ctx->unk_21A8[battlerId][3] = ctx->unk_2300[battlerId][0]; + + if (battleType & BATTLE_TYPE_9) { + switch (ov12_0225682C(ctx, battlerId)) { + case 1: + ctx->unk_0[battlerId] = 17; + ctx->unk_4[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 17; + break; + case 4: + ctx->unk_0[battlerId] = 17; + ctx->unk_4[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 16; + break; + } + } else if (battleType & BATTLE_TYPE_5) { + switch (ov12_0225682C(ctx, battlerId)) { + case 1: + ctx->unk_0[battlerId] = 17; + ctx->unk_4[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 17; + break; + case 2: + ctx->unk_0[battlerId] = 17; + ctx->unk_4[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 18; + break; + case 3: + ctx->unk_0[battlerId] = 17; + ctx->unk_4[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 19; + break; + case 4: + ctx->unk_0[battlerId] = 17; + ctx->unk_4[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 16; + break; + case 5: + ctx->unk_0[battlerId] = 17; + ctx->unk_0[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 20; + break; + } + } else { + if (ov12_0225682C(ctx, battlerId) != 0xff) { + ctx->unk_314C[battlerId] |= 0x1; + } + + switch (ov12_0225682C(ctx, battlerId)) { + case 1: //Fight + if (StruggleCheck(bsys, ctx, battlerId, 0, 0xffffffff) == 15) { + ctx->turnData[battlerId].struggleFlag = 1; + + if (BattleSystem_GetBattleFlags(bsys) & 0x10) { + ctx->unk_0[battlerId] = 13; + } else { + ctx->unk_0[battlerId] = 17; + ctx->unk_4[battlerId] = 16; + } + } else if (ctx->battleMons[battlerId].unk88.encoredMove) { + ctx->movePos[battlerId] = ctx->battleMons[battlerId].unk88.encoredMoveIndex; + ctx->unk_30B4[battlerId] = ctx->battleMons[battlerId].unk88.encoredMove; + ctx->unk_21A8[battlerId][2] = 0; + + if (BattleSystem_GetBattleFlags(bsys) & 0x10) { + ctx->unk_0[battlerId] = 13; + } else { + ctx->unk_0[battlerId] = 17; + ctx->unk_4[battlerId] = 13; + } + } else { + ctx->unk_0[battlerId] = 3; + } + + ctx->unk_21A8[battlerId][0] = 13; + break; + case 2: //Item + if (BattleSystem_GetBattleType(bsys) & (1 << 12)) { + ctx->unk_0[battlerId] = 17; + ctx->unk_4[battlerId] = 13; + ctx->unk_21A8[battlerId][0] = 21; + } else if (BattleSystem_GetBattleType(bsys) & (BATTLE_TYPE_2 | BATTLE_TYPE_TOWER)) { + msg.id = 593; + msg.tag = 0; + ov12_022639B8(bsys, battlerId, msg); + ctx->unk_0[battlerId] = 15; + ctx->unk_4[battlerId] = 0; + } else { + ctx->unk_21A8[battlerId][0] = 14; + ctx->unk_0[battlerId] = 7; + } + break; + case 3: //Pokemon + ctx->unk_21A8[battlerId][0] = 15; + ctx->unk_0[battlerId] = 9; + break; + case 4: //Run + ctx->unk_21A8[battlerId][0] = 16; + ctx->unk_0[battlerId] = 11; + break; + case 0xff: //Cancel + if (battleType & BATTLE_TYPE_2) { + ov12_02263CCC(bsys, battlerId); + ctx->unk_0[battlerId] = 0; + ctx->unk_0[BattleSystem_GetBattlerIdPartner(bsys, battlerId)] = 0; + } else if ((battleType & BATTLE_TYPE_DOUBLES) && (battlerId == BATTLER_PLAYER2)) { + ov12_02263CCC(bsys, battlerId); + ctx->unk_0[0] = 0; + ctx->unk_0[2] = 0; + } + break; + } + } + } + break; + case 3: + ov12_02262F40(bsys, ctx, battlerId); + ctx->unk_0[battlerId] = 4; + //fallthrough + case 4: + if (ov12_0225682C(ctx, battlerId) == 0xff) { + ctx->unk_0[battlerId] = 0; + } else if (ov12_0225682C(ctx, battlerId)) { + if ((ctx->unk_2300[battlerId][0] - 1) == 4) { + ctx->unk_21A8[battlerId][0] = 16; + ctx->unk_0[battlerId] = 11; + break; + } else if (ov12_02251A28(bsys, ctx, battlerId, ctx->unk_2300[battlerId][0] - 1, &msg) == 0) { + if (BattleSystem_GetBattleFlags(bsys) & BATTLE_TYPE_INGAME_PARTNER) { + ov12_0223BFFC(bsys, 1); + ov12_022581BC(bsys, ov12_0223A7E4(bsys)); + } else { + ov12_022639B8(bsys, battlerId, msg); + ctx->unk_0[battlerId] = 15; + ctx->unk_4[battlerId] = 3; + } + } else { + ctx->unk_21A8[battlerId][2] = ctx->unk_2300[battlerId][0]; + ctx->movePos[battlerId] = ctx->unk_2300[battlerId][0] - 1; + ctx->unk_30B4[battlerId] = ctx->battleMons[battlerId].moves[ctx->movePos[battlerId]]; + ctx->unk_0[battlerId] = 5; + ctx->unk_314C[battlerId] |= 0x2; + } + } + break; + case 5: + int out; + + if (ov12_0224DB64(bsys, ctx, battlerId, battleType, &out, ctx->movePos[battlerId], &ctx->unk_21A8[battlerId][1])) { + ov12_02262FFC(bsys, ctx, out, battlerId); + ctx->unk_0[battlerId] = 6; + } else { + ctx->unk_0[battlerId] = 13; + } + break; + case 6: + if (ov12_0225682C(ctx, battlerId) == 0xff) { + ctx->unk_0[battlerId] = 3; + } else if (ov12_0225682C(ctx, battlerId)) { + ctx->unk_21A8[battlerId][1] = ctx->unk_2300[battlerId][0] - 1; + ctx->unk_0[battlerId] = 13; + + ctx->unk_314C[battlerId] |= 0x4; + } + break; + case 7: + ov12_02263138(bsys, ctx, battlerId); + ctx->unk_0[battlerId] = 8; + case 8: + if (ov12_0225682C(ctx, battlerId) == 0xff) { + ctx->unk_0[battlerId] = 0; + } else if (ov12_0225682C(ctx, battlerId)) { + u32 *unkPtr; + + unkPtr = (u32 *)&ctx->unk_2300[battlerId][0]; + ctx->unk_21A8[battlerId][2] = unkPtr[0]; + ctx->unk_0[battlerId] = 13; + } + break; + case 9: //switching..? + int v8; + int v9 = 6; + int partnerId; + + v8 = BattlerCanSwitch(bsys, ctx, battlerId); + + if (((ov12_0223AB0C(bsys, battlerId) == 4) || (ov12_0223AB0C(bsys, battlerId) == 5)) && ((battleType == (0x2 | 0x1)) || (battleType == (0x4 | 0x1 | 0x2)) || (battleType == (0x2 | 0x1 | 0x80)) || ((battleType == (0x2 | 0x1 | 0x10)) && (ov12_0223AB0C(bsys, battlerId) == 4)))) { + partnerId = BattleSystem_GetBattlerIdPartner(bsys, battlerId); + + if (ctx->unk_21A8[partnerId][0] == 15) { + v9 = ctx->unk_21A8[partnerId][2]; + } + } + + BattleController_EmitShowMonList(bsys, ctx, battlerId, 0, v8, v9); + ctx->unk_0[battlerId] = 10; + //fallthrough + case 10: + if (ov12_0225682C(ctx, battlerId) == 0xff) { + ctx->unk_0[battlerId] = 0; + } else if (ov12_0225682C(ctx, battlerId)) { + ctx->unk_21A8[battlerId][2] = ctx->unk_2300[battlerId][0] - 1; + ctx->unk_21A0[battlerId] = ctx->unk_2300[battlerId][0] - 1; + ctx->unk_0[battlerId] = 13; + } + break; + case 11: //Flee after a mon fainted..? + if (battleType & BATTLE_TYPE_TOWER) { + BattleController_EmitDrawYesNoBox(bsys, ctx, battlerId, 955, 0, 0, 0); + ctx->unk_0[battlerId] = 12; + } else if ((battleType & BATTLE_TYPE_TRAINER) && !(battleType & BATTLE_TYPE_2)) { + if (BattleSystem_GetBattleFlags(bsys) & 0x10) { + ov12_0223BFFC(bsys, 1); + ov12_022581BC(bsys, ov12_0223A7E4(bsys)); + } else { + msg.tag = 0; + msg.id = 793; //TODO: replace with msg constants + ov12_022639B8(bsys, battlerId, msg); + ctx->unk_0[battlerId] = 15; + ctx->unk_4[battlerId] = 0; + } + } else if (CantEscape(bsys, ctx, battlerId, &msg)) { + if (BattleSystem_GetBattleFlags(bsys) & 0x10) { + ov12_0223BFFC(bsys, 1); + ov12_022581BC(bsys, ov12_0223A7E4(bsys)); + } else { + ov12_022639B8(bsys, battlerId, msg); + ctx->unk_0[battlerId] = 15; + ctx->unk_4[battlerId] = 0; + } + } else { + ctx->unk_0[battlerId] = 12; + } + break; + case 12: + if (battleType & BATTLE_TYPE_TOWER) { + if (ov12_0225682C(ctx, battlerId)) { + if (ov12_0225682C(ctx, battlerId) == 0xff) { + ctx->unk_0[battlerId] = 0; + } else { + ctx->unk_0[battlerId] = 13; + } + } + } else { + ctx->unk_0[battlerId] = 13; + } + + if ((battleType & BATTLE_TYPE_DOUBLES) && !(battleType & BATTLE_TYPE_MULTI) && (ctx->unk_0[battlerId] == 13)) { + ctx->unk_0[BattleSystem_GetBattlerIdPartner(bsys, battlerId)] = 13; + } + break; + case 13: //WIFI wait for partner to make a move..? + ov12_02263CCC(bsys, battlerId); + + if (battleType == (BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_2)) { + int partnerId; + + partnerId = BattleSystem_GetBattlerIdPartner(bsys, battlerId); + + if (ctx->unk_0[partnerId] == 14) { + BattleController_EmitShowWaitMessage(bsys, battlerId); + } + } else { + BattleController_EmitShowWaitMessage(bsys, battlerId); + } + + ctx->unk_0[battlerId] = 14; + case 14: + var++; //this might be counting the number of players who have selected their final action? + break; + case 15: + if (ov12_0225682C(ctx, battlerId)) { + ov12_0224EDC0(ctx, battlerId); + ctx->unk_0[battlerId] = ctx->unk_4[battlerId]; + } + break; + case 16: + msg.tag = 2; + msg.id = 608; + msg.param[0] = CreateNicknameTag(ctx, battlerId); + ov12_022639B8(bsys, battlerId, msg); + ctx->unk_0[battlerId] = 15; + ctx->unk_4[battlerId] = 13; + break; + case 17: + ov12_02263E18(bsys, battlerId); + ctx->unk_0[battlerId] = ctx->unk_4[battlerId]; + break; + } + } + + if (var == battlersMax) { + ov12_0224E414(bsys, ctx); + ov12_02237ED0(bsys, 0); + + ctx->command = CONTROLLER_COMMAND_6; + + for (battlerId = 0; battlerId < battlersMax; battlerId++) { + if (ctx->unk_21A8[battlerId][0] == 15) { + ov12_02256F78(bsys, ctx, battlerId, ctx->unk_21A0[battlerId]); + } + } + } +} From 8caa3f5fcdf553a5a4b828b01aabc60599aa5aa2 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Fri, 14 Jul 2023 22:44:14 -0400 Subject: [PATCH 12/18] Update Battle Type constants Co-Authored-By: Rachel --- asm/overlay_12_battle_controller_player.s | 214 +--------------------- include/battle_controller_player.h | 1 + include/constants/battle.h | 10 +- src/battle/battle_command.c | 18 +- src/battle/battle_controller_player.c | 97 +++++++++- src/battle/overlay_12_0224E4FC.c | 12 +- 6 files changed, 113 insertions(+), 239 deletions(-) diff --git a/asm/overlay_12_battle_controller_player.s b/asm/overlay_12_battle_controller_player.s index 87cceadbb8..d1c328e52f 100644 --- a/asm/overlay_12_battle_controller_player.s +++ b/asm/overlay_12_battle_controller_player.s @@ -11,219 +11,7 @@ .public BattleControllerPlayer_PokemonAppear .public BattleControllerPlayer_SelectionScreenInit .public BattleControllerPlayer_SelectionScreenInput - - thumb_func_start ov12_02249190 -ov12_02249190: ; 0x02249190 - push {r4, r5, r6, r7, lr} - sub sp, #0x1c - str r0, [sp, #4] - add r5, r1, #0 - bl BattleSystem_GetMaxBattlers - str r0, [sp, #0x14] - ldr r0, [sp, #4] - bl BattleSystem_GetBattleType - mov r2, #0x22 - lsl r2, r2, #4 - mov r1, #0 - tst r2, r0 - beq _022491C6 - ldr r0, [sp, #0x14] - add r4, r1, #0 - cmp r0, #0 - ble _022491C4 - ldr r1, _02249300 ; =0x000021E8 -_022491B8: - add r0, r5, r4 - strb r4, [r0, r1] - ldr r0, [sp, #0x14] - add r4, r4, #1 - cmp r4, r0 - blt _022491B8 -_022491C4: - b _022492F8 -_022491C6: - mov r2, #4 - tst r0, r2 - beq _022491EE - ldr r0, [sp, #0x14] - add r4, r1, #0 - cmp r0, #0 - ble _02249206 - ldr r2, _02249304 ; =0x000021B4 - add r3, r5, #0 -_022491D8: - ldr r0, [r3, r2] - cmp r0, #4 - bne _022491E2 - mov r1, #5 - b _02249206 -_022491E2: - ldr r0, [sp, #0x14] - add r4, r4, #1 - add r3, #0x10 - cmp r4, r0 - blt _022491D8 - b _02249206 -_022491EE: - ldr r0, _02249304 ; =0x000021B4 - ldr r0, [r5, r0] - cmp r0, #4 - bne _022491FA - add r4, r1, #0 - mov r1, #5 -_022491FA: - ldr r0, _02249308 ; =0x000021D4 - ldr r0, [r5, r0] - cmp r0, #4 - bne _02249206 - mov r4, #2 - mov r1, #5 -_02249206: - cmp r1, #5 - bne _0224922E - ldr r0, _02249300 ; =0x000021E8 - ldr r2, [sp, #0x14] - strb r4, [r5, r0] - mov r1, #1 - mov r0, #0 - cmp r2, #0 - ble _022492F8 - ldr r3, _02249300 ; =0x000021E8 -_0224921A: - cmp r0, r4 - beq _02249224 - add r2, r5, r1 - strb r0, [r2, r3] - add r1, r1, #1 -_02249224: - ldr r2, [sp, #0x14] - add r0, r0, #1 - cmp r0, r2 - blt _0224921A - b _022492F8 -_0224922E: - ldr r0, [sp, #0x14] - mov r2, #0 - cmp r0, #0 - ble _02249256 - ldr r4, _02249300 ; =0x000021E8 - add r0, r5, #0 - add r6, r4, #0 - sub r6, #0x34 -_0224923E: - ldr r3, [r0, r6] - sub r3, r3, #2 - cmp r3, #1 - bhi _0224924C - add r3, r5, r1 - strb r2, [r3, r4] - add r1, r1, #1 -_0224924C: - ldr r3, [sp, #0x14] - add r2, r2, #1 - add r0, #0x10 - cmp r2, r3 - blt _0224923E -_02249256: - ldr r0, [sp, #0x14] - mov r2, #0 - cmp r0, #0 - ble _02249280 - ldr r4, _02249300 ; =0x000021E8 - add r0, r5, #0 - add r6, r4, #0 - sub r6, #0x34 -_02249266: - ldr r3, [r0, r6] - cmp r3, #2 - beq _02249276 - cmp r3, #3 - beq _02249276 - add r3, r5, r1 - strb r2, [r3, r4] - add r1, r1, #1 -_02249276: - ldr r3, [sp, #0x14] - add r2, r2, #1 - add r0, #0x10 - cmp r2, r3 - blt _02249266 -_02249280: - mov r0, #0 - str r0, [sp, #8] - ldr r0, [sp, #0x14] - sub r0, r0, #1 - str r0, [sp, #0x18] - cmp r0, #0 - ble _022492F8 -_0224928E: - ldr r0, [sp, #8] - add r7, r0, #1 - ldr r0, [sp, #0x14] - cmp r7, r0 - bge _022492EC - ldr r0, [sp, #8] - add r0, r5, r0 - str r0, [sp, #0x10] -_0224929E: - ldr r1, [sp, #0x10] - ldr r0, _02249300 ; =0x000021E8 - ldrb r6, [r1, r0] - add r1, r5, r7 - ldrb r4, [r1, r0] - lsl r0, r6, #4 - str r1, [sp, #0xc] - add r1, r5, r0 - ldr r0, _02249304 ; =0x000021B4 - ldr r0, [r1, r0] - lsl r1, r4, #4 - add r2, r5, r1 - ldr r1, _02249304 ; =0x000021B4 - ldr r1, [r2, r1] - cmp r0, r1 - bne _022492E4 - cmp r0, #1 - beq _022492C6 - mov r0, #1 - b _022492C8 -_022492C6: - mov r0, #0 -_022492C8: - str r0, [sp] - ldr r0, [sp, #4] - add r1, r5, #0 - add r2, r6, #0 - add r3, r4, #0 - bl CheckSortSpeed - cmp r0, #0 - beq _022492E4 - ldr r1, [sp, #0x10] - ldr r0, _02249300 ; =0x000021E8 - strb r4, [r1, r0] - ldr r1, [sp, #0xc] - strb r6, [r1, r0] -_022492E4: - ldr r0, [sp, #0x14] - add r7, r7, #1 - cmp r7, r0 - blt _0224929E -_022492EC: - ldr r0, [sp, #8] - add r1, r0, #1 - ldr r0, [sp, #0x18] - str r1, [sp, #8] - cmp r1, r0 - blt _0224928E -_022492F8: - mov r0, #7 - str r0, [r5, #8] - add sp, #0x1c - pop {r4, r5, r6, r7, pc} - .balign 4, 0 -_02249300: .word 0x000021E8 -_02249304: .word 0x000021B4 -_02249308: .word 0x000021D4 - thumb_func_end ov12_02249190 + .public ov12_02249190 thumb_func_start ov12_0224930C ov12_0224930C: ; 0x0224930C diff --git a/include/battle_controller_player.h b/include/battle_controller_player.h index fa090b2c21..0a27c316d7 100644 --- a/include/battle_controller_player.h +++ b/include/battle_controller_player.h @@ -15,6 +15,7 @@ void BattleControllerPlayer_TrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ct void BattleControllerPlayer_PokemonAppear(BattleSystem *bsys, BATTLECONTEXT *ctx); void BattleControllerPlayer_SelectionScreenInit(BattleSystem *bsys, BATTLECONTEXT *ctx); void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTEXT *ctx); +void ov12_02249190(BattleSystem *bsys, BATTLECONTEXT *ctx); //The following functions haven't been decompiled yet void ov12_0224E384(BattleSystem *bsys, BATTLECONTEXT *ctx); diff --git a/include/constants/battle.h b/include/constants/battle.h index c8ad665e2f..30baa6b94a 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -48,19 +48,19 @@ enum Terrain { }; //Battle Type -#define BATTLE_TYPE_TRAINER (1 << 0) +#define BATTLE_TYPE_SINGLES (1 << 0) #define BATTLE_TYPE_DOUBLES (1 << 1) -#define BATTLE_TYPE_2 (1 << 2) +#define BATTLE_TYPE_LINK (1 << 2) #define BATTLE_TYPE_MULTI (1 << 3) #define BATTLE_TYPE_INGAME_PARTNER (1 << 4) -#define BATTLE_TYPE_5 (1 << 5) +#define BATTLE_TYPE_SAFARI (1 << 5) #define BATTLE_TYPE_6 (1 << 6) #define BATTLE_TYPE_TOWER (1 << 7) #define BATTLE_TYPE_8 (1 << 8) -#define BATTLE_TYPE_9 (1 << 9) +#define BATTLE_TYPE_PAL_PARK (1 << 9) #define BATTLE_TYPE_TUTORIAL (1 << 10) -#define BATTLE_TYPE_CAN_ALWAYS_FLEE (BATTLE_TYPE_2 | BATTLE_TYPE_5 | BATTLE_TYPE_TOWER | BATTLE_TYPE_9) +#define BATTLE_TYPE_NO_EXP (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_TOWER | BATTLE_TYPE_PAL_PARK) //Battle Flags #define BATTLE_FLAG_7 (1 << 7) diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index ef321afdf7..8a36f8d2b5 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -34,7 +34,7 @@ BOOL RunBattleScript(BattleSystem *bsys, BATTLECONTEXT *ctx) { do { ret = sBattleScriptCommandTable[ctx->battleScriptBuffer[ctx->scriptSeqNo]](bsys, ctx); - } while(ctx->battleContinueFlag == 0 && (BattleSystem_GetBattleType(bsys) & BATTLE_TYPE_2) == 0); + } while(ctx->battleContinueFlag == 0 && (BattleSystem_GetBattleType(bsys) & BATTLE_TYPE_LINK) == 0); ctx->battleContinueFlag = 0; @@ -970,14 +970,14 @@ BOOL BtlCmd_Wait(BattleSystem *bsys, BATTLECONTEXT *ctx) { int waitFrames = BattleScriptReadWord(ctx); int waitIncrement; - if (!(BattleSystem_GetBattleType(bsys) & BATTLE_TYPE_2)) { + if (!(BattleSystem_GetBattleType(bsys) & BATTLE_TYPE_LINK)) { if (gSystem.newKeys & 0xC03 || System_GetTouchNew()) { //TODO: Rename variable in struct ctx->unk_F0 = waitFrames; } } - if (bsys->battleTypeFlags & BATTLE_TYPE_2 && !(bsys->unk240C & 16)) { + if (bsys->battleTypeFlags & BATTLE_TYPE_LINK && !(bsys->unk240C & 16)) { waitIncrement = 2; } else { waitIncrement = 1; @@ -1188,7 +1188,7 @@ BOOL BtlCmd_ShouldGetExp(BattleSystem *bsys, BATTLECONTEXT *ctx) { adrs = BattleScriptReadWord(ctx); - if ((opponentData->unk195 & 1) && !(battleType & (BATTLE_TYPE_2 | BATTLE_TYPE_5 | BATTLE_TYPE_TOWER | BATTLE_TYPE_9))) { + if ((opponentData->unk195 & 1) && !(battleType & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_TOWER | BATTLE_TYPE_PAL_PARK))) { int expMonsCnt = 0; int expShareMonsCnt = 0; u16 totalExp; @@ -1282,7 +1282,7 @@ BOOL BtlCmd_ShowParty(BattleSystem *bsys, BATTLECONTEXT *ctx) { } for (battlerId = 0; battlerId < maxBattlers; battlerId++) { - if (BattleSystem_GetBattleType(bsys) == (BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_2)) { + if (BattleSystem_GetBattleType(bsys) == (BATTLE_TYPE_SINGLES | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_LINK)) { unkA = BattleSystem_GetBattlerIdPartner(bsys, battlerId); if (!(unkB & MaskOfFlagNo(battlerId)) && !(unkB & MaskOfFlagNo(unkA))) { unkB |= MaskOfFlagNo(battlerId); @@ -2145,7 +2145,7 @@ u32 CalcPrizeMoney(BattleSystem *bsys, BATTLECONTEXT *ctx, int trainerIndex) { if (i >= (int)NELEMS(sPrizeMoneyTbl)) { i = 2; } - if (bsys->battleTypeFlags & BATTLE_TYPE_INGAME_PARTNER || bsys->battleTypeFlags == (BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_MULTI | BATTLE_TYPE_6)) { + if (bsys->battleTypeFlags & BATTLE_TYPE_INGAME_PARTNER || bsys->battleTypeFlags == (BATTLE_TYPE_SINGLES | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_MULTI | BATTLE_TYPE_6)) { prizeMoney = level*4*ctx->prizeMoneyValue*sPrizeMoneyTbl[i][1]; break; } else if (bsys->battleTypeFlags & BATTLE_TYPE_DOUBLES) { @@ -3040,7 +3040,7 @@ BOOL BtlCmd_TryThief(BattleSystem *bsys, BATTLECONTEXT *ctx) { u32 battleType = BattleSystem_GetBattleType(bsys); int fieldSide = BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker); - if (BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker) && !(battleType & (BATTLE_TYPE_2 | BATTLE_TYPE_TOWER))) { + if (BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker) && !(battleType & (BATTLE_TYPE_LINK | BATTLE_TYPE_TOWER))) { BattleScriptIncrementPointer(ctx, adrs1); } else if (ctx->fieldSideConditionData[fieldSide].battlerBitKnockedOffItem & MaskOfFlagNo(ctx->selectedMonIndex[ctx->battlerIdAttacker])) { BattleScriptIncrementPointer(ctx, adrs1); @@ -3130,7 +3130,7 @@ BOOL BtlCmd_TryWhirlwind(BattleSystem *bsys, BATTLECONTEXT *ctx) { u32 battleType = BattleSystem_GetBattleType(bsys); - if (battleType & BATTLE_TYPE_TRAINER) { + if (battleType & BATTLE_TYPE_SINGLES) { PARTY *party; Pokemon *mon; int partySize; @@ -3844,7 +3844,7 @@ BOOL BtlCmd_TryTrick(BattleSystem *bsys, BATTLECONTEXT *ctx) { int sideAttacker = BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker); int sideTarget = BattleSystem_GetFieldSide(bsys, ctx->battlerIdTarget); - if (BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker) && (battleType & (BATTLE_TYPE_2 | BATTLE_TYPE_TOWER)) == 0) { + if (BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker) && (battleType & (BATTLE_TYPE_LINK | BATTLE_TYPE_TOWER)) == 0) { BattleScriptIncrementPointer(ctx, adrsA); } else if ((ctx->fieldSideConditionData[sideAttacker].battlerBitKnockedOffItem & MaskOfFlagNo(ctx->selectedMonIndex[ctx->battlerIdAttacker])) || (ctx->fieldSideConditionData[sideTarget].battlerBitKnockedOffItem & MaskOfFlagNo(ctx->selectedMonIndex[ctx->battlerIdTarget]))) { diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 6b83ae60fe..f76e40b073 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -175,7 +175,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE if (ov12_0225682C(ctx, battlerId)) { ctx->unk_21A8[battlerId][3] = ctx->unk_2300[battlerId][0]; - if (battleType & BATTLE_TYPE_9) { + if (battleType & BATTLE_TYPE_PAL_PARK) { switch (ov12_0225682C(ctx, battlerId)) { case 1: ctx->unk_0[battlerId] = 17; @@ -188,7 +188,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ctx->unk_21A8[battlerId][0] = 16; break; } - } else if (battleType & BATTLE_TYPE_5) { + } else if (battleType & BATTLE_TYPE_SAFARI) { switch (ov12_0225682C(ctx, battlerId)) { case 1: ctx->unk_0[battlerId] = 17; @@ -254,7 +254,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ctx->unk_0[battlerId] = 17; ctx->unk_4[battlerId] = 13; ctx->unk_21A8[battlerId][0] = 21; - } else if (BattleSystem_GetBattleType(bsys) & (BATTLE_TYPE_2 | BATTLE_TYPE_TOWER)) { + } else if (BattleSystem_GetBattleType(bsys) & (BATTLE_TYPE_LINK | BATTLE_TYPE_TOWER)) { msg.id = 593; msg.tag = 0; ov12_022639B8(bsys, battlerId, msg); @@ -274,7 +274,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ctx->unk_0[battlerId] = 11; break; case 0xff: //Cancel - if (battleType & BATTLE_TYPE_2) { + if (battleType & BATTLE_TYPE_LINK) { ov12_02263CCC(bsys, battlerId); ctx->unk_0[battlerId] = 0; ctx->unk_0[BattleSystem_GetBattlerIdPartner(bsys, battlerId)] = 0; @@ -383,7 +383,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE if (battleType & BATTLE_TYPE_TOWER) { BattleController_EmitDrawYesNoBox(bsys, ctx, battlerId, 955, 0, 0, 0); ctx->unk_0[battlerId] = 12; - } else if ((battleType & BATTLE_TYPE_TRAINER) && !(battleType & BATTLE_TYPE_2)) { + } else if ((battleType & BATTLE_TYPE_SINGLES) && !(battleType & BATTLE_TYPE_LINK)) { if (BattleSystem_GetBattleFlags(bsys) & 0x10) { ov12_0223BFFC(bsys, 1); ov12_022581BC(bsys, ov12_0223A7E4(bsys)); @@ -427,7 +427,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE case 13: //WIFI wait for partner to make a move..? ov12_02263CCC(bsys, battlerId); - if (battleType == (BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_2)) { + if (battleType == (BATTLE_TYPE_SINGLES | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_LINK)) { int partnerId; partnerId = BattleSystem_GetBattlerIdPartner(bsys, battlerId); @@ -477,3 +477,88 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE } } } + +//static +void ov12_02249190(BattleSystem *bsys, BATTLECONTEXT *ctx) { + int battlerId; + int maxBattlers; + u32 battleType; + int i, j; + int turn; + u32 flag; + + maxBattlers = BattleSystem_GetMaxBattlers(bsys); + battleType = BattleSystem_GetBattleType(bsys); + + turn = 0; + + if (battleType & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_PAL_PARK)) { + for (battlerId = 0; battlerId < maxBattlers; battlerId++) { + ctx->unk_21E8[battlerId] = battlerId; + } + } else { + if (battleType & BATTLE_TYPE_LINK) { + for (battlerId = 0; battlerId < maxBattlers; battlerId++) { + if (ctx->unk_21A8[battlerId][3] == 4) { + turn = 5; + break; + } + } + } else { + if (ctx->unk_21A8[BATTLER_PLAYER][3] == 4) { + battlerId = BATTLER_PLAYER; + turn = 5; + } + if (ctx->unk_21A8[BATTLER_PLAYER2][3] == 4) { + battlerId = BATTLER_PLAYER2; + turn = 5; + } + } + if (turn == 5) { + ctx->unk_21E8[0] = battlerId; + turn = 1; + for (i = 0; i < maxBattlers; i++) { + if (i != battlerId) { + ctx->unk_21E8[turn] = i; + turn++; + } + } + } else { + for (battlerId = 0; battlerId < maxBattlers; battlerId++) { + if (ctx->unk_21A8[battlerId][3] == 2 || ctx->unk_21A8[battlerId][3] == 3) { + ctx->unk_21E8[turn] = battlerId; + turn++; + } + } + + for (battlerId = 0; battlerId < maxBattlers; battlerId++) { + if (ctx->unk_21A8[battlerId][3] != 2 && ctx->unk_21A8[battlerId][3] != 3) { + ctx->unk_21E8[turn] = battlerId; + turn++; + } + } + + for (i = 0; i < maxBattlers - 1; i++) { + for (j = i + 1; j < maxBattlers; j++) { + int battlerId1 = ctx->unk_21E8[i]; + int battlerId2 = ctx->unk_21E8[j]; + + if (ctx->unk_21A8[battlerId1][3] == ctx->unk_21A8[battlerId2][3]) { + if (ctx->unk_21A8[battlerId1][3] == 1) { + flag = 0; + } else { + flag = 1; + } + if (CheckSortSpeed(bsys, ctx, battlerId1, battlerId2, flag)) { + ctx->unk_21E8[i] = battlerId2; + ctx->unk_21E8[j] = battlerId1; + } + } + } + } + + } + } + + ctx->command = CONTROLLER_COMMAND_7; +} diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 7fcfdf24bc..5966aec02a 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -87,7 +87,7 @@ void BattleSystem_GetBattleMon(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl ctx->battleMons[battlerId].gender = GetMonGender(mon); ctx->battleMons[battlerId].shiny = MonIsShiny(mon); - if (BattleSystem_GetBattleType(bsys) & (BATTLE_TYPE_5|BATTLE_TYPE_9)) { //No abilities battle + if (BattleSystem_GetBattleType(bsys) & (BATTLE_TYPE_SAFARI|BATTLE_TYPE_PAL_PARK)) { //No abilities battle ctx->battleMons[battlerId].ability = 0; ctx->battleMons[battlerId].status = 0; ctx->battleMons[battlerId].item = 0; @@ -97,7 +97,7 @@ void BattleSystem_GetBattleMon(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl ctx->battleMons[battlerId].item = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); } - if ((BattleSystem_GetBattleType(bsys) & (BATTLE_TYPE_5|BATTLE_TYPE_9)) && !BattleSystem_GetFieldSide(bsys, battlerId)) { + if ((BattleSystem_GetBattleType(bsys) & (BATTLE_TYPE_SAFARI|BATTLE_TYPE_PAL_PARK)) && !BattleSystem_GetFieldSide(bsys, battlerId)) { ctx->battleMons[battlerId].form= 0; } else { ctx->battleMons[battlerId].form = GetMonData(mon, MON_DATA_FORM, NULL); @@ -1630,7 +1630,7 @@ BOOL CheckTrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ctx) { return FALSE; } - if (!(state & BATTLE_TYPE_TRAINER)) { + if (!(state & BATTLE_TYPE_SINGLES)) { return FALSE; } @@ -3145,7 +3145,7 @@ BOOL CantEscape(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, BATTLEMSG battleType = BattleSystem_GetBattleType(bsys); item = GetBattlerHeldItemEffect(ctx, battlerId); - if (item == HOLD_EFFECT_FLEE || (battleType & BATTLE_TYPE_CAN_ALWAYS_FLEE) || GetBattlerAbility(ctx, battlerId) == ABILITY_RUN_AWAY) { + if (item == HOLD_EFFECT_FLEE || (battleType & BATTLE_TYPE_NO_EXP) || GetBattlerAbility(ctx, battlerId) == ABILITY_RUN_AWAY) { return FALSE; } @@ -3227,7 +3227,7 @@ BOOL BattleTryRun(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { if (item == HOLD_EFFECT_FLEE) { ctx->turnData[battlerId].runFlag = 1; ret = TRUE; - } else if (battleType & BATTLE_TYPE_CAN_ALWAYS_FLEE) { + } else if (battleType & BATTLE_TYPE_NO_EXP) { ret = TRUE; } else if (GetBattlerAbility(ctx, battlerId) == ABILITY_RUN_AWAY) { ctx->turnData[battlerId].runFlag = 2; @@ -5796,7 +5796,7 @@ void ov12_022567D4(BattleSystem *bsys, BATTLECONTEXT *ctx, Pokemon *mon) { int terrain = BattleSystem_GetTerrainId(bsys); int ballId; - if (BattleSystem_GetBattleType(bsys) & BATTLE_TYPE_9) { + if (BattleSystem_GetBattleType(bsys) & BATTLE_TYPE_PAL_PARK) { ballId = BallToItemId(BattleSystem_GetMonBall(bsys, mon)); } else { ballId = ctx->itemTemp; From b67b8139c841b8ebec56163a81487c8c39ddc057 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Sat, 15 Jul 2023 03:00:42 -0400 Subject: [PATCH 13/18] Document CONTROLLER_COMMAND_RUN_SCRIPT --- asm/overlay_12_battle_controller_player.s | 183 +--------------------- include/battle_controller_player.h | 1 + include/battle_system.h | 1 + include/constants/battle.h | 3 +- src/battle/battle_controller_player.c | 61 +++++++- src/battle/overlay_12_0224E4FC.c | 20 +-- 6 files changed, 74 insertions(+), 195 deletions(-) diff --git a/asm/overlay_12_battle_controller_player.s b/asm/overlay_12_battle_controller_player.s index d1c328e52f..b7b3f7f6e2 100644 --- a/asm/overlay_12_battle_controller_player.s +++ b/asm/overlay_12_battle_controller_player.s @@ -12,187 +12,8 @@ .public BattleControllerPlayer_SelectionScreenInit .public BattleControllerPlayer_SelectionScreenInput .public ov12_02249190 - - thumb_func_start ov12_0224930C -ov12_0224930C: ; 0x0224930C - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r4, r1, #0 - mov r1, #0 - str r0, [sp] - str r1, [sp, #4] - bl BattleSystem_GetMaxBattlers - add r7, r0, #0 -_0224931E: - ldr r0, [r4, #0x28] - cmp r0, #3 - bls _02249326 - b _02249438 -_02249326: - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_02249332: ; jump table - .short _0224933A - _02249332 - 2 ; case 0 - .short _022493D4 - _02249332 - 2 ; case 1 - .short _02249412 - _02249332 - 2 ; case 2 - .short _02249430 - _02249332 - 2 ; case 3 -_0224933A: - ldr r0, [r4, #0x2c] - cmp r0, r7 - bge _022493C8 - add r6, r4, #0 - add r6, #0x2c -_02249344: - add r1, r4, r0 - ldr r0, _0224944C ; =0x000021E8 - ldrb r5, [r1, r0] - add r0, r5, #0 - bl MaskOfFlagNo - ldr r1, _02249450 ; =0x00003108 - ldrb r1, [r4, r1] - tst r0, r1 - ldr r0, [r6] - beq _02249360 - add r0, r0, #1 - str r0, [r6] - b _022493C2 -_02249360: - add r0, r0, #1 - str r0, [r6] - mov r0, #0xc0 - mul r0, r5 - add r1, r4, r0 - ldr r0, _02249454 ; =0x00002DAC - ldr r1, [r1, r0] - mov r0, #7 - tst r0, r1 - bne _022493C2 - add r0, r4, #0 - add r1, r5, #0 - bl GetBattlerSelectedMove - mov r1, #0x42 - lsl r1, r1, #2 - cmp r0, r1 - bne _022493C2 - add r0, r4, #0 - add r1, r5, #0 - bl CheckTruant - cmp r0, #0 - bne _022493C2 - lsl r0, r5, #6 - add r1, r4, r0 - mov r0, #0x75 - lsl r0, r0, #2 - ldr r0, [r1, r0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - bne _022493C2 - ldr r0, [sp] - bl ov12_022642F0 - mov r0, #0x46 - lsl r0, r0, #2 - str r5, [r4, r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0xe8 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - add sp, #8 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - pop {r3, r4, r5, r6, r7, pc} -_022493C2: - ldr r0, [r4, #0x2c] - cmp r0, r7 - blt _02249344 -_022493C8: - mov r0, #0 - str r0, [r4, #0x2c] - ldr r0, [r4, #0x28] - add r0, r0, #1 - str r0, [r4, #0x28] - b _02249438 -_022493D4: - mov r6, #0 - cmp r7, #0 - ble _0224940A - add r5, r4, #0 -_022493DC: - ldr r0, _02249458 ; =0x00002DB0 - ldr r1, [r5, r0] - mov r0, #2 - lsl r0, r0, #0x16 - tst r0, r1 - beq _02249402 - add r0, r4, #0 - add r1, r6, #0 - bl GetBattlerSelectedMove - cmp r0, #0x63 - beq _02249402 - ldr r0, _02249458 ; =0x00002DB0 - ldr r1, [r5, r0] - mov r0, #2 - lsl r0, r0, #0x16 - and r1, r0 - ldr r0, _02249458 ; =0x00002DB0 - str r1, [r5, r0] -_02249402: - add r6, r6, #1 - add r5, #0xc0 - cmp r6, r7 - blt _022493DC -_0224940A: - ldr r0, [r4, #0x28] - add r0, r0, #1 - str r0, [r4, #0x28] - b _02249438 -_02249412: - mov r6, #0 - add r5, r4, #0 -_02249416: - ldr r0, [sp] - bl BattleSystem_Random - ldr r1, _0224945C ; =0x0000310C - add r6, r6, #1 - strh r0, [r5, r1] - add r5, r5, #2 - cmp r6, #4 - blt _02249416 - ldr r0, [r4, #0x28] - add r0, r0, #1 - str r0, [r4, #0x28] - b _02249438 -_02249430: - mov r0, #0 - str r0, [r4, #0x28] - mov r0, #2 - str r0, [sp, #4] -_02249438: - ldr r0, [sp, #4] - cmp r0, #0 - bne _02249440 - b _0224931E -_02249440: - cmp r0, #2 - bne _02249448 - mov r0, #8 - str r0, [r4, #8] -_02249448: - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_0224944C: .word 0x000021E8 -_02249450: .word 0x00003108 -_02249454: .word 0x00002DAC -_02249458: .word 0x00002DB0 -_0224945C: .word 0x0000310C - thumb_func_end ov12_0224930C - + .public ov12_0224930C + thumb_func_start ov12_02249460 ov12_02249460: ; 0x02249460 push {r3, r4, r5, r6, r7, lr} diff --git a/include/battle_controller_player.h b/include/battle_controller_player.h index 0a27c316d7..78b13bc20c 100644 --- a/include/battle_controller_player.h +++ b/include/battle_controller_player.h @@ -16,6 +16,7 @@ void BattleControllerPlayer_PokemonAppear(BattleSystem *bsys, BATTLECONTEXT *ctx void BattleControllerPlayer_SelectionScreenInit(BattleSystem *bsys, BATTLECONTEXT *ctx); void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTEXT *ctx); void ov12_02249190(BattleSystem *bsys, BATTLECONTEXT *ctx); +void ov12_0224930C(BattleSystem *bsys, BATTLECONTEXT *ctx); //The following functions haven't been decompiled yet void ov12_0224E384(BattleSystem *bsys, BATTLECONTEXT *ctx); diff --git a/include/battle_system.h b/include/battle_system.h index e1be33aa1e..081afa4596 100644 --- a/include/battle_system.h +++ b/include/battle_system.h @@ -40,5 +40,6 @@ BOOL ov12_0223BFEC(BattleSystem *bsys); void ov12_0223BB64(BattleSystem *bsys, int a1); void ov12_02237ED0(BattleSystem *bsys, int a1); BATTLECONTEXT *ov12_0223A7E4(BattleSystem *bsys); +void ov12_022642F0(BattleSystem *bsys); #endif diff --git a/include/constants/battle.h b/include/constants/battle.h index 30baa6b94a..da05dc44d6 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -200,6 +200,7 @@ enum Terrain { #define STATUS2_FOCUS_ENERGY (1 << 20) #define STATUS2_TRANSFORMED (1 << 21) #define STATUS2_RECHARGE (1 << 22) +#define STATUS2_23 (1 << 23) #define STATUS2_SUBSTITUTE (1 << 24) #define STATUS2_MEAN_LOOK (1 << 26) #define STATUS2_27 (1 << 27) @@ -405,7 +406,7 @@ typedef enum ControllerCommand { CONTROLLER_COMMAND_19, CONTROLLER_COMMAND_20, CONTROLLER_COMMAND_21, - CONTROLLER_COMMAND_22, + CONTROLLER_COMMAND_RUN_SCRIPT, CONTROLLER_COMMAND_23, CONTROLLER_COMMAND_24, CONTROLLER_COMMAND_25, diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index f76e40b073..6cba191c94 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -61,7 +61,7 @@ void BattleControllerPlayer_GetBattleMon(BattleSystem *bsys, BATTLECONTEXT *ctx) //static void BattleControllerPlayer_StartEncounter(BattleSystem *bsys, BATTLECONTEXT *ctx) { ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 0); - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; ctx->commandNext = CONTROLLER_COMMAND_TRAINER_MESSAGE; } @@ -69,7 +69,7 @@ void BattleControllerPlayer_StartEncounter(BattleSystem *bsys, BATTLECONTEXT *ct void BattleControllerPlayer_TrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (CheckTrainerMessage(bsys, ctx)) { ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 41); - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; ctx->commandNext = CONTROLLER_COMMAND_SEND_OUT; } else { ctx->command = CONTROLLER_COMMAND_SEND_OUT; @@ -85,7 +85,7 @@ void BattleControllerPlayer_PokemonAppear(BattleSystem *bsys, BATTLECONTEXT *ctx if (script) { ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); ctx->commandNext = ctx->command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; } else { SortMonsBySpeed(bsys, ctx); ov12_0223C0C4(bsys); @@ -562,3 +562,58 @@ void ov12_02249190(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->command = CONTROLLER_COMMAND_7; } + +//static +void ov12_0224930C(BattleSystem *bsys, BATTLECONTEXT *ctx) { + int flag = 0; + int battlerId; + int maxBattlers = BattleSystem_GetMaxBattlers(bsys); + + do { + switch (ctx->unk_28) { + case 0: //Focus Punch + while (ctx->unk_2C < maxBattlers) { + battlerId = ctx->unk_21E8[ctx->unk_2C]; + if (ctx->unk_3108 & MaskOfFlagNo(battlerId)) { + ctx->unk_2C++; + continue; + } + ctx->unk_2C++; + if (!(ctx->battleMons[battlerId].status & STATUS_SLEEP) && + (GetBattlerSelectedMove(ctx, battlerId) == MOVE_FOCUS_PUNCH) && + !CheckTruant(ctx, battlerId) && !ctx->turnData[battlerId].struggleFlag) { + ov12_022642F0(bsys); + ctx->battlerIdTemp = battlerId; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 232); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + return; + } + } + ctx->unk_2C = 0; + ctx->unk_28++; + break; + case 1: //??? + for (battlerId = 0; battlerId < maxBattlers; battlerId++) { + if ((ctx->battleMons[battlerId].status2 & STATUS2_23) && GetBattlerSelectedMove(ctx, battlerId) != MOVE_RAGE) { + ctx->battleMons[battlerId].status2 &= STATUS2_23; + } + } + ctx->unk_28++; + break; + case 2: //??? + for (battlerId = 0; battlerId < 4; battlerId++) { + ctx->unk_310C[battlerId] = BattleSystem_Random(bsys); + } + ctx->unk_28++; + break; + case 3: //end + ctx->unk_28 = 0; + flag = 2; + break; + } + } while (flag == 0); + if (flag == 2) { + ctx->command = CONTROLLER_COMMAND_8; + } +} diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 5966aec02a..a340ebea6f 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -1567,7 +1567,7 @@ BOOL ov12_02250BBC(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->selfTurnData[ctx->battlerIdTarget].lightningRodFlag = FALSE; ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 180); ctx->commandNext = ctx->command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; ret = TRUE; } @@ -1575,7 +1575,7 @@ BOOL ov12_02250BBC(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->selfTurnData[ctx->battlerIdTarget].stormDrainFlag = FALSE; ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 180); ctx->commandNext = ctx->command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; ret = TRUE; } @@ -3587,7 +3587,7 @@ BOOL ov12_02253068(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { if (ret == TRUE) { ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, state); ctx->commandNext = ctx->command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; } return ret; @@ -4285,7 +4285,7 @@ BOOL CheckStatusHealAbility(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerI if (!flag) { ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 221); ctx->commandNext = ctx->command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; } } @@ -4358,7 +4358,7 @@ BOOL TrySyncronizeStatus(BattleSystem *bsys, BATTLECONTEXT *ctx, ControllerComma ctx->statChangeType = 3; ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); ctx->commandNext = command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; return ret; } } @@ -4367,7 +4367,7 @@ BOOL TrySyncronizeStatus(BattleSystem *bsys, BATTLECONTEXT *ctx, ControllerComma if (ret == TRUE) { ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); ctx->commandNext = command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; return ret; } @@ -4391,7 +4391,7 @@ BOOL TrySyncronizeStatus(BattleSystem *bsys, BATTLECONTEXT *ctx, ControllerComma ctx->statChangeType = 5; ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); ctx->commandNext = command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; return ret; } @@ -4676,7 +4676,7 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { ctx->itemTemp = GetBattlerHeldItem(ctx, battlerId); ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); ctx->commandNext = ctx->command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; } } return ret; @@ -4720,7 +4720,7 @@ BOOL CheckItemGradualHPRestore(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl ctx->itemTemp = GetBattlerHeldItem(ctx, battlerId); ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); ctx->commandNext = ctx->command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; } } return ret; @@ -5041,7 +5041,7 @@ BOOL TryHeldItemNegativeEffect(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl ctx->itemTemp = GetBattlerHeldItem(ctx, battlerId); ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); ctx->commandNext = ctx->command; - ctx->command = CONTROLLER_COMMAND_22; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; } } return ret; From 02ff7ebf8856c0ede48cb630a7cae0a2ae36dbe7 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Sat, 15 Jul 2023 03:23:49 -0400 Subject: [PATCH 14/18] Next function is large --- asm/overlay_12_battle_controller_player.s | 66 +---------------------- include/battle_controller_player.h | 1 + include/battle_system.h | 1 + src/battle/battle_controller_player.c | 28 ++++++++++ 4 files changed, 31 insertions(+), 65 deletions(-) diff --git a/asm/overlay_12_battle_controller_player.s b/asm/overlay_12_battle_controller_player.s index b7b3f7f6e2..245458019e 100644 --- a/asm/overlay_12_battle_controller_player.s +++ b/asm/overlay_12_battle_controller_player.s @@ -13,71 +13,7 @@ .public BattleControllerPlayer_SelectionScreenInput .public ov12_02249190 .public ov12_0224930C - - thumb_func_start ov12_02249460 -ov12_02249460: ; 0x02249460 - push {r3, r4, r5, r6, r7, lr} - add r7, r0, #0 - add r4, r1, #0 - bl BattleSystem_GetMaxBattlers - add r5, r0, #0 - add r0, r7, #0 - add r1, r4, #0 - bl ov12_022581BC - cmp r0, #0 - bne _022494CC - ldr r1, _022494D0 ; =0x00003150 - mov r0, #0 - str r0, [r4, r1] - cmp r5, #0 - ble _0224949C - ldr r3, _022494D0 ; =0x00003150 - ldr r2, _022494D4 ; =0x000021A8 - add r1, r4, #0 -_02249488: - ldr r6, [r1, r2] - cmp r6, #0x28 - beq _02249494 - ldr r6, [r4, r3] - add r6, r6, #1 - str r6, [r4, r3] -_02249494: - add r0, r0, #1 - add r1, #0x10 - cmp r0, r5 - blt _02249488 -_0224949C: - add r0, r7, #0 - add r1, r4, #0 - bl SortMonsBySpeed - add r0, r4, #0 - add r0, #0xec - ldr r0, [r0] - cmp r0, r5 - bne _022494BC - add r0, r4, #0 - mov r1, #0 - add r0, #0xec - str r1, [r0] - mov r0, #9 - str r0, [r4, #8] - pop {r3, r4, r5, r6, r7, pc} -_022494BC: - add r1, r4, r0 - ldr r0, _022494D8 ; =0x000021E8 - ldrb r1, [r1, r0] - sub r0, #0x40 - lsl r1, r1, #4 - add r1, r4, r1 - ldr r0, [r1, r0] - str r0, [r4, #8] -_022494CC: - pop {r3, r4, r5, r6, r7, pc} - nop -_022494D0: .word 0x00003150 -_022494D4: .word 0x000021A8 -_022494D8: .word 0x000021E8 - thumb_func_end ov12_02249460 + .public ov12_02249460 thumb_func_start ov12_022494DC ov12_022494DC: ; 0x022494DC diff --git a/include/battle_controller_player.h b/include/battle_controller_player.h index 78b13bc20c..e272cdda75 100644 --- a/include/battle_controller_player.h +++ b/include/battle_controller_player.h @@ -17,6 +17,7 @@ void BattleControllerPlayer_SelectionScreenInit(BattleSystem *bsys, BATTLECONTEX void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTEXT *ctx); void ov12_02249190(BattleSystem *bsys, BATTLECONTEXT *ctx); void ov12_0224930C(BattleSystem *bsys, BATTLECONTEXT *ctx); +void ov12_02249460(BattleSystem *bsys, BATTLECONTEXT *ctx); //The following functions haven't been decompiled yet void ov12_0224E384(BattleSystem *bsys, BATTLECONTEXT *ctx); diff --git a/include/battle_system.h b/include/battle_system.h index 081afa4596..c7f4ce1870 100644 --- a/include/battle_system.h +++ b/include/battle_system.h @@ -41,5 +41,6 @@ void ov12_0223BB64(BattleSystem *bsys, int a1); void ov12_02237ED0(BattleSystem *bsys, int a1); BATTLECONTEXT *ov12_0223A7E4(BattleSystem *bsys); void ov12_022642F0(BattleSystem *bsys); +BOOL ov12_022581BC(BattleSystem *bsys, BATTLECONTEXT *ctx); #endif diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 6cba191c94..06c44f1d07 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -617,3 +617,31 @@ void ov12_0224930C(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->command = CONTROLLER_COMMAND_8; } } + +//static +void ov12_02249460(BattleSystem *bsys, BATTLECONTEXT *ctx) { + int maxBattlers; + int battlerId; + + maxBattlers = BattleSystem_GetMaxBattlers(bsys); + + if (ov12_022581BC(bsys, ctx)) { + return; + } + + ctx->battlersOnField = 0; + for (battlerId = 0; battlerId < maxBattlers; battlerId++) { + if (ctx->unk_21A8[battlerId][0] != 40) { + ctx->battlersOnField++; + } + } + + SortMonsBySpeed(bsys, ctx); + + if (ctx->unk_EC == maxBattlers) { + ctx->unk_EC = 0; + ctx->command = CONTROLLER_COMMAND_9; + } else { + ctx->command = (ControllerCommand) ctx->unk_21A8[ctx->unk_21E8[ctx->unk_EC]][0]; + } +} From 16763882495ffe4380790c27705951918a7f3151 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Sat, 15 Jul 2023 19:28:51 -0400 Subject: [PATCH 15/18] Add consts --- asm/include/overlay_12_022378C0.inc | 2 +- .../overlay_12_battle_controller_opponent.inc | 2 +- .../overlay_12_battle_controller_player.inc | 2 +- asm/include/overlay_12_battle_system.inc | 2 +- asm/include/unk_02074E5C.inc | 2 +- asm/overlay_12_022378C0.s | 4 ++-- asm/overlay_12_battle_controller_opponent.s | 20 +++++++++---------- asm/overlay_12_battle_system.s | 6 +++--- asm/unk_02074E5C.s | 2 +- include/constants/battle.h | 6 ++++-- include/overlay_12_0224E4FC.h | 2 +- src/battle/battle_command.c | 4 ++-- src/battle/battle_controller_player.c | 19 +++++++++--------- src/battle/overlay_12_0224E4FC.c | 2 +- 14 files changed, 39 insertions(+), 36 deletions(-) diff --git a/asm/include/overlay_12_022378C0.inc b/asm/include/overlay_12_022378C0.inc index c40046976a..bf149eec74 100644 --- a/asm/include/overlay_12_022378C0.inc +++ b/asm/include/overlay_12_022378C0.inc @@ -210,7 +210,7 @@ .public BattleSystem_GetFieldSide .public BattleSystem_GetTerrainId .public BattleSystem_GetBattlerIdPartner -.public BattleSystem_GetBattleFlags +.public BattleSystem_GetBattleSpecial .public ov12_0223B52C .public ov12_0223B5EC .public ov12_0223B708 diff --git a/asm/include/overlay_12_battle_controller_opponent.inc b/asm/include/overlay_12_battle_controller_opponent.inc index e597e238b4..69c5da6760 100644 --- a/asm/include/overlay_12_battle_controller_opponent.inc +++ b/asm/include/overlay_12_battle_controller_opponent.inc @@ -179,7 +179,7 @@ .public BattleSystem_GetTerrainId .public ov12_0223AB54 .public BattleSystem_GetBattlerIdPartner -.public BattleSystem_GetBattleFlags +.public BattleSystem_GetBattleSpecial .public ov12_0223B52C .public ov12_0223B580 .public ov12_0223B688 diff --git a/asm/include/overlay_12_battle_controller_player.inc b/asm/include/overlay_12_battle_controller_player.inc index 52ef97ba39..1a481feb2f 100644 --- a/asm/include/overlay_12_battle_controller_player.inc +++ b/asm/include/overlay_12_battle_controller_player.inc @@ -37,7 +37,7 @@ .public ov12_0223AB0C .public BattleSystem_GetFieldSide .public BattleSystem_GetBattlerIdPartner -.public BattleSystem_GetBattleFlags +.public BattleSystem_GetBattleSpecial .public ov12_0223B6B4 .public ov12_0223B6C0 .public ov12_0223B740 diff --git a/asm/include/overlay_12_battle_system.inc b/asm/include/overlay_12_battle_system.inc index 49ccfbd4fa..5fbc12777c 100644 --- a/asm/include/overlay_12_battle_system.inc +++ b/asm/include/overlay_12_battle_system.inc @@ -118,7 +118,7 @@ .public BattleSystem_GetBattlerIdPartner .public ov12_0223ABB8 .public BattleSystem_RecoverStatus -.public BattleSystem_GetBattleFlags +.public BattleSystem_GetBattleSpecial .public ov12_0223B520 .public ov12_0223B52C .public ov12_0223B580 diff --git a/asm/include/unk_02074E5C.inc b/asm/include/unk_02074E5C.inc index f780db0b37..f8ec98469c 100644 --- a/asm/include/unk_02074E5C.inc +++ b/asm/include/unk_02074E5C.inc @@ -50,7 +50,7 @@ .public ov12_0223A978 .public ov12_0223A984 .public ov12_0223A990 -.public BattleSystem_GetBattleFlags +.public BattleSystem_GetBattleSpecial .public ov12_0223BBFC .public ov12_0223BC08 .public ov12_0223BC14 diff --git a/asm/overlay_12_022378C0.s b/asm/overlay_12_022378C0.s index 0b179f6104..8866796596 100644 --- a/asm/overlay_12_022378C0.s +++ b/asm/overlay_12_022378C0.s @@ -3796,7 +3796,7 @@ _022398A0: cmp r0, #0 bne _022398BE add r0, r5, #0 - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x10 tst r0, r1 beq _022398D6 @@ -3807,7 +3807,7 @@ _022398BE: cmp r0, #0 bne _022398FE add r0, r5, #0 - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x10 tst r0, r1 beq _022398FE diff --git a/asm/overlay_12_battle_controller_opponent.s b/asm/overlay_12_battle_controller_opponent.s index 53611b07e2..60aa909689 100644 --- a/asm/overlay_12_battle_controller_opponent.s +++ b/asm/overlay_12_battle_controller_opponent.s @@ -2509,7 +2509,7 @@ _02259AD2: cmp r0, #2 bne _02259B12 ldr r0, [sp, #0x24] - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x40 tst r0, r1 beq _02259B12 @@ -2573,7 +2573,7 @@ _02259B1E: cmp r0, #2 bne _02259B78 ldr r0, [sp, #0x24] - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x40 tst r0, r1 beq _02259B78 @@ -6431,7 +6431,7 @@ _0225B990: tst r0, r1 ldr r0, [r4] beq _0225B9C8 - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x20 tst r0, r1 bne _0225BA06 @@ -6446,7 +6446,7 @@ _0225B990: str r0, [r4, #0x10] b _0225BA06 _0225B9C8: - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x20 tst r0, r1 bne _0225BA06 @@ -7018,7 +7018,7 @@ _0225BE66: tst r0, r1 ldr r0, [r4] beq _0225BE9E - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x20 tst r0, r1 bne _0225BEDC @@ -7033,7 +7033,7 @@ _0225BE66: str r0, [r4, #0x10] b _0225BEDC _0225BE9E: - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x20 tst r0, r1 bne _0225BEDC @@ -10775,7 +10775,7 @@ _0225DC9E: mov r1, #1 bl ov12_022698AC ldr r0, [r4] - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #1 tst r0, r1 beq _0225DD20 @@ -10876,7 +10876,7 @@ _0225DDC8: b _0225DE98 _0225DDD2: ldr r0, [r4] - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #1 tst r0, r1 beq _0225DDF4 @@ -11623,7 +11623,7 @@ ov12_0225E404: ; 0x0225E404 tst r0, r4 bne _0225E43A ldr r0, [r6] - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #1 tst r0, r1 bne _0225E43A @@ -16931,7 +16931,7 @@ ov12_02260EA4: ; 0x02260EA4 bl BattleSystem_GetBattleType add r4, r0, #0 add r0, r6, #0 - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x40 tst r1, r4 beq _02260F2C diff --git a/asm/overlay_12_battle_system.s b/asm/overlay_12_battle_system.s index e686e6f7be..f313b62e9d 100644 --- a/asm/overlay_12_battle_system.s +++ b/asm/overlay_12_battle_system.s @@ -1849,14 +1849,14 @@ _0223B50C: .balign 4, 0 thumb_func_end BattleSystem_RecoverStatus - thumb_func_start BattleSystem_GetBattleFlags -BattleSystem_GetBattleFlags: ; 0x0223B514 + thumb_func_start BattleSystem_GetBattleSpecial +BattleSystem_GetBattleSpecial: ; 0x0223B514 ldr r1, _0223B51C ; =0x0000240C ldr r0, [r0, r1] bx lr nop _0223B51C: .word 0x0000240C - thumb_func_end BattleSystem_GetBattleFlags + thumb_func_end BattleSystem_GetBattleSpecial thumb_func_start ov12_0223B520 ov12_0223B520: ; 0x0223B520 diff --git a/asm/unk_02074E5C.s b/asm/unk_02074E5C.s index f95d483ad7..09c0cbdbdb 100644 --- a/asm/unk_02074E5C.s +++ b/asm/unk_02074E5C.s @@ -50,7 +50,7 @@ _020FFE30: sub_02074E5C: ; 0x02074E5C push {r4, r5, r6, lr} add r5, r0, #0 - bl BattleSystem_GetBattleFlags + bl BattleSystem_GetBattleSpecial mov r1, #0x10 tst r0, r1 bne _02074EB6 diff --git a/include/constants/battle.h b/include/constants/battle.h index da05dc44d6..2808cd5298 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -62,8 +62,10 @@ enum Terrain { #define BATTLE_TYPE_NO_EXP (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_TOWER | BATTLE_TYPE_PAL_PARK) -//Battle Flags -#define BATTLE_FLAG_7 (1 << 7) +//Battle Status Flags +#define BATTLE_SPECIAL_FIRST_RIVAL (1 << 0) +#define BATTLE_SPECIAL_RECORDED (1 << 4) +#define BATTLE_SPECIAL_DISTORTION_WORLD (1 << 7) //Move Effects Flags #define MOVE_EFFECT_FLAG_0 (1 << 0) diff --git a/include/overlay_12_0224E4FC.h b/include/overlay_12_0224E4FC.h index fa9bcbe10c..c5b92e25e6 100644 --- a/include/overlay_12_0224E4FC.h +++ b/include/overlay_12_0224E4FC.h @@ -128,7 +128,7 @@ BOOL ov12_02251C74(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarge void Link_CheckTimeout(BATTLECONTEXT *ctx); BOOL CheckLegalMeFirstMove(BATTLECONTEXT *ctx, u16 move); int ov12_02253DA0(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); -u32 BattleSystem_GetBattleFlags(BattleSystem *bsys); +u32 BattleSystem_GetBattleSpecial(BattleSystem *bsys); u32 ov12_0223C24C(PARTY *party, u32 *a1); int ov12_0223AB0C(BattleSystem *bsys, int battlerId); int ov12_02251D28(BattleSystem *bsys, BATTLECONTEXT *ctx, int moveNo, int moveType, int battlerIdAttacker, int battlerIdTarget, int dmg, u32 *statusFlag); diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index 8a36f8d2b5..9043aca3c0 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -1170,7 +1170,7 @@ BOOL BtlCmd_JumpToEffectScript(BattleSystem *bsys, BATTLECONTEXT *ctx) { BOOL BtlCmd_CritCalc(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); - if ((BattleSystem_GetBattleType(bsys) & BATTLE_TYPE_TUTORIAL) || (BattleSystem_GetBattleFlags(bsys) & 1)) { + if ((BattleSystem_GetBattleType(bsys) & BATTLE_TYPE_TUTORIAL) || (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_FIRST_RIVAL)) { ctx->criticalMultiplier = 1; } else { ctx->criticalMultiplier = TryCriticalHit(bsys, ctx, ctx->battlerIdAttacker, ctx->battlerIdTarget, ctx->criticalCnt, ov12_022581D4(bsys, ctx, 0, ctx->battlerIdTarget)); @@ -5237,7 +5237,7 @@ BOOL BtlCmd_CheckChatterActivation(BattleSystem *bsys, BATTLECONTEXT *ctx) { int param; if (ctx->battleMons[ctx->battlerIdAttacker].species == SPECIES_CHATOT && ctx->battleMons[ctx->battlerIdTarget].hp && !(ctx->battleMons[ctx->battlerIdAttacker].status2 & (1 << 21))) { - if ((BattleSystem_GetBattleFlags(bsys) & 16) == FALSE) { + if ((BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) == FALSE) { param = sub_02006EFC(BattleSystem_GetChatotVoice(bsys, ctx->battlerIdAttacker)); } else { param = BattleSystem_GetChatotVoiceParam(bsys, ctx->battlerIdAttacker); diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 06c44f1d07..d6a316de81 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -5,6 +5,7 @@ #include "battle_system.h" #include "overlay_12_0224E4FC.h" #include "heap.h" +#include "msgdata/msg/msg_0197.h" extern ControllerFunction sPlayerBattleCommands[]; @@ -226,7 +227,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE if (StruggleCheck(bsys, ctx, battlerId, 0, 0xffffffff) == 15) { ctx->turnData[battlerId].struggleFlag = 1; - if (BattleSystem_GetBattleFlags(bsys) & 0x10) { + if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { ctx->unk_0[battlerId] = 13; } else { ctx->unk_0[battlerId] = 17; @@ -237,7 +238,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ctx->unk_30B4[battlerId] = ctx->battleMons[battlerId].unk88.encoredMove; ctx->unk_21A8[battlerId][2] = 0; - if (BattleSystem_GetBattleFlags(bsys) & 0x10) { + if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { ctx->unk_0[battlerId] = 13; } else { ctx->unk_0[battlerId] = 17; @@ -255,7 +256,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ctx->unk_4[battlerId] = 13; ctx->unk_21A8[battlerId][0] = 21; } else if (BattleSystem_GetBattleType(bsys) & (BATTLE_TYPE_LINK | BATTLE_TYPE_TOWER)) { - msg.id = 593; + msg.id = msg_0197_00593; //Items can't be used here msg.tag = 0; ov12_022639B8(bsys, battlerId, msg); ctx->unk_0[battlerId] = 15; @@ -301,7 +302,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ctx->unk_0[battlerId] = 11; break; } else if (ov12_02251A28(bsys, ctx, battlerId, ctx->unk_2300[battlerId][0] - 1, &msg) == 0) { - if (BattleSystem_GetBattleFlags(bsys) & BATTLE_TYPE_INGAME_PARTNER) { + if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { ov12_0223BFFC(bsys, 1); ov12_022581BC(bsys, ov12_0223A7E4(bsys)); } else { @@ -359,7 +360,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE v8 = BattlerCanSwitch(bsys, ctx, battlerId); - if (((ov12_0223AB0C(bsys, battlerId) == 4) || (ov12_0223AB0C(bsys, battlerId) == 5)) && ((battleType == (0x2 | 0x1)) || (battleType == (0x4 | 0x1 | 0x2)) || (battleType == (0x2 | 0x1 | 0x80)) || ((battleType == (0x2 | 0x1 | 0x10)) && (ov12_0223AB0C(bsys, battlerId) == 4)))) { + if (((ov12_0223AB0C(bsys, battlerId) == 4) || (ov12_0223AB0C(bsys, battlerId) == 5)) && ((battleType == (BATTLE_TYPE_SINGLES | BATTLE_TYPE_DOUBLES)) || (battleType == (BATTLE_TYPE_SINGLES | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_LINK)) || (battleType == (BATTLE_TYPE_SINGLES | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_TOWER)) || ((battleType == (BATTLE_TYPE_SINGLES | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_INGAME_PARTNER)) && (ov12_0223AB0C(bsys, battlerId) == 4)))) { partnerId = BattleSystem_GetBattlerIdPartner(bsys, battlerId); if (ctx->unk_21A8[partnerId][0] == 15) { @@ -384,18 +385,18 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE BattleController_EmitDrawYesNoBox(bsys, ctx, battlerId, 955, 0, 0, 0); ctx->unk_0[battlerId] = 12; } else if ((battleType & BATTLE_TYPE_SINGLES) && !(battleType & BATTLE_TYPE_LINK)) { - if (BattleSystem_GetBattleFlags(bsys) & 0x10) { + if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { ov12_0223BFFC(bsys, 1); ov12_022581BC(bsys, ov12_0223A7E4(bsys)); } else { msg.tag = 0; - msg.id = 793; //TODO: replace with msg constants + msg.id = msg_0197_00793; //There's no running from a Trainer battle! ov12_022639B8(bsys, battlerId, msg); ctx->unk_0[battlerId] = 15; ctx->unk_4[battlerId] = 0; } } else if (CantEscape(bsys, ctx, battlerId, &msg)) { - if (BattleSystem_GetBattleFlags(bsys) & 0x10) { + if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { ov12_0223BFFC(bsys, 1); ov12_022581BC(bsys, ov12_0223A7E4(bsys)); } else { @@ -451,7 +452,7 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE break; case 16: msg.tag = 2; - msg.id = 608; + msg.id = msg_0197_00608; //Spheal has no moves left! msg.param[0] = CreateNicknameTag(ctx, battlerId); ov12_022639B8(bsys, battlerId, msg); ctx->unk_0[battlerId] = 15; diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index a340ebea6f..d52009131a 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -5953,7 +5953,7 @@ BOOL Battler_CheckWeatherFormChange(BattleSystem *bsys, BATTLECONTEXT *ctx, int ctx->battleMons[ctx->battlerIdTemp].hp && ctx->battleMons[ctx->battlerIdTemp].form == GIRATINA_ORIGIN) { if ((ctx->battleMons[ctx->battlerIdTemp].status2 & STATUS2_TRANSFORMED) || - (!(BattleSystem_GetBattleFlags(bsys) & BATTLE_FLAG_7) && ctx->battleMons[ctx->battlerIdTemp].item != ITEM_GRISEOUS_ORB)) { + (!(BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_DISTORTION_WORLD) && ctx->battleMons[ctx->battlerIdTemp].item != ITEM_GRISEOUS_ORB)) { if (ctx->battleMons[ctx->battlerIdTemp].status2 & STATUS2_TRANSFORMED) { Pokemon *mon2; int battlerIdTarget; From fbf868480293afc6e739fbbf08d653adeded1936 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Sun, 16 Jul 2023 02:13:19 -0400 Subject: [PATCH 16/18] Definitely did not remove pedantic flag --- common.mk | 2 +- src/battle/battle_controller_player.c | 189 ++++++++++++++------------ 2 files changed, 106 insertions(+), 85 deletions(-) diff --git a/common.mk b/common.mk index 4ceb85b854..0f6628cec7 100644 --- a/common.mk +++ b/common.mk @@ -108,7 +108,7 @@ XMAP := $(NEF).xMAP EXCCFLAGS := -Cpp_exceptions off -MWCFLAGS = $(DEFINES) $(OPTFLAGS) -enum int -lang c99 $(EXCCFLAGS) -gccext,on -proc $(PROC) -msgstyle gcc -gccinc -i ./include -i ./include/library -i $(WORK_DIR)/files -I$(WORK_DIR)/lib/include -ipa file -interworking -inline on,noauto -char signed -W all -W pedantic -W noimpl_signedunsigned -W noimplicitconv -W nounusedarg -W nomissingreturn -W error +MWCFLAGS = $(DEFINES) $(OPTFLAGS) -enum int -lang c99 $(EXCCFLAGS) -gccext,on -proc $(PROC) -msgstyle gcc -gccinc -i ./include -i ./include/library -i $(WORK_DIR)/files -I$(WORK_DIR)/lib/include -ipa file -interworking -inline on,noauto -char signed -W all -W nopedantic -W noimpl_signedunsigned -W noimplicitconv -W nounusedarg -W nomissingreturn -W error MWASFLAGS = $(DEFINES) -proc $(PROC_S) -gccinc -i . -i ./include -i $(WORK_DIR)/asm/include -i $(WORK_DIR)/files -i $(WORK_DIR)/lib/asm/include -i $(WORK_DIR)/lib/NitroDWC/asm/include -i $(WORK_DIR)/lib/NitroSDK/asm/include -i $(WORK_DIR)/lib/syscall/asm/include -I$(WORK_DIR)/lib/include -DSDK_ASM MWLDFLAGS := -proc $(PROC) -nopic -nopid -interworking -map closure,unused -symtab sort -m _start -msgstyle gcc diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index d6a316de81..f46fcf8264 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -111,6 +111,27 @@ void BattleControllerPlayer_SelectionScreenInit(BattleSystem *bsys, BATTLECONTEX ctx->command = CONTROLLER_COMMAND_SELECTION_SCREEN_INPUT; } +typedef enum BattleSelectState { + BS_STATE_0, + BS_STATE_1, + BS_STATE_2, + BS_STATE_3, + BS_STATE_4, + BS_STATE_5, + BS_STATE_6, + BS_STATE_7, + BS_STATE_8, + BS_STATE_9, + BS_STATE_10, + BS_STATE_11, + BS_STATE_12, + BS_STATE_13, + BS_STATE_14, + BS_STATE_15, + BS_STATE_16, + BS_STATE_END +} SelectionScreenInputState; + //static void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTEXT *ctx) { int battlerId; @@ -126,29 +147,29 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE for (battlerId = 0; battlerId < battlersMax; battlerId++) { switch (ctx->unk_0[battlerId]) { - case 0: + case BS_STATE_0: if ((battleType & BATTLE_TYPE_DOUBLES) && !(battleType & BATTLE_TYPE_MULTI) && ((battlerId == BATTLER_PLAYER2) && (ctx->unk_0[0] != 14) || (battlerId == BATTLER_ENEMY2) && (ctx->unk_0[1] != 14))) { break; } if (ctx->unk_3108 & MaskOfFlagNo(battlerId)) { - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 40; break; } else if (Battler_CanSelectAction(ctx, battlerId) == 0) { ctx->turnData[battlerId].unk0_1 = 1; - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 13; break; } if ((ov12_02261264(BattleSystem_GetOpponentDataByBattlerId(bsys, battlerId)) == 1) || (ctx->totalTurns)) { ov12_02262B80(bsys, ctx, battlerId, ctx->selectedMonIndex[battlerId]); - ctx->unk_0[battlerId] = 1; + ctx->unk_0[battlerId] = BS_STATE_1; } else { - ctx->unk_0[battlerId] = 2; + ctx->unk_0[battlerId] = BS_STATE_2; } break; - case 2: + case BS_STATE_2: int battlerIdCheck; for (battlerIdCheck = 0; battlerIdCheck < battlersMax; battlerIdCheck++) { @@ -160,60 +181,60 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE continue; } - if (ctx->unk_0[battlerIdCheck] != 14) { + if (ctx->unk_0[battlerIdCheck] != BS_STATE_14) { break; } } if (battlerIdCheck == battlersMax) { ov12_02262B80(bsys, ctx, battlerId, ctx->selectedMonIndex[battlerId]); - ctx->unk_0[battlerId] = 1; + ctx->unk_0[battlerId] = BS_STATE_1; } else { break; } //fallthrough - case 1: + case BS_STATE_1: if (ov12_0225682C(ctx, battlerId)) { ctx->unk_21A8[battlerId][3] = ctx->unk_2300[battlerId][0]; if (battleType & BATTLE_TYPE_PAL_PARK) { switch (ov12_0225682C(ctx, battlerId)) { case 1: - ctx->unk_0[battlerId] = 17; - ctx->unk_4[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_4[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 17; break; case 4: - ctx->unk_0[battlerId] = 17; - ctx->unk_4[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_4[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 16; break; } } else if (battleType & BATTLE_TYPE_SAFARI) { switch (ov12_0225682C(ctx, battlerId)) { case 1: - ctx->unk_0[battlerId] = 17; - ctx->unk_4[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_4[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 17; break; case 2: - ctx->unk_0[battlerId] = 17; - ctx->unk_4[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_4[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 18; break; case 3: - ctx->unk_0[battlerId] = 17; - ctx->unk_4[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_4[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 19; break; case 4: - ctx->unk_0[battlerId] = 17; - ctx->unk_4[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_4[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 16; break; case 5: - ctx->unk_0[battlerId] = 17; - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_0[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 20; break; } @@ -228,10 +249,10 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ctx->turnData[battlerId].struggleFlag = 1; if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; } else { - ctx->unk_0[battlerId] = 17; - ctx->unk_4[battlerId] = 16; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_4[battlerId] = BS_STATE_16; } } else if (ctx->battleMons[battlerId].unk88.encoredMove) { ctx->movePos[battlerId] = ctx->battleMons[battlerId].unk88.encoredMoveIndex; @@ -239,28 +260,28 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ctx->unk_21A8[battlerId][2] = 0; if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; } else { - ctx->unk_0[battlerId] = 17; - ctx->unk_4[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_4[battlerId] = BS_STATE_13; } } else { - ctx->unk_0[battlerId] = 3; + ctx->unk_0[battlerId] = BS_STATE_3; } ctx->unk_21A8[battlerId][0] = 13; break; case 2: //Item if (BattleSystem_GetBattleType(bsys) & (1 << 12)) { - ctx->unk_0[battlerId] = 17; - ctx->unk_4[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_END; + ctx->unk_4[battlerId] = BS_STATE_13; ctx->unk_21A8[battlerId][0] = 21; } else if (BattleSystem_GetBattleType(bsys) & (BATTLE_TYPE_LINK | BATTLE_TYPE_TOWER)) { msg.id = msg_0197_00593; //Items can't be used here msg.tag = 0; ov12_022639B8(bsys, battlerId, msg); - ctx->unk_0[battlerId] = 15; - ctx->unk_4[battlerId] = 0; + ctx->unk_0[battlerId] = BS_STATE_15; + ctx->unk_4[battlerId] = BS_STATE_0; } else { ctx->unk_21A8[battlerId][0] = 14; ctx->unk_0[battlerId] = 7; @@ -268,38 +289,38 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE break; case 3: //Pokemon ctx->unk_21A8[battlerId][0] = 15; - ctx->unk_0[battlerId] = 9; + ctx->unk_0[battlerId] = BS_STATE_9; break; case 4: //Run ctx->unk_21A8[battlerId][0] = 16; - ctx->unk_0[battlerId] = 11; + ctx->unk_0[battlerId] = BS_STATE_11; break; case 0xff: //Cancel if (battleType & BATTLE_TYPE_LINK) { ov12_02263CCC(bsys, battlerId); - ctx->unk_0[battlerId] = 0; + ctx->unk_0[battlerId] = BS_STATE_0; ctx->unk_0[BattleSystem_GetBattlerIdPartner(bsys, battlerId)] = 0; } else if ((battleType & BATTLE_TYPE_DOUBLES) && (battlerId == BATTLER_PLAYER2)) { ov12_02263CCC(bsys, battlerId); - ctx->unk_0[0] = 0; - ctx->unk_0[2] = 0; + ctx->unk_0[0] = BS_STATE_0; + ctx->unk_0[2] = BS_STATE_0; } break; } } } break; - case 3: + case BS_STATE_3: ov12_02262F40(bsys, ctx, battlerId); - ctx->unk_0[battlerId] = 4; + ctx->unk_0[battlerId] = BS_STATE_4; //fallthrough - case 4: + case BS_STATE_4: if (ov12_0225682C(ctx, battlerId) == 0xff) { - ctx->unk_0[battlerId] = 0; + ctx->unk_0[battlerId] = BS_STATE_0; } else if (ov12_0225682C(ctx, battlerId)) { if ((ctx->unk_2300[battlerId][0] - 1) == 4) { ctx->unk_21A8[battlerId][0] = 16; - ctx->unk_0[battlerId] = 11; + ctx->unk_0[battlerId] = BS_STATE_11; break; } else if (ov12_02251A28(bsys, ctx, battlerId, ctx->unk_2300[battlerId][0] - 1, &msg) == 0) { if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { @@ -307,53 +328,53 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ov12_022581BC(bsys, ov12_0223A7E4(bsys)); } else { ov12_022639B8(bsys, battlerId, msg); - ctx->unk_0[battlerId] = 15; - ctx->unk_4[battlerId] = 3; + ctx->unk_0[battlerId] = BS_STATE_15; + ctx->unk_4[battlerId] = BS_STATE_3; } } else { ctx->unk_21A8[battlerId][2] = ctx->unk_2300[battlerId][0]; ctx->movePos[battlerId] = ctx->unk_2300[battlerId][0] - 1; ctx->unk_30B4[battlerId] = ctx->battleMons[battlerId].moves[ctx->movePos[battlerId]]; - ctx->unk_0[battlerId] = 5; + ctx->unk_0[battlerId] = BS_STATE_5; ctx->unk_314C[battlerId] |= 0x2; } } break; - case 5: + case BS_STATE_5: int out; if (ov12_0224DB64(bsys, ctx, battlerId, battleType, &out, ctx->movePos[battlerId], &ctx->unk_21A8[battlerId][1])) { ov12_02262FFC(bsys, ctx, out, battlerId); - ctx->unk_0[battlerId] = 6; + ctx->unk_0[battlerId] = BS_STATE_6; } else { - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; } break; - case 6: + case BS_STATE_6: if (ov12_0225682C(ctx, battlerId) == 0xff) { - ctx->unk_0[battlerId] = 3; + ctx->unk_0[battlerId] = BS_STATE_3; } else if (ov12_0225682C(ctx, battlerId)) { ctx->unk_21A8[battlerId][1] = ctx->unk_2300[battlerId][0] - 1; - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; ctx->unk_314C[battlerId] |= 0x4; } break; - case 7: + case BS_STATE_7: ov12_02263138(bsys, ctx, battlerId); - ctx->unk_0[battlerId] = 8; - case 8: + ctx->unk_0[battlerId] = BS_STATE_8; + case BS_STATE_8: if (ov12_0225682C(ctx, battlerId) == 0xff) { - ctx->unk_0[battlerId] = 0; + ctx->unk_0[battlerId] = BS_STATE_0; } else if (ov12_0225682C(ctx, battlerId)) { u32 *unkPtr; unkPtr = (u32 *)&ctx->unk_2300[battlerId][0]; ctx->unk_21A8[battlerId][2] = unkPtr[0]; - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; } break; - case 9: //switching..? + case BS_STATE_9: //switching..? int v8; int v9 = 6; int partnerId; @@ -369,21 +390,21 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE } BattleController_EmitShowMonList(bsys, ctx, battlerId, 0, v8, v9); - ctx->unk_0[battlerId] = 10; + ctx->unk_0[battlerId] = BS_STATE_10; //fallthrough - case 10: + case BS_STATE_10: if (ov12_0225682C(ctx, battlerId) == 0xff) { - ctx->unk_0[battlerId] = 0; + ctx->unk_0[battlerId] = BS_STATE_0; } else if (ov12_0225682C(ctx, battlerId)) { ctx->unk_21A8[battlerId][2] = ctx->unk_2300[battlerId][0] - 1; ctx->unk_21A0[battlerId] = ctx->unk_2300[battlerId][0] - 1; - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; } break; - case 11: //Flee after a mon fainted..? + case BS_STATE_11: //Flee after a mon fainted..? if (battleType & BATTLE_TYPE_TOWER) { BattleController_EmitDrawYesNoBox(bsys, ctx, battlerId, 955, 0, 0, 0); - ctx->unk_0[battlerId] = 12; + ctx->unk_0[battlerId] = BS_STATE_12; } else if ((battleType & BATTLE_TYPE_SINGLES) && !(battleType & BATTLE_TYPE_LINK)) { if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { ov12_0223BFFC(bsys, 1); @@ -392,8 +413,8 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE msg.tag = 0; msg.id = msg_0197_00793; //There's no running from a Trainer battle! ov12_022639B8(bsys, battlerId, msg); - ctx->unk_0[battlerId] = 15; - ctx->unk_4[battlerId] = 0; + ctx->unk_0[battlerId] = BS_STATE_15; + ctx->unk_4[battlerId] = BS_STATE_0; } } else if (CantEscape(bsys, ctx, battlerId, &msg)) { if (BattleSystem_GetBattleSpecial(bsys) & BATTLE_SPECIAL_RECORDED) { @@ -401,31 +422,31 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE ov12_022581BC(bsys, ov12_0223A7E4(bsys)); } else { ov12_022639B8(bsys, battlerId, msg); - ctx->unk_0[battlerId] = 15; - ctx->unk_4[battlerId] = 0; + ctx->unk_0[battlerId] = BS_STATE_15; + ctx->unk_4[battlerId] = BS_STATE_0; } } else { - ctx->unk_0[battlerId] = 12; + ctx->unk_0[battlerId] = BS_STATE_12; } break; - case 12: + case BS_STATE_12: if (battleType & BATTLE_TYPE_TOWER) { if (ov12_0225682C(ctx, battlerId)) { if (ov12_0225682C(ctx, battlerId) == 0xff) { - ctx->unk_0[battlerId] = 0; + ctx->unk_0[battlerId] = BS_STATE_0; } else { - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; } } } else { - ctx->unk_0[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_13; } if ((battleType & BATTLE_TYPE_DOUBLES) && !(battleType & BATTLE_TYPE_MULTI) && (ctx->unk_0[battlerId] == 13)) { - ctx->unk_0[BattleSystem_GetBattlerIdPartner(bsys, battlerId)] = 13; + ctx->unk_0[BattleSystem_GetBattlerIdPartner(bsys, battlerId)] = BS_STATE_13; } break; - case 13: //WIFI wait for partner to make a move..? + case BS_STATE_13: //WIFI wait for partner to make a move..? ov12_02263CCC(bsys, battlerId); if (battleType == (BATTLE_TYPE_SINGLES | BATTLE_TYPE_DOUBLES | BATTLE_TYPE_LINK)) { @@ -433,32 +454,32 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE partnerId = BattleSystem_GetBattlerIdPartner(bsys, battlerId); - if (ctx->unk_0[partnerId] == 14) { + if (ctx->unk_0[partnerId] == BS_STATE_14) { BattleController_EmitShowWaitMessage(bsys, battlerId); } } else { BattleController_EmitShowWaitMessage(bsys, battlerId); } - ctx->unk_0[battlerId] = 14; - case 14: + ctx->unk_0[battlerId] = BS_STATE_14; + case BS_STATE_14: var++; //this might be counting the number of players who have selected their final action? break; - case 15: + case BS_STATE_15: if (ov12_0225682C(ctx, battlerId)) { ov12_0224EDC0(ctx, battlerId); ctx->unk_0[battlerId] = ctx->unk_4[battlerId]; } break; - case 16: + case BS_STATE_16: msg.tag = 2; msg.id = msg_0197_00608; //Spheal has no moves left! msg.param[0] = CreateNicknameTag(ctx, battlerId); ov12_022639B8(bsys, battlerId, msg); - ctx->unk_0[battlerId] = 15; - ctx->unk_4[battlerId] = 13; + ctx->unk_0[battlerId] = BS_STATE_15; + ctx->unk_4[battlerId] = BS_STATE_13; break; - case 17: + case BS_STATE_END: ov12_02263E18(bsys, battlerId); ctx->unk_0[battlerId] = ctx->unk_4[battlerId]; break; From 179a45084d7308266926766a90c0701fd960a271 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Mon, 17 Jul 2023 03:01:51 -0400 Subject: [PATCH 17/18] Update Field Condition --- asm/overlay_12_battle_controller_player.s | 1045 +-------------------- include/battle.h | 4 +- include/battle_controller_player.h | 4 + include/constants/battle.h | 9 +- src/battle/battle_controller_player.c | 341 ++++++- src/battle/overlay_12_0224E4FC.c | 4 +- 6 files changed, 357 insertions(+), 1050 deletions(-) diff --git a/asm/overlay_12_battle_controller_player.s b/asm/overlay_12_battle_controller_player.s index 245458019e..e1759f264f 100644 --- a/asm/overlay_12_battle_controller_player.s +++ b/asm/overlay_12_battle_controller_player.s @@ -14,1048 +14,7 @@ .public ov12_02249190 .public ov12_0224930C .public ov12_02249460 - - thumb_func_start ov12_022494DC -ov12_022494DC: ; 0x022494DC - push {r4, r5, r6, r7, lr} - sub sp, #0x3c - str r0, [sp] - add r4, r1, #0 - mov r5, #0 - bl BattleSystem_GetMaxBattlers - str r0, [sp, #4] -_022494EC: - ldr r1, [r4, #8] - add r0, r4, #0 - add r2, r1, #0 - mov r3, #1 - bl ov12_0224DC74 - cmp r0, #1 - beq _02249516 - ldr r1, [r4, #8] - add r0, r4, #0 - add r2, r1, #0 - bl ov12_0224DD18 - cmp r0, #1 - beq _02249516 - ldr r0, [sp] - add r1, r4, #0 - bl ov12_0224D7EC - cmp r0, #1 - bne _02249518 -_02249516: - b _02249CBE -_02249518: - ldr r0, [r4, #0x10] - cmp r0, #0xd - bhi _022495F2 - add r0, r0, r0 - add r0, pc - ldrh r0, [r0, #6] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - add pc, r0 -_0224952A: ; jump table - .short _02249546 - _0224952A - 2 ; case 0 - .short _02249600 - _0224952A - 2 ; case 1 - .short _022496AA - _0224952A - 2 ; case 2 - .short _02249756 - _0224952A - 2 ; case 3 - .short _02249804 - _0224952A - 2 ; case 4 - .short _02249880 - _0224952A - 2 ; case 5 - .short _022498FC - _0224952A - 2 ; case 6 - .short _022499BC - _0224952A - 2 ; case 7 - .short _02249A4C - _0224952A - 2 ; case 8 - .short _02249ADC - _0224952A - 2 ; case 9 - .short _02249B70 - _0224952A - 2 ; case 10 - .short _02249C06 - _0224952A - 2 ; case 11 - .short _02249C48 - _0224952A - 2 ; case 12 - .short _02249CA0 - _0224952A - 2 ; case 13 -_02249546: - ldr r6, [r4, #0x14] - cmp r6, #2 - bge _022495EE - mov r0, #0x71 - lsl r0, r0, #2 - add r0, r4, r0 - str r0, [sp, #0x38] - add r0, r4, #0 - str r0, [sp, #8] - add r0, #0x14 - str r0, [sp, #8] - mov r0, #1 - str r0, [sp, #0x1c] - mov r0, #0x1c - str r0, [sp, #0x18] -_02249564: - lsl r0, r6, #2 - mov r1, #0x6f - add r0, r4, r0 - lsl r1, r1, #2 - ldr r2, [r0, r1] - mov r1, #1 - tst r1, r2 - beq _022495DA - ldr r1, [sp, #0x38] - lsl r3, r6, #3 - ldr r7, [r1, r3] - ldr r2, [sp, #0x18] - add r1, r7, #0 - str r7, [sp, #0x2c] - bic r1, r2 - str r1, [sp, #0x2c] - lsl r1, r7, #0x1b - lsr r1, r1, #0x1d - sub r1, r1, #1 - lsl r1, r1, #0x1d - lsr r2, r1, #0x1b - ldr r1, [sp, #0x2c] - orr r2, r1 - ldr r1, [sp, #0x38] - str r2, [r1, r3] - ldr r1, [r1, r3] - lsl r1, r1, #0x1b - lsr r1, r1, #0x1d - bne _022495DA - mov r1, #0x6f - lsl r1, r1, #2 - ldr r2, [r0, r1] - ldr r1, [sp, #0x1c] - bic r2, r1 - mov r1, #0x6f - lsl r1, r1, #2 - str r2, [r0, r1] - mov r1, #0x73 - add r0, r1, #0 - add r0, #0xb1 - str r1, [r4, r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x32 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - add r1, r4, #0 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - ldr r0, [sp] - add r2, r6, #0 - bl ov12_02257E98 - mov r1, #0x46 - lsl r1, r1, #2 - str r0, [r4, r1] - mov r5, #1 -_022495DA: - ldr r0, [sp, #8] - ldr r0, [r0] - add r1, r0, #1 - ldr r0, [sp, #8] - cmp r5, #0 - str r1, [r0] - bne _022495EE - ldr r6, [r4, #0x14] - cmp r6, #2 - blt _02249564 -_022495EE: - cmp r5, #0 - beq _022495F4 -_022495F2: - b _02249CA2 -_022495F4: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - mov r0, #0 - str r0, [r4, #0x14] - b _02249CA2 -_02249600: - ldr r6, [r4, #0x14] - cmp r6, #2 - bge _0224969A - mov r0, #0x71 - lsl r0, r0, #2 - add r7, r4, r0 - add r0, r4, #0 - str r0, [sp, #0xc] - add r0, #0x14 - str r0, [sp, #0xc] - mov r0, #2 - str r0, [sp, #0x20] -_02249618: - lsl r0, r6, #2 - add r3, r4, r0 - mov r0, #0x6f - lsl r0, r0, #2 - ldr r1, [r3, r0] - mov r0, #2 - tst r0, r1 - beq _02249686 - lsl r2, r6, #3 - ldr r1, [r7, r2] - ldr r0, _02249938 ; =0xFFFFFC7F - and r0, r1 - str r0, [sp, #0x30] - lsl r0, r1, #0x16 - lsr r0, r0, #0x1d - sub r0, r0, #1 - lsl r0, r0, #0x1d - lsr r1, r0, #0x16 - ldr r0, [sp, #0x30] - orr r0, r1 - str r0, [r7, r2] - ldr r0, [r7, r2] - lsl r0, r0, #0x16 - lsr r0, r0, #0x1d - bne _02249686 - mov r0, #0x6f - lsl r0, r0, #2 - ldr r0, [r3, r0] - ldr r1, [sp, #0x20] - mov r2, #0x32 - bic r0, r1 - mov r1, #0x6f - lsl r1, r1, #2 - str r0, [r3, r1] - mov r1, #0x71 - add r0, r1, #0 - add r0, #0xb3 - str r1, [r4, r0] - add r0, r4, #0 - mov r1, #1 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - add r1, r4, #0 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - ldr r0, [sp] - add r2, r6, #0 - bl ov12_02257E98 - mov r1, #0x46 - lsl r1, r1, #2 - str r0, [r4, r1] - mov r5, #1 -_02249686: - ldr r0, [sp, #0xc] - ldr r0, [r0] - add r1, r0, #1 - ldr r0, [sp, #0xc] - cmp r5, #0 - str r1, [r0] - bne _0224969A - ldr r6, [r4, #0x14] - cmp r6, #2 - blt _02249618 -_0224969A: - cmp r5, #0 - bne _02249748 - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - mov r0, #0 - str r0, [r4, #0x14] - b _02249CA2 -_022496AA: - ldr r6, [r4, #0x14] - cmp r6, #2 - bge _02249744 - mov r0, #0x71 - lsl r0, r0, #2 - add r7, r4, r0 - add r0, r4, #0 - str r0, [sp, #0x10] - add r0, #0x14 - str r0, [sp, #0x10] - mov r0, #0x40 - str r0, [sp, #0x24] -_022496C2: - lsl r0, r6, #2 - add r3, r4, r0 - mov r0, #0x6f - lsl r0, r0, #2 - ldr r1, [r3, r0] - mov r0, #0x40 - tst r0, r1 - beq _02249730 - lsl r2, r6, #3 - ldr r1, [r7, r2] - ldr r0, _0224993C ; =0xFFFF8FFF - and r0, r1 - str r0, [sp, #0x34] - lsl r0, r1, #0x11 - lsr r0, r0, #0x1d - sub r0, r0, #1 - lsl r0, r0, #0x1d - lsr r1, r0, #0x11 - ldr r0, [sp, #0x34] - orr r0, r1 - str r0, [r7, r2] - ldr r0, [r7, r2] - lsl r0, r0, #0x11 - lsr r0, r0, #0x1d - bne _02249730 - mov r0, #0x6f - lsl r0, r0, #2 - ldr r0, [r3, r0] - ldr r1, [sp, #0x24] - mov r2, #0x32 - bic r0, r1 - mov r1, #0x6f - lsl r1, r1, #2 - str r0, [r3, r1] - mov r1, #0x36 - add r0, r1, #0 - add r0, #0xee - str r1, [r4, r0] - add r0, r4, #0 - mov r1, #1 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - add r1, r4, #0 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - ldr r0, [sp] - add r2, r6, #0 - bl ov12_02257E98 - mov r1, #0x46 - lsl r1, r1, #2 - str r0, [r4, r1] - mov r5, #1 -_02249730: - ldr r0, [sp, #0x10] - ldr r0, [r0] - add r1, r0, #1 - ldr r0, [sp, #0x10] - cmp r5, #0 - str r1, [r0] - bne _02249744 - ldr r6, [r4, #0x14] - cmp r6, #2 - blt _022496C2 -_02249744: - cmp r5, #0 - beq _0224974A -_02249748: - b _02249CA2 -_0224974A: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - mov r0, #0 - str r0, [r4, #0x14] - b _02249CA2 -_02249756: - ldr r7, [r4, #0x14] - cmp r7, #2 - bge _022497F4 - mov r0, #0x71 - lsl r0, r0, #2 - add r6, r4, r0 - add r0, r4, #0 - str r0, [sp, #0x14] - add r0, #0x14 - str r0, [sp, #0x14] - mov r0, #8 - str r0, [sp, #0x28] -_0224976E: - lsl r0, r7, #2 - add r3, r4, r0 - mov r0, #0x6f - lsl r0, r0, #2 - ldr r1, [r3, r0] - mov r0, #8 - tst r0, r1 - beq _022497E0 - lsl r0, r7, #3 - ldr r2, [r6, r0] - ldr r1, _02249940 ; =0xFFF1FFFF - and r1, r2 - mov ip, r1 - lsl r1, r2, #0xc - lsr r1, r1, #0x1d - sub r1, r1, #1 - lsl r1, r1, #0x1d - lsr r2, r1, #0xc - mov r1, ip - orr r1, r2 - str r1, [r6, r0] - ldr r1, [r6, r0] - lsl r1, r1, #0xc - lsr r1, r1, #0x1d - bne _022497E0 - mov r1, #0x6f - lsl r1, r1, #2 - ldr r1, [r3, r1] - ldr r2, [sp, #0x28] - bic r1, r2 - mov r2, #0x6f - lsl r2, r2, #2 - str r1, [r3, r2] - ldr r0, [r6, r0] - lsl r0, r0, #0xf - lsr r1, r0, #0x1e - add r0, r2, #0 - sub r0, #0xa4 - str r1, [r4, r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x6e - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - add r1, r4, #0 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - ldr r0, [sp] - add r2, r7, #0 - bl ov12_02257E98 - mov r1, #0x46 - lsl r1, r1, #2 - str r0, [r4, r1] - mov r5, #1 -_022497E0: - ldr r0, [sp, #0x14] - ldr r0, [r0] - add r1, r0, #1 - ldr r0, [sp, #0x14] - cmp r5, #0 - str r1, [r0] - bne _022497F4 - ldr r7, [r4, #0x14] - cmp r7, #2 - blt _0224976E -_022497F4: - cmp r5, #0 - bne _02249872 - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - mov r0, #0 - str r0, [r4, #0x14] - b _02249CA2 -_02249804: - ldr r6, [r4, #0x14] - cmp r6, #2 - bge _0224986E - add r7, r4, #0 - add r7, #0x14 -_0224980E: - lsl r0, r6, #2 - mov r1, #0x6f - add r0, r4, r0 - lsl r1, r1, #2 - ldr r2, [r0, r1] - mov r1, #3 - lsl r1, r1, #8 - tst r1, r2 - beq _0224985E - mov r1, #0x6f - lsl r1, r1, #2 - ldr r2, [r0, r1] - sub r1, #0xbc - sub r2, r2, r1 - mov r1, #0x6f - lsl r1, r1, #2 - str r2, [r0, r1] - ldr r1, [r0, r1] - mov r0, #3 - lsl r0, r0, #8 - tst r0, r1 - bne _0224985E - add r0, r4, #0 - mov r1, #1 - mov r2, #0xe9 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - add r1, r4, #0 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - ldr r0, [sp] - add r2, r6, #0 - bl ov12_02257E98 - mov r1, #0x46 - lsl r1, r1, #2 - str r0, [r4, r1] - mov r5, #1 -_0224985E: - ldr r0, [r7] - add r0, r0, #1 - str r0, [r7] - cmp r5, #0 - bne _0224986E - ldr r6, [r4, #0x14] - cmp r6, #2 - blt _0224980E -_0224986E: - cmp r5, #0 - beq _02249874 -_02249872: - b _02249CA2 -_02249874: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - mov r0, #0 - str r0, [r4, #0x14] - b _02249CA2 -_02249880: - ldr r6, [r4, #0x14] - cmp r6, #2 - bge _022498EC - add r7, r4, #0 - add r7, #0x14 -_0224988A: - lsl r0, r6, #2 - mov r1, #0x6f - add r0, r4, r0 - lsl r1, r1, #2 - ldr r2, [r0, r1] - mov r1, #7 - lsl r1, r1, #0xc - tst r1, r2 - beq _022498DC - mov r1, #0x6f - lsl r1, r1, #2 - ldr r2, [r0, r1] - mov r1, #1 - lsl r1, r1, #0xc - sub r2, r2, r1 - mov r1, #0x6f - lsl r1, r1, #2 - str r2, [r0, r1] - ldr r1, [r0, r1] - mov r0, #7 - lsl r0, r0, #0xc - tst r0, r1 - bne _022498DC - add r0, r4, #0 - mov r1, #1 - mov r2, #0xfa - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - add r1, r4, #0 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - ldr r0, [sp] - add r2, r6, #0 - bl ov12_02257E98 - mov r1, #0x46 - lsl r1, r1, #2 - str r0, [r4, r1] - mov r5, #1 -_022498DC: - ldr r0, [r7] - add r0, r0, #1 - str r0, [r7] - cmp r5, #0 - bne _022498EC - ldr r6, [r4, #0x14] - cmp r6, #2 - blt _0224988A -_022498EC: - cmp r5, #0 - bne _022499AE - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - mov r0, #0 - str r0, [r4, #0x14] - b _02249CA2 -_022498FC: - ldr r0, [r4, #0x14] - ldr r1, [sp, #4] - cmp r0, r1 - bge _022499AA - add r6, r4, #0 - mov r7, #2 - add r6, #0x14 -_0224990A: - add r1, r4, r0 - ldr r0, _02249944 ; =0x000021EC - ldrb r2, [r1, r0] - mov r0, #0x63 - lsl r0, r0, #2 - add r1, r4, r2 - ldrb r0, [r1, r0] - cmp r0, #0 - beq _02249998 - mov r0, #0x63 - lsl r0, r0, #2 - ldrb r0, [r1, r0] - sub r3, r0, #1 - mov r0, #0x63 - lsl r0, r0, #2 - strb r3, [r1, r0] - ldrb r0, [r1, r0] - cmp r0, #0 - bne _02249998 - mov r0, #0xc0 - mul r0, r2 - ldr r3, _02249948 ; =0x00002D8C - b _0224994C - .balign 4, 0 -_02249938: .word 0xFFFFFC7F -_0224993C: .word 0xFFFF8FFF -_02249940: .word 0xFFF1FFFF -_02249944: .word 0x000021EC -_02249948: .word 0x00002D8C -_0224994C: - add r0, r4, r0 - ldr r3, [r0, r3] - cmp r3, #0 - beq _02249998 - mov r3, #0x46 - lsl r3, r3, #2 - str r2, [r4, r3] - add r3, r4, #0 - add r3, #0xf5 - strb r7, [r3] - add r5, r4, #0 - ldr r3, _02249C84 ; =0x00000215 - add r5, #0xf6 - strh r3, [r5] - sub r3, #0x5d - ldrb r1, [r1, r3] - lsl r1, r1, #8 - orr r2, r1 - add r1, r4, #0 - add r1, #0xf8 - str r2, [r1] - ldr r1, _02249C88 ; =0x00002D90 - ldr r0, [r0, r1] - add r1, r7, #0 - bl DamageDivide - ldr r1, _02249C8C ; =0x0000215C - mov r2, #0x88 - str r0, [r4, r1] - add r0, r4, #0 - mov r1, #1 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - mov r5, #1 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] -_02249998: - ldr r0, [r6] - add r0, r0, #1 - str r0, [r6] - cmp r5, #0 - bne _022499AA - ldr r0, [r4, #0x14] - ldr r1, [sp, #4] - cmp r0, r1 - blt _0224990A -_022499AA: - cmp r5, #0 - beq _022499B0 -_022499AE: - b _02249CA2 -_022499B0: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - mov r0, #0 - str r0, [r4, #0x14] - b _02249CA2 -_022499BC: - mov r0, #6 - lsl r0, r0, #6 - ldr r1, [r4, r0] - mov r2, #3 - tst r2, r1 - beq _02249A44 - mov r2, #2 - tst r1, r2 - beq _022499F2 - add r0, r4, #0 - ldr r1, _02249C90 ; =0x00000321 - add r0, #0xf6 - strh r1, [r0] - add r0, r4, #0 - mov r1, #0 - add r0, #0xf5 - strb r1, [r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x68 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - b _02249A3A -_022499F2: - add r1, r0, #4 - ldr r1, [r4, r1] - sub r2, r1, #1 - add r1, r0, #4 - str r2, [r4, r1] - add r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, #0 - bne _02249A18 - add r0, r4, #0 - mov r1, #1 - mov r2, #0xea - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - b _02249A3A -_02249A18: - add r0, r4, #0 - ldr r1, _02249C90 ; =0x00000321 - add r0, #0xf6 - strh r1, [r0] - add r0, r4, #0 - mov r1, #0 - add r0, #0xf5 - strb r1, [r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x68 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] -_02249A3A: - mov r0, #0x4e - mov r1, #0x13 - lsl r0, r0, #2 - str r1, [r4, r0] - mov r5, #1 -_02249A44: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - b _02249CA2 -_02249A4C: - mov r0, #6 - lsl r0, r0, #6 - ldr r1, [r4, r0] - mov r2, #0xc - tst r2, r1 - beq _02249AD4 - mov r2, #8 - tst r1, r2 - beq _02249A82 - add r0, r4, #0 - ldr r1, _02249C94 ; =0x00000325 - add r0, #0xf6 - strh r1, [r0] - add r0, r4, #0 - mov r1, #0 - add r0, #0xf5 - strb r1, [r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x68 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - b _02249ACA -_02249A82: - add r1, r0, #4 - ldr r1, [r4, r1] - sub r2, r1, #1 - add r1, r0, #4 - str r2, [r4, r1] - add r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, #0 - bne _02249AA8 - add r0, r4, #0 - mov r1, #1 - mov r2, #0xeb - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - b _02249ACA -_02249AA8: - add r0, r4, #0 - ldr r1, _02249C94 ; =0x00000325 - add r0, #0xf6 - strh r1, [r0] - add r0, r4, #0 - mov r1, #0 - add r0, #0xf5 - strb r1, [r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x68 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] -_02249ACA: - mov r0, #0x4e - mov r1, #0x15 - lsl r0, r0, #2 - str r1, [r4, r0] - mov r5, #1 -_02249AD4: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - b _02249CA2 -_02249ADC: - mov r0, #6 - lsl r0, r0, #6 - ldr r1, [r4, r0] - mov r2, #0x30 - tst r2, r1 - beq _02249B68 - mov r2, #0x20 - tst r1, r2 - beq _02249B14 - mov r1, #0xca - add r0, r4, #0 - lsl r1, r1, #2 - add r0, #0xf6 - strh r1, [r0] - add r0, r4, #0 - mov r1, #0 - add r0, #0xf5 - strb r1, [r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x68 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - b _02249B5E -_02249B14: - add r1, r0, #4 - ldr r1, [r4, r1] - sub r2, r1, #1 - add r1, r0, #4 - str r2, [r4, r1] - add r0, r0, #4 - ldr r0, [r4, r0] - cmp r0, #0 - bne _02249B3A - add r0, r4, #0 - mov r1, #1 - mov r2, #0xec - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - b _02249B5E -_02249B3A: - mov r1, #0xca - add r0, r4, #0 - lsl r1, r1, #2 - add r0, #0xf6 - strh r1, [r0] - add r0, r4, #0 - mov r1, #0 - add r0, #0xf5 - strb r1, [r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x68 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] -_02249B5E: - mov r0, #0x4e - mov r1, #0x16 - lsl r0, r0, #2 - str r1, [r4, r0] - mov r5, #1 -_02249B68: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - b _02249CA2 -_02249B70: - mov r0, #6 - lsl r0, r0, #6 - ldr r2, [r4, r0] - mov r1, #0xc0 - add r0, r2, #0 - tst r0, r1 - beq _02249BFE - mov r0, #0x80 - tst r0, r2 - beq _02249BA8 - add r0, r4, #0 - ldr r1, _02249C98 ; =0x0000032B - add r0, #0xf6 - strh r1, [r0] - add r0, r4, #0 - mov r1, #0 - add r0, #0xf5 - strb r1, [r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x68 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - b _02249BF4 -_02249BA8: - add r0, r1, #0 - add r0, #0xc4 - ldr r0, [r4, r0] - sub r2, r0, #1 - add r0, r1, #0 - add r0, #0xc4 - add r1, #0xc4 - str r2, [r4, r0] - ldr r0, [r4, r1] - cmp r0, #0 - bne _02249BD2 - add r0, r4, #0 - mov r1, #1 - mov r2, #0xed - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - b _02249BF4 -_02249BD2: - add r0, r4, #0 - ldr r1, _02249C98 ; =0x0000032B - add r0, #0xf6 - strh r1, [r0] - add r0, r4, #0 - mov r1, #0 - add r0, #0xf5 - strb r1, [r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x68 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] -_02249BF4: - mov r0, #0x4e - mov r1, #0x14 - lsl r0, r0, #2 - str r1, [r4, r0] - mov r5, #1 -_02249BFE: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - b _02249CA2 -_02249C06: - mov r0, #6 - lsl r0, r0, #6 - ldr r1, [r4, r0] - mov r0, #2 - lsl r0, r0, #0xe - tst r0, r1 - beq _02249C40 - add r0, r4, #0 - ldr r1, _02249C9C ; =0x0000032D - add r0, #0xf6 - strh r1, [r0] - add r0, r4, #0 - mov r1, #0 - add r0, #0xf5 - strb r1, [r0] - add r0, r4, #0 - mov r1, #1 - mov r2, #0x68 - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - mov r1, #0x12 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] - mov r0, #0x4e - lsl r0, r0, #2 - str r1, [r4, r0] - mov r5, #1 -_02249C40: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - b _02249CA2 -_02249C48: - mov r1, #6 - lsl r1, r1, #6 - ldr r3, [r4, r1] - mov r2, #7 - lsl r2, r2, #0xc - add r0, r3, #0 - tst r0, r2 - beq _02249C7A - mov r0, #1 - lsl r0, r0, #0xc - sub r0, r3, r0 - str r0, [r4, r1] - ldr r0, [r4, r1] - tst r0, r2 - bne _02249C7A - add r0, r4, #0 - mov r1, #1 - mov r2, #0xee - bl ReadBattleScriptFromNarc - ldr r0, [r4, #8] - mov r5, #1 - str r0, [r4, #0xc] - mov r0, #0x16 - str r0, [r4, #8] -_02249C7A: - ldr r0, [r4, #0x10] - add r0, r0, #1 - str r0, [r4, #0x10] - b _02249CA2 - nop -_02249C84: .word 0x00000215 -_02249C88: .word 0x00002D90 -_02249C8C: .word 0x0000215C -_02249C90: .word 0x00000321 -_02249C94: .word 0x00000325 -_02249C98: .word 0x0000032B -_02249C9C: .word 0x0000032D -_02249CA0: - mov r5, #2 -_02249CA2: - cmp r5, #0 - bne _02249CA8 - b _022494EC -_02249CA8: - cmp r5, #1 - bne _02249CB2 - ldr r0, [sp] - bl ov12_022642F0 -_02249CB2: - cmp r5, #2 - bne _02249CBE - mov r0, #0 - str r0, [r4, #0x10] - mov r0, #0xa - str r0, [r4, #8] -_02249CBE: - add sp, #0x3c - pop {r4, r5, r6, r7, pc} - .balign 4, 0 - thumb_func_end ov12_022494DC + .public BattleControllerPlayer_UpdateFieldCondition thumb_func_start ov12_02249CC4 ov12_02249CC4: ; 0x02249CC4 @@ -10445,7 +9404,7 @@ sPlayerBattleCommands: ; 0x0226CA90 .word ov12_02249190 .word ov12_0224930C .word ov12_02249460 - .word ov12_022494DC + .word BattleControllerPlayer_UpdateFieldCondition .word ov12_02249CC4 .word ov12_0224A70C .word ov12_0224A958 diff --git a/include/battle.h b/include/battle.h index 5ffd056cef..c59a862693 100644 --- a/include/battle.h +++ b/include/battle.h @@ -252,8 +252,8 @@ typedef struct BATTLECONTEXT { u8 unk_4[4]; ControllerCommand command; ControllerCommand commandNext; - int unk_10; - int unk_14; + int stateFieldConditionUpdate; + int fieldConditionUpdateData; int unk_18; int unk_1C; int unk_20; diff --git a/include/battle_controller_player.h b/include/battle_controller_player.h index e272cdda75..f7474a1c6e 100644 --- a/include/battle_controller_player.h +++ b/include/battle_controller_player.h @@ -18,10 +18,14 @@ void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTE void ov12_02249190(BattleSystem *bsys, BATTLECONTEXT *ctx); void ov12_0224930C(BattleSystem *bsys, BATTLECONTEXT *ctx); void ov12_02249460(BattleSystem *bsys, BATTLECONTEXT *ctx); +void BattleControllerPlayer_UpdateFieldCondition(BattleSystem *bsys, BATTLECONTEXT *ctx); //The following functions haven't been decompiled yet void ov12_0224E384(BattleSystem *bsys, BATTLECONTEXT *ctx); void BattleSystem_CheckMoveHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget, int moveNo); void BattleSystem_CheckMoveEffect(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget, int moveNo); +BOOL ov12_0224DC74(BATTLECONTEXT *ctx, ControllerCommand a1, ControllerCommand a2, int a3); +BOOL ov12_0224DD18(BATTLECONTEXT *ctx, ControllerCommand a1, ControllerCommand a2); +BOOL ov12_0224D7EC(BattleSystem *bsys, BATTLECONTEXT *ctx); #endif diff --git a/include/constants/battle.h b/include/constants/battle.h index 2808cd5298..e0fa0bfa05 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -151,6 +151,8 @@ enum Terrain { #define FIELD_CONDITION_WEATHER_CASTFORM (FIELD_CONDITION_RAIN_ALL | FIELD_CONDITION_SUN_ALL | FIELD_CONDITION_HAIL_ALL) #define FIELD_CONDITION_WEATHER (FIELD_CONDITION_RAIN_ALL | FIELD_CONDITION_SANDSTORM_ALL | FIELD_CONDITION_SUN_ALL | FIELD_CONDITION_HAIL_ALL | FIELD_CONDITION_FOG) +#define FIELD_CONDITION_GRAVITY_SHIFT 12 + //Field Side Conditions #define SIDE_CONDITION_REFLECT (1 << 0) #define SIDE_CONDITION_LIGHT_SCREEN (1 << 1) @@ -162,7 +164,10 @@ enum Terrain { #define SIDE_CONDITION_STEALTH_ROCKS (1 << 7) #define SIDE_CONDITION_TAILWIND (3 << 8) #define SIDE_CONDITION_TOXIC_SPIKES (1 << 10) -#define SIDE_CONDITION_12 (7 << 12) +#define SIDE_CONDITION_LUCKY_CHANT (7 << 12) + +#define SIDE_CONDITION_TAILWIND_SHIFT 8 +#define SIDE_CONDITION_LUCKY_CHANT_SHIFT 12 //Status #define STATUS_NONE 0 @@ -395,7 +400,7 @@ typedef enum ControllerCommand { CONTROLLER_COMMAND_6, CONTROLLER_COMMAND_7, CONTROLLER_COMMAND_8, - CONTROLLER_COMMAND_9, + CONTROLLER_COMMAND_UPDATE_FIELD_CONDITION, CONTROLLER_COMMAND_10, CONTROLLER_COMMAND_11, CONTROLLER_COMMAND_12, diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index f46fcf8264..70b3fbc884 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -662,8 +662,347 @@ void ov12_02249460(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->unk_EC == maxBattlers) { ctx->unk_EC = 0; - ctx->command = CONTROLLER_COMMAND_9; + ctx->command = CONTROLLER_COMMAND_UPDATE_FIELD_CONDITION; } else { ctx->command = (ControllerCommand) ctx->unk_21A8[ctx->unk_21E8[ctx->unk_EC]][0]; } } + +typedef enum UpdateFieldConditionState { + UFC_STATE_REFLECT, + UFC_STATE_LIGHT_SCREEN, + UFC_STATE_MIST, + UFC_STATE_SAFEGUARD, + UFC_STATE_TAILWIND, + UFC_STATE_LUCKY_CHANT, + UFC_STATE_WISH, + UFC_STATE_RAIN, + UFC_STATE_SANDSTORM, + UFC_STATE_SUN, + UFC_STATE_HAIL, + UFC_STATE_FOG, + UFC_STATE_GRAVITY, + UFC_STATE_END +} UpdateFieldConditionState; + +//static +void BattleControllerPlayer_UpdateFieldCondition(BattleSystem *bsys, BATTLECONTEXT *ctx) { + int flag = 0; + int side; + int maxBattlers = BattleSystem_GetMaxBattlers(bsys); + + do { + if (ov12_0224DC74(ctx, ctx->command, ctx->command, 1) == TRUE) { + return; + } + if (ov12_0224DD18(ctx, ctx->command, ctx->command) == TRUE) { + return; + } + if (ov12_0224D7EC(bsys, ctx) == TRUE) { + return; + } + + switch (ctx->stateFieldConditionUpdate) { + case UFC_STATE_REFLECT: + while (ctx->fieldConditionUpdateData < 2) { + side = ctx->fieldConditionUpdateData; + if (ctx->fieldSideConditionFlags[side] & SIDE_CONDITION_REFLECT) { + if (--ctx->fieldSideConditionData[side].reflectTurns == 0) { + ctx->fieldSideConditionFlags[side] &= ~SIDE_CONDITION_REFLECT; + ctx->moveTemp = MOVE_REFLECT; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 50); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + ctx->battlerIdTemp = ov12_02257E98(bsys, ctx, side); + flag = 1; + } + } + ctx->fieldConditionUpdateData++; + if (flag) { + break; + } + } + if (!flag) { + ctx->stateFieldConditionUpdate++; + ctx->fieldConditionUpdateData = 0; + } + break; + case UFC_STATE_LIGHT_SCREEN: + while (ctx->fieldConditionUpdateData < 2) { + side = ctx->fieldConditionUpdateData; + if (ctx->fieldSideConditionFlags[side] & SIDE_CONDITION_LIGHT_SCREEN) { + if (--ctx->fieldSideConditionData[side].lightScreenTurns == 0) { + ctx->fieldSideConditionFlags[side] &= ~SIDE_CONDITION_LIGHT_SCREEN; + ctx->moveTemp = MOVE_LIGHT_SCREEN; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 50); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + ctx->battlerIdTemp = ov12_02257E98(bsys, ctx, side); + flag = 1; + } + } + ctx->fieldConditionUpdateData++; + if (flag) { + break; + } + } + if (!flag) { + ctx->stateFieldConditionUpdate++; + ctx->fieldConditionUpdateData = 0; + } + break; + case UFC_STATE_MIST: + while (ctx->fieldConditionUpdateData < 2) { + side = ctx->fieldConditionUpdateData; + if (ctx->fieldSideConditionFlags[side] & SIDE_CONDITION_MIST) { + if (--ctx->fieldSideConditionData[side].mistTurns == 0) { + ctx->fieldSideConditionFlags[side] &= ~SIDE_CONDITION_MIST; + ctx->moveTemp = MOVE_MIST; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 50); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + ctx->battlerIdTemp = ov12_02257E98(bsys, ctx, side); + flag = 1; + } + } + ctx->fieldConditionUpdateData++; + if (flag) { + break; + } + } + if (!flag) { + ctx->stateFieldConditionUpdate++; + ctx->fieldConditionUpdateData = 0; + } + break; + case UFC_STATE_SAFEGUARD: + while (ctx->fieldConditionUpdateData < 2) { + side = ctx->fieldConditionUpdateData; + if (ctx->fieldSideConditionFlags[side] & SIDE_CONDITION_SAFEGUARD) { + if (--ctx->fieldSideConditionData[side].safeguardTurns == 0) { + ctx->fieldSideConditionFlags[side] &= ~SIDE_CONDITION_SAFEGUARD; + ctx->battlerIdTemp = ctx->fieldSideConditionData[side].safeguardBattler; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 110); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + ctx->battlerIdTemp = ov12_02257E98(bsys, ctx, side); + flag = 1; + } + } + ctx->fieldConditionUpdateData++; + if (flag) { + break; + } + } + if (!flag) { + ctx->stateFieldConditionUpdate++; + ctx->fieldConditionUpdateData = 0; + } + break; + case UFC_STATE_TAILWIND: + while (ctx->fieldConditionUpdateData < 2) { + side = ctx->fieldConditionUpdateData; + if (ctx->fieldSideConditionFlags[side] & SIDE_CONDITION_TAILWIND) { + ctx->fieldSideConditionFlags[side] -= 1 << SIDE_CONDITION_TAILWIND_SHIFT; + if ((ctx->fieldSideConditionFlags[side] & SIDE_CONDITION_TAILWIND) == 0) { + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 233); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + ctx->battlerIdTemp = ov12_02257E98(bsys, ctx, side); + flag = 1; + } + } + ctx->fieldConditionUpdateData++; + if (flag) { + break; + } + } + if (!flag) { + ctx->stateFieldConditionUpdate++; + ctx->fieldConditionUpdateData = 0; + } + break; + case UFC_STATE_LUCKY_CHANT: + while (ctx->fieldConditionUpdateData < 2) { + side = ctx->fieldConditionUpdateData; + if (ctx->fieldSideConditionFlags[side] & SIDE_CONDITION_LUCKY_CHANT) { + ctx->fieldSideConditionFlags[side] -= 1 << SIDE_CONDITION_LUCKY_CHANT_SHIFT; + if ((ctx->fieldSideConditionFlags[side] & SIDE_CONDITION_LUCKY_CHANT) == 0) { + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 250); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + ctx->battlerIdTemp = ov12_02257E98(bsys, ctx, side); + flag = 1; + } + } + ctx->fieldConditionUpdateData++; + if (flag) { + break; + } + } + if (!flag) { + ctx->stateFieldConditionUpdate++; + ctx->fieldConditionUpdateData = 0; + } + break; + case UFC_STATE_WISH: + while (ctx->fieldConditionUpdateData < maxBattlers) { + side = ctx->turnOrder[ctx->fieldConditionUpdateData]; + if (ctx->fieldConditionData.wishTurns[side]) { + if (--ctx->fieldConditionData.wishTurns[side] == 0 && ctx->battleMons[side].hp) { + ctx->battlerIdTemp = side; + ctx->buffMsg.tag = 2; + ctx->buffMsg.id = msg_0197_00533; //Spheal's wish came true! + ctx->buffMsg.param[0] = side | (ctx->fieldConditionData.wishTarget[side] << 8); + ctx->hpCalc = DamageDivide(ctx->battleMons[side].maxHp, 2); + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 136); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + flag = 1; + } + } + ctx->fieldConditionUpdateData++; + if (flag) { + break; + } + } + if (!flag) { + ctx->stateFieldConditionUpdate++; + ctx->fieldConditionUpdateData = 0; + } + break; + case UFC_STATE_RAIN: + if (ctx->fieldCondition & FIELD_CONDITION_RAIN_ALL) { + if (ctx->fieldCondition & FIELD_CONDITION_RAIN_PERMANENT) { + ctx->buffMsg.id = msg_0197_00801; //Rain continues to fall. + ctx->buffMsg.tag = 0; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 104); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } else if (--ctx->fieldConditionData.weatherTurns == 0) { + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 234); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } else { + ctx->buffMsg.id = msg_0197_00801; //Rain continues to fall. + ctx->buffMsg.tag = 0; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 104); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } + ctx->tempData = 19; + flag = 1; + } + ctx->stateFieldConditionUpdate++; + break; + case UFC_STATE_SANDSTORM: + if (ctx->fieldCondition & FIELD_CONDITION_SANDSTORM_ALL) { + if (ctx->fieldCondition & FIELD_CONDITION_SANDSTORM_PERMANENT) { + ctx->buffMsg.id = msg_0197_00805; //The sandstorm rages. + ctx->buffMsg.tag = 0; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 104); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } else if (--ctx->fieldConditionData.weatherTurns == 0) { + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 235); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } else { + ctx->buffMsg.id = msg_0197_00805; //The sandstorm rages. + ctx->buffMsg.tag = 0; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 104); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } + ctx->tempData = 21; + flag = 1; + } + ctx->stateFieldConditionUpdate++; + break; + case UFC_STATE_SUN: + if (ctx->fieldCondition & FIELD_CONDITION_SUN_ALL) { + if (ctx->fieldCondition & FIELD_CONDITION_SUN_PERMANENT) { + ctx->buffMsg.id = msg_0197_00808; //The sunlight is strong. + ctx->buffMsg.tag = 0; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 104); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } else if (--ctx->fieldConditionData.weatherTurns == 0) { + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 236); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } else { + ctx->buffMsg.id = msg_0197_00808; //The sunlight is strong. + ctx->buffMsg.tag = 0; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 104); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } + ctx->tempData = 22; + flag = 1; + } + ctx->stateFieldConditionUpdate++; + break; + case UFC_STATE_HAIL: + if (ctx->fieldCondition & FIELD_CONDITION_HAIL_ALL) { + if (ctx->fieldCondition & FIELD_CONDITION_HAIL_PERMANENT) { + ctx->buffMsg.id = msg_0197_00811; //Hail continues to fall. + ctx->buffMsg.tag = 0; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 104); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } else if (--ctx->fieldConditionData.weatherTurns == 0) { + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 237); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } else { + ctx->buffMsg.id = msg_0197_00811; //Hail continues to fall. + ctx->buffMsg.tag = 0; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 104); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + } + ctx->tempData = 20; + flag = 1; + } + ctx->stateFieldConditionUpdate++; + break; + case UFC_STATE_FOG: + if (ctx->fieldCondition & FIELD_CONDITION_FOG) { + ctx->buffMsg.id = msg_0197_00813; //The fog is deep... + ctx->buffMsg.tag = 0; + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 104); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + ctx->tempData = 18; + flag = 1; + } + ctx->stateFieldConditionUpdate++; + break; + case UFC_STATE_GRAVITY: + if (ctx->fieldCondition & FIELD_CONDITION_GRAVITY) { + ctx->fieldCondition -= (1 << FIELD_CONDITION_GRAVITY_SHIFT); + if ((ctx->fieldCondition & FIELD_CONDITION_GRAVITY) == 0) { + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 238); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_RUN_SCRIPT; + flag = 1; + } + } + ctx->stateFieldConditionUpdate++; + break; + case UFC_STATE_END: + flag = 2; + break; + } + } while (!flag); + + if (flag == 1) { + ov12_022642F0(bsys); + } + + if (flag == 2) { + ctx->stateFieldConditionUpdate = 0; + ctx->command = CONTROLLER_COMMAND_10; + } +} diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index d52009131a..84c457ae0e 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -1752,7 +1752,7 @@ void BattleContext_Init(BATTLECONTEXT *ctx) { ctx->checkMultiHit = 0; //unidentified states for different state machines - ctx->unk_10 = 0; + ctx->stateFieldConditionUpdate = 0; ctx->unk_18 = 0; ctx->unk_20 = 0; ctx->unk_28 = 0; @@ -6577,7 +6577,7 @@ u32 TryCriticalHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker if ((BattleSystem_Random(bsys) % sCritChance[critUp]) == 0) { if (!CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_BATTLE_ARMOR) && !CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_SHELL_ARMOR) && - !(sideCondition & SIDE_CONDITION_12) && !(moveEffect & MOVE_EFFECT_FLAG_LUCKY_CHANT)) { + !(sideCondition & SIDE_CONDITION_LUCKY_CHANT) && !(moveEffect & MOVE_EFFECT_FLAG_LUCKY_CHANT)) { ret = 2; } } From 2c8fe78477c0fc285147c4ccb98248fb61ba1324 Mon Sep 17 00:00:00 2001 From: Adrienn Tindall <33725376+adrienntindall@users.noreply.github.com> Date: Tue, 18 Jul 2023 11:34:42 -0400 Subject: [PATCH 18/18] Re-enabled pedantic flag =( --- common.mk | 2 +- src/battle/battle_controller_player.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common.mk b/common.mk index 0f6628cec7..4ceb85b854 100644 --- a/common.mk +++ b/common.mk @@ -108,7 +108,7 @@ XMAP := $(NEF).xMAP EXCCFLAGS := -Cpp_exceptions off -MWCFLAGS = $(DEFINES) $(OPTFLAGS) -enum int -lang c99 $(EXCCFLAGS) -gccext,on -proc $(PROC) -msgstyle gcc -gccinc -i ./include -i ./include/library -i $(WORK_DIR)/files -I$(WORK_DIR)/lib/include -ipa file -interworking -inline on,noauto -char signed -W all -W nopedantic -W noimpl_signedunsigned -W noimplicitconv -W nounusedarg -W nomissingreturn -W error +MWCFLAGS = $(DEFINES) $(OPTFLAGS) -enum int -lang c99 $(EXCCFLAGS) -gccext,on -proc $(PROC) -msgstyle gcc -gccinc -i ./include -i ./include/library -i $(WORK_DIR)/files -I$(WORK_DIR)/lib/include -ipa file -interworking -inline on,noauto -char signed -W all -W pedantic -W noimpl_signedunsigned -W noimplicitconv -W nounusedarg -W nomissingreturn -W error MWASFLAGS = $(DEFINES) -proc $(PROC_S) -gccinc -i . -i ./include -i $(WORK_DIR)/asm/include -i $(WORK_DIR)/files -i $(WORK_DIR)/lib/asm/include -i $(WORK_DIR)/lib/NitroDWC/asm/include -i $(WORK_DIR)/lib/NitroSDK/asm/include -i $(WORK_DIR)/lib/syscall/asm/include -I$(WORK_DIR)/lib/include -DSDK_ASM MWLDFLAGS := -proc $(PROC) -nopic -nopid -interworking -map closure,unused -symtab sort -m _start -msgstyle gcc diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 70b3fbc884..672e05f2c3 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -130,7 +130,7 @@ typedef enum BattleSelectState { BS_STATE_15, BS_STATE_16, BS_STATE_END -} SelectionScreenInputState; +} BattleSelectState; //static void BattleControllerPlayer_SelectionScreenInput(BattleSystem *bsys, BATTLECONTEXT *ctx) {