diff --git a/asm/include/overlay_10.inc b/asm/include/overlay_10.inc index ffa7c2adea..bf82738a6e 100644 --- a/asm/include/overlay_10.inc +++ b/asm/include/overlay_10.inc @@ -37,6 +37,6 @@ .public GetNaturalGiftType .public ov12_022558F8 .public CalcMoveDamage -.public GetItemHoldEffect +.public GetItemVar .public ov12_02258800 .public ov12_02258BB4 diff --git a/asm/include/overlay_12_0224E4FC.inc b/asm/include/overlay_12_0224E4FC.inc index 3bafcb97a9..d189db6bc0 100644 --- a/asm/include/overlay_12_0224E4FC.inc +++ b/asm/include/overlay_12_0224E4FC.inc @@ -134,13 +134,13 @@ .public TrySyncronizeStatus .public TryUseHeldItem .public CheckItemGradualHPRestore -.public ov12_02254E7C -.public ov12_0225551C +.public CheckUseHeldItem +.public TryHeldItemNegativeEffect .public GetBattlerHeldItem .public ov12_0225561C .public CheckItemEffectOnHit .public GetBattlerHeldItemEffect -.public BattleSystem_GetHeldItemDamageBoost +.public GetHeldItemModifier .public GetNaturalGiftPower .public GetNaturalGiftType .public ov12_022558F8 @@ -164,7 +164,7 @@ .public CheckLegalMetronomeMove .public IsMoveEncored .public CheckLegalMeFirstMove -.public GetItemHoldEffect +.public GetItemVar .public ov12_02257E98 .public ov12_02257EC0 .public CheckStatusEffectsSubstitute diff --git a/asm/include/overlay_12_battle_command.inc b/asm/include/overlay_12_battle_command.inc index a3b7e26396..207a2e0a01 100644 --- a/asm/include/overlay_12_battle_command.inc +++ b/asm/include/overlay_12_battle_command.inc @@ -323,8 +323,8 @@ .public BtlCmd_TrickRoom .public BtlCmd_CheckMoveFinished .public BtlCmd_CheckItemEffect -.public BtlCmd_GetItemEffect .public BtlCmd_GetItemHoldEffect +.public BtlCmd_GetItemModifier .public BtlCmd_TryCamouflage .public BtlCmd_NaturePower .public BtlCmd_SecretPower diff --git a/asm/include/overlay_12_battle_controller_opponent.inc b/asm/include/overlay_12_battle_controller_opponent.inc index 3c693a8e25..a46a5d0ab9 100644 --- a/asm/include/overlay_12_battle_controller_opponent.inc +++ b/asm/include/overlay_12_battle_controller_opponent.inc @@ -234,7 +234,7 @@ .public ov12_02253DA0 .public GetBattlerHeldItemEffect .public CalcMoveDamage -.public GetItemHoldEffect +.public GetItemVar .public ov12_022581BC .public ov12_022581D4 .public ov12_022582B8 diff --git a/asm/include/overlay_12_battle_controller_player.inc b/asm/include/overlay_12_battle_controller_player.inc index ab0e077ff0..512fe4c6cd 100644 --- a/asm/include/overlay_12_battle_controller_player.inc +++ b/asm/include/overlay_12_battle_controller_player.inc @@ -102,12 +102,12 @@ .public TrySyncronizeStatus .public TryUseHeldItem .public CheckItemGradualHPRestore -.public ov12_02254E7C -.public ov12_0225551C +.public CheckUseHeldItem +.public TryHeldItemNegativeEffect .public ov12_0225561C .public CheckItemEffectOnHit .public GetBattlerHeldItemEffect -.public BattleSystem_GetHeldItemDamageBoost +.public GetHeldItemModifier .public ov12_02255920 .public ov12_022565E0 .public ov12_02256694 diff --git a/asm/overlay_10.s b/asm/overlay_10.s index 1ca6ef7849..6a09989053 100644 --- a/asm/overlay_10.s +++ b/asm/overlay_10.s @@ -4195,7 +4195,7 @@ ov10_0221DE24: ; 0x0221DE24 ldrh r1, [r2, r1] add r0, r4, #0 mov r2, #1 - bl GetItemHoldEffect + bl GetItemVar mov r1, #0xd7 lsl r1, r1, #2 str r0, [r4, r1] @@ -4208,7 +4208,7 @@ _0221DE64: add r0, r4, #0 ldrh r1, [r2, r1] mov r2, #1 - bl GetItemHoldEffect + bl GetItemVar mov r1, #0xd7 lsl r1, r1, #2 str r0, [r4, r1] @@ -6696,13 +6696,13 @@ _0221F132: ldr r1, [sp, #0x1c] add r0, r6, #0 mov r2, #0xb - bl GetItemHoldEffect + bl GetItemVar add r4, r0, #0 beq _0221F166 ldr r1, [sp, #0x1c] add r0, r6, #0 mov r2, #0xc - bl GetItemHoldEffect + bl GetItemVar add r7, r0, #0 b _0221F3B4 _0221F15A: @@ -6718,7 +6718,7 @@ _0221F168: ldr r1, [sp, #0x1c] add r0, r6, #0 mov r2, #1 - bl GetItemHoldEffect + bl GetItemVar sub r0, #0x7e cmp r0, #0xf bhi _0221F1E4 @@ -8771,7 +8771,7 @@ _02220104: add r0, r5, #0 lsr r1, r1, #0x10 mov r2, #1 - bl GetItemHoldEffect + bl GetItemVar str r0, [sp, #0x44] add r0, r6, #0 mov r1, #0xb1 @@ -9595,13 +9595,13 @@ _022207BC: add r0, r4, #0 add r1, r6, #0 mov r2, #0x26 - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _022207FE add r0, r4, #0 add r1, r6, #0 mov r2, #0x36 - bl GetItemHoldEffect + bl GetItemVar lsl r0, r0, #0x18 lsr r2, r0, #0x18 beq _02220816 @@ -9628,7 +9628,7 @@ _022207FE: add r0, r4, #0 add r1, r6, #0 mov r2, #0xf - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _02220834 ldr r0, _022209DC ; =0x00002DAC @@ -9656,7 +9656,7 @@ _02220834: add r0, r4, #0 add r1, r6, #0 mov r2, #0x10 - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _0222086E ldr r0, _022209DC ; =0x00002DAC @@ -9685,7 +9685,7 @@ _0222086E: add r0, r4, #0 add r1, r6, #0 mov r2, #0x11 - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _022208A2 ldr r0, _022209DC ; =0x00002DAC @@ -9710,7 +9710,7 @@ _022208A2: add r0, r4, #0 add r1, r6, #0 mov r2, #0x12 - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _022208D6 ldr r0, _022209DC ; =0x00002DAC @@ -9735,7 +9735,7 @@ _022208D6: add r0, r4, #0 add r1, r6, #0 mov r2, #0x13 - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _0222090A ldr r0, _022209DC ; =0x00002DAC @@ -9760,7 +9760,7 @@ _0222090A: add r0, r4, #0 add r1, r6, #0 mov r2, #0x14 - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _02220940 ldr r0, _022209E0 ; =0x00002DB0 @@ -9797,7 +9797,7 @@ _02220950: add r0, r4, #0 add r1, r6, #0 mov r2, #0x1b - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _02220970 ldr r0, _022209C4 ; =0x000003D3 @@ -9813,7 +9813,7 @@ _02220970: add r0, r4, #0 add r1, r6, #0 mov r2, #0x1c - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _02220990 ldr r0, _022209C4 ; =0x000003D3 @@ -9829,7 +9829,7 @@ _02220990: add r0, r4, #0 add r1, r6, #0 mov r2, #0x1d - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _022209B0 ldr r0, _022209C4 ; =0x000003D3 @@ -9845,7 +9845,7 @@ _022209B0: add r0, r4, #0 add r1, r6, #0 mov r2, #0x1e - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _022209F8 ldr r0, _022209C4 ; =0x000003D3 @@ -9873,7 +9873,7 @@ _022209F8: add r0, r4, #0 add r1, r6, #0 mov r2, #0x1f - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _02220A16 ldr r0, _02220AA0 ; =0x000003D3 @@ -9888,7 +9888,7 @@ _02220A16: add r0, r4, #0 add r1, r6, #0 mov r2, #0x20 - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _02220A36 ldr r0, _02220AA0 ; =0x000003D3 @@ -9904,7 +9904,7 @@ _02220A36: add r0, r4, #0 add r1, r6, #0 mov r2, #0x16 - bl GetItemHoldEffect + bl GetItemVar cmp r0, #0 beq _02220A62 mov r0, #7 diff --git a/asm/overlay_12_0224E4FC_s.s b/asm/overlay_12_0224E4FC_s.s index eea2c3cde5..158e580103 100644 --- a/asm/overlay_12_0224E4FC_s.s +++ b/asm/overlay_12_0224E4FC_s.s @@ -11,1422 +11,10 @@ .public sTypeEffectiveness .public ov12_02251C74 .public CheckMoveEffectOnField - - thumb_func_start ov12_02254E7C -ov12_02254E7C: ; 0x02254E7C - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - str r0, [sp] - add r4, r1, #0 - mov r0, #0 - str r0, [sp, #0xc] - str r2, [sp, #4] - add r0, r4, #0 - add r1, r2, #0 - add r6, r3, #0 - bl GetBattlerHeldItemEffect - str r0, [sp, #0x10] - ldr r1, [sp, #4] - add r0, r4, #0 - mov r2, #0 - bl BattleSystem_GetHeldItemDamageBoost - add r7, r0, #0 - ldr r0, [sp, #4] - mov r3, #0xc0 - add r5, r0, #0 - ldr r0, _022551A0 ; =0x00002D8C - mul r5, r3 - add r1, r4, r0 - ldr r2, [r1, r5] - str r1, [sp, #0x14] - cmp r2, #0 - bne _02254EB8 - b _02255516 -_02254EB8: - ldr r1, [sp, #0x10] - cmp r1, #0x36 - bhi _02254F44 - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_02254ECA: ; jump table - .short _02255502 - _02254ECA - 2 ; case 0 - .short _02254F38 - _02254ECA - 2 ; case 1 - .short _02255502 - _02254ECA - 2 ; case 2 - .short _02255502 - _02254ECA - 2 ; case 3 - .short _02255502 - _02254ECA - 2 ; case 4 - .short _02254F78 - _02254ECA - 2 ; case 5 - .short _02254F8E - _02254ECA - 2 ; case 6 - .short _02254FA4 - _02254ECA - 2 ; case 7 - .short _02254FBA - _02254ECA - 2 ; case 8 - .short _02254FD0 - _02254ECA - 2 ; case 9 - .short _02254FE6 - _02254ECA - 2 ; case 10 - .short _0225504A - _02254ECA - 2 ; case 11 - .short _02255062 - _02254ECA - 2 ; case 12 - .short _02254F54 - _02254ECA - 2 ; case 13 - .short _0225515E - _02254ECA - 2 ; case 14 - .short _022551C8 - _02254ECA - 2 ; case 15 - .short _02255206 - _02254ECA - 2 ; case 16 - .short _02255244 - _02254ECA - 2 ; case 17 - .short _02255282 - _02254ECA - 2 ; case 18 - .short _02255502 - _02254ECA - 2 ; case 19 - .short _02255502 - _02254ECA - 2 ; case 20 - .short _02255502 - _02254ECA - 2 ; case 21 - .short _02255502 - _02254ECA - 2 ; case 22 - .short _02255502 - _02254ECA - 2 ; case 23 - .short _02255502 - _02254ECA - 2 ; case 24 - .short _02255502 - _02254ECA - 2 ; case 25 - .short _02255502 - _02254ECA - 2 ; case 26 - .short _02255502 - _02254ECA - 2 ; case 27 - .short _02255502 - _02254ECA - 2 ; case 28 - .short _02255502 - _02254ECA - 2 ; case 29 - .short _02255502 - _02254ECA - 2 ; case 30 - .short _02255502 - _02254ECA - 2 ; case 31 - .short _02255502 - _02254ECA - 2 ; case 32 - .short _02255502 - _02254ECA - 2 ; case 33 - .short _02255502 - _02254ECA - 2 ; case 34 - .short _02255502 - _02254ECA - 2 ; case 35 - .short _022552C2 - _02254ECA - 2 ; case 36 - .short _02255308 - _02254ECA - 2 ; case 37 - .short _02255350 - _02254ECA - 2 ; case 38 - .short _02255398 - _02254ECA - 2 ; case 39 - .short _022553E2 - _02254ECA - 2 ; case 40 - .short _0225542A - _02254ECA - 2 ; case 41 - .short _0225546E - _02254ECA - 2 ; case 42 - .short _02255502 - _02254ECA - 2 ; case 43 - .short _02255128 - _02254ECA - 2 ; case 44 - .short _02255502 - _02254ECA - 2 ; case 45 - .short _02255502 - _02254ECA - 2 ; case 46 - .short _02255502 - _02254ECA - 2 ; case 47 - .short _02255502 - _02254ECA - 2 ; case 48 - .short _022550E0 - _02254ECA - 2 ; case 49 - .short _02255502 - _02254ECA - 2 ; case 50 - .short _02255502 - _02254ECA - 2 ; case 51 - .short _02255502 - _02254ECA - 2 ; case 52 - .short _02255502 - _02254ECA - 2 ; case 53 - .short _0225510A - _02254ECA - 2 ; case 54 -_02254F38: - add r1, r4, r5 - add r0, r0, #4 - ldr r0, [r1, r0] - lsr r0, r0, #1 - cmp r2, r0 - bls _02254F46 -_02254F44: - b _02255502 -_02254F46: - ldr r0, _022551A4 ; =0x0000215C - str r7, [r4, r0] - mov r0, #0xc6 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02254F54: - add r1, r4, r5 - add r0, r0, #4 - ldr r1, [r1, r0] - lsr r0, r1, #1 - cmp r2, r0 - bhi _02255056 - add r0, r7, #0 - mul r0, r1 - mov r1, #0x64 - bl DamageDivide - ldr r1, _022551A4 ; =0x0000215C - str r0, [r4, r1] - mov r0, #0xc6 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02254F78: - add r1, r4, r5 - add r0, #0x20 - ldr r1, [r1, r0] - mov r0, #0x40 - tst r0, r1 - beq _02255056 - mov r0, #0xc7 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02254F8E: - add r1, r4, r5 - add r0, #0x20 - ldr r1, [r1, r0] - mov r0, #7 - tst r0, r1 - beq _02255056 - mov r0, #0xc8 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02254FA4: - add r1, r4, r5 - add r0, #0x20 - ldr r1, [r1, r0] - ldr r0, _022551A8 ; =0x00000F88 - tst r0, r1 - beq _02255056 - mov r0, #0xc9 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02254FBA: - add r1, r4, r5 - add r0, #0x20 - ldr r1, [r1, r0] - mov r0, #0x10 - tst r0, r1 - beq _02255056 - mov r0, #0xca - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02254FD0: - add r1, r4, r5 - add r0, #0x20 - ldr r1, [r1, r0] - mov r0, #0x20 - tst r0, r1 - beq _02255056 - mov r0, #0xcb - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02254FE6: - mov r0, #0 - str r0, [sp, #8] - add r0, r4, r5 - ldr r3, _022551AC ; =0x00002D4C - add r1, r0, #0 -_02254FF0: - ldrh r2, [r0, r3] - cmp r2, #0 - beq _02254FFE - ldr r2, _022551B0 ; =0x00002D6C - ldrb r2, [r1, r2] - cmp r2, #0 - beq _0225500C -_02254FFE: - ldr r2, [sp, #8] - add r0, r0, #2 - add r2, r2, #1 - add r1, r1, #1 - str r2, [sp, #8] - cmp r2, #4 - blt _02254FF0 -_0225500C: - ldr r0, [sp, #8] - cmp r0, #4 - beq _02255056 - mov r0, #0xb5 - lsl r0, r0, #6 - ldr r1, [sp, #8] - add r0, r4, r0 - add r0, r0, r5 - add r1, #0x1f - add r2, r7, #0 - bl AddBattlerVar - ldr r0, [sp] - ldr r2, [sp, #4] - add r1, r4, #0 - bl CopyBattleMonToPartyMon - ldr r0, [sp, #8] - add r1, r4, r5 - lsl r0, r0, #1 - add r1, r1, r0 - ldr r0, _022551AC ; =0x00002D4C - ldrh r1, [r1, r0] - mov r0, #0x49 - lsl r0, r0, #2 - str r1, [r4, r0] - mov r0, #0xcc - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_0225504A: - add r1, r4, r5 - add r0, #0x24 - ldr r1, [r1, r0] - mov r0, #7 - tst r0, r1 - bne _02255058 -_02255056: - b _02255502 -_02255058: - mov r0, #0xcd - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02255062: - add r1, r0, #0 - add r1, #0x20 - add r1, r4, r1 - ldr r2, [r1, r5] - lsl r3, r2, #0x18 - lsr r3, r3, #0x18 - bne _0225507C - add r3, r4, r5 - add r0, #0x24 - ldr r3, [r3, r0] - mov r0, #7 - tst r0, r3 - beq _0225516A -_0225507C: - mov r0, #0x40 - tst r0, r2 - beq _02255086 - mov r0, #0xc7 - str r0, [r6] -_02255086: - ldr r2, [r1, r5] - mov r0, #7 - tst r0, r2 - beq _02255092 - mov r0, #0xc8 - str r0, [r6] -_02255092: - ldr r2, [r1, r5] - ldr r0, _022551A8 ; =0x00000F88 - tst r0, r2 - beq _0225509E - mov r0, #0xc9 - str r0, [r6] -_0225509E: - ldr r2, [r1, r5] - mov r0, #0x10 - tst r0, r2 - beq _022550AA - mov r0, #0xca - str r0, [r6] -_022550AA: - ldr r2, [r1, r5] - mov r0, #0x20 - tst r0, r2 - beq _022550B6 - mov r0, #0xcb - str r0, [r6] -_022550B6: - ldr r0, _022551B4 ; =0x00002DB0 - mov r2, #7 - add r0, r4, r0 - ldr r3, [r0, r5] - tst r2, r3 - beq _022550C6 - mov r2, #0xcd - str r2, [r6] -_022550C6: - ldr r1, [r1, r5] - lsl r1, r1, #0x18 - lsr r1, r1, #0x18 - beq _022550DA - ldr r1, [r0, r5] - mov r0, #7 - tst r0, r1 - beq _022550DA - mov r0, #0xce - str r0, [r6] -_022550DA: - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_022550E0: - ldr r7, _022551B8 ; =0x00002D58 - add r1, r4, r5 - mov r0, #0 - mov r5, #6 - add r3, r7, #0 -_022550EA: - ldrsb r2, [r1, r3] - cmp r2, #6 - bge _022550F6 - mov r2, #1 - strb r5, [r1, r7] - str r2, [sp, #0xc] -_022550F6: - add r0, r0, #1 - add r1, r1, #1 - cmp r0, #8 - blt _022550EA - ldr r0, [sp, #0xc] - cmp r0, #1 - bne _0225516A - mov r0, #0xd3 - str r0, [r6] - b _02255502 -_0225510A: - add r1, r4, r5 - add r0, #0x24 - ldr r1, [r1, r0] - mov r0, #0xf - lsl r0, r0, #0x10 - tst r0, r1 - beq _0225516A - mov r0, #6 - add r3, #0x70 - str r0, [r4, r3] - mov r0, #0xd4 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02255128: - ldr r1, [sp, #4] - add r0, r4, #0 - bl GetBattlerAbility - cmp r0, #0x52 - bne _0225513A - lsr r0, r7, #0x1f - add r0, r7, r0 - asr r7, r0, #1 -_0225513A: - ldr r0, [sp, #4] - mov r1, #0xc0 - mul r1, r0 - ldr r0, _022551BC ; =0x00002D90 - add r1, r4, r1 - ldr r0, [r1, r0] - add r1, r7, #0 - bl _u32_div_f - ldr r1, [sp, #0x14] - ldr r1, [r1, r5] - cmp r1, r0 - bhi _0225516A - ldr r0, _022551C0 ; =0x00000109 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_0225515E: - add r1, r4, r5 - add r0, r0, #4 - ldr r0, [r1, r0] - lsr r1, r0, #1 - cmp r2, r1 - bls _0225516C -_0225516A: - b _02255502 -_0225516C: - add r1, r7, #0 - bl DamageDivide - ldr r1, _022551A4 ; =0x0000215C - add r2, r4, r5 - str r0, [r4, r1] - mov r0, #0x13 - mov r1, #0 - lsl r0, r0, #4 - str r1, [r4, r0] - ldr r0, _022551C4 ; =0x00002DA8 - ldr r0, [r2, r0] - bl GetFlavorPreferenceFromPID - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - bne _02255194 - mov r0, #0xcf - b _02255196 -_02255194: - mov r0, #0xc6 -_02255196: - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 - nop -_022551A0: .word 0x00002D8C -_022551A4: .word 0x0000215C -_022551A8: .word 0x00000F88 -_022551AC: .word 0x00002D4C -_022551B0: .word 0x00002D6C -_022551B4: .word 0x00002DB0 -_022551B8: .word 0x00002D58 -_022551BC: .word 0x00002D90 -_022551C0: .word 0x00000109 -_022551C4: .word 0x00002DA8 -_022551C8: - add r1, r4, r5 - add r0, r0, #4 - ldr r0, [r1, r0] - lsr r1, r0, #1 - cmp r2, r1 - bhi _0225528E - add r1, r7, #0 - bl DamageDivide - ldr r1, _022554B8 ; =0x0000215C - add r2, r4, r5 - str r0, [r4, r1] - mov r0, #0x13 - mov r1, #1 - lsl r0, r0, #4 - str r1, [r4, r0] - ldr r0, _022554BC ; =0x00002DA8 - ldr r0, [r2, r0] - bl GetFlavorPreferenceFromPID - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - bne _022551FC - mov r0, #0xcf - b _022551FE -_022551FC: - mov r0, #0xc6 -_022551FE: - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02255206: - add r1, r4, r5 - add r0, r0, #4 - ldr r0, [r1, r0] - lsr r1, r0, #1 - cmp r2, r1 - bhi _0225528E - add r1, r7, #0 - bl DamageDivide - ldr r1, _022554B8 ; =0x0000215C - add r2, r4, r5 - str r0, [r4, r1] - mov r0, #0x13 - mov r1, #2 - lsl r0, r0, #4 - str r1, [r4, r0] - ldr r0, _022554BC ; =0x00002DA8 - ldr r0, [r2, r0] - bl GetFlavorPreferenceFromPID - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - bne _0225523A - mov r0, #0xcf - b _0225523C -_0225523A: - mov r0, #0xc6 -_0225523C: - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02255244: - add r1, r4, r5 - add r0, r0, #4 - ldr r0, [r1, r0] - lsr r1, r0, #1 - cmp r2, r1 - bhi _0225528E - add r1, r7, #0 - bl DamageDivide - ldr r1, _022554B8 ; =0x0000215C - add r2, r4, r5 - str r0, [r4, r1] - mov r0, #0x13 - mov r1, #3 - lsl r0, r0, #4 - str r1, [r4, r0] - ldr r0, _022554BC ; =0x00002DA8 - ldr r0, [r2, r0] - bl GetFlavorPreferenceFromPID - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - bne _02255278 - mov r0, #0xcf - b _0225527A -_02255278: - mov r0, #0xc6 -_0225527A: - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02255282: - add r1, r4, r5 - add r0, r0, #4 - ldr r0, [r1, r0] - lsr r1, r0, #1 - cmp r2, r1 - bls _02255290 -_0225528E: - b _02255502 -_02255290: - add r1, r7, #0 - bl DamageDivide - ldr r1, _022554B8 ; =0x0000215C - add r2, r4, r5 - str r0, [r4, r1] - mov r0, #0x13 - mov r1, #4 - lsl r0, r0, #4 - str r1, [r4, r0] - ldr r0, _022554BC ; =0x00002DA8 - ldr r0, [r2, r0] - bl GetFlavorPreferenceFromPID - mov r1, #0 - mvn r1, r1 - cmp r0, r1 - bne _022552B8 - mov r0, #0xcf - b _022552BA -_022552B8: - mov r0, #0xc6 -_022552BA: - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_022552C2: - ldr r1, [sp, #4] - add r0, r4, #0 - bl GetBattlerAbility - cmp r0, #0x52 - bne _022552D4 - lsr r0, r7, #0x1f - add r0, r7, r0 - asr r7, r0, #1 -_022552D4: - ldr r0, [sp, #4] - mov r1, #0xc0 - mul r1, r0 - ldr r0, _022554C0 ; =0x00002D90 - add r1, r4, r1 - ldr r0, [r1, r0] - add r1, r7, #0 - bl _u32_div_f - ldr r1, [sp, #0x14] - ldr r1, [r1, r5] - cmp r1, r0 - bhi _022553CE - ldr r0, _022554C4 ; =0x00002D59 - add r1, r4, r5 - ldrsb r0, [r1, r0] - cmp r0, #0xc - bge _022553CE - mov r1, #0x13 - mov r0, #1 - lsl r1, r1, #4 - str r0, [sp, #0xc] - str r0, [r4, r1] - mov r0, #0xd0 - str r0, [r6] - b _02255502 -_02255308: - ldr r1, [sp, #4] - add r0, r4, #0 - bl GetBattlerAbility - cmp r0, #0x52 - bne _0225531A - lsr r0, r7, #0x1f - add r0, r7, r0 - asr r7, r0, #1 -_0225531A: - ldr r0, [sp, #4] - mov r1, #0xc0 - mul r1, r0 - ldr r0, _022554C0 ; =0x00002D90 - add r1, r4, r1 - ldr r0, [r1, r0] - add r1, r7, #0 - bl _u32_div_f - ldr r1, [sp, #0x14] - ldr r1, [r1, r5] - cmp r1, r0 - bhi _022553CE - ldr r0, _022554C8 ; =0x00002D5A - add r1, r4, r5 - ldrsb r0, [r1, r0] - cmp r0, #0xc - bge _022553CE - mov r0, #0x13 - mov r1, #2 - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0xd0 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02255350: - ldr r1, [sp, #4] - add r0, r4, #0 - bl GetBattlerAbility - cmp r0, #0x52 - bne _02255362 - lsr r0, r7, #0x1f - add r0, r7, r0 - asr r7, r0, #1 -_02255362: - ldr r0, [sp, #4] - mov r1, #0xc0 - mul r1, r0 - ldr r0, _022554C0 ; =0x00002D90 - add r1, r4, r1 - ldr r0, [r1, r0] - add r1, r7, #0 - bl _u32_div_f - ldr r1, [sp, #0x14] - ldr r1, [r1, r5] - cmp r1, r0 - bhi _022553CE - ldr r0, _022554CC ; =0x00002D5B - add r1, r4, r5 - ldrsb r0, [r1, r0] - cmp r0, #0xc - bge _022553CE - mov r0, #0x13 - mov r1, #3 - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0xd0 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_02255398: - ldr r1, [sp, #4] - add r0, r4, #0 - bl GetBattlerAbility - cmp r0, #0x52 - bne _022553AA - lsr r0, r7, #0x1f - add r0, r7, r0 - asr r7, r0, #1 -_022553AA: - ldr r0, [sp, #4] - mov r1, #0xc0 - mul r1, r0 - ldr r0, _022554C0 ; =0x00002D90 - add r1, r4, r1 - ldr r0, [r1, r0] - add r1, r7, #0 - bl _u32_div_f - ldr r1, [sp, #0x14] - ldr r1, [r1, r5] - cmp r1, r0 - bhi _022553CE - ldr r0, _022554D0 ; =0x00002D5C - add r1, r4, r5 - ldrsb r0, [r1, r0] - cmp r0, #0xc - blt _022553D0 -_022553CE: - b _02255502 -_022553D0: - mov r0, #0x13 - mov r1, #4 - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0xd0 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_022553E2: - ldr r1, [sp, #4] - add r0, r4, #0 - bl GetBattlerAbility - cmp r0, #0x52 - bne _022553F4 - lsr r0, r7, #0x1f - add r0, r7, r0 - asr r7, r0, #1 -_022553F4: - ldr r0, [sp, #4] - mov r1, #0xc0 - mul r1, r0 - ldr r0, _022554C0 ; =0x00002D90 - add r1, r4, r1 - ldr r0, [r1, r0] - add r1, r7, #0 - bl _u32_div_f - ldr r1, [sp, #0x14] - ldr r1, [r1, r5] - cmp r1, r0 - bhi _02255502 - ldr r0, _022554D4 ; =0x00002D5D - add r1, r4, r5 - ldrsb r0, [r1, r0] - cmp r0, #0xc - bge _02255502 - mov r0, #0x13 - mov r1, #5 - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0xd0 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_0225542A: - ldr r1, [sp, #4] - add r0, r4, #0 - bl GetBattlerAbility - cmp r0, #0x52 - bne _0225543C - lsr r0, r7, #0x1f - add r0, r7, r0 - asr r7, r0, #1 -_0225543C: - ldr r0, [sp, #4] - mov r1, #0xc0 - mul r1, r0 - ldr r0, _022554C0 ; =0x00002D90 - add r1, r4, r1 - ldr r0, [r1, r0] - add r1, r7, #0 - bl _u32_div_f - ldr r1, [sp, #0x14] - ldr r1, [r1, r5] - cmp r1, r0 - bhi _02255502 - ldr r0, _022554D8 ; =0x00002DB0 - add r1, r4, r5 - ldr r1, [r1, r0] - mov r0, #1 - lsl r0, r0, #0x14 - tst r0, r1 - bne _02255502 - mov r0, #0xd1 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] - b _02255502 -_0225546E: - ldr r1, [sp, #4] - add r0, r4, #0 - bl GetBattlerAbility - cmp r0, #0x52 - bne _02255480 - lsr r0, r7, #0x1f - add r0, r7, r0 - asr r7, r0, #1 -_02255480: - ldr r0, [sp, #4] - mov r1, #0xc0 - mul r1, r0 - ldr r0, _022554C0 ; =0x00002D90 - add r1, r4, r1 - ldr r0, [r1, r0] - add r1, r7, #0 - bl _u32_div_f - ldr r1, [sp, #0x14] - ldr r1, [r1, r5] - cmp r1, r0 - bhi _02255502 - ldr r0, _022554C4 ; =0x00002D59 - mov r2, #0 - add r3, r4, r5 -_022554A0: - ldrsb r1, [r3, r0] - cmp r1, #0xc - blt _022554AE - add r2, r2, #1 - add r3, r3, #1 - cmp r2, #5 - blt _022554A0 -_022554AE: - cmp r2, #5 - beq _02255502 - ldr r7, _022554C4 ; =0x00002D59 - b _022554DC - nop -_022554B8: .word 0x0000215C -_022554BC: .word 0x00002DA8 -_022554C0: .word 0x00002D90 -_022554C4: .word 0x00002D59 -_022554C8: .word 0x00002D5A -_022554CC: .word 0x00002D5B -_022554D0: .word 0x00002D5C -_022554D4: .word 0x00002D5D -_022554D8: .word 0x00002DB0 -_022554DC: - add r5, r4, r5 -_022554DE: - ldr r0, [sp] - bl BattleSystem_Random - mov r1, #5 - bl _s32_div_f - add r0, r5, r1 - ldrsb r0, [r0, r7] - cmp r0, #0xc - beq _022554DE - mov r0, #0x13 - add r1, r1, #1 - lsl r0, r0, #4 - str r1, [r4, r0] - mov r0, #0xd2 - str r0, [r6] - mov r0, #1 - str r0, [sp, #0xc] -_02255502: - ldr r0, [sp, #0xc] - cmp r0, #1 - bne _02255516 - ldr r1, [sp, #4] - add r0, r4, #0 - bl GetBattlerHeldItem - mov r1, #0x4a - lsl r1, r1, #2 - str r0, [r4, r1] -_02255516: - ldr r0, [sp, #0xc] - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end ov12_02254E7C - - thumb_func_start ov12_0225551C -ov12_0225551C: ; 0x0225551C - push {r4, r5, r6, r7, lr} - sub sp, #0xc - add r5, r1, #0 - add r4, r2, #0 - mov r6, #0 - add r0, r5, #0 - add r1, r4, #0 - bl GetBattlerHeldItemEffect - add r7, r0, #0 - add r0, r5, #0 - add r1, r4, #0 - add r2, r6, #0 - bl BattleSystem_GetHeldItemDamageBoost - str r0, [sp, #8] - mov r0, #0xc0 - mul r0, r4 - str r0, [sp] - add r1, r5, r0 - ldr r0, _022555E0 ; =0x00002D8C - ldr r0, [r1, r0] - cmp r0, #0 - beq _022555D8 - cmp r7, #0x64 - beq _0225555A - cmp r7, #0x65 - beq _02255570 - cmp r7, #0x74 - beq _02255586 - b _022555AE -_0225555A: - add r0, r5, #0 - add r0, #0x94 - str r4, [r0] - add r0, r5, #0 - mov r1, #5 - add r0, #0x88 - str r1, [r0] - mov r0, #0x2f - str r0, [sp, #4] - mov r6, #1 - b _022555AE -_02255570: - add r0, r5, #0 - add r0, #0x94 - str r4, [r0] - add r0, r5, #0 - mov r1, #5 - add r0, #0x88 - str r1, [r0] - mov r0, #0x19 - str r0, [sp, #4] - mov r6, #1 - b _022555AE -_02255586: - add r0, r5, #0 - add r1, r4, #0 - bl GetBattlerAbility - cmp r0, #0x62 - beq _022555AE - ldr r0, [sp] - add r1, r5, r0 - ldr r0, _022555E4 ; =0x00002D90 - ldr r1, [r1, r0] - sub r0, r6, #1 - mul r0, r1 - ldr r1, [sp, #8] - bl DamageDivide - ldr r1, _022555E8 ; =0x0000215C - mov r6, #1 - str r0, [r5, r1] - mov r0, #0xd7 - str r0, [sp, #4] -_022555AE: - cmp r6, #1 - bne _022555D8 - mov r0, #0x46 - lsl r0, r0, #2 - str r4, [r5, r0] - add r0, r5, #0 - add r1, r4, #0 - bl GetBattlerHeldItem - mov r1, #0x4a - lsl r1, r1, #2 - str r0, [r5, r1] - ldr r2, [sp, #4] - add r0, r5, #0 - mov r1, #1 - bl ReadBattleScriptFromNarc - ldr r0, [r5, #8] - str r0, [r5, #0xc] - mov r0, #0x16 - str r0, [r5, #8] -_022555D8: - add r0, r6, #0 - add sp, #0xc - pop {r4, r5, r6, r7, pc} - nop -_022555E0: .word 0x00002D8C -_022555E4: .word 0x00002D90 -_022555E8: .word 0x0000215C - thumb_func_end ov12_0225551C - - thumb_func_start GetBattlerHeldItem -GetBattlerHeldItem: ; 0x022555EC - push {r3, r4, r5, lr} - add r5, r0, #0 - add r4, r1, #0 - bl GetBattlerAbility - cmp r0, #0x67 - bne _022555FE - mov r0, #0 - pop {r3, r4, r5, pc} -_022555FE: - mov r0, #0xc0 - mul r0, r4 - add r2, r5, r0 - ldr r0, _02255618 ; =0x00002DCC - ldr r1, [r2, r0] - lsl r1, r1, #0xa - lsr r1, r1, #0x1d - beq _02255612 - mov r0, #0 - pop {r3, r4, r5, pc} -_02255612: - sub r0, #0x14 - ldrh r0, [r2, r0] - pop {r3, r4, r5, pc} - .balign 4, 0 -_02255618: .word 0x00002DCC - thumb_func_end GetBattlerHeldItem - - thumb_func_start ov12_0225561C -ov12_0225561C: ; 0x0225561C - lsl r1, r1, #4 - add r1, r0, r1 - ldr r0, _02255630 ; =0x000021A8 - ldr r0, [r1, r0] - cmp r0, #0x28 - bne _0225562C - mov r0, #1 - bx lr -_0225562C: - mov r0, #0 - bx lr - .balign 4, 0 -_02255630: .word 0x000021A8 - thumb_func_end ov12_0225561C - - thumb_func_start CheckItemEffectOnHit -CheckItemEffectOnHit: ; 0x02255634 - push {r4, r5, r6, r7, lr} - sub sp, #0xc - add r5, r1, #0 - ldr r1, [r5, #0x6c] - str r0, [sp] - add r6, r2, #0 - mov r7, #0 - cmp r1, #0xff - bne _0225564C - add sp, #0xc - add r0, r7, #0 - pop {r4, r5, r6, r7, pc} -_0225564C: - add r0, r5, #0 - bl BattlerCheckSubstitute - cmp r0, #1 - bne _0225565C - add sp, #0xc - add r0, r7, #0 - pop {r4, r5, r6, r7, pc} -_0225565C: - ldr r1, [r5, #0x6c] - add r0, r5, #0 - bl GetBattlerHeldItemEffect - add r4, r0, #0 - ldr r1, [r5, #0x6c] - add r0, r5, #0 - add r2, r7, #0 - bl BattleSystem_GetHeldItemDamageBoost - str r0, [sp, #4] - ldr r0, [sp] - ldr r1, [r5, #0x64] - bl BattleSystem_GetFieldSide - str r0, [sp, #8] - cmp r4, #0x2f - bgt _02255692 - cmp r4, #0x2b - blt _02255690 - bne _02255688 - b _022557C4 -_02255688: - cmp r4, #0x2e - beq _02255714 - cmp r4, #0x2f - beq _02255772 -_02255690: - b _0225580A -_02255692: - cmp r4, #0x74 - bne _022556FC - ldr r0, [r5, #0x64] - mov r1, #0xc0 - mul r1, r0 - add r3, r5, r1 - ldr r1, _02255810 ; =0x00002D8C - ldr r2, [r3, r1] - cmp r2, #0 - beq _022556FC - add r1, #0x2c - ldrh r1, [r3, r1] - cmp r1, #0 - bne _022556FC - add r1, r5, r0 - ldr r0, _02255814 ; =0x0000219C - ldrb r0, [r1, r0] - bl MaskOfFlagNo - ldr r1, [sp, #8] - lsl r1, r1, #3 - add r2, r5, r1 - mov r1, #0x71 - lsl r1, r1, #2 - ldr r2, [r2, r1] - lsl r2, r2, #3 - lsr r2, r2, #0x1a - tst r0, r2 - bne _022556FC - ldr r0, _02255818 ; =0x00003044 - sub r1, #0xaa - ldr r0, [r5, r0] - cmp r0, r1 - beq _022556FC - ldr r2, [r5, #0x6c] - mov r1, #0x1c - mul r1, r2 - add r3, r5, r1 - mov r1, #0xb6 - lsl r1, r1, #2 - ldr r2, [r3, r1] - cmp r2, #0 - bne _022556F0 - add r1, #8 - ldr r1, [r3, r1] - cmp r1, #0 - beq _022556FC -_022556F0: - mov r1, #0x85 - lsl r1, r1, #6 - ldr r2, [r5, r1] - mov r1, #0x10 - tst r1, r2 - beq _022556FE -_022556FC: - b _0225580A -_022556FE: - lsl r0, r0, #4 - add r1, r5, r0 - ldr r0, _0225581C ; =0x000003E9 - ldrb r1, [r1, r0] - mov r0, #1 - tst r1, r0 - beq _0225580A - mov r1, #0xd8 - str r1, [r6] - add r7, r0, #0 - b _0225580A -_02255714: - ldr r1, [r5, #0x64] - mov r0, #0xc0 - mul r0, r1 - add r2, r5, r0 - ldr r0, _02255810 ; =0x00002D8C - ldr r0, [r2, r0] - cmp r0, #0 - beq _0225580A - add r0, r5, #0 - bl GetBattlerAbility - cmp r0, #0x62 - beq _0225580A - mov r0, #0x85 - lsl r0, r0, #6 - ldr r1, [r5, r0] - mov r0, #0x10 - tst r0, r1 - bne _0225580A - 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 _0225580A - ldr r0, [r5, #0x64] - mov r1, #0xc0 - add r2, r0, #0 - mul r2, r1 - ldr r0, _02255820 ; =0x00002D90 - add r2, r5, r2 - ldr r2, [r2, r0] - sub r1, #0xc1 - add r0, r2, #0 - mul r0, r1 - ldr r1, [sp, #4] - bl DamageDivide - ldr r1, _02255824 ; =0x0000215C - mov r7, #1 - str r0, [r5, r1] - lsr r0, r1, #5 - str r0, [r6] - b _0225580A -_02255772: - ldr r1, [r5, #0x64] - mov r0, #0xc0 - mul r0, r1 - add r2, r5, r0 - ldr r0, _02255810 ; =0x00002D8C - ldr r0, [r2, r0] - cmp r0, #0 - beq _0225580A - add r0, r5, #0 - bl GetBattlerAbility - cmp r0, #0x62 - beq _0225580A - ldr r1, [r5, #0x6c] - mov r0, #0x1c - mul r0, r1 - add r1, r5, r0 - mov r0, #0x2e - lsl r0, r0, #4 - ldr r0, [r1, r0] - cmp r0, #0 - beq _0225580A - ldr r0, [r5, #0x64] - mov r1, #0xc0 - add r2, r0, #0 - mul r2, r1 - ldr r0, _02255820 ; =0x00002D90 - add r2, r5, r2 - ldr r2, [r2, r0] - sub r1, #0xc1 - add r0, r2, #0 - mul r0, r1 - ldr r1, [sp, #4] - bl DamageDivide - ldr r1, _02255824 ; =0x0000215C - mov r7, #1 - str r0, [r5, r1] - lsr r0, r1, #5 - str r0, [r6] - b _0225580A -_022557C4: - ldr r1, [r5, #0x6c] - mov r0, #0xc0 - mul r0, r1 - ldr r2, _02255810 ; =0x00002D8C - add r0, r5, r0 - ldr r1, [r0, r2] - cmp r1, #0 - beq _0225580A - ldr r1, _02255828 ; =0x0000216C - ldr r3, [r5, r1] - mov r1, #2 - tst r1, r3 - beq _0225580A - add r1, r2, #4 - ldr r0, [r0, r1] - ldr r1, [sp, #4] - bl DamageDivide - ldr r1, _02255824 ; =0x0000215C - mov r7, #1 - str r0, [r5, r1] - mov r1, #0xc6 - str r1, [r6] - ldr r0, [r5, #0x6c] - add r1, #0x52 - str r0, [r5, r1] - ldr r0, [r5, #0x6c] - mov r1, #0xc0 - add r2, r0, #0 - mul r2, r1 - ldr r0, _0225582C ; =0x00002DB8 - add r2, r5, r2 - ldrh r0, [r2, r0] - add r1, #0x68 - str r0, [r5, r1] -_0225580A: - add r0, r7, #0 - add sp, #0xc - pop {r4, r5, r6, r7, pc} - .balign 4, 0 -_02255810: .word 0x00002D8C -_02255814: .word 0x0000219C -_02255818: .word 0x00003044 -_0225581C: .word 0x000003E9 -_02255820: .word 0x00002D90 -_02255824: .word 0x0000215C -_02255828: .word 0x0000216C -_0225582C: .word 0x00002DB8 - thumb_func_end CheckItemEffectOnHit - - thumb_func_start GetBattlerHeldItemEffect -GetBattlerHeldItemEffect: ; 0x02255830 - push {r4, lr} - add r4, r0, #0 - bl GetBattlerHeldItem - add r1, r0, #0 - add r0, r4, #0 - mov r2, #1 - bl GetItemHoldEffect - pop {r4, pc} - thumb_func_end GetBattlerHeldItemEffect - - thumb_func_start BattleSystem_GetHeldItemDamageBoost -BattleSystem_GetHeldItemDamageBoost: ; 0x02255844 - push {r4, lr} - add r4, r0, #0 - cmp r2, #0 - beq _02255856 - cmp r2, #1 - beq _02255872 - cmp r2, #2 - beq _0225585E - b _0225587C -_02255856: - bl GetBattlerHeldItem - add r1, r0, #0 - b _0225587C -_0225585E: - mov r0, #0xc0 - mul r0, r1 - add r2, r4, r0 - ldr r0, _02255888 ; =0x00002DCC - ldr r0, [r2, r0] - lsl r0, r0, #0xa - lsr r0, r0, #0x1d - beq _02255872 - mov r0, #0 - pop {r4, pc} -_02255872: - mov r0, #0xc0 - mul r0, r1 - add r1, r4, r0 - ldr r0, _0225588C ; =0x00002DB8 - ldrh r1, [r1, r0] -_0225587C: - add r0, r4, #0 - mov r2, #2 - bl GetItemHoldEffect - pop {r4, pc} - nop -_02255888: .word 0x00002DCC -_0225588C: .word 0x00002DB8 - thumb_func_end BattleSystem_GetHeldItemDamageBoost - - thumb_func_start GetNaturalGiftPower -GetNaturalGiftPower: ; 0x02255890 - push {r4, lr} - add r4, r0, #0 - bl GetBattlerHeldItem - add r1, r0, #0 - add r0, r4, #0 - mov r2, #0xb - bl GetItemHoldEffect - pop {r4, pc} - thumb_func_end GetNaturalGiftPower - - thumb_func_start GetNaturalGiftType -GetNaturalGiftType: ; 0x022558A4 - push {r4, lr} - add r4, r0, #0 - bl GetBattlerHeldItem - add r1, r0, #0 - add r0, r4, #0 - mov r2, #0xc - bl GetItemHoldEffect - pop {r4, pc} - thumb_func_end GetNaturalGiftType - - thumb_func_start ov12_022558B8 -ov12_022558B8: ; 0x022558B8 - mov r2, #0xc0 - mul r2, r1 - ldr r1, _022558C8 ; =0x00002DB8 - add r2, r0, r2 - ldrh r1, [r2, r1] - ldr r3, _022558CC ; =GetItemHoldEffect - mov r2, #8 - bx r3 - .balign 4, 0 -_022558C8: .word 0x00002DB8 -_022558CC: .word GetItemHoldEffect - thumb_func_end ov12_022558B8 - - thumb_func_start ov12_022558D0 -ov12_022558D0: ; 0x022558D0 - push {r3, lr} - mov r2, #0xc0 - mul r2, r1 - ldr r1, _022558F4 ; =0x00002DCC - add r3, r0, r2 - ldr r2, [r3, r1] - lsl r2, r2, #0xa - lsr r2, r2, #0x1d - beq _022558E6 - mov r0, #0 - pop {r3, pc} -_022558E6: - sub r1, #0x14 - ldrh r1, [r3, r1] - mov r2, #9 - bl GetItemHoldEffect - pop {r3, pc} - nop -_022558F4: .word 0x00002DCC - thumb_func_end ov12_022558D0 - - thumb_func_start ov12_022558F8 -ov12_022558F8: ; 0x022558F8 - push {r3, lr} - mov r2, #0xc0 - mul r2, r1 - ldr r1, _0225591C ; =0x00002DCC - add r3, r0, r2 - ldr r2, [r3, r1] - lsl r2, r2, #0xa - lsr r2, r2, #0x1d - beq _0225590E - mov r0, #0 - pop {r3, pc} -_0225590E: - sub r1, #0x14 - ldrh r1, [r3, r1] - mov r2, #0xa - bl GetItemHoldEffect - pop {r3, pc} - nop -_0225591C: .word 0x00002DCC - thumb_func_end ov12_022558F8 - + .public ov12_022558B8 + .public ov12_022558D0 + .public ov12_022558F8 + thumb_func_start ov12_02255920 ov12_02255920: ; 0x02255920 push {r3, r4, r5, r6, r7, lr} @@ -1578,7 +166,7 @@ CanEatOpponentBerry: ; 0x02255A2C ldr r1, [sp, #4] add r0, r4, #0 mov r2, #1 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier str r0, [sp, #0x10] ldr r1, [r4, #0x6c] add r0, r4, #0 @@ -2294,7 +882,7 @@ CanFling: ; 0x02255F7C ldr r1, [sp, #4] add r0, r4, #0 mov r2, #2 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier str r0, [sp, #0x10] ldr r1, [sp, #4] add r0, r4, #0 @@ -4643,12 +3231,12 @@ _0225701C: add r0, r5, #0 add r1, r4, #0 mov r2, #1 - bl GetItemHoldEffect + bl GetItemVar str r0, [sp, #0x30] add r0, r5, #0 add r1, r4, #0 mov r2, #2 - bl GetItemHoldEffect + bl GetItemVar str r0, [sp, #0x2c] ldr r1, [sp, #0x20] add r0, r5, #0 @@ -4657,12 +3245,12 @@ _0225701C: add r0, r5, #0 add r1, r4, #0 mov r2, #1 - bl GetItemHoldEffect + bl GetItemVar str r0, [sp, #0x28] add r0, r5, #0 add r1, r4, #0 mov r2, #2 - bl GetItemHoldEffect + bl GetItemVar ldr r0, [sp, #4] bl BattleSystem_GetBattleType str r0, [sp, #0x5c] @@ -6010,7 +4598,7 @@ ov12_02257C5C: ; 0x02257C5C add r1, r0, #0 add r0, r4, #0 mov r2, #1 - bl GetItemHoldEffect + bl GetItemVar mov r3, #0xb5 lsl r3, r3, #6 add r2, r3, #0 @@ -6296,8 +4884,8 @@ _02257E6C: .word 0x000003DE _02257E70: .word ov12_0226CB70 thumb_func_end CheckLegalMeFirstMove - thumb_func_start GetItemHoldEffect -GetItemHoldEffect: ; 0x02257E74 + thumb_func_start GetItemVar +GetItemVar: ; 0x02257E74 push {r3, r4, r5, lr} add r5, r0, #0 add r0, r1, #0 @@ -6313,7 +4901,7 @@ GetItemHoldEffect: ; 0x02257E74 pop {r3, r4, r5, pc} .balign 4, 0 _02257E94: .word 0x00002120 - thumb_func_end GetItemHoldEffect + thumb_func_end GetItemVar thumb_func_start ov12_02257E98 ov12_02257E98: ; 0x02257E98 @@ -6480,7 +5068,7 @@ CheckItemEffectOnUTurn: ; 0x02257FA0 ldr r1, [r5, #0x64] add r0, r5, #0 add r2, r6, #0 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier str r0, [sp, #0x10] ldr r1, [r5, #0x6c] add r0, r5, #0 @@ -6489,7 +5077,7 @@ CheckItemEffectOnUTurn: ; 0x02257FA0 ldr r1, [r5, #0x6c] add r0, r5, #0 add r2, r6, #0 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier str r0, [sp, #8] ldr r0, [sp] ldr r1, [r5, #0x64] @@ -7197,7 +5785,7 @@ _022584D6: ldrh r1, [r1, r2] add r0, r5, #0 mov r2, #1 - bl GetItemHoldEffect + bl GetItemVar sub r0, #0x7e cmp r0, #0xf bhi _02258570 diff --git a/asm/overlay_12_battle_command.s b/asm/overlay_12_battle_command.s index f53d9194a5..aef400e790 100644 --- a/asm/overlay_12_battle_command.s +++ b/asm/overlay_12_battle_command.s @@ -5943,8 +5943,8 @@ sBattleScriptCommandTable: ; 0x0226C6C8 .word BtlCmd_TrickRoom .word BtlCmd_CheckMoveFinished .word BtlCmd_CheckItemEffect - .word BtlCmd_GetItemEffect .word BtlCmd_GetItemHoldEffect + .word BtlCmd_GetItemModifier .word BtlCmd_TryCamouflage .word BtlCmd_NaturePower .word BtlCmd_SecretPower diff --git a/asm/overlay_12_battle_controller_opponent.s b/asm/overlay_12_battle_controller_opponent.s index 71fc107639..8aaa3c61b3 100644 --- a/asm/overlay_12_battle_controller_opponent.s +++ b/asm/overlay_12_battle_controller_opponent.s @@ -510,7 +510,7 @@ _02258BE6: add r0, r6, #0 lsr r1, r1, #0x10 mov r2, #0xc - bl GetItemHoldEffect + bl GetItemVar add r5, r0, #0 b _02258D66 _02258C02: @@ -523,7 +523,7 @@ _02258C02: add r0, r6, #0 lsr r1, r1, #0x10 mov r2, #1 - bl GetItemHoldEffect + bl GetItemVar sub r0, #0x7e cmp r0, #0xf bhi _02258C8C diff --git a/asm/overlay_12_battle_controller_player.s b/asm/overlay_12_battle_controller_player.s index e025355401..1b46e76153 100644 --- a/asm/overlay_12_battle_controller_player.s +++ b/asm/overlay_12_battle_controller_player.s @@ -3990,7 +3990,7 @@ _0224A662: add r1, r4, #0 add r2, r5, #0 add r3, sp, #0x14 - bl ov12_02254E7C + bl CheckUseHeldItem cmp r0, #1 bne _0224A68E mov r0, #0x46 @@ -4015,7 +4015,7 @@ _0224A696: ldr r0, [sp, #4] add r1, r4, #0 add r2, r5, #0 - bl ov12_0225551C + bl TryHeldItemNegativeEffect cmp r0, #1 bne _0224A6A8 mov r0, #1 @@ -7180,7 +7180,7 @@ _0224BF20: ldr r1, [sp, #8] add r0, r5, #0 mov r2, #0 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier cmp r7, #0x30 bne _0224BF46 mov r1, #0x64 @@ -7197,7 +7197,7 @@ _0224BF46: add r0, r5, #0 add r1, r6, #0 mov r2, #0 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier add r6, r0, #0 cmp r7, #0x5d bne _0224BF6E @@ -8188,7 +8188,7 @@ _0224C6C2: ldr r1, [r4, #0x6c] add r0, r4, #0 mov r2, #0 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier str r0, [sp] ldr r0, _0224C9C4 ; =0x00002144 ldr r0, [r4, r0] @@ -9193,7 +9193,7 @@ _0224CE84: add r1, r4, #0 add r2, r7, #0 add r3, sp, #8 - bl ov12_02254E7C + bl CheckUseHeldItem cmp r0, #1 bne _0224CEB6 mov r0, #0x46 @@ -11539,7 +11539,7 @@ ov12_0224E078: ; 0x0224E078 ldr r1, [r5, #0x64] add r0, r5, #0 add r2, r4, #0 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier add r6, r0, #0 ldr r0, [r5, #0x6c] cmp r0, #0xff @@ -11700,7 +11700,7 @@ ov12_0224E1BC: ; 0x0224E1BC ldr r1, [r4, #0x64] add r0, r4, #0 add r2, r6, #0 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier ldr r1, [r4, #8] str r0, [sp] add r0, r4, #0 diff --git a/include/battle.h b/include/battle.h index b9c91467c0..ea71f3d1f9 100644 --- a/include/battle.h +++ b/include/battle.h @@ -161,7 +161,7 @@ typedef struct UnkBattlemonSub { u32 lastResortCount:3; u32 magnetRiseTurns:3; u32 healBlockTurns:3; - u32 unk4_13:3; + u32 embargoFlag:3; u32 knockOffFlag:1; //unclear whether true mean knocked off or not knocked off based on current information on its usage u32 metronomeTurns:4; //refers to the item, not the move u32 unk4_2B:1; //might be related to choice band/specs @@ -299,15 +299,15 @@ typedef struct BATTLECONTEXT { int unk_EC; int unk_F0; BATTLEMSG buffMsg; - int battlerIdWork; + int battlerIdTemp; int unk_11C; int unk_120; - int moveWork; - int itemWork; - int abilityWork; - int msgWork; - int calcWork; - int tempWork; + int moveTemp; + int itemTemp; + int abilityTemp; + int msgTemp; + int calcTemp; + int tempData; u32 unk_13C[4]; u32 unk_14C; int totalTurns; @@ -334,7 +334,7 @@ typedef struct BATTLECONTEXT { int criticalMultiplier; int movePower; int unk_2158; - int hpCalcWork; + int hpCalc; int moveType; int unk_2164; int prizeMoneyValue; @@ -359,7 +359,7 @@ typedef struct BATTLECONTEXT { u32 unk_21F0[4]; u8 unk_2200[4][4][16]; u8 unk_2300[4][256]; - int battleScriptWork[400]; + int battleScriptBuffer[400]; BATTLEMON battleMons[4]; u32 moveNoTemp; u32 moveNoCur; diff --git a/include/battle_command.h b/include/battle_command.h index 6fb7b24676..dea9ef5d86 100644 --- a/include/battle_command.h +++ b/include/battle_command.h @@ -175,8 +175,8 @@ BOOL BtlCmd_Pickup(BattleSystem *bsys, BATTLECONTEXT *ctx); BOOL BtlCmd_TrickRoom(BattleSystem *bsys, BATTLECONTEXT *ctx); BOOL BtlCmd_CheckMoveFinished(BattleSystem *bsys, BATTLECONTEXT *ctx); BOOL BtlCmd_CheckItemEffect(BattleSystem *bsys, BATTLECONTEXT *ctx); -BOOL BtlCmd_GetItemEffect(BattleSystem *bsys, BATTLECONTEXT *ctx); BOOL BtlCmd_GetItemHoldEffect(BattleSystem *bsys, BATTLECONTEXT *ctx); +BOOL BtlCmd_GetItemModifier(BattleSystem *bsys, BATTLECONTEXT *ctx); BOOL BtlCmd_TryCamouflage(BattleSystem *bsys, BATTLECONTEXT *ctx); BOOL BtlCmd_NaturePower(BattleSystem *bsys, BATTLECONTEXT *ctx); BOOL BtlCmd_SecretPower(BattleSystem *bsys, BATTLECONTEXT *ctx); diff --git a/include/constants/items.h b/include/constants/items.h index 0c0c0a4ed3..dede9b37a1 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -950,4 +950,13 @@ #define ITEM_MIN 1 #define ITEM_MAX ITEMS_COUNT - 1 +//Item Variables +#define ITEM_VAR_HOLD_EFFECT 1 +#define ITEM_VAR_MODIFIER 2 //general variable for HP thresholds, damage increase percentages, etc +#define ITEM_VAR_8 8 +#define ITEM_VAR_9 9 +#define ITEM_VAR_10 10 +#define ITEM_NATURAL_GIFT_POWER 11 +#define ITEM_NATURAL_GIFT_TYPE 12 + #endif //POKEHEARTGOLD_CONSTANTS_ITEMS_H diff --git a/include/overlay_12_0224E4FC.h b/include/overlay_12_0224E4FC.h index 81a3982752..5ab90e2d9e 100644 --- a/include/overlay_12_0224E4FC.h +++ b/include/overlay_12_0224E4FC.h @@ -78,6 +78,18 @@ BOOL CheckStatusHealSwitch(BATTLECONTEXT *ctx, int ability, int status); BOOL TrySyncronizeStatus(BattleSystem *bsys, BATTLECONTEXT *ctx, ControllerCommand command); BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); BOOL CheckItemGradualHPRestore(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); +BOOL CheckUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, u32 *scriptOut); +BOOL TryHeldItemNegativeEffect(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); +u16 GetBattlerHeldItem(BATTLECONTEXT *ctx, int battlerId); +BOOL ov12_0225561C(BATTLECONTEXT *ctx, int battlerId); +BOOL CheckItemEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script); +int GetBattlerHeldItemEffect(BATTLECONTEXT *ctx, int battlerId); +int GetHeldItemModifier(BATTLECONTEXT *ctx, int battlerId, int flag); +int GetNaturalGiftPower(BATTLECONTEXT *ctx, int battlerId); +int GetNaturalGiftType(BATTLECONTEXT *ctx, int battlerId); +int ov12_022558B8(BATTLECONTEXT *ctx, int battlerId); +int ov12_022558D0(BATTLECONTEXT *ctx, int battlerId); +int ov12_022558F8(BATTLECONTEXT *ctx, int battlerId); //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); @@ -85,13 +97,8 @@ BOOL ov12_02251C74(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarge //The following functions haven't been decompiled as of now void ov12_02256F78(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, u8 monIndex); void Link_CheckTimeout(BATTLECONTEXT *ctx); -u32 GetBattlerHeldItemEffect(BATTLECONTEXT *ctx, int battlerId); int CalcMoveDamage(BattleSystem *bsys, BATTLECONTEXT *ctx, u32, u32, u32, u16, u8, u8, u8, u8); -u16 GetBattlerHeldItem(BATTLECONTEXT *ctx, int battlerId); -BOOL ov12_0225561C(BATTLECONTEXT *ctx, int battlerId); int ov12_02257C30(BattleSystem *bsys, BATTLECONTEXT *ctx, int a2); -int GetNaturalGiftPower(BATTLECONTEXT *ctx, int battlerId); -int GetNaturalGiftType(BATTLECONTEXT *ctx, int battlerId); BOOL CanEatOpponentBerry(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); BOOL CanFling(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId); BOOL CheckLegalMetronomeMove(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, u16 moveNo); @@ -100,15 +107,13 @@ BOOL CheckLegalMimicMove(u16 move); BOOL IsMoveEncored(BATTLECONTEXT *ctx, u16 move); void CheckIgnorePressure(BATTLECONTEXT *ctx, int battlerIdA, int battlerIdB); u8 ov12_0225682C(BATTLECONTEXT *ctx, int a1); -BOOL CheckItemEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *itemWork); -int BattleSystem_GetHeldItemDamageBoost(BATTLECONTEXT *ctx, int battlerId, int a2); 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_02257C5C(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget, int critCnt, u32 a5); u32 ov12_022581D4(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 a2, int battlerId); -u32 GetItemHoldEffect(BATTLECONTEXT *ctx, int item, u32 a3); +u32 GetItemVar(BATTLECONTEXT *ctx, int item, u32 a3); u32 ov12_0223C24C(PARTY *party, u32 *a1); BOOL CheckStatusEffectsSubstitute(BATTLECONTEXT *ctx, int battlerId, u32 status); int ov12_0223AB0C(BattleSystem *bsys, int battlerId); @@ -126,5 +131,4 @@ u32 ov12_022583B4(BATTLECONTEXT *ctx, int battlerIdA, u8 effectiveness, int dama int ov12_022585B8(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId1, int battlerId2); BOOL ov12_0225865C(BATTLECONTEXT *ctx, int moveNo); BOOL ov12_02256914(BattleSystem *bsys, BATTLECONTEXT *ctx, u32 *scriptOut); -BOOL ov12_02254E7C(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, u32 *scriptOut); #endif diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index 69a88ad17d..b65f5bd3a7 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -31,7 +31,7 @@ BOOL RunBattleScript(BattleSystem *bsys, BATTLECONTEXT *ctx) { BOOL ret; do { - ret = sBattleScriptCommandTable[ctx->battleScriptWork[ctx->scriptSeqNo]](bsys, ctx); + ret = sBattleScriptCommandTable[ctx->battleScriptBuffer[ctx->scriptSeqNo]](bsys, ctx); } while(ctx->battleContinueFlag == 0 && (BattleSystem_GetBattleType(bsys) & BATTLE_TYPE_2) == 0); ctx->battleContinueFlag = 0; @@ -718,7 +718,7 @@ static void DamageCalcDefault(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->damage *= ctx->criticalMultiplier; if (GetBattlerHeldItemEffect(ctx, ctx->battlerIdAttacker) == HOLD_EFFECT_HP_DRAIN_ON_ATK) { - ctx->damage = ctx->damage * (100 + BattleSystem_GetHeldItemDamageBoost(ctx, ctx->battlerIdAttacker, 0))/100; + ctx->damage = ctx->damage * (100 + GetHeldItemModifier(ctx, ctx->battlerIdAttacker, 0))/100; } if (GetBattlerHeldItemEffect(ctx, ctx->battlerIdAttacker) == HOLD_EFFECT_BOOST_REPEATED) { @@ -841,7 +841,7 @@ BOOL BtlCmd_PlayMoveAnimation(BattleSystem *bsys, BATTLECONTEXT *ctx) { u32 battler = BattleScriptReadWord(ctx); if (battler == 255) { - move = ctx->moveWork; + move = ctx->moveTemp; } else { move = ctx->moveNoCur; } @@ -867,7 +867,7 @@ BOOL BtlCmd_PlayMoveAnimation2(BattleSystem *bsys, BATTLECONTEXT *ctx) { u32 defenderSide = BattleScriptReadWord(ctx); if (battler == 255) { - move = ctx->moveWork; + move = ctx->moveTemp; } else { move = ctx->moveNoCur; } @@ -902,17 +902,17 @@ BOOL BtlCmd_HealthbarDataUpdate(BattleSystem *bsys, BATTLECONTEXT *ctx) { u8 battlerId = GetBattlerIDBySide(bsys, ctx, BattleScriptReadWord(ctx)); - if ((ctx->battleMons[battlerId].hp + ctx->hpCalcWork) <= 0) { + if ((ctx->battleMons[battlerId].hp + ctx->hpCalc) <= 0) { ctx->hitDamage = ctx->battleMons[battlerId].hp * -1; } else { - ctx->hitDamage = ctx->hpCalcWork; + ctx->hitDamage = ctx->hpCalc; } if (ctx->hitDamage < 0) { ctx->totalDamage[battlerId] += (-1*ctx->hitDamage); } - ctx->battleMons[battlerId].hp += ctx->hpCalcWork; + ctx->battleMons[battlerId].hp += ctx->hpCalc; if (ctx->battleMons[battlerId].hp < 0) { ctx->battleMons[battlerId].hp = 0; @@ -1147,11 +1147,11 @@ BOOL BtlCmd_JumpToEffectScript(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->linkStatus &= ~1; ctx->linkStatus &= 0xffffbfff; - ctx->moveNoCur = ctx->moveWork; + ctx->moveNoCur = ctx->moveTemp; if (unkA == 0) { - ctx->battlerIdTarget = ov12_022506D4(bsys, ctx, ctx->battlerIdAttacker, (u16)ctx->moveWork, 1, 0); - ov12_02250A18(bsys, ctx, ctx->battlerIdAttacker, ctx->moveWork); + ctx->battlerIdTarget = ov12_022506D4(bsys, ctx, ctx->battlerIdAttacker, (u16)ctx->moveTemp, 1, 0); + ov12_02250A18(bsys, ctx, ctx->battlerIdAttacker, ctx->moveTemp); ctx->unk_21A8[ctx->battlerIdAttacker][1] = ctx->battlerIdTarget; } @@ -1199,7 +1199,7 @@ BOOL BtlCmd_ShouldGetExp(BattleSystem *bsys, BATTLECONTEXT *ctx) { expMonsCnt++; } itemNo = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - if (GetItemHoldEffect(ctx, itemNo, 1) == HOLD_EFFECT_EXP_SHARE) { + if (GetItemVar(ctx, itemNo, ITEM_VAR_HOLD_EFFECT) == HOLD_EFFECT_EXP_SHARE) { expShareMonsCnt++; } } @@ -1406,7 +1406,7 @@ BOOL BtlCmd_InitGetPokemon(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->getterWork->ctx = ctx; ctx->getterWork->unk28 = 0; ctx->getterWork->unk24 = unkA; - ctx->getterWork->unk2C = ItemToBallId(ctx->itemWork); + ctx->getterWork->unk2C = ItemToBallId(ctx->itemTemp); CreateSysTask(Task_GetPokemon, ctx->getterWork, 0); @@ -1528,19 +1528,19 @@ BOOL BtlCmd_BufferStatChangeMsg(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->statChangeParam >= 46) { stat = ctx->statChangeParam - 46; change = -2; - ctx->tempWork = 13; + ctx->tempData = 13; } else if (ctx->statChangeParam >= 39) { stat = ctx->statChangeParam - 39; change = 2; - ctx->tempWork = 12; + ctx->tempData = 12; } else if (ctx->statChangeParam >= 22) { stat = ctx->statChangeParam - 22; change = -1; - ctx->tempWork = 13; + ctx->tempData = 13; } else { stat = ctx->statChangeParam - 15; change = 1; - ctx->tempWork = 12; + ctx->tempData = 12; } if (change > 0) { //Stat Increase @@ -1566,7 +1566,7 @@ BOOL BtlCmd_BufferStatChangeMsg(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->buffMsg.id = 0x2F4; ctx->buffMsg.tag = 45; ctx->buffMsg.param[0] = CreateNicknameTag(ctx, ctx->battlerIdStatChange); - ctx->buffMsg.param[1] = ctx->itemWork; + ctx->buffMsg.param[1] = ctx->itemTemp; ctx->buffMsg.param[2] = stat + 1; } else { ctx->buffMsg.id = (change == 1) ? 0x2EE:0x2F1; @@ -1835,7 +1835,7 @@ BOOL BtlCmd_Random(BattleSystem *bsys, BATTLECONTEXT *ctx) { int x0 = BattleScriptReadWord(ctx); - ctx->calcWork = BattleSystem_Random(bsys) % modulo + x0; + ctx->calcTemp = BattleSystem_Random(bsys) % modulo + x0; return FALSE; } @@ -2178,12 +2178,12 @@ BOOL BtlCmd_CalcPrizeMoney(BattleSystem *bsys, BATTLECONTEXT *ctx) { } if (prizeMoney) { - ctx->msgWork = prizeMoney; + ctx->msgTemp = prizeMoney; } else { - ctx->msgWork = 0; + ctx->msgTemp = 0; } - ctx->tempWork = bsys->unk2474_1; + ctx->tempData = bsys->unk2474_1; return FALSE; } @@ -2279,7 +2279,7 @@ BOOL BtlCmd_FirstSendOutMessage(BattleSystem *bsys, BATTLECONTEXT *ctx) { BOOL BtlCmd_TrainerMessageVar(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); - BattleController_EmitPrintTrainerMessage(bsys, GetBattlerIDBySide(bsys, ctx, BattleScriptReadWord(ctx)), ctx->msgWork); + BattleController_EmitPrintTrainerMessage(bsys, GetBattlerIDBySide(bsys, ctx, BattleScriptReadWord(ctx)), ctx->msgTemp); return FALSE; } @@ -2336,7 +2336,7 @@ BOOL BtlCmd_TryConversion(BattleSystem *bsys, BATTLECONTEXT *ctx) { } while(GetBattlerVar(ctx, ctx->battlerIdAttacker, BMON_DATA_TYPE_1, NULL) == moveType || GetBattlerVar(ctx, ctx->battlerIdAttacker, BMON_DATA_TYPE_2, NULL) == moveType); ctx->battleMons[ctx->battlerIdAttacker].type1 = moveType; ctx->battleMons[ctx->battlerIdAttacker].type2 = moveType; - ctx->msgWork = moveType; + ctx->msgTemp = moveType; } return FALSE; @@ -2458,13 +2458,13 @@ BOOL BtlCmd_IfMonStatVar(BattleSystem *bsys, BATTLECONTEXT *ctx) { BOOL BtlCmd_PayDay(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); - ctx->msgWork = ctx->unk_14C * ctx->prizeMoneyValue; + ctx->msgTemp = ctx->unk_14C * ctx->prizeMoneyValue; - if (ctx->msgWork > 0xFFFF) { - ctx->msgWork = 0xFFFF; + if (ctx->msgTemp > 0xFFFF) { + ctx->msgTemp = 0xFFFF; } - PlayerProfile_AddMoney(BattleSystem_GetPlayerProfile(bsys, 0), ctx->msgWork); + PlayerProfile_AddMoney(BattleSystem_GetPlayerProfile(bsys, 0), ctx->msgTemp); return FALSE; } @@ -2484,7 +2484,7 @@ BOOL BtlCmd_TryLightScreen(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->fieldSideConditionData[unkA].lightScreenTurns = 5; ctx->fieldSideConditionData[unkA].lightScreenBattler = ctx->battlerIdAttacker; if (GetBattlerHeldItemEffect(ctx, ctx->battlerIdAttacker) == HOLD_EFFECT_EXTEND_SCREENS) { - ctx->fieldSideConditionData[unkA].lightScreenTurns += BattleSystem_GetHeldItemDamageBoost(ctx, ctx->battlerIdAttacker, 0); + ctx->fieldSideConditionData[unkA].lightScreenTurns += GetHeldItemModifier(ctx, ctx->battlerIdAttacker, 0); } ctx->buffMsg.tag = 20; ctx->buffMsg.param[0] = ctx->moveNoCur; @@ -2513,7 +2513,7 @@ BOOL BtlCmd_TryReflect(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->fieldSideConditionData[unkA].reflectTurns = 5; ctx->fieldSideConditionData[unkA].reflectBattler = ctx->battlerIdAttacker; if (GetBattlerHeldItemEffect(ctx, ctx->battlerIdAttacker) == HOLD_EFFECT_EXTEND_SCREENS) { - ctx->fieldSideConditionData[unkA].reflectTurns += BattleSystem_GetHeldItemDamageBoost(ctx, ctx->battlerIdAttacker, 0); + ctx->fieldSideConditionData[unkA].reflectTurns += GetHeldItemModifier(ctx, ctx->battlerIdAttacker, 0); } ctx->buffMsg.tag = 20; ctx->buffMsg.param[0] = ctx->moveNoCur; @@ -2657,16 +2657,16 @@ BOOL BtlCmd_TryMimic(BattleSystem *bsys, BATTLECONTEXT *ctx) { } if (moveIndex == LEARNED_MOVES_MAX) { - ctx->moveWork = ctx->moveNoBattlerPrev[ctx->battlerIdTarget]; - ctx->battleMons[ctx->battlerIdAttacker].moves[mimicIndex] = ctx->moveWork; - if (ctx->unk_334.moveData[ctx->moveWork].pp < 5) { - ctx->battleMons[ctx->battlerIdAttacker].movePPCur[mimicIndex] = ctx->unk_334.moveData[ctx->moveWork].pp; + ctx->moveTemp = ctx->moveNoBattlerPrev[ctx->battlerIdTarget]; + ctx->battleMons[ctx->battlerIdAttacker].moves[mimicIndex] = ctx->moveTemp; + if (ctx->unk_334.moveData[ctx->moveTemp].pp < 5) { + ctx->battleMons[ctx->battlerIdAttacker].movePPCur[mimicIndex] = ctx->unk_334.moveData[ctx->moveTemp].pp; } else { ctx->battleMons[ctx->battlerIdAttacker].movePPCur[mimicIndex] = 5; } ctx->battleMons[ctx->battlerIdAttacker].unk88.mimicedMoveIndex |= MaskOfFlagNo(mimicIndex); - if (ctx->moveWork == MOVE_LAST_RESORT) { + if (ctx->moveTemp == MOVE_LAST_RESORT) { ctx->battleMons[ctx->battlerIdAttacker].unk88.lastResortCount = 0; } } else { @@ -2700,7 +2700,7 @@ BOOL BtlCmd_Metronome(BattleSystem *bsys, BATTLECONTEXT *ctx) { continue; } - ctx->moveWork = moveNo; + ctx->moveTemp = moveNo; break; } @@ -2717,8 +2717,8 @@ BOOL BtlCmd_TryDisable(BattleSystem *bsys, BATTLECONTEXT *ctx) { if ((ctx->battleMons[ctx->battlerIdTarget].unk88.disabledMove == 0) && disabledMoveIndex != 4 && ctx->battleMons[ctx->battlerIdTarget].movePPCur[disabledMoveIndex] && ctx->moveNoBattlerPrev[ctx->battlerIdTarget]) { - ctx->moveWork = ctx->moveNoBattlerPrev[ctx->battlerIdTarget]; - ctx->battleMons[ctx->battlerIdTarget].unk88.disabledMove = ctx->moveWork; + ctx->moveTemp = ctx->moveNoBattlerPrev[ctx->battlerIdTarget]; + ctx->battleMons[ctx->battlerIdTarget].unk88.disabledMove = ctx->moveTemp; ctx->battleMons[ctx->battlerIdTarget].unk88.disabledTurns = BattleSystem_Random(bsys) % 4 + 3; } else { BattleScriptIncrementPointer(ctx, adrs); @@ -2802,8 +2802,8 @@ BOOL BtlCmd_TryEncore(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->battleMons[ctx->battlerIdTarget].unk88.encoredMove == 0 && encoredMoveIndex != LEARNED_MOVES_MAX && ctx->battleMons[ctx->battlerIdTarget].movePPCur[encoredMoveIndex] && ctx->moveNoBattlerPrev[ctx->battlerIdTarget]) { - ctx->moveWork = ctx->moveNoBattlerPrev[ctx->battlerIdTarget]; - ctx->battleMons[ctx->battlerIdTarget].unk88.encoredMove = ctx->moveWork; + ctx->moveTemp = ctx->moveNoBattlerPrev[ctx->battlerIdTarget]; + ctx->battleMons[ctx->battlerIdTarget].unk88.encoredMove = ctx->moveTemp; ctx->battleMons[ctx->battlerIdTarget].unk88.encoredMoveIndex = encoredMoveIndex; ctx->battleMons[ctx->battlerIdTarget].unk88.encoredTurns = BattleSystem_Random(bsys) % 5 + 3; } else { @@ -2839,7 +2839,7 @@ BOOL BtlCmd_TryConversion2(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (typeMove == moveType && val <= 5 && GetBattlerVar(ctx, ctx->battlerIdAttacker, BMON_DATA_TYPE_1, NULL) != typeMon && GetBattlerVar(ctx, ctx->battlerIdAttacker, BMON_DATA_TYPE_2, NULL) != typeMon) { ctx->battleMons[ctx->battlerIdAttacker].type1 = typeMon; ctx->battleMons[ctx->battlerIdAttacker].type2 = typeMon; - ctx->msgWork = typeMon; + ctx->msgTemp = typeMon; return FALSE; } } @@ -2849,7 +2849,7 @@ BOOL BtlCmd_TryConversion2(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (typeMove == moveType && val <= 5 && GetBattlerVar(ctx, ctx->battlerIdAttacker, BMON_DATA_TYPE_1, NULL) != typeMon && GetBattlerVar(ctx, ctx->battlerIdAttacker, BMON_DATA_TYPE_2, NULL) != typeMon) { ctx->battleMons[ctx->battlerIdAttacker].type1 = typeMon; ctx->battleMons[ctx->battlerIdAttacker].type2 = typeMon; - ctx->msgWork = typeMon; + ctx->msgTemp = typeMon; return FALSE; } i++; @@ -2885,8 +2885,8 @@ BOOL BtlCmd_TrySketch(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->battleMons[ctx->battlerIdAttacker].moves[sketchIndex] = ctx->moveNoSketch[ctx->battlerIdTarget]; ctx->battleMons[ctx->battlerIdAttacker].movePPCur[sketchIndex] = ctx->unk_334.moveData[ctx->moveNoSketch[ctx->battlerIdTarget]].pp; BattleController_EmitBattleMonToPartyMonCopy(bsys, ctx, ctx->battlerIdAttacker); - ctx->moveWork = ctx->moveNoSketch[ctx->battlerIdTarget]; - if (ctx->moveWork == MOVE_LAST_RESORT) { + ctx->moveTemp = ctx->moveNoSketch[ctx->battlerIdTarget]; + if (ctx->moveTemp == MOVE_LAST_RESORT) { ctx->battleMons[ctx->battlerIdAttacker].unk88.lastResortCount = 0; } } else { @@ -2924,7 +2924,7 @@ BOOL BtlCmd_TrySleepTalk(BattleSystem *bsys, BATTLECONTEXT *ctx) { do { moveIndex = BattleSystem_Random(bsys) % 4; } while (MaskOfFlagNo(moveIndex) & nonSelectableMoves); - ctx->moveWork = ctx->battleMons[ctx->battlerIdAttacker].moves[moveIndex]; + ctx->moveTemp = ctx->battleMons[ctx->battlerIdAttacker].moves[moveIndex]; } @@ -2967,8 +2967,8 @@ BOOL BtlCmd_TrySpite(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->battleMons[ctx->battlerIdTarget].movePPCur[moveIndex] < ppLoss) { ppLoss = ctx->battleMons[ctx->battlerIdTarget].movePPCur[moveIndex]; } - ctx->moveWork = ctx->moveNoBattlerPrev[ctx->battlerIdTarget]; - ctx->msgWork = ppLoss; + ctx->moveTemp = ctx->moveNoBattlerPrev[ctx->battlerIdTarget]; + ctx->msgTemp = ppLoss; ctx->battleMons[ctx->battlerIdTarget].movePPCur[moveIndex] -= ppLoss; CopyBattleMonToPartyMon(bsys, ctx, ctx->battlerIdTarget); } @@ -2985,15 +2985,15 @@ BOOL BtlCmd_HealBell(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); - ctx->calcWork = 0; + ctx->calcTemp = 0; if (ctx->moveNoCur == MOVE_HEAL_BELL) { - ctx->moveWork = ctx->moveNoCur; + ctx->moveTemp = ctx->moveNoCur; if (GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_SOUNDPROOF) { ctx->battleMons[ctx->battlerIdAttacker].status = STATUS_NONE; ctx->battleMons[ctx->battlerIdAttacker].status2 &= ~STATUS2_27; } else { - ctx->calcWork |= 5; + ctx->calcTemp |= 5; } if (battleType & BATTLE_TYPE_DOUBLES) { @@ -3003,12 +3003,12 @@ BOOL BtlCmd_HealBell(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->battleMons[battlerId].status = STATUS_NONE; ctx->battleMons[battlerId].status2 &= ~STATUS2_27; } else { - ctx->battlerIdWork = battlerId; - ctx->calcWork |= 10; + ctx->battlerIdTemp = battlerId; + ctx->calcTemp |= 10; } } } else { - ctx->calcWork |= 8; + ctx->calcTemp |= 8; } } else { //aromatherapy ctx->battleMons[ctx->battlerIdAttacker].status = STATUS_NONE; @@ -3020,7 +3020,7 @@ BOOL BtlCmd_HealBell(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->battleMons[battlerId].status2 &= ~STATUS2_27; } } else { - ctx->calcWork |= 8; + ctx->calcTemp |= 8; } } @@ -3113,7 +3113,7 @@ BOOL BtlCmd_TrySubstitute(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->battleMons[ctx->battlerIdAttacker].hp <= subHp) { BattleScriptIncrementPointer(ctx, adrs); } else { - ctx->hpCalcWork = -subHp; + ctx->hpCalc = -subHp; ctx->battleMons[ctx->battlerIdAttacker].unk88.substituteHp = subHp; ctx->battleMons[ctx->battlerIdAttacker].status2 &= ~STATUS2_BINDING_ALL; } @@ -3265,8 +3265,8 @@ BOOL BtlCmd_CheckSpikes(BattleSystem *bsys, BATTLECONTEXT *ctx) { int fieldSide = BattleSystem_GetFieldSide(bsys, battlerId); if (ctx->fieldSideConditionData[fieldSide].spikesLayers && ctx->battleMons[battlerId].hp) { - ctx->hpCalcWork = (5 - ctx->fieldSideConditionData[fieldSide].spikesLayers) * 2; - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, ctx->hpCalcWork); + ctx->hpCalc = (5 - ctx->fieldSideConditionData[fieldSide].spikesLayers) * 2; + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, ctx->hpCalc); } else { BattleScriptIncrementPointer(ctx, adrs); } @@ -3281,7 +3281,7 @@ BOOL BtlCmd_TryPerishSong(BattleSystem *bsys, BATTLECONTEXT *ctx) { int adrs = BattleScriptReadWord(ctx); int maxBattlers = BattleSystem_GetMaxBattlers(bsys); - ctx->calcWork = maxBattlers; + ctx->calcTemp = maxBattlers; int cnt = 0; @@ -3329,8 +3329,8 @@ BOOL BtlCmd_WeatherDamageCalc(BattleSystem *bsys, BATTLECONTEXT *ctx) { u32 battlerId = GetBattlerIDBySide(bsys, ctx, BattleScriptReadWord(ctx)); - ctx->tempWork = 0; - ctx->hpCalcWork = 0; + ctx->tempData = 0; + ctx->hpCalc = 0; u32 type1 = GetBattlerVar(ctx, battlerId, BMON_DATA_TYPE_1, NULL); u32 type2 = GetBattlerVar(ctx, battlerId, BMON_DATA_TYPE_2, NULL); @@ -3342,17 +3342,17 @@ BOOL BtlCmd_WeatherDamageCalc(BattleSystem *bsys, BATTLECONTEXT *ctx) { type1 != TYPE_GROUND && type2 != TYPE_GROUND && ctx->battleMons[battlerId].hp && GetBattlerAbility(ctx, battlerId) != ABILITY_SAND_VEIL && !(ctx->battleMons[battlerId].moveEffectFlags & 0x40080)) { - ctx->moveWork = MOVE_SANDSTORM; - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, 16); + ctx->moveTemp = MOVE_SANDSTORM; + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, 16); } } if (ctx->fieldCondition & FIELD_CONDITION_SUN_ALL) { if (ctx->battleMons[battlerId].hp && !(ctx->battleMons[battlerId].moveEffectFlags & 0x40080)) { if (GetBattlerAbility(ctx, battlerId) == ABILITY_DRY_SKIN || GetBattlerAbility(ctx, battlerId) == ABILITY_SOLAR_POWER) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, 8); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, 8); } if (GetBattlerAbility(ctx, battlerId) == ABILITY_SOLAR_POWER) { - ctx->tempWork = 2; + ctx->tempData = 2; } } } @@ -3360,12 +3360,12 @@ BOOL BtlCmd_WeatherDamageCalc(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->battleMons[battlerId].hp && !(ctx->battleMons[battlerId].moveEffectFlags & 0x40080)) { if (GetBattlerAbility(ctx, battlerId) == ABILITY_ICE_BODY) { if (ctx->battleMons[battlerId].hp < ctx->battleMons[battlerId].maxHp) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, 16); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, 16); } } else if (type1 != TYPE_ICE && type2 != TYPE_ICE && GetBattlerAbility(ctx, battlerId) != ABILITY_SNOW_CLOAK) { - ctx->moveWork = MOVE_HAIL; - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, 16); + ctx->moveTemp = MOVE_HAIL; + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, 16); } } @@ -3373,26 +3373,26 @@ BOOL BtlCmd_WeatherDamageCalc(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->fieldCondition & FIELD_CONDITION_RAIN_ALL) { if (ctx->battleMons[battlerId].hp && ctx->battleMons[battlerId].hp < ctx->battleMons[battlerId].maxHp && GetBattlerAbility(ctx, battlerId) == ABILITY_RAIN_DISH) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, 16); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, 16); } if (ctx->battleMons[battlerId].hp && ctx->battleMons[battlerId].hp < ctx->battleMons[battlerId].maxHp && GetBattlerAbility(ctx, battlerId) == ABILITY_DRY_SKIN) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, 8); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, 8); } if (ctx->battleMons[battlerId].hp && (u8)ctx->battleMons[battlerId].status && GetBattlerAbility(ctx, battlerId) == ABILITY_HYDRATION) { if (ctx->battleMons[battlerId].status & STATUS_SLEEP) { - ctx->msgWork = 0; + ctx->msgTemp = 0; } else if (ctx->battleMons[battlerId].status & STATUS_POISON_ALL) { - ctx->msgWork = 1; + ctx->msgTemp = 1; } else if (ctx->battleMons[battlerId].status & STATUS_BURN) { - ctx->msgWork = 2; + ctx->msgTemp = 2; } else if (ctx->battleMons[battlerId].status & STATUS_PARALYSIS) { - ctx->msgWork = 3; + ctx->msgTemp = 3; } else { - ctx->msgWork = 4; + ctx->msgTemp = 4; } - ctx->tempWork = 1; + ctx->tempData = 1; } } } @@ -3453,12 +3453,12 @@ BOOL BtlCmd_TryAttract(BattleSystem *bsys, BATTLECONTEXT *ctx) { int adrs = BattleScriptReadWord(ctx); - if (ctx->battleMons[ctx->battlerIdWork].gender == ctx->battleMons[ctx->battlerIdStatChange].gender || + if (ctx->battleMons[ctx->battlerIdTemp].gender == ctx->battleMons[ctx->battlerIdStatChange].gender || ctx->battleMons[ctx->battlerIdStatChange].status2 & STATUS2_ATTRACT_ALL || - ctx->battleMons[ctx->battlerIdWork].gender == 2 || ctx->battleMons[ctx->battlerIdStatChange].gender == 2) { + ctx->battleMons[ctx->battlerIdTemp].gender == 2 || ctx->battleMons[ctx->battlerIdStatChange].gender == 2) { BattleScriptIncrementPointer(ctx, adrs); } else { - ctx->battleMons[ctx->battlerIdStatChange].status2 |= MaskOfFlagNo(ctx->battlerIdWork) << 16; + ctx->battleMons[ctx->battlerIdStatChange].status2 |= MaskOfFlagNo(ctx->battlerIdTemp) << 16; } return FALSE; @@ -3497,7 +3497,7 @@ BOOL BtlCmd_Present(BattleSystem *bsys, BATTLECONTEXT *ctx) { } else if (rand < 204) { ctx->movePower = 120; } else { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[ctx->battlerIdTarget].maxHp, 4); + ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdTarget].maxHp, 4); BattleScriptIncrementPointer(ctx, adrs); } @@ -3533,7 +3533,7 @@ BOOL BtlCmd_MagnitudeDamageCalc(BattleSystem *bsys, BATTLECONTEXT *ctx) { } } - ctx->msgWork = ctx->magnitude; + ctx->msgTemp = ctx->magnitude; return FALSE; } @@ -3562,8 +3562,8 @@ BOOL BtlCmd_RapidSpin(BattleSystem *bsys, BATTLECONTEXT *ctx) { //Binding Moves if (ctx->battleMons[ctx->battlerIdAttacker].status2 & STATUS2_BINDING_ALL) { ctx->battleMons[ctx->battlerIdAttacker].status2 &= ~STATUS2_BINDING_ALL; - ctx->battlerIdWork = ctx->battleMons[ctx->battlerIdAttacker].unk88.battlerIdBinding; - ctx->moveWork = ctx->battleMons[ctx->battlerIdAttacker].unk88.bindingMove; + ctx->battlerIdTemp = ctx->battleMons[ctx->battlerIdAttacker].unk88.battlerIdBinding; + ctx->moveTemp = ctx->battleMons[ctx->battlerIdAttacker].unk88.bindingMove; BattleScriptGotoSubscript(ctx, NARC_a_0_0_1, 116); return FALSE; } @@ -3572,7 +3572,7 @@ BOOL BtlCmd_RapidSpin(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags & MOVE_EFFECT_LEECH_SEED) { ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags &= ~MOVE_EFFECT_LEECH_SEED; ctx->battleMons[ctx->battlerIdAttacker].moveEffectFlags &= ~3; - ctx->moveWork = 73; + ctx->moveTemp = 73; BattleScriptGotoSubscript(ctx, NARC_a_0_0_1, 117); return FALSE; } @@ -3581,7 +3581,7 @@ BOOL BtlCmd_RapidSpin(BattleSystem *bsys, BATTLECONTEXT *ctx) { if(ctx->fieldSideConditionData[side].spikesLayers) { ctx->fieldSideConditionFlags[side] &= ~SIDE_CONDITION_SPIKES; ctx->fieldSideConditionData[side].spikesLayers = 0; - ctx->moveWork = MOVE_SPIKES; + ctx->moveTemp = MOVE_SPIKES; BattleScriptGotoSubscript(ctx, NARC_a_0_0_1, 117); return FALSE; } @@ -3590,7 +3590,7 @@ BOOL BtlCmd_RapidSpin(BattleSystem *bsys, BATTLECONTEXT *ctx) { if(ctx->fieldSideConditionData[side].toxicSpikesLayers) { ctx->fieldSideConditionFlags[side] &= ~SIDE_CONDITION_TOXIC_SPIKES; ctx->fieldSideConditionData[side].toxicSpikesLayers = 0; - ctx->moveWork = MOVE_TOXIC_SPIKES; + ctx->moveTemp = MOVE_TOXIC_SPIKES; BattleScriptGotoSubscript(ctx, NARC_a_0_0_1, 117); return FALSE; } @@ -3598,7 +3598,7 @@ BOOL BtlCmd_RapidSpin(BattleSystem *bsys, BATTLECONTEXT *ctx) { //Stealth Rocks if (ctx->fieldSideConditionFlags[side] & SIDE_CONDITION_STEALTH_ROCKS) { ctx->fieldSideConditionFlags[side] &= ~SIDE_CONDITION_STEALTH_ROCKS; - ctx->moveWork = MOVE_STEALTH_ROCK; + ctx->moveTemp = MOVE_STEALTH_ROCK; BattleScriptGotoSubscript(ctx, NARC_a_0_0_1, 117); return FALSE; } @@ -3612,11 +3612,11 @@ BOOL BtlCmd_ChangeWeatherBasedHPRecovery(BattleSystem *bsys, BATTLECONTEXT *ctx) BattleScriptIncrementPointer(ctx, 1); if (!(ctx->fieldCondition & FIELD_CONDITION_WEATHER) || CheckAbilityActive(bsys, ctx, CHECK_ABILITY_ALL_HP, 0, ABILITY_CLOUD_NINE) || CheckAbilityActive(bsys, ctx, CHECK_ABILITY_ALL_HP, 0, ABILITY_AIR_LOCK)) { - ctx->hpCalcWork = ctx->battleMons[ctx->battlerIdAttacker].maxHp / 2; + ctx->hpCalc = ctx->battleMons[ctx->battlerIdAttacker].maxHp / 2; } else if (ctx->fieldCondition & FIELD_CONDITION_SUN_ALL) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp*20, 30); + ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp*20, 30); } else { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp, 4); + ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp, 4); } return FALSE; @@ -3810,7 +3810,7 @@ BOOL BtlCmd_TryHelpingHand(BattleSystem *bsys, BATTLECONTEXT *ctx) { battlerId = GetBattlerIDBySide(bsys, ctx, 16); if ((ctx->unk_3108 & MaskOfFlagNo(battlerId)) == 0 && ctx->unk_21A8[battlerId][0] != 40 && ctx->battleMons[battlerId].hp && !ctx->turnData[ctx->battlerIdAttacker].helpingHandFlag && !ctx->turnData[battlerId].helpingHandFlag) { - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; ctx->turnData[battlerId].helpingHandFlag = TRUE; } else { BattleScriptIncrementPointer(ctx, adrs); @@ -3892,7 +3892,7 @@ BOOL BtlCmd_TryAssist(BattleSystem *bsys, BATTLECONTEXT *ctx) { } if (moveCnt) { - ctx->moveWork = avaliableMoves[BattleSystem_Random(bsys)%moveCnt]; + ctx->moveTemp = avaliableMoves[BattleSystem_Random(bsys)%moveCnt]; } else { BattleScriptIncrementPointer(ctx, unkA); } @@ -4232,7 +4232,7 @@ BOOL BtlCmd_TryGrudge(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->battleMons[ctx->battlerIdAttacker].hp && ctx->moveNoTemp != MOVE_STRUGGLE) { pos = ctx->movePos[ctx->battlerIdAttacker]; ctx->battleMons[ctx->battlerIdAttacker].movePPCur[pos] = 0; - ctx->moveWork = ctx->battleMons[ctx->battlerIdAttacker].moves[pos]; + ctx->moveTemp = ctx->battleMons[ctx->battlerIdAttacker].moves[pos]; CopyBattleMonToPartyMon(bsys, ctx, ctx->battlerIdAttacker); } else { BattleScriptIncrementPointer(ctx, adrs); @@ -4356,7 +4356,7 @@ BOOL BtlCmd_TryPursuit(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, adrs); } else { int itemEffect = GetBattlerHeldItemEffect(ctx, ctx->battlerIdAttacker); - BattleSystem_GetHeldItemDamageBoost(ctx, ctx->battlerIdAttacker, 0); + GetHeldItemModifier(ctx, ctx->battlerIdAttacker, 0); if (itemEffect == HOLD_EFFECT_CHOICE_ATK || itemEffect == HOLD_EFFECT_CHOICE_SPEED || itemEffect == HOLD_EFFECT_CHOICE_SPATK) { ctx->battleMons[ctx->battlerIdAttacker].unk88.moveNoChoice = moveNo; @@ -4565,7 +4565,7 @@ BOOL BtlCmd_TryMeFirst(BattleSystem *bsys, BATTLECONTEXT *ctx) { CheckLegalMeFirstMove(ctx, move) == TRUE && ctx->unk_334.moveData[move].power) { ctx->battleMons[ctx->battlerIdAttacker].unk88.meFirstFlag = TRUE; ctx->battleMons[ctx->battlerIdAttacker].unk88.meFirstCount = ctx->meFirstTotal; - ctx->moveWork = move; + ctx->moveTemp = move; } else { BattleScriptIncrementPointer(ctx, adrs); } @@ -4579,7 +4579,7 @@ BOOL BtlCmd_TryCopycat(BattleSystem *bsys, BATTLECONTEXT *ctx) { int adrs = BattleScriptReadWord(ctx); if (CheckMoveCallsOtherMove(ctx->moveNoPrev) == FALSE && ctx->moveNoPrev && CheckLegalMetronomeMove(bsys, ctx, ctx->battlerIdAttacker, ctx->moveNoPrev) == TRUE) { - ctx->moveWork = ctx->moveNoPrev; + ctx->moveTemp = ctx->moveNoPrev; } else { BattleScriptIncrementPointer(ctx, adrs); } @@ -4772,13 +4772,13 @@ BOOL BtlCmd_CheckToxicSpikes(BattleSystem *bsys, BATTLECONTEXT *ctx) { int fieldSide = BattleSystem_GetFieldSide(bsys, battlerId); if (ctx->fieldSideConditionData[fieldSide].toxicSpikesLayers) { - ctx->calcWork = ctx->fieldSideConditionData[fieldSide].toxicSpikesLayers; + ctx->calcTemp = ctx->fieldSideConditionData[fieldSide].toxicSpikesLayers; ctx->statChangeType = 6; ctx->battlerIdStatChange = battlerId; if (GetBattlerVar(ctx, ctx->battlerIdSwitch, BMON_DATA_TYPE_1, NULL) == TYPE_POISON || GetBattlerVar(ctx, ctx->battlerIdSwitch, BMON_DATA_TYPE_2, NULL) == TYPE_POISON) { ctx->fieldSideConditionFlags[fieldSide] &= ~(1 << 10); ctx->fieldSideConditionData[fieldSide].toxicSpikesLayers = 0; - ctx->calcWork = 0; + ctx->calcTemp = 0; } } else { BattleScriptIncrementPointer(ctx, adrs); @@ -4945,28 +4945,28 @@ BOOL BtlCmd_CheckItemEffect(BattleSystem *bsys, BATTLECONTEXT *ctx) { return FALSE; } -BOOL BtlCmd_GetItemEffect(BattleSystem *bsys, BATTLECONTEXT *ctx) { +BOOL BtlCmd_GetItemHoldEffect(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); int side = BattleScriptReadWord(ctx); int varId = BattleScriptReadWord(ctx); - int *var = BattleScriptGetVarPointer(bsys, ctx, varId); + int *holdEffect = BattleScriptGetVarPointer(bsys, ctx, varId); int battlerId = GetBattlerIDBySide(bsys, ctx, side); u16 item = GetBattlerHeldItem(ctx, battlerId); - *var = GetItemHoldEffect(ctx, item, 1); + *holdEffect = GetItemVar(ctx, item, ITEM_VAR_HOLD_EFFECT); return FALSE; } -BOOL BtlCmd_GetItemHoldEffect(BattleSystem *bsys, BATTLECONTEXT *ctx) { +BOOL BtlCmd_GetItemModifier(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); int side = BattleScriptReadWord(ctx); int varId = BattleScriptReadWord(ctx); int *var = BattleScriptGetVarPointer(bsys, ctx, varId); u16 item = GetBattlerHeldItem(ctx, GetBattlerIDBySide(bsys, ctx, side)); - *var = GetItemHoldEffect(ctx, item, 2); + *var = GetItemVar(ctx, item, ITEM_VAR_MODIFIER); return FALSE; } @@ -4992,7 +4992,7 @@ BOOL BtlCmd_TryCamouflage(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (GetBattlerVar(ctx, ctx->battlerIdAttacker, BMON_DATA_TYPE_1, NULL) != type && GetBattlerVar(ctx, ctx->battlerIdAttacker, BMON_DATA_TYPE_2, NULL) != type) { ctx->battleMons[ctx->battlerIdAttacker].type1 = type; ctx->battleMons[ctx->battlerIdAttacker].type2 = type; - ctx->msgWork = type; + ctx->msgTemp = type; } else { BattleScriptIncrementPointer(ctx, adrs); } @@ -5009,7 +5009,7 @@ BOOL BtlCmd_NaturePower(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (terrain > 12) { terrain = 12; } - ctx->moveWork = sNaturePowerMoveTable[terrain]; + ctx->moveTemp = sNaturePowerMoveTable[terrain]; return FALSE; } @@ -5154,19 +5154,19 @@ BOOL BtlCmd_CheckStealthRock(BattleSystem *bsys, BATTLECONTEXT *ctx) { if (ctx->fieldSideConditionFlags[fieldSide] & 128 && ctx->battleMons[battlerId].hp) { switch (CalculateTypeEffectiveness(TYPE_ROCK, type1, type2)) { case 160: - ctx->hpCalcWork = 2; + ctx->hpCalc = 2; break; case 80: - ctx->hpCalcWork = 4; + ctx->hpCalc = 4; break; case 40: - ctx->hpCalcWork = 8; + ctx->hpCalc = 8; break; case 20: - ctx->hpCalcWork = 16; + ctx->hpCalc = 16; break; case 10: - ctx->hpCalcWork = 32; + ctx->hpCalc = 32; break; case 0: BattleScriptIncrementPointer(ctx, adrs); @@ -5175,7 +5175,7 @@ BOOL BtlCmd_CheckStealthRock(BattleSystem *bsys, BATTLECONTEXT *ctx) { GF_ASSERT(FALSE); break; } - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, ctx->hpCalcWork); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, ctx->hpCalc); } else { BattleScriptIncrementPointer(ctx, adrs); } @@ -5248,7 +5248,7 @@ BOOL BtlCmd_CheckChatterActivation(BattleSystem *bsys, BATTLECONTEXT *ctx) { BOOL BtlCmd_GetMoveParam(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); - ctx->calcWork = GetMoveTblAttr(&ctx->unk_334.moveData[ctx->moveNoCur], (MoveAttr) BattleScriptReadWord(ctx)); + ctx->calcTemp = GetMoveTblAttr(&ctx->unk_334.moveData[ctx->moveNoCur], (MoveAttr) BattleScriptReadWord(ctx)); return FALSE; } @@ -5289,7 +5289,7 @@ BOOL BtlCmd_RecoverStatus(BattleSystem *bsys, BATTLECONTEXT *ctx) { int side = BattleScriptReadWord(ctx); int battlerId = GetBattlerIDBySide(bsys, ctx, side); - BattleSystem_RecoverStatus(bsys, battlerId, ctx->selectedMonIndex[battlerId], 0, ctx->itemWork); + BattleSystem_RecoverStatus(bsys, battlerId, ctx->selectedMonIndex[battlerId], 0, ctx->itemTemp); return FALSE; } @@ -5396,7 +5396,7 @@ BOOL BtlCmd_CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); int adrs = BattleScriptReadWord(ctx); - if (CheckAbilityEffectOnHit(bsys, ctx, &ctx->tempWork) == FALSE) { + if (CheckAbilityEffectOnHit(bsys, ctx, &ctx->tempData) == FALSE) { BattleScriptIncrementPointer(ctx, adrs); } @@ -5579,7 +5579,7 @@ BOOL BtlCmd_TryRecycle(BattleSystem *bsys, BATTLECONTEXT *ctx) { int adrs = BattleScriptReadWord(ctx); if (ctx->recycleItem[ctx->battlerIdAttacker]) { - ctx->itemWork = ctx->recycleItem[ctx->battlerIdAttacker]; + ctx->itemTemp = ctx->recycleItem[ctx->battlerIdAttacker]; ctx->recycleItem[ctx->battlerIdAttacker] = 0; } else { BattleScriptIncrementPointer(ctx, adrs); @@ -5592,7 +5592,7 @@ BOOL BtlCmd_CheckItemEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx) { BattleScriptIncrementPointer(ctx, 1); int adrs = BattleScriptReadWord(ctx); - if (CheckItemEffectOnHit(bsys, ctx, &ctx->tempWork) == FALSE) { + if (CheckItemEffectOnHit(bsys, ctx, &ctx->tempData) == FALSE) { BattleScriptIncrementPointer(ctx, adrs); } @@ -5632,7 +5632,7 @@ BOOL BtlCmd_CheckHoldOnWith1HP(BattleSystem *bsys, BATTLECONTEXT *ctx) { int battlerId = GetBattlerIDBySide(bsys, ctx, side); int itemEffect = GetBattlerHeldItemEffect(ctx, battlerId); - int activationChance = BattleSystem_GetHeldItemDamageBoost(ctx, battlerId, 0); + int activationChance = GetHeldItemModifier(ctx, battlerId, 0); if (itemEffect == HOLD_EFFECT_MAYBE_ENDURE && (BattleSystem_Random(bsys)%100) < activationChance) { flag = TRUE; @@ -5641,8 +5641,8 @@ BOOL BtlCmd_CheckHoldOnWith1HP(BattleSystem *bsys, BATTLECONTEXT *ctx) { flag = TRUE; } - if (flag && (ctx->battleMons[battlerId].hp + ctx->hpCalcWork) <= 0) { - ctx->hpCalcWork = (ctx->battleMons[battlerId].hp - 1)*-1; + if (flag && (ctx->battleMons[battlerId].hp + ctx->hpCalc) <= 0) { + ctx->hpCalc = (ctx->battleMons[battlerId].hp - 1)*-1; ctx->moveStatusFlag |= 256; } @@ -5715,7 +5715,7 @@ BOOL BtlCmd_CheckItemEffectOnUTurn(BattleSystem *bsys, BATTLECONTEXT *ctx) { int adrs = BattleScriptReadWord(ctx); - if (!CheckItemEffectOnUTurn(bsys, ctx, &ctx->tempWork)) { + if (!CheckItemEffectOnUTurn(bsys, ctx, &ctx->tempData)) { BattleScriptIncrementPointer(ctx, adrs); } @@ -5816,7 +5816,7 @@ BOOL BtlCmd_GetMonDataFromNarc(BattleSystem *bsys, BATTLECONTEXT *ctx) { int *formPtr = BattleScriptGetVarPointer(bsys, ctx, form); - ctx->calcWork = GetMonBaseStat_HandleAlternateForm(species, *formPtr, stat); + ctx->calcTemp = GetMonBaseStat_HandleAlternateForm(species, *formPtr, stat); return FALSE; } @@ -5841,9 +5841,9 @@ BOOL BtlCmd_222(BattleSystem *bsys, BATTLECONTEXT *ctx) { int battlerId = GetBattlerIDBySide(bsys, ctx, side); if (TrainerMessageWithIdPairExists(BattleSystem_GetTrainerIndex(bsys, battlerId), msgIndex, HEAP_ID_BATTLE)) { - ctx->msgWork = msgIndex; + ctx->msgTemp = msgIndex; } else { - ctx->msgWork = 0; + ctx->msgTemp = 0; } return FALSE; @@ -5866,7 +5866,7 @@ BOOL BtlCmd_EndScript(BattleSystem *bsys, BATTLECONTEXT *ctx) { } int BattleScriptReadWord(BATTLECONTEXT *ctx) { - int data = ctx->battleScriptWork[ctx->scriptSeqNo]; + int data = ctx->battleScriptBuffer[ctx->scriptSeqNo]; ctx->scriptSeqNo++; @@ -5906,7 +5906,7 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BATTLECONTEXT *ctx, i case 8: return &ctx->unk_2158; case 9: - return &ctx->calcWork; + return &ctx->calcTemp; case 10: return &ctx->moveStatusFlag; case 11: @@ -5928,11 +5928,11 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BATTLECONTEXT *ctx, i case 19: return &ctx->battlerIdSwitch; case 20: - return &ctx->battlerIdWork; + return &ctx->battlerIdTemp; case 21: return &ctx->unk_30E4[ctx->battlerIdAttacker]; case 22: - return &ctx->msgWork; + return &ctx->msgTemp; case 23: return &ctx->unk_14C; case 24: @@ -5952,17 +5952,17 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BATTLECONTEXT *ctx, i case 31: return &ctx->unk_38; case 32: - return &ctx->hpCalcWork; + return &ctx->hpCalc; case 33: return &bsys->battleOutcomeFlag; case 34: return &ctx->statChangeParam; case 35: - return &ctx->moveWork; + return &ctx->moveTemp; case 36: - return &ctx->itemWork; + return &ctx->itemTemp; case 37: - return &ctx->abilityWork; + return &ctx->abilityTemp; case 38: return &ctx->fieldConditionData.weatherTurns; case 39: @@ -5974,7 +5974,7 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BATTLECONTEXT *ctx, i case 42: return &ctx->turnData[ctx->battlerIdAttacker].battlerBitSpecialDamage; case 43: - return &ctx->tempWork; + return &ctx->tempData; case 44: return &ctx->criticalMultiplier; case 45: @@ -6020,7 +6020,7 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BATTLECONTEXT *ctx, i case 65: return &ctx->selfTurnData[ctx->battlerIdTarget].unk4; case 66: - return &ctx->turnData[ctx->battlerIdWork].unk3C; + return &ctx->turnData[ctx->battlerIdTemp].unk3C; case 67: return &ctx->turnData[ctx->battlerIdTarget].unk3C; case 68: diff --git a/src/battle/overlay_12_0224E4FC.c b/src/battle/overlay_12_0224E4FC.c index 5041e9017c..6c66241cc5 100644 --- a/src/battle/overlay_12_0224E4FC.c +++ b/src/battle/overlay_12_0224E4FC.c @@ -157,7 +157,7 @@ void ReadBattleScriptFromNarc(BATTLECONTEXT *ctx, NarcId narcId, int fileId) { ctx->scriptNarcId = narcId; ctx->scriptFileId = fileId; ctx->scriptSeqNo = 0; - ReadWholeNarcMemberByIdPair(&ctx->battleScriptWork, narcId, fileId); + ReadWholeNarcMemberByIdPair(&ctx->battleScriptBuffer, narcId, fileId); } //PushBattleScriptFromNarc..? @@ -171,7 +171,7 @@ void ov12_0224EBDC(BATTLECONTEXT *ctx, NarcId narcId, int fileId) { ctx->scriptNarcId = narcId; ctx->scriptFileId = fileId; ctx->scriptSeqNo = 0; - ReadWholeNarcMemberByIdPair(&ctx->battleScriptWork, narcId, fileId); + ReadWholeNarcMemberByIdPair(&ctx->battleScriptBuffer, narcId, fileId); } //BattleScript_Pop..? @@ -429,7 +429,7 @@ int GetBattlerVar(BATTLECONTEXT *ctx, int battlerId, u32 id, void *data) { case BMON_DATA_HEAL_BLOCK: return mon->unk88.healBlockTurns; case BMON_DATA_81: - return mon->unk88.unk4_13; + return mon->unk88.embargoFlag; case BMON_DATA_ITEM_KNOCKED_OFF: return mon->unk88.knockOffFlag; case BMON_DATA_METRONOME: //refers to the actual item, not the move @@ -465,7 +465,7 @@ int GetBattlerVar(BATTLECONTEXT *ctx, int battlerId, u32 id, void *data) { case BMON_DATA_FORM: return mon->form; case BMON_DATA_100: - return GetBattlerVar(ctx, battlerId, ctx->tempWork, data); + return GetBattlerVar(ctx, battlerId, ctx->tempData, data); default: GF_ASSERT(FALSE); } @@ -704,7 +704,7 @@ void SetBattlerVar(BATTLECONTEXT *ctx, int battlerId, u32 id, void *data) { mon->unk88.healBlockTurns = *data8; break; case BMON_DATA_81: - mon->unk88.unk4_13 = *data8; + mon->unk88.embargoFlag = *data8; break; case BMON_DATA_ITEM_KNOCKED_OFF: mon->unk88.knockOffFlag = *data8; @@ -758,7 +758,7 @@ void SetBattlerVar(BATTLECONTEXT *ctx, int battlerId, u32 id, void *data) { mon->form = *data8; break; case BMON_DATA_100: - SetBattlerVar(ctx, battlerId, ctx->tempWork, data); + SetBattlerVar(ctx, battlerId, ctx->tempData, data); break; default: GF_ASSERT(FALSE); @@ -993,9 +993,9 @@ u8 CheckSortSpeed(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId1, int ba ability2 = GetBattlerAbility(ctx, battlerId2); heldItem1 = GetBattlerHeldItemEffect(ctx, battlerId1); - extra1 = BattleSystem_GetHeldItemDamageBoost(ctx, battlerId1, 0); + extra1 = GetHeldItemModifier(ctx, battlerId1, 0); heldItem2 = GetBattlerHeldItemEffect(ctx, battlerId2); - extra2 = BattleSystem_GetHeldItemDamageBoost(ctx, battlerId2, 0); + extra2 = GetHeldItemModifier(ctx, battlerId2, 0); speedStatChange1 = ctx->battleMons[battlerId1].statChanges[3]; speedStatChange2 = ctx->battleMons[battlerId2].statChanges[3]; @@ -1034,7 +1034,7 @@ u8 CheckSortSpeed(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId1, int ba } for (i = 0; i < NELEMS(sSpeedHalvingItemEffects); i++) { - if (GetItemHoldEffect(ctx, ctx->battleMons[battlerId1].item, 1) == sSpeedHalvingItemEffects[i]) { + if (GetItemVar(ctx, ctx->battleMons[battlerId1].item, ITEM_VAR_HOLD_EFFECT) == sSpeedHalvingItemEffects[i]) { speed1 /= 2; break; } @@ -1093,7 +1093,7 @@ u8 CheckSortSpeed(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId1, int ba } for (i = 0; i < NELEMS(sSpeedHalvingItemEffects); i++) { - if (GetItemHoldEffect(ctx, ctx->battleMons[battlerId2].item, 1) == sSpeedHalvingItemEffects[i]) { + if (GetItemVar(ctx, ctx->battleMons[battlerId2].item, ITEM_VAR_HOLD_EFFECT) == sSpeedHalvingItemEffects[i]) { speed2 /= 2; break; } @@ -1623,7 +1623,7 @@ BOOL CheckTrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ctx) { case 0: if (ctx->battleMons[1].unk78 == 1 && !(ctx->linkStatus2 & 0x20) && TrainerMessageWithIdPairExists(trainerIndex, 13, HEAP_ID_BATTLE)) { ctx->linkStatus2 |= 0x20; - ctx->msgWork = 13; + ctx->msgTemp = 13; return TRUE; } state++; @@ -1631,7 +1631,7 @@ BOOL CheckTrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ctx) { case 1: if (!(ctx->battleMons[1].msgFlag & 2) && ctx->battleMons[1].hp <= ctx->battleMons[1].maxHp / 2 && TrainerMessageWithIdPairExists(trainerIndex, 14, HEAP_ID_BATTLE)) { ctx->battleMons[1].msgFlag |= 2; - ctx->msgWork = 14; + ctx->msgTemp = 14; return TRUE; } state++; @@ -1654,7 +1654,7 @@ BOOL CheckTrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ctx) { } if (aliveMons == 1 && TrainerMessageWithIdPairExists(trainerIndex, 15, HEAP_ID_BATTLE)) { ctx->battleMons[1].msgFlag |= 3; - ctx->msgWork = 15; + ctx->msgTemp = 15; return TRUE; } } @@ -1678,7 +1678,7 @@ BOOL CheckTrainerMessage(BattleSystem *bsys, BATTLECONTEXT *ctx) { } if (aliveMons == 1 && (ctx->battleMons[1].hp <= ctx->battleMons[1].maxHp / 2) && TrainerMessageWithIdPairExists(trainerIndex, 16, HEAP_ID_BATTLE)) { ctx->battleMons[1].msgFlag |= 4; - ctx->msgWork = 16; + ctx->msgTemp = 16; return TRUE; } } @@ -1829,7 +1829,7 @@ void InitSwitchWork(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { ctx->battleMons[battlerId].unk88.perishSongTurns = unkStruct.perishSongTurns; ctx->battleMons[battlerId].unk88.battlerIdMeanLook = unkStruct.battlerIdMeanLook; ctx->battleMons[battlerId].unk88.magnetRiseTurns = unkStruct.magnetRiseTurns; - ctx->battleMons[battlerId].unk88.unk4_13 = unkStruct.unk4_13; + ctx->battleMons[battlerId].unk88.embargoFlag = unkStruct.embargoFlag; ctx->battleMons[battlerId].unk88.healBlockTurns = unkStruct.healBlockTurns; } @@ -2127,9 +2127,9 @@ int ov12_02251D28(BattleSystem *bsys, BATTLECONTEXT *ctx, int moveNo, int moveTy } itemAttacker = GetBattlerHeldItemEffect(ctx, battlerIdAttacker); - extraAttacker = BattleSystem_GetHeldItemDamageBoost(ctx, battlerIdAttacker, 0); + extraAttacker = GetHeldItemModifier(ctx, battlerIdAttacker, 0); itemTarget = GetBattlerHeldItemEffect(ctx, battlerIdTarget); - extraTarget = BattleSystem_GetHeldItemDamageBoost(ctx, battlerIdTarget, 0); + extraTarget = GetHeldItemModifier(ctx, battlerIdTarget, 0); if (GetBattlerAbility(ctx, battlerIdAttacker) == ABILITY_NORMALIZE) { moveType = TYPE_NORMAL; @@ -2233,7 +2233,7 @@ asm int ov12_02251D28(BattleSystem *bsys, BATTLECONTEXT *ctx, int moveNo, int mo add r0, r5, #0 add r1, r7, #0 mov r2, #0 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp, #0x1c] @@ -2246,7 +2246,7 @@ asm int ov12_02251D28(BattleSystem *bsys, BATTLECONTEXT *ctx, int moveNo, int mo add r0, r5, #0 add r1, r6, #0 mov r2, #0 - bl BattleSystem_GetHeldItemDamageBoost + bl GetHeldItemModifier add r0, r5, #0 add r1, r7, #0 bl GetBattlerAbility @@ -3340,11 +3340,11 @@ int ov12_02252EC8(BATTLECONTEXT *ctx, int battlerIdAttacker, int battlerIdTarget } if (CheckBattlerAbilityIfNotIgnored(ctx, battlerIdAttacker, battlerIdTarget, ABILITY_VOLT_ABSORB) == TRUE && moveType == TYPE_ELECTRIC && battlerIdAttacker != battlerIdTarget) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerIdTarget].maxHp, 4); + 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) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerIdTarget].maxHp, 4); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerIdTarget].maxHp, 4); state = 178; } int moveNoCur = ctx->moveNoCur; @@ -3365,7 +3365,7 @@ int ov12_02252EC8(BATTLECONTEXT *ctx, int battlerIdAttacker, int 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) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerIdTarget].maxHp, 4); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerIdTarget].maxHp, 4); state = 178; } @@ -3389,17 +3389,17 @@ BOOL ov12_02253068(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { case ABILITY_SHED_SKIN: if ((ctx->battleMons[battlerId].status & STATUS_ALL) && ctx->battleMons[battlerId].hp && ((BattleSystem_Random(bsys) % 10) < 3)) { if (ctx->battleMons[battlerId].status & STATUS_SLEEP) { - ctx->msgWork = 0; + ctx->msgTemp = 0; } else if (ctx->battleMons[battlerId].status & STATUS_POISON_ALL) { - ctx->msgWork = 1; + ctx->msgTemp = 1; } else if (ctx->battleMons[battlerId].status & STATUS_BURN) { - ctx->msgWork = 2; + ctx->msgTemp = 2; } else if (ctx->battleMons[battlerId].status & STATUS_PARALYSIS) { - ctx->msgWork = 3; + ctx->msgTemp = 3; } else { - ctx->msgWork = 4; + ctx->msgTemp = 4; } - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; state = 190; ret = TRUE; } @@ -3507,7 +3507,7 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->battleMons[battlerId].hp && ctx->battleMons[battlerId].item != ITEM_GRISEOUS_ORB && ctx->battleMons[ctx->unk_120].hp && GetBattlerAbility(ctx, battlerId) == ABILITY_TRACE) { ctx->battleMons[battlerId].traceFlag = TRUE; - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; script = 187; flag = TRUE; break; @@ -3554,7 +3554,7 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { } } if (flag == TRUE) { - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; break; } } @@ -3567,7 +3567,7 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { battlerId = ctx->turnOrder[i]; if (!ctx->battleMons[battlerId].intimidateFlag && ctx->battleMons[battlerId].hp && GetBattlerAbility(ctx, battlerId) == ABILITY_INTIMIDATE) { ctx->battleMons[battlerId].intimidateFlag = TRUE; - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; script = 186; flag = TRUE; break; @@ -3638,7 +3638,7 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { } } if (flag == TRUE) { - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; script = 194; } break; @@ -3676,7 +3676,7 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { case 38: //OHKO? if (powerTemp < 150 || (powerTemp == 150 && (BattleSystem_Random(bsys) & 1))) { powerTemp = 150; - ctx->moveWork = moveNo; + ctx->moveTemp = moveNo; } break; //Counter, Mirror Coat, Metal Burst @@ -3685,13 +3685,13 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { case 227: if (powerTemp < 120 || ((powerTemp == 120) && (BattleSystem_Random(bsys) & 1))) { powerTemp = 120; - ctx->moveWork = moveNo; + ctx->moveTemp = moveNo; } break; default: if (powerTemp < 80 || ((powerTemp == 80) && (BattleSystem_Random(bsys) & 1))) { powerTemp = 80; - ctx->moveWork = moveNo; + ctx->moveTemp = moveNo; } break; } @@ -3699,7 +3699,7 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { default: if (powerTemp < power || ((powerTemp == power) && (BattleSystem_Random(bsys) & 1))) { powerTemp = power; - ctx->moveWork = moveNo; + ctx->moveTemp = moveNo; } break; } @@ -3707,14 +3707,14 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { } } if (powerTemp) { - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; script = 195; flag = TRUE; } else if (hp) { j = ov12_02253DA0(bsys, ctx, battlerId); index = GetBattlerLearnedMoveCount(bsys, ctx, j); - ctx->moveWork = ctx->battleMons[j].moves[BattleSystem_Random(bsys) % index]; - ctx->battlerIdWork = battlerId; + ctx->moveTemp = ctx->battleMons[j].moves[BattleSystem_Random(bsys) % index]; + ctx->battlerIdTemp = battlerId; script = 195; flag = TRUE; } @@ -3737,22 +3737,22 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { battlerIdTargets[1] = ov12_0223ABB8(bsys, battlerId, 2); if (ctx->battleMons[battlerIdTargets[0]].hp && ctx->battleMons[battlerIdTargets[0]].item && ctx->battleMons[battlerIdTargets[1]].hp && ctx->battleMons[battlerIdTargets[1]].item) { - ctx->itemWork = ctx->battleMons[battlerIdTargets[BattleSystem_Random(bsys) & 1]].item; + ctx->itemTemp = ctx->battleMons[battlerIdTargets[BattleSystem_Random(bsys) & 1]].item; flag = TRUE; } else if (ctx->battleMons[battlerIdTargets[0]].hp && ctx->battleMons[battlerIdTargets[0]].item) { - ctx->itemWork = ctx->battleMons[battlerIdTargets[0]].item; + ctx->itemTemp = ctx->battleMons[battlerIdTargets[0]].item; flag = TRUE; } else if (ctx->battleMons[battlerIdTargets[1]].hp && ctx->battleMons[battlerIdTargets[1]].item) { - ctx->itemWork = ctx->battleMons[battlerIdTargets[1]].item; + ctx->itemTemp = ctx->battleMons[battlerIdTargets[1]].item; flag = TRUE; } } else if (ctx->battleMons[battlerId ^ 1].hp && ctx->battleMons[battlerId ^ 1].item) { - ctx->itemWork = ctx->battleMons[battlerId ^ 1].item; + ctx->itemTemp = ctx->battleMons[battlerId ^ 1].item; flag = TRUE; } } if (flag == TRUE) { - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; script = 253; break; } @@ -3766,14 +3766,14 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { battlerId = ctx->turnOrder[i]; if (!ctx->battleMons[battlerId].slowStartFlag && ctx->battleMons[battlerId].hp && GetBattlerAbility(ctx, battlerId) == ABILITY_SLOW_START && ctx->totalTurns <= ctx->battleMons[battlerId].unk88.slowStartTurns) { ctx->battleMons[battlerId].slowStartFlag = TRUE; - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; script = 196; flag = TRUE; break; } if (!ctx->battleMons[battlerId].slowStartEnded && ctx->battleMons[battlerId].hp && GetBattlerAbility(ctx, battlerId) == ABILITY_SLOW_START && (ctx->totalTurns - ctx->battleMons[battlerId].unk88.slowStartTurns) == 5) { ctx->battleMons[battlerId].slowStartEnded = TRUE; - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; script = 197; flag = TRUE; break; @@ -3788,7 +3788,7 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { battlerId = ctx->turnOrder[i]; if (!ctx->battleMons[battlerId].moldBreakerFlag && ctx->battleMons[battlerId].hp && GetBattlerAbility(ctx, battlerId) == ABILITY_MOLD_BREAKER) { ctx->battleMons[battlerId].moldBreakerFlag = TRUE; - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; script = 177; flag = TRUE; break; @@ -3803,7 +3803,7 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { battlerId = ctx->turnOrder[i]; if (!ctx->battleMons[battlerId].pressureFlag && ctx->battleMons[battlerId].hp && GetBattlerAbility(ctx, battlerId) == ABILITY_PRESSURE) { ctx->battleMons[battlerId].pressureFlag = TRUE; - ctx->battlerIdWork = battlerId; + ctx->battlerIdTemp = battlerId; script = 285; flag = TRUE; break; @@ -3823,13 +3823,13 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { case 12: //Amulet coin for (i = 0; i < maxBattlers; i++) { battlerId = ctx->turnOrder[i]; - if (GetItemHoldEffect(ctx, ctx->battleMons[battlerId].item, 1) == HOLD_EFFECT_MONEY_UP) { + if (GetItemVar(ctx, ctx->battleMons[battlerId].item, ITEM_VAR_HOLD_EFFECT) == HOLD_EFFECT_MONEY_UP) { ctx->prizeMoneyValue = 2; } } ctx->sendOutState++; break; - case 13: //??? + case 13: //Status healed on entry for (i = 0; i < maxBattlers; i++) { battlerId = ctx->turnOrder[i]; if (CheckStatusHealAbility(bsys, ctx, battlerId, 1) == TRUE) { @@ -3842,11 +3842,11 @@ int TryAbilityOnEntry(BattleSystem *bsys, BATTLECONTEXT *ctx) { ctx->sendOutState++; } break; - case 14: //??? + case 14: //Held item activated on entry for (i = 0; i < maxBattlers; i++) { battlerId = ctx->turnOrder[i]; - if (ov12_02254E7C(bsys, ctx, battlerId, &script) == TRUE) { - ctx->battlerIdWork = battlerId; + if (CheckUseHeldItem(bsys, ctx, battlerId, &script) == TRUE) { + ctx->battlerIdTemp = battlerId; flag = TRUE; break; } @@ -3911,7 +3911,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script (BattleSystem_Random(bsys) % 10 < 3)) { ctx->statChangeType = 3; ctx->battlerIdStatChange = ctx->battlerIdAttacker; - ctx->battlerIdWork = ctx->battlerIdTarget; + ctx->battlerIdTemp = ctx->battlerIdTarget; *script = 31; ret = TRUE; } @@ -3936,7 +3936,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script GetBattlerVar(ctx, ctx->battlerIdTarget, BMON_DATA_TYPE_1, NULL) != moveType && GetBattlerVar(ctx, ctx->battlerIdTarget, BMON_DATA_TYPE_2, NULL) != moveType) { *script = 188; - ctx->msgWork = moveType; + ctx->msgTemp = moveType; ret = TRUE; } break; @@ -3948,8 +3948,8 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script !(ctx->linkStatus2 & 0x10) && (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1)) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, 8); - ctx->battlerIdWork = ctx->battlerIdAttacker; + ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, 8); + ctx->battlerIdTemp = ctx->battlerIdAttacker; *script = 189; ret = TRUE; } @@ -3977,7 +3977,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script } ctx->statChangeType = 3; ctx->battlerIdStatChange = ctx->battlerIdAttacker; - ctx->battlerIdWork = ctx->battlerIdTarget; + ctx->battlerIdTemp = ctx->battlerIdTarget; ret = TRUE; } break; @@ -3992,7 +3992,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script (BattleSystem_Random(bsys) % 10 < 3)) { ctx->statChangeType = 3; ctx->battlerIdStatChange = ctx->battlerIdAttacker; - ctx->battlerIdWork = ctx->battlerIdTarget; + ctx->battlerIdTemp = ctx->battlerIdTarget; *script = 22; ret = TRUE; } @@ -4005,10 +4005,10 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script !(ctx->linkStatus2 & 0x10) && (ctx->selfTurnData[ctx->battlerIdTarget].unk4 || ctx->selfTurnData[ctx->battlerIdTarget].unkC) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1) && - (BattleSystem_Random(bsys) % 10 < 3)) { + ((BattleSystem_Random(bsys) % 10) < 3)) { ctx->statChangeType = 3; ctx->battlerIdStatChange = ctx->battlerIdAttacker; - ctx->battlerIdWork = ctx->battlerIdTarget; + ctx->battlerIdTemp = ctx->battlerIdTarget; *script = 25; ret = TRUE; } @@ -4025,7 +4025,7 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script ((BattleSystem_Random(bsys) % 10) < 3)) { ctx->statChangeType = 3; ctx->battlerIdStatChange = ctx->battlerIdAttacker; - ctx->battlerIdWork = ctx->battlerIdTarget; + ctx->battlerIdTemp = ctx->battlerIdTarget; *script = 106; ret = TRUE; } @@ -4038,8 +4038,8 @@ BOOL CheckAbilityEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script ctx->battleMons[ctx->battlerIdAttacker].hp && !(ctx->moveStatusFlag & MOVE_STATUS_FAIL) && (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1)) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, 4); - ctx->battlerIdWork = ctx->battlerIdAttacker; + ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, 4); + ctx->battlerIdTemp = ctx->battlerIdAttacker; *script = 193; ret = TRUE; } @@ -4056,44 +4056,44 @@ BOOL CheckStatusHealAbility(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerI switch (GetBattlerAbility(ctx, battlerId)) { case ABILITY_IMMUNITY: if (ctx->battleMons[battlerId].status & STATUS_POISON_ALL) { - ctx->msgWork = 1; + ctx->msgTemp = 1; ret = TRUE; } break; case ABILITY_OWN_TEMPO: if (ctx->battleMons[battlerId].status2 & STATUS2_CONFUSION) { - ctx->msgWork = 5; + ctx->msgTemp = 5; ret = TRUE; } break; case ABILITY_LIMBER: if (ctx->battleMons[battlerId].status & STATUS_PARALYSIS) { - ctx->msgWork = 3; + ctx->msgTemp = 3; ret = TRUE; } break; case ABILITY_INSOMNIA: case ABILITY_VITAL_SPIRIT: if (ctx->battleMons[battlerId].status & STATUS_SLEEP) { - ctx->msgWork = 0; + ctx->msgTemp = 0; ret = TRUE; } break; case ABILITY_WATER_VEIL: if (ctx->battleMons[battlerId].status & STATUS_BURN) { - ctx->msgWork = 2; + ctx->msgTemp = 2; ret = TRUE; } break; case ABILITY_MAGMA_ARMOR: if (ctx->battleMons[battlerId].status & STATUS_FREEZE) { - ctx->msgWork = 4; + ctx->msgTemp = 4; ret = TRUE; } break; case ABILITY_OBLIVIOUS: if (ctx->battleMons[battlerId].status2 & STATUS2_ATTRACT_ALL) { - ctx->msgWork = 6; + ctx->msgTemp = 6; ret = TRUE; } break; @@ -4105,8 +4105,8 @@ BOOL CheckStatusHealAbility(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerI break; } if (ret == TRUE) { - ctx->battlerIdWork = battlerId; - ctx->abilityWork = GetBattlerAbility(ctx, battlerId); + ctx->battlerIdTemp = battlerId; + ctx->abilityTemp = GetBattlerAbility(ctx, battlerId); if (!flag) { ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, 221); ctx->commandNext = ctx->command; @@ -4160,23 +4160,23 @@ BOOL TrySyncronizeStatus(BattleSystem *bsys, BATTLECONTEXT *ctx, ControllerComma GetBattlerAbility(ctx, ctx->battlerIdTarget) == ABILITY_SYNCHRONIZE && ctx->battlerIdTarget == ctx->battlerIdStatChange && (ctx->linkStatus & 0x80)) { - ctx->battlerIdWork = ctx->battlerIdTarget; + 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->battlerIdWork = ctx->battlerIdAttacker; + ctx->battlerIdTemp = ctx->battlerIdAttacker; ctx->battlerIdStatChange = ctx->battlerIdTarget; ret = TRUE; } if (ret == TRUE) { - if (ctx->battleMons[ctx->battlerIdWork].status & STATUS_POISON_ALL) { + if (ctx->battleMons[ctx->battlerIdTemp].status & STATUS_POISON_ALL) { script = 22; - } else if (ctx->battleMons[ctx->battlerIdWork].status & STATUS_BURN) { + } else if (ctx->battleMons[ctx->battlerIdTemp].status & STATUS_BURN) { script = 25; - } else if (ctx->battleMons[ctx->battlerIdWork].status & STATUS_PARALYSIS) { + } else if (ctx->battleMons[ctx->battlerIdTemp].status & STATUS_PARALYSIS) { script = 31; } if (script) { @@ -4200,13 +4200,13 @@ BOOL TrySyncronizeStatus(BattleSystem *bsys, BATTLECONTEXT *ctx, ControllerComma GetBattlerHeldItemEffect(ctx, ctx->battlerIdTarget) == HOLD_EFFECT_RECIPROCATE_INFAT && ctx->battlerIdTarget == ctx->battlerIdStatChange && (ctx->selfTurnData[ctx->battlerIdTarget].unk14 & 4)) { - ctx->battlerIdWork = ctx->battlerIdTarget; + ctx->battlerIdTemp = ctx->battlerIdTarget; ctx->battlerIdStatChange = ctx->battlerIdAttacker; ret = TRUE; } else if (GetBattlerHeldItemEffect(ctx, ctx->battlerIdAttacker) == HOLD_EFFECT_RECIPROCATE_INFAT && ctx->battlerIdAttacker == ctx->battlerIdStatChange && (ctx->selfTurnData[ctx->battlerIdAttacker].unk14 & 4)) { - ctx->battlerIdWork = ctx->battlerIdAttacker; + ctx->battlerIdTemp = ctx->battlerIdAttacker; ctx->battlerIdStatChange = ctx->battlerIdTarget; ret = TRUE; } @@ -4230,20 +4230,20 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { int boost; item = GetBattlerHeldItemEffect(ctx, battlerId); - boost = BattleSystem_GetHeldItemDamageBoost(ctx, battlerId, 0); + boost = GetHeldItemModifier(ctx, battlerId, 0); if (ctx->battleMons[battlerId].hp) { switch (item) { case HOLD_EFFECT_HP_RESTORE: //oran berry, berry juice if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { - ctx->hpCalcWork = boost; + ctx->hpCalc = boost; script = 198; ret = TRUE; } break; case HOLD_EFFECT_HP_PCT_RESTORE: //sitrus berry if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp * boost, 100); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp * boost, 100); script = 198; ret = TRUE; } @@ -4288,7 +4288,7 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { if (index != LEARNED_MOVES_MAX) { AddBattlerVar(&ctx->battleMons[battlerId], BMON_DATA_MOVE1PP + index, boost); CopyBattleMonToPartyMon(bsys, ctx, battlerId); - ctx->moveWork = ctx->battleMons[battlerId].moves[index]; + ctx->moveTemp = ctx->battleMons[battlerId].moves[index]; script = 204; ret = TRUE; } @@ -4327,8 +4327,8 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { break; case HOLD_EFFECT_HP_RESTORE_SPICY: //figy berry if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); - ctx->msgWork = 0; + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 0; if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_SPICY) == -1) { script = 207; } else { @@ -4339,8 +4339,8 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { break; case HOLD_EFFECT_HP_RESTORE_DRY: //wiki berry if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); - ctx->msgWork = 1; + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 1; if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_DRY) == -1) { script = 207; } else { @@ -4351,8 +4351,8 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { break; case HOLD_EFFECT_HP_RESTORE_SWEET: //mago berry if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); - ctx->msgWork = 2; + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 2; if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_SWEET) == -1) { script = 207; } else { @@ -4363,8 +4363,8 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { break; case HOLD_EFFECT_HP_RESTORE_BITTER: //aguav berry if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); - ctx->msgWork = 3; + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 3; if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_BITTER) == -1) { script = 207; } else { @@ -4375,8 +4375,8 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { break; case HOLD_EFFECT_HP_RESTORE_SOUR: //iappapa berry if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); - ctx->msgWork = 4; + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 4; if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_SOUR) == -1) { script = 207; } else { @@ -4390,7 +4390,7 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { boost /= 2; } if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[1] < 12) { - ctx->msgWork = 1; + ctx->msgTemp = 1; script = 208; ret = TRUE; } @@ -4400,7 +4400,7 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { boost /= 2; } if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[2] < 12) { - ctx->msgWork = 2; + ctx->msgTemp = 2; script = 208; ret = TRUE; } @@ -4410,7 +4410,7 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { boost /= 2; } if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[3] < 12) { - ctx->msgWork = 3; + ctx->msgTemp = 3; script = 208; ret = TRUE; } @@ -4420,7 +4420,7 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { boost /= 2; } if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[4] < 12) { - ctx->msgWork = 4; + ctx->msgTemp = 4; script = 208; ret = TRUE; } @@ -4430,7 +4430,7 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { boost /= 2; } if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[5] < 12) { - ctx->msgWork = 5; + ctx->msgTemp = 5; script = 208; ret = TRUE; } @@ -4459,7 +4459,7 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { do { stat = BattleSystem_Random(bsys) % 5; } while (ctx->battleMons[battlerId].statChanges[1 + stat] == 12); - ctx->msgWork = stat + 1; + ctx->msgTemp = stat + 1; script = 210; ret = TRUE; } @@ -4479,7 +4479,7 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { break; case HOLD_EFFECT_HEAL_INFATUATION: //mental herb if (ctx->battleMons[battlerId].status2 & STATUS2_ATTRACT_ALL) { - ctx->msgWork = 6; + ctx->msgTemp = 6; script = 212; ret = TRUE; } @@ -4497,8 +4497,8 @@ BOOL TryUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { break; } if (ret == TRUE) { - ctx->battlerIdWork = battlerId; - ctx->itemWork = GetBattlerHeldItem(ctx, battlerId); + ctx->battlerIdTemp = battlerId; + ctx->itemTemp = GetBattlerHeldItem(ctx, battlerId); ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); ctx->commandNext = ctx->command; ctx->command = CONTROLLER_COMMAND_22; @@ -4513,13 +4513,13 @@ BOOL CheckItemGradualHPRestore(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl int item; item = GetBattlerHeldItemEffect(ctx, battlerId); - BattleSystem_GetHeldItemDamageBoost(ctx, battlerId, 0); + GetHeldItemModifier(ctx, battlerId, 0); if (ctx->battleMons[battlerId].hp) { switch (item) { case HOLD_EFFECT_HP_RESTORE_GRADUAL: //leftovers if (ctx->battleMons[battlerId].hp < ctx->battleMons[battlerId].maxHp) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, 16); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, 16); script = 213; ret = TRUE; } @@ -4527,12 +4527,12 @@ BOOL CheckItemGradualHPRestore(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl case HOLD_EFFECT_HP_RESTORE_PSN_TYPE: //black sludge if ((GetBattlerVar(ctx, battlerId, BMON_DATA_TYPE_1, NULL) == TYPE_POISON || GetBattlerVar(ctx, battlerId, BMON_DATA_TYPE_2, NULL) == TYPE_POISON)) { if (ctx->battleMons[battlerId].hp < ctx->battleMons[battlerId].maxHp) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp, 16); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, 16); script = 213; ret = TRUE; } } else if (GetBattlerAbility(ctx, battlerId) != ABILITY_MAGIC_GUARD) { - ctx->hpCalcWork = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, 8); + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, 8); script = 215; ret = TRUE; } @@ -4541,8 +4541,8 @@ BOOL CheckItemGradualHPRestore(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl break; } if (ret == TRUE) { - ctx->battlerIdWork = battlerId; - ctx->itemWork = GetBattlerHeldItem(ctx, battlerId); + ctx->battlerIdTemp = battlerId; + ctx->itemTemp = GetBattlerHeldItem(ctx, battlerId); ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); ctx->commandNext = ctx->command; ctx->command = CONTROLLER_COMMAND_22; @@ -4550,3 +4550,459 @@ BOOL CheckItemGradualHPRestore(BattleSystem *bsys, BATTLECONTEXT *ctx, int battl } return ret; } + +BOOL CheckUseHeldItem(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId, u32 *script) { + BOOL ret = FALSE; + int item; + int boost; + + item = GetBattlerHeldItemEffect(ctx, battlerId); + boost = GetHeldItemModifier(ctx, battlerId, 0); + + if (ctx->battleMons[battlerId].hp) { + switch (item) { + case HOLD_EFFECT_HP_RESTORE: //oran berry, berry juice + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { + ctx->hpCalc = boost; + *script = 198; + ret = TRUE; + } + break; + case HOLD_EFFECT_HP_PCT_RESTORE: //sitrus berry + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp * boost, 100); + *script = 198; + ret = TRUE; + } + break; + case HOLD_EFFECT_PRZ_RESTORE: //cheri berry + if (ctx->battleMons[battlerId].status & STATUS_PARALYSIS) { + *script = 199; + ret = TRUE; + } + break; + case HOLD_EFFECT_SLP_RESTORE: //chesto berry + if (ctx->battleMons[battlerId].status & STATUS_SLEEP) { + *script = 200; + ret = TRUE; + } + break; + case HOLD_EFFECT_PSN_RESTORE: //pecha berry + if (ctx->battleMons[battlerId].status & STATUS_POISON_ALL) { + *script = 201; + ret = TRUE; + } + break; + case HOLD_EFFECT_BRN_RESTORE: //rawst berry + if (ctx->battleMons[battlerId].status & STATUS_BURN) { + *script = 202; + ret = TRUE; + } + break; + case HOLD_EFFECT_FRZ_RESTORE: //aspear berry + if (ctx->battleMons[battlerId].status & STATUS_FREEZE) { + *script = 203; + ret = TRUE; + } + break; + case HOLD_EFFECT_PP_RESTORE: //leppa berry + int index; + for (index = 0; index < LEARNED_MOVES_MAX; index++) { + if (ctx->battleMons[battlerId].moves[index] && !ctx->battleMons[battlerId].movePPCur[index]) { + break; + } + } + if (index != LEARNED_MOVES_MAX) { + AddBattlerVar(&ctx->battleMons[battlerId], BMON_DATA_MOVE1PP + index, boost); + CopyBattleMonToPartyMon(bsys, ctx, battlerId); + ctx->moveTemp = ctx->battleMons[battlerId].moves[index]; + *script = 204; + ret = TRUE; + } + break; + case HOLD_EFFECT_CONFUSE_RESTORE: //persim berry + if (ctx->battleMons[battlerId].status2 & STATUS2_CONFUSION) { + *script = 205; + ret = TRUE; + } + break; + case HOLD_EFFECT_STATUS_RESTORE: //lum berry + if ((ctx->battleMons[battlerId].status & STATUS_ALL) || (ctx->battleMons[battlerId].status2 & STATUS2_CONFUSION)) { + if (ctx->battleMons[battlerId].status & STATUS_PARALYSIS) { + *script = 199; + } + if (ctx->battleMons[battlerId].status & STATUS_SLEEP) { + *script = 200; + } + if (ctx->battleMons[battlerId].status & STATUS_POISON_ALL) { + *script = 201; + } + if (ctx->battleMons[battlerId].status & STATUS_BURN) { + *script = 202; + } + if (ctx->battleMons[battlerId].status & STATUS_FREEZE) { + *script = 203; + } + if (ctx->battleMons[battlerId].status2 & STATUS2_CONFUSION) { + *script = 205; + } + if ((ctx->battleMons[battlerId].status & STATUS_ALL) && (ctx->battleMons[battlerId].status2 & STATUS2_CONFUSION)) { + *script = 206; + } + ret = TRUE; + } + break; + case HOLD_EFFECT_STATDOWN_RESTORE: //white herb + int stat; + for (stat = 0; stat < 8; stat++) { + if (ctx->battleMons[battlerId].statChanges[stat] < 6) { + ctx->battleMons[battlerId].statChanges[stat] = 6; + ret = TRUE; + } + } + if (ret == TRUE) { + *script = 211; + } + break; + case HOLD_EFFECT_HEAL_INFATUATION: //mental herb + if (ctx->battleMons[battlerId].status2 & STATUS2_ATTRACT_ALL) { + ctx->msgTemp = 6; + *script = 212; + ret = TRUE; + } + break; + case HOLD_EFFECT_PINCH_ACC_UP: //micle berry + if (GetBattlerAbility(ctx, battlerId) == ABILITY_GLUTTONY) { + boost /= 2; + } + if (ctx->battleMons[battlerId].hp <= (ctx->battleMons[battlerId].maxHp / boost)) { + *script = 265; + ret = TRUE; + } + break; + case HOLD_EFFECT_HP_RESTORE_SPICY: //figy berry + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 0; + if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_SPICY) == -1) { + *script = 207; + } else { + *script = 198; + } + ret = TRUE; + } + break; + case HOLD_EFFECT_HP_RESTORE_DRY: //wiki berry + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 1; + if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_DRY) == -1) { + *script = 207; + } else { + *script = 198; + } + ret = TRUE; + } + break; + case HOLD_EFFECT_HP_RESTORE_SWEET: //mago berry + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 2; + if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_SWEET) == -1) { + *script = 207; + } else { + *script = 198; + } + ret = TRUE; + } + break; + case HOLD_EFFECT_HP_RESTORE_BITTER: //aguav berry + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 3; + if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_BITTER) == -1) { + *script = 207; + } else { + *script = 198; + } + ret = TRUE; + } + break; + case HOLD_EFFECT_HP_RESTORE_SOUR: //iappapa berry + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / 2) { + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp, boost); + ctx->msgTemp = 4; + if (GetFlavorPreferenceFromPID(ctx->battleMons[battlerId].personality, FLAVOR_SOUR) == -1) { + *script = 207; + } else { + *script = 198; + } + ret = TRUE; + } + break; + case HOLD_EFFECT_PINCH_ATK_UP: //liechi berry + if (GetBattlerAbility(ctx, battlerId) == ABILITY_GLUTTONY) { + boost /= 2; + } + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[1] < 12) { + ctx->msgTemp = 1; + *script = 208; + ret = TRUE; + } + break; + case HOLD_EFFECT_PINCH_DEF_UP: //ganlon berry + if (GetBattlerAbility(ctx, battlerId) == ABILITY_GLUTTONY) { + boost /= 2; + } + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[2] < 12) { + ctx->msgTemp = 2; + *script = 208; + ret = TRUE; + } + break; + case HOLD_EFFECT_PINCH_SPEED_UP: //salac berry + if (GetBattlerAbility(ctx, battlerId) == ABILITY_GLUTTONY) { + boost /= 2; + } + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[3] < 12) { + ctx->msgTemp = 3; + *script = 208; + ret = TRUE; + } + break; + case HOLD_EFFECT_PINCH_SPATK_UP: //petaya berry + if (GetBattlerAbility(ctx, battlerId) == ABILITY_GLUTTONY) { + boost /= 2; + } + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[4] < 12) { + ctx->msgTemp = 4; + *script = 208; + ret = TRUE; + } + break; + case HOLD_EFFECT_PINCH_SPDEF_UP: //apicot berry + if (GetBattlerAbility(ctx, battlerId) == ABILITY_GLUTTONY) { + boost /= 2; + } + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && ctx->battleMons[battlerId].statChanges[5] < 12) { + ctx->msgTemp = 5; + *script = 208; + ret = TRUE; + } + break; + case HOLD_EFFECT_PINCH_CRITRATE_UP: //apicot berry + if (GetBattlerAbility(ctx, battlerId) == ABILITY_GLUTTONY) { + boost /= 2; + } + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost && !(ctx->battleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY)) { + *script = 209; + ret = TRUE; + } + break; + case HOLD_EFFECT_PINCH_RANDOM_UP: //starf berry + if (GetBattlerAbility(ctx, battlerId) == ABILITY_GLUTTONY) { + boost /= 2; + } + if (ctx->battleMons[battlerId].hp <= ctx->battleMons[battlerId].maxHp / boost) { + int stat; + for (stat = 0; stat < 5; stat++) { + if (ctx->battleMons[battlerId].statChanges[1 + stat] < 12) { + break; + } + } + if (stat != 5) { + do { + stat = BattleSystem_Random(bsys) % 5; + } while (ctx->battleMons[battlerId].statChanges[1 + stat] == 12); + ctx->msgTemp = stat + 1; + *script = 210; + ret = TRUE; + } + } + break; + default: + break; + } + if (ret == TRUE) { + ctx->itemTemp = GetBattlerHeldItem(ctx, battlerId); + } + } + + return ret; +} + +BOOL TryHeldItemNegativeEffect(BattleSystem *bsys, BATTLECONTEXT *ctx, int battlerId) { + BOOL ret = FALSE; + int script; + int item = GetBattlerHeldItemEffect(ctx, battlerId); + int boost = GetHeldItemModifier(ctx, battlerId, 0); + + if (ctx->battleMons[battlerId].hp) { + switch (item) { + case HOLD_EFFECT_PSN_USER: //toxic orb + ctx->battlerIdStatChange = battlerId; + ctx->statChangeType = 5; + script = 47; + ret = TRUE; + break; + case HOLD_EFFECT_BRN_USER: //flame orb + ctx->battlerIdStatChange = battlerId; + ctx->statChangeType = 5; + script = 25; + ret = TRUE; + break; + case HOLD_EFFECT_DMG_USER_CONTACT_XFR: //sticky barb + if (GetBattlerAbility(ctx, battlerId) != ABILITY_MAGIC_GUARD) { + ctx->hpCalc = DamageDivide(ctx->battleMons[battlerId].maxHp * -1, boost); + script = 215; + ret = TRUE; + } + break; + default: + break; + } + if (ret == TRUE) { + ctx->battlerIdTemp = battlerId; + ctx->itemTemp = GetBattlerHeldItem(ctx, battlerId); + ReadBattleScriptFromNarc(ctx, NARC_a_0_0_1, script); + ctx->commandNext = ctx->command; + ctx->command = CONTROLLER_COMMAND_22; + } + } + return ret; +} + +u16 GetBattlerHeldItem(BATTLECONTEXT *ctx, int battlerId) { + if (GetBattlerAbility(ctx, battlerId) == ABILITY_KLUTZ) { + return ITEM_NONE; + } + if (ctx->battleMons[battlerId].unk88.embargoFlag) { + return ITEM_NONE; + } + return ctx->battleMons[battlerId].item; +} + +BOOL ov12_0225561C(BATTLECONTEXT *ctx, int battlerId) { + return (ctx->unk_21A8[battlerId][0] == 40); +} + +BOOL CheckItemEffectOnHit(BattleSystem *bsys, BATTLECONTEXT *ctx, int *script) { + BOOL ret = FALSE; + int item; + int boost; + int side; + + if (ctx->battlerIdTarget == BATTLER_NONE) { + return ret; + } + + if (BattlerCheckSubstitute(ctx, ctx->battlerIdTarget) == TRUE) { + return ret; + } + + item = GetBattlerHeldItemEffect(ctx, ctx->battlerIdTarget); + boost = GetHeldItemModifier(ctx, ctx->battlerIdTarget, 0); + side = BattleSystem_GetFieldSide(bsys, ctx->battlerIdAttacker); + + switch (item) { + case HOLD_EFFECT_DMG_USER_CONTACT_XFR: //sticky barb + if (ctx->battleMons[ctx->battlerIdAttacker].hp && + !(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->linkStatus2 & 0x10) && + (ctx->unk_334.moveData[ctx->moveNoCur].unkB & 1)) { + *script = 216; + ret = TRUE; + } + break; + case HOLD_EFFECT_RECOIL_PHYSICAL: //jacoba berry + if (ctx->battleMons[ctx->battlerIdAttacker].hp && + GetBattlerAbility(ctx, ctx->battlerIdAttacker) != ABILITY_MAGIC_GUARD && + !(ctx->linkStatus2 & 0x10) && + ctx->selfTurnData[ctx->battlerIdTarget].unk4) { + ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, boost); + *script = 266; + ret = TRUE; + } + break; + 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->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdAttacker].maxHp * -1, boost); + *script = 266; + ret = TRUE; + } + break; + case HOLD_EFFECT_HP_RESTORE_SE: //enigma berry + if (ctx->battleMons[ctx->battlerIdTarget].hp && (ctx->moveStatusFlag & MOVE_STATUS_SUPER_EFFECTIVE)) { + ctx->hpCalc = DamageDivide(ctx->battleMons[ctx->battlerIdTarget].maxHp, boost); + *script = 198; + ctx->battlerIdTemp = ctx->battlerIdTarget; + ctx->itemTemp = ctx->battleMons[ctx->battlerIdTarget].item; + ret = TRUE; + } + break; + default: + break; + } + + return ret; +} + +int GetBattlerHeldItemEffect(BATTLECONTEXT *ctx, int battlerId) { + u16 itemNo = GetBattlerHeldItem(ctx, battlerId); + return GetItemVar(ctx, itemNo, ITEM_VAR_HOLD_EFFECT); +} + +int GetHeldItemModifier(BATTLECONTEXT *ctx, int battlerId, int flag) { + u16 itemNo; + + switch (flag) { + case 0: + itemNo = GetBattlerHeldItem(ctx, battlerId); + break; + case 2: + if (ctx->battleMons[battlerId].unk88.embargoFlag) { + return 0; + } + case 1: + itemNo = ctx->battleMons[battlerId].item; + break; + } + + return GetItemVar(ctx, itemNo, ITEM_VAR_MODIFIER); +} + +int GetNaturalGiftPower(BATTLECONTEXT *ctx, int battlerId) { + u16 itemNo = GetBattlerHeldItem(ctx, battlerId); + return GetItemVar(ctx, itemNo, ITEM_NATURAL_GIFT_POWER); +} + +int GetNaturalGiftType(BATTLECONTEXT *ctx, int battlerId) { + u16 itemNo = GetBattlerHeldItem(ctx, battlerId); + return GetItemVar(ctx, itemNo, ITEM_NATURAL_GIFT_TYPE); +} + +int ov12_022558B8(BATTLECONTEXT *ctx, int battlerId) { + u16 itemNo = ctx->battleMons[battlerId].item; + return GetItemVar(ctx, itemNo, ITEM_VAR_8); +} + +int ov12_022558D0(BATTLECONTEXT *ctx, int battlerId) { + if (ctx->battleMons[battlerId].unk88.embargoFlag) { + return 0; + } + + return GetItemVar(ctx, ctx->battleMons[battlerId].item, ITEM_VAR_9); +} + +int ov12_022558F8(BATTLECONTEXT *ctx, int battlerId) { + if (ctx->battleMons[battlerId].unk88.embargoFlag) { + return 0; + } + + return GetItemVar(ctx, ctx->battleMons[battlerId].item, ITEM_VAR_10); +}