From 6174b66bdb4e339b681edd8bf2665fa7cc0e23b1 Mon Sep 17 00:00:00 2001 From: cecilarmitais Date: Wed, 19 Aug 2026 16:48:17 -0700 Subject: [PATCH] Decomp nine more move effects and DebugRecruitingEnabled DoMoveLowerAccuracy1, DoMoveSweetScent, DoMoveNastyPlot, DoMoveSwordsDance, DoMoveTailGlow, DoMoveBlowback, DoMoveHiddenPower, DoMoveDecoy, DoMovePsychoShift and DebugRecruitingEnabled. Five more stat handlers use the StatIndex helpers from move_orb_effects.h. The rest depart from the template: - DoMoveBlowback passes the attacker's own action.direction, read through GetEntInfo. - DoMoveHiddenPower forwards move and item_id to DealDamage with a 0x100 multiplier, its fifth argument on the stack. - DoMoveDecoy passes three constants, the last on the stack. - DoMovePsychoShift guards on attacker != defender before transferring. DebugRecruitingEnabled returns TRUE unconditionally; dungeon_recruitment.h already declares it, so the signature is not a guess. Authored by Claude (Opus 5) under human direction. All ten matched on the first candidate. Confirmed by a matching build: build/pmdsky.us/pmdsky.us.nds: OK. None carries a region conditional, so US alone is sufficient. Co-Authored-By: Claude Opus 5 --- ...9_022EFA6C.inc => overlay_29_022EFA74.inc} | 0 asm/include/overlay_29_02325FC4.inc | 7 - asm/include/overlay_29_023260A8.inc | 7 + asm/include/overlay_29_02328538.inc | 4 - asm/include/overlay_29_02328A74.inc | 5 + asm/include/overlay_29_023293F8.inc | 5 - asm/include/overlay_29_02329554.inc | 6 + asm/include/overlay_29_0232B44C.inc | 12 - asm/include/overlay_29_0232B518.inc | 8 + asm/include/overlay_29_0232B5E8.inc | 6 + ...9_0232B800.inc => overlay_29_0232B820.inc} | 1 - asm/include/overlay_29_0232B8E4.inc | 25 - asm/include/overlay_29_0232B940.inc | 27 ++ asm/include/overlay_29_0232D418.inc | 1 - asm/include/overlay_29_0232E4A0.inc | 1 - ...ay_29_022EFA6C.s => overlay_29_022EFA74.s} | 8 +- asm/overlay_29_02325FC4.s | 108 ----- asm/overlay_29_023260A8.s | 99 ++++ asm/overlay_29_02328538.s | 46 -- asm/overlay_29_02328A74.s | 37 ++ asm/overlay_29_023293F8.s | 101 ---- asm/overlay_29_02329554.s | 92 ++++ asm/overlay_29_0232B44C.s | 142 ------ asm/overlay_29_0232B518.s | 68 +++ asm/overlay_29_0232B5E8.s | 59 +++ ...ay_29_0232B800.s => overlay_29_0232B820.s} | 14 +- asm/overlay_29_0232B8E4.s | 452 ------------------ asm/overlay_29_0232B940.s | 446 +++++++++++++++++ asm/overlay_29_0232D418.s | 13 - asm/overlay_29_0232E4A0.s | 13 - include/overlay_29_022EFA6C.h | 10 + include/overlay_29_02326088.h | 10 + include/overlay_29_02328A54.h | 10 + include/overlay_29_02329534.h | 10 + include/overlay_29_0232B500.h | 10 + include/overlay_29_0232B5C8.h | 10 + include/overlay_29_0232B7C0.h | 1 + include/overlay_29_0232B928.h | 10 + include/overlay_29_0232D6D0.h | 1 + include/overlay_29_0232E734.h | 1 + main.lsf | 17 +- src/overlay_29_022EFA6C.c | 6 + src/overlay_29_02326088.c | 13 + src/overlay_29_02328A54.c | 13 + src/overlay_29_02329534.c | 13 + src/overlay_29_0232B500.c | 11 + src/overlay_29_0232B5C8.c | 13 + src/overlay_29_0232B7C0.c | 9 + src/overlay_29_0232B928.c | 10 + src/overlay_29_0232D6D0.c | 11 + src/overlay_29_0232E734.c | 12 + 51 files changed, 1061 insertions(+), 953 deletions(-) rename asm/include/{overlay_29_022EFA6C.inc => overlay_29_022EFA74.inc} (100%) create mode 100644 asm/include/overlay_29_023260A8.inc create mode 100644 asm/include/overlay_29_02328A74.inc create mode 100644 asm/include/overlay_29_02329554.inc create mode 100644 asm/include/overlay_29_0232B518.inc create mode 100644 asm/include/overlay_29_0232B5E8.inc rename asm/include/{overlay_29_0232B800.inc => overlay_29_0232B820.inc} (85%) create mode 100644 asm/include/overlay_29_0232B940.inc rename asm/{overlay_29_022EFA6C.s => overlay_29_022EFA74.s} (82%) create mode 100644 asm/overlay_29_023260A8.s create mode 100644 asm/overlay_29_02328A74.s create mode 100644 asm/overlay_29_02329554.s create mode 100644 asm/overlay_29_0232B518.s create mode 100644 asm/overlay_29_0232B5E8.s rename asm/{overlay_29_0232B800.s => overlay_29_0232B820.s} (76%) create mode 100644 asm/overlay_29_0232B940.s create mode 100644 include/overlay_29_022EFA6C.h create mode 100644 include/overlay_29_02326088.h create mode 100644 include/overlay_29_02328A54.h create mode 100644 include/overlay_29_02329534.h create mode 100644 include/overlay_29_0232B500.h create mode 100644 include/overlay_29_0232B5C8.h create mode 100644 include/overlay_29_0232B928.h create mode 100644 src/overlay_29_022EFA6C.c create mode 100644 src/overlay_29_02326088.c create mode 100644 src/overlay_29_02328A54.c create mode 100644 src/overlay_29_02329534.c create mode 100644 src/overlay_29_0232B500.c create mode 100644 src/overlay_29_0232B5C8.c create mode 100644 src/overlay_29_0232B928.c diff --git a/asm/include/overlay_29_022EFA6C.inc b/asm/include/overlay_29_022EFA74.inc similarity index 100% rename from asm/include/overlay_29_022EFA6C.inc rename to asm/include/overlay_29_022EFA74.inc diff --git a/asm/include/overlay_29_02325FC4.inc b/asm/include/overlay_29_02325FC4.inc index b2960597..4fd0bcae 100644 --- a/asm/include/overlay_29_02325FC4.inc +++ b/asm/include/overlay_29_02325FC4.inc @@ -1,17 +1,10 @@ #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_023260A8.inc b/asm/include/overlay_29_023260A8.inc new file mode 100644 index 00000000..4e6d6801 --- /dev/null +++ b/asm/include/overlay_29_023260A8.inc @@ -0,0 +1,7 @@ +#pragma once +.public ATK_STAT_IDX +.public ApplyOffensiveStatMultiplier +.public DUNGEON_PTR +.public LogMessageByIdWithPopupCheckUserTarget +.public TryActivateWeather +.public WEATHER_MOVE_TURN_COUNT diff --git a/asm/include/overlay_29_02328538.inc b/asm/include/overlay_29_02328538.inc index 2b49a3b6..b576ad1a 100644 --- a/asm/include/overlay_29_02328538.inc +++ b/asm/include/overlay_29_02328538.inc @@ -1,5 +1,4 @@ #pragma once -.public ATK_STAT_IDX .public AbilityIsActiveVeneer .public ApplyDamageAndEffectsWrapper .public CalcRecoilDamageFixed @@ -13,12 +12,9 @@ .public InitMove .public IsSameMove .public LogMessageByIdWithPopupCheckUserTarget -.public LowerHitChanceStat -.public SMOG_POISON_CHANCE .public SetPreprocessorArgsIdVal .public TryActivateWeather .public TryEndStatusWithAbility .public TryIncreaseHp .public TryInflictCringeStatus -.public TryInflictPoisonedStatus .public WEATHER_MOVE_TURN_COUNT diff --git a/asm/include/overlay_29_02328A74.inc b/asm/include/overlay_29_02328A74.inc new file mode 100644 index 00000000..5b1a8ac6 --- /dev/null +++ b/asm/include/overlay_29_02328A74.inc @@ -0,0 +1,5 @@ +#pragma once +.public DealDamage +.public DungeonRandOutcomeUserTargetInteraction +.public SMOG_POISON_CHANCE +.public TryInflictPoisonedStatus diff --git a/asm/include/overlay_29_023293F8.inc b/asm/include/overlay_29_023293F8.inc index 202c55a7..2c62504c 100644 --- a/asm/include/overlay_29_023293F8.inc +++ b/asm/include/overlay_29_023293F8.inc @@ -1,17 +1,12 @@ #pragma once -.public ATK_STAT_IDX .public AbilityIsActiveVeneer -.public BoostOffensiveStat .public CalcDamageFixedWrapper -.public DungeonRandInt .public GetApparentWeather .public GetDamageSourceWrapper .public GetMoveCategory .public GetMoveType -.public GetMoveTypeForMonster .public LogMessageByIdWithPopupCheckUserTarget .public MOONLIGHT_HP_RESTORATION_TABLE -.public SetPreprocessorArgsIdVal .public SubstitutePlaceholderStringTags .public TryIncreaseHp .public ov29_0230D4A4 diff --git a/asm/include/overlay_29_02329554.inc b/asm/include/overlay_29_02329554.inc new file mode 100644 index 00000000..87568c88 --- /dev/null +++ b/asm/include/overlay_29_02329554.inc @@ -0,0 +1,6 @@ +#pragma once +.public AbilityIsActiveVeneer +.public DungeonRandInt +.public GetMoveTypeForMonster +.public LogMessageByIdWithPopupCheckUserTarget +.public SetPreprocessorArgsIdVal diff --git a/asm/include/overlay_29_0232B44C.inc b/asm/include/overlay_29_0232B44C.inc index d23e10ad..07097d0b 100644 --- a/asm/include/overlay_29_0232B44C.inc +++ b/asm/include/overlay_29_0232B44C.inc @@ -1,20 +1,8 @@ #pragma once -.public AbilityIsActiveVeneer -.public AllocateTemp1024ByteBufferFromPool -.public BoostOffensiveStat -.public DUNGEON_PTR .public DealDamage .public DungeonRandOutcomeUserTargetInteraction -.public EndFrozenStatus .public IsFullFloorFixedRoom .public LogMessageByIdWithPopupCheckUserTarget .public POISON_TAIL_POISON_CHANCE -.public SPATK_STAT_IDX -.public SetPreprocessorArgsIdVal -.public SubstitutePlaceholderStringTags -.public TryBlowAway -.public TryInflictConstrictionStatus .public TryInflictPoisonedStatus .public TryTransform -.public WHIRLPOOL_CONSTRICTION_CHANCE -.public ov10_022C6322 diff --git a/asm/include/overlay_29_0232B518.inc b/asm/include/overlay_29_0232B518.inc new file mode 100644 index 00000000..ddc3fc83 --- /dev/null +++ b/asm/include/overlay_29_0232B518.inc @@ -0,0 +1,8 @@ +#pragma once +.public AbilityIsActiveVeneer +.public AllocateTemp1024ByteBufferFromPool +.public DUNGEON_PTR +.public LogMessageByIdWithPopupCheckUserTarget +.public SetPreprocessorArgsIdVal +.public SubstitutePlaceholderStringTags +.public ov10_022C6322 diff --git a/asm/include/overlay_29_0232B5E8.inc b/asm/include/overlay_29_0232B5E8.inc new file mode 100644 index 00000000..cdee9504 --- /dev/null +++ b/asm/include/overlay_29_0232B5E8.inc @@ -0,0 +1,6 @@ +#pragma once +.public DealDamage +.public DungeonRandOutcomeUserTargetInteraction +.public EndFrozenStatus +.public TryInflictConstrictionStatus +.public WHIRLPOOL_CONSTRICTION_CHANCE diff --git a/asm/include/overlay_29_0232B800.inc b/asm/include/overlay_29_0232B820.inc similarity index 85% rename from asm/include/overlay_29_0232B800.inc rename to asm/include/overlay_29_0232B820.inc index 7bfb8988..612bee82 100644 --- a/asm/include/overlay_29_0232B800.inc +++ b/asm/include/overlay_29_0232B820.inc @@ -4,4 +4,3 @@ .public LowerOffensiveStat .public MIST_BALL_LOWER_SPECIAL_ATTACK_CHANCE .public SPATK_STAT_IDX -.public TryInflictDecoyStatus diff --git a/asm/include/overlay_29_0232B8E4.inc b/asm/include/overlay_29_0232B8E4.inc index 88d2544b..d0a0fc5e 100644 --- a/asm/include/overlay_29_0232B8E4.inc +++ b/asm/include/overlay_29_0232B8E4.inc @@ -1,29 +1,4 @@ #pragma once -.public AbilityIsActiveVeneer -.public AnimationDelayOrSomething -.public ApplyDamageAndEffectsWrapper .public BoostDefensiveStat .public BoostOffensiveStat -.public CalcDamageFixedWrapper -.public DealDamage -.public DungeonRandOutcomeUserAction -.public DungeonRandOutcomeUserTargetInteraction -.public GendersNotEqualNotGenderless -.public GetDamageSourceWrapper -.public GetMoveCategory -.public GetMoveType -.public InitMove -.public IsMonsterSleeping -.public LogMessageByIdWithPopupCheckUserTarget -.public METAL_CLAW_BOOST_ATTACK_CHANCE -.public METRONOME_NEXT_INDEX -.public METRONOME_TABLE .public SPATK_STAT_IDX -.public SubstitutePlaceholderStringTags -.public TryIncreaseHp -.public TryInflictInfatuatedStatus -.public TryInflictLeechSeedStatus -.public ov10_022C4C3C -.public ov10_022C4C3E -.public ov10_022C5DE0 -.public ov29_02324D60 diff --git a/asm/include/overlay_29_0232B940.inc b/asm/include/overlay_29_0232B940.inc new file mode 100644 index 00000000..e7468ccb --- /dev/null +++ b/asm/include/overlay_29_0232B940.inc @@ -0,0 +1,27 @@ +#pragma once +.public AbilityIsActiveVeneer +.public AnimationDelayOrSomething +.public ApplyDamageAndEffectsWrapper +.public BoostOffensiveStat +.public CalcDamageFixedWrapper +.public DealDamage +.public DungeonRandOutcomeUserAction +.public DungeonRandOutcomeUserTargetInteraction +.public GendersNotEqualNotGenderless +.public GetDamageSourceWrapper +.public GetMoveCategory +.public GetMoveType +.public InitMove +.public IsMonsterSleeping +.public LogMessageByIdWithPopupCheckUserTarget +.public METAL_CLAW_BOOST_ATTACK_CHANCE +.public METRONOME_NEXT_INDEX +.public METRONOME_TABLE +.public SubstitutePlaceholderStringTags +.public TryIncreaseHp +.public TryInflictInfatuatedStatus +.public TryInflictLeechSeedStatus +.public ov10_022C4C3C +.public ov10_022C4C3E +.public ov10_022C5DE0 +.public ov29_02324D60 diff --git a/asm/include/overlay_29_0232D418.inc b/asm/include/overlay_29_0232D418.inc index ba29554e..1f769237 100644 --- a/asm/include/overlay_29_0232D418.inc +++ b/asm/include/overlay_29_0232D418.inc @@ -13,7 +13,6 @@ .public SPATK_STAT_IDX .public THUNDER_FANG_CRINGE_CHANCE .public THUNDER_FANG_PARALYZE_CHANCE -.public TransferNegativeStatusCondition .public TryActivateWeather .public TryInflictCringeStatus .public TryInflictFrozenStatus diff --git a/asm/include/overlay_29_0232E4A0.inc b/asm/include/overlay_29_0232E4A0.inc index 3c32ee34..20181d22 100644 --- a/asm/include/overlay_29_0232E4A0.inc +++ b/asm/include/overlay_29_0232E4A0.inc @@ -1,6 +1,5 @@ #pragma once .public AbilityIsActiveVeneer -.public BoostOffensiveStat .public BoostSpeedOneStage .public CalcRecoilDamageFixed .public DealDamage diff --git a/asm/overlay_29_022EFA6C.s b/asm/overlay_29_022EFA74.s similarity index 82% rename from asm/overlay_29_022EFA6C.s rename to asm/overlay_29_022EFA74.s index 605bbd89..6e745dad 100644 --- a/asm/overlay_29_022EFA6C.s +++ b/asm/overlay_29_022EFA74.s @@ -1,14 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_022EFA6C.inc" + .include "overlay_29_022EFA74.inc" .text - arm_func_start DebugRecruitingEnabled -DebugRecruitingEnabled: ; 0x022EFA6C - mov r0, #1 - bx lr - arm_func_end DebugRecruitingEnabled - arm_func_start TryActivateIqBooster TryActivateIqBooster: ; 0x022EFA74 stmdb sp!, {r4, r5, r6, r7, r8, lr} diff --git a/asm/overlay_29_02325FC4.s b/asm/overlay_29_02325FC4.s index 00087494..d745e783 100644 --- a/asm/overlay_29_02325FC4.s +++ b/asm/overlay_29_02325FC4.s @@ -67,111 +67,3 @@ _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_023260A8.s b/asm/overlay_29_023260A8.s new file mode 100644 index 00000000..c1b9fe53 --- /dev/null +++ b/asm/overlay_29_023260A8.s @@ -0,0 +1,99 @@ + .include "asm/macros.inc" + .include "overlay_29_023260A8.inc" + + .text + + 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_02328538.s b/asm/overlay_29_02328538.s index 35f5a1e4..bbf53ab2 100644 --- a/asm/overlay_29_02328538.s +++ b/asm/overlay_29_02328538.s @@ -440,49 +440,3 @@ _02328A50: .word 0x00000C08 _02328A50: .word 0x00000EC6 #endif arm_func_end DoMoveSandstorm - - arm_func_start DoMoveLowerAccuracy1 -DoMoveLowerAccuracy1: ; 0x02328A54 - stmdb sp!, {r3, lr} - ldr r2, _02328A70 ; =ATK_STAT_IDX - mov r3, #1 - ldr r2, [r2] - bl LowerHitChanceStat - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02328A70: .word ATK_STAT_IDX - arm_func_end DoMoveLowerAccuracy1 - - arm_func_start DoMoveDamagePoison40 -DoMoveDamagePoison40: ; 0x02328A74 - 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 _02328AD0 - ldr r1, _02328ADC ; =SMOG_POISON_CHANCE - mov r0, r6 - ldrsh r2, [r1] - mov r1, r5 - mov r4, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _02328AD0 - mov r2, #0 - mov r0, r6 - mov r1, r5 - mov r3, r2 - bl TryInflictPoisonedStatus -_02328AD0: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02328ADC: .word SMOG_POISON_CHANCE - arm_func_end DoMoveDamagePoison40 diff --git a/asm/overlay_29_02328A74.s b/asm/overlay_29_02328A74.s new file mode 100644 index 00000000..cf36faf4 --- /dev/null +++ b/asm/overlay_29_02328A74.s @@ -0,0 +1,37 @@ + .include "asm/macros.inc" + .include "overlay_29_02328A74.inc" + + .text + + arm_func_start DoMoveDamagePoison40 +DoMoveDamagePoison40: ; 0x02328A74 + 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 _02328AD0 + ldr r1, _02328ADC ; =SMOG_POISON_CHANCE + mov r0, r6 + ldrsh r2, [r1] + mov r1, r5 + mov r4, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _02328AD0 + mov r2, #0 + mov r0, r6 + mov r1, r5 + mov r3, r2 + bl TryInflictPoisonedStatus +_02328AD0: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_02328ADC: .word SMOG_POISON_CHANCE + arm_func_end DoMoveDamagePoison40 diff --git a/asm/overlay_29_023293F8.s b/asm/overlay_29_023293F8.s index e8387961..dce0956d 100644 --- a/asm/overlay_29_023293F8.s +++ b/asm/overlay_29_023293F8.s @@ -97,104 +97,3 @@ _0232952C: .word 0x00000ED9 #endif _02329530: .word 0x0000270F arm_func_end DoMoveHornDrill - - arm_func_start DoMoveSwordsDance -DoMoveSwordsDance: ; 0x02329534 - stmdb sp!, {r3, lr} - ldr r2, _02329550 ; =ATK_STAT_IDX - mov r3, #2 - ldr r2, [r2] - bl BoostOffensiveStat - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02329550: .word ATK_STAT_IDX - arm_func_end DoMoveSwordsDance - - arm_func_start DoMoveConversion -DoMoveConversion: ; 0x02329554 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - mov sb, r1 - mov sl, r0 - mov r0, sb - mov r1, #0x25 - ldr r7, [sb, #0xb4] - mov r8, #0 - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _02329598 - ldr r2, _02329658 ; =0x00000DC3 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, r8 - b _02329650 -_02329598: - mov r5, r8 -#ifdef JAPAN - add r4, r7, #0x120 -#else - add r4, r7, #0x124 -#endif - add fp, sp, #0 -_023295A4: - ldrb r0, [r4, r5, lsl #3] - add r6, r4, r5, lsl #3 - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _023295D8 - mov r0, sb - mov r1, r6 - bl GetMoveTypeForMonster - cmp r0, #0 - strne r6, [fp, r8, lsl #2] - addne r8, r8, #1 -_023295D8: - add r5, r5, #1 - cmp r5, #4 - blt _023295A4 - cmp r8, #0 - bne _02329604 - ldr r2, _0232965C ; =0x00000DB6 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, #0 - b _02329650 -_02329604: - mov r0, r8 - bl DungeonRandInt - add r1, sp, #0 - ldr r4, [r1, r0, lsl #2] - mov r0, sb - mov r1, r4 - bl GetMoveTypeForMonster - strb r0, [r7, #0x5e] - mov r0, #0 - strb r0, [r7, #0x5f] - mov r1, #1 - strb r1, [r7, #0xff] - ldrh r1, [r4, #4] - bl SetPreprocessorArgsIdVal - ldr r2, _02329660 ; =0x00000DB5 - mov r0, sl - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, #1 -_02329650: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -_02329658: .word 0x00000B03 -_0232965C: .word 0x00000AF6 -_02329660: .word 0x00000AF5 -#else -_02329658: .word 0x00000DC3 -_0232965C: .word 0x00000DB6 -_02329660: .word 0x00000DB5 -#endif - arm_func_end DoMoveConversion diff --git a/asm/overlay_29_02329554.s b/asm/overlay_29_02329554.s new file mode 100644 index 00000000..f47433d8 --- /dev/null +++ b/asm/overlay_29_02329554.s @@ -0,0 +1,92 @@ + .include "asm/macros.inc" + .include "overlay_29_02329554.inc" + + .text + + arm_func_start DoMoveConversion +DoMoveConversion: ; 0x02329554 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + mov sb, r1 + mov sl, r0 + mov r0, sb + mov r1, #0x25 + ldr r7, [sb, #0xb4] + mov r8, #0 + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _02329598 + ldr r2, _02329658 ; =0x00000DC3 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, r8 + b _02329650 +_02329598: + mov r5, r8 +#ifdef JAPAN + add r4, r7, #0x120 +#else + add r4, r7, #0x124 +#endif + add fp, sp, #0 +_023295A4: + ldrb r0, [r4, r5, lsl #3] + add r6, r4, r5, lsl #3 + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _023295D8 + mov r0, sb + mov r1, r6 + bl GetMoveTypeForMonster + cmp r0, #0 + strne r6, [fp, r8, lsl #2] + addne r8, r8, #1 +_023295D8: + add r5, r5, #1 + cmp r5, #4 + blt _023295A4 + cmp r8, #0 + bne _02329604 + ldr r2, _0232965C ; =0x00000DB6 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, #0 + b _02329650 +_02329604: + mov r0, r8 + bl DungeonRandInt + add r1, sp, #0 + ldr r4, [r1, r0, lsl #2] + mov r0, sb + mov r1, r4 + bl GetMoveTypeForMonster + strb r0, [r7, #0x5e] + mov r0, #0 + strb r0, [r7, #0x5f] + mov r1, #1 + strb r1, [r7, #0xff] + ldrh r1, [r4, #4] + bl SetPreprocessorArgsIdVal + ldr r2, _02329660 ; =0x00000DB5 + mov r0, sl + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, #1 +_02329650: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +_02329658: .word 0x00000B03 +_0232965C: .word 0x00000AF6 +_02329660: .word 0x00000AF5 +#else +_02329658: .word 0x00000DC3 +_0232965C: .word 0x00000DB6 +_02329660: .word 0x00000DB5 +#endif + arm_func_end DoMoveConversion diff --git a/asm/overlay_29_0232B44C.s b/asm/overlay_29_0232B44C.s index c77f5b98..b79b9067 100644 --- a/asm/overlay_29_0232B44C.s +++ b/asm/overlay_29_0232B44C.s @@ -63,145 +63,3 @@ _0232B4F0: .align 2, 0 _0232B4FC: .word POISON_TAIL_POISON_CHANCE arm_func_end DoMovePoisonTail - - arm_func_start DoMoveBlowback -DoMoveBlowback: ; 0x0232B500 - stmdb sp!, {r3, lr} - ldr r2, [r0, #0xb4] - ldrb r2, [r2, #0x4c] - bl TryBlowAway - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveBlowback - - arm_func_start DoMoveCamouflage -DoMoveCamouflage: ; 0x0232B518 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r5, r0 - mov r4, r1 - bl AllocateTemp1024ByteBufferFromPool - ldr r0, _0232B5B8 ; =DUNGEON_PTR - mov r2, #0xc - ldr r0, [r0] - ldr r3, _0232B5BC ; =ov10_022C6322 - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh ip, [r0, #0x30] -#else - ldrsh ip, [r0, #0xd4] -#endif - mov r0, r4 - mov r1, #0x25 - smulbb r2, ip, r2 - ldr r7, [r4, #0xb4] - ldrb r6, [r3, r2] - bl AbilityIsActiveVeneer - cmp r0, #0 - beq _0232B578 - ldr r2, _0232B5C0 ; =0x00000DC3 - mov r0, r5 - mov r1, r4 - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0232B578: - strb r6, [r7, #0x5e] - mov r2, #0 - mov r1, r4 - strb r2, [r7, #0x5f] - mov r0, #1 - strb r0, [r7, #0xff] - bl SubstitutePlaceholderStringTags - mov r1, r6 - mov r0, #0 - bl SetPreprocessorArgsIdVal -#ifdef JAPAN - mov r0, r5 - mov r1, r4 - mov r2, #0xc30 -#else - ldr r2, _0232B5C4 ; =0x00000EEE - mov r0, r5 - mov r1, r4 -#endif - bl LogMessageByIdWithPopupCheckUserTarget - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0232B5B8: .word DUNGEON_PTR -_0232B5BC: .word ov10_022C6322 -#ifdef JAPAN -_0232B5C0: .word 0x00000B03 -#else -_0232B5C0: .word 0x00000DC3 -_0232B5C4: .word 0x00000EEE -#endif - arm_func_end DoMoveCamouflage - - arm_func_start DoMoveTailGlow -DoMoveTailGlow: ; 0x0232B5C8 - stmdb sp!, {r3, lr} - ldr r2, _0232B5E4 ; =SPATK_STAT_IDX - mov r3, #2 - ldr r2, [r2] - bl BoostOffensiveStat - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0232B5E4: .word SPATK_STAT_IDX - arm_func_end DoMoveTailGlow - - arm_func_start DoMoveDamageConstrict10 -DoMoveDamageConstrict10: ; 0x0232B5E8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r5, r2 - ldrh ip, [r5, #4] - ldr r2, _0232B69C ; =0x00000123 - mov r7, r0 - cmp ip, r2 - mov r6, r1 - mov r4, r3 - mov r8, #0 - cmpne ip, #0x20c - bne _0232B628 - mov r0, r7 - mov r1, r6 - bl EndFrozenStatus - mov sb, #0x13c - b _0232B640 -_0232B628: - cmp ip, #0x45 - moveq sb, #0x75 - beq _0232B640 - cmp ip, #0x7d - moveq sb, #0x7e - movne sb, #0xf1 -_0232B640: - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, #0x100 - str r4, [sp] - bl DealDamage - cmp r0, #0 - beq _0232B694 - ldr r1, _0232B6A0 ; =WHIRLPOOL_CONSTRICTION_CHANCE - mov r0, r7 - ldrsh r2, [r1] - mov r1, r6 - mov r8, #1 - bl DungeonRandOutcomeUserTargetInteraction - cmp r0, #0 - beq _0232B694 - mov r0, r7 - mov r1, r6 - mov r2, sb - mov r3, #0 - bl TryInflictConstrictionStatus -_0232B694: - mov r0, r8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0232B69C: .word 0x00000123 -_0232B6A0: .word WHIRLPOOL_CONSTRICTION_CHANCE - arm_func_end DoMoveDamageConstrict10 diff --git a/asm/overlay_29_0232B518.s b/asm/overlay_29_0232B518.s new file mode 100644 index 00000000..8defc7a1 --- /dev/null +++ b/asm/overlay_29_0232B518.s @@ -0,0 +1,68 @@ + .include "asm/macros.inc" + .include "overlay_29_0232B518.inc" + + .text + + arm_func_start DoMoveCamouflage +DoMoveCamouflage: ; 0x0232B518 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r5, r0 + mov r4, r1 + bl AllocateTemp1024ByteBufferFromPool + ldr r0, _0232B5B8 ; =DUNGEON_PTR + mov r2, #0xc + ldr r0, [r0] + ldr r3, _0232B5BC ; =ov10_022C6322 + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh ip, [r0, #0x30] +#else + ldrsh ip, [r0, #0xd4] +#endif + mov r0, r4 + mov r1, #0x25 + smulbb r2, ip, r2 + ldr r7, [r4, #0xb4] + ldrb r6, [r3, r2] + bl AbilityIsActiveVeneer + cmp r0, #0 + beq _0232B578 + ldr r2, _0232B5C0 ; =0x00000DC3 + mov r0, r5 + mov r1, r4 + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_0232B578: + strb r6, [r7, #0x5e] + mov r2, #0 + mov r1, r4 + strb r2, [r7, #0x5f] + mov r0, #1 + strb r0, [r7, #0xff] + bl SubstitutePlaceholderStringTags + mov r1, r6 + mov r0, #0 + bl SetPreprocessorArgsIdVal +#ifdef JAPAN + mov r0, r5 + mov r1, r4 + mov r2, #0xc30 +#else + ldr r2, _0232B5C4 ; =0x00000EEE + mov r0, r5 + mov r1, r4 +#endif + bl LogMessageByIdWithPopupCheckUserTarget + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0232B5B8: .word DUNGEON_PTR +_0232B5BC: .word ov10_022C6322 +#ifdef JAPAN +_0232B5C0: .word 0x00000B03 +#else +_0232B5C0: .word 0x00000DC3 +_0232B5C4: .word 0x00000EEE +#endif + arm_func_end DoMoveCamouflage diff --git a/asm/overlay_29_0232B5E8.s b/asm/overlay_29_0232B5E8.s new file mode 100644 index 00000000..5699a1ff --- /dev/null +++ b/asm/overlay_29_0232B5E8.s @@ -0,0 +1,59 @@ + .include "asm/macros.inc" + .include "overlay_29_0232B5E8.inc" + + .text + + arm_func_start DoMoveDamageConstrict10 +DoMoveDamageConstrict10: ; 0x0232B5E8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r5, r2 + ldrh ip, [r5, #4] + ldr r2, _0232B69C ; =0x00000123 + mov r7, r0 + cmp ip, r2 + mov r6, r1 + mov r4, r3 + mov r8, #0 + cmpne ip, #0x20c + bne _0232B628 + mov r0, r7 + mov r1, r6 + bl EndFrozenStatus + mov sb, #0x13c + b _0232B640 +_0232B628: + cmp ip, #0x45 + moveq sb, #0x75 + beq _0232B640 + cmp ip, #0x7d + moveq sb, #0x7e + movne sb, #0xf1 +_0232B640: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, #0x100 + str r4, [sp] + bl DealDamage + cmp r0, #0 + beq _0232B694 + ldr r1, _0232B6A0 ; =WHIRLPOOL_CONSTRICTION_CHANCE + mov r0, r7 + ldrsh r2, [r1] + mov r1, r6 + mov r8, #1 + bl DungeonRandOutcomeUserTargetInteraction + cmp r0, #0 + beq _0232B694 + mov r0, r7 + mov r1, r6 + mov r2, sb + mov r3, #0 + bl TryInflictConstrictionStatus +_0232B694: + mov r0, r8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0232B69C: .word 0x00000123 +_0232B6A0: .word WHIRLPOOL_CONSTRICTION_CHANCE + arm_func_end DoMoveDamageConstrict10 diff --git a/asm/overlay_29_0232B800.s b/asm/overlay_29_0232B820.s similarity index 76% rename from asm/overlay_29_0232B800.s rename to asm/overlay_29_0232B820.s index 2a65316c..617b1689 100644 --- a/asm/overlay_29_0232B800.s +++ b/asm/overlay_29_0232B820.s @@ -1,20 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_0232B800.inc" + .include "overlay_29_0232B820.inc" .text - arm_func_start DoMoveDecoy -DoMoveDecoy: ; 0x0232B800 - stmdb sp!, {r3, lr} - mov r2, #1 - mov ip, #0 - mov r3, r2 - str ip, [sp] - bl TryInflictDecoyStatus - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveDecoy - arm_func_start DoMoveMistBall DoMoveMistBall: ; 0x0232B820 stmdb sp!, {r4, r5, r6, lr} diff --git a/asm/overlay_29_0232B8E4.s b/asm/overlay_29_0232B8E4.s index 8226c95f..abdfe637 100644 --- a/asm/overlay_29_0232B8E4.s +++ b/asm/overlay_29_0232B8E4.s @@ -24,455 +24,3 @@ DoMoveCalmMind: ; 0x0232B8E4 .align 2, 0 _0232B924: .word SPATK_STAT_IDX arm_func_end DoMoveCalmMind - - arm_func_start DoMoveHiddenPower -DoMoveHiddenPower: ; 0x0232B928 - stmdb sp!, {r3, lr} - str r3, [sp] - mov r3, #0x100 - bl DealDamage - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMoveHiddenPower - - arm_func_start DoMoveMetalClaw -DoMoveMetalClaw: ; 0x0232B940 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - ldr ip, [sp, #0x28] - mov r3, #0x100 - mov r6, r0 -#ifdef EUROPE - mov r5, r1 -#endif - str ip, [sp] - mov r4, #0 - bl DealDamage - cmp r0, #0 - beq _0232B9B8 - ldr r1, _0232B9CC ; =METAL_CLAW_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 _0232B9B8 - add r0, sp, #0x24 - ldr r2, [r0] - ldr r5, [r6, #0xb4] - 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 -_0232B9B8: - mov r0, r4 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_0232B9CC: .word METAL_CLAW_BOOST_ATTACK_CHANCE - arm_func_end DoMoveMetalClaw - - arm_func_start DoMoveAttract -DoMoveAttract: ; 0x0232B9D0 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - ldr r0, [r6, #0xb4] - ldr r1, [r5, #0xb4] - ldrsh r0, [r0, #2] - ldrsh r1, [r1, #2] - mov r4, #0 - bl GendersNotEqualNotGenderless - cmp r0, #0 - beq _0232BA14 - mov r4, #1 - mov r0, r6 - mov r1, r5 - mov r2, r4 - mov r3, #0 - bl TryInflictInfatuatedStatus -_0232BA14: - cmp r4, #0 - bne _0232BA3C - mov r0, #0 - mov r1, r5 - mov r2, r0 - bl SubstitutePlaceholderStringTags -#ifdef JAPAN - ldr r2, _0232CE90 ; =0x00000C52 - mov r0, r6 - mov r1, r5 -#else - mov r0, r6 - mov r1, r5 - mov r2, #0xf10 -#endif - bl LogMessageByIdWithPopupCheckUserTarget -_0232BA3C: - mov r0, r4 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -#ifdef JAPAN -_0232CE90: .word 0x00000C52 -#endif - arm_func_end DoMoveAttract - - arm_func_start DoMoveCopycat -DoMoveCopycat: ; 0x0232BA44 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov r0, r1 - ldr r0, [r0, #0xb4] - mov r7, #0 -#ifdef JAPAN - add r4, r0, #0x120 -#else - add r4, r0, #0x124 -#endif - ldr r0, _0232BB44 ; =0x0000020D - ldr sb, [sl, #0xb4] - str r1, [sp] - mov r6, r7 - mov r5, r7 - sub fp, r0, #0xc6 -_0232BA74: - ldrb r0, [r4, r5, lsl #3] - add r8, r4, r5, lsl #3 - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0232BAE0 - ldrh r1, [r8, #4] - mov r0, sl - bl ov29_02324D60 - cmp r0, #0 - bne _0232BAE0 - ldrh r1, [r8, #4] - cmp r1, fp - cmpne r1, #0xe5 - cmpne r1, #0x8a - cmpne r1, #0x28 - cmpne r1, #0x11 - ldrne r0, _0232BB44 ; =0x0000020D - cmpne r1, r0 - beq _0232BAE0 - ldrb r0, [r8] - tst r0, #0x10 - addne r0, sb, r6, lsl #1 - addne r0, r0, #0x100 -#ifdef JAPAN - strneh r1, [r0, #0x90] -#else - strneh r1, [r0, #0x94] -#endif - addne r6, r6, #1 -_0232BAE0: - add r5, r5, #1 - cmp r5, #4 - blt _0232BA74 - mov r0, #0 - mov r1, sl - mov r2, r0 - bl SubstitutePlaceholderStringTags - cmp r6, #0 - beq _0232BB2C -#ifdef JAPAN - ldrb r0, [sb, #0x107] - ldr r2, _0232CF98 ; =0x00000C32 - ldr r1, [sp] - cmp r0, #1 - movlo r0, #1 - strlob r0, [sb, #0x107] -#else - ldrb r0, [sb, #0x108] - ldr r1, [sp] - mov r2, #0xef0 - cmp r0, #1 - movlo r0, #1 - strlob r0, [sb, #0x108] -#endif - mov r0, sl - bl LogMessageByIdWithPopupCheckUserTarget - mov r7, #1 - b _0232BB3C -_0232BB2C: - ldr r2, _0232BB48 ; =0x00000EF1 - ldr r1, [sp] - mov r0, sl - bl LogMessageByIdWithPopupCheckUserTarget -_0232BB3C: - mov r0, r7 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0232BB44: .word 0x0000020D -#ifdef JAPAN -_0232CF98: .word 0x00000C32 -_0232BB48: .word 0x00000C33 -#else -_0232BB48: .word 0x00000EF1 -#endif - arm_func_end DoMoveCopycat - - arm_func_start DoMoveFrustration -DoMoveFrustration: ; 0x0232BB4C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x20 - mov r7, #0 - mov r6, r0 - strb r7, [sp, #0x1c] - mov sl, r3 - mov r5, r1 - mov r4, r2 - ldr ip, [r6, #0xb4] - mov sb, #1 - ldr r3, _0232BC28 ; =ov10_022C4C3C - ldr r0, _0232BC2C ; =0x000003E7 - b _0232BBA8 -_0232BB80: - mov r8, r7, lsl #2 - ldrsh r2, [r3, r8] - cmp r2, #0 - blt _0232BBB0 - ldrsh r1, [ip, #0xe] - cmp r1, r2 - ldrlt r0, _0232BC30 ; =ov10_022C4C3E - ldrltsh sb, [r0, r8] - blt _0232BBB0 - add r7, r7, #1 -_0232BBA8: - cmp r7, r0 - blt _0232BB80 -_0232BBB0: - mov r0, r4 - bl GetMoveType - mov r8, r0 - ldrh r0, [r4, #4] - bl GetMoveCategory - mov r7, r0 - mov r1, sl - mov r0, r4 - bl GetDamageSourceWrapper - add r3, sp, #0x1c - stmia sp, {r3, r8} - str r7, [sp, #8] - str r0, [sp, #0xc] - mov r4, #0 - str r4, [sp, #0x10] - mov r3, #1 - str r3, [sp, #0x14] - mov r1, r5 - mov r2, sb - mov r0, r6 - str r4, [sp, #0x18] - bl CalcDamageFixedWrapper - ldrb r0, [sp, #0x1c] - cmp r0, #0 - moveq r0, #1 - movne r0, r4 - strb r0, [sp, #0x1c] - and r0, r0, #0xff - add sp, sp, #0x20 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_0232BC28: .word ov10_022C4C3C -_0232BC2C: .word 0x000003E7 -_0232BC30: .word ov10_022C4C3E - arm_func_end DoMoveFrustration - - arm_func_start DoMoveLeechSeed -DoMoveLeechSeed: ; 0x0232BC34 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r2, #1 - mov r3, #0 - bl TryInflictLeechSeedStatus - ldr r1, [r4, #0xb4] -#ifdef JAPAN - ldrb r0, [r1, #0x107] - cmp r0, #1 - movlo r0, #1 - strlob r0, [r1, #0x107] -#else - ldrb r0, [r1, #0x108] - cmp r0, #1 - movlo r0, #1 - strlob r0, [r1, #0x108] -#endif - mov r0, #1 - ldmia sp!, {r4, pc} - arm_func_end DoMoveLeechSeed - - arm_func_start DoMoveMetronome -DoMoveMetronome: ; 0x0232BC64 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #8 - ldr r2, _0232BCB8 ; =METRONOME_NEXT_INDEX - mov r5, r0 - ldr r6, [r2] - ldr r0, _0232BCBC ; =METRONOME_TABLE - mov r2, r6, lsl #3 - mov r4, r1 - ldrh r1, [r0, r2] - add r0, sp, #0 - mov r7, r3 - bl InitMove - ldr r0, _0232BCC0 ; =ov10_022C5DE0 - add r2, sp, #0 - ldr ip, [r0, r6, lsl #3] - mov r0, r5 - mov r1, r4 - mov r3, r7 - blx ip - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0232BCB8: .word METRONOME_NEXT_INDEX -_0232BCBC: .word METRONOME_TABLE -_0232BCC0: .word ov10_022C5DE0 - arm_func_end DoMoveMetronome - - arm_func_start DoMoveDreamEater -DoMoveDreamEater: ; 0x0232BCC4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r8, r2 -#ifdef JAPAN - mov sb, r1 - mov r2, #0x3a - mov r7, r0 - mov r6, r3 -#else - mov r6, r3 - mov sb, r1 - mov r2, #0x3a - mov r3, #1 - mov r7, r0 -#endif - mov r4, #0 - bl DefenderAbilityIsActiveMoveEffects__0232BDD0 - mov r5, r0 - mov r0, sb - bl IsMonsterSleeping - cmp r0, #0 - beq _0232BDB4 - mov r0, #1 - bl AnimationDelayOrSomething - mov r0, r7 - mov r1, sb - mov r2, r8 - mov r3, #0x100 - str r6, [sp] - bl DealDamage - cmp r0, #0 - beq _0232BDC4 - add r0, r0, r0, lsr #31 - mov r6, r0, asr #1 - mov r4, #1 - cmp r6, #1 - mov r0, r7 - mov r1, #0 - movlt r6, r4 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - beq _0232BDC4 - ldr r1, [r7, #0xb4] -#ifdef JAPAN - ldrb r0, [r1, #0x107] - cmp r0, #1 - movlo r0, #1 - strlob r0, [r1, #0x107] -#else - ldrb r0, [r1, #0x108] - cmp r0, #1 - movlo r0, #1 - strlob r0, [r1, #0x108] -#endif - mov r0, r7 - mov r1, #0 - bl DungeonRandOutcomeUserAction - cmp r0, #0 - beq _0232BDC4 - cmp r5, #0 - beq _0232BD94 - mov r2, #0xd - mov r0, r7 - mov r1, r6 - add r3, r2, #0x22c - bl ApplyDamageAndEffectsWrapper - b _0232BDC4 -_0232BD94: - mov r5, #1 - mov r0, r7 - mov r1, r7 - mov r2, r6 - mov r3, #0 - str r5, [sp] - bl TryIncreaseHp - b _0232BDC4 -_0232BDB4: - ldr r2, _0232BDCC ; =0x00000EF2 - mov r0, r7 - mov r1, sb - bl LogMessageByIdWithPopupCheckUserTarget -_0232BDC4: - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -#ifdef JAPAN -_0232BDCC: .word 0x00000C34 -#else -_0232BDCC: .word 0x00000EF2 -#endif - arm_func_end DoMoveDreamEater - - arm_func_start DefenderAbilityIsActiveMoveEffects__0232BDD0 -DefenderAbilityIsActiveMoveEffects__0232BDD0: ; 0x0232BDD0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r4, r2 - cmp r0, r5 - beq _0232BE24 - cmp r0, #0 - moveq r1, #0 - beq _0232BE04 - ldr r1, [r0] - cmp r1, #1 - moveq r1, #1 - movne r1, #0 - and r1, r1, #0xff -_0232BE04: - cmp r1, #0 -#ifndef JAPAN - cmpne r3, #0 -#endif - beq _0232BE24 - mov r1, #0x53 - bl AbilityIsActiveVeneer - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r3, r4, r5, pc} -_0232BE24: - mov r0, r5 - mov r1, r4 - bl AbilityIsActiveVeneer - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DefenderAbilityIsActiveMoveEffects__0232BDD0 diff --git a/asm/overlay_29_0232B940.s b/asm/overlay_29_0232B940.s new file mode 100644 index 00000000..02abba04 --- /dev/null +++ b/asm/overlay_29_0232B940.s @@ -0,0 +1,446 @@ + .include "asm/macros.inc" + .include "overlay_29_0232B940.inc" + + .text + + arm_func_start DoMoveMetalClaw +DoMoveMetalClaw: ; 0x0232B940 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + ldr ip, [sp, #0x28] + mov r3, #0x100 + mov r6, r0 +#ifdef EUROPE + mov r5, r1 +#endif + str ip, [sp] + mov r4, #0 + bl DealDamage + cmp r0, #0 + beq _0232B9B8 + ldr r1, _0232B9CC ; =METAL_CLAW_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 _0232B9B8 + add r0, sp, #0x24 + ldr r2, [r0] + ldr r5, [r6, #0xb4] + 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 +_0232B9B8: + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_0232B9CC: .word METAL_CLAW_BOOST_ATTACK_CHANCE + arm_func_end DoMoveMetalClaw + + arm_func_start DoMoveAttract +DoMoveAttract: ; 0x0232B9D0 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + ldr r0, [r6, #0xb4] + ldr r1, [r5, #0xb4] + ldrsh r0, [r0, #2] + ldrsh r1, [r1, #2] + mov r4, #0 + bl GendersNotEqualNotGenderless + cmp r0, #0 + beq _0232BA14 + mov r4, #1 + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r3, #0 + bl TryInflictInfatuatedStatus +_0232BA14: + cmp r4, #0 + bne _0232BA3C + mov r0, #0 + mov r1, r5 + mov r2, r0 + bl SubstitutePlaceholderStringTags +#ifdef JAPAN + ldr r2, _0232CE90 ; =0x00000C52 + mov r0, r6 + mov r1, r5 +#else + mov r0, r6 + mov r1, r5 + mov r2, #0xf10 +#endif + bl LogMessageByIdWithPopupCheckUserTarget +_0232BA3C: + mov r0, r4 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +#ifdef JAPAN +_0232CE90: .word 0x00000C52 +#endif + arm_func_end DoMoveAttract + + arm_func_start DoMoveCopycat +DoMoveCopycat: ; 0x0232BA44 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov r0, r1 + ldr r0, [r0, #0xb4] + mov r7, #0 +#ifdef JAPAN + add r4, r0, #0x120 +#else + add r4, r0, #0x124 +#endif + ldr r0, _0232BB44 ; =0x0000020D + ldr sb, [sl, #0xb4] + str r1, [sp] + mov r6, r7 + mov r5, r7 + sub fp, r0, #0xc6 +_0232BA74: + ldrb r0, [r4, r5, lsl #3] + add r8, r4, r5, lsl #3 + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0232BAE0 + ldrh r1, [r8, #4] + mov r0, sl + bl ov29_02324D60 + cmp r0, #0 + bne _0232BAE0 + ldrh r1, [r8, #4] + cmp r1, fp + cmpne r1, #0xe5 + cmpne r1, #0x8a + cmpne r1, #0x28 + cmpne r1, #0x11 + ldrne r0, _0232BB44 ; =0x0000020D + cmpne r1, r0 + beq _0232BAE0 + ldrb r0, [r8] + tst r0, #0x10 + addne r0, sb, r6, lsl #1 + addne r0, r0, #0x100 +#ifdef JAPAN + strneh r1, [r0, #0x90] +#else + strneh r1, [r0, #0x94] +#endif + addne r6, r6, #1 +_0232BAE0: + add r5, r5, #1 + cmp r5, #4 + blt _0232BA74 + mov r0, #0 + mov r1, sl + mov r2, r0 + bl SubstitutePlaceholderStringTags + cmp r6, #0 + beq _0232BB2C +#ifdef JAPAN + ldrb r0, [sb, #0x107] + ldr r2, _0232CF98 ; =0x00000C32 + ldr r1, [sp] + cmp r0, #1 + movlo r0, #1 + strlob r0, [sb, #0x107] +#else + ldrb r0, [sb, #0x108] + ldr r1, [sp] + mov r2, #0xef0 + cmp r0, #1 + movlo r0, #1 + strlob r0, [sb, #0x108] +#endif + mov r0, sl + bl LogMessageByIdWithPopupCheckUserTarget + mov r7, #1 + b _0232BB3C +_0232BB2C: + ldr r2, _0232BB48 ; =0x00000EF1 + ldr r1, [sp] + mov r0, sl + bl LogMessageByIdWithPopupCheckUserTarget +_0232BB3C: + mov r0, r7 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0232BB44: .word 0x0000020D +#ifdef JAPAN +_0232CF98: .word 0x00000C32 +_0232BB48: .word 0x00000C33 +#else +_0232BB48: .word 0x00000EF1 +#endif + arm_func_end DoMoveCopycat + + arm_func_start DoMoveFrustration +DoMoveFrustration: ; 0x0232BB4C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x20 + mov r7, #0 + mov r6, r0 + strb r7, [sp, #0x1c] + mov sl, r3 + mov r5, r1 + mov r4, r2 + ldr ip, [r6, #0xb4] + mov sb, #1 + ldr r3, _0232BC28 ; =ov10_022C4C3C + ldr r0, _0232BC2C ; =0x000003E7 + b _0232BBA8 +_0232BB80: + mov r8, r7, lsl #2 + ldrsh r2, [r3, r8] + cmp r2, #0 + blt _0232BBB0 + ldrsh r1, [ip, #0xe] + cmp r1, r2 + ldrlt r0, _0232BC30 ; =ov10_022C4C3E + ldrltsh sb, [r0, r8] + blt _0232BBB0 + add r7, r7, #1 +_0232BBA8: + cmp r7, r0 + blt _0232BB80 +_0232BBB0: + mov r0, r4 + bl GetMoveType + mov r8, r0 + ldrh r0, [r4, #4] + bl GetMoveCategory + mov r7, r0 + mov r1, sl + mov r0, r4 + bl GetDamageSourceWrapper + add r3, sp, #0x1c + stmia sp, {r3, r8} + str r7, [sp, #8] + str r0, [sp, #0xc] + mov r4, #0 + str r4, [sp, #0x10] + mov r3, #1 + str r3, [sp, #0x14] + mov r1, r5 + mov r2, sb + mov r0, r6 + str r4, [sp, #0x18] + bl CalcDamageFixedWrapper + ldrb r0, [sp, #0x1c] + cmp r0, #0 + moveq r0, #1 + movne r0, r4 + strb r0, [sp, #0x1c] + and r0, r0, #0xff + add sp, sp, #0x20 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_0232BC28: .word ov10_022C4C3C +_0232BC2C: .word 0x000003E7 +_0232BC30: .word ov10_022C4C3E + arm_func_end DoMoveFrustration + + arm_func_start DoMoveLeechSeed +DoMoveLeechSeed: ; 0x0232BC34 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r2, #1 + mov r3, #0 + bl TryInflictLeechSeedStatus + ldr r1, [r4, #0xb4] +#ifdef JAPAN + ldrb r0, [r1, #0x107] + cmp r0, #1 + movlo r0, #1 + strlob r0, [r1, #0x107] +#else + ldrb r0, [r1, #0x108] + cmp r0, #1 + movlo r0, #1 + strlob r0, [r1, #0x108] +#endif + mov r0, #1 + ldmia sp!, {r4, pc} + arm_func_end DoMoveLeechSeed + + arm_func_start DoMoveMetronome +DoMoveMetronome: ; 0x0232BC64 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #8 + ldr r2, _0232BCB8 ; =METRONOME_NEXT_INDEX + mov r5, r0 + ldr r6, [r2] + ldr r0, _0232BCBC ; =METRONOME_TABLE + mov r2, r6, lsl #3 + mov r4, r1 + ldrh r1, [r0, r2] + add r0, sp, #0 + mov r7, r3 + bl InitMove + ldr r0, _0232BCC0 ; =ov10_022C5DE0 + add r2, sp, #0 + ldr ip, [r0, r6, lsl #3] + mov r0, r5 + mov r1, r4 + mov r3, r7 + blx ip + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0232BCB8: .word METRONOME_NEXT_INDEX +_0232BCBC: .word METRONOME_TABLE +_0232BCC0: .word ov10_022C5DE0 + arm_func_end DoMoveMetronome + + arm_func_start DoMoveDreamEater +DoMoveDreamEater: ; 0x0232BCC4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r8, r2 +#ifdef JAPAN + mov sb, r1 + mov r2, #0x3a + mov r7, r0 + mov r6, r3 +#else + mov r6, r3 + mov sb, r1 + mov r2, #0x3a + mov r3, #1 + mov r7, r0 +#endif + mov r4, #0 + bl DefenderAbilityIsActiveMoveEffects__0232BDD0 + mov r5, r0 + mov r0, sb + bl IsMonsterSleeping + cmp r0, #0 + beq _0232BDB4 + mov r0, #1 + bl AnimationDelayOrSomething + mov r0, r7 + mov r1, sb + mov r2, r8 + mov r3, #0x100 + str r6, [sp] + bl DealDamage + cmp r0, #0 + beq _0232BDC4 + add r0, r0, r0, lsr #31 + mov r6, r0, asr #1 + mov r4, #1 + cmp r6, #1 + mov r0, r7 + mov r1, #0 + movlt r6, r4 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + beq _0232BDC4 + ldr r1, [r7, #0xb4] +#ifdef JAPAN + ldrb r0, [r1, #0x107] + cmp r0, #1 + movlo r0, #1 + strlob r0, [r1, #0x107] +#else + ldrb r0, [r1, #0x108] + cmp r0, #1 + movlo r0, #1 + strlob r0, [r1, #0x108] +#endif + mov r0, r7 + mov r1, #0 + bl DungeonRandOutcomeUserAction + cmp r0, #0 + beq _0232BDC4 + cmp r5, #0 + beq _0232BD94 + mov r2, #0xd + mov r0, r7 + mov r1, r6 + add r3, r2, #0x22c + bl ApplyDamageAndEffectsWrapper + b _0232BDC4 +_0232BD94: + mov r5, #1 + mov r0, r7 + mov r1, r7 + mov r2, r6 + mov r3, #0 + str r5, [sp] + bl TryIncreaseHp + b _0232BDC4 +_0232BDB4: + ldr r2, _0232BDCC ; =0x00000EF2 + mov r0, r7 + mov r1, sb + bl LogMessageByIdWithPopupCheckUserTarget +_0232BDC4: + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +#ifdef JAPAN +_0232BDCC: .word 0x00000C34 +#else +_0232BDCC: .word 0x00000EF2 +#endif + arm_func_end DoMoveDreamEater + + arm_func_start DefenderAbilityIsActiveMoveEffects__0232BDD0 +DefenderAbilityIsActiveMoveEffects__0232BDD0: ; 0x0232BDD0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r4, r2 + cmp r0, r5 + beq _0232BE24 + cmp r0, #0 + moveq r1, #0 + beq _0232BE04 + ldr r1, [r0] + cmp r1, #1 + moveq r1, #1 + movne r1, #0 + and r1, r1, #0xff +_0232BE04: + cmp r1, #0 +#ifndef JAPAN + cmpne r3, #0 +#endif + beq _0232BE24 + mov r1, #0x53 + bl AbilityIsActiveVeneer + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r3, r4, r5, pc} +_0232BE24: + mov r0, r5 + mov r1, r4 + bl AbilityIsActiveVeneer + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DefenderAbilityIsActiveMoveEffects__0232BDD0 diff --git a/asm/overlay_29_0232D418.s b/asm/overlay_29_0232D418.s index a1cce06f..a058b639 100644 --- a/asm/overlay_29_0232D418.s +++ b/asm/overlay_29_0232D418.s @@ -208,16 +208,3 @@ _0232D6A0: _0232D6A8: .word ICE_FANG_FREEZE_CHANCE _0232D6AC: .word ICE_FANG_CRINGE_CHANCE arm_func_end DoMoveIceFang - - arm_func_start DoMovePsychoShift -DoMovePsychoShift: ; 0x0232D6B0 - stmdb sp!, {r3, lr} - cmp r0, r1 - beq _0232D6C8 - mov r2, #0 - mov r3, r2 - bl TransferNegativeStatusCondition -_0232D6C8: - mov r0, #1 - ldmia sp!, {r3, pc} - arm_func_end DoMovePsychoShift diff --git a/asm/overlay_29_0232E4A0.s b/asm/overlay_29_0232E4A0.s index dff3116b..bb4ddade 100644 --- a/asm/overlay_29_0232E4A0.s +++ b/asm/overlay_29_0232E4A0.s @@ -197,16 +197,3 @@ DoMoveRockPolish: ; 0x0232E6E0 mov r0, #1 ldmia sp!, {r3, r4, r5, pc} arm_func_end DoMoveRockPolish - - arm_func_start DoMoveNastyPlot -DoMoveNastyPlot: ; 0x0232E714 - stmdb sp!, {r3, lr} - ldr r2, _0232E730 ; =SPATK_STAT_IDX - mov r3, #2 - ldr r2, [r2] - bl BoostOffensiveStat - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0232E730: .word SPATK_STAT_IDX - arm_func_end DoMoveNastyPlot diff --git a/include/overlay_29_022EFA6C.h b/include/overlay_29_022EFA6C.h new file mode 100644 index 00000000..2dda1c14 --- /dev/null +++ b/include/overlay_29_022EFA6C.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022EFA6C_H +#define PMDSKY_OVERLAY_29_022EFA6C_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DebugRecruitingEnabled(u32 monster_id); + +#endif diff --git a/include/overlay_29_02326088.h b/include/overlay_29_02326088.h new file mode 100644 index 00000000..f9b83c43 --- /dev/null +++ b/include/overlay_29_02326088.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02326088_H +#define PMDSKY_OVERLAY_29_02326088_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveSweetScent(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02328A54.h b/include/overlay_29_02328A54.h new file mode 100644 index 00000000..a8865c0f --- /dev/null +++ b/include/overlay_29_02328A54.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02328A54_H +#define PMDSKY_OVERLAY_29_02328A54_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveLowerAccuracy1(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_02329534.h b/include/overlay_29_02329534.h new file mode 100644 index 00000000..09204c58 --- /dev/null +++ b/include/overlay_29_02329534.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_02329534_H +#define PMDSKY_OVERLAY_29_02329534_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveSwordsDance(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_0232B500.h b/include/overlay_29_0232B500.h new file mode 100644 index 00000000..a1289803 --- /dev/null +++ b/include/overlay_29_0232B500.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_0232B500_H +#define PMDSKY_OVERLAY_29_0232B500_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveBlowback(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_0232B5C8.h b/include/overlay_29_0232B5C8.h new file mode 100644 index 00000000..67acd047 --- /dev/null +++ b/include/overlay_29_0232B5C8.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_0232B5C8_H +#define PMDSKY_OVERLAY_29_0232B5C8_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveTailGlow(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_0232B7C0.h b/include/overlay_29_0232B7C0.h index 42e2c6c6..ac410c74 100644 --- a/include/overlay_29_0232B7C0.h +++ b/include/overlay_29_0232B7C0.h @@ -8,5 +8,6 @@ bool8 DoMoveMagicCoat(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); bool8 DoMoveProtect(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); bool8 DoMoveDefenseCurl(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); +bool8 DoMoveDecoy(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/include/overlay_29_0232B928.h b/include/overlay_29_0232B928.h new file mode 100644 index 00000000..8c9ad95f --- /dev/null +++ b/include/overlay_29_0232B928.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_0232B928_H +#define PMDSKY_OVERLAY_29_0232B928_H + +#include "dungeon_mode.h" +#include "item.h" +#include "move.h" + +bool8 DoMoveHiddenPower(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); + +#endif diff --git a/include/overlay_29_0232D6D0.h b/include/overlay_29_0232D6D0.h index bcdca439..4da8b069 100644 --- a/include/overlay_29_0232D6D0.h +++ b/include/overlay_29_0232D6D0.h @@ -5,6 +5,7 @@ #include "item.h" #include "move.h" +bool8 DoMovePsychoShift(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); bool8 DoMoveEmbargo(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/include/overlay_29_0232E734.h b/include/overlay_29_0232E734.h index 67afd73d..f97821e8 100644 --- a/include/overlay_29_0232E734.h +++ b/include/overlay_29_0232E734.h @@ -5,6 +5,7 @@ #include "item.h" #include "move.h" +bool8 DoMoveNastyPlot(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); bool8 DoMoveTag0x1AB(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id); #endif diff --git a/main.lsf b/main.lsf index 310945cb..5f9aaa9b 100644 --- a/main.lsf +++ b/main.lsf @@ -817,7 +817,8 @@ Overlay OVY_29 Object asm/overlay_29_rodata_0235173C.o Object src/dungeon_ai_movement.o Object asm/overlay_29_rodata_0235179C.o - Object asm/overlay_29_022EFA6C.o + Object src/overlay_29_022EFA6C.o + Object asm/overlay_29_022EFA74.o Object src/dungeon_logic_6.o Object asm/overlay_29_022EFB20.o Object src/overlay_29_022F0590.o @@ -1003,6 +1004,8 @@ Overlay OVY_29 Object asm/overlay_29_02325644.o Object src/overlay_29_02325FB4.o Object asm/overlay_29_02325FC4.o + Object src/overlay_29_02326088.o + Object asm/overlay_29_023260A8.o Object src/overlay_29_02326188.o Object asm/overlay_29_023261A0.o Object src/overlay_29_0232620C.o @@ -1033,12 +1036,16 @@ Overlay OVY_29 Object asm/overlay_29_023283A4.o Object src/overlay_29_02328528.o Object asm/overlay_29_02328538.o + Object src/overlay_29_02328A54.o + Object asm/overlay_29_02328A74.o Object src/overlay_29_02328AE0.o Object asm/overlay_29_02328B00.o Object src/overlay_29_0232923C.o Object asm/overlay_29_02329258.o Object src/overlay_29_023293E4.o Object asm/overlay_29_023293F8.o + Object src/overlay_29_02329534.o + Object asm/overlay_29_02329554.o Object src/overlay_29_02329664.o Object asm/overlay_29_02329674.o Object src/overlay_29_023296F8.o @@ -1061,14 +1068,20 @@ Overlay OVY_29 Object asm/overlay_29_0232AD18.o Object src/overlay_29_0232B434.o Object asm/overlay_29_0232B44C.o + Object src/overlay_29_0232B500.o + Object asm/overlay_29_0232B518.o + Object src/overlay_29_0232B5C8.o + Object asm/overlay_29_0232B5E8.o Object src/overlay_29_0232B6A4.o Object asm/overlay_29_0232B6C8.o Object src/overlay_29_0232B7C0.o - Object asm/overlay_29_0232B800.o + Object asm/overlay_29_0232B820.o Object src/overlay_29_0232B8A0.o Object asm/overlay_29_0232B8B0.o Object src/overlay_29_0232B8D4.o Object asm/overlay_29_0232B8E4.o + Object src/overlay_29_0232B928.o + Object asm/overlay_29_0232B940.o Object src/overlay_29_0232BE34.o Object asm/overlay_29_0232BE44.o Object src/overlay_29_0232BF78.o diff --git a/src/overlay_29_022EFA6C.c b/src/overlay_29_022EFA6C.c new file mode 100644 index 00000000..3ffe868a --- /dev/null +++ b/src/overlay_29_022EFA6C.c @@ -0,0 +1,6 @@ +#include "overlay_29_022EFA6C.h" + +bool8 DebugRecruitingEnabled(u32 monster_id) +{ + return TRUE; +} diff --git a/src/overlay_29_02326088.c b/src/overlay_29_02326088.c new file mode 100644 index 00000000..53bfba73 --- /dev/null +++ b/src/overlay_29_02326088.c @@ -0,0 +1,13 @@ +#include "overlay_29_02326088.h" +#include "move_orb_effects.h" + +extern struct StatIndex ATK_STAT_IDX; + +extern struct StatIndex SPATK_STAT_IDX; + +bool8 DoMoveSweetScent(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + LowerHitChanceStat(attacker, defender, SPATK_STAT_IDX, TRUE); + + return TRUE; +} diff --git a/src/overlay_29_02328A54.c b/src/overlay_29_02328A54.c new file mode 100644 index 00000000..614be174 --- /dev/null +++ b/src/overlay_29_02328A54.c @@ -0,0 +1,13 @@ +#include "overlay_29_02328A54.h" +#include "move_orb_effects.h" + +extern struct StatIndex ATK_STAT_IDX; + +extern struct StatIndex SPATK_STAT_IDX; + +bool8 DoMoveLowerAccuracy1(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + LowerHitChanceStat(attacker, defender, ATK_STAT_IDX, TRUE); + + return TRUE; +} diff --git a/src/overlay_29_02329534.c b/src/overlay_29_02329534.c new file mode 100644 index 00000000..348377aa --- /dev/null +++ b/src/overlay_29_02329534.c @@ -0,0 +1,13 @@ +#include "overlay_29_02329534.h" +#include "move_orb_effects.h" + +extern struct StatIndex ATK_STAT_IDX; + +extern struct StatIndex SPATK_STAT_IDX; + +bool8 DoMoveSwordsDance(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + BoostOffensiveStat(attacker, defender, ATK_STAT_IDX, 2); + + return TRUE; +} diff --git a/src/overlay_29_0232B500.c b/src/overlay_29_0232B500.c new file mode 100644 index 00000000..fec1e5ef --- /dev/null +++ b/src/overlay_29_0232B500.c @@ -0,0 +1,11 @@ +#include "overlay_29_0232B500.h" +#include "dungeon_util_static.h" + +extern void TryBlowAway(struct entity *user, struct entity *target, s32 direction); + +bool8 DoMoveBlowback(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryBlowAway(attacker, defender, GetEntInfo(attacker)->action.direction); + + return TRUE; +} diff --git a/src/overlay_29_0232B5C8.c b/src/overlay_29_0232B5C8.c new file mode 100644 index 00000000..1ef23747 --- /dev/null +++ b/src/overlay_29_0232B5C8.c @@ -0,0 +1,13 @@ +#include "overlay_29_0232B5C8.h" +#include "move_orb_effects.h" + +extern struct StatIndex ATK_STAT_IDX; + +extern struct StatIndex SPATK_STAT_IDX; + +bool8 DoMoveTailGlow(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + BoostOffensiveStat(attacker, defender, SPATK_STAT_IDX, 2); + + return TRUE; +} diff --git a/src/overlay_29_0232B7C0.c b/src/overlay_29_0232B7C0.c index 8e457193..226beca1 100644 --- a/src/overlay_29_0232B7C0.c +++ b/src/overlay_29_0232B7C0.c @@ -1,4 +1,6 @@ #include "overlay_29_0232B7C0.h" + +extern void TryInflictDecoyStatus(struct entity *user, struct entity *target, s32 a, s32 b, s32 c); #include "move_orb_effects.h" extern struct StatIndex ATK_STAT_IDX; @@ -28,3 +30,10 @@ bool8 DoMoveDefenseCurl(struct entity* attacker, struct entity* defender, struct return TRUE; } + +bool8 DoMoveDecoy(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + TryInflictDecoyStatus(attacker, defender, 1, 1, 0); + + return TRUE; +} diff --git a/src/overlay_29_0232B928.c b/src/overlay_29_0232B928.c new file mode 100644 index 00000000..1b8db83c --- /dev/null +++ b/src/overlay_29_0232B928.c @@ -0,0 +1,10 @@ +#include "overlay_29_0232B928.h" + +extern s32 DealDamage(struct entity *attacker, struct entity *defender, struct move *move, s32 damageMultiplier, enum item_id item_id); + +bool8 DoMoveHiddenPower(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + DealDamage(attacker, defender, move, 0x100, item_id); + + return TRUE; +} diff --git a/src/overlay_29_0232D6D0.c b/src/overlay_29_0232D6D0.c index 2c73e86c..dce00998 100644 --- a/src/overlay_29_0232D6D0.c +++ b/src/overlay_29_0232D6D0.c @@ -1,5 +1,16 @@ #include "overlay_29_0232D6D0.h" +extern void TransferNegativeStatusCondition(struct entity *user, struct entity *target, s32 a, s32 b); + +bool8 DoMovePsychoShift(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + if (attacker != defender) { + TransferNegativeStatusCondition(attacker, defender, 0, 0); + } + + return TRUE; +} + extern void TryInflictEmbargoStatus(struct entity *user, struct entity *target, bool8 displayMessage, bool8 onlyCheck); bool8 DoMoveEmbargo(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) diff --git a/src/overlay_29_0232E734.c b/src/overlay_29_0232E734.c index 0719db24..acd25f8c 100644 --- a/src/overlay_29_0232E734.c +++ b/src/overlay_29_0232E734.c @@ -1,4 +1,16 @@ #include "overlay_29_0232E734.h" +#include "move_orb_effects.h" + +extern struct StatIndex ATK_STAT_IDX; + +extern struct StatIndex SPATK_STAT_IDX; + +bool8 DoMoveNastyPlot(struct entity* attacker, struct entity* defender, struct move* move, enum item_id item_id) +{ + BoostOffensiveStat(attacker, defender, SPATK_STAT_IDX, 2); + + return TRUE; +} extern void TryInflictTerrifiedStatus(struct entity *user, struct entity *target);