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 <noreply@anthropic.com>
This commit is contained in:
cecilarmitais
2026-08-19 16:48:17 -07:00
parent ba4d07a4b1
commit 6174b66bdb
51 changed files with 1061 additions and 953 deletions

View File

@@ -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

View File

@@ -0,0 +1,7 @@
#pragma once
.public ATK_STAT_IDX
.public ApplyOffensiveStatMultiplier
.public DUNGEON_PTR
.public LogMessageByIdWithPopupCheckUserTarget
.public TryActivateWeather
.public WEATHER_MOVE_TURN_COUNT

View File

@@ -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

View File

@@ -0,0 +1,5 @@
#pragma once
.public DealDamage
.public DungeonRandOutcomeUserTargetInteraction
.public SMOG_POISON_CHANCE
.public TryInflictPoisonedStatus

View File

@@ -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

View File

@@ -0,0 +1,6 @@
#pragma once
.public AbilityIsActiveVeneer
.public DungeonRandInt
.public GetMoveTypeForMonster
.public LogMessageByIdWithPopupCheckUserTarget
.public SetPreprocessorArgsIdVal

View File

@@ -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

View File

@@ -0,0 +1,8 @@
#pragma once
.public AbilityIsActiveVeneer
.public AllocateTemp1024ByteBufferFromPool
.public DUNGEON_PTR
.public LogMessageByIdWithPopupCheckUserTarget
.public SetPreprocessorArgsIdVal
.public SubstitutePlaceholderStringTags
.public ov10_022C6322

View File

@@ -0,0 +1,6 @@
#pragma once
.public DealDamage
.public DungeonRandOutcomeUserTargetInteraction
.public EndFrozenStatus
.public TryInflictConstrictionStatus
.public WHIRLPOOL_CONSTRICTION_CHANCE

View File

@@ -4,4 +4,3 @@
.public LowerOffensiveStat
.public MIST_BALL_LOWER_SPECIAL_ATTACK_CHANCE
.public SPATK_STAT_IDX
.public TryInflictDecoyStatus

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -1,6 +1,5 @@
#pragma once
.public AbilityIsActiveVeneer
.public BoostOffensiveStat
.public BoostSpeedOneStage
.public CalcRecoilDamageFixed
.public DealDamage

View File

@@ -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}

View File

@@ -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

99
asm/overlay_29_023260A8.s Normal file
View File

@@ -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

View File

@@ -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

37
asm/overlay_29_02328A74.s Normal file
View File

@@ -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

View File

@@ -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

92
asm/overlay_29_02329554.s Normal file
View File

@@ -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

View File

@@ -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

68
asm/overlay_29_0232B518.s Normal file
View File

@@ -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

59
asm/overlay_29_0232B5E8.s Normal file
View File

@@ -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

View File

@@ -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}

View File

@@ -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

446
asm/overlay_29_0232B940.s Normal file
View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,6 @@
#include "overlay_29_022EFA6C.h"
bool8 DebugRecruitingEnabled(u32 monster_id)
{
return TRUE;
}

13
src/overlay_29_02326088.c Normal file
View File

@@ -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;
}

13
src/overlay_29_02328A54.c Normal file
View File

@@ -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;
}

13
src/overlay_29_02329534.c Normal file
View File

@@ -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;
}

11
src/overlay_29_0232B500.c Normal file
View File

@@ -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;
}

13
src/overlay_29_0232B5C8.c Normal file
View File

@@ -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;
}

View File

@@ -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;
}

10
src/overlay_29_0232B928.c Normal file
View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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);