diff --git a/asm/include/overlay_29_02325644.inc b/asm/include/overlay_29_02325644.inc index 72901da7..03228bb3 100644 --- a/asm/include/overlay_29_02325644.inc +++ b/asm/include/overlay_29_02325644.inc @@ -1,132 +1,38 @@ #pragma once -.public AbilityIsActiveVeneer +.public ATK_STAT_IDX .public AdvanceFrame .public AnimationHasMoreFrames -.public ApplyDamageAndEffectsWrapper -.public ApplyDefensiveStatMultiplier -.public ApplyOffensiveStatMultiplier -.public ATK_STAT_IDX -.public AURORA_BEAM_LOWER_ATTACK_CHANCE -.public BeginChargedMove -.public BITE_CRINGE_CHANCE -.public BoostDefensiveStat -.public BoostHitChanceStat -.public BoostOffensiveStat -.public BoostSpeedOneStage -.public BUBBLE_LOWER_SPEED_CHANCE -.public CalcDamageFixedWrapper -.public CalcRecoilDamageFixed .public CalcStatusDuration -.public CONSTRICT_LOWER_SPEED_CHANCE -.public CRUNCH_LOWER_DEFENSE_CHANCE .public DealDamage -.public DealDamageWithType -.public DIG_DAMAGE_MULTIPLIER -.public DUNGEON_PTR -.public DungeonRandOutcomeUserAction .public DungeonRandOutcomeUserTargetInteraction -.public DungeonRandRange -.public EndBurnClassStatus -.public EndFrozenStatus -.public EndNegativeStatusConditionWrapper -.public EndReflectClassStatus -.public EndTwoTurnMove .public EntityIsValid__02325620 -.public EntityIsValidMoveEffects__0232800C -.public ExclusiveItemEffectFlagTest -.public FACADE_DAMAGE_MULTIPLIER -.public FLAME_WHEEL_BURN_CHANCE -.public FLAMETHROWER_BURN_CHANCE -.public FOCUS_PUNCH_DAMAGE_MULTIPLIER -.public FormatMoveStringMore .public GetApparentWeather -.public GetDamageSourceWrapper .public GetEffectAnimation -.public GetFlashFireStatus -.public GetMessageLogPreprocessorArgs .public GetMoveAnimation -.public GetMoveCategory -.public GetMoveType .public GetTileAtEntity -.public GetWeightMultiplier -.public InitMove .public IRON_TAIL_LOWER_DEFENSE_CHANCE .public IsChargingTwoTurnMove .public IsMonsterSleeping .public IsTileGround -.public LogMessageByIdWithPopupCheckUserTarget .public LowerDefensiveStat -.public LowerHitChanceStat -.public LowerOffensiveStat -.public LowerSpeed -.public METEOR_MASH_BOOST_ATTACK_CHANCE -.public MirrorMoveIsActive .public MORNING_SUN_HP_RESTORATION_TABLE -.public MULTIHIT_FATIGUE_MOVE_USED .public NIGHTMARE_TURN_RANGE -.public OCTAZOOKA_LOWER_ACCURACY_CHANCE -.public ov10_022BED90 -.public ov10_022BF160 -.public ov10_022BFC5C -.public ov10_022C4C0C -.public ov10_022C4C0E -.public ov29_022E2CA0 -.public ov29_022E5474 -.public ov29_022E6D68 -.public ov29_02332F18 -.public ov29_02352AD8 -.public POWDER_SNOW_FREEZE_CHANCE -.public PSYBEAM_CONFUSE_CHANCE -.public RAPID_SPIN_BINDING_REMOVAL -.public RAZOR_WIND_DAMAGE_MULTIPLIER -.public REVERSAL_DAMAGE_MULT_TABLE -.public ROCK_SLIDE_CRINGE_CHANCE .public ROLLOUT_DAMAGE_MULT_TABLE .public ROLLOUT_ICE_BALL_MISSED .public ROLLOUT_ICE_BALL_SUCCESSIVE_HITS -.public SetReflectStatus -.public ShouldDisplayEntityAdvanced -.public SILVER_WIND_BOOST_CHANCE -.public SKY_ATTACK_CRINGE_CHANCE -.public SKY_ATTACK_DAMAGE_MULTIPLIER .public SLEEP_TURN_RANGE -.public SMOKESCREEN_TURN_RANGE -.public SNORE_CRINGE_CHANCE -.public SPATK_STAT_IDX -.public StringFromId -.public sub_0201CF90 -.public SubstitutePlaceholderStringTags -.public SURE_SHOT_TURN_RANGE -.public SYNTHESIS_HP_RESTORATION_TABLE -.public THUNDER_PARALYZE_CHANCE -.public TryActivateWeather +.public ShouldDisplayEntityAdvanced .public TryIncreaseHp -.public TryInflictBurnStatus -.public TryInflictConfusedStatus -.public TryInflictConstrictionStatus -.public TryInflictCringeStatus -.public TryInflictEncoreStatus -.public TryInflictEndureStatus -.public TryInflictExposedStatus -.public TryInflictFocusEnergyStatus -.public TryInflictFrozenStatus -.public TryInflictGrudgeStatus -.public TryInflictMirrorMoveStatus .public TryInflictNightmareStatus -.public TryInflictParalysisStatus -.public TryInflictShadowHoldStatus -.public TryInflictSleeplessStatus .public TryInflictSleepStatus -.public TryInflictSureShotStatus -.public TryInflictVitalThrowStatus -.public TryInflictWhifferStatus .public TryInflictYawningStatus -.public TryResetStatChanges .public UnkMapRelatedFunc .public WaitUntilAlertBoxPauseIsOver -.public WATER_SPOUT_DAMAGE_MULT_TABLE -.public WEATHER_BALL_DAMAGE_MULT_TABLE -.public WEATHER_BALL_TYPE_TABLE -.public WEATHER_MOVE_TURN_COUNT -.public WHIRLPOOL_CONSTRICTION_CHANCE .public YAWN_TURN_RANGE +.public ov10_022BED90 +.public ov10_022BF160 +.public ov10_022BFC5C +.public ov29_022E2CA0 +.public ov29_022E6D68 +.public ov29_02352AD8 +.public sub_0201CF90 diff --git a/asm/include/overlay_29_02325FC4.inc b/asm/include/overlay_29_02325FC4.inc new file mode 100644 index 00000000..b2960597 --- /dev/null +++ b/asm/include/overlay_29_02325FC4.inc @@ -0,0 +1,17 @@ +#pragma once +.public ATK_STAT_IDX +.public ApplyOffensiveStatMultiplier +.public BeginChargedMove +.public DIG_DAMAGE_MULTIPLIER +.public DUNGEON_PTR +.public DealDamage +.public EndTwoTurnMove +.public GetTileAtEntity +.public IsChargingTwoTurnMove +.public IsTileGround +.public LogMessageByIdWithPopupCheckUserTarget +.public LowerHitChanceStat +.public SPATK_STAT_IDX +.public StringFromId +.public TryActivateWeather +.public WEATHER_MOVE_TURN_COUNT diff --git a/asm/include/overlay_29_023261A0.inc b/asm/include/overlay_29_023261A0.inc new file mode 100644 index 00000000..e7558d10 --- /dev/null +++ b/asm/include/overlay_29_023261A0.inc @@ -0,0 +1,5 @@ +#pragma once +.public BUBBLE_LOWER_SPEED_CHANCE +.public DealDamage +.public DungeonRandOutcomeUserTargetInteraction +.public LowerSpeed diff --git a/asm/include/overlay_29_02326220.inc b/asm/include/overlay_29_02326220.inc new file mode 100644 index 00000000..667903a8 --- /dev/null +++ b/asm/include/overlay_29_02326220.inc @@ -0,0 +1,12 @@ +#pragma once +.public BeginChargedMove +.public CalcDamageFixedWrapper +.public FormatMoveStringMore +.public GetDamageSourceWrapper +.public GetMessageLogPreprocessorArgs +.public GetMoveCategory +.public GetMoveType +.public InitMove +.public LogMessageByIdWithPopupCheckUserTarget +.public StringFromId +.public SubstitutePlaceholderStringTags diff --git a/asm/include/overlay_29_02326568.inc b/asm/include/overlay_29_02326568.inc new file mode 100644 index 00000000..e8ac67d2 --- /dev/null +++ b/asm/include/overlay_29_02326568.inc @@ -0,0 +1,22 @@ +#pragma once +.public ATK_STAT_IDX +.public ApplyDefensiveStatMultiplier +.public BoostOffensiveStat +.public DealDamage +.public DealDamageWithType +.public DungeonRandOutcomeUserTargetInteraction +.public EndFrozenStatus +.public GetApparentWeather +.public IsMonsterSleeping +.public LogMessageByIdWithPopupCheckUserTarget +.public LowerDefensiveStat +.public ROCK_SLIDE_CRINGE_CHANCE +.public SNORE_CRINGE_CHANCE +.public SPATK_STAT_IDX +.public SubstitutePlaceholderStringTags +.public TryInflictConfusedStatus +.public TryInflictConstrictionStatus +.public TryInflictCringeStatus +.public WEATHER_BALL_DAMAGE_MULT_TABLE +.public WEATHER_BALL_TYPE_TABLE +.public WHIRLPOOL_CONSTRICTION_CHANCE diff --git a/asm/include/overlay_29_023268CC.inc b/asm/include/overlay_29_023268CC.inc new file mode 100644 index 00000000..21d54c80 --- /dev/null +++ b/asm/include/overlay_29_023268CC.inc @@ -0,0 +1,28 @@ +#pragma once +.public ATK_STAT_IDX +.public AURORA_BEAM_LOWER_ATTACK_CHANCE +.public ApplyOffensiveStatMultiplier +.public BoostOffensiveStat +.public CalcDamageFixedWrapper +.public CalcStatusDuration +.public DealDamage +.public DungeonRandOutcomeUserAction +.public DungeonRandOutcomeUserTargetInteraction +.public EndFrozenStatus +.public GetDamageSourceWrapper +.public GetFlashFireStatus +.public GetMoveCategory +.public GetMoveType +.public LogMessageByIdWithPopupCheckUserTarget +.public LowerHitChanceStat +.public OCTAZOOKA_LOWER_ACCURACY_CHANCE +.public SMOKESCREEN_TURN_RANGE +.public SPATK_STAT_IDX +.public SubstitutePlaceholderStringTags +.public TryInflictBurnStatus +.public TryInflictConfusedStatus +.public TryInflictGrudgeStatus +.public TryInflictMirrorMoveStatus +.public TryInflictWhifferStatus +.public ov10_022C4C0C +.public ov10_022C4C0E diff --git a/asm/include/overlay_29_02326CC8.inc b/asm/include/overlay_29_02326CC8.inc new file mode 100644 index 00000000..1637a088 --- /dev/null +++ b/asm/include/overlay_29_02326CC8.inc @@ -0,0 +1,12 @@ +#pragma once +.public ATK_STAT_IDX +.public BoostDefensiveStat +.public BoostHitChanceStat +.public DealDamage +.public DungeonRandOutcomeUserTargetInteraction +.public EndFrozenStatus +.public FLAMETHROWER_BURN_CHANCE +.public FLAME_WHEEL_BURN_CHANCE +.public SPATK_STAT_IDX +.public TryInflictBurnStatus +.public TryInflictExposedStatus diff --git a/asm/include/overlay_29_02326E98.inc b/asm/include/overlay_29_02326E98.inc new file mode 100644 index 00000000..16ffe1ce --- /dev/null +++ b/asm/include/overlay_29_02326E98.inc @@ -0,0 +1,36 @@ +#pragma once +.public ATK_STAT_IDX +.public AbilityIsActiveVeneer +.public ApplyDamageAndEffectsWrapper +.public BITE_CRINGE_CHANCE +.public BeginChargedMove +.public BoostOffensiveStat +.public CONSTRICT_LOWER_SPEED_CHANCE +.public CRUNCH_LOWER_DEFENSE_CHANCE +.public CalcDamageFixedWrapper +.public DealDamage +.public DungeonRandOutcomeUserAction +.public DungeonRandOutcomeUserTargetInteraction +.public EndBurnClassStatus +.public EndReflectClassStatus +.public EndTwoTurnMove +.public ExclusiveItemEffectFlagTest +.public FACADE_DAMAGE_MULTIPLIER +.public FOCUS_PUNCH_DAMAGE_MULTIPLIER +.public GetDamageSourceWrapper +.public GetMoveCategory +.public GetMoveType +.public IsChargingTwoTurnMove +.public LogMessageByIdWithPopupCheckUserTarget +.public LowerDefensiveStat +.public LowerOffensiveStat +.public LowerSpeed +.public MirrorMoveIsActive +.public RAZOR_WIND_DAMAGE_MULTIPLIER +.public REVERSAL_DAMAGE_MULT_TABLE +.public SPATK_STAT_IDX +.public StringFromId +.public THUNDER_PARALYZE_CHANCE +.public TryIncreaseHp +.public TryInflictCringeStatus +.public TryInflictParalysisStatus diff --git a/asm/include/overlay_29_0232776C.inc b/asm/include/overlay_29_0232776C.inc new file mode 100644 index 00000000..c2766d30 --- /dev/null +++ b/asm/include/overlay_29_0232776C.inc @@ -0,0 +1,13 @@ +#pragma once +.public BoostDefensiveStat +.public BoostOffensiveStat +.public BoostSpeedOneStage +.public DealDamage +.public DungeonRandOutcomeUserAction +.public GetApparentWeather +.public GetWeightMultiplier +.public MULTIHIT_FATIGUE_MOVE_USED +.public SILVER_WIND_BOOST_CHANCE +.public SPATK_STAT_IDX +.public SYNTHESIS_HP_RESTORATION_TABLE +.public TryIncreaseHp diff --git a/asm/include/overlay_29_02327940.inc b/asm/include/overlay_29_02327940.inc new file mode 100644 index 00000000..4890b767 --- /dev/null +++ b/asm/include/overlay_29_02327940.inc @@ -0,0 +1,38 @@ +#pragma once +.public ATK_STAT_IDX +.public AbilityIsActiveVeneer +.public BeginChargedMove +.public BoostDefensiveStat +.public BoostOffensiveStat +.public CalcRecoilDamageFixed +.public CalcStatusDuration +.public DealDamage +.public DungeonRandOutcomeUserAction +.public DungeonRandOutcomeUserTargetInteraction +.public DungeonRandRange +.public EndTwoTurnMove +.public EntityIsValidMoveEffects__0232800C +.public IsChargingTwoTurnMove +.public LogMessageByIdWithPopupCheckUserTarget +.public LowerDefensiveStat +.public LowerOffensiveStat +.public LowerSpeed +.public METEOR_MASH_BOOST_ATTACK_CHANCE +.public POWDER_SNOW_FREEZE_CHANCE +.public PSYBEAM_CONFUSE_CHANCE +.public RAPID_SPIN_BINDING_REMOVAL +.public SKY_ATTACK_CRINGE_CHANCE +.public SKY_ATTACK_DAMAGE_MULTIPLIER +.public SPATK_STAT_IDX +.public SURE_SHOT_TURN_RANGE +.public StringFromId +.public SubstitutePlaceholderStringTags +.public TryInflictConfusedStatus +.public TryInflictCringeStatus +.public TryInflictEndureStatus +.public TryInflictFrozenStatus +.public TryInflictSleeplessStatus +.public TryInflictSureShotStatus +.public WATER_SPOUT_DAMAGE_MULT_TABLE +.public ov29_022E5474 +.public ov29_02332F18 diff --git a/asm/overlay_29_02325644.s b/asm/overlay_29_02325644.s index 4c557733..19ad9d10 100644 --- a/asm/overlay_29_02325644.s +++ b/asm/overlay_29_02325644.s @@ -714,2696 +714,3 @@ DoMoveMorningSun: ; 0x02325F74 .align 2, 0 _02325FB0: .word MORNING_SUN_HP_RESTORATION_TABLE arm_func_end DoMoveMorningSun - - arm_func_start DoMoveVitalThrow -DoMoveVitalThrow: ; 0x02325FB4 - stmdb sp!, {r3, lr} - bl TryInflictVitalThrowStatus - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveVitalThrow - - arm_func_start DoMoveDig -DoMoveDig: ; 0x02325FC4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - mov r4, #0 - bl GetTileAtEntity - mov sb, r0 - bl IsTileGround - cmp r0, #0 - beq _02326000 - ldrh r0, [sb] - and r0, r0, #3 - cmp r0, #1 - beq _02326014 -_02326000: - ldr r2, _0232607C ; =0x00000EC4 - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget - b _02326074 -_02326014: - mov r0, r8 - mov r1, r6 - bl IsChargingTwoTurnMove - cmp r0, #0 - beq _02326050 - ldr r1, _02326080 ; =DIG_DAMAGE_MULTIPLIER - mov r0, r8 - ldr r3, [r1] - mov r1, r7 - mov r2, r6 - str r5, [sp] - bl DealDamage - mov r0, r8 - bl EndTwoTurnMove - b _02326070 -_02326050: - ldr r0, _02326084 ; =0x00000CD6 - bl StringFromId - str r0, [sp] - mov r0, r8 - mov r1, r8 - mov r3, r6 - mov r2, #0xa - bl BeginChargedMove -_02326070: - mov r4, #1 -_02326074: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -#ifdef JAPAN -_0232607C: .word 0x00000C06 -_02326080: .word DIG_DAMAGE_MULTIPLIER -_02326084: .word 0x00000A16 -#else -_0232607C: .word 0x00000EC4 -_02326080: .word DIG_DAMAGE_MULTIPLIER -_02326084: .word 0x00000CD6 -#endif - arm_func_end DoMoveDig - - arm_func_start DoMoveSweetScent -DoMoveSweetScent: ; 0x02326088 - stmdb sp!, {r3, lr} - ldr r2, _023260A4 ; =SPATK_STAT_IDX - mov r3, #1 - ldr r2, [r2] - bl LowerHitChanceStat - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_023260A4: .word SPATK_STAT_IDX - arm_func_end DoMoveSweetScent - - arm_func_start DoMoveCharm -DoMoveCharm: ; 0x023260A8 - stmdb sp!, {r3, lr} - ldr r2, _023260CC ; =ATK_STAT_IDX - mov ip, #1 - ldr r2, [r2] - mov r3, #0x80 - str ip, [sp] - bl ApplyOffensiveStatMultiplier - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_023260CC: .word ATK_STAT_IDX - arm_func_end DoMoveCharm - - arm_func_start DoMoveRainDance -DoMoveRainDance: ; 0x023260D0 - stmdb sp!, {r3, r4, r5, lr} - ldr r3, _02326120 ; =WEATHER_MOVE_TURN_COUNT - ldr r2, _02326124 ; =DUNGEON_PTR - ldrsh r3, [r3] - ldr r2, [r2] - mov r5, r0 - mov r4, r1 -#ifdef JAPAN - add r2, r2, #0xcc00 - mov r0, #1 - mov r1, #0 - strh r3, [r2, #0x9e] -#else - add r2, r2, #0xcd00 - mov r0, #1 - mov r1, #0 - strh r3, [r2, #0x42] -#endif - bl TryActivateWeather - cmp r0, #0 - bne _02326118 - ldr r2, _02326128 ; =0x00000EC5 - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget -_02326118: - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02326120: .word WEATHER_MOVE_TURN_COUNT -_02326124: .word DUNGEON_PTR -#ifdef JAPAN -_02326128: .word 0x00000C07 -#else -_02326128: .word 0x00000EC5 -#endif - arm_func_end DoMoveRainDance - - arm_func_start DoMoveHail -DoMoveHail: ; 0x0232612C - stmdb sp!, {r3, r4, r5, lr} - ldr r3, _0232617C ; =WEATHER_MOVE_TURN_COUNT - ldr r2, _02326180 ; =DUNGEON_PTR - ldrsh r3, [r3] - ldr r2, [r2] - mov r5, r0 - mov r4, r1 -#ifdef JAPAN - add r2, r2, #0xcc00 - mov r0, #1 - mov r1, #0 - strh r3, [r2, #0xa0] -#else - add r2, r2, #0xcd00 - mov r0, #1 - mov r1, #0 - strh r3, [r2, #0x44] -#endif - bl TryActivateWeather - cmp r0, #0 - bne _02326174 - ldr r2, _02326184 ; =0x00000EC8 - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget -_02326174: - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0232617C: .word WEATHER_MOVE_TURN_COUNT -_02326180: .word DUNGEON_PTR -#ifdef JAPAN -_02326184: .word 0x00000C0A -#else -_02326184: .word 0x00000EC8 -#endif - arm_func_end DoMoveHail - - arm_func_start DoMoveHealStatus -DoMoveHealStatus: ; 0x02326188 - stmdb sp!, {r3, lr} - mov r2, #1 - mov r3, #0 - bl EndNegativeStatusConditionWrapper - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveHealStatus - - arm_func_start DoMoveBubble -DoMoveBubble: ; 0x023261A0 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023261FC - ldr r1, _02326208 ; =BUBBLE_LOWER_SPEED_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _023261FC - mov r0, r6 - mov r1, r5 - mov r2, r4 - mov r3, #0 - bl LowerSpeed -_023261FC: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02326208: .word BUBBLE_LOWER_SPEED_CHANCE - arm_func_end DoMoveBubble - - arm_func_start DoMoveEncore -DoMoveEncore: ; 0x0232620C - stmdb sp!, {r3, lr} - mov r2, #0 - bl TryInflictEncoreStatus - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveEncore - - arm_func_start DoMoveRage -DoMoveRage: ; 0x02326220 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r6, r0 - ldr r0, _02326260 ; =0x00000CCF - mov r5, r1 - mov r4, r2 - bl StringFromId - str r0, [sp] - mov r0, r6 - mov r1, r5 - mov r3, r4 - mov r2, #0xc - bl BeginChargedMove - mov r0, #1 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_02326260: .word 0x00000A0F -#else -_02326260: .word 0x00000CCF -#endif - arm_func_end DoMoveRage - - arm_func_start DoMoveSuperFang -DoMoveSuperFang: ; 0x02326264 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x20 - mov r7, r1 - ldr r5, [r7, #0xb4] - mov r4, #0 - ldrsh r5, [r5, #0x10] - mov r8, r0 - mov r6, r2 - add r2, r5, r5, lsr #31 - mov r5, r3 - strb r4, [sp, #0x1c] - movs sl, r2, asr #1 - beq _02326304 - mov r0, r6 - bl GetMoveType - mov r4, r0 - ldrh r0, [r6, #4] - bl GetMoveCategory - mov sb, r0 - mov r1, r5 - mov r0, r6 - bl GetDamageSourceWrapper - add r3, sp, #0x1c - stmia sp, {r3, r4, sb} - str r0, [sp, #0xc] - mov r5, #0 - str r5, [sp, #0x10] - mov r3, #1 - str r3, [sp, #0x14] - mov r1, r7 - mov r2, sl - mov r0, r8 - str r5, [sp, #0x18] - bl CalcDamageFixedWrapper - ldrb r0, [sp, #0x1c] - cmp r0, #0 - moveq r0, #1 - movne r0, r5 - strb r0, [sp, #0x1c] - b _0232630C -_02326304: - ldr r2, _02326318 ; =0x00000EC9 - bl LogMessageByIdWithPopupCheckUserTarget -_0232630C: - ldrb r0, [sp, #0x1c] - add sp, sp, #0x20 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -#ifdef JAPAN -_02326318: .word 0x00000C0B -#else -_02326318: .word 0x00000EC9 -#endif - arm_func_end DoMoveSuperFang - - arm_func_start DoMovePainSplit -DoMovePainSplit: ; 0x0232631C - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - ldr r4, [r6, #0xb4] - ldr r0, [r5, #0xb4] - ldrsh r3, [r4, #0x10] - ldrsh r2, [r0, #0x10] - ldr r1, _02326400 ; =0x000003E7 - add r2, r3, r2 - add r2, r2, r2, lsr #31 - mov r2, r2, lsl #0xf - mov r2, r2, asr #0x10 - strh r2, [r4, #0x10] - strh r2, [r0, #0x10] - ldrsh r3, [r4, #0x12] - ldrsh r2, [r4, #0x16] - add r3, r3, r2 - cmp r3, r1 - ldrsh r2, [r4, #0x10] - movle r1, r3 - cmp r2, r1 - ble _02326384 - ldr r1, _02326400 ; =0x000003E7 - cmp r3, r1 - movgt r3, r1 - strh r3, [r4, #0x10] -_02326384: - ldrsh r2, [r0, #0x12] - ldrsh r1, [r0, #0x16] - ldr r3, _02326400 ; =0x000003E7 - add r2, r2, r1 - cmp r2, r3 - ldrsh r1, [r0, #0x10] - movle r3, r2 - cmp r1, r3 - ble _023263B8 - ldr r1, _02326400 ; =0x000003E7 - cmp r2, r1 - movgt r2, r1 - strh r2, [r0, #0x10] -_023263B8: - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - mov r1, r5 - mov r0, #1 - mov r2, #0 - bl SubstitutePlaceholderStringTags -#ifdef JAPAN - ldrb r0, [r4, #0x107] -#else - ldrb r0, [r4, #0x108] -#endif - ldr r2, _02326404 ; =0x00000ECA - mov r1, r5 - cmp r0, #1 - movlo r0, #1 -#ifdef JAPAN - strlob r0, [r4, #0x107] -#else - strlob r0, [r4, #0x108] -#endif - mov r0, r6 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, #1 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02326400: .word 0x000003E7 -#ifdef JAPAN -_02326404: .word 0x00000C0C -#else -_02326404: .word 0x00000ECA -#endif - arm_func_end DoMovePainSplit - - arm_func_start DoMoveTorment -DoMoveTorment: ; 0x02326408 -#ifdef JAPAN -#define DO_MOVE_TORMENT_OFFSET -4 -#else -#define DO_MOVE_TORMENT_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov sb, r1 - ldr r8, [sb, #0xb4] - mov r7, #0 - mov sl, r0 - mov r6, r7 - add r5, r8, #0x124 + DO_MOVE_TORMENT_OFFSET - mov fp, #1 -_0232642C: - ldrb r0, [r5, r6, lsl #3] - mov r4, r6, lsl #3 - tst r0, #1 - movne r0, fp - moveq r0, #0 - tst r0, #0xff - beq _023264A0 - ldrb r0, [r5, r4] - tst r0, #0x20 - bne _02326494 - tst r0, #0x10 - beq _023264A0 - bl GetMessageLogPreprocessorArgs - mov r1, #0 - add r2, r5, r4 - mov r3, r1 - bl FormatMoveStringMore - ldr r2, _02326548 ; =0x00000ECB - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - ldrb r0, [r5, r4] - mov r7, #1 - orr r0, r0, #0x20 - strb r0, [r5, r4] - b _023264A0 -_02326494: - tst r0, #0x10 - biceq r0, r0, #0x20 - streqb r0, [r5, r4] -_023264A0: - add r6, r6, #1 - cmp r6, #4 - blt _0232642C - ldrb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET] - tst r0, #0x20 - bne _02326504 - tst r0, #0x10 - beq _02326510 - add r0, sp, #0 - mov r1, #0x160 - bl InitMove - ldrb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET] - mov r7, #1 - orr r0, r0, #0x20 - strb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET] - bl GetMessageLogPreprocessorArgs - mov r1, #0 - add r2, sp, #0 - mov r3, r1 - bl FormatMoveStringMore - ldr r2, _02326548 ; =0x00000ECB - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - b _02326510 -_02326504: - tst r0, #0x10 - biceq r0, r0, #0x20 - streqb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET] -_02326510: - cmp r7, #0 - beq _0232652C - ldrb r0, [r8, #0xd2] - cmp r0, #1 - moveq r0, #0 - streqb r0, [r8, #0xd2] - b _0232653C -_0232652C: - ldr r2, _0232654C ; =0x00000ECC - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_0232653C: - mov r0, r7 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -_02326548: .word 0x00000C0D -_0232654C: .word 0x00000C0E -#else -_02326548: .word 0x00000ECB -_0232654C: .word 0x00000ECC -#endif - arm_func_end DoMoveTorment - - arm_func_start DoMoveStringShot -DoMoveStringShot: ; 0x02326550 - stmdb sp!, {r3, lr} - mov r2, #1 - mov r3, r2 - bl LowerSpeed - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveStringShot - - arm_func_start DoMoveSwagger -DoMoveSwagger: ; 0x02326568 - stmdb sp!, {r3, r4, r5, lr} - mov r2, #1 - mov r3, #0 - mov r5, r0 - mov r4, r1 - bl TryInflictConfusedStatus - ldr r1, _023265A0 ; =ATK_STAT_IDX - mov r0, r5 - ldr r2, [r1] - mov r1, r4 - mov r3, #2 - bl BoostOffensiveStat - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023265A0: .word ATK_STAT_IDX - arm_func_end DoMoveSwagger - - arm_func_start DoMoveSnore -DoMoveSnore: ; 0x023265A4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - mov r4, #0 - bl IsMonsterSleeping - cmp r0, #0 - beq _02326624 - mov r0, r8 - mov r1, r7 - mov r2, r6 - mov r3, #0x100 - str r5, [sp] - bl DealDamage - cmp r0, #0 - beq _02326634 - ldr r1, _02326640 ; =SNORE_CRINGE_CHANCE - mov r0, r8 - ldrsh r2, [r1] - mov r1, r7 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02326634 - mov r2, #0 - mov r0, r8 - mov r1, r7 - mov r3, r2 - bl TryInflictCringeStatus - b _02326634 -_02326624: - ldr r2, _02326644 ; =0x00000ECD - mov r0, r8 - mov r1, r7 - bl LogMessageByIdWithPopupCheckUserTarget -_02326634: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02326640: .word SNORE_CRINGE_CHANCE -#ifdef JAPAN -_02326644: .word 0x00000C0F -#else -_02326644: .word 0x00000ECD -#endif - arm_func_end DoMoveSnore - - arm_func_start DoMoveScreech -DoMoveScreech: ; 0x02326648 - stmdb sp!, {r3, lr} - ldr r2, _0232666C ; =ATK_STAT_IDX - mov ip, #1 - ldr r2, [r2] - mov r3, #0x40 - str ip, [sp] - bl ApplyDefensiveStatMultiplier - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0232666C: .word ATK_STAT_IDX - arm_func_end DoMoveScreech - - arm_func_start DoMoveDamageCringe30 -DoMoveDamageCringe30: ; 0x02326670 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023266CC - ldr r1, _023266D8 ; =ROCK_SLIDE_CRINGE_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _023266CC - mov r2, #0 - mov r0, r6 - mov r1, r5 - mov r3, r2 - bl TryInflictCringeStatus -_023266CC: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_023266D8: .word ROCK_SLIDE_CRINGE_CHANCE - arm_func_end DoMoveDamageCringe30 - - arm_func_start DoMoveWeatherBall -DoMoveWeatherBall: ; 0x023266DC - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #8 - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - bl GetApparentWeather - mov r4, r0 - mov r0, r8 - mov r1, r7 - bl EndFrozenStatus - ldr ip, _02326748 ; =WEATHER_BALL_DAMAGE_MULT_TABLE - ldr r2, _0232674C ; =WEATHER_BALL_TYPE_TABLE - ldr ip, [ip, r4, lsl #2] - ldrb r2, [r2, r4] - str ip, [sp] - mov r0, r8 - mov r1, r7 - mov r3, r6 - str r5, [sp, #4] - bl DealDamageWithType - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02326748: .word WEATHER_BALL_DAMAGE_MULT_TABLE -_0232674C: .word WEATHER_BALL_TYPE_TABLE - arm_func_end DoMoveWeatherBall - - arm_func_start DoMoveWhirlpool -DoMoveWhirlpool: ; 0x02326750 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r5, r1 - ldr r1, [r5, #0xb4] - mov r6, r0 - ldrb r0, [r1, #0xd2] - mov r1, r5 - mov r4, #0 - cmp r0, #9 - moveq ip, #0x200 - movne ip, #0x100 - str r3, [sp] - mov r0, r6 - mov r3, ip - bl DealDamage - cmp r0, #0 - beq _023267C8 - ldr r1, _023267D4 ; =WHIRLPOOL_CONSTRICTION_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _023267C8 - mov r0, r6 - mov r1, r5 - mov r2, #0x3b - mov r3, #0 - bl TryInflictConstrictionStatus -_023267C8: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_023267D4: .word WHIRLPOOL_CONSTRICTION_CHANCE - arm_func_end DoMoveWhirlpool - - arm_func_start DoMoveFakeTears -DoMoveFakeTears: ; 0x023267D8 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr r2, _02326808 ; =SPATK_STAT_IDX - mov ip, #1 - ldr r2, [r2] - str ip, [sp] - mov r3, #2 - str ip, [sp, #4] - bl LowerDefensiveStat - mov r0, #1 - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02326808: .word SPATK_STAT_IDX - arm_func_end DoMoveFakeTears - - arm_func_start DoMoveSpite -DoMoveSpite: ; 0x0232680C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r5, r1 - ldr r1, [r5, #0xb4] - mov r4, #0 -#ifdef JAPAN - add lr, r1, #0x120 -#else - add lr, r1, #0x124 -#endif - mov ip, #1 - mov r6, r0 - mov r7, r4 - mov r3, r4 - mov r1, r4 - mov r0, ip -_02326838: - ldrb r2, [lr, r7, lsl #3] - add r8, lr, r7, lsl #3 - tst r2, #1 - movne r2, ip - moveq r2, r3 - tst r2, #0xff - beq _02326864 - ldrb r2, [r8] - tst r2, #0x10 - movne r4, r0 - strneb r1, [r8, #6] -_02326864: - add r7, r7, #1 - cmp r7, #4 - blt _02326838 - mov r1, r5 - mov r0, #1 - mov r2, #0 - bl SubstitutePlaceholderStringTags - cmp r4, #0 - beq _0232689C -#ifdef JAPAN - mov r0, r6 - mov r1, r5 - mov r2, #0xc10 -#else - ldr r2, _023268B4 ; =0x00000ECE - mov r0, r6 - mov r1, r5 -#endif - bl LogMessageByIdWithPopupCheckUserTarget - b _023268AC -_0232689C: - ldr r2, _023268B8 ; =0x00000ECF - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget -_023268AC: - mov r0, r4 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -#ifdef JAPAN -_023268B8: .word 0x00000C11 -#else -_023268B4: .word 0x00000ECE -_023268B8: .word 0x00000ECF -#endif - arm_func_end DoMoveSpite - - arm_func_start DoMoveFocusEnergy -DoMoveFocusEnergy: ; 0x023268BC - stmdb sp!, {r3, lr} - bl TryInflictFocusEnergyStatus - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveFocusEnergy - - arm_func_start DoMoveSmokescreen -DoMoveSmokescreen: ; 0x023268CC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - ldr r1, _02326904 ; =SMOKESCREEN_TURN_RANGE - mov r0, r4 - mov r2, #1 - bl CalcStatusDuration - mov r2, r0 - mov r0, r5 - mov r1, r4 - mov r3, #0 - bl TryInflictWhifferStatus - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02326904: .word SMOKESCREEN_TURN_RANGE - arm_func_end DoMoveSmokescreen - - arm_func_start DoMoveMirrorMove -DoMoveMirrorMove: ; 0x02326908 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl EndFrozenStatus - mov r0, r5 - mov r1, r4 - bl TryInflictMirrorMoveStatus - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DoMoveMirrorMove - - arm_func_start DoMoveOverheat -DoMoveOverheat: ; 0x0232692C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov sb, r0 - mov r8, r1 - mov r7, r2 - ldr r5, [sb, #0xb4] - mov r6, r3 - mov r4, #0 - bl EndFrozenStatus - mov r0, sb - mov r1, r8 - mov r2, r7 - mov r3, #0x100 - str r6, [sp] - bl DealDamage - cmp r0, #0 - beq _02326988 - mov r1, r4 - mov r0, sb - mov r4, #1 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - movne r0, r4 -#ifdef JAPAN - strneb r0, [r5, #0x15b] -#else - strneb r0, [r5, #0x15f] -#endif -_02326988: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end DoMoveOverheat - - arm_func_start DoMoveAuroraBeam -DoMoveAuroraBeam: ; 0x02326990 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023269F8 - ldr r1, _02326A04 ; =AURORA_BEAM_LOWER_ATTACK_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _023269F8 - ldr r0, _02326A08 ; =ATK_STAT_IDX - mov ip, #0 - ldr r2, [r0] - mov r0, r6 - mov r1, r5 - mov r3, #0x80 - str ip, [sp] - bl ApplyOffensiveStatMultiplier -_023269F8: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02326A04: .word AURORA_BEAM_LOWER_ATTACK_CHANCE -_02326A08: .word ATK_STAT_IDX - arm_func_end DoMoveAuroraBeam - - arm_func_start DoMoveMemento -DoMoveMemento: ; 0x02326A0C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r6, r0 - ldr r2, _02326A6C ; =ATK_STAT_IDX - ldr r4, [r6, #0xb4] - mov ip, #1 - strh ip, [r4, #0x10] - ldr r2, [r2] - mov r3, #0x40 - mov r5, r1 - str ip, [sp] - bl ApplyOffensiveStatMultiplier - ldr r0, _02326A70 ; =SPATK_STAT_IDX - mov ip, #1 - ldr r2, [r0] - mov r0, r6 - mov r1, r5 - mov r3, #0x40 - str ip, [sp] - bl ApplyOffensiveStatMultiplier - mov r0, #1 -#ifdef JAPAN - strb r0, [r4, #0x15a] -#else - strb r0, [r4, #0x15e] -#endif - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02326A6C: .word ATK_STAT_IDX -_02326A70: .word SPATK_STAT_IDX - arm_func_end DoMoveMemento - - arm_func_start DoMoveOctazooka -DoMoveOctazooka: ; 0x02326A74 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02326AD4 - ldr r1, _02326AE0 ; =OCTAZOOKA_LOWER_ACCURACY_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02326AD4 - ldr r1, _02326AE4 ; =ATK_STAT_IDX - mov r0, r6 - ldr r2, [r1] - mov r1, r5 - mov r3, #0 - bl LowerHitChanceStat -_02326AD4: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02326AE0: .word OCTAZOOKA_LOWER_ACCURACY_CHANCE -_02326AE4: .word ATK_STAT_IDX - arm_func_end DoMoveOctazooka - - arm_func_start DoMoveFlatter -DoMoveFlatter: ; 0x02326AE8 - stmdb sp!, {r3, r4, r5, lr} - mov r2, #1 - mov r3, #0 - mov r5, r0 - mov r4, r1 - bl TryInflictConfusedStatus - ldr r1, _02326B20 ; =SPATK_STAT_IDX - mov r0, r5 - ldr r2, [r1] - mov r1, r4 - mov r3, #1 - bl BoostOffensiveStat - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02326B20: .word SPATK_STAT_IDX - arm_func_end DoMoveFlatter - - arm_func_start DoMoveWillOWisp -DoMoveWillOWisp: ; 0x02326B24 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r6, r0 - mov r5, r1 - bl GetFlashFireStatus - movs r4, r0 - beq _02326B94 - ldr r3, [r5, #0xb4] -#ifdef JAPAN - ldrb r0, [r3, #0x158] -#else - ldrb r0, [r3, #0x15c] -#endif - cmp r0, #0 - bne _02326BAC - mov r0, #1 - mov r1, r5 - mov r2, #0 -#ifdef JAPAN - strb r0, [r3, #0x158] -#else - strb r0, [r3, #0x15c] -#endif - bl SubstitutePlaceholderStringTags - cmp r4, #1 - bne _02326B80 - ldr r2, _02326BB8 ; =0x00000CDD - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02326BAC -_02326B80: - ldr r2, _02326BBC ; =0x00000CDC - mov r0, r6 - mov r1, r5 - bl LogMessageByIdWithPopupCheckUserTarget - b _02326BAC -_02326B94: - mov r2, #0 - mov r0, r6 - mov r1, r5 - mov r3, #1 - str r2, [sp] - bl TryInflictBurnStatus -_02326BAC: - mov r0, #1 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_02326BB8: .word 0x00000A1D -_02326BBC: .word 0x00000A1C -#else -_02326BB8: .word 0x00000CDD -_02326BBC: .word 0x00000CDC -#endif - arm_func_end DoMoveWillOWisp - - arm_func_start DoMoveReturn -DoMoveReturn: ; 0x02326BC0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x20 - mov sb, r0 - mov r4, r3 - mov r8, r1 - mov r7, r2 - ldr lr, [sb, #0xb4] - mov r6, #1 - mov ip, #0 - ldr r3, _02326C98 ; =ov10_022C4C0C - ldr r0, _02326C9C ; =0x000003E7 - b _02326C18 -_02326BF0: - mov r5, ip, lsl #2 - ldrsh r2, [r3, r5] - cmp r2, #0 - blt _02326C20 - ldrsh r1, [lr, #0xe] - cmp r1, r2 - ldrlt r0, _02326CA0 ; =ov10_022C4C0E - ldrltsh r6, [r0, r5] - blt _02326C20 - add ip, ip, #1 -_02326C18: - cmp ip, r0 - blt _02326BF0 -_02326C20: - mov r0, r7 - bl GetMoveType - mov r5, r0 - ldrh r0, [r7, #4] - bl GetMoveCategory - mov r1, r4 - mov r4, r0 - mov r0, r7 - bl GetDamageSourceWrapper - add r3, sp, #0x1c - stmia sp, {r3, r5} - str r4, [sp, #8] - mov r2, r6 - str r0, [sp, #0xc] - mov r6, #0 - str r6, [sp, #0x10] - mov r3, #1 - str r3, [sp, #0x14] - mov r1, r8 - mov r0, sb - str r6, [sp, #0x18] - bl CalcDamageFixedWrapper - ldrb r0, [sp, #0x1c] - cmp r0, #0 - moveq r0, #1 - movne r0, r6 - strb r0, [sp, #0x1c] - and r0, r0, #0xff - add sp, sp, #0x20 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02326C98: .word ov10_022C4C0C -_02326C9C: .word 0x000003E7 -_02326CA0: .word ov10_022C4C0E - arm_func_end DoMoveReturn - - arm_func_start DoMoveGrudge -DoMoveGrudge: ; 0x02326CA4 - ldr ip, _02326CB0 ; =TryInflictGrudgeStatus - mov r2, #1 - bx ip - .align 2, 0 -_02326CB0: .word TryInflictGrudgeStatus - arm_func_end DoMoveGrudge - - arm_func_start DoMoveCounter -DoMoveCounter: ; 0x02326CB4 - stmdb sp!, {r3, lr} - mov r2, #4 - bl SetReflectStatus - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveCounter - - arm_func_start DoMoveDamageBurn10FlameWheel -DoMoveDamageBurn10FlameWheel: ; 0x02326CC8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - mov r4, #0 - bl EndFrozenStatus - mov r0, r8 - mov r1, r7 - mov r2, r6 - mov r3, #0x100 - str r5, [sp] - bl DealDamage - cmp r0, #0 - beq _02326D40 - ldr r1, _02326D4C ; =FLAME_WHEEL_BURN_CHANCE - mov r0, r8 - ldrsh r2, [r1] - mov r1, r7 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02326D40 - mov r2, #0 - mov r0, r8 - mov r1, r7 - mov r3, r2 - str r2, [sp] - bl TryInflictBurnStatus -_02326D40: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02326D4C: .word FLAME_WHEEL_BURN_CHANCE - arm_func_end DoMoveDamageBurn10FlameWheel - - arm_func_start DoMoveDamageBurn10 -DoMoveDamageBurn10: ; 0x02326D50 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r5, r3 - mov r4, #0 - bl EndFrozenStatus - mov r0, r8 - mov r1, r7 - mov r2, r6 - mov r3, #0x100 - str r5, [sp] - bl DealDamage - cmp r0, #0 - beq _02326DC8 - ldr r1, _02326DD4 ; =FLAMETHROWER_BURN_CHANCE - mov r0, r8 - ldrsh r2, [r1] - mov r1, r7 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02326DC8 - mov r2, #0 - mov r0, r8 - mov r1, r7 - mov r3, r2 - str r2, [sp] - bl TryInflictBurnStatus -_02326DC8: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02326DD4: .word FLAMETHROWER_BURN_CHANCE - arm_func_end DoMoveDamageBurn10 - - arm_func_start DoMoveExpose -DoMoveExpose: ; 0x02326DD8 - stmdb sp!, {r3, lr} - ldrh r3, [r2, #4] - ldr r2, _02326E00 ; =0x0000013B - cmp r3, r2 - moveq r2, #0x7a - movne r2, #0x51 - mov r3, #0 - bl TryInflictExposedStatus - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02326E00: .word 0x0000013B - arm_func_end DoMoveExpose - - arm_func_start DoMoveDoubleTeam -DoMoveDoubleTeam: ; 0x02326E04 - stmdb sp!, {r3, lr} - ldr r2, _02326E1C ; =SPATK_STAT_IDX - ldr r2, [r2] - bl BoostHitChanceStat - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02326E1C: .word SPATK_STAT_IDX - arm_func_end DoMoveDoubleTeam - - arm_func_start DoMoveGust -DoMoveGust: ; 0x02326E20 - stmdb sp!, {r3, lr} - ldr ip, [r1, #0xb4] - mov lr, #1 - ldrb ip, [ip, #0xd2] - add ip, ip, #0xf9 - and ip, ip, #0xff - cmp ip, #1 - movls lr, #2 - str r3, [sp] - mov r3, lr, lsl #8 - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end DoMoveGust - - arm_func_start DoMoveBoostDefense1 -DoMoveBoostDefense1: ; 0x02326E60 - stmdb sp!, {r3, lr} - ldr r2, _02326E7C ; =ATK_STAT_IDX - mov r3, #1 - ldr r2, [r2] - bl BoostDefensiveStat - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02326E7C: .word ATK_STAT_IDX - arm_func_end DoMoveBoostDefense1 - - arm_func_start DoMoveParalyze__02326E80 -DoMoveParalyze__02326E80: ; 0x02326E80 - stmdb sp!, {r3, lr} - mov r2, #1 - mov r3, #0 - bl TryInflictParalysisStatus - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveParalyze__02326E80 - - arm_func_start DoMoveBoostAttack1 -DoMoveBoostAttack1: ; 0x02326E98 - stmdb sp!, {r3, lr} - ldr r2, _02326EB4 ; =ATK_STAT_IDX - mov r3, #1 - ldr r2, [r2] - bl BoostOffensiveStat - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02326EB4: .word ATK_STAT_IDX - arm_func_end DoMoveBoostAttack1 - - arm_func_start DoMoveRazorWind -DoMoveRazorWind: ; 0x02326EB8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r5, r2 - mov r6, r1 - mov r1, r5 - mov r7, r0 - mov r4, r3 - bl IsChargingTwoTurnMove - cmp r0, #0 - beq _02326F14 - ldr r1, _02326F40 ; =RAZOR_WIND_DAMAGE_MULTIPLIER - mov r0, r7 - ldr r3, [r1] - mov r1, r6 - mov r2, r5 - str r4, [sp] - bl DealDamage - cmp r0, #0 - movne r1, #1 - moveq r1, #0 - mov r0, r7 - and r4, r1, #0xff - bl EndTwoTurnMove - b _02326F38 -_02326F14: - ldr r0, _02326F44 ; =0x00000CCD - bl StringFromId - str r0, [sp] - mov r0, r7 - mov r1, r7 - mov r3, r5 - mov r2, #4 - bl BeginChargedMove - mov r4, #1 -_02326F38: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02326F40: .word RAZOR_WIND_DAMAGE_MULTIPLIER -#ifdef JAPAN -_02326F44: .word 0x00000A0D -#else -_02326F44: .word 0x00000CCD -#endif - arm_func_end DoMoveRazorWind - - arm_func_start DoMoveBide -DoMoveBide: ; 0x02326F48 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - mov r6, r0 - ldr r0, _02326F88 ; =0x00000CCE - mov r5, r1 - mov r4, r2 - bl StringFromId - str r0, [sp] - mov r0, r6 - mov r1, r5 - mov r3, r4 - mov r2, #1 - bl BeginChargedMove - mov r0, #1 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_02326F88: .word 0x00000A0E -#else -_02326F88: .word 0x00000CCE -#endif - arm_func_end DoMoveBide - - arm_func_start DoMoveBideUnleash -DoMoveBideUnleash: ; 0x02326F8C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x20 - mov r3, #0 - mov r6, r0 - strb r3, [sp, #0x1c] - ldr r3, [r6, #0xb4] - ldr r0, _0232702C ; =0x000003E7 - ldr r3, [r3, #0xb8] - mov r8, r2 - mov r4, r3, lsl #1 - cmp r0, r3, lsl #1 - movlt r4, r0 - mov r0, r8 - mov r5, r1 - bl GetMoveType - mov r7, r0 - ldrh r0, [r8, #4] - bl GetMoveCategory - add r2, sp, #0x1c - stmia sp, {r2, r7} - str r0, [sp, #8] - ldr r1, _02327030 ; =0x0000023E - mov ip, #0 - str r1, [sp, #0xc] - str ip, [sp, #0x10] - mov r3, #1 - str r3, [sp, #0x14] - mov r0, r6 - mov r1, r5 - mov r2, r4 - str ip, [sp, #0x18] - bl CalcDamageFixedWrapper - ldrb r0, [sp, #0x1c] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - strb r0, [sp, #0x1c] - and r0, r0, #0xff - add sp, sp, #0x20 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0232702C: .word 0x000003E7 -_02327030: .word 0x0000023E - arm_func_end DoMoveBideUnleash - - arm_func_start DoMoveCrunch -DoMoveCrunch: ; 0x02327034 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023270A0 - ldr r1, _023270AC ; =CRUNCH_LOWER_DEFENSE_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _023270A0 - ldr r0, _023270B0 ; =ATK_STAT_IDX - mov r3, r4 - ldr r2, [r0] - mov r0, r6 - mov r1, r5 - str r3, [sp] - mov ip, #0 - str ip, [sp, #4] - bl LowerDefensiveStat -_023270A0: - mov r0, r4 - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023270AC: .word CRUNCH_LOWER_DEFENSE_CHANCE -_023270B0: .word ATK_STAT_IDX - arm_func_end DoMoveCrunch - - arm_func_start DoMoveDamageCringe20 -DoMoveDamageCringe20: ; 0x023270B4 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02327110 - ldr r1, _0232711C ; =BITE_CRINGE_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02327110 - mov r2, #0 - mov r0, r6 - mov r1, r5 - mov r3, r2 - bl TryInflictCringeStatus -_02327110: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_0232711C: .word BITE_CRINGE_CHANCE - arm_func_end DoMoveDamageCringe20 - - arm_func_start DoMoveDamageParalyze20 -DoMoveDamageParalyze20: ; 0x02327120 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _0232717C - ldr r1, _02327188 ; =THUNDER_PARALYZE_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _0232717C - mov r2, #0 - mov r0, r6 - mov r1, r5 - mov r3, r2 - bl TryInflictParalysisStatus -_0232717C: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02327188: .word THUNDER_PARALYZE_CHANCE - arm_func_end DoMoveDamageParalyze20 - - arm_func_start DoMoveEndeavor -DoMoveEndeavor: ; 0x0232718C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x20 - mov r4, #0 - mov sb, r0 - strb r4, [sp, #0x1c] - mov r8, r1 - ldr r1, [r8, #0xb4] - ldr r0, [sb, #0xb4] - ldrsh r1, [r1, #0x10] - ldrsh r0, [r0, #0x10] - mov r7, r2 - mov r6, r3 - subs r5, r1, r0 - mov r0, r8 - movmi r5, r4 - bl MirrorMoveIsActive - cmp r0, #0 - mov r0, r7 - movne r8, sb - bl GetMoveType - mov r4, r0 - ldrh r0, [r7, #4] - bl GetMoveCategory - mov r1, r6 - mov r6, r0 - mov r0, r7 - bl GetDamageSourceWrapper - mov r2, r5 - add r5, sp, #0x1c - str r5, [sp] - stmib sp, {r4, r6} - str r0, [sp, #0xc] - mov r3, #0 - str r3, [sp, #0x10] - mov r4, #1 - str r4, [sp, #0x14] - mov r1, r8 - mov r0, sb - str r3, [sp, #0x18] - bl CalcDamageFixedWrapper - ldrb r0, [sp, #0x1c] - cmp r0, #0 - moveq r0, r4 - movne r0, #0 - strb r0, [sp, #0x1c] - and r0, r0, #0xff - add sp, sp, #0x20 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end DoMoveEndeavor - - arm_func_start DoMoveFacade -DoMoveFacade: ; 0x0232724C - stmdb sp!, {r3, lr} - ldr ip, [r0, #0xb4] - mov lr, #0x100 - ldrb ip, [ip, #0xbf] - cmp ip, #0 - ldrne ip, _02327288 ; =FACADE_DAMAGE_MULTIPLIER - str r3, [sp] - ldrne lr, [ip] - mov r3, lr - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - .align 2, 0 -_02327288: .word FACADE_DAMAGE_MULTIPLIER - arm_func_end DoMoveFacade - - arm_func_start DoMoveDamageLowerSpeed20 -DoMoveDamageLowerSpeed20: ; 0x0232728C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023272E8 - ldr r1, _023272F4 ; =CONSTRICT_LOWER_SPEED_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _023272E8 - mov r0, r6 - mov r1, r5 - mov r2, r4 - mov r3, #0 - bl LowerSpeed -_023272E8: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_023272F4: .word CONSTRICT_LOWER_SPEED_CHANCE - arm_func_end DoMoveDamageLowerSpeed20 - - arm_func_start DoMoveBrickBreak -DoMoveBrickBreak: ; 0x023272F8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - ldr r5, [r6, #0xb4] - mov r7, r0 - str r3, [sp] - mov r3, #0x100 - mov r4, #0 - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, r4 - orr r0, r4, r0 - ands r4, r0, #0xff - beq _0232735C - ldrb r0, [r5, #0xd5] - cmp r0, #1 - cmpne r0, #3 - bne _0232735C - ldr r2, _02327364 ; =0x00000ED2 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r7 - mov r1, r6 - bl EndReflectClassStatus -_0232735C: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -_02327364: .word 0x00000C14 -#else -_02327364: .word 0x00000ED2 -#endif - arm_func_end DoMoveBrickBreak - - arm_func_start DoMoveDamageLowerSpeed100 -DoMoveDamageLowerSpeed100: ; 0x02327368 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023273C0 - mov r2, r4 - mov r0, r6 - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _023273C0 - mov r0, r6 - mov r1, r5 - mov r2, r4 - mov r3, #0 - bl LowerSpeed -_023273C0: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - arm_func_end DoMoveDamageLowerSpeed100 - - arm_func_start DoMoveFocusPunch -DoMoveFocusPunch: ; 0x023273CC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r5, r2 - mov r6, r1 - mov r1, r5 - mov r7, r0 - mov r4, r3 - bl IsChargingTwoTurnMove - cmp r0, #0 - beq _02327428 - ldr r1, _02327454 ; =FOCUS_PUNCH_DAMAGE_MULTIPLIER - mov r0, r7 - ldr r3, [r1] - mov r1, r6 - mov r2, r5 - str r4, [sp] - bl DealDamage - cmp r0, #0 - movne r1, #1 - moveq r1, #0 - mov r0, r7 - and r4, r1, #0xff - bl EndTwoTurnMove - b _0232744C -_02327428: -#ifdef JAPAN - mov r0, #0xa10 -#else - mov r0, #0xcd0 -#endif - bl StringFromId - str r0, [sp] - mov r0, r7 - mov r1, r7 - mov r3, r5 - mov r2, #5 - bl BeginChargedMove - mov r4, #1 -_0232744C: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02327454: .word FOCUS_PUNCH_DAMAGE_MULTIPLIER - arm_func_end DoMoveFocusPunch - - arm_func_start DoMoveDamageDrain -DoMoveDamageDrain: ; 0x02327458 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov sb, r0 - mov r8, r1 - mov r7, r2 - mov r5, r3 - cmp sb, r8 - mov r4, #0 - beq _023274B8 - cmp sb, #0 - moveq r0, r4 - beq _02327498 - ldr r0, [sb] - cmp r0, #1 - moveq r0, #1 - movne r0, r4 - and r0, r0, #0xff -_02327498: - cmp r0, #0 - beq _023274B8 - mov r0, sb - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r6, #0 - bne _023274C8 -_023274B8: - mov r0, r8 - mov r1, #0x3a - bl AbilityIsActiveVeneer - mov r6, r0 -_023274C8: - mov r0, sb - mov r1, r8 - mov r2, r7 - mov r3, #0x100 - str r5, [sp] - bl DealDamage - movs r5, r0 - movne r4, #1 - cmp r4, #0 - beq _02327590 - mov r0, sb - mov r1, #0 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - beq _02327590 - ldr r1, [sb, #0xb4] - add r0, r5, r5, lsr #31 - mov r5, r0, asr #1 -#ifdef JAPAN - ldrb r0, [r1, #0x107] -#else - ldrb r0, [r1, #0x108] -#endif - mov r4, #1 - cmp r5, #1 - movlt r5, r4 - cmp r0, #1 - movlo r0, #1 -#ifdef JAPAN - strlob r0, [r1, #0x107] -#else - strlob r0, [r1, #0x108] -#endif - cmp r6, #0 - beq _0232754C - mov r2, #0xd - mov r0, sb - mov r1, r5 - add r3, r2, #0x22c - bl ApplyDamageAndEffectsWrapper - b _02327590 -_0232754C: - ldr r1, [sb, #0xb4] - ldrb r0, [r1, #6] - cmp r0, #0 - movne r0, #0 - bne _0232756C -#ifdef JAPAN - add r0, r1, #0x224 -#else - add r0, r1, #0x228 -#endif - mov r1, #0x57 - bl ExclusiveItemEffectFlagTest -_0232756C: - cmp r0, #0 - movne r5, r5, lsl #1 - mov r6, #1 - mov r0, sb - mov r1, sb - mov r2, r5 - mov r3, #0 - str r6, [sp] - bl TryIncreaseHp -_02327590: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end DoMoveDamageDrain - - arm_func_start DoMoveReversal -DoMoveReversal: ; 0x02327598 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - ldr ip, [r0, #0xb4] - ldr r6, _02327644 ; =0x000003E7 - ldrsh r5, [ip, #0x12] - ldrsh r4, [ip, #0x16] - ldrsh ip, [ip, #0x10] - add lr, r5, r4 - cmp lr, r6 - movle r6, lr - mov r4, r6, asr #1 - add r4, r6, r4, lsr #30 - cmp ip, r4, asr #2 - movle r5, #0 - ble _0232761C - ldr r4, _02327644 ; =0x000003E7 - cmp lr, r4 - movle r4, lr - mov r5, r4, lsl #1 - mov r4, r5, asr #1 - add r4, r5, r4, lsr #30 - cmp ip, r4, asr #2 - movle r5, #1 - ble _0232761C - ldr r4, _02327644 ; =0x000003E7 - cmp lr, r4 - movgt lr, r4 - add r4, lr, lr, lsl #1 - mov lr, r4, asr #1 - add lr, r4, lr, lsr #30 - cmp ip, lr, asr #2 - movle r5, #2 - movgt r5, #3 -_0232761C: - ldr r4, _02327648 ; =REVERSAL_DAMAGE_MULT_TABLE - str r3, [sp] - ldr r3, [r4, r5, lsl #2] - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02327644: .word 0x000003E7 -_02327648: .word REVERSAL_DAMAGE_MULT_TABLE - arm_func_end DoMoveReversal - - arm_func_start DoMoveSmellingSalt -DoMoveSmellingSalt: ; 0x0232764C - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - ldr ip, [r4, #0xb4] - mov r5, r0 - ldrb ip, [ip, #0xbf] - cmp ip, #4 - str r3, [sp] - bne _02327694 - mov r3, #0x200 - bl DealDamage - cmp r0, #0 - movne r2, #1 - moveq r2, #0 - mov r1, r4 - mov r0, r5 - and r4, r2, #0xff - bl EndBurnClassStatus - b _023276AC -_02327694: - mov r3, #0x100 - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r4, r0, #0xff -_023276AC: - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DoMoveSmellingSalt - - arm_func_start DoMoveMetalSound -DoMoveMetalSound: ; 0x023276B4 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr r2, _023276E4 ; =SPATK_STAT_IDX - mov ip, #1 - ldr r2, [r2] - str ip, [sp] - mov r3, #3 - str ip, [sp, #4] - bl LowerDefensiveStat - mov r0, #1 - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_023276E4: .word SPATK_STAT_IDX - arm_func_end DoMoveMetalSound - - arm_func_start DoMoveTickle -DoMoveTickle: ; 0x023276E8 - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0xc - ldr r2, _02327740 ; =SPATK_STAT_IDX - mov r3, #1 - ldr r2, [r2, #4] - str r3, [sp] - mov r5, r0 - mov r4, r1 - str r2, [sp, #8] - str r3, [sp, #4] - bl LowerOffensiveStat - add r0, sp, #8 - mov r3, #1 - ldr r2, [r0] - str r3, [sp] - mov r0, r5 - mov r1, r4 - str r3, [sp, #4] - bl LowerDefensiveStat - mov r0, #1 - add sp, sp, #0xc - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02327740: .word SPATK_STAT_IDX - arm_func_end DoMoveTickle - - arm_func_start DoMoveShadowHold -DoMoveShadowHold: ; 0x02327744 - stmdb sp!, {r3, lr} - mov r2, #0 - bl TryInflictShadowHoldStatus - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveShadowHold - - arm_func_start DoMoveHaze -DoMoveHaze: ; 0x02327758 - stmdb sp!, {r3, lr} - mov r2, #1 - bl TryResetStatChanges - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveHaze - - arm_func_start DoMoveDamageMultihitFatigue -DoMoveDamageMultihitFatigue: ; 0x0232776C - stmdb sp!, {r3, r4, r5, lr} - str r3, [sp] - mov r3, #0x100 - mov r5, r0 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023277AC - mov r1, r4 - mov r0, r5 - mov r4, #1 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - ldrne r0, _023277B4 ; =MULTIHIT_FATIGUE_MOVE_USED - movne r1, r4 - strneb r1, [r0] -_023277AC: - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023277B4: .word MULTIHIT_FATIGUE_MOVE_USED - arm_func_end DoMoveDamageMultihitFatigue - - arm_func_start DoMoveDamageWeightDependent -DoMoveDamageWeightDependent: ; 0x023277B8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - ldr r1, [r6, #0xb4] - mov r7, r0 - ldrsh r0, [r1, #4] - mov r5, r2 - mov r4, r3 - bl GetWeightMultiplier - mov r3, r0 - mov r0, r7 - mov r1, r6 - mov r2, r5 - str r4, [sp] - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end DoMoveDamageWeightDependent - - arm_func_start DoMoveDamageBoostAllStats -DoMoveDamageBoostAllStats: ; 0x02327804 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #0xc - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023278D4 - ldr r1, _023278E0 ; =SILVER_WIND_BOOST_CHANCE - mov r0, r6 - ldrsh r1, [r1] - mov r4, #1 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - beq _023278D4 - mov r0, r6 - mov r1, r6 - mov r2, #0 - mov r3, r4 - ldr r5, [r6, #0xb4] - bl BoostSpeedOneStage - ldr r1, _023278E4 ; =SPATK_STAT_IDX - mov r0, r6 - ldr r2, [r1, #4] - mov r1, r6 - mov r3, r4 - str r2, [sp, #8] - bl BoostOffensiveStat - ldr r1, _023278E4 ; =SPATK_STAT_IDX - mov r0, r6 - ldr r2, [r1] - mov r1, r6 - mov r3, r4 - str r2, [sp, #4] - bl BoostOffensiveStat - add r2, sp, #8 - ldr r2, [r2] - mov r0, r6 - mov r1, r6 - mov r3, r4 - bl BoostDefensiveStat - add r2, sp, #4 - ldr r2, [r2] - mov r0, r6 - mov r1, r6 - mov r3, r4 - bl BoostDefensiveStat -#ifdef JAPAN - ldrb r0, [r5, #0x107] - cmp r0, #1 - movlo r0, r4 - strlob r0, [r5, #0x107] -#else - ldrb r0, [r5, #0x108] - cmp r0, #1 - movlo r0, r4 - strlob r0, [r5, #0x108] -#endif -_023278D4: - mov r0, r4 - add sp, sp, #0xc - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_023278E0: .word SILVER_WIND_BOOST_CHANCE -_023278E4: .word SPATK_STAT_IDX - arm_func_end DoMoveDamageBoostAllStats - - arm_func_start DoMoveSynthesis -DoMoveSynthesis: ; 0x023278E8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - bl GetApparentWeather - mov ip, #1 - ldr r1, _02327924 ; =SYNTHESIS_HP_RESTORATION_TABLE - mov r0, r0, lsl #1 - ldrsh r2, [r1, r0] - mov r0, r5 - mov r1, r4 - mov r3, #0 - str ip, [sp] - bl TryIncreaseHp - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02327924: .word SYNTHESIS_HP_RESTORATION_TABLE - arm_func_end DoMoveSynthesis - - arm_func_start DoMoveBoostSpeed1 -DoMoveBoostSpeed1: ; 0x02327928 - stmdb sp!, {r3, lr} - mov r2, #0 - mov r3, #1 - bl BoostSpeedOneStage - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveBoostSpeed1 - - arm_func_start DoMoveRapidSpin -DoMoveRapidSpin: ; 0x02327940 - stmdb sp!, {r3, r4, r5, lr} - str r3, [sp] - mov r3, #0x100 - mov r5, r0 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _023279A0 - mov r1, r4 - mov r0, r5 - mov r4, #1 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - beq _023279A0 - ldr r0, [r5, #0xb4] - add r0, r0, #0x100 -#ifdef JAPAN - ldrh r0, [r0, #0x8e] -#else - ldrh r0, [r0, #0x92] -#endif - tst r0, #2 - ldrne r0, _023279A8 ; =RAPID_SPIN_BINDING_REMOVAL - movne r1, #0 - strneb r1, [r0] - ldreq r0, _023279A8 ; =RAPID_SPIN_BINDING_REMOVAL - moveq r1, r4 - streqb r1, [r0] -_023279A0: - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023279A8: .word RAPID_SPIN_BINDING_REMOVAL - arm_func_end DoMoveRapidSpin - - arm_func_start DoMoveSureShot -DoMoveSureShot: ; 0x023279AC - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - ldr r1, _023279E0 ; =SURE_SHOT_TURN_RANGE - mov r0, r4 - mov r2, #0 - bl CalcStatusDuration - mov r2, r0 - mov r0, r5 - mov r1, r4 - bl TryInflictSureShotStatus - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_023279E0: .word SURE_SHOT_TURN_RANGE - arm_func_end DoMoveSureShot - - arm_func_start DoMoveCosmicPower -DoMoveCosmicPower: ; 0x023279E4 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _02327A20 ; =ATK_STAT_IDX - mov r3, #1 - ldr r2, [r2] - mov r5, r0 - mov r4, r1 - bl BoostDefensiveStat - ldr r1, _02327A24 ; =SPATK_STAT_IDX - mov r0, r5 - ldr r2, [r1] - mov r1, r4 - mov r3, #1 - bl BoostDefensiveStat - mov r0, #1 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02327A20: .word ATK_STAT_IDX -_02327A24: .word SPATK_STAT_IDX - arm_func_end DoMoveCosmicPower - - arm_func_start DoMoveSkyAttack -DoMoveSkyAttack: ; 0x02327A28 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r6, r2 - mov r7, r1 - mov r1, r6 - mov r8, r0 - mov r5, r3 - mov r4, #0 - bl IsChargingTwoTurnMove - cmp r0, #0 - beq _02327AB8 - ldr r1, _02327AE8 ; =SKY_ATTACK_DAMAGE_MULTIPLIER - mov r0, r8 - ldr r3, [r1] - mov r1, r7 - mov r2, r6 - str r5, [sp] - bl DealDamage - cmp r0, #0 - beq _02327AAC - ldr r1, _02327AEC ; =SKY_ATTACK_CRINGE_CHANCE - mov r0, r8 - ldrsh r2, [r1] - mov r1, r7 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02327AAC - mov r2, #0 - mov r0, r8 - mov r1, r7 - mov r3, r2 - bl TryInflictCringeStatus -_02327AAC: - mov r0, r8 - bl EndTwoTurnMove - b _02327ADC -_02327AB8: - ldr r0, _02327AF0 ; =0x00000CD1 - bl StringFromId - str r0, [sp] - mov r0, r8 - mov r1, r8 - mov r3, r6 - mov r2, #3 - bl BeginChargedMove - mov r4, #1 -_02327ADC: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02327AE8: .word SKY_ATTACK_DAMAGE_MULTIPLIER -_02327AEC: .word SKY_ATTACK_CRINGE_CHANCE -#ifdef JAPAN -_02327AF0: .word 0x00000A11 -#else -_02327AF0: .word 0x00000CD1 -#endif - arm_func_end DoMoveSkyAttack - - arm_func_start DoMoveDamageFreeze15 -DoMoveDamageFreeze15: ; 0x02327AF4 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02327B4C - ldr r1, _02327B58 ; =POWDER_SNOW_FREEZE_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02327B4C - mov r0, r6 - mov r1, r5 - mov r2, #0 - bl TryInflictFrozenStatus -_02327B4C: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02327B58: .word POWDER_SNOW_FREEZE_CHANCE - arm_func_end DoMoveDamageFreeze15 - - arm_func_start DoMoveMeteorMash -DoMoveMeteorMash: ; 0x02327B5C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 -#ifdef EUROPE - mov r5, r1 -#endif - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02327BCC - ldr r1, _02327BD8 ; =METEOR_MASH_BOOST_ATTACK_CHANCE - mov r0, r6 - ldrsh r2, [r1] -#ifdef EUROPE - mov r1, r5 -#else - mov r1, r6 -#endif - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02327BCC - ldr r0, _02327BDC ; =ATK_STAT_IDX - ldr r5, [r6, #0xb4] - ldr r2, [r0] - mov r0, r6 - mov r1, r6 - mov r3, r4 - bl BoostOffensiveStat -#ifdef JAPAN - ldrb r0, [r5, #0x107] - cmp r0, #1 - movlo r0, r4 - strlob r0, [r5, #0x107] -#else - ldrb r0, [r5, #0x108] - cmp r0, #1 - movlo r0, r4 - strlob r0, [r5, #0x108] -#endif -_02327BCC: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02327BD8: .word METEOR_MASH_BOOST_ATTACK_CHANCE -_02327BDC: .word ATK_STAT_IDX - arm_func_end DoMoveMeteorMash - - arm_func_start DoMoveEndure -DoMoveEndure: ; 0x02327BE0 - stmdb sp!, {r3, lr} - bl TryInflictEndureStatus - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveEndure - - arm_func_start DoMoveLowerSpeed1 -DoMoveLowerSpeed1: ; 0x02327BF0 - stmdb sp!, {r3, lr} - mov r2, #1 - mov r3, r2 - bl LowerSpeed - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveLowerSpeed1 - - arm_func_start DoMoveDamageConfuse10 -DoMoveDamageConfuse10: ; 0x02327C08 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - str r3, [sp] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02327C64 - ldr r1, _02327C70 ; =PSYBEAM_CONFUSE_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02327C64 - mov r2, #0 - mov r0, r6 - mov r1, r5 - mov r3, r2 - bl TryInflictConfusedStatus -_02327C64: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02327C70: .word PSYBEAM_CONFUSE_CHANCE - arm_func_end DoMoveDamageConfuse10 - - arm_func_start DoMovePsywave -DoMovePsywave: ; 0x02327C74 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r0, #0x80 - mov r1, #0x180 - mov r5, r2 - mov r4, r3 - bl DungeonRandRange - ldr r1, [r7, #0xb4] - mov r2, r5 - ldrb r1, [r1, #0xa] - mul r1, r0, r1 - movs r3, r1, asr #8 - movmi r3, #1 - cmp r3, #0xc7 - movgt r3, #0xc7 - mov r0, r7 - mov r1, r6 - str r4, [sp] - bl ov29_02332F18 - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end DoMovePsywave - - arm_func_start DoMoveDamageLowerDefensiveStatVariable -DoMoveDamageLowerDefensiveStatVariable: ; 0x02327CD8 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - ldr ip, [sp, #0x30] - mov r3, #0x100 - mov r6, r0 - mov r5, r1 - str ip, [sp] - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02327D4C - ldrsh r2, [sp, #0x2c] - mov r0, r6 - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02327D4C - add r0, sp, #0x24 - mov ip, r4 - ldr r2, [r0] - str ip, [sp] - mov ip, #0 - ldrsh r3, [sp, #0x28] - mov r0, r6 - mov r1, r5 - str ip, [sp, #4] - bl LowerDefensiveStat -_02327D4C: - mov r0, r4 - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, lr} - add sp, sp, #0x10 - bx lr - arm_func_end DoMoveDamageLowerDefensiveStatVariable - - arm_func_start DoMovePsychoBoost -DoMovePsychoBoost: ; 0x02327D60 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - str r3, [sp] - mov r3, #0x100 - mov r5, r0 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02327DC0 - mov r1, r4 - mov r0, r5 - mov r4, #1 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - beq _02327DC0 - ldr r0, _02327DCC ; =SPATK_STAT_IDX - mov ip, #0 - ldr r2, [r0] - str ip, [sp] - mov r0, r5 - mov r1, r5 - mov r3, #2 - str ip, [sp, #4] - bl LowerOffensiveStat -_02327DC0: - mov r0, r4 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02327DCC: .word SPATK_STAT_IDX - arm_func_end DoMovePsychoBoost - - arm_func_start DoMoveUproar -DoMoveUproar: ; 0x02327DD0 - stmdb sp!, {r3, lr} - bl TryInflictSleeplessStatus - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveUproar - - arm_func_start DoMoveWaterSpout -DoMoveWaterSpout: ; 0x02327DE0 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - ldr ip, [r0, #0xb4] - ldr r6, _02327E8C ; =0x000003E7 - ldrsh r5, [ip, #0x12] - ldrsh r4, [ip, #0x16] - ldrsh ip, [ip, #0x10] - add lr, r5, r4 - cmp lr, r6 - movle r6, lr - mov r4, r6, asr #1 - add r4, r6, r4, lsr #30 - cmp ip, r4, asr #2 - movle r5, #0 - ble _02327E64 - ldr r4, _02327E8C ; =0x000003E7 - cmp lr, r4 - movle r4, lr - mov r5, r4, lsl #1 - mov r4, r5, asr #1 - add r4, r5, r4, lsr #30 - cmp ip, r4, asr #2 - movle r5, #1 - ble _02327E64 - ldr r4, _02327E8C ; =0x000003E7 - cmp lr, r4 - movgt lr, r4 - add r4, lr, lr, lsl #1 - mov lr, r4, asr #1 - add lr, r4, lr, lsr #30 - cmp ip, lr, asr #2 - movle r5, #2 - movgt r5, #3 -_02327E64: - ldr r4, _02327E90 ; =WATER_SPOUT_DAMAGE_MULT_TABLE - str r3, [sp] - ldr r3, [r4, r5, lsl #2] - bl DealDamage - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02327E8C: .word 0x000003E7 -_02327E90: .word WATER_SPOUT_DAMAGE_MULT_TABLE - arm_func_end DoMoveWaterSpout - - arm_func_start DoMovePsychUp -DoMovePsychUp: ; 0x02327E94 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r1 - mov r7, r0 - mov r0, r6 - ldr r5, [r7, #0xb4] - ldr r4, [r6, #0xb4] - bl ov29_022E5474 - mov r0, #0 -_02327EB4: - add lr, r4, r0, lsl #1 - ldrsh r1, [lr, #0x24] - add ip, r5, r0, lsl #1 - add r3, r4, r0, lsl #2 - strh r1, [ip, #0x24] - ldrsh r1, [lr, #0x28] - add r2, r5, r0, lsl #2 - add r0, r0, #1 - strh r1, [ip, #0x28] - ldrsh r1, [lr, #0x2c] - cmp r0, #2 - strh r1, [ip, #0x2c] - ldr r1, [r3, #0x34] - str r1, [r2, #0x34] - ldr r1, [r3, #0x3c] - str r1, [r2, #0x3c] - blt _02327EB4 - mov r0, #0 - mov r1, r6 - mov r2, r0 - bl SubstitutePlaceholderStringTags - ldr r2, _02327F30 ; =0x00000D62 - mov r0, r7 - mov r1, r6 - bl LogMessageByIdWithPopupCheckUserTarget -#ifdef JAPAN - ldrb r0, [r5, #0x107] - cmp r0, #1 - movlo r0, #1 - strlob r0, [r5, #0x107] -#else - ldrb r0, [r5, #0x108] - cmp r0, #1 - movlo r0, #1 - strlob r0, [r5, #0x108] -#endif - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -#ifdef JAPAN -_02327F30: .word 0x00000AA2 -#else -_02327F30: .word 0x00000D62 -#endif - arm_func_end DoMovePsychUp - - arm_func_start DoMoveDamageWithRecoil -DoMoveDamageWithRecoil: ; 0x02327F34 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x18 - str r3, [sp] - mov r3, #0x100 - mov r7, r0 - mov r6, r2 - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _02327FFC - mov r0, r7 - bl EntityIsValidMoveEffects__0232800C - cmp r0, #0 - beq _02327FFC - ldr r1, [r7, #0xb4] - ldr r0, _02328008 ; =0x000003E7 - ldrsh r2, [r1, #0x12] - ldrsh r1, [r1, #0x16] - mov r4, #1 - add r1, r2, r1 - cmp r1, r0 - movgt r1, r0 - mov r0, r1, asr #2 - add r0, r1, r0, lsr #29 - movs r5, r0, asr #3 - mov r0, r7 - mov r1, #7 - moveq r5, #1 - bl AbilityIsActiveVeneer - cmp r0, #0 - bne _02327FFC - mov r0, r7 - mov r1, #0 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - beq _02327FFC - ldrh r1, [r6, #4] - mov r2, #0 - mov r0, #0x23c - stmia sp, {r1, r2} - str r0, [sp, #8] - mov r0, #0x14 - str r0, [sp, #0xc] - mov r0, r4 - str r0, [sp, #0x10] - mov r0, r7 - mov r1, r5 - mov r3, r2 - str r2, [sp, #0x14] - bl CalcRecoilDamageFixed -_02327FFC: - mov r0, r4 - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02328008: .word 0x000003E7 - arm_func_end DoMoveDamageWithRecoil diff --git a/asm/overlay_29_02325FC4.s b/asm/overlay_29_02325FC4.s new file mode 100644 index 00000000..00087494 --- /dev/null +++ b/asm/overlay_29_02325FC4.s @@ -0,0 +1,177 @@ + .include "asm/macros.inc" + .include "overlay_29_02325FC4.inc" + + .text + + arm_func_start DoMoveDig +DoMoveDig: ; 0x02325FC4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + mov r4, #0 + bl GetTileAtEntity + mov sb, r0 + bl IsTileGround + cmp r0, #0 + beq _02326000 + ldrh r0, [sb] + and r0, r0, #3 + cmp r0, #1 + beq _02326014 +_02326000: + ldr r2, _0232607C ; =0x00000EC4 + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget + b _02326074 +_02326014: + mov r0, r8 + mov r1, r6 + bl IsChargingTwoTurnMove + cmp r0, #0 + beq _02326050 + ldr r1, _02326080 ; =DIG_DAMAGE_MULTIPLIER + mov r0, r8 + ldr r3, [r1] + mov r1, r7 + mov r2, r6 + str r5, [sp] + bl DealDamage + mov r0, r8 + bl EndTwoTurnMove + b _02326070 +_02326050: + ldr r0, _02326084 ; =0x00000CD6 + bl StringFromId + str r0, [sp] + mov r0, r8 + mov r1, r8 + mov r3, r6 + mov r2, #0xa + bl BeginChargedMove +_02326070: + mov r4, #1 +_02326074: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +#ifdef JAPAN +_0232607C: .word 0x00000C06 +_02326080: .word DIG_DAMAGE_MULTIPLIER +_02326084: .word 0x00000A16 +#else +_0232607C: .word 0x00000EC4 +_02326080: .word DIG_DAMAGE_MULTIPLIER +_02326084: .word 0x00000CD6 +#endif + arm_func_end DoMoveDig + + arm_func_start DoMoveSweetScent +DoMoveSweetScent: ; 0x02326088 + stmdb sp!, {r3, lr} + ldr r2, _023260A4 ; =SPATK_STAT_IDX + mov r3, #1 + ldr r2, [r2] + bl LowerHitChanceStat + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_023260A4: .word SPATK_STAT_IDX + arm_func_end DoMoveSweetScent + + arm_func_start DoMoveCharm +DoMoveCharm: ; 0x023260A8 + stmdb sp!, {r3, lr} + ldr r2, _023260CC ; =ATK_STAT_IDX + mov ip, #1 + ldr r2, [r2] + mov r3, #0x80 + str ip, [sp] + bl ApplyOffensiveStatMultiplier + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_023260CC: .word ATK_STAT_IDX + arm_func_end DoMoveCharm + + arm_func_start DoMoveRainDance +DoMoveRainDance: ; 0x023260D0 + stmdb sp!, {r3, r4, r5, lr} + ldr r3, _02326120 ; =WEATHER_MOVE_TURN_COUNT + ldr r2, _02326124 ; =DUNGEON_PTR + ldrsh r3, [r3] + ldr r2, [r2] + mov r5, r0 + mov r4, r1 +#ifdef JAPAN + add r2, r2, #0xcc00 + mov r0, #1 + mov r1, #0 + strh r3, [r2, #0x9e] +#else + add r2, r2, #0xcd00 + mov r0, #1 + mov r1, #0 + strh r3, [r2, #0x42] +#endif + bl TryActivateWeather + cmp r0, #0 + bne _02326118 + ldr r2, _02326128 ; =0x00000EC5 + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget +_02326118: + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02326120: .word WEATHER_MOVE_TURN_COUNT +_02326124: .word DUNGEON_PTR +#ifdef JAPAN +_02326128: .word 0x00000C07 +#else +_02326128: .word 0x00000EC5 +#endif + arm_func_end DoMoveRainDance + + arm_func_start DoMoveHail +DoMoveHail: ; 0x0232612C + stmdb sp!, {r3, r4, r5, lr} + ldr r3, _0232617C ; =WEATHER_MOVE_TURN_COUNT + ldr r2, _02326180 ; =DUNGEON_PTR + ldrsh r3, [r3] + ldr r2, [r2] + mov r5, r0 + mov r4, r1 +#ifdef JAPAN + add r2, r2, #0xcc00 + mov r0, #1 + mov r1, #0 + strh r3, [r2, #0xa0] +#else + add r2, r2, #0xcd00 + mov r0, #1 + mov r1, #0 + strh r3, [r2, #0x44] +#endif + bl TryActivateWeather + cmp r0, #0 + bne _02326174 + ldr r2, _02326184 ; =0x00000EC8 + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget +_02326174: + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0232617C: .word WEATHER_MOVE_TURN_COUNT +_02326180: .word DUNGEON_PTR +#ifdef JAPAN +_02326184: .word 0x00000C0A +#else +_02326184: .word 0x00000EC8 +#endif + arm_func_end DoMoveHail diff --git a/asm/overlay_29_023261A0.s b/asm/overlay_29_023261A0.s new file mode 100644 index 00000000..7896a3c7 --- /dev/null +++ b/asm/overlay_29_023261A0.s @@ -0,0 +1,37 @@ + .include "asm/macros.inc" + .include "overlay_29_023261A0.inc" + + .text + + arm_func_start DoMoveBubble +DoMoveBubble: ; 0x023261A0 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023261FC + ldr r1, _02326208 ; =BUBBLE_LOWER_SPEED_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _023261FC + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0 + bl LowerSpeed +_023261FC: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02326208: .word BUBBLE_LOWER_SPEED_CHANCE + arm_func_end DoMoveBubble diff --git a/asm/overlay_29_02326220.s b/asm/overlay_29_02326220.s new file mode 100644 index 00000000..5918caff --- /dev/null +++ b/asm/overlay_29_02326220.s @@ -0,0 +1,269 @@ + .include "asm/macros.inc" + .include "overlay_29_02326220.inc" + + .text + + arm_func_start DoMoveRage +DoMoveRage: ; 0x02326220 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r6, r0 + ldr r0, _02326260 ; =0x00000CCF + mov r5, r1 + mov r4, r2 + bl StringFromId + str r0, [sp] + mov r0, r6 + mov r1, r5 + mov r3, r4 + mov r2, #0xc + bl BeginChargedMove + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +_02326260: .word 0x00000A0F +#else +_02326260: .word 0x00000CCF +#endif + arm_func_end DoMoveRage + + arm_func_start DoMoveSuperFang +DoMoveSuperFang: ; 0x02326264 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x20 + mov r7, r1 + ldr r5, [r7, #0xb4] + mov r4, #0 + ldrsh r5, [r5, #0x10] + mov r8, r0 + mov r6, r2 + add r2, r5, r5, lsr #31 + mov r5, r3 + strb r4, [sp, #0x1c] + movs sl, r2, asr #1 + beq _02326304 + mov r0, r6 + bl GetMoveType + mov r4, r0 + ldrh r0, [r6, #4] + bl GetMoveCategory + mov sb, r0 + mov r1, r5 + mov r0, r6 + bl GetDamageSourceWrapper + add r3, sp, #0x1c + stmia sp, {r3, r4, sb} + str r0, [sp, #0xc] + mov r5, #0 + str r5, [sp, #0x10] + mov r3, #1 + str r3, [sp, #0x14] + mov r1, r7 + mov r2, sl + mov r0, r8 + str r5, [sp, #0x18] + bl CalcDamageFixedWrapper + ldrb r0, [sp, #0x1c] + cmp r0, #0 + moveq r0, #1 + movne r0, r5 + strb r0, [sp, #0x1c] + b _0232630C +_02326304: + ldr r2, _02326318 ; =0x00000EC9 + bl LogMessageByIdWithPopupCheckUserTarget +_0232630C: + ldrb r0, [sp, #0x1c] + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +#ifdef JAPAN +_02326318: .word 0x00000C0B +#else +_02326318: .word 0x00000EC9 +#endif + arm_func_end DoMoveSuperFang + + arm_func_start DoMovePainSplit +DoMovePainSplit: ; 0x0232631C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + ldr r4, [r6, #0xb4] + ldr r0, [r5, #0xb4] + ldrsh r3, [r4, #0x10] + ldrsh r2, [r0, #0x10] + ldr r1, _02326400 ; =0x000003E7 + add r2, r3, r2 + add r2, r2, r2, lsr #31 + mov r2, r2, lsl #0xf + mov r2, r2, asr #0x10 + strh r2, [r4, #0x10] + strh r2, [r0, #0x10] + ldrsh r3, [r4, #0x12] + ldrsh r2, [r4, #0x16] + add r3, r3, r2 + cmp r3, r1 + ldrsh r2, [r4, #0x10] + movle r1, r3 + cmp r2, r1 + ble _02326384 + ldr r1, _02326400 ; =0x000003E7 + cmp r3, r1 + movgt r3, r1 + strh r3, [r4, #0x10] +_02326384: + ldrsh r2, [r0, #0x12] + ldrsh r1, [r0, #0x16] + ldr r3, _02326400 ; =0x000003E7 + add r2, r2, r1 + cmp r2, r3 + ldrsh r1, [r0, #0x10] + movle r3, r2 + cmp r1, r3 + ble _023263B8 + ldr r1, _02326400 ; =0x000003E7 + cmp r2, r1 + movgt r2, r1 + strh r2, [r0, #0x10] +_023263B8: + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + mov r1, r5 + mov r0, #1 + mov r2, #0 + bl SubstitutePlaceholderStringTags +#ifdef JAPAN + ldrb r0, [r4, #0x107] +#else + ldrb r0, [r4, #0x108] +#endif + ldr r2, _02326404 ; =0x00000ECA + mov r1, r5 + cmp r0, #1 + movlo r0, #1 +#ifdef JAPAN + strlob r0, [r4, #0x107] +#else + strlob r0, [r4, #0x108] +#endif + mov r0, r6 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02326400: .word 0x000003E7 +#ifdef JAPAN +_02326404: .word 0x00000C0C +#else +_02326404: .word 0x00000ECA +#endif + arm_func_end DoMovePainSplit + + arm_func_start DoMoveTorment +DoMoveTorment: ; 0x02326408 +#ifdef JAPAN +#define DO_MOVE_TORMENT_OFFSET -4 +#else +#define DO_MOVE_TORMENT_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + mov sb, r1 + ldr r8, [sb, #0xb4] + mov r7, #0 + mov sl, r0 + mov r6, r7 + add r5, r8, #0x124 + DO_MOVE_TORMENT_OFFSET + mov fp, #1 +_0232642C: + ldrb r0, [r5, r6, lsl #3] + mov r4, r6, lsl #3 + tst r0, #1 + movne r0, fp + moveq r0, #0 + tst r0, #0xff + beq _023264A0 + ldrb r0, [r5, r4] + tst r0, #0x20 + bne _02326494 + tst r0, #0x10 + beq _023264A0 + bl GetMessageLogPreprocessorArgs + mov r1, #0 + add r2, r5, r4 + mov r3, r1 + bl FormatMoveStringMore + ldr r2, _02326548 ; =0x00000ECB + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + ldrb r0, [r5, r4] + mov r7, #1 + orr r0, r0, #0x20 + strb r0, [r5, r4] + b _023264A0 +_02326494: + tst r0, #0x10 + biceq r0, r0, #0x20 + streqb r0, [r5, r4] +_023264A0: + add r6, r6, #1 + cmp r6, #4 + blt _0232642C + ldrb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET] + tst r0, #0x20 + bne _02326504 + tst r0, #0x10 + beq _02326510 + add r0, sp, #0 + mov r1, #0x160 + bl InitMove + ldrb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET] + mov r7, #1 + orr r0, r0, #0x20 + strb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET] + bl GetMessageLogPreprocessorArgs + mov r1, #0 + add r2, sp, #0 + mov r3, r1 + bl FormatMoveStringMore + ldr r2, _02326548 ; =0x00000ECB + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + b _02326510 +_02326504: + tst r0, #0x10 + biceq r0, r0, #0x20 + streqb r0, [r8, #0x144 + DO_MOVE_TORMENT_OFFSET] +_02326510: + cmp r7, #0 + beq _0232652C + ldrb r0, [r8, #0xd2] + cmp r0, #1 + moveq r0, #0 + streqb r0, [r8, #0xd2] + b _0232653C +_0232652C: + ldr r2, _0232654C ; =0x00000ECC + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_0232653C: + mov r0, r7 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +_02326548: .word 0x00000C0D +_0232654C: .word 0x00000C0E +#else +_02326548: .word 0x00000ECB +_0232654C: .word 0x00000ECC +#endif + arm_func_end DoMoveTorment diff --git a/asm/overlay_29_02326568.s b/asm/overlay_29_02326568.s new file mode 100644 index 00000000..b6bab778 --- /dev/null +++ b/asm/overlay_29_02326568.s @@ -0,0 +1,283 @@ + .include "asm/macros.inc" + .include "overlay_29_02326568.inc" + + .text + + arm_func_start DoMoveSwagger +DoMoveSwagger: ; 0x02326568 + stmdb sp!, {r3, r4, r5, lr} + mov r2, #1 + mov r3, #0 + mov r5, r0 + mov r4, r1 + bl TryInflictConfusedStatus + ldr r1, _023265A0 ; =ATK_STAT_IDX + mov r0, r5 + ldr r2, [r1] + mov r1, r4 + mov r3, #2 + bl BoostOffensiveStat + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023265A0: .word ATK_STAT_IDX + arm_func_end DoMoveSwagger + + arm_func_start DoMoveSnore +DoMoveSnore: ; 0x023265A4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + mov r4, #0 + bl IsMonsterSleeping + cmp r0, #0 + beq _02326624 + mov r0, r8 + mov r1, r7 + mov r2, r6 + mov r3, #0x100 + str r5, [sp] + bl DealDamage + cmp r0, #0 + beq _02326634 + ldr r1, _02326640 ; =SNORE_CRINGE_CHANCE + mov r0, r8 + ldrsh r2, [r1] + mov r1, r7 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02326634 + mov r2, #0 + mov r0, r8 + mov r1, r7 + mov r3, r2 + bl TryInflictCringeStatus + b _02326634 +_02326624: + ldr r2, _02326644 ; =0x00000ECD + mov r0, r8 + mov r1, r7 + bl LogMessageByIdWithPopupCheckUserTarget +_02326634: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02326640: .word SNORE_CRINGE_CHANCE +#ifdef JAPAN +_02326644: .word 0x00000C0F +#else +_02326644: .word 0x00000ECD +#endif + arm_func_end DoMoveSnore + + arm_func_start DoMoveScreech +DoMoveScreech: ; 0x02326648 + stmdb sp!, {r3, lr} + ldr r2, _0232666C ; =ATK_STAT_IDX + mov ip, #1 + ldr r2, [r2] + mov r3, #0x40 + str ip, [sp] + bl ApplyDefensiveStatMultiplier + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0232666C: .word ATK_STAT_IDX + arm_func_end DoMoveScreech + + arm_func_start DoMoveDamageCringe30 +DoMoveDamageCringe30: ; 0x02326670 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023266CC + ldr r1, _023266D8 ; =ROCK_SLIDE_CRINGE_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _023266CC + mov r2, #0 + mov r0, r6 + mov r1, r5 + mov r3, r2 + bl TryInflictCringeStatus +_023266CC: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_023266D8: .word ROCK_SLIDE_CRINGE_CHANCE + arm_func_end DoMoveDamageCringe30 + + arm_func_start DoMoveWeatherBall +DoMoveWeatherBall: ; 0x023266DC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #8 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + bl GetApparentWeather + mov r4, r0 + mov r0, r8 + mov r1, r7 + bl EndFrozenStatus + ldr ip, _02326748 ; =WEATHER_BALL_DAMAGE_MULT_TABLE + ldr r2, _0232674C ; =WEATHER_BALL_TYPE_TABLE + ldr ip, [ip, r4, lsl #2] + ldrb r2, [r2, r4] + str ip, [sp] + mov r0, r8 + mov r1, r7 + mov r3, r6 + str r5, [sp, #4] + bl DealDamageWithType + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02326748: .word WEATHER_BALL_DAMAGE_MULT_TABLE +_0232674C: .word WEATHER_BALL_TYPE_TABLE + arm_func_end DoMoveWeatherBall + + arm_func_start DoMoveWhirlpool +DoMoveWhirlpool: ; 0x02326750 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r5, r1 + ldr r1, [r5, #0xb4] + mov r6, r0 + ldrb r0, [r1, #0xd2] + mov r1, r5 + mov r4, #0 + cmp r0, #9 + moveq ip, #0x200 + movne ip, #0x100 + str r3, [sp] + mov r0, r6 + mov r3, ip + bl DealDamage + cmp r0, #0 + beq _023267C8 + ldr r1, _023267D4 ; =WHIRLPOOL_CONSTRICTION_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _023267C8 + mov r0, r6 + mov r1, r5 + mov r2, #0x3b + mov r3, #0 + bl TryInflictConstrictionStatus +_023267C8: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_023267D4: .word WHIRLPOOL_CONSTRICTION_CHANCE + arm_func_end DoMoveWhirlpool + + arm_func_start DoMoveFakeTears +DoMoveFakeTears: ; 0x023267D8 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr r2, _02326808 ; =SPATK_STAT_IDX + mov ip, #1 + ldr r2, [r2] + str ip, [sp] + mov r3, #2 + str ip, [sp, #4] + bl LowerDefensiveStat + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02326808: .word SPATK_STAT_IDX + arm_func_end DoMoveFakeTears + + arm_func_start DoMoveSpite +DoMoveSpite: ; 0x0232680C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r5, r1 + ldr r1, [r5, #0xb4] + mov r4, #0 +#ifdef JAPAN + add lr, r1, #0x120 +#else + add lr, r1, #0x124 +#endif + mov ip, #1 + mov r6, r0 + mov r7, r4 + mov r3, r4 + mov r1, r4 + mov r0, ip +_02326838: + ldrb r2, [lr, r7, lsl #3] + add r8, lr, r7, lsl #3 + tst r2, #1 + movne r2, ip + moveq r2, r3 + tst r2, #0xff + beq _02326864 + ldrb r2, [r8] + tst r2, #0x10 + movne r4, r0 + strneb r1, [r8, #6] +_02326864: + add r7, r7, #1 + cmp r7, #4 + blt _02326838 + mov r1, r5 + mov r0, #1 + mov r2, #0 + bl SubstitutePlaceholderStringTags + cmp r4, #0 + beq _0232689C +#ifdef JAPAN + mov r0, r6 + mov r1, r5 + mov r2, #0xc10 +#else + ldr r2, _023268B4 ; =0x00000ECE + mov r0, r6 + mov r1, r5 +#endif + bl LogMessageByIdWithPopupCheckUserTarget + b _023268AC +_0232689C: + ldr r2, _023268B8 ; =0x00000ECF + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget +_023268AC: + mov r0, r4 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +#ifdef JAPAN +_023268B8: .word 0x00000C11 +#else +_023268B4: .word 0x00000ECE +_023268B8: .word 0x00000ECF +#endif + arm_func_end DoMoveSpite diff --git a/asm/overlay_29_023268CC.s b/asm/overlay_29_023268CC.s new file mode 100644 index 00000000..53fdcf3a --- /dev/null +++ b/asm/overlay_29_023268CC.s @@ -0,0 +1,332 @@ + .include "asm/macros.inc" + .include "overlay_29_023268CC.inc" + + .text + + arm_func_start DoMoveSmokescreen +DoMoveSmokescreen: ; 0x023268CC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + ldr r1, _02326904 ; =SMOKESCREEN_TURN_RANGE + mov r0, r4 + mov r2, #1 + bl CalcStatusDuration + mov r2, r0 + mov r0, r5 + mov r1, r4 + mov r3, #0 + bl TryInflictWhifferStatus + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02326904: .word SMOKESCREEN_TURN_RANGE + arm_func_end DoMoveSmokescreen + + arm_func_start DoMoveMirrorMove +DoMoveMirrorMove: ; 0x02326908 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl EndFrozenStatus + mov r0, r5 + mov r1, r4 + bl TryInflictMirrorMoveStatus + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DoMoveMirrorMove + + arm_func_start DoMoveOverheat +DoMoveOverheat: ; 0x0232692C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov sb, r0 + mov r8, r1 + mov r7, r2 + ldr r5, [sb, #0xb4] + mov r6, r3 + mov r4, #0 + bl EndFrozenStatus + mov r0, sb + mov r1, r8 + mov r2, r7 + mov r3, #0x100 + str r6, [sp] + bl DealDamage + cmp r0, #0 + beq _02326988 + mov r1, r4 + mov r0, sb + mov r4, #1 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + movne r0, r4 +#ifdef JAPAN + strneb r0, [r5, #0x15b] +#else + strneb r0, [r5, #0x15f] +#endif +_02326988: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end DoMoveOverheat + + arm_func_start DoMoveAuroraBeam +DoMoveAuroraBeam: ; 0x02326990 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023269F8 + ldr r1, _02326A04 ; =AURORA_BEAM_LOWER_ATTACK_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _023269F8 + ldr r0, _02326A08 ; =ATK_STAT_IDX + mov ip, #0 + ldr r2, [r0] + mov r0, r6 + mov r1, r5 + mov r3, #0x80 + str ip, [sp] + bl ApplyOffensiveStatMultiplier +_023269F8: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02326A04: .word AURORA_BEAM_LOWER_ATTACK_CHANCE +_02326A08: .word ATK_STAT_IDX + arm_func_end DoMoveAuroraBeam + + arm_func_start DoMoveMemento +DoMoveMemento: ; 0x02326A0C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r6, r0 + ldr r2, _02326A6C ; =ATK_STAT_IDX + ldr r4, [r6, #0xb4] + mov ip, #1 + strh ip, [r4, #0x10] + ldr r2, [r2] + mov r3, #0x40 + mov r5, r1 + str ip, [sp] + bl ApplyOffensiveStatMultiplier + ldr r0, _02326A70 ; =SPATK_STAT_IDX + mov ip, #1 + ldr r2, [r0] + mov r0, r6 + mov r1, r5 + mov r3, #0x40 + str ip, [sp] + bl ApplyOffensiveStatMultiplier + mov r0, #1 +#ifdef JAPAN + strb r0, [r4, #0x15a] +#else + strb r0, [r4, #0x15e] +#endif + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02326A6C: .word ATK_STAT_IDX +_02326A70: .word SPATK_STAT_IDX + arm_func_end DoMoveMemento + + arm_func_start DoMoveOctazooka +DoMoveOctazooka: ; 0x02326A74 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02326AD4 + ldr r1, _02326AE0 ; =OCTAZOOKA_LOWER_ACCURACY_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02326AD4 + ldr r1, _02326AE4 ; =ATK_STAT_IDX + mov r0, r6 + ldr r2, [r1] + mov r1, r5 + mov r3, #0 + bl LowerHitChanceStat +_02326AD4: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02326AE0: .word OCTAZOOKA_LOWER_ACCURACY_CHANCE +_02326AE4: .word ATK_STAT_IDX + arm_func_end DoMoveOctazooka + + arm_func_start DoMoveFlatter +DoMoveFlatter: ; 0x02326AE8 + stmdb sp!, {r3, r4, r5, lr} + mov r2, #1 + mov r3, #0 + mov r5, r0 + mov r4, r1 + bl TryInflictConfusedStatus + ldr r1, _02326B20 ; =SPATK_STAT_IDX + mov r0, r5 + ldr r2, [r1] + mov r1, r4 + mov r3, #1 + bl BoostOffensiveStat + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02326B20: .word SPATK_STAT_IDX + arm_func_end DoMoveFlatter + + arm_func_start DoMoveWillOWisp +DoMoveWillOWisp: ; 0x02326B24 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r6, r0 + mov r5, r1 + bl GetFlashFireStatus + movs r4, r0 + beq _02326B94 + ldr r3, [r5, #0xb4] +#ifdef JAPAN + ldrb r0, [r3, #0x158] +#else + ldrb r0, [r3, #0x15c] +#endif + cmp r0, #0 + bne _02326BAC + mov r0, #1 + mov r1, r5 + mov r2, #0 +#ifdef JAPAN + strb r0, [r3, #0x158] +#else + strb r0, [r3, #0x15c] +#endif + bl SubstitutePlaceholderStringTags + cmp r4, #1 + bne _02326B80 + ldr r2, _02326BB8 ; =0x00000CDD + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _02326BAC +_02326B80: + ldr r2, _02326BBC ; =0x00000CDC + mov r0, r6 + mov r1, r5 + bl LogMessageByIdWithPopupCheckUserTarget + b _02326BAC +_02326B94: + mov r2, #0 + mov r0, r6 + mov r1, r5 + mov r3, #1 + str r2, [sp] + bl TryInflictBurnStatus +_02326BAC: + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +_02326BB8: .word 0x00000A1D +_02326BBC: .word 0x00000A1C +#else +_02326BB8: .word 0x00000CDD +_02326BBC: .word 0x00000CDC +#endif + arm_func_end DoMoveWillOWisp + + arm_func_start DoMoveReturn +DoMoveReturn: ; 0x02326BC0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x20 + mov sb, r0 + mov r4, r3 + mov r8, r1 + mov r7, r2 + ldr lr, [sb, #0xb4] + mov r6, #1 + mov ip, #0 + ldr r3, _02326C98 ; =ov10_022C4C0C + ldr r0, _02326C9C ; =0x000003E7 + b _02326C18 +_02326BF0: + mov r5, ip, lsl #2 + ldrsh r2, [r3, r5] + cmp r2, #0 + blt _02326C20 + ldrsh r1, [lr, #0xe] + cmp r1, r2 + ldrlt r0, _02326CA0 ; =ov10_022C4C0E + ldrltsh r6, [r0, r5] + blt _02326C20 + add ip, ip, #1 +_02326C18: + cmp ip, r0 + blt _02326BF0 +_02326C20: + mov r0, r7 + bl GetMoveType + mov r5, r0 + ldrh r0, [r7, #4] + bl GetMoveCategory + mov r1, r4 + mov r4, r0 + mov r0, r7 + bl GetDamageSourceWrapper + add r3, sp, #0x1c + stmia sp, {r3, r5} + str r4, [sp, #8] + mov r2, r6 + str r0, [sp, #0xc] + mov r6, #0 + str r6, [sp, #0x10] + mov r3, #1 + str r3, [sp, #0x14] + mov r1, r8 + mov r0, sb + str r6, [sp, #0x18] + bl CalcDamageFixedWrapper + ldrb r0, [sp, #0x1c] + cmp r0, #0 + moveq r0, #1 + movne r0, r6 + strb r0, [sp, #0x1c] + and r0, r0, #0xff + add sp, sp, #0x20 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02326C98: .word ov10_022C4C0C +_02326C9C: .word 0x000003E7 +_02326CA0: .word ov10_022C4C0E + arm_func_end DoMoveReturn + + arm_func_start DoMoveGrudge +DoMoveGrudge: ; 0x02326CA4 + ldr ip, _02326CB0 ; =TryInflictGrudgeStatus + mov r2, #1 + bx ip + .align 2, 0 +_02326CB0: .word TryInflictGrudgeStatus + arm_func_end DoMoveGrudge diff --git a/asm/overlay_29_02326CC8.s b/asm/overlay_29_02326CC8.s new file mode 100644 index 00000000..1d7955cf --- /dev/null +++ b/asm/overlay_29_02326CC8.s @@ -0,0 +1,145 @@ + .include "asm/macros.inc" + .include "overlay_29_02326CC8.inc" + + .text + + arm_func_start DoMoveDamageBurn10FlameWheel +DoMoveDamageBurn10FlameWheel: ; 0x02326CC8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + mov r4, #0 + bl EndFrozenStatus + mov r0, r8 + mov r1, r7 + mov r2, r6 + mov r3, #0x100 + str r5, [sp] + bl DealDamage + cmp r0, #0 + beq _02326D40 + ldr r1, _02326D4C ; =FLAME_WHEEL_BURN_CHANCE + mov r0, r8 + ldrsh r2, [r1] + mov r1, r7 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02326D40 + mov r2, #0 + mov r0, r8 + mov r1, r7 + mov r3, r2 + str r2, [sp] + bl TryInflictBurnStatus +_02326D40: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02326D4C: .word FLAME_WHEEL_BURN_CHANCE + arm_func_end DoMoveDamageBurn10FlameWheel + + arm_func_start DoMoveDamageBurn10 +DoMoveDamageBurn10: ; 0x02326D50 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + mov r4, #0 + bl EndFrozenStatus + mov r0, r8 + mov r1, r7 + mov r2, r6 + mov r3, #0x100 + str r5, [sp] + bl DealDamage + cmp r0, #0 + beq _02326DC8 + ldr r1, _02326DD4 ; =FLAMETHROWER_BURN_CHANCE + mov r0, r8 + ldrsh r2, [r1] + mov r1, r7 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02326DC8 + mov r2, #0 + mov r0, r8 + mov r1, r7 + mov r3, r2 + str r2, [sp] + bl TryInflictBurnStatus +_02326DC8: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02326DD4: .word FLAMETHROWER_BURN_CHANCE + arm_func_end DoMoveDamageBurn10 + + arm_func_start DoMoveExpose +DoMoveExpose: ; 0x02326DD8 + stmdb sp!, {r3, lr} + ldrh r3, [r2, #4] + ldr r2, _02326E00 ; =0x0000013B + cmp r3, r2 + moveq r2, #0x7a + movne r2, #0x51 + mov r3, #0 + bl TryInflictExposedStatus + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02326E00: .word 0x0000013B + arm_func_end DoMoveExpose + + arm_func_start DoMoveDoubleTeam +DoMoveDoubleTeam: ; 0x02326E04 + stmdb sp!, {r3, lr} + ldr r2, _02326E1C ; =SPATK_STAT_IDX + ldr r2, [r2] + bl BoostHitChanceStat + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02326E1C: .word SPATK_STAT_IDX + arm_func_end DoMoveDoubleTeam + + arm_func_start DoMoveGust +DoMoveGust: ; 0x02326E20 + stmdb sp!, {r3, lr} + ldr ip, [r1, #0xb4] + mov lr, #1 + ldrb ip, [ip, #0xd2] + add ip, ip, #0xf9 + and ip, ip, #0xff + cmp ip, #1 + movls lr, #2 + str r3, [sp] + mov r3, lr, lsl #8 + bl DealDamage + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end DoMoveGust + + arm_func_start DoMoveBoostDefense1 +DoMoveBoostDefense1: ; 0x02326E60 + stmdb sp!, {r3, lr} + ldr r2, _02326E7C ; =ATK_STAT_IDX + mov r3, #1 + ldr r2, [r2] + bl BoostDefensiveStat + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02326E7C: .word ATK_STAT_IDX + arm_func_end DoMoveBoostDefense1 diff --git a/asm/overlay_29_02326E98.s b/asm/overlay_29_02326E98.s new file mode 100644 index 00000000..0975d274 --- /dev/null +++ b/asm/overlay_29_02326E98.s @@ -0,0 +1,692 @@ + .include "asm/macros.inc" + .include "overlay_29_02326E98.inc" + + .text + + arm_func_start DoMoveBoostAttack1 +DoMoveBoostAttack1: ; 0x02326E98 + stmdb sp!, {r3, lr} + ldr r2, _02326EB4 ; =ATK_STAT_IDX + mov r3, #1 + ldr r2, [r2] + bl BoostOffensiveStat + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02326EB4: .word ATK_STAT_IDX + arm_func_end DoMoveBoostAttack1 + + arm_func_start DoMoveRazorWind +DoMoveRazorWind: ; 0x02326EB8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r5, r2 + mov r6, r1 + mov r1, r5 + mov r7, r0 + mov r4, r3 + bl IsChargingTwoTurnMove + cmp r0, #0 + beq _02326F14 + ldr r1, _02326F40 ; =RAZOR_WIND_DAMAGE_MULTIPLIER + mov r0, r7 + ldr r3, [r1] + mov r1, r6 + mov r2, r5 + str r4, [sp] + bl DealDamage + cmp r0, #0 + movne r1, #1 + moveq r1, #0 + mov r0, r7 + and r4, r1, #0xff + bl EndTwoTurnMove + b _02326F38 +_02326F14: + ldr r0, _02326F44 ; =0x00000CCD + bl StringFromId + str r0, [sp] + mov r0, r7 + mov r1, r7 + mov r3, r5 + mov r2, #4 + bl BeginChargedMove + mov r4, #1 +_02326F38: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02326F40: .word RAZOR_WIND_DAMAGE_MULTIPLIER +#ifdef JAPAN +_02326F44: .word 0x00000A0D +#else +_02326F44: .word 0x00000CCD +#endif + arm_func_end DoMoveRazorWind + + arm_func_start DoMoveBide +DoMoveBide: ; 0x02326F48 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + mov r6, r0 + ldr r0, _02326F88 ; =0x00000CCE + mov r5, r1 + mov r4, r2 + bl StringFromId + str r0, [sp] + mov r0, r6 + mov r1, r5 + mov r3, r4 + mov r2, #1 + bl BeginChargedMove + mov r0, #1 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +_02326F88: .word 0x00000A0E +#else +_02326F88: .word 0x00000CCE +#endif + arm_func_end DoMoveBide + + arm_func_start DoMoveBideUnleash +DoMoveBideUnleash: ; 0x02326F8C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x20 + mov r3, #0 + mov r6, r0 + strb r3, [sp, #0x1c] + ldr r3, [r6, #0xb4] + ldr r0, _0232702C ; =0x000003E7 + ldr r3, [r3, #0xb8] + mov r8, r2 + mov r4, r3, lsl #1 + cmp r0, r3, lsl #1 + movlt r4, r0 + mov r0, r8 + mov r5, r1 + bl GetMoveType + mov r7, r0 + ldrh r0, [r8, #4] + bl GetMoveCategory + add r2, sp, #0x1c + stmia sp, {r2, r7} + str r0, [sp, #8] + ldr r1, _02327030 ; =0x0000023E + mov ip, #0 + str r1, [sp, #0xc] + str ip, [sp, #0x10] + mov r3, #1 + str r3, [sp, #0x14] + mov r0, r6 + mov r1, r5 + mov r2, r4 + str ip, [sp, #0x18] + bl CalcDamageFixedWrapper + ldrb r0, [sp, #0x1c] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + strb r0, [sp, #0x1c] + and r0, r0, #0xff + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0232702C: .word 0x000003E7 +_02327030: .word 0x0000023E + arm_func_end DoMoveBideUnleash + + arm_func_start DoMoveCrunch +DoMoveCrunch: ; 0x02327034 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023270A0 + ldr r1, _023270AC ; =CRUNCH_LOWER_DEFENSE_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _023270A0 + ldr r0, _023270B0 ; =ATK_STAT_IDX + mov r3, r4 + ldr r2, [r0] + mov r0, r6 + mov r1, r5 + str r3, [sp] + mov ip, #0 + str ip, [sp, #4] + bl LowerDefensiveStat +_023270A0: + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_023270AC: .word CRUNCH_LOWER_DEFENSE_CHANCE +_023270B0: .word ATK_STAT_IDX + arm_func_end DoMoveCrunch + + arm_func_start DoMoveDamageCringe20 +DoMoveDamageCringe20: ; 0x023270B4 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02327110 + ldr r1, _0232711C ; =BITE_CRINGE_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02327110 + mov r2, #0 + mov r0, r6 + mov r1, r5 + mov r3, r2 + bl TryInflictCringeStatus +_02327110: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_0232711C: .word BITE_CRINGE_CHANCE + arm_func_end DoMoveDamageCringe20 + + arm_func_start DoMoveDamageParalyze20 +DoMoveDamageParalyze20: ; 0x02327120 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _0232717C + ldr r1, _02327188 ; =THUNDER_PARALYZE_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _0232717C + mov r2, #0 + mov r0, r6 + mov r1, r5 + mov r3, r2 + bl TryInflictParalysisStatus +_0232717C: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02327188: .word THUNDER_PARALYZE_CHANCE + arm_func_end DoMoveDamageParalyze20 + + arm_func_start DoMoveEndeavor +DoMoveEndeavor: ; 0x0232718C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x20 + mov r4, #0 + mov sb, r0 + strb r4, [sp, #0x1c] + mov r8, r1 + ldr r1, [r8, #0xb4] + ldr r0, [sb, #0xb4] + ldrsh r1, [r1, #0x10] + ldrsh r0, [r0, #0x10] + mov r7, r2 + mov r6, r3 + subs r5, r1, r0 + mov r0, r8 + movmi r5, r4 + bl MirrorMoveIsActive + cmp r0, #0 + mov r0, r7 + movne r8, sb + bl GetMoveType + mov r4, r0 + ldrh r0, [r7, #4] + bl GetMoveCategory + mov r1, r6 + mov r6, r0 + mov r0, r7 + bl GetDamageSourceWrapper + mov r2, r5 + add r5, sp, #0x1c + str r5, [sp] + stmib sp, {r4, r6} + str r0, [sp, #0xc] + mov r3, #0 + str r3, [sp, #0x10] + mov r4, #1 + str r4, [sp, #0x14] + mov r1, r8 + mov r0, sb + str r3, [sp, #0x18] + bl CalcDamageFixedWrapper + ldrb r0, [sp, #0x1c] + cmp r0, #0 + moveq r0, r4 + movne r0, #0 + strb r0, [sp, #0x1c] + and r0, r0, #0xff + add sp, sp, #0x20 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end DoMoveEndeavor + + arm_func_start DoMoveFacade +DoMoveFacade: ; 0x0232724C + stmdb sp!, {r3, lr} + ldr ip, [r0, #0xb4] + mov lr, #0x100 + ldrb ip, [ip, #0xbf] + cmp ip, #0 + ldrne ip, _02327288 ; =FACADE_DAMAGE_MULTIPLIER + str r3, [sp] + ldrne lr, [ip] + mov r3, lr + bl DealDamage + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + .align 2, 0 +_02327288: .word FACADE_DAMAGE_MULTIPLIER + arm_func_end DoMoveFacade + + arm_func_start DoMoveDamageLowerSpeed20 +DoMoveDamageLowerSpeed20: ; 0x0232728C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023272E8 + ldr r1, _023272F4 ; =CONSTRICT_LOWER_SPEED_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _023272E8 + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0 + bl LowerSpeed +_023272E8: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_023272F4: .word CONSTRICT_LOWER_SPEED_CHANCE + arm_func_end DoMoveDamageLowerSpeed20 + + arm_func_start DoMoveBrickBreak +DoMoveBrickBreak: ; 0x023272F8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + ldr r5, [r6, #0xb4] + mov r7, r0 + str r3, [sp] + mov r3, #0x100 + mov r4, #0 + bl DealDamage + cmp r0, #0 + movne r0, #1 + moveq r0, r4 + orr r0, r4, r0 + ands r4, r0, #0xff + beq _0232735C + ldrb r0, [r5, #0xd5] + cmp r0, #1 + cmpne r0, #3 + bne _0232735C + ldr r2, _02327364 ; =0x00000ED2 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r7 + mov r1, r6 + bl EndReflectClassStatus +_0232735C: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +#ifdef JAPAN +_02327364: .word 0x00000C14 +#else +_02327364: .word 0x00000ED2 +#endif + arm_func_end DoMoveBrickBreak + + arm_func_start DoMoveDamageLowerSpeed100 +DoMoveDamageLowerSpeed100: ; 0x02327368 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023273C0 + mov r2, r4 + mov r0, r6 + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _023273C0 + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0 + bl LowerSpeed +_023273C0: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + arm_func_end DoMoveDamageLowerSpeed100 + + arm_func_start DoMoveFocusPunch +DoMoveFocusPunch: ; 0x023273CC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r5, r2 + mov r6, r1 + mov r1, r5 + mov r7, r0 + mov r4, r3 + bl IsChargingTwoTurnMove + cmp r0, #0 + beq _02327428 + ldr r1, _02327454 ; =FOCUS_PUNCH_DAMAGE_MULTIPLIER + mov r0, r7 + ldr r3, [r1] + mov r1, r6 + mov r2, r5 + str r4, [sp] + bl DealDamage + cmp r0, #0 + movne r1, #1 + moveq r1, #0 + mov r0, r7 + and r4, r1, #0xff + bl EndTwoTurnMove + b _0232744C +_02327428: +#ifdef JAPAN + mov r0, #0xa10 +#else + mov r0, #0xcd0 +#endif + bl StringFromId + str r0, [sp] + mov r0, r7 + mov r1, r7 + mov r3, r5 + mov r2, #5 + bl BeginChargedMove + mov r4, #1 +_0232744C: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02327454: .word FOCUS_PUNCH_DAMAGE_MULTIPLIER + arm_func_end DoMoveFocusPunch + + arm_func_start DoMoveDamageDrain +DoMoveDamageDrain: ; 0x02327458 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov sb, r0 + mov r8, r1 + mov r7, r2 + mov r5, r3 + cmp sb, r8 + mov r4, #0 + beq _023274B8 + cmp sb, #0 + moveq r0, r4 + beq _02327498 + ldr r0, [sb] + cmp r0, #1 + moveq r0, #1 + movne r0, r4 + and r0, r0, #0xff +_02327498: + cmp r0, #0 + beq _023274B8 + mov r0, sb + mov r1, #0x53 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r6, #0 + bne _023274C8 +_023274B8: + mov r0, r8 + mov r1, #0x3a + bl AbilityIsActiveVeneer + mov r6, r0 +_023274C8: + mov r0, sb + mov r1, r8 + mov r2, r7 + mov r3, #0x100 + str r5, [sp] + bl DealDamage + movs r5, r0 + movne r4, #1 + cmp r4, #0 + beq _02327590 + mov r0, sb + mov r1, #0 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + beq _02327590 + ldr r1, [sb, #0xb4] + add r0, r5, r5, lsr #31 + mov r5, r0, asr #1 +#ifdef JAPAN + ldrb r0, [r1, #0x107] +#else + ldrb r0, [r1, #0x108] +#endif + mov r4, #1 + cmp r5, #1 + movlt r5, r4 + cmp r0, #1 + movlo r0, #1 +#ifdef JAPAN + strlob r0, [r1, #0x107] +#else + strlob r0, [r1, #0x108] +#endif + cmp r6, #0 + beq _0232754C + mov r2, #0xd + mov r0, sb + mov r1, r5 + add r3, r2, #0x22c + bl ApplyDamageAndEffectsWrapper + b _02327590 +_0232754C: + ldr r1, [sb, #0xb4] + ldrb r0, [r1, #6] + cmp r0, #0 + movne r0, #0 + bne _0232756C +#ifdef JAPAN + add r0, r1, #0x224 +#else + add r0, r1, #0x228 +#endif + mov r1, #0x57 + bl ExclusiveItemEffectFlagTest +_0232756C: + cmp r0, #0 + movne r5, r5, lsl #1 + mov r6, #1 + mov r0, sb + mov r1, sb + mov r2, r5 + mov r3, #0 + str r6, [sp] + bl TryIncreaseHp +_02327590: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end DoMoveDamageDrain + + arm_func_start DoMoveReversal +DoMoveReversal: ; 0x02327598 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + ldr ip, [r0, #0xb4] + ldr r6, _02327644 ; =0x000003E7 + ldrsh r5, [ip, #0x12] + ldrsh r4, [ip, #0x16] + ldrsh ip, [ip, #0x10] + add lr, r5, r4 + cmp lr, r6 + movle r6, lr + mov r4, r6, asr #1 + add r4, r6, r4, lsr #30 + cmp ip, r4, asr #2 + movle r5, #0 + ble _0232761C + ldr r4, _02327644 ; =0x000003E7 + cmp lr, r4 + movle r4, lr + mov r5, r4, lsl #1 + mov r4, r5, asr #1 + add r4, r5, r4, lsr #30 + cmp ip, r4, asr #2 + movle r5, #1 + ble _0232761C + ldr r4, _02327644 ; =0x000003E7 + cmp lr, r4 + movgt lr, r4 + add r4, lr, lr, lsl #1 + mov lr, r4, asr #1 + add lr, r4, lr, lsr #30 + cmp ip, lr, asr #2 + movle r5, #2 + movgt r5, #3 +_0232761C: + ldr r4, _02327648 ; =REVERSAL_DAMAGE_MULT_TABLE + str r3, [sp] + ldr r3, [r4, r5, lsl #2] + bl DealDamage + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02327644: .word 0x000003E7 +_02327648: .word REVERSAL_DAMAGE_MULT_TABLE + arm_func_end DoMoveReversal + + arm_func_start DoMoveSmellingSalt +DoMoveSmellingSalt: ; 0x0232764C + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + ldr ip, [r4, #0xb4] + mov r5, r0 + ldrb ip, [ip, #0xbf] + cmp ip, #4 + str r3, [sp] + bne _02327694 + mov r3, #0x200 + bl DealDamage + cmp r0, #0 + movne r2, #1 + moveq r2, #0 + mov r1, r4 + mov r0, r5 + and r4, r2, #0xff + bl EndBurnClassStatus + b _023276AC +_02327694: + mov r3, #0x100 + bl DealDamage + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r4, r0, #0xff +_023276AC: + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DoMoveSmellingSalt + + arm_func_start DoMoveMetalSound +DoMoveMetalSound: ; 0x023276B4 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr r2, _023276E4 ; =SPATK_STAT_IDX + mov ip, #1 + ldr r2, [r2] + str ip, [sp] + mov r3, #3 + str ip, [sp, #4] + bl LowerDefensiveStat + mov r0, #1 + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_023276E4: .word SPATK_STAT_IDX + arm_func_end DoMoveMetalSound + + arm_func_start DoMoveTickle +DoMoveTickle: ; 0x023276E8 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + ldr r2, _02327740 ; =SPATK_STAT_IDX + mov r3, #1 + ldr r2, [r2, #4] + str r3, [sp] + mov r5, r0 + mov r4, r1 + str r2, [sp, #8] + str r3, [sp, #4] + bl LowerOffensiveStat + add r0, sp, #8 + mov r3, #1 + ldr r2, [r0] + str r3, [sp] + mov r0, r5 + mov r1, r4 + str r3, [sp, #4] + bl LowerDefensiveStat + mov r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02327740: .word SPATK_STAT_IDX + arm_func_end DoMoveTickle diff --git a/asm/overlay_29_0232776C.s b/asm/overlay_29_0232776C.s new file mode 100644 index 00000000..718c3790 --- /dev/null +++ b/asm/overlay_29_0232776C.s @@ -0,0 +1,143 @@ + .include "asm/macros.inc" + .include "overlay_29_0232776C.inc" + + .text + + arm_func_start DoMoveDamageMultihitFatigue +DoMoveDamageMultihitFatigue: ; 0x0232776C + stmdb sp!, {r3, r4, r5, lr} + str r3, [sp] + mov r3, #0x100 + mov r5, r0 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023277AC + mov r1, r4 + mov r0, r5 + mov r4, #1 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + ldrne r0, _023277B4 ; =MULTIHIT_FATIGUE_MOVE_USED + movne r1, r4 + strneb r1, [r0] +_023277AC: + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023277B4: .word MULTIHIT_FATIGUE_MOVE_USED + arm_func_end DoMoveDamageMultihitFatigue + + arm_func_start DoMoveDamageWeightDependent +DoMoveDamageWeightDependent: ; 0x023277B8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + ldr r1, [r6, #0xb4] + mov r7, r0 + ldrsh r0, [r1, #4] + mov r5, r2 + mov r4, r3 + bl GetWeightMultiplier + mov r3, r0 + mov r0, r7 + mov r1, r6 + mov r2, r5 + str r4, [sp] + bl DealDamage + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end DoMoveDamageWeightDependent + + arm_func_start DoMoveDamageBoostAllStats +DoMoveDamageBoostAllStats: ; 0x02327804 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0xc + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023278D4 + ldr r1, _023278E0 ; =SILVER_WIND_BOOST_CHANCE + mov r0, r6 + ldrsh r1, [r1] + mov r4, #1 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + beq _023278D4 + mov r0, r6 + mov r1, r6 + mov r2, #0 + mov r3, r4 + ldr r5, [r6, #0xb4] + bl BoostSpeedOneStage + ldr r1, _023278E4 ; =SPATK_STAT_IDX + mov r0, r6 + ldr r2, [r1, #4] + mov r1, r6 + mov r3, r4 + str r2, [sp, #8] + bl BoostOffensiveStat + ldr r1, _023278E4 ; =SPATK_STAT_IDX + mov r0, r6 + ldr r2, [r1] + mov r1, r6 + mov r3, r4 + str r2, [sp, #4] + bl BoostOffensiveStat + add r2, sp, #8 + ldr r2, [r2] + mov r0, r6 + mov r1, r6 + mov r3, r4 + bl BoostDefensiveStat + add r2, sp, #4 + ldr r2, [r2] + mov r0, r6 + mov r1, r6 + mov r3, r4 + bl BoostDefensiveStat +#ifdef JAPAN + ldrb r0, [r5, #0x107] + cmp r0, #1 + movlo r0, r4 + strlob r0, [r5, #0x107] +#else + ldrb r0, [r5, #0x108] + cmp r0, #1 + movlo r0, r4 + strlob r0, [r5, #0x108] +#endif +_023278D4: + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_023278E0: .word SILVER_WIND_BOOST_CHANCE +_023278E4: .word SPATK_STAT_IDX + arm_func_end DoMoveDamageBoostAllStats + + arm_func_start DoMoveSynthesis +DoMoveSynthesis: ; 0x023278E8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + bl GetApparentWeather + mov ip, #1 + ldr r1, _02327924 ; =SYNTHESIS_HP_RESTORATION_TABLE + mov r0, r0, lsl #1 + ldrsh r2, [r1, r0] + mov r0, r5 + mov r1, r4 + mov r3, #0 + str ip, [sp] + bl TryIncreaseHp + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02327924: .word SYNTHESIS_HP_RESTORATION_TABLE + arm_func_end DoMoveSynthesis diff --git a/asm/overlay_29_02327940.s b/asm/overlay_29_02327940.s new file mode 100644 index 00000000..ae4643e3 --- /dev/null +++ b/asm/overlay_29_02327940.s @@ -0,0 +1,559 @@ + .include "asm/macros.inc" + .include "overlay_29_02327940.inc" + + .text + + arm_func_start DoMoveRapidSpin +DoMoveRapidSpin: ; 0x02327940 + stmdb sp!, {r3, r4, r5, lr} + str r3, [sp] + mov r3, #0x100 + mov r5, r0 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _023279A0 + mov r1, r4 + mov r0, r5 + mov r4, #1 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + beq _023279A0 + ldr r0, [r5, #0xb4] + add r0, r0, #0x100 +#ifdef JAPAN + ldrh r0, [r0, #0x8e] +#else + ldrh r0, [r0, #0x92] +#endif + tst r0, #2 + ldrne r0, _023279A8 ; =RAPID_SPIN_BINDING_REMOVAL + movne r1, #0 + strneb r1, [r0] + ldreq r0, _023279A8 ; =RAPID_SPIN_BINDING_REMOVAL + moveq r1, r4 + streqb r1, [r0] +_023279A0: + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023279A8: .word RAPID_SPIN_BINDING_REMOVAL + arm_func_end DoMoveRapidSpin + + arm_func_start DoMoveSureShot +DoMoveSureShot: ; 0x023279AC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + ldr r1, _023279E0 ; =SURE_SHOT_TURN_RANGE + mov r0, r4 + mov r2, #0 + bl CalcStatusDuration + mov r2, r0 + mov r0, r5 + mov r1, r4 + bl TryInflictSureShotStatus + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_023279E0: .word SURE_SHOT_TURN_RANGE + arm_func_end DoMoveSureShot + + arm_func_start DoMoveCosmicPower +DoMoveCosmicPower: ; 0x023279E4 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _02327A20 ; =ATK_STAT_IDX + mov r3, #1 + ldr r2, [r2] + mov r5, r0 + mov r4, r1 + bl BoostDefensiveStat + ldr r1, _02327A24 ; =SPATK_STAT_IDX + mov r0, r5 + ldr r2, [r1] + mov r1, r4 + mov r3, #1 + bl BoostDefensiveStat + mov r0, #1 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02327A20: .word ATK_STAT_IDX +_02327A24: .word SPATK_STAT_IDX + arm_func_end DoMoveCosmicPower + + arm_func_start DoMoveSkyAttack +DoMoveSkyAttack: ; 0x02327A28 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r6, r2 + mov r7, r1 + mov r1, r6 + mov r8, r0 + mov r5, r3 + mov r4, #0 + bl IsChargingTwoTurnMove + cmp r0, #0 + beq _02327AB8 + ldr r1, _02327AE8 ; =SKY_ATTACK_DAMAGE_MULTIPLIER + mov r0, r8 + ldr r3, [r1] + mov r1, r7 + mov r2, r6 + str r5, [sp] + bl DealDamage + cmp r0, #0 + beq _02327AAC + ldr r1, _02327AEC ; =SKY_ATTACK_CRINGE_CHANCE + mov r0, r8 + ldrsh r2, [r1] + mov r1, r7 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02327AAC + mov r2, #0 + mov r0, r8 + mov r1, r7 + mov r3, r2 + bl TryInflictCringeStatus +_02327AAC: + mov r0, r8 + bl EndTwoTurnMove + b _02327ADC +_02327AB8: + ldr r0, _02327AF0 ; =0x00000CD1 + bl StringFromId + str r0, [sp] + mov r0, r8 + mov r1, r8 + mov r3, r6 + mov r2, #3 + bl BeginChargedMove + mov r4, #1 +_02327ADC: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02327AE8: .word SKY_ATTACK_DAMAGE_MULTIPLIER +_02327AEC: .word SKY_ATTACK_CRINGE_CHANCE +#ifdef JAPAN +_02327AF0: .word 0x00000A11 +#else +_02327AF0: .word 0x00000CD1 +#endif + arm_func_end DoMoveSkyAttack + + arm_func_start DoMoveDamageFreeze15 +DoMoveDamageFreeze15: ; 0x02327AF4 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02327B4C + ldr r1, _02327B58 ; =POWDER_SNOW_FREEZE_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02327B4C + mov r0, r6 + mov r1, r5 + mov r2, #0 + bl TryInflictFrozenStatus +_02327B4C: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02327B58: .word POWDER_SNOW_FREEZE_CHANCE + arm_func_end DoMoveDamageFreeze15 + + arm_func_start DoMoveMeteorMash +DoMoveMeteorMash: ; 0x02327B5C + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 +#ifdef EUROPE + mov r5, r1 +#endif + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02327BCC + ldr r1, _02327BD8 ; =METEOR_MASH_BOOST_ATTACK_CHANCE + mov r0, r6 + ldrsh r2, [r1] +#ifdef EUROPE + mov r1, r5 +#else + mov r1, r6 +#endif + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02327BCC + ldr r0, _02327BDC ; =ATK_STAT_IDX + ldr r5, [r6, #0xb4] + ldr r2, [r0] + mov r0, r6 + mov r1, r6 + mov r3, r4 + bl BoostOffensiveStat +#ifdef JAPAN + ldrb r0, [r5, #0x107] + cmp r0, #1 + movlo r0, r4 + strlob r0, [r5, #0x107] +#else + ldrb r0, [r5, #0x108] + cmp r0, #1 + movlo r0, r4 + strlob r0, [r5, #0x108] +#endif +_02327BCC: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02327BD8: .word METEOR_MASH_BOOST_ATTACK_CHANCE +_02327BDC: .word ATK_STAT_IDX + arm_func_end DoMoveMeteorMash + + arm_func_start DoMoveEndure +DoMoveEndure: ; 0x02327BE0 + stmdb sp!, {r3, lr} + bl TryInflictEndureStatus + mov r0, #1 + ldmia sp!, {r3, pc} + arm_func_end DoMoveEndure + + arm_func_start DoMoveLowerSpeed1 +DoMoveLowerSpeed1: ; 0x02327BF0 + stmdb sp!, {r3, lr} + mov r2, #1 + mov r3, r2 + bl LowerSpeed + mov r0, #1 + ldmia sp!, {r3, pc} + arm_func_end DoMoveLowerSpeed1 + + arm_func_start DoMoveDamageConfuse10 +DoMoveDamageConfuse10: ; 0x02327C08 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + str r3, [sp] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02327C64 + ldr r1, _02327C70 ; =PSYBEAM_CONFUSE_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02327C64 + mov r2, #0 + mov r0, r6 + mov r1, r5 + mov r3, r2 + bl TryInflictConfusedStatus +_02327C64: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02327C70: .word PSYBEAM_CONFUSE_CHANCE + arm_func_end DoMoveDamageConfuse10 + + arm_func_start DoMovePsywave +DoMovePsywave: ; 0x02327C74 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + mov r0, #0x80 + mov r1, #0x180 + mov r5, r2 + mov r4, r3 + bl DungeonRandRange + ldr r1, [r7, #0xb4] + mov r2, r5 + ldrb r1, [r1, #0xa] + mul r1, r0, r1 + movs r3, r1, asr #8 + movmi r3, #1 + cmp r3, #0xc7 + movgt r3, #0xc7 + mov r0, r7 + mov r1, r6 + str r4, [sp] + bl ov29_02332F18 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end DoMovePsywave + + arm_func_start DoMoveDamageLowerDefensiveStatVariable +DoMoveDamageLowerDefensiveStatVariable: ; 0x02327CD8 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + ldr ip, [sp, #0x30] + mov r3, #0x100 + mov r6, r0 + mov r5, r1 + str ip, [sp] + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02327D4C + ldrsh r2, [sp, #0x2c] + mov r0, r6 + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02327D4C + add r0, sp, #0x24 + mov ip, r4 + ldr r2, [r0] + str ip, [sp] + mov ip, #0 + ldrsh r3, [sp, #0x28] + mov r0, r6 + mov r1, r5 + str ip, [sp, #4] + bl LowerDefensiveStat +_02327D4C: + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr + arm_func_end DoMoveDamageLowerDefensiveStatVariable + + arm_func_start DoMovePsychoBoost +DoMovePsychoBoost: ; 0x02327D60 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #8 + str r3, [sp] + mov r3, #0x100 + mov r5, r0 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02327DC0 + mov r1, r4 + mov r0, r5 + mov r4, #1 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + beq _02327DC0 + ldr r0, _02327DCC ; =SPATK_STAT_IDX + mov ip, #0 + ldr r2, [r0] + str ip, [sp] + mov r0, r5 + mov r1, r5 + mov r3, #2 + str ip, [sp, #4] + bl LowerOffensiveStat +_02327DC0: + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02327DCC: .word SPATK_STAT_IDX + arm_func_end DoMovePsychoBoost + + arm_func_start DoMoveUproar +DoMoveUproar: ; 0x02327DD0 + stmdb sp!, {r3, lr} + bl TryInflictSleeplessStatus + mov r0, #1 + ldmia sp!, {r3, pc} + arm_func_end DoMoveUproar + + arm_func_start DoMoveWaterSpout +DoMoveWaterSpout: ; 0x02327DE0 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + ldr ip, [r0, #0xb4] + ldr r6, _02327E8C ; =0x000003E7 + ldrsh r5, [ip, #0x12] + ldrsh r4, [ip, #0x16] + ldrsh ip, [ip, #0x10] + add lr, r5, r4 + cmp lr, r6 + movle r6, lr + mov r4, r6, asr #1 + add r4, r6, r4, lsr #30 + cmp ip, r4, asr #2 + movle r5, #0 + ble _02327E64 + ldr r4, _02327E8C ; =0x000003E7 + cmp lr, r4 + movle r4, lr + mov r5, r4, lsl #1 + mov r4, r5, asr #1 + add r4, r5, r4, lsr #30 + cmp ip, r4, asr #2 + movle r5, #1 + ble _02327E64 + ldr r4, _02327E8C ; =0x000003E7 + cmp lr, r4 + movgt lr, r4 + add r4, lr, lr, lsl #1 + mov lr, r4, asr #1 + add lr, r4, lr, lsr #30 + cmp ip, lr, asr #2 + movle r5, #2 + movgt r5, #3 +_02327E64: + ldr r4, _02327E90 ; =WATER_SPOUT_DAMAGE_MULT_TABLE + str r3, [sp] + ldr r3, [r4, r5, lsl #2] + bl DealDamage + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02327E8C: .word 0x000003E7 +_02327E90: .word WATER_SPOUT_DAMAGE_MULT_TABLE + arm_func_end DoMoveWaterSpout + + arm_func_start DoMovePsychUp +DoMovePsychUp: ; 0x02327E94 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r1 + mov r7, r0 + mov r0, r6 + ldr r5, [r7, #0xb4] + ldr r4, [r6, #0xb4] + bl ov29_022E5474 + mov r0, #0 +_02327EB4: + add lr, r4, r0, lsl #1 + ldrsh r1, [lr, #0x24] + add ip, r5, r0, lsl #1 + add r3, r4, r0, lsl #2 + strh r1, [ip, #0x24] + ldrsh r1, [lr, #0x28] + add r2, r5, r0, lsl #2 + add r0, r0, #1 + strh r1, [ip, #0x28] + ldrsh r1, [lr, #0x2c] + cmp r0, #2 + strh r1, [ip, #0x2c] + ldr r1, [r3, #0x34] + str r1, [r2, #0x34] + ldr r1, [r3, #0x3c] + str r1, [r2, #0x3c] + blt _02327EB4 + mov r0, #0 + mov r1, r6 + mov r2, r0 + bl SubstitutePlaceholderStringTags + ldr r2, _02327F30 ; =0x00000D62 + mov r0, r7 + mov r1, r6 + bl LogMessageByIdWithPopupCheckUserTarget +#ifdef JAPAN + ldrb r0, [r5, #0x107] + cmp r0, #1 + movlo r0, #1 + strlob r0, [r5, #0x107] +#else + ldrb r0, [r5, #0x108] + cmp r0, #1 + movlo r0, #1 + strlob r0, [r5, #0x108] +#endif + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +#ifdef JAPAN +_02327F30: .word 0x00000AA2 +#else +_02327F30: .word 0x00000D62 +#endif + arm_func_end DoMovePsychUp + + arm_func_start DoMoveDamageWithRecoil +DoMoveDamageWithRecoil: ; 0x02327F34 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x18 + str r3, [sp] + mov r3, #0x100 + mov r7, r0 + mov r6, r2 + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _02327FFC + mov r0, r7 + bl EntityIsValidMoveEffects__0232800C + cmp r0, #0 + beq _02327FFC + ldr r1, [r7, #0xb4] + ldr r0, _02328008 ; =0x000003E7 + ldrsh r2, [r1, #0x12] + ldrsh r1, [r1, #0x16] + mov r4, #1 + add r1, r2, r1 + cmp r1, r0 + movgt r1, r0 + mov r0, r1, asr #2 + add r0, r1, r0, lsr #29 + movs r5, r0, asr #3 + mov r0, r7 + mov r1, #7 + moveq r5, #1 + bl AbilityIsActiveVeneer + cmp r0, #0 + bne _02327FFC + mov r0, r7 + mov r1, #0 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + beq _02327FFC + ldrh r1, [r6, #4] + mov r2, #0 + mov r0, #0x23c + stmia sp, {r1, r2} + str r0, [sp, #8] + mov r0, #0x14 + str r0, [sp, #0xc] + mov r0, r4 + str r0, [sp, #0x10] + mov r0, r7 + mov r1, r5 + mov r3, r2 + str r2, [sp, #0x14] + bl CalcRecoilDamageFixed +_02327FFC: + mov r0, r4 + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02328008: .word 0x000003E7 + arm_func_end DoMoveDamageWithRecoil diff --git a/include/overlay_29_02325FB4.h b/include/overlay_29_02325FB4.h new file mode 100644 index 00000000..a395544e --- /dev/null +++ b/include/overlay_29_02325FB4.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02325FB4_H +#define PMDSKY_OVERLAY_29_02325FB4_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveVitalThrow(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02326188.h b/include/overlay_29_02326188.h new file mode 100644 index 00000000..6857d141 --- /dev/null +++ b/include/overlay_29_02326188.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02326188_H +#define PMDSKY_OVERLAY_29_02326188_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveHealStatus(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_0232620C.h b/include/overlay_29_0232620C.h new file mode 100644 index 00000000..e842e03f --- /dev/null +++ b/include/overlay_29_0232620C.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_0232620C_H +#define PMDSKY_OVERLAY_29_0232620C_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveEncore(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02326550.h b/include/overlay_29_02326550.h new file mode 100644 index 00000000..8f9fce4a --- /dev/null +++ b/include/overlay_29_02326550.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02326550_H +#define PMDSKY_OVERLAY_29_02326550_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveStringShot(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_023268BC.h b/include/overlay_29_023268BC.h new file mode 100644 index 00000000..893ef0e9 --- /dev/null +++ b/include/overlay_29_023268BC.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_023268BC_H +#define PMDSKY_OVERLAY_29_023268BC_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveFocusEnergy(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02326CB4.h b/include/overlay_29_02326CB4.h new file mode 100644 index 00000000..1435f1ff --- /dev/null +++ b/include/overlay_29_02326CB4.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02326CB4_H +#define PMDSKY_OVERLAY_29_02326CB4_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveCounter(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02326E80.h b/include/overlay_29_02326E80.h new file mode 100644 index 00000000..55446762 --- /dev/null +++ b/include/overlay_29_02326E80.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02326E80_H +#define PMDSKY_OVERLAY_29_02326E80_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveParalyze__02326E80(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02327744.h b/include/overlay_29_02327744.h new file mode 100644 index 00000000..bd650df7 --- /dev/null +++ b/include/overlay_29_02327744.h @@ -0,0 +1,11 @@ +#ifndef PMDSKY_OVERLAY_29_02327744_H +#define PMDSKY_OVERLAY_29_02327744_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveShadowHold(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); +bool8 DoMoveHaze(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02327928.h b/include/overlay_29_02327928.h new file mode 100644 index 00000000..be5e54fd --- /dev/null +++ b/include/overlay_29_02327928.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02327928_H +#define PMDSKY_OVERLAY_29_02327928_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveBoostSpeed1(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/main.lsf b/main.lsf index 85172f7c..ef647c9f 100644 --- a/main.lsf +++ b/main.lsf @@ -997,6 +997,24 @@ Overlay OVY_29 Object asm/overlay_29_02324BE8.o Object src/overlay_29_02325620.o Object asm/overlay_29_02325644.o + Object src/overlay_29_02325FB4.o + Object asm/overlay_29_02325FC4.o + Object src/overlay_29_02326188.o + Object asm/overlay_29_023261A0.o + Object src/overlay_29_0232620C.o + Object asm/overlay_29_02326220.o + Object src/overlay_29_02326550.o + Object asm/overlay_29_02326568.o + Object src/overlay_29_023268BC.o + Object asm/overlay_29_023268CC.o + Object src/overlay_29_02326CB4.o + Object asm/overlay_29_02326CC8.o + Object src/overlay_29_02326E80.o + Object asm/overlay_29_02326E98.o + Object src/overlay_29_02327744.o + Object asm/overlay_29_0232776C.o + Object src/overlay_29_02327928.o + Object asm/overlay_29_02327940.o Object src/overlay_29_0232800C.o Object asm/overlay_29_02328030.o Object src/overlay_29_0232A3D8.o diff --git a/src/overlay_29_02325FB4.c b/src/overlay_29_02325FB4.c new file mode 100644 index 00000000..ddc3d328 --- /dev/null +++ b/src/overlay_29_02325FB4.c @@ -0,0 +1,10 @@ +#include "overlay_29_02325FB4.h" + +extern void TryInflictVitalThrowStatus(struct entity *user, struct entity *target); + +bool8 DoMoveVitalThrow(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictVitalThrowStatus(attacker, defender); + + return TRUE; +} diff --git a/src/overlay_29_02326188.c b/src/overlay_29_02326188.c new file mode 100644 index 00000000..0ba5c351 --- /dev/null +++ b/src/overlay_29_02326188.c @@ -0,0 +1,10 @@ +#include "overlay_29_02326188.h" + +extern void EndNegativeStatusConditionWrapper(struct entity *user, struct entity *target, bool8 displayMessage, bool8 fromMove); + +bool8 DoMoveHealStatus(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + EndNegativeStatusConditionWrapper(attacker, defender, TRUE, FALSE); + + return TRUE; +} diff --git a/src/overlay_29_0232620C.c b/src/overlay_29_0232620C.c new file mode 100644 index 00000000..4245b397 --- /dev/null +++ b/src/overlay_29_0232620C.c @@ -0,0 +1,10 @@ +#include "overlay_29_0232620C.h" + +extern void TryInflictEncoreStatus(struct entity *user, struct entity *target, bool8 onlyCheck); + +bool8 DoMoveEncore(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictEncoreStatus(attacker, defender, FALSE); + + return TRUE; +} diff --git a/src/overlay_29_02326550.c b/src/overlay_29_02326550.c new file mode 100644 index 00000000..19d8d382 --- /dev/null +++ b/src/overlay_29_02326550.c @@ -0,0 +1,9 @@ +#include "overlay_29_02326550.h" +#include "move_orb_effects.h" + +bool8 DoMoveStringShot(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + LowerSpeed(attacker, defender, 1, TRUE); + + return TRUE; +} diff --git a/src/overlay_29_023268BC.c b/src/overlay_29_023268BC.c new file mode 100644 index 00000000..a9a5fffc --- /dev/null +++ b/src/overlay_29_023268BC.c @@ -0,0 +1,10 @@ +#include "overlay_29_023268BC.h" + +extern void TryInflictFocusEnergyStatus(struct entity *user, struct entity *target); + +bool8 DoMoveFocusEnergy(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictFocusEnergyStatus(attacker, defender); + + return TRUE; +} diff --git a/src/overlay_29_02326CB4.c b/src/overlay_29_02326CB4.c new file mode 100644 index 00000000..f0bfd2ae --- /dev/null +++ b/src/overlay_29_02326CB4.c @@ -0,0 +1,10 @@ +#include "overlay_29_02326CB4.h" + +extern void SetReflectStatus(struct entity *user, struct entity *target, s32 status); + +bool8 DoMoveCounter(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + SetReflectStatus(attacker, defender, 4); + + return TRUE; +} diff --git a/src/overlay_29_02326E80.c b/src/overlay_29_02326E80.c new file mode 100644 index 00000000..d4dfece7 --- /dev/null +++ b/src/overlay_29_02326E80.c @@ -0,0 +1,9 @@ +#include "overlay_29_02326E80.h" +#include "move_orb_effects.h" + +bool8 DoMoveParalyze__02326E80(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictParalysisStatus(attacker, defender, TRUE, FALSE); + + return TRUE; +} diff --git a/src/overlay_29_02327744.c b/src/overlay_29_02327744.c new file mode 100644 index 00000000..bd604bd0 --- /dev/null +++ b/src/overlay_29_02327744.c @@ -0,0 +1,18 @@ +#include "overlay_29_02327744.h" + +extern void TryInflictShadowHoldStatus(struct entity *user, struct entity *target, bool8 onlyCheck); +extern void TryResetStatChanges(struct entity *user, struct entity *target, bool8 displayMessage); + +bool8 DoMoveShadowHold(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictShadowHoldStatus(attacker, defender, FALSE); + + return TRUE; +} + +bool8 DoMoveHaze(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryResetStatChanges(attacker, defender, TRUE); + + return TRUE; +} diff --git a/src/overlay_29_02327928.c b/src/overlay_29_02327928.c new file mode 100644 index 00000000..086e6170 --- /dev/null +++ b/src/overlay_29_02327928.c @@ -0,0 +1,9 @@ +#include "overlay_29_02327928.h" +#include "move_orb_effects.h" + +bool8 DoMoveBoostSpeed1(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + BoostSpeedOneStage(attacker, defender, 0, TRUE); + + return TRUE; +}