mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 15:42:34 -05:00
4328 lines
82 KiB
ArmAsm
4328 lines
82 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_0230AA0C.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start AftermathCheck
|
|
AftermathCheck: ; 0x0230AA0C
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
sub sp, sp, #8
|
|
mov r4, r2
|
|
mov r2, #0x76
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
mov r6, r0
|
|
mov r5, r1
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
beq _0230AA78
|
|
ldr r0, _0230AA84 ; =AFTERMATH_CHANCE
|
|
ldrsh r0, [r0]
|
|
bl DungeonRandOutcome__022EAB20
|
|
cmp r0, #0
|
|
ldrne ip, _0230AA88 ; =0x0000026F
|
|
cmpne r4, ip
|
|
beq _0230AA78
|
|
mov r0, #0
|
|
str r0, [sp]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
add r2, r5, #4
|
|
mov r3, #1
|
|
str ip, [sp, #4]
|
|
bl TryAftermathExplosion
|
|
mov r0, #1
|
|
b _0230AA7C
|
|
_0230AA78:
|
|
mov r0, #0
|
|
_0230AA7C:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
.align 2, 0
|
|
_0230AA84: .word AFTERMATH_CHANCE
|
|
_0230AA88: .word 0x0000026F
|
|
arm_func_end AftermathCheck
|
|
|
|
arm_func_start GetTypeMatchupBothTypes
|
|
GetTypeMatchupBothTypes: ; 0x0230AA8C
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
ldr r3, _0230AB4C ; =ov29_02352838
|
|
mov sl, r0
|
|
ldrh r4, [r3]
|
|
ldrh r3, [r3, #2]
|
|
mov sb, r1
|
|
mov r8, r2
|
|
strh r4, [sp]
|
|
strh r3, [sp, #2]
|
|
bl ScrappyShouldActivate
|
|
ldr fp, _0230AB50 ; =DUNGEON_PTR
|
|
mov r7, r0
|
|
mov r6, #0
|
|
mov r5, #1
|
|
add r4, sp, #0
|
|
_0230AAC8:
|
|
cmp r7, #0
|
|
bne _0230AB04
|
|
mov r0, r8
|
|
bl IsTypeIneffectiveAgainstGhost
|
|
cmp r0, #0
|
|
beq _0230AB04
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r6
|
|
bl GhostImmunityIsActive
|
|
cmp r0, #0
|
|
ldrne r1, [fp]
|
|
movne r0, #0
|
|
strneb r5, [r1, #0x1d4]
|
|
bne _0230AB18
|
|
_0230AB04:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r6
|
|
mov r3, r8
|
|
bl GetTypeMatchup
|
|
_0230AB18:
|
|
add r1, r6, #1
|
|
mov r1, r1, lsl #0x10
|
|
mov r2, r6, lsl #1
|
|
mov r6, r1, asr #0x10
|
|
strh r0, [r4, r2]
|
|
cmp r6, #2
|
|
blt _0230AAC8
|
|
ldrsh r2, [sp]
|
|
ldr r0, _0230AB54 ; =TYPE_MATCHUP_COMBINATOR_TABLE
|
|
ldrsh r1, [sp, #2]
|
|
add r0, r0, r2, lsl #4
|
|
ldr r0, [r0, r1, lsl #2]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0230AB4C: .word ov29_02352838
|
|
_0230AB50: .word DUNGEON_PTR
|
|
_0230AB54: .word TYPE_MATCHUP_COMBINATOR_TABLE
|
|
arm_func_end GetTypeMatchupBothTypes
|
|
|
|
arm_func_start ScrappyShouldActivate
|
|
ScrappyShouldActivate: ; 0x0230AB58
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
mov r6, #0
|
|
mov sl, r0
|
|
mov sb, r1
|
|
mov r8, r2
|
|
mov r5, #0x57
|
|
mov fp, r6
|
|
mov r4, #1
|
|
b _0230ABDC
|
|
_0230AB7C:
|
|
mov r0, sl
|
|
mov r1, r5
|
|
ldr r7, [sb, #0xb4]
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230ABB4
|
|
add r0, r7, r6
|
|
ldrb r0, [r0, #0x5e]
|
|
cmp r0, #0xe
|
|
bne _0230ABB4
|
|
cmp r8, #1
|
|
cmpne r8, #7
|
|
moveq r0, r4
|
|
beq _0230ABB8
|
|
_0230ABB4:
|
|
mov r0, fp
|
|
_0230ABB8:
|
|
cmp r0, #0
|
|
ldrne r1, _0230ABEC ; =DUNGEON_PTR
|
|
movne r0, #1
|
|
ldrne r1, [r1]
|
|
strneb r0, [r1, #0x1cc]
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
add r0, r6, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, asr #0x10
|
|
_0230ABDC:
|
|
cmp r6, #2
|
|
blt _0230AB7C
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0230ABEC: .word DUNGEON_PTR
|
|
arm_func_end ScrappyShouldActivate
|
|
|
|
arm_func_start IsTypeIneffectiveAgainstGhost
|
|
IsTypeIneffectiveAgainstGhost: ; 0x0230ABF0
|
|
cmp r0, #1
|
|
cmpne r0, #7
|
|
moveq r0, #1
|
|
movne r0, #0
|
|
bx lr
|
|
arm_func_end IsTypeIneffectiveAgainstGhost
|
|
|
|
arm_func_start GhostImmunityIsActive
|
|
GhostImmunityIsActive: ; 0x0230AC04
|
|
stmdb sp!, {r3, lr}
|
|
ldr r3, [r1, #0xb4]
|
|
add r1, r3, r2
|
|
ldrb r1, [r1, #0x5e]
|
|
cmp r1, #0xe
|
|
bne _0230AC50
|
|
ldrb r1, [r3, #0xfe]
|
|
cmp r1, #0
|
|
bne _0230AC38
|
|
mov r1, #0x45
|
|
bl ExclusiveItemEffectIsActive__0230A9B8
|
|
cmp r0, #0
|
|
beq _0230AC40
|
|
_0230AC38:
|
|
mov r0, #1
|
|
b _0230AC44
|
|
_0230AC40:
|
|
mov r0, #0
|
|
_0230AC44:
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
ldmeqia sp!, {r3, pc}
|
|
_0230AC50:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end GhostImmunityIsActive
|
|
|
|
arm_func_start GetTypeMatchup
|
|
GetTypeMatchup: ; 0x0230AC58
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r7, r1
|
|
ldr r4, [r7, #0xb4]
|
|
mov r6, r2
|
|
ldrb r1, [r4, #0xf5]
|
|
mov r5, r3
|
|
cmp r1, #1
|
|
beq _0230AC88
|
|
mov r1, #0x46
|
|
bl ExclusiveItemEffectIsActive__0230A9B8
|
|
cmp r0, #0
|
|
beq _0230ACA0
|
|
_0230AC88:
|
|
cmp r5, #0xb
|
|
addeq r0, r4, r6
|
|
ldreqb r0, [r0, #0x5e]
|
|
cmpeq r0, #0x10
|
|
moveq r0, #2
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0230ACA0:
|
|
cmp r5, #9
|
|
bne _0230ACE0
|
|
bl GravityIsActive
|
|
cmp r0, #0
|
|
beq _0230ACCC
|
|
add r0, r4, r6
|
|
ldrb r0, [r0, #0x5e]
|
|
cmp r0, #0xa
|
|
bne _0230ACE0
|
|
mov r0, #2
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0230ACCC:
|
|
mov r0, r7
|
|
bl IsFloating
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0230ACE0:
|
|
ldr r1, _0230AD00 ; =TYPE_MATCHUP_TABLE
|
|
mov r0, #0x24
|
|
mla r0, r5, r0, r1
|
|
add r1, r4, r6
|
|
ldrb r1, [r1, #0x5e]
|
|
mov r1, r1, lsl #1
|
|
ldrsh r0, [r1, r0]
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
.align 2, 0
|
|
_0230AD00: .word TYPE_MATCHUP_TABLE
|
|
arm_func_end GetTypeMatchup
|
|
|
|
arm_func_start CalcTypeBasedDamageEffects
|
|
CalcTypeBasedDamageEffects: ; 0x0230AD04
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x64
|
|
ldr r5, _0230B774 ; =ov29_02352838
|
|
mov sl, r1
|
|
ldr r4, [r5, #0x1c]
|
|
ldr r5, [r5, #0x20]
|
|
ldr r8, [sp, #0x88]
|
|
ldr r1, [sp, #0x90]
|
|
ldr r7, [sp, #0x8c]
|
|
str r1, [sp, #0x90]
|
|
ldr r6, [sl, #0xb4]
|
|
mov r1, #1
|
|
mov fp, r0
|
|
mov sb, r2
|
|
str r3, [sp, #4]
|
|
str r4, [sp, #0x34]
|
|
str r5, [sp, #0x38]
|
|
bl IntToFixedPoint64
|
|
mov r0, #0
|
|
str r0, [sp, #0x30]
|
|
strb r0, [r7, #0xe]
|
|
ldr r1, [sp, #0x30]
|
|
mov r0, sb
|
|
strb r1, [r7, #0xf]
|
|
bl EntityIsValid__02308FBC
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
beq _0230B76C
|
|
mov r0, r8
|
|
bl IsTypeIneffectiveAgainstGhost
|
|
str r0, [sp, #0x2c]
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x35
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
cmpne r8, #0
|
|
movne r0, #1
|
|
strne r0, [sp, #0x30]
|
|
mov r3, #2
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
str r3, [r7, #8]
|
|
bl ScrappyShouldActivate
|
|
ldr r3, _0230B778 ; =MATCHUP_IMMUNE_MULTIPLIER_ERRATIC_PLAYER
|
|
str r0, [sp, #0x28]
|
|
ldr r0, [r3]
|
|
ldr r2, _0230B77C ; =MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER
|
|
str r0, [sp, #0x24]
|
|
ldr r0, [r2]
|
|
ldr r1, _0230B780 ; =MATCHUP_NEUTRAL_MULTIPLIER_ERRATIC_PLAYER
|
|
str r0, [sp, #0x20]
|
|
ldr r0, [r1]
|
|
ldr r1, _0230B784 ; =MATCHUP_IMMUNE_MULTIPLIER
|
|
str r0, [sp, #0x1c]
|
|
ldr r0, _0230B788 ; =MATCHUP_SUPER_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER
|
|
mov r4, #0
|
|
ldr r0, [r0]
|
|
str r0, [sp, #0x18]
|
|
ldr r0, [r1]
|
|
ldr r1, _0230B78C ; =MATCHUP_NEUTRAL_MULTIPLIER
|
|
str r0, [sp, #0x14]
|
|
ldr r0, _0230B790 ; =MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER
|
|
ldr r0, [r0]
|
|
str r0, [sp, #0x10]
|
|
ldr r0, [r1]
|
|
str r0, [sp, #0xc]
|
|
ldr r0, _0230B794 ; =MATCHUP_SUPER_EFFECTIVE_MULTIPLIER
|
|
ldr r0, [r0]
|
|
str r0, [sp, #8]
|
|
b _0230AF8C
|
|
_0230AE28:
|
|
ldr r0, [sp, #0x90]
|
|
cmp r0, #0
|
|
bne _0230AE90
|
|
mov r0, sl
|
|
mov r1, #0x3b
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
bne _0230AE5C
|
|
mov r0, sb
|
|
mov r1, #0x3b
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _0230AE90
|
|
_0230AE5C:
|
|
ldr r1, [sp, #0x24]
|
|
add r0, sp, #0x44
|
|
bl FixedPoint32To64
|
|
ldr r1, [sp, #0x20]
|
|
add r0, sp, #0x4c
|
|
bl FixedPoint32To64
|
|
ldr r1, [sp, #0x1c]
|
|
add r0, sp, #0x54
|
|
bl FixedPoint32To64
|
|
ldr r1, [sp, #0x18]
|
|
add r0, sp, #0x5c
|
|
bl FixedPoint32To64
|
|
b _0230AEC0
|
|
_0230AE90:
|
|
ldr r1, [sp, #0x14]
|
|
add r0, sp, #0x44
|
|
bl FixedPoint32To64
|
|
ldr r1, [sp, #0x10]
|
|
add r0, sp, #0x4c
|
|
bl FixedPoint32To64
|
|
ldr r1, [sp, #0xc]
|
|
add r0, sp, #0x54
|
|
bl FixedPoint32To64
|
|
ldr r1, [sp, #8]
|
|
add r0, sp, #0x5c
|
|
bl FixedPoint32To64
|
|
_0230AEC0:
|
|
mov r0, fp
|
|
bl FixedPoint64IsZero
|
|
cmp r0, #0
|
|
bne _0230AF94
|
|
ldr r0, [sp, #0x28]
|
|
cmp r0, #0
|
|
bne _0230AF1C
|
|
ldr r0, [sp, #0x2c]
|
|
cmp r0, #0
|
|
beq _0230AF1C
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r4, lsl #0x10
|
|
mov r2, r2, asr #0x10
|
|
bl GhostImmunityIsActive
|
|
cmp r0, #0
|
|
beq _0230AF1C
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
mov r5, #0
|
|
ldr r1, [r0]
|
|
mov r0, #1
|
|
strb r0, [r1, #0x1d4]
|
|
b _0230AF38
|
|
_0230AF1C:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r4, lsl #0x10
|
|
mov r2, r2, asr #0x10
|
|
mov r3, r8
|
|
bl GetTypeMatchup
|
|
mov r5, r0
|
|
_0230AF38:
|
|
mov r0, sl
|
|
mov r1, #0x3b
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _0230AF64
|
|
add r2, sp, #0x44
|
|
mov r0, fp
|
|
mov r1, fp
|
|
add r2, r2, r5, lsl #3
|
|
bl MultiplyFixedPoint64
|
|
b _0230AF80
|
|
_0230AF64:
|
|
cmp r5, #2
|
|
beq _0230AF80
|
|
add r2, sp, #0x44
|
|
mov r0, fp
|
|
mov r1, fp
|
|
add r2, r2, r5, lsl #3
|
|
bl MultiplyFixedPoint64
|
|
_0230AF80:
|
|
add r0, sp, #0x34
|
|
str r5, [r0, r4, lsl #2]
|
|
add r4, r4, #1
|
|
_0230AF8C:
|
|
cmp r4, #2
|
|
blt _0230AE28
|
|
_0230AF94:
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r4, [sp, #0x34]
|
|
ldr r2, [r0]
|
|
ldr r1, _0230B79C ; =TYPE_MATCHUP_COMBINATOR_TABLE
|
|
strb r4, [r2, #0x18c]
|
|
ldr r3, [sp, #0x38]
|
|
ldr r2, [r0]
|
|
add r1, r1, r4, lsl #4
|
|
ldr r0, [r1, r3, lsl #2]
|
|
strb r3, [r2, #0x18d]
|
|
cmp r0, #3
|
|
str r0, [r7, #8]
|
|
moveq r4, #1
|
|
beq _0230AFEC
|
|
ldr r0, [sp, #0x30]
|
|
mov r4, #0
|
|
cmp r0, #0
|
|
ldrne r0, _0230B774 ; =ov29_02352838
|
|
ldrne r1, [r0, #0x3c]
|
|
ldrne r0, [r0, #0x40]
|
|
strne r1, [fp]
|
|
strne r0, [fp, #4]
|
|
_0230AFEC:
|
|
mov r0, sl
|
|
mov r1, #0x50
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230B02C
|
|
ldr r0, [r7, #8]
|
|
cmp r0, #1
|
|
bne _0230B02C
|
|
ldr r1, _0230B7A0 ; =TINTED_LENS_MULTIPLIER
|
|
add r0, sp, #0x3c
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r2, sp, #0x3c
|
|
mov r0, fp
|
|
mov r1, fp
|
|
bl MultiplyFixedPoint64
|
|
_0230B02C:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x6c
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
bne _0230B064
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x6e
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
beq _0230B080
|
|
_0230B064:
|
|
ldr r0, [r7, #8]
|
|
cmp r0, #3
|
|
bne _0230B080
|
|
ldr r2, _0230B7A4 ; =SOLID_ROCK_MULTIPLIER
|
|
mov r0, fp
|
|
mov r1, fp
|
|
bl MultiplyFixedPoint64
|
|
_0230B080:
|
|
mov r0, sb
|
|
mov r1, #0x5a
|
|
bl ExclusiveItemEffectIsActive__0230A9B8
|
|
cmp r0, #0
|
|
beq _0230B0A4
|
|
ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5
|
|
mov r0, fp
|
|
mov r1, fp
|
|
bl MultiplyFixedPoint64
|
|
_0230B0A4:
|
|
ldr r0, [sp, #0x90]
|
|
cmp r0, #0
|
|
bne _0230B104
|
|
mov r0, sl
|
|
mov r1, #0x64
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230B104
|
|
ldr r0, _0230B7AC ; =TECHNICIAN_MOVE_POWER_THRESHOLD
|
|
ldrsh r1, [r0]
|
|
ldr r0, [sp, #4]
|
|
cmp r0, r1
|
|
bgt _0230B104
|
|
ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5
|
|
mov r0, fp
|
|
mov r1, fp
|
|
bl MultiplyFixedPoint64
|
|
mov r1, #0x64
|
|
ldr r2, _0230B7B4 ; =0x00000C3E
|
|
mov r0, sl
|
|
str r1, [sp]
|
|
mov r1, sb
|
|
mov r3, #2
|
|
bl LogMessageByIdWithPopupCheckParticipants
|
|
_0230B104:
|
|
cmp r8, #2
|
|
cmpne r8, #6
|
|
bne _0230B14C
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #2
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
beq _0230B14C
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5
|
|
ldr r3, [r0]
|
|
mov r5, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r5, [r3, #0x1c5]
|
|
bl MultiplyFixedPoint64
|
|
_0230B14C:
|
|
cmp r8, #2
|
|
bne _0230B198
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl FlashFireShouldActivate
|
|
cmp r0, #0
|
|
beq _0230B198
|
|
ldr r1, _0230B798 ; =DUNGEON_PTR
|
|
mov r0, fp
|
|
ldr r2, [r1]
|
|
mov r3, #1
|
|
mov r1, #0
|
|
strb r3, [r2, #0x1c6]
|
|
bl IntToFixedPoint64
|
|
mov r4, #0
|
|
str r4, [r7, #8]
|
|
strb r4, [r7, #0xe]
|
|
mov r0, #1
|
|
strb r0, [r7, #0xf]
|
|
_0230B198:
|
|
cmp r8, #2
|
|
bne _0230B1DC
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x5f
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
beq _0230B1DC
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5
|
|
ldr r3, [r0]
|
|
mov r5, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r5, [r3, #0x1c5]
|
|
bl MultiplyFixedPoint64
|
|
_0230B1DC:
|
|
cmp r8, #9
|
|
bne _0230B248
|
|
mov r0, sl
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _0230B208
|
|
mov r0, sb
|
|
bl LevitateIsActive
|
|
cmp r0, #0
|
|
bne _0230B218
|
|
_0230B208:
|
|
mov r0, sb
|
|
bl IsFloating
|
|
cmp r0, #0
|
|
beq _0230B248
|
|
_0230B218:
|
|
ldr r1, _0230B798 ; =DUNGEON_PTR
|
|
mov r0, fp
|
|
ldr r2, [r1]
|
|
mov r3, #1
|
|
mov r1, #0
|
|
strb r3, [r2, #0x1c7]
|
|
bl IntToFixedPoint64
|
|
mov r4, #0
|
|
str r4, [r7, #8]
|
|
strb r4, [r7, #0xe]
|
|
mov r0, #1
|
|
strb r0, [r7, #0xf]
|
|
_0230B248:
|
|
cmp r8, #3
|
|
bne _0230B2F4
|
|
mov r0, sl
|
|
mov r1, #0x10
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230B2F4
|
|
ldrsh r2, [r6, #0x12]
|
|
ldrsh r1, [r6, #0x16]
|
|
ldr r0, _0230B7B8 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
ldrsh r1, [r6, #0x10]
|
|
add r0, r2, r0, lsr #30
|
|
cmp r1, r0, asr #2
|
|
movle r0, #1
|
|
movgt r0, #0
|
|
and r7, r0, #0xff
|
|
mov r0, r6
|
|
mov r2, r7
|
|
mov r1, #0x80
|
|
bl UpdateStateFlags
|
|
mov r5, r0
|
|
cmp r7, #0
|
|
beq _0230B2D4
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2
|
|
ldr r3, [r0]
|
|
mov r7, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r7, [r3, #0x1c8]
|
|
bl MultiplyFixedPoint64
|
|
_0230B2D4:
|
|
cmp r5, #0
|
|
beq _0230B2F4
|
|
mov r0, sl
|
|
bl PlayEffectAnimation0x1A9__022E6214
|
|
ldr r2, _0230B7C0 ; =0x00000C4F
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0230B2F4:
|
|
cmp r8, #4
|
|
bne _0230B3A0
|
|
mov r0, sl
|
|
mov r1, #0x1a
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230B3A0
|
|
ldrsh r2, [r6, #0x12]
|
|
ldrsh r1, [r6, #0x16]
|
|
ldr r0, _0230B7B8 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
ldrsh r1, [r6, #0x10]
|
|
add r0, r2, r0, lsr #30
|
|
cmp r1, r0, asr #2
|
|
movle r0, #1
|
|
movgt r0, #0
|
|
and r7, r0, #0xff
|
|
mov r0, r6
|
|
mov r2, r7
|
|
mov r1, #2
|
|
bl UpdateStateFlags
|
|
mov r5, r0
|
|
cmp r7, #0
|
|
beq _0230B380
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2
|
|
ldr r3, [r0]
|
|
mov r7, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r7, [r3, #0x1c9]
|
|
bl MultiplyFixedPoint64
|
|
_0230B380:
|
|
cmp r5, #0
|
|
beq _0230B3A0
|
|
mov r0, sl
|
|
bl PlayEffectAnimation0x1A9__022E61C8
|
|
#ifdef JAPAN
|
|
ldr r2, _0230CD24 ; =0x0000098F
|
|
mov r0, sl
|
|
mov r1, sb
|
|
#else
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0xc50
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0230B3A0:
|
|
cmp r8, #0xc
|
|
bne _0230B44C
|
|
mov r0, sl
|
|
mov r1, #0x43
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230B44C
|
|
ldrsh r2, [r6, #0x12]
|
|
ldrsh r1, [r6, #0x16]
|
|
ldr r0, _0230B7B8 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
ldrsh r1, [r6, #0x10]
|
|
add r0, r2, r0, lsr #30
|
|
cmp r1, r0, asr #2
|
|
movle r0, #1
|
|
movgt r0, #0
|
|
and r7, r0, #0xff
|
|
mov r0, r6
|
|
mov r2, r7
|
|
mov r1, #0x10
|
|
bl UpdateStateFlags
|
|
mov r5, r0
|
|
cmp r7, #0
|
|
beq _0230B42C
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2
|
|
ldr r3, [r0]
|
|
mov r7, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r7, [r3, #0x1ca]
|
|
bl MultiplyFixedPoint64
|
|
_0230B42C:
|
|
cmp r5, #0
|
|
beq _0230B44C
|
|
mov r0, sl
|
|
bl PlayEffectAnimation0x1A9__022E64C4
|
|
#ifdef JAPAN
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x990
|
|
#else
|
|
ldr r2, _0230B7C4 ; =0x00000C51
|
|
mov r0, sl
|
|
mov r1, sb
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0230B44C:
|
|
cmp r8, #2
|
|
bne _0230B534
|
|
mov r0, sl
|
|
mov r1, #0x46
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230B4F8
|
|
ldrsh r2, [r6, #0x12]
|
|
ldrsh r1, [r6, #0x16]
|
|
ldr r0, _0230B7B8 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
ldrsh r1, [r6, #0x10]
|
|
add r0, r2, r0, lsr #30
|
|
cmp r1, r0, asr #2
|
|
movle r0, #1
|
|
movgt r0, #0
|
|
and r7, r0, #0xff
|
|
mov r0, r6
|
|
mov r2, r7
|
|
mov r1, #0x20
|
|
bl UpdateStateFlags
|
|
mov r5, r0
|
|
cmp r7, #0
|
|
beq _0230B4D8
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2
|
|
ldr r3, [r0]
|
|
mov r7, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r7, [r3, #0x1cb]
|
|
bl MultiplyFixedPoint64
|
|
_0230B4D8:
|
|
cmp r5, #0
|
|
beq _0230B4F8
|
|
mov r0, sl
|
|
bl PlayEffectAnimation0x1A9__022E6510
|
|
ldr r2, _0230B7C8 ; =0x00000C52
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0230B4F8:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x55
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
beq _0230B534
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5
|
|
ldr r3, [r0]
|
|
mov r5, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r5, [r3, #0x1cb]
|
|
bl MultiplyFixedPoint64
|
|
_0230B534:
|
|
ldrb r0, [r6, #0xbf]
|
|
cmp r0, #1
|
|
bne _0230B560
|
|
ldr r1, _0230B7CC ; =BURN_DAMAGE_MULTIPLIER
|
|
add r0, sp, #0x3c
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r2, sp, #0x3c
|
|
mov r0, fp
|
|
mov r1, fp
|
|
bl MultiplyFixedPoint64
|
|
_0230B560:
|
|
mov r0, fp
|
|
bl FixedPoint64IsZero
|
|
cmp r0, #0
|
|
bne _0230B5CC
|
|
mov r0, sl
|
|
mov r1, r8
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
beq _0230B5CC
|
|
ldr r1, _0230B798 ; =DUNGEON_PTR
|
|
mov r0, sl
|
|
ldr r2, [r1]
|
|
mov r3, #1
|
|
mov r1, #0x63
|
|
strb r3, [r2, #0x1cf]
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230B5BC
|
|
ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2
|
|
mov r0, fp
|
|
mov r1, fp
|
|
bl MultiplyFixedPoint64
|
|
b _0230B5CC
|
|
_0230B5BC:
|
|
ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5
|
|
mov r0, fp
|
|
mov r1, fp
|
|
bl MultiplyFixedPoint64
|
|
_0230B5CC:
|
|
mov r0, sl
|
|
bl GetApparentWeather
|
|
mov r5, r0
|
|
cmp r5, #1
|
|
bne _0230B634
|
|
cmp r8, #2
|
|
bne _0230B60C
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5
|
|
ldr r3, [r0]
|
|
mov r7, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r7, [r3, #0x1c4]
|
|
bl MultiplyFixedPoint64
|
|
b _0230B634
|
|
_0230B60C:
|
|
cmp r8, #3
|
|
bne _0230B634
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5
|
|
ldr r3, [r0]
|
|
mov r7, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r7, [r3, #0x1c4]
|
|
bl MultiplyFixedPoint64
|
|
_0230B634:
|
|
cmp r5, #4
|
|
bne _0230B690
|
|
cmp r8, #2
|
|
bne _0230B668
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5
|
|
ldr r3, [r0]
|
|
mov r7, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r7, [r3, #0x1c3]
|
|
bl MultiplyFixedPoint64
|
|
b _0230B690
|
|
_0230B668:
|
|
cmp r8, #3
|
|
bne _0230B690
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7B0 ; =DAMAGE_MULTIPLIER_1_5
|
|
ldr r3, [r0]
|
|
mov r7, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r7, [r3, #0x1c3]
|
|
bl MultiplyFixedPoint64
|
|
_0230B690:
|
|
cmp r5, #3
|
|
bne _0230B6C0
|
|
cmp r8, #1
|
|
beq _0230B6C0
|
|
ldr r2, _0230B7D0 ; =CLOUDY_DAMAGE_MULTIPLIER
|
|
mov r0, fp
|
|
mov r1, fp
|
|
bl MultiplyFixedPoint64
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
mov r1, #1
|
|
ldr r0, [r0]
|
|
strb r1, [r0, #0x1c2]
|
|
_0230B6C0:
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r7, [r0]
|
|
add r0, r7, #0xc000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0xcb7]
|
|
#else
|
|
ldrb r0, [r0, #0xd5b]
|
|
#endif
|
|
cmp r0, #0
|
|
bne _0230B6E0
|
|
cmp r5, #6
|
|
bne _0230B700
|
|
_0230B6E0:
|
|
cmp r8, #5
|
|
bne _0230B700
|
|
ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5
|
|
mov r3, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r3, [r7, #0x1d0]
|
|
bl MultiplyFixedPoint64
|
|
_0230B700:
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r5, [r0]
|
|
add r0, r5, #0xc000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0xcb8]
|
|
#else
|
|
ldrb r0, [r0, #0xd5c]
|
|
#endif
|
|
cmp r0, #0
|
|
beq _0230B738
|
|
cmp r8, #2
|
|
bne _0230B738
|
|
ldr r2, _0230B7A8 ; =DAMAGE_MULTIPLIER_0_5
|
|
mov r3, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r3, [r5, #0x1d1]
|
|
bl MultiplyFixedPoint64
|
|
_0230B738:
|
|
cmp r8, #5
|
|
ldreqb r0, [r6, #0xd2]
|
|
cmpeq r0, #0xb
|
|
bne _0230B768
|
|
ldr r0, _0230B798 ; =DUNGEON_PTR
|
|
ldr r2, _0230B7BC ; =DAMAGE_MULTIPLIER_2
|
|
ldr r3, [r0]
|
|
mov r5, #1
|
|
mov r0, fp
|
|
mov r1, fp
|
|
strb r5, [r3, #0x1d2]
|
|
bl MultiplyFixedPoint64
|
|
_0230B768:
|
|
mov r0, r4
|
|
_0230B76C:
|
|
add sp, sp, #0x64
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET -0x2C1
|
|
#else
|
|
#define CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET 0
|
|
#endif
|
|
_0230B774: .word ov29_02352838
|
|
_0230B778: .word MATCHUP_IMMUNE_MULTIPLIER_ERRATIC_PLAYER
|
|
_0230B77C: .word MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER
|
|
_0230B780: .word MATCHUP_NEUTRAL_MULTIPLIER_ERRATIC_PLAYER
|
|
_0230B784: .word MATCHUP_IMMUNE_MULTIPLIER
|
|
_0230B788: .word MATCHUP_SUPER_EFFECTIVE_MULTIPLIER_ERRATIC_PLAYER
|
|
_0230B78C: .word MATCHUP_NEUTRAL_MULTIPLIER
|
|
_0230B790: .word MATCHUP_NOT_VERY_EFFECTIVE_MULTIPLIER
|
|
_0230B794: .word MATCHUP_SUPER_EFFECTIVE_MULTIPLIER
|
|
_0230B798: .word DUNGEON_PTR
|
|
_0230B79C: .word TYPE_MATCHUP_COMBINATOR_TABLE
|
|
_0230B7A0: .word TINTED_LENS_MULTIPLIER
|
|
_0230B7A4: .word SOLID_ROCK_MULTIPLIER
|
|
_0230B7A8: .word DAMAGE_MULTIPLIER_0_5
|
|
_0230B7AC: .word TECHNICIAN_MOVE_POWER_THRESHOLD
|
|
_0230B7B0: .word DAMAGE_MULTIPLIER_1_5
|
|
_0230B7B4: .word 0x00000C3E + CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET
|
|
_0230B7B8: .word 0x000003E7
|
|
_0230B7BC: .word DAMAGE_MULTIPLIER_2
|
|
_0230B7C0: .word 0x00000C4F + CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET
|
|
#ifdef JAPAN
|
|
_0230CD24: .word 0x0000098F
|
|
#else
|
|
_0230B7C4: .word 0x00000C51
|
|
#endif
|
|
_0230B7C8: .word 0x00000C52 + CALC_TYPE_BASED_DAMAGE_EFFECTS_OFFSET
|
|
_0230B7CC: .word BURN_DAMAGE_MULTIPLIER
|
|
_0230B7D0: .word CLOUDY_DAMAGE_MULTIPLIER
|
|
arm_func_end CalcTypeBasedDamageEffects
|
|
|
|
arm_func_start ov29_0230B7D4
|
|
ov29_0230B7D4: ; 0x0230B7D4
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0x24
|
|
mov sb, r1
|
|
mov sl, r0
|
|
mov r0, sb
|
|
mov r4, #1
|
|
mov r8, r2
|
|
mov fp, #0
|
|
bl EntityIsValid__02308FBC
|
|
cmp r0, #0
|
|
moveq r0, r4
|
|
beq _0230BB98
|
|
mov r0, sl
|
|
mov r1, #0x6b
|
|
ldr r7, [sl, #0xb4]
|
|
ldr r6, [sb, #0xb4]
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r8, r4
|
|
cmp r8, #1
|
|
cmpne r8, #7
|
|
moveq fp, #1
|
|
cmp r8, #2
|
|
bne _0230B84C
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl FlashFireShouldActivate
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _0230BB98
|
|
_0230B84C:
|
|
cmp r8, #5
|
|
bne _0230B874
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x23
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _0230BB98
|
|
_0230B874:
|
|
cmp r8, #3
|
|
bne _0230B89C
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x24
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
bne _0230BB98
|
|
_0230B89C:
|
|
cmp r8, #9
|
|
bne _0230B8E0
|
|
mov r0, sl
|
|
mov r1, #0x53
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _0230B8C8
|
|
mov r0, sb
|
|
bl LevitateIsActive
|
|
cmp r0, #0
|
|
bne _0230B8D8
|
|
_0230B8C8:
|
|
mov r0, sb
|
|
bl IsFloating
|
|
cmp r0, #0
|
|
beq _0230B8E0
|
|
_0230B8D8:
|
|
mov r0, #1
|
|
b _0230BB98
|
|
_0230B8E0:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r8
|
|
bl ScrappyShouldActivate
|
|
ldr r1, _0230BBA0 ; =ov29_02352884
|
|
str r0, [sp]
|
|
add ip, sp, #4
|
|
ldmia r1, {r0, r1, r2, r3}
|
|
stmia ip, {r0, r1, r2, r3}
|
|
mov r5, #0
|
|
b _0230B9A0
|
|
_0230B90C:
|
|
ldr r0, [sp]
|
|
add ip, sp, #0x14
|
|
cmp r0, #0
|
|
add r0, sp, #4
|
|
ldmia r0, {r0, r1, r2, r3}
|
|
stmia ip, {r0, r1, r2, r3}
|
|
bne _0230B960
|
|
cmp fp, #0
|
|
beq _0230B960
|
|
add r0, r6, r5
|
|
ldrb r0, [r0, #0x5e]
|
|
cmp r0, #0xe
|
|
ldreqb r0, [r6, #0xfe]
|
|
cmpeq r0, #0
|
|
bne _0230B960
|
|
ldr r1, _0230BBA4 ; =DUNGEON_PTR
|
|
mov r0, #0
|
|
ldr r2, [r1]
|
|
mov r1, #1
|
|
strb r1, [r2, #0x1d4]
|
|
b _0230B978
|
|
_0230B960:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, r5, lsl #0x10
|
|
mov r2, r2, asr #0x10
|
|
mov r3, r8
|
|
bl GetTypeMatchup
|
|
_0230B978:
|
|
cmp r4, #0
|
|
beq _0230B9A8
|
|
add r1, sp, #0x14
|
|
ldr r0, [r1, r0, lsl #2]
|
|
mul r0, r4, r0
|
|
add r0, r0, r0, lsr #31
|
|
movs r4, r0, asr #1
|
|
moveq r0, #2
|
|
beq _0230BB98
|
|
add r5, r5, #1
|
|
_0230B9A0:
|
|
cmp r5, #2
|
|
blt _0230B90C
|
|
_0230B9A8:
|
|
cmp r8, #2
|
|
cmpne r8, #6
|
|
bne _0230B9D4
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #2
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
movne r0, #2
|
|
bne _0230BB98
|
|
_0230B9D4:
|
|
cmp r8, #3
|
|
bne _0230BA1C
|
|
mov r0, sl
|
|
mov r1, #0x10
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230BA1C
|
|
ldrsh r2, [r7, #0x12]
|
|
ldrsh r1, [r7, #0x16]
|
|
ldr r0, _0230BBA8 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
ldrsh r1, [r7, #0x10]
|
|
add r0, r2, r0, lsr #30
|
|
cmp r1, r0, asr #2
|
|
movle r4, r4, lsl #1
|
|
_0230BA1C:
|
|
cmp r8, #4
|
|
bne _0230BA64
|
|
mov r0, sl
|
|
mov r1, #0x1a
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230BA64
|
|
ldrsh r2, [r7, #0x12]
|
|
ldrsh r1, [r7, #0x16]
|
|
ldr r0, _0230BBA8 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
ldrsh r1, [r7, #0x10]
|
|
add r0, r2, r0, lsr #30
|
|
cmp r1, r0, asr #2
|
|
movle r4, r4, lsl #1
|
|
_0230BA64:
|
|
cmp r8, #0xc
|
|
bne _0230BAAC
|
|
mov r0, sl
|
|
mov r1, #0x43
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230BAAC
|
|
ldrsh r2, [r7, #0x12]
|
|
ldrsh r1, [r7, #0x16]
|
|
ldr r0, _0230BBA8 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
ldrsh r1, [r7, #0x10]
|
|
add r0, r2, r0, lsr #30
|
|
cmp r1, r0, asr #2
|
|
movle r4, r4, lsl #1
|
|
_0230BAAC:
|
|
cmp r8, #2
|
|
bne _0230BAF4
|
|
mov r0, sl
|
|
mov r1, #0x46
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230BAF4
|
|
ldrsh r2, [r7, #0x12]
|
|
ldrsh r1, [r7, #0x16]
|
|
ldr r0, _0230BBA8 ; =0x000003E7
|
|
add r2, r2, r1
|
|
cmp r2, r0
|
|
movgt r2, r0
|
|
mov r0, r2, asr #1
|
|
ldrsh r1, [r7, #0x10]
|
|
add r0, r2, r0, lsr #30
|
|
cmp r1, r0, asr #2
|
|
movle r4, r4, lsl #1
|
|
_0230BAF4:
|
|
cmp r4, #0
|
|
moveq r0, #2
|
|
beq _0230BB98
|
|
mov r0, sl
|
|
mov r1, r8
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
mov r0, sl
|
|
movne r4, r4, lsl #1
|
|
bl GetApparentWeather
|
|
cmp r0, #1
|
|
bne _0230BB3C
|
|
cmp r8, #2
|
|
moveq r4, r4, lsl #1
|
|
beq _0230BB3C
|
|
cmp r8, #3
|
|
moveq r0, #2
|
|
beq _0230BB98
|
|
_0230BB3C:
|
|
ldr r0, _0230BBA4 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
add r0, r1, #0xc000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0xcb7]
|
|
#else
|
|
ldrb r0, [r0, #0xd5b]
|
|
#endif
|
|
cmp r0, #0
|
|
beq _0230BB60
|
|
cmp r8, #5
|
|
moveq r0, #2
|
|
beq _0230BB98
|
|
_0230BB60:
|
|
add r0, r1, #0xc000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0xcb8]
|
|
#else
|
|
ldrb r0, [r0, #0xd5c]
|
|
#endif
|
|
cmp r0, #0
|
|
beq _0230BB7C
|
|
cmp r8, #2
|
|
moveq r0, #2
|
|
beq _0230BB98
|
|
_0230BB7C:
|
|
cmp r8, #5
|
|
ldreqb r0, [r7, #0xd2]
|
|
cmpeq r0, #0xb
|
|
moveq r4, r4, lsl #1
|
|
cmp r4, #3
|
|
movge r4, #3
|
|
add r0, r4, #2
|
|
_0230BB98:
|
|
add sp, sp, #0x24
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0230BBA0: .word ov29_02352884
|
|
_0230BBA4: .word DUNGEON_PTR
|
|
_0230BBA8: .word 0x000003E7
|
|
arm_func_end ov29_0230B7D4
|
|
|
|
arm_func_start CalcDamage
|
|
CalcDamage: ; 0x0230BBAC
|
|
#ifdef JAPAN
|
|
#define CALC_DAMAGE_OFFSET -4
|
|
#else
|
|
#define CALC_DAMAGE_OFFSET 0
|
|
#endif
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xc0
|
|
ldr r4, _0230C450 ; =DUNGEON_PTR
|
|
mov sl, r0
|
|
ldr r4, [r4]
|
|
ldr r6, [sl, #0xb4]
|
|
ldr r8, [sp, #0xec]
|
|
str r2, [sp, #0xc]
|
|
mov sb, r1
|
|
ldr r1, [sp, #0xf4]
|
|
mov r0, r8
|
|
str r1, [sp, #0xf4]
|
|
ldr r1, [sp, #0xf8]
|
|
str r3, [sp, #0x10]
|
|
str r1, [sp, #0xf8]
|
|
ldr r1, [sp, #0xf0]
|
|
add r5, r4, #0x184
|
|
ldr r7, [sb, #0xb4]
|
|
str r1, [sp, #0x1c]
|
|
bl ResetDamageData
|
|
ldrb r0, [r6, #0x221 + CALC_DAMAGE_OFFSET]
|
|
cmp r0, #0
|
|
beq _0230BC1C
|
|
ldr r1, _0230C454 ; =ME_FIRST_MULTIPLIER
|
|
ldr r0, [sp, #0x1c]
|
|
ldr r1, [r1]
|
|
bl MultiplyByFixedPoint
|
|
str r0, [sp, #0x1c]
|
|
_0230BC1C:
|
|
mov r0, sl
|
|
mov r1, #0x5c
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230BC50
|
|
ldr r0, [sp, #0xf4]
|
|
bl IsRecoilMove
|
|
cmp r0, #0
|
|
ldrne r0, [sp, #0x1c]
|
|
addne r0, r0, r0, lsl #1
|
|
addne r0, r0, r0, lsr #31
|
|
movne r0, r0, asr #1
|
|
strne r0, [sp, #0x1c]
|
|
_0230BC50:
|
|
mov r0, sl
|
|
mov r1, #0x65
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230BC84
|
|
ldr r0, [sp, #0xf4]
|
|
bl IsPunchMove
|
|
cmp r0, #0
|
|
beq _0230BC84
|
|
ldr r0, [sp, #0x1c]
|
|
mov r1, #0x180
|
|
bl MultiplyByFixedPoint
|
|
str r0, [sp, #0x1c]
|
|
_0230BC84:
|
|
mov r0, sl
|
|
mov r1, #0x6b
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #1
|
|
strne r0, [sp, #0xc]
|
|
ldr r1, _0230C458 ; =0x000001D3
|
|
ldr r0, [sp, #0xf4]
|
|
cmp r0, r1
|
|
ldreqb r0, [r6, #0x5e]
|
|
streq r0, [sp, #0xc]
|
|
ldr r0, [sp, #0xf4]
|
|
bl MoveIsNotPhysical
|
|
str r0, [sp, #0x18]
|
|
bl ResetDamageCalcDiagnostics
|
|
ldrb r0, [r6, #7]
|
|
cmp r0, #0
|
|
bne _0230BD34
|
|
add r0, r6, #0x100
|
|
ldrh r1, [r0, #0x46 + CALC_DAMAGE_OFFSET]
|
|
sub r2, sp, #4
|
|
strh r1, [r2]
|
|
ldrh r0, [r0, #0x48 + CALC_DAMAGE_OFFSET]
|
|
strh r0, [r2, #2]
|
|
ldr r0, [r2]
|
|
bl CeilFixedPoint
|
|
cmp r0, #0
|
|
bne _0230BD34
|
|
mov r0, #1
|
|
str r0, [r8]
|
|
mov r0, #0
|
|
str r0, [r8, #4]
|
|
mov r0, #2
|
|
str r0, [r8, #8]
|
|
ldr r0, [sp, #0xf4]
|
|
ldr r1, [sp, #0xc]
|
|
strb r1, [r8, #0xc]
|
|
bl GetMoveCategory
|
|
strb r0, [r8, #0xd]
|
|
mov r0, #0
|
|
strb r0, [r8, #0xe]
|
|
strb r0, [r8, #0xf]
|
|
strb r0, [r8, #0x10]
|
|
b _0230D054
|
|
_0230BD34:
|
|
ldr r1, _0230C45C ; =0x00000163
|
|
ldr r0, [sp, #0xf4]
|
|
cmp r0, r1
|
|
bne _0230BDA0
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x35
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
beq _0230BDA0
|
|
mov r0, #1
|
|
str r0, [r8]
|
|
mov r0, #0
|
|
str r0, [r8, #4]
|
|
mov r0, #2
|
|
str r0, [r8, #8]
|
|
ldr r0, [sp, #0xf4]
|
|
ldr r1, [sp, #0xc]
|
|
strb r1, [r8, #0xc]
|
|
bl GetMoveCategory
|
|
strb r0, [r8, #0xd]
|
|
mov r0, #0
|
|
strb r0, [r8, #0xe]
|
|
strb r0, [r8, #0xf]
|
|
strb r0, [r8, #0x10]
|
|
b _0230D054
|
|
_0230BDA0:
|
|
ldr r0, [sp, #0xf4]
|
|
ldr r1, [sp, #0xc]
|
|
strb r1, [r8, #0xc]
|
|
bl GetMoveCategory
|
|
strb r0, [r8, #0xd]
|
|
ldr r0, [sp, #0xc]
|
|
mov r4, #0
|
|
strb r0, [r5]
|
|
ldr r0, [sp, #0x18]
|
|
mov r1, #0x60
|
|
str r0, [r5, #4]
|
|
add r0, r6, r0, lsl #2
|
|
ldr r0, [r0, #0x34]
|
|
mov fp, r4
|
|
str r0, [sp, #0x3c]
|
|
ldr r0, [sp, #0x18]
|
|
add r0, r7, r0, lsl #2
|
|
ldr r0, [r0, #0x3c]
|
|
str r0, [sp, #0x38]
|
|
mov r0, sl
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230BE40
|
|
ldrb r1, [r7, #0x1c]
|
|
ldrb r0, [r7, #0x1d]
|
|
cmp r1, r0
|
|
blo _0230BE28
|
|
ldr r0, [sp, #0x18]
|
|
cmp r0, #1
|
|
ldreqb r0, [r5, #0x32]
|
|
addeq r4, r4, #1
|
|
addeq r0, r0, #1
|
|
streqb r0, [r5, #0x32]
|
|
b _0230BE40
|
|
_0230BE28:
|
|
ldr r0, [sp, #0x18]
|
|
cmp r0, #0
|
|
ldreqb r0, [r5, #0x32]
|
|
addeq r4, r4, #1
|
|
addeq r0, r0, #1
|
|
streqb r0, [r5, #0x32]
|
|
_0230BE40:
|
|
ldr r0, [sp, #0xf8]
|
|
cmp r0, #0
|
|
ldr r0, [sp, #0x18]
|
|
add r0, r6, r0, lsl #1
|
|
ldrsh r0, [r0, #0x24]
|
|
str r0, [sp, #0x44]
|
|
beq _0230BE70
|
|
ldr r0, [sp, #0xc]
|
|
cmp r0, #2
|
|
ldreqsh r0, [r6, #0x30]
|
|
streqh r0, [r5, #0x10]
|
|
addeq r4, r4, r0
|
|
_0230BE70:
|
|
mov r0, sl
|
|
mov r1, #0x22
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrneb r0, [r5, #0x34]
|
|
mov r1, #0x23
|
|
addne r4, r4, #1
|
|
addne r0, r0, #1
|
|
strneb r0, [r5, #0x34]
|
|
mov r0, sl
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrneb r0, [r5, #0x34]
|
|
mov r1, #0x3c
|
|
subne r4, r4, #1
|
|
subne r0, r0, #1
|
|
strneb r0, [r5, #0x34]
|
|
mov r0, sl
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrneb r0, [r6, #0x166 + CALC_DAMAGE_OFFSET]
|
|
mov r1, #0x32
|
|
cmpne r0, #0
|
|
ldrneb r0, [r5, #0x34]
|
|
addne r4, r4, #1
|
|
addne r0, r0, #1
|
|
strneb r0, [r5, #0x34]
|
|
mov r0, sl
|
|
bl NearbyAllyIqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldr r0, [sp, #0x18]
|
|
addne r4, r4, #1
|
|
cmp r0, #0
|
|
mov r0, sl
|
|
bne _0230BFA8
|
|
mov r1, #0x68
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230BF5C
|
|
ldrsh r0, [r6, #4]
|
|
ldrsh r1, [r7, #4]
|
|
bl GendersEqualNotGenderless
|
|
cmp r0, #0
|
|
ldrneb r0, [r5, #0x32]
|
|
addne r4, r4, #1
|
|
addne r0, r0, #1
|
|
strneb r0, [r5, #0x32]
|
|
bne _0230BF5C
|
|
ldrsh r0, [r6, #4]
|
|
bl GetMonsterGenderVeneer
|
|
cmp r0, #3
|
|
beq _0230BF5C
|
|
ldrsh r0, [r7, #4]
|
|
bl GetMonsterGenderVeneer
|
|
cmp r0, #3
|
|
ldrneb r0, [r5, #0x32]
|
|
subne r4, r4, #1
|
|
subne r0, r0, #1
|
|
strneb r0, [r5, #0x32]
|
|
_0230BF5C:
|
|
mov r0, sl
|
|
bl GetApparentWeather
|
|
cmp r0, #1
|
|
bne _0230C040
|
|
mov r0, sl
|
|
mov r1, #0x71
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _0230BF94
|
|
mov r0, sl
|
|
mov r1, #0x71
|
|
bl OtherMonsterAbilityIsActive
|
|
cmp r0, #0
|
|
beq _0230C040
|
|
_0230BF94:
|
|
add r4, r4, #1
|
|
ldrb r0, [r5, #0x32]
|
|
add r0, r0, #1
|
|
strb r0, [r5, #0x32]
|
|
b _0230C040
|
|
_0230BFA8:
|
|
mov r1, #0x5a
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230BFD4
|
|
mov r0, sl
|
|
bl GetApparentWeather
|
|
cmp r0, #1
|
|
ldreqb r0, [r5, #0x32]
|
|
addeq r4, r4, #2
|
|
addeq r0, r0, #2
|
|
streqb r0, [r5, #0x32]
|
|
_0230BFD4:
|
|
mov r0, sb
|
|
bl GetApparentWeather
|
|
cmp r0, #1
|
|
bne _0230C01C
|
|
mov r0, sb
|
|
mov r1, #0x71
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _0230C00C
|
|
mov r0, sb
|
|
mov r1, #0x71
|
|
bl OtherMonsterAbilityIsActive
|
|
cmp r0, #0
|
|
beq _0230C01C
|
|
_0230C00C:
|
|
add fp, fp, #1
|
|
ldrb r0, [r5, #0x33]
|
|
add r0, r0, #1
|
|
strb r0, [r5, #0x33]
|
|
_0230C01C:
|
|
mov r0, sb
|
|
bl GetApparentWeather
|
|
cmp r0, #2
|
|
bne _0230C040
|
|
ldrb r0, [r7, #0x5e]
|
|
cmp r0, #0xd
|
|
ldrneb r0, [r7, #0x5f]
|
|
cmpne r0, #0xd
|
|
addeq fp, fp, #2
|
|
_0230C040:
|
|
ldrsh r1, [r6, #4]
|
|
ldr r0, _0230C460 ; =0x000001A3
|
|
cmp r1, r0
|
|
addeq r4, r4, #2
|
|
cmp r1, #0x1a4
|
|
ldr r0, _0230C464 ; =0x000001A5
|
|
subeq r4, r4, #2
|
|
cmp r1, r0
|
|
ldr r0, _0230C468 ; =0x00000211
|
|
subeq r4, r4, #2
|
|
cmp r1, r0
|
|
subeq r4, r4, #2
|
|
beq _0230C07C
|
|
cmp r1, #0x218
|
|
addeq r4, r4, #2
|
|
_0230C07C:
|
|
ldr r0, [sp, #0x44]
|
|
add r0, r0, r4
|
|
str r0, [sp, #0x44]
|
|
ldrb r0, [r6, #0x167 + CALC_DAMAGE_OFFSET]
|
|
cmp r0, #0
|
|
beq _0230C0AC
|
|
mov r0, sl
|
|
mov r1, #0x4f
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0x14
|
|
strne r0, [sp, #0x44]
|
|
_0230C0AC:
|
|
ldr r0, [sp, #0x18]
|
|
cmp r0, #0
|
|
add r0, r7, r0, lsl #1
|
|
ldrsh r4, [r0, #0x28]
|
|
bne _0230C0F4
|
|
ldrb r0, [r7, #0xd2]
|
|
mov r1, #0x31
|
|
cmp r0, #6
|
|
moveq r0, #1
|
|
streqb r0, [r5, #0x51]
|
|
mov r0, sb
|
|
addeq fp, fp, #1
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrneb r0, [r5, #0x35]
|
|
subne fp, fp, #1
|
|
subne r0, r0, #1
|
|
strneb r0, [r5, #0x35]
|
|
_0230C0F4:
|
|
mov r0, sb
|
|
mov r1, #0x22
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrneb r0, [r5, #0x35]
|
|
mov r1, #0x23
|
|
subne fp, fp, #1
|
|
subne r0, r0, #1
|
|
strneb r0, [r5, #0x35]
|
|
mov r0, sb
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrneb r0, [r5, #0x35]
|
|
addne fp, fp, #1
|
|
addne r0, r0, #1
|
|
strneb r0, [r5, #0x35]
|
|
ldrsh r1, [r7, #4]
|
|
ldr r0, _0230C460 ; =0x000001A3
|
|
cmp r1, r0
|
|
subeq fp, fp, #2
|
|
cmp r1, #0x1a4
|
|
ldr r0, _0230C464 ; =0x000001A5
|
|
addeq fp, fp, #2
|
|
cmp r1, r0
|
|
#ifdef JAPAN
|
|
ldrsh r1, [r6, #4]
|
|
#endif
|
|
ldr r0, _0230C468 ; =0x00000211
|
|
subeq fp, fp, #2
|
|
cmp r1, r0
|
|
addeq fp, fp, #2
|
|
beq _0230C170
|
|
cmp r1, #0x218
|
|
subeq fp, fp, #2
|
|
_0230C170:
|
|
ldr r1, _0230C46C ; =0x000001BD
|
|
ldr r0, [sp, #0xf4]
|
|
add r4, r4, fp
|
|
cmp r0, r1
|
|
bne _0230C1F4
|
|
ldrsh r1, [r7, #0x24]
|
|
mov r0, #0
|
|
cmp r1, #0xa
|
|
subgt r1, r1, #0xa
|
|
addgt r0, r0, r1
|
|
movgt r0, r0, lsl #0x10
|
|
ldrsh r1, [r7, #0x28]
|
|
movgt r0, r0, asr #0x10
|
|
cmp r1, #0xa
|
|
subgt r1, r1, #0xa
|
|
addgt r0, r0, r1
|
|
movgt r0, r0, lsl #0x10
|
|
ldrsh r1, [r7, #0x26]
|
|
movgt r0, r0, asr #0x10
|
|
cmp r1, #0xa
|
|
subgt r1, r1, #0xa
|
|
addgt r0, r0, r1
|
|
movgt r0, r0, lsl #0x10
|
|
ldrsh r1, [r7, #0x2a]
|
|
movgt r0, r0, asr #0x10
|
|
cmp r1, #0xa
|
|
subgt r1, r1, #0xa
|
|
addgt r0, r0, r1
|
|
movgt r0, r0, lsl #0x10
|
|
ldr r1, [sp, #0x44]
|
|
movgt r0, r0, asr #0x10
|
|
add r0, r1, r0
|
|
str r0, [sp, #0x44]
|
|
_0230C1F4:
|
|
mov r0, sl
|
|
mov r1, #0x67
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
movne r0, #0x100
|
|
movne r4, #0xa
|
|
strne r0, [sp, #0x38]
|
|
bne _0230C23C
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x67
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
movne r0, #0xa
|
|
strne r0, [sp, #0x44]
|
|
movne r0, #0x100
|
|
strne r0, [sp, #0x3c]
|
|
_0230C23C:
|
|
ldr r0, [sp, #0x44]
|
|
ldr r1, [sp, #0x18]
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
strlt r0, [sp, #0x44]
|
|
ldr r0, [sp, #0x44]
|
|
ldr r2, _0230C470 ; =OFFENSIVE_STAT_STAGE_MULTIPLIERS
|
|
cmp r0, #0x14
|
|
movgt r0, #0x14
|
|
strgt r0, [sp, #0x44]
|
|
ldr r0, [sp, #0x44]
|
|
strb r0, [r5, #0xa]
|
|
add r0, r6, #0x1a
|
|
ldrb r3, [r0, r1]
|
|
ldr r1, [sp, #0x44]
|
|
ldr fp, [r2, r1, lsl #2]
|
|
ldr r1, [sp, #0x18]
|
|
strh r3, [r5, #0xc]
|
|
ldrb r0, [r0, r1]
|
|
mov r1, fp
|
|
mov r0, r0, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
ldr r1, [sp, #0x3c]
|
|
bl MultiplyByFixedPoint
|
|
mov r0, r0, asr #8
|
|
cmp r4, #0
|
|
movlt r4, #0
|
|
str r0, [sp, #0x90]
|
|
cmp r4, #0x14
|
|
movgt r4, #0x14
|
|
ldr r1, [sp, #0x18]
|
|
strb r4, [r5, #0xb]
|
|
add r0, r7, #0x1c
|
|
ldrb r2, [r0, r1]
|
|
ldr r1, _0230C474 ; =DEFENSIVE_STAT_STAGE_MULTIPLIERS
|
|
strh r2, [r5, #0xe]
|
|
ldr r2, [sp, #0x18]
|
|
ldr r1, [r1, r4, lsl #2]
|
|
ldrb r0, [r0, r2]
|
|
mov r0, r0, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
ldr r1, [sp, #0x38]
|
|
bl MultiplyByFixedPoint
|
|
mov r0, r0, asr #8
|
|
str r0, [sp, #0x94]
|
|
ldrb r0, [r6, #6]
|
|
cmp r0, #0
|
|
bne _0230C314
|
|
ldr r1, [sp, #0x18]
|
|
mov r0, sl
|
|
bl ExclusiveItemOffenseBoost
|
|
ldr r1, [sp, #0x90]
|
|
add r0, r1, r0
|
|
str r0, [sp, #0x90]
|
|
_0230C314:
|
|
ldrb r0, [r7, #6]
|
|
cmp r0, #0
|
|
bne _0230C338
|
|
ldr r1, [sp, #0x18]
|
|
mov r0, sb
|
|
bl ExclusiveItemDefenseBoost
|
|
ldr r1, [sp, #0x94]
|
|
add r0, r1, r0
|
|
str r0, [sp, #0x94]
|
|
_0230C338:
|
|
ldr r0, [sp, #0x18]
|
|
cmp r0, #0
|
|
bne _0230C4D8
|
|
mov r0, sl
|
|
mov r1, #0x1a
|
|
bl ItemIsActive__0230A9DC
|
|
cmp r0, #0
|
|
beq _0230C378
|
|
ldr r0, _0230C478 ; =POWER_BAND_STAT_BOOST
|
|
ldr r1, [sp, #0x90]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x90]
|
|
ldrb r0, [r5, #0x30]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x30]
|
|
_0230C378:
|
|
mov r0, sl
|
|
mov r1, #0x32
|
|
bl ItemIsActive__0230A9DC
|
|
cmp r0, #0
|
|
beq _0230C3AC
|
|
ldr r0, _0230C47C ; =MUNCH_BELT_STAT_BOOST
|
|
ldr r1, [sp, #0x90]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x90]
|
|
ldrb r0, [r5, #0x30]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x30]
|
|
_0230C3AC:
|
|
mov r0, sl
|
|
bl AuraBowIsActive
|
|
cmp r0, #0
|
|
beq _0230C3DC
|
|
ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST
|
|
ldr r1, [sp, #0x90]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x90]
|
|
ldrb r0, [r5, #0x31]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x31]
|
|
_0230C3DC:
|
|
ldr r0, [sp, #0xf8]
|
|
cmp r0, #0
|
|
beq _0230C5E0
|
|
mov r0, sb
|
|
mov r1, #0x25
|
|
bl ItemIsActive__0230A9DC
|
|
cmp r0, #0
|
|
beq _0230C41C
|
|
ldr r0, _0230C484 ; =DEF_SCARF_STAT_BOOST
|
|
ldr r1, [sp, #0x94]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x94]
|
|
ldrb r0, [r5, #0x36]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x36]
|
|
_0230C41C:
|
|
mov r0, sb
|
|
bl AuraBowIsActive
|
|
cmp r0, #0
|
|
beq _0230C5E0
|
|
ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST
|
|
ldr r1, [sp, #0x94]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x94]
|
|
ldrb r0, [r5, #0x36]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x36]
|
|
b _0230C5E0
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
#define CALC_DAMAGE_DATA_OFFSET -0x2C1
|
|
#else
|
|
#define CALC_DAMAGE_DATA_OFFSET 0
|
|
#endif
|
|
_0230C450: .word DUNGEON_PTR
|
|
_0230C454: .word ME_FIRST_MULTIPLIER
|
|
_0230C458: .word 0x000001D3
|
|
_0230C45C: .word 0x00000163
|
|
_0230C460: .word 0x000001A3
|
|
_0230C464: .word 0x000001A5
|
|
_0230C468: .word 0x00000211
|
|
_0230C46C: .word 0x000001BD
|
|
_0230C470: .word OFFENSIVE_STAT_STAGE_MULTIPLIERS
|
|
_0230C474: .word DEFENSIVE_STAT_STAGE_MULTIPLIERS
|
|
_0230C478: .word POWER_BAND_STAT_BOOST
|
|
_0230C47C: .word MUNCH_BELT_STAT_BOOST
|
|
_0230C480: .word AURA_BOW_STAT_BOOST
|
|
_0230C484: .word DEF_SCARF_STAT_BOOST
|
|
_0230C488: .word ZINC_BAND_STAT_BOOST
|
|
_0230C48C: .word SPECIAL_BAND_STAT_BOOST
|
|
_0230C490: .word 0x00000C53 + CALC_DAMAGE_DATA_OFFSET
|
|
_0230C494: .word 0x00000C54 + CALC_DAMAGE_DATA_OFFSET
|
|
_0230C498: .word 0x00000C55 + CALC_DAMAGE_DATA_OFFSET
|
|
_0230C49C: .word 0x000003E7
|
|
_0230C4A0: .word DAMAGE_FORMULA_FLV_DEFICIT_DIVISOR
|
|
_0230C4A4: .word ov29_02352984
|
|
_0230C4A8: .word ov29_02352990
|
|
_0230C4AC: .word ov29_0235299C
|
|
_0230C4B0: .word DAMAGE_FORMULA_AT_PREFACTOR
|
|
_0230C4B4: .word DAMAGE_FORMULA_DEF_PREFACTOR
|
|
_0230C4B8: .word DAMAGE_FORMULA_FLV_SHIFT
|
|
_0230C4BC: .word DAMAGE_FORMULA_LN_ARG_PREFACTOR
|
|
_0230C4C0: .word DAMAGE_FORMULA_LN_PREFACTOR
|
|
_0230C4C4: .word DAMAGE_FORMULA_CONSTANT_SHIFT
|
|
_0230C4C8: .word DAMAGE_FORMULA_NON_TEAM_MEMBER_MODIFIER
|
|
_0230C4CC: .word DAMAGE_FORMULA_MAX_BASE
|
|
_0230C4D0: .word ov29_02352838
|
|
_0230C4D4: .word DAMAGE_FORMULA_MIN_BASE
|
|
_0230C4D8:
|
|
ldr r0, [sp, #0xf8]
|
|
cmp r0, #0
|
|
beq _0230C548
|
|
mov r0, sb
|
|
mov r1, #0x29
|
|
bl ItemIsActive__0230A9DC
|
|
cmp r0, #0
|
|
beq _0230C518
|
|
ldr r0, _0230C488 ; =ZINC_BAND_STAT_BOOST
|
|
ldr r1, [sp, #0x94]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x94]
|
|
ldrb r0, [r5, #0x37]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x37]
|
|
_0230C518:
|
|
mov r0, sb
|
|
bl AuraBowIsActive
|
|
cmp r0, #0
|
|
beq _0230C548
|
|
ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST
|
|
ldr r1, [sp, #0x94]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x94]
|
|
ldrb r0, [r5, #0x36]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x36]
|
|
_0230C548:
|
|
mov r0, sl
|
|
mov r1, #0x28
|
|
bl ItemIsActive__0230A9DC
|
|
cmp r0, #0
|
|
beq _0230C57C
|
|
ldr r0, _0230C48C ; =SPECIAL_BAND_STAT_BOOST
|
|
ldr r1, [sp, #0x90]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x90]
|
|
ldrb r0, [r5, #0x31]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x31]
|
|
_0230C57C:
|
|
mov r0, sl
|
|
mov r1, #0x32
|
|
bl ItemIsActive__0230A9DC
|
|
cmp r0, #0
|
|
beq _0230C5B0
|
|
ldr r0, _0230C47C ; =MUNCH_BELT_STAT_BOOST
|
|
ldr r1, [sp, #0x90]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x90]
|
|
ldrb r0, [r5, #0x31]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x31]
|
|
_0230C5B0:
|
|
mov r0, sb
|
|
bl AuraBowIsActive
|
|
cmp r0, #0
|
|
beq _0230C5E0
|
|
ldr r0, _0230C480 ; =AURA_BOW_STAT_BOOST
|
|
ldr r1, [sp, #0x90]
|
|
ldrsh r2, [r0]
|
|
add r0, r1, r2
|
|
str r0, [sp, #0x90]
|
|
ldrb r0, [r5, #0x31]
|
|
add r0, r0, r2
|
|
strb r0, [r5, #0x31]
|
|
_0230C5E0:
|
|
ldr r0, [sp, #0x10]
|
|
mov r1, fp
|
|
mov r0, r0, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
ldr r1, [sp, #0x3c]
|
|
bl MultiplyByFixedPoint
|
|
mov r1, r0
|
|
add r0, sp, #0xa0
|
|
bl FixedPoint32To64
|
|
mov r0, #0x64
|
|
bl DungeonRandInt
|
|
mov r4, #1
|
|
str r0, [sp, #0x40]
|
|
add r0, r6, #0x100
|
|
ldrh r1, [r0, #0x5a + CALC_DAMAGE_OFFSET]
|
|
mov fp, r4
|
|
str r4, [sp, #0x28]
|
|
bic r1, r1, #0x100
|
|
strh r1, [r0, #0x5a + CALC_DAMAGE_OFFSET]
|
|
ldrh r1, [r0, #0x58 + CALC_DAMAGE_OFFSET]
|
|
str r4, [sp, #0x2c]
|
|
bic r1, r1, #0x100
|
|
strh r1, [r0, #0x58 + CALC_DAMAGE_OFFSET]
|
|
ldr r0, [sp, #0xf4]
|
|
bl MoveIsNotPhysical
|
|
str r0, [sp, #0x30]
|
|
cmp r0, #0
|
|
bne _0230C6B8
|
|
mov r0, sl
|
|
mov r1, #0x11
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230C6B8
|
|
ldr r0, [sl, #0xb4]
|
|
mov r1, r4
|
|
str r0, [sp, #0x24]
|
|
mov r0, sl
|
|
bl MonsterHasNegativeStatus
|
|
str r0, [sp, #0x48]
|
|
ldr r0, [sp, #0x24]
|
|
ldr r2, [sp, #0x48]
|
|
mov r1, r4
|
|
bl UpdateStateFlags
|
|
ldr r1, [sp, #0x48]
|
|
cmp r1, #0
|
|
movne r4, r4, lsl #1
|
|
cmp r0, #0
|
|
beq _0230C6B8
|
|
mov r0, sl
|
|
bl PlayEffectAnimation0x1A9__022E6130
|
|
mov r0, sl
|
|
mov r1, sb
|
|
ldr r2, _0230C490 ; =0x00000C53
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0230C6B8:
|
|
mov r0, sl
|
|
mov r1, #0x22
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
bne _0230C6E0
|
|
mov r0, sl
|
|
mov r1, #0x4b
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230C748
|
|
_0230C6E0:
|
|
ldr r0, [sp, #0x40]
|
|
cmp r0, #0x21
|
|
ldr r0, [sl, #0xb4]
|
|
bge _0230C700
|
|
ldr r1, [sp, #0x30]
|
|
cmp r1, #0
|
|
moveq r1, #1
|
|
beq _0230C704
|
|
_0230C700:
|
|
mov r1, #0
|
|
_0230C704:
|
|
and r1, r1, #0xff
|
|
str r1, [sp, #0x34]
|
|
ldr r2, [sp, #0x34]
|
|
mov r1, #0x100
|
|
bl UpdateStateFlags
|
|
ldr r1, [sp, #0x34]
|
|
cmp r1, #0
|
|
addne r4, r4, r4, lsl #1
|
|
movne fp, fp, lsl #1
|
|
cmp r0, #0
|
|
beq _0230C748
|
|
mov r0, sl
|
|
bl PlayEffectAnimation0x1A9__022E617C
|
|
mov r0, sl
|
|
mov r1, sb
|
|
ldr r2, _0230C494 ; =0x00000C54
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0230C748:
|
|
mov r0, sl
|
|
mov r1, #0x30
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230C76C
|
|
ldr r0, [sp, #0x30]
|
|
cmp r0, #0
|
|
addeq r4, r4, r4, lsl #1
|
|
moveq fp, fp, lsl #1
|
|
_0230C76C:
|
|
ldr r0, [sl, #0xb4]
|
|
mov r1, #0x38
|
|
ldrb r0, [r0, #6]
|
|
cmp r0, #0
|
|
moveq r0, #1
|
|
streq r0, [sp, #0x14]
|
|
movne r0, #0
|
|
strne r0, [sp, #0x14]
|
|
mov r0, sl
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230C7D4
|
|
ldr r0, [sp, #0x30]
|
|
cmp r0, #1
|
|
bne _0230C7D4
|
|
ldr r0, _0230C450 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
ldr r0, [sp, #0x14]
|
|
add r0, r1, r0
|
|
add r0, r0, #0x3000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0xd92]
|
|
#else
|
|
ldrb r0, [r0, #0xe36]
|
|
#endif
|
|
cmp r0, #0
|
|
movne r0, #0xa
|
|
mulne r0, fp, r0
|
|
rsbne r4, r4, r4, lsl #4
|
|
movne fp, r0
|
|
_0230C7D4:
|
|
mov r0, sl
|
|
mov r1, #0x3f
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230C820
|
|
ldr r0, [sp, #0x30]
|
|
cmp r0, #1
|
|
bne _0230C820
|
|
ldr r0, _0230C450 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
ldr r0, [sp, #0x14]
|
|
add r0, r1, r0
|
|
add r0, r0, #0x3000
|
|
#ifdef JAPAN
|
|
ldrb r0, [r0, #0xd90]
|
|
#else
|
|
ldrb r0, [r0, #0xe34]
|
|
#endif
|
|
cmp r0, #0
|
|
movne r0, #0xa
|
|
mulne r0, fp, r0
|
|
rsbne r4, r4, r4, lsl #4
|
|
movne fp, r0
|
|
_0230C820:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #6
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
beq _0230C84C
|
|
ldr r0, [sp, #0x30]
|
|
cmp r0, #0
|
|
moveq r4, r4, lsl #2
|
|
addeq fp, fp, fp, lsl #2
|
|
_0230C84C:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x34
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
beq _0230C8E0
|
|
ldr r0, [sp, #0x30]
|
|
cmp r0, #0
|
|
bne _0230C8E0
|
|
ldr r0, [sb, #0xb4]
|
|
mov r1, #1
|
|
str r0, [sp, #0x20]
|
|
mov r0, sb
|
|
bl MonsterHasNegativeStatus
|
|
str r0, [sp, #0x4c]
|
|
ldr r0, [sp, #0x20]
|
|
ldr r2, [sp, #0x4c]
|
|
mov r1, #8
|
|
bl UpdateStateFlags
|
|
ldr r1, [sp, #0x4c]
|
|
cmp r1, #0
|
|
beq _0230C8C0
|
|
ldr r1, [sp, #0x28]
|
|
add r1, r1, r1, lsl #1
|
|
str r1, [sp, #0x28]
|
|
ldr r1, [sp, #0x2c]
|
|
mov r1, r1, lsl #1
|
|
str r1, [sp, #0x2c]
|
|
_0230C8C0:
|
|
cmp r0, #0
|
|
beq _0230C8E0
|
|
mov r0, sb
|
|
bl PlayEffectAnimation0x18E
|
|
mov r0, sl
|
|
mov r1, sb
|
|
ldr r2, _0230C498 ; =0x00000C55
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0230C8E0:
|
|
add r0, sp, #0x90
|
|
ldr r2, [r0]
|
|
add r1, sp, #0x94
|
|
mul r0, r2, r4
|
|
ldr r3, [r1]
|
|
ldr r2, [sp, #0x28]
|
|
cmp fp, #1
|
|
mul r2, r3, r2
|
|
str r2, [r1]
|
|
add r1, sp, #0x90
|
|
str r0, [r1]
|
|
beq _0230C920
|
|
mov r1, fp
|
|
bl _s32_div_f
|
|
add r1, sp, #0x90
|
|
str r0, [r1]
|
|
_0230C920:
|
|
ldr r0, [sp, #0x2c]
|
|
cmp r0, #1
|
|
beq _0230C940
|
|
add r4, sp, #0x94
|
|
mov r1, r0
|
|
ldr r0, [r4]
|
|
bl _s32_div_f
|
|
str r0, [r4]
|
|
_0230C940:
|
|
ldr r0, [sp, #0x90]
|
|
strh r0, [r5, #0x12]
|
|
ldr r0, [sp, #0x94]
|
|
strh r0, [r5, #0x14]
|
|
ldr r0, [sp, #0x90]
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
strlt r0, [sp, #0x90]
|
|
ldr r1, [sp, #0x90]
|
|
ldr r0, _0230C49C ; =0x000003E7
|
|
cmp r1, r0
|
|
strge r0, [sp, #0x90]
|
|
ldr r1, [sp, #0x94]
|
|
add r0, sp, #0x98
|
|
strh r1, [r5, #0x1a]
|
|
ldr r1, [sp, #0x94]
|
|
bl IntToFixedPoint64
|
|
ldr r2, [sp, #0x90]
|
|
ldr r1, [sp, #0x94]
|
|
add r0, sp, #0x88
|
|
sub r1, r2, r1
|
|
bl IntToFixedPoint64
|
|
ldr r1, _0230C4A0 ; =DAMAGE_FORMULA_FLV_DEFICIT_DIVISOR
|
|
add r0, sp, #0x80
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r0, sp, #0x88
|
|
add r2, sp, #0x80
|
|
mov r1, r0
|
|
bl DivideFixedPoint64
|
|
ldrb r1, [r6, #0xa]
|
|
add r0, sp, #0x80
|
|
bl IntToFixedPoint64
|
|
add r0, sp, #0xa8
|
|
add r1, sp, #0x80
|
|
add r2, sp, #0x88
|
|
bl AddFixedPoint64
|
|
ldr r1, [sp, #0x90]
|
|
add r0, sp, #0x80
|
|
bl IntToFixedPoint64
|
|
add r0, sp, #0xa0
|
|
add r2, sp, #0x80
|
|
mov r1, r0
|
|
bl AddFixedPoint64
|
|
add r0, sp, #0xa0
|
|
bl FixedPoint64ToInt
|
|
strh r0, [r5, #0x18]
|
|
ldrb r1, [r6, #0xa]
|
|
add r0, sp, #0xa8
|
|
strh r1, [r5, #0x16]
|
|
bl FixedPoint64ToInt
|
|
strh r0, [r5, #0x1c]
|
|
add r0, sp, #0xa8
|
|
bl FixedPoint64ToInt
|
|
mov r1, r0
|
|
ldr r0, _0230C4A4 ; =ov29_02352984
|
|
bl Debug_Print0
|
|
add r0, sp, #0xa0
|
|
bl FixedPoint64ToInt
|
|
mov r1, r0
|
|
ldr r0, _0230C4A8 ; =ov29_02352990
|
|
bl Debug_Print0
|
|
add r0, sp, #0x98
|
|
bl FixedPoint64ToInt
|
|
mov r1, r0
|
|
ldr r0, _0230C4AC ; =ov29_0235299C
|
|
bl Debug_Print0
|
|
ldr r1, _0230C4B0 ; =DAMAGE_FORMULA_AT_PREFACTOR
|
|
add r0, sp, #0x70
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r0, sp, #0x70
|
|
add r1, sp, #0xa0
|
|
mov r2, r0
|
|
bl MultiplyFixedPoint64
|
|
ldr r1, _0230C4B4 ; =DAMAGE_FORMULA_DEF_PREFACTOR
|
|
add r0, sp, #0x68
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r0, sp, #0x68
|
|
add r1, sp, #0x98
|
|
mov r2, r0
|
|
bl MultiplyFixedPoint64
|
|
ldr r1, _0230C4B8 ; =DAMAGE_FORMULA_FLV_SHIFT
|
|
add r0, sp, #0x78
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r0, sp, #0x60
|
|
add r1, sp, #0xa8
|
|
add r2, sp, #0x78
|
|
bl AddFixedPoint64
|
|
ldr r1, _0230C4BC ; =DAMAGE_FORMULA_LN_ARG_PREFACTOR
|
|
add r0, sp, #0x78
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r0, sp, #0x60
|
|
add r2, sp, #0x78
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
add r0, sp, #0x60
|
|
bl FixedPoint64ToInt
|
|
mov r1, r0
|
|
add r0, sp, #0x60
|
|
bl ClampedLn
|
|
ldr r1, _0230C4C0 ; =DAMAGE_FORMULA_LN_PREFACTOR
|
|
add r0, sp, #0x78
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r0, sp, #0x60
|
|
add r2, sp, #0x78
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
add r0, sp, #0xb0
|
|
add r1, sp, #0x68
|
|
add r2, sp, #0x70
|
|
bl AddFixedPoint64
|
|
add r0, sp, #0xb0
|
|
add r2, sp, #0x60
|
|
mov r1, r0
|
|
bl AddFixedPoint64
|
|
ldr r1, _0230C4C4 ; =DAMAGE_FORMULA_CONSTANT_SHIFT
|
|
add r0, sp, #0x78
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r0, sp, #0xb0
|
|
add r2, sp, #0x78
|
|
mov r1, r0
|
|
bl AddFixedPoint64
|
|
bl FixedRoomIsSubstituteRoom
|
|
cmp r0, #0
|
|
bne _0230CB78
|
|
ldrb r0, [r6, #6]
|
|
cmp r0, #0
|
|
beq _0230CB78
|
|
ldr r1, _0230C4C8 ; =DAMAGE_FORMULA_NON_TEAM_MEMBER_MODIFIER
|
|
add r0, sp, #0x78
|
|
ldr r1, [r1]
|
|
bl FixedPoint32To64
|
|
add r0, sp, #0xb0
|
|
add r2, sp, #0x78
|
|
mov r1, r0
|
|
bl DivideFixedPoint64
|
|
_0230CB78:
|
|
ldr r0, _0230C4CC ; =DAMAGE_FORMULA_MAX_BASE
|
|
add r1, sp, #0xb0
|
|
bl FixedPoint64CmpLt
|
|
cmp r0, #0
|
|
ldrne r0, _0230C4D0 ; =ov29_02352838
|
|
ldrne r1, [r0, #0x38]
|
|
ldrne r0, [r0, #0x34]
|
|
strne r1, [sp, #0xb4]
|
|
strne r0, [sp, #0xb0]
|
|
ldr r1, _0230C4D4 ; =DAMAGE_FORMULA_MIN_BASE
|
|
add r0, sp, #0xb0
|
|
bl FixedPoint64CmpLt
|
|
cmp r0, #0
|
|
ldrne r0, _0230C4D0 ; =ov29_02352838
|
|
ldrne r1, [r0, #0x48]
|
|
ldrne r0, [r0, #0x44]
|
|
strne r1, [sp, #0xb4]
|
|
strne r0, [sp, #0xb0]
|
|
ldr r0, [sp, #0xf4]
|
|
bl IsRegularAttackOrProjectile
|
|
cmp r0, #0
|
|
ldr r0, [sp, #0xc]
|
|
movne r1, #1
|
|
str r0, [sp]
|
|
moveq r1, #0
|
|
and r1, r1, #0xff
|
|
str r8, [sp, #4]
|
|
str r1, [sp, #8]
|
|
ldr r3, [sp, #0x10]
|
|
add r0, sp, #0xb8
|
|
mov r1, sl
|
|
mov r2, sb
|
|
bl CalcTypeBasedDamageEffects
|
|
mov fp, r0
|
|
ldr r0, [sp, #0xc]
|
|
cmp r0, #2
|
|
bne _0230CC78
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl FlashFireShouldActivate
|
|
movs r4, r0
|
|
beq _0230CC78
|
|
ldrb r0, [r7, #0x15c + CALC_DAMAGE_OFFSET]
|
|
cmp r0, #0
|
|
bne _0230CC78
|
|
ldr r0, [sp, #0xf8]
|
|
cmp r0, #0
|
|
beq _0230CC78
|
|
mov r0, #1
|
|
mov r1, sb
|
|
strb r0, [r7, #0x15c + CALC_DAMAGE_OFFSET]
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
cmp r4, #1
|
|
bne _0230CC68
|
|
ldr r2, _0230D05C ; =0x00000C58
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
b _0230CC78
|
|
_0230CC68:
|
|
ldr r2, _0230D060 ; =0x00000C57
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
_0230CC78:
|
|
ldr r0, [sp, #0xf8]
|
|
cmp r0, #0
|
|
beq _0230CD3C
|
|
mov r0, sl
|
|
mov r1, #0x44
|
|
bl ExclusiveItemEffectIsActive__0230A9B8
|
|
cmp r0, #0
|
|
bne _0230CD3C
|
|
ldr r0, [sp, #0x18]
|
|
cmp r0, #0
|
|
bne _0230CCF0
|
|
ldr r0, [sp, #0xf4]
|
|
cmp r0, #0x48
|
|
beq _0230CCBC
|
|
ldrb r0, [r7, #0xd5]
|
|
cmp r0, #1
|
|
beq _0230CCD0
|
|
_0230CCBC:
|
|
mov r0, sb
|
|
mov r1, #0x1e
|
|
bl ExclusiveItemEffectIsActive__0230A9B8
|
|
cmp r0, #0
|
|
beq _0230CCF0
|
|
_0230CCD0:
|
|
mov r0, sb
|
|
bl PlayEffectAnimation0x171
|
|
add r0, sp, #0xb8
|
|
ldr r2, _0230D064 ; =DAMAGE_MULTIPLIER_0_5
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
mov r0, #1
|
|
strb r0, [r5, #0x3a]
|
|
_0230CCF0:
|
|
ldr r0, [sp, #0x18]
|
|
cmp r0, #1
|
|
bne _0230CD3C
|
|
ldrb r0, [r7, #0xd5]
|
|
cmp r0, #3
|
|
beq _0230CD1C
|
|
mov r0, sb
|
|
mov r1, #0x1f
|
|
bl ExclusiveItemEffectIsActive__0230A9B8
|
|
cmp r0, #0
|
|
beq _0230CD3C
|
|
_0230CD1C:
|
|
mov r0, sb
|
|
bl PlayEffectAnimation0x171Full
|
|
add r0, sp, #0xb8
|
|
ldr r2, _0230D064 ; =DAMAGE_MULTIPLIER_0_5
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
mov r0, #1
|
|
strb r0, [r5, #0x3b]
|
|
_0230CD3C:
|
|
ldrb r0, [r7, #0xd5]
|
|
cmp r0, #0x11
|
|
beq _0230CEEC
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0xc
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
bne _0230CEEC
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x13
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
bne _0230CEEC
|
|
mov r0, sb
|
|
mov r1, #0x40
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
bne _0230CEEC
|
|
ldrsh r0, [r6, #2]
|
|
bl GetMonsterGenderVeneer
|
|
cmp r0, #2
|
|
ldrne r1, [sp, #0xe8]
|
|
ldreq r4, [sp, #0xe8]
|
|
addne r0, r1, r1, lsr #31
|
|
addne r4, r1, r0, asr #1
|
|
ldrb r0, [r6, #0xec]
|
|
cmp r0, #4
|
|
moveq r0, #1
|
|
streqb r0, [r5, #0x3c]
|
|
ldreq r4, _0230C49C ; =0x000003E7
|
|
beq _0230CE74
|
|
mov r0, sl
|
|
mov r1, #0x13
|
|
bl ItemIsActive__0230A9DC
|
|
cmp r0, #0
|
|
bne _0230CDF0
|
|
mov r0, sl
|
|
mov r1, #0x1d
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _0230CE04
|
|
_0230CDF0:
|
|
ldr r0, _0230D068 ; =SCOPE_LENS_CRIT_RATE_BOOST
|
|
mov r1, #1
|
|
ldrsh r0, [r0]
|
|
strb r1, [r5, #0x38]
|
|
add r4, r4, r0
|
|
_0230CE04:
|
|
mov r0, sl
|
|
mov r1, #0x58
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
ldrne r0, _0230D06C ; =SUPER_LUCK_CRIT_RATE_BOOST
|
|
movne r1, #1
|
|
ldrnesh r0, [r0]
|
|
strneb r1, [r5, #0x49]
|
|
mov r1, #0x14
|
|
addne r4, r4, r0
|
|
mov r0, sb
|
|
bl ItemIsActive__0230A9DC
|
|
cmp r0, #0
|
|
ldrne r0, _0230D068 ; =SCOPE_LENS_CRIT_RATE_BOOST
|
|
movne r1, #1
|
|
ldrnesh r0, [r0]
|
|
strneb r1, [r5, #0x39]
|
|
addne r4, r4, r0
|
|
cmp fp, #0
|
|
beq _0230CE74
|
|
mov r0, sl
|
|
mov r1, #1
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrne r0, _0230D070 ; =TYPE_ADVANTAGE_MASTER_CRIT_RATE
|
|
movne r1, #1
|
|
ldrnesh r4, [r0]
|
|
strneb r1, [r5, #0x3d]
|
|
_0230CE74:
|
|
mov r0, #0x64
|
|
bl DungeonRandInt
|
|
cmp r0, r4
|
|
bge _0230CEEC
|
|
mov r2, #1
|
|
mov r4, #5
|
|
mov r0, sl
|
|
mov r1, sb
|
|
#ifdef JAPAN
|
|
add r3, r2, #0xb00
|
|
#else
|
|
add r3, r2, #0xdc0
|
|
#endif
|
|
str r4, [sp]
|
|
bl ExclusiveItemEffectIsActiveWithLogging
|
|
cmp r0, #0
|
|
bne _0230CEEC
|
|
mov r2, #1
|
|
mov r0, sl
|
|
mov r1, #0x5d
|
|
strb r2, [r8, #0xe]
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
add r0, sp, #0xb8
|
|
beq _0230CEE0
|
|
ldr r2, _0230D074 ; =DAMAGE_MULTIPLIER_2
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
mov r0, #1
|
|
strb r0, [r5, #0x4a]
|
|
b _0230CEEC
|
|
_0230CEE0:
|
|
ldr r2, _0230D078 ; =DAMAGE_MULTIPLIER_1_5
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
_0230CEEC:
|
|
add r0, sp, #0xb0
|
|
bl FixedPoint64ToInt
|
|
str r0, [r5, #0x24]
|
|
add r0, sp, #0xb0
|
|
add r2, sp, #0xb8
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
ldr r1, [sp, #0x1c]
|
|
add r0, sp, #0x58
|
|
mov r2, r1
|
|
str r2, [r5, #0x2c]
|
|
bl FixedPoint32To64
|
|
add r0, sp, #0xb0
|
|
add r2, sp, #0x58
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
add r0, sp, #0xb0
|
|
bl FixedPoint64ToInt
|
|
str r0, [r5, #0x20]
|
|
mov r0, #0x4000
|
|
bl DungeonRandInt
|
|
add r0, r0, #0xe000
|
|
mov r1, #0
|
|
str r0, [sp, #0xbc]
|
|
add r0, sp, #0xb0
|
|
str r1, [sp, #0xb8]
|
|
add r2, sp, #0xb8
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
add r0, sp, #0x50
|
|
mov r1, #0x64
|
|
bl IntToFixedPoint64
|
|
add r0, sp, #0xb8
|
|
add r1, sp, #0x50
|
|
mov r2, r0
|
|
bl MultiplyFixedPoint64
|
|
add r0, sp, #0xb8
|
|
bl FixedPoint64ToInt
|
|
str r0, [r5, #0x28]
|
|
add r0, sp, #0xb0
|
|
bl FixedPoint64ToInt
|
|
str r0, [r8]
|
|
ldr r1, _0230D07C ; =0x00000195
|
|
ldr r0, [sp, #0xf4]
|
|
cmp r0, r1
|
|
bne _0230CFBC
|
|
ldr r0, [r8]
|
|
mov r1, #0x80
|
|
mov r0, r0, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
bl RoundUpDiv256
|
|
str r0, [r8]
|
|
_0230CFBC:
|
|
ldr r1, _0230D07C ; =0x00000195
|
|
ldr r0, [sp, #0xf4]
|
|
cmp r0, r1
|
|
bne _0230CFFC
|
|
mov r0, sl
|
|
mov r1, #0x2f
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _0230CFFC
|
|
ldr r0, _0230D080 ; =POWER_PITCHER_DAMAGE_MULTIPLIER
|
|
ldr r2, [r8]
|
|
ldr r1, [r0]
|
|
mov r0, r2, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
bl RoundUpDiv256
|
|
str r0, [r8]
|
|
_0230CFFC:
|
|
ldr r0, [r8]
|
|
cmp r0, #0
|
|
ble _0230D038
|
|
mov r0, sl
|
|
mov r1, #0x5b
|
|
bl ExclusiveItemEffectIsActive__0230A9B8
|
|
cmp r0, #0
|
|
beq _0230D038
|
|
ldr r0, _0230D084 ; =AIR_BLADE_DAMAGE_MULTIPLIER
|
|
ldr r2, [r8]
|
|
ldr r1, [r0]
|
|
mov r0, r2, lsl #8
|
|
bl MultiplyByFixedPoint
|
|
bl RoundUpDiv256
|
|
str r0, [r8]
|
|
_0230D038:
|
|
mov r1, #0
|
|
str r1, [r8, #4]
|
|
ldr r0, [r8]
|
|
cmp r0, #0
|
|
streqb r1, [r8, #0xe]
|
|
ldrb r0, [r8, #0xe]
|
|
strb r0, [r7, #0x167 + CALC_DAMAGE_OFFSET]
|
|
_0230D054:
|
|
add sp, sp, #0xc0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
.align 2, 0
|
|
_0230D05C: .word 0x00000C58 + CALC_DAMAGE_DATA_OFFSET
|
|
_0230D060: .word 0x00000C57 + CALC_DAMAGE_DATA_OFFSET
|
|
_0230D064: .word DAMAGE_MULTIPLIER_0_5
|
|
_0230D068: .word SCOPE_LENS_CRIT_RATE_BOOST
|
|
_0230D06C: .word SUPER_LUCK_CRIT_RATE_BOOST
|
|
_0230D070: .word TYPE_ADVANTAGE_MASTER_CRIT_RATE
|
|
_0230D074: .word DAMAGE_MULTIPLIER_2
|
|
_0230D078: .word DAMAGE_MULTIPLIER_1_5
|
|
_0230D07C: .word 0x00000195
|
|
_0230D080: .word POWER_PITCHER_DAMAGE_MULTIPLIER
|
|
_0230D084: .word AIR_BLADE_DAMAGE_MULTIPLIER
|
|
arm_func_end CalcDamage
|
|
|
|
arm_func_start ov29_0230D088
|
|
ov29_0230D088: ; 0x0230D088
|
|
stmdb sp!, {r4, r5, lr}
|
|
sub sp, sp, #0x1c
|
|
ldr r5, [sp, #0x2c]
|
|
ldr r4, [sp, #0x28]
|
|
mov lr, r0
|
|
strb r2, [r5, #0xc]
|
|
cmp r4, #1
|
|
strb r3, [r5, #0xd]
|
|
mov ip, r1
|
|
str r2, [sp]
|
|
mov r2, ip
|
|
ldr r0, _0230D118 ; =0x000003E7
|
|
movlt r4, #1
|
|
cmp r4, r0
|
|
movgt r4, r0
|
|
add r0, sp, #0x14
|
|
mov r1, lr
|
|
mov r3, r4
|
|
str r5, [sp, #4]
|
|
mov ip, #0
|
|
str ip, [sp, #8]
|
|
bl CalcTypeBasedDamageEffects
|
|
add r0, sp, #0xc
|
|
mov r1, r4
|
|
bl IntToFixedPoint64
|
|
add r0, sp, #0xc
|
|
add r2, sp, #0x14
|
|
mov r1, r0
|
|
bl MultiplyFixedPoint64
|
|
add r0, sp, #0xc
|
|
bl FixedPoint64ToInt
|
|
str r0, [r5]
|
|
mov r0, #0
|
|
str r0, [r5, #4]
|
|
add sp, sp, #0x1c
|
|
ldmia sp!, {r4, r5, pc}
|
|
.align 2, 0
|
|
_0230D118: .word 0x000003E7
|
|
arm_func_end ov29_0230D088
|
|
|
|
arm_func_start ApplyDamageAndEffectsWrapper
|
|
ApplyDamageAndEffectsWrapper: ; 0x0230D11C
|
|
stmdb sp!, {r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0xdc
|
|
mov r7, r0
|
|
add r0, sp, #0x10
|
|
mov r6, r1
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl ResetDamageData
|
|
add r0, sp, #0x24
|
|
bl ov29_022E2470
|
|
mov r3, #0
|
|
mov r0, #2
|
|
str r0, [sp, #0x18]
|
|
str r6, [sp, #0x10]
|
|
str r5, [sp, #0x14]
|
|
strb r3, [sp, #0x1c]
|
|
strb r3, [sp, #0x1e]
|
|
strb r3, [sp, #0x1f]
|
|
strb r3, [sp, #0x20]
|
|
stmia sp, {r3, r4}
|
|
str r3, [sp, #8]
|
|
mov r1, r7
|
|
add r0, sp, #0x24
|
|
add r2, sp, #0x10
|
|
str r3, [sp, #0xc]
|
|
bl ApplyDamageAndEffects
|
|
add sp, sp, #0xdc
|
|
ldmia sp!, {r4, r5, r6, r7, pc}
|
|
arm_func_end ApplyDamageAndEffectsWrapper
|
|
|
|
arm_func_start CalcRecoilDamageFixed
|
|
CalcRecoilDamageFixed: ; 0x0230D18C
|
|
stmdb sp!, {r4, r5, r6, r7, lr}
|
|
sub sp, sp, #0x1c
|
|
mov r7, r0
|
|
mov r6, r1
|
|
mov r5, r2
|
|
mov r4, r3
|
|
bl EntityIsValid__02308FBC
|
|
cmp r0, #0
|
|
beq _0230D238
|
|
ldr r0, [r7]
|
|
cmp r0, #1
|
|
bne _0230D1F0
|
|
ldr r0, [r7, #0xb4]
|
|
ldrsh r0, [r0, #0x10]
|
|
cmp r0, #0
|
|
beq _0230D238
|
|
mov r0, r7
|
|
mov r1, #0x5c
|
|
bl AbilityIsActiveVeneer
|
|
cmp r0, #0
|
|
beq _0230D1F0
|
|
mov r0, r6, lsl #8
|
|
mov r1, #0x180
|
|
bl MultiplyByFixedPoint
|
|
mov r6, r0, asr #8
|
|
_0230D1F0:
|
|
ldrb r1, [sp, #0x34]
|
|
str r4, [sp]
|
|
ldrsh r0, [sp, #0x38]
|
|
str r1, [sp, #4]
|
|
mov r1, #3
|
|
str r1, [sp, #8]
|
|
ldr r1, [sp, #0x3c]
|
|
str r0, [sp, #0xc]
|
|
ldr r0, [sp, #0x40]
|
|
str r1, [sp, #0x10]
|
|
ldr r4, [sp, #0x44]
|
|
str r0, [sp, #0x14]
|
|
mov r0, r7
|
|
mov r1, r7
|
|
mov r2, r6
|
|
mov r3, r5
|
|
str r4, [sp, #0x18]
|
|
bl CalcDamageFixed
|
|
_0230D238:
|
|
add sp, sp, #0x1c
|
|
ldmia sp!, {r4, r5, r6, r7, pc}
|
|
arm_func_end CalcRecoilDamageFixed
|
|
|
|
arm_func_start CalcDamageFixed
|
|
CalcDamageFixed: ; 0x0230D240
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
|
|
sub sp, sp, #0x2c
|
|
mov sl, r0
|
|
add r0, sp, #0x18
|
|
mov sb, r1
|
|
mov r8, r2
|
|
mov r7, r3
|
|
ldr r6, [sp, #0x54]
|
|
bl ResetDamageData
|
|
mov r5, #0
|
|
ldrb r0, [sp, #0x58]
|
|
ldr r1, [sp, #0x60]
|
|
mov r2, #2
|
|
str r2, [sp, #0x20]
|
|
str r1, [sp, #0x1c]
|
|
strb r6, [sp, #0x24]
|
|
strb r5, [sp, #0x26]
|
|
strb r5, [sp, #0x27]
|
|
strb r0, [sp, #0x25]
|
|
cmp r6, #0
|
|
beq _0230D2F8
|
|
add r4, sp, #0x10
|
|
_0230D298:
|
|
mov r2, r5, lsl #0x10
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r3, r6
|
|
mov r2, r2, asr #0x10
|
|
bl GetTypeMatchup
|
|
str r0, [r4, r5, lsl #2]
|
|
add r5, r5, #1
|
|
cmp r5, #2
|
|
blt _0230D298
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r2, #0x35
|
|
#ifndef JAPAN
|
|
mov r3, #1
|
|
#endif
|
|
bl DefenderAbilityIsActive__0230A940
|
|
cmp r0, #0
|
|
beq _0230D2F8
|
|
ldr r2, [sp, #0x10]
|
|
ldr r0, _0230D39C ; =TYPE_MATCHUP_COMBINATOR_TABLE
|
|
ldr r1, [sp, #0x14]
|
|
add r0, r0, r2, lsl #4
|
|
ldr r0, [r0, r1, lsl #2]
|
|
cmp r0, #3
|
|
movne r8, #0
|
|
_0230D2F8:
|
|
ldrsh r1, [sp, #0x5c]
|
|
ldr r0, _0230D3A0 ; =0x00000256
|
|
mov r8, r8, lsl #8
|
|
cmp r1, r0
|
|
bne _0230D334
|
|
mov r0, sl
|
|
mov r1, #0x2f
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
beq _0230D334
|
|
ldr r1, _0230D3A4 ; =POWER_PITCHER_DAMAGE_MULTIPLIER
|
|
mov r0, r8
|
|
ldr r1, [r1]
|
|
bl MultiplyByFixedPoint
|
|
mov r8, r0
|
|
_0230D334:
|
|
mov r0, r8
|
|
bl RoundUpDiv256
|
|
str r0, [sp, #0x18]
|
|
cmp r8, #0
|
|
moveq r0, #1
|
|
streqb r0, [sp, #0x28]
|
|
movne r0, #0
|
|
strneb r0, [sp, #0x28]
|
|
ldrsh r1, [sp, #0x5c]
|
|
str r7, [sp]
|
|
ldr r0, [sp, #0x64]
|
|
str r1, [sp, #4]
|
|
str r0, [sp, #8]
|
|
ldr r4, [sp, #0x68]
|
|
add r2, sp, #0x18
|
|
mov r0, sl
|
|
mov r1, sb
|
|
mov r3, #0
|
|
str r4, [sp, #0xc]
|
|
bl ApplyDamageAndEffects
|
|
ldr r1, [sp, #0x50]
|
|
cmp r1, #0
|
|
ldrneb r0, [sp, #0x28]
|
|
strneb r0, [r1]
|
|
add sp, sp, #0x2c
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc}
|
|
.align 2, 0
|
|
_0230D39C: .word TYPE_MATCHUP_COMBINATOR_TABLE
|
|
_0230D3A0: .word 0x00000256
|
|
_0230D3A4: .word POWER_PITCHER_DAMAGE_MULTIPLIER
|
|
arm_func_end CalcDamageFixed
|
|
|
|
arm_func_start CalcDamageFixedNoCategory
|
|
CalcDamageFixedNoCategory: ; 0x0230D3A8
|
|
stmdb sp!, {lr}
|
|
sub sp, sp, #0x1c
|
|
ldr lr, [sp, #0x20]
|
|
ldrb ip, [sp, #0x24]
|
|
str lr, [sp]
|
|
ldrsh lr, [sp, #0x28]
|
|
str ip, [sp, #4]
|
|
mov ip, #3
|
|
str ip, [sp, #8]
|
|
ldr ip, [sp, #0x2c]
|
|
str lr, [sp, #0xc]
|
|
ldr lr, [sp, #0x30]
|
|
str ip, [sp, #0x10]
|
|
ldr ip, [sp, #0x34]
|
|
str lr, [sp, #0x14]
|
|
str ip, [sp, #0x18]
|
|
bl CalcDamageFixed
|
|
add sp, sp, #0x1c
|
|
ldmia sp!, {pc}
|
|
arm_func_end CalcDamageFixedNoCategory
|
|
|
|
arm_func_start CalcDamageFixedWrapper
|
|
CalcDamageFixedWrapper: ; 0x0230D3F4
|
|
stmdb sp!, {lr}
|
|
sub sp, sp, #0x1c
|
|
ldr ip, [sp, #0x20]
|
|
ldrb lr, [sp, #0x24]
|
|
str ip, [sp]
|
|
ldrb ip, [sp, #0x28]
|
|
str lr, [sp, #4]
|
|
ldrsh lr, [sp, #0x2c]
|
|
str ip, [sp, #8]
|
|
ldr ip, [sp, #0x30]
|
|
str lr, [sp, #0xc]
|
|
ldr lr, [sp, #0x34]
|
|
str ip, [sp, #0x10]
|
|
ldr ip, [sp, #0x38]
|
|
str lr, [sp, #0x14]
|
|
str ip, [sp, #0x18]
|
|
bl CalcDamageFixed
|
|
add sp, sp, #0x1c
|
|
ldmia sp!, {pc}
|
|
arm_func_end CalcDamageFixedWrapper
|
|
|
|
arm_func_start UpdateShopkeeperModeAfterAttack
|
|
UpdateShopkeeperModeAfterAttack: ; 0x0230D440
|
|
ldr r2, [r1, #0xb4]
|
|
ldrb r1, [r2, #9]
|
|
cmp r1, #0
|
|
bxeq lr
|
|
ldr r1, [r0]
|
|
cmp r1, #1
|
|
bxne lr
|
|
ldr r0, [r0, #0xb4]
|
|
ldrb r0, [r0, #6]
|
|
cmp r0, #0
|
|
movne r0, #2
|
|
strneb r0, [r2, #9]
|
|
moveq r0, #3
|
|
streqb r0, [r2, #9]
|
|
bx lr
|
|
arm_func_end UpdateShopkeeperModeAfterAttack
|
|
|
|
arm_func_start UpdateShopkeeperModeAfterTrap
|
|
UpdateShopkeeperModeAfterTrap: ; 0x0230D47C
|
|
ldr r2, [r0, #0xb4]
|
|
ldrb r0, [r2, #9]
|
|
cmp r0, #0
|
|
bxeq lr
|
|
cmp r1, #0
|
|
movne r0, #2
|
|
strneb r0, [r2, #9]
|
|
moveq r0, #3
|
|
streqb r0, [r2, #9]
|
|
bx lr
|
|
arm_func_end UpdateShopkeeperModeAfterTrap
|
|
|
|
arm_func_start ov29_0230D4A4
|
|
ov29_0230D4A4: ; 0x0230D4A4
|
|
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r6, r1
|
|
mov r7, r0
|
|
mov r0, r6
|
|
mov r1, #0xe
|
|
mov r5, r2
|
|
ldr r4, [r6, #0xb4]
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
beq _0230D4E8
|
|
cmp r5, #1
|
|
cmpne r5, #7
|
|
bne _0230D4E8
|
|
ldrb r0, [r4, #0xfe]
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
_0230D4E8:
|
|
mov r4, #0
|
|
b _0230D518
|
|
_0230D4F0:
|
|
mov r2, r4, lsl #0x10
|
|
mov r0, r7
|
|
mov r1, r6
|
|
mov r3, r5
|
|
mov r2, r2, asr #0x10
|
|
bl GetTypeMatchup
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
|
|
add r4, r4, #1
|
|
_0230D518:
|
|
cmp r4, #2
|
|
blt _0230D4F0
|
|
mov r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end ov29_0230D4A4
|
|
|
|
arm_func_start ResetDamageCalcDiagnostics
|
|
ResetDamageCalcDiagnostics: ; 0x0230D528
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
ldr r0, _0230D614 ; =DUNGEON_PTR
|
|
mov r1, #0x54
|
|
ldr r4, [r0]
|
|
add r5, r4, #0x184
|
|
mov r0, r5
|
|
bl MemZero
|
|
mov r1, #0
|
|
strb r1, [r4, #0x184]
|
|
str r1, [r5, #4]
|
|
strb r1, [r5, #8]
|
|
strb r1, [r5, #9]
|
|
mov r0, #0xa
|
|
strb r0, [r5, #0xa]
|
|
strb r0, [r5, #0xb]
|
|
mov r0, #1
|
|
strh r0, [r5, #0xc]
|
|
strh r0, [r5, #0xe]
|
|
strh r1, [r5, #0x10]
|
|
strh r1, [r5, #0x14]
|
|
strh r1, [r5, #0x12]
|
|
strh r1, [r5, #0x16]
|
|
strh r1, [r5, #0x1c]
|
|
str r1, [r5, #0x20]
|
|
str r1, [r5, #0x28]
|
|
str r1, [r5, #0x2c]
|
|
strb r1, [r5, #0x30]
|
|
strb r1, [r5, #0x31]
|
|
strb r1, [r5, #0x36]
|
|
strb r1, [r5, #0x37]
|
|
strb r1, [r5, #0x34]
|
|
strb r1, [r5, #0x35]
|
|
strb r1, [r5, #0x38]
|
|
strb r1, [r5, #0x39]
|
|
strb r1, [r5, #0x3a]
|
|
strb r1, [r5, #0x3b]
|
|
strb r1, [r5, #0x3c]
|
|
strb r1, [r5, #0x3d]
|
|
strb r1, [r5, #0x3e]
|
|
strb r1, [r5, #0x40]
|
|
strb r1, [r5, #0x3f]
|
|
strb r1, [r5, #0x41]
|
|
strb r1, [r5, #0x42]
|
|
strb r1, [r5, #0x43]
|
|
strb r1, [r5, #0x44]
|
|
strb r1, [r5, #0x45]
|
|
strb r1, [r5, #0x46]
|
|
strb r1, [r5, #0x47]
|
|
strb r1, [r5, #0x48]
|
|
strb r1, [r5, #0x4b]
|
|
strb r1, [r5, #0x4c]
|
|
strb r1, [r5, #0x4d]
|
|
strb r1, [r5, #0x4e]
|
|
strb r1, [r5, #0x4f]
|
|
strb r1, [r5, #0x50]
|
|
strb r1, [r5, #0x51]
|
|
strb r1, [r5, #0x32]
|
|
strb r1, [r5, #0x33]
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0230D614: .word DUNGEON_PTR
|
|
arm_func_end ResetDamageCalcDiagnostics
|
|
|
|
arm_func_start ov29_0230D618
|
|
ov29_0230D618: ; 0x0230D618
|
|
ldr r1, _0230D624 ; =ov29_02352894
|
|
ldr r0, [r1, r0, lsl #2]
|
|
bx lr
|
|
.align 2, 0
|
|
_0230D624: .word ov29_02352894
|
|
arm_func_end ov29_0230D618
|
|
|
|
arm_func_start ov29_0230D628
|
|
ov29_0230D628: ; 0x0230D628
|
|
stmdb sp!, {r3, lr}
|
|
ldr r1, _0230D650 ; =DUNGEON_PTR
|
|
ldr r1, [r1]
|
|
add r1, r1, #0x1a000
|
|
#ifdef JAPAN
|
|
ldr r1, [r1, #0x188]
|
|
#else
|
|
ldr r1, [r1, #0x22c]
|
|
#endif
|
|
cmp r1, r0
|
|
ldmneia sp!, {r3, pc}
|
|
mov r1, #1
|
|
bl PointCameraToMonster
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0230D650: .word DUNGEON_PTR
|
|
arm_func_end ov29_0230D628
|
|
|
|
arm_func_start ov29_0230D654
|
|
ov29_0230D654: ; 0x0230D654
|
|
stmdb sp!, {r4, lr}
|
|
mov r4, r1
|
|
bl EntityIsValid__02308FBC
|
|
cmp r0, #0
|
|
beq _0230D678
|
|
mov r0, r4
|
|
bl EntityIsValid__02308FBC
|
|
cmp r0, #0
|
|
bne _0230D680
|
|
_0230D678:
|
|
mov r0, #1
|
|
ldmia sp!, {r4, pc}
|
|
_0230D680:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_0230D654
|
|
|
|
arm_func_start ov29_0230D688
|
|
ov29_0230D688: ; 0x0230D688
|
|
stmdb sp!, {r4, lr}
|
|
sub sp, sp, #8
|
|
mov r4, r0
|
|
ldrh r3, [r4]
|
|
mov r1, #0x55
|
|
mov r2, #2
|
|
strh r3, [sp]
|
|
ldrh r3, [r4, #2]
|
|
strh r3, [sp, #2]
|
|
ldrh r3, [r4, #4]
|
|
strh r3, [sp, #4]
|
|
bl GenerateStandardItem
|
|
mov r0, r4
|
|
bl SetItemAcquired
|
|
ldrb r0, [sp, #1]
|
|
strb r0, [r4, #1]
|
|
cmp r0, #0
|
|
beq _0230D6FC
|
|
add r0, sp, #0
|
|
bl GetEquivItemIndex
|
|
cmp r0, #0
|
|
blt _0230D6FC
|
|
bl GetItemAtIdx
|
|
ldrh r1, [r4]
|
|
strh r1, [r0]
|
|
ldrh r1, [r4, #2]
|
|
strh r1, [r0, #2]
|
|
ldrh r1, [r4, #4]
|
|
strh r1, [r0, #4]
|
|
_0230D6FC:
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end ov29_0230D688
|
|
|
|
arm_func_start ov29_0230D704
|
|
ov29_0230D704: ; 0x0230D704
|
|
mov r0, #0
|
|
bx lr
|
|
arm_func_end ov29_0230D704
|
|
|
|
arm_func_start ov29_0230D70C
|
|
ov29_0230D70C: ; 0x0230D70C
|
|
stmdb sp!, {r3, lr}
|
|
mov r0, #0x64
|
|
bl DungeonRandInt
|
|
ldr r1, _0230D734 ; =ov10_022C45B4
|
|
ldrsh r1, [r1]
|
|
cmp r0, r1
|
|
movlt r0, #1
|
|
movge r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0230D734: .word ov10_022C45B4
|
|
arm_func_end ov29_0230D70C
|
|
|
|
arm_func_start ov29_0230D738
|
|
ov29_0230D738: ; 0x0230D738
|
|
stmdb sp!, {r3, lr}
|
|
cmp r2, #0
|
|
bne _0230D760
|
|
mov r0, #0x64
|
|
bl DungeonRandInt
|
|
ldr r1, _0230D768 ; =ov10_022C45B4
|
|
ldrsh r1, [r1]
|
|
cmp r0, r1
|
|
movlt r0, #1
|
|
ldmltia sp!, {r3, pc}
|
|
_0230D760:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, pc}
|
|
.align 2, 0
|
|
_0230D768: .word ov10_022C45B4
|
|
arm_func_end ov29_0230D738
|
|
|
|
arm_func_start ov29_0230D76C
|
|
ov29_0230D76C: ; 0x0230D76C
|
|
stmdb sp!, {r4, r5, r6, lr}
|
|
mov r6, r0
|
|
mov r5, r1
|
|
mov r4, r2
|
|
bl IsMonster__0230A994
|
|
cmp r0, #0
|
|
beq _0230D798
|
|
mov r0, r5
|
|
bl IsMonster__0230A994
|
|
cmp r0, #0
|
|
bne _0230D7A0
|
|
_0230D798:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_0230D7A0:
|
|
ldr r0, [r6, #0xb4]
|
|
ldr r1, [r5, #0xb4]
|
|
ldrsh r0, [r0, #2]
|
|
ldrsh r1, [r1, #2]
|
|
bl GendersNotEqualNotGenderless
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, r5, r6, pc}
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r4
|
|
bl ov29_0230D738
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end ov29_0230D76C
|
|
|
|
arm_func_start ov29_0230D7D4
|
|
ov29_0230D7D4: ; 0x0230D7D4
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
sub sp, sp, #0x10
|
|
ldr r2, _0230D870 ; =ov29_023535D4
|
|
mvn r1, #0
|
|
ldrsh r3, [r2]
|
|
mov r4, r0
|
|
cmp r3, r1
|
|
beq _0230D808
|
|
ldrsh r0, [r2]
|
|
bl ov10_022BDE50
|
|
ldr r0, _0230D870 ; =ov29_023535D4
|
|
mvn r1, #0
|
|
strh r1, [r0]
|
|
_0230D808:
|
|
mov r2, #0
|
|
mov r1, #1
|
|
str r2, [sp]
|
|
stmib sp, {r1, r2}
|
|
mov r0, r4
|
|
rsb r1, r1, #0x2b8
|
|
mov r3, #3
|
|
str r2, [sp, #0xc]
|
|
bl PlayEffectAnimationEntity
|
|
mov r0, r0, lsl #0x10
|
|
mov r5, r0, asr #0x10
|
|
mvn r0, #0
|
|
cmp r5, r0
|
|
beq _0230D868
|
|
mov r4, #0x18
|
|
b _0230D850
|
|
_0230D848:
|
|
mov r0, r4
|
|
bl AdvanceFrame
|
|
_0230D850:
|
|
mov r0, r5
|
|
bl ov10_022BF964
|
|
cmp r0, #0
|
|
bne _0230D848
|
|
mov r0, r5
|
|
bl ov10_022BDE50
|
|
_0230D868:
|
|
add sp, sp, #0x10
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
_0230D870: .word ov29_023535D4
|
|
arm_func_end ov29_0230D7D4
|
|
|
|
arm_func_start ov29_0230D874
|
|
ov29_0230D874: ; 0x0230D874
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
ldr lr, [r5, #0xb4]
|
|
ldr ip, [r4, #0xb4]
|
|
ldrsh r3, [lr, #0x28]
|
|
ldrsh r1, [lr, #0x2a]
|
|
ldrsh r0, [ip, #0x28]
|
|
cmp r2, #0
|
|
strh r0, [lr, #0x28]
|
|
ldrsh r0, [ip, #0x2a]
|
|
strh r0, [lr, #0x2a]
|
|
strh r3, [ip, #0x28]
|
|
strh r1, [ip, #0x2a]
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r4
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _0230D8E4 ; =0x00000F2D
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0230D8E4: .word 0x00002494
|
|
#else
|
|
_0230D8E4: .word 0x00000F2D
|
|
#endif
|
|
arm_func_end ov29_0230D874
|
|
|
|
arm_func_start ov29_0230D8E8
|
|
ov29_0230D8E8: ; 0x0230D8E8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
ldr lr, [r5, #0xb4]
|
|
ldr ip, [r4, #0xb4]
|
|
ldr r3, [lr, #0x3c]
|
|
ldr r1, [lr, #0x40]
|
|
ldr r0, [ip, #0x3c]
|
|
cmp r2, #0
|
|
str r0, [lr, #0x3c]
|
|
ldr r0, [ip, #0x40]
|
|
str r0, [lr, #0x40]
|
|
str r3, [ip, #0x3c]
|
|
str r1, [ip, #0x40]
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r4
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _0230D958 ; =0x00000F2E
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0230D958: .word 0x00002495
|
|
#else
|
|
_0230D958: .word 0x00000F2E
|
|
#endif
|
|
arm_func_end ov29_0230D8E8
|
|
|
|
arm_func_start ov29_0230D95C
|
|
ov29_0230D95C: ; 0x0230D95C
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
ldr lr, [r5, #0xb4]
|
|
ldr ip, [r4, #0xb4]
|
|
ldrsh r3, [lr, #0x24]
|
|
ldrsh r1, [lr, #0x26]
|
|
ldrsh r0, [ip, #0x24]
|
|
cmp r2, #0
|
|
strh r0, [lr, #0x24]
|
|
ldrsh r0, [ip, #0x26]
|
|
strh r0, [lr, #0x26]
|
|
strh r3, [ip, #0x24]
|
|
strh r1, [ip, #0x26]
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r4
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _0230D9CC ; =0x00000F2B
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0230D9CC: .word 0x00002492
|
|
#else
|
|
_0230D9CC: .word 0x00000F2B
|
|
#endif
|
|
arm_func_end ov29_0230D95C
|
|
|
|
arm_func_start ov29_0230D9D0
|
|
ov29_0230D9D0: ; 0x0230D9D0
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
ldr lr, [r5, #0xb4]
|
|
ldr ip, [r4, #0xb4]
|
|
ldr r3, [lr, #0x34]
|
|
ldr r1, [lr, #0x38]
|
|
ldr r0, [ip, #0x34]
|
|
cmp r2, #0
|
|
str r0, [lr, #0x34]
|
|
ldr r0, [ip, #0x38]
|
|
str r0, [lr, #0x38]
|
|
str r3, [ip, #0x34]
|
|
str r1, [ip, #0x38]
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r4
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _0230DA40 ; =0x00000F2C
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0230DA40: .word 0x00002493
|
|
#else
|
|
_0230DA40: .word 0x00000F2C
|
|
#endif
|
|
arm_func_end ov29_0230D9D0
|
|
|
|
arm_func_start ov29_0230DA44
|
|
ov29_0230DA44: ; 0x0230DA44
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
mov r4, r1
|
|
ldr lr, [r5, #0xb4]
|
|
ldr ip, [r4, #0xb4]
|
|
ldrsh r3, [lr, #0x2c]
|
|
ldrsh r1, [lr, #0x2e]
|
|
ldrsh r0, [ip, #0x2c]
|
|
cmp r2, #0
|
|
strh r0, [lr, #0x2c]
|
|
ldrsh r0, [ip, #0x2e]
|
|
strh r0, [lr, #0x2e]
|
|
strh r3, [ip, #0x2c]
|
|
strh r1, [ip, #0x2e]
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
mov r1, r4
|
|
mov r0, #1
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
ldr r2, _0230DAB4 ; =0x00000F2F
|
|
mov r0, r5
|
|
mov r1, r4
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
.align 2, 0
|
|
#ifdef JAPAN
|
|
_0230DAB4: .word 0x00002496
|
|
#else
|
|
_0230DAB4: .word 0x00000F2F
|
|
#endif
|
|
arm_func_end ov29_0230DA44
|
|
|
|
arm_func_start ov29_0230DAB8
|
|
ov29_0230DAB8: ; 0x0230DAB8
|
|
stmdb sp!, {r3, r4, r5, lr}
|
|
mov r5, r0
|
|
ldr ip, [r5, #0xb4]
|
|
mov r4, r1
|
|
ldrsh r1, [ip, #0x24]
|
|
ldr r3, [ip, #0x34]
|
|
ldr r0, [ip, #0x3c]
|
|
cmp r2, #0
|
|
str r0, [ip, #0x34]
|
|
ldrsh r0, [ip, #0x28]
|
|
strh r0, [ip, #0x24]
|
|
str r3, [ip, #0x3c]
|
|
strh r1, [ip, #0x28]
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r0, #0
|
|
mov r1, r5
|
|
mov r2, r0
|
|
bl SubstitutePlaceholderStringTags
|
|
#ifdef JAPAN
|
|
ldr r2, _0230F050 ; =0x00002497
|
|
mov r0, r5
|
|
mov r1, r4
|
|
#else
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0xf30
|
|
#endif
|
|
bl LogMessageByIdWithPopupCheckUserTarget
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
#ifdef JAPAN
|
|
_0230F050: .word 0x00002497
|
|
#endif
|
|
arm_func_end ov29_0230DAB8
|
|
|
|
arm_func_start SpecificRecruitCheck
|
|
SpecificRecruitCheck: ; 0x0230DB14
|
|
stmdb sp!, {r4, lr}
|
|
ldr r1, _0230DBC8 ; =DUNGEON_PTR
|
|
mov r4, r0
|
|
ldr r1, [r1]
|
|
ldrb r1, [r1, #0x759]
|
|
cmp r1, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
bl DebugRecruitingEnabled
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
cmp r4, #0x97
|
|
ldreq r0, _0230DBC8 ; =DUNGEON_PTR
|
|
ldreq r0, [r0]
|
|
addeq r0, r0, #0x700
|
|
ldreqsb r0, [r0, #0x98]
|
|
cmpeq r0, #2
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
ldr r1, _0230DBCC ; =0x000001A3
|
|
cmp r4, r1
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
cmp r4, #0x1a4
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
add r0, r1, #2
|
|
cmp r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
sub r0, r1, #0xa
|
|
cmp r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
sub r0, r1, #9
|
|
cmp r4, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r4, pc}
|
|
sub r0, r1, #8
|
|
cmp r4, r0
|
|
movne r0, #1
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
ldmia sp!, {r4, pc}
|
|
.align 2, 0
|
|
_0230DBC8: .word DUNGEON_PTR
|
|
_0230DBCC: .word 0x000001A3
|
|
arm_func_end SpecificRecruitCheck
|
|
|
|
arm_func_start RecruitCheck
|
|
RecruitCheck: ; 0x0230DBD0
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
|
ldr r2, _0230E024 ; =DUNGEON_PTR
|
|
mov r8, r0
|
|
ldr r0, [r2]
|
|
mov r7, r1
|
|
ldrb r0, [r0, #0x748]
|
|
ldr r5, [r8, #0xb4]
|
|
ldr r6, [r7, #0xb4]
|
|
bl IsRecruitingAllowed
|
|
cmp r0, #0
|
|
beq _0230DC28
|
|
bl IsFullFloorFixedRoom
|
|
cmp r0, #0
|
|
bne _0230DC28
|
|
bl IsLegendaryChallengeFloor
|
|
cmp r0, #0
|
|
bne _0230DC28
|
|
mov r0, #0xa
|
|
mov r1, #6
|
|
bl IsCurrentMissionTypeExact
|
|
cmp r0, #0
|
|
beq _0230DC30
|
|
_0230DC28:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_0230DC30:
|
|
ldr r0, _0230E024 ; =DUNGEON_PTR
|
|
ldr r1, [r0]
|
|
ldrb r0, [r1, #0x75d]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldrb r0, [r1, #0x748]
|
|
cmp r0, #0x5b
|
|
bne _0230DC70
|
|
ldrsh r1, [r6, #2]
|
|
ldr r0, _0230E028 ; =0x000001E6
|
|
cmp r1, r0
|
|
addne r0, r0, #0x258
|
|
cmpne r1, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_0230DC70:
|
|
ldrsh r0, [r6, #2]
|
|
cmp r0, #0x91
|
|
cmpne r0, #0x90
|
|
cmpne r0, #0x92
|
|
ldrne r2, _0230E02C ; =0x0000010F
|
|
cmpne r0, r2
|
|
subne r1, r2, #1
|
|
cmpne r0, r1
|
|
cmpne r0, #0x110
|
|
cmpne r0, #0x19c
|
|
addne r1, r2, #0x8e
|
|
cmpne r0, r1
|
|
addne r1, r2, #0x92
|
|
cmpne r0, r1
|
|
cmpne r0, #0x1a0
|
|
addne r1, r2, #0x93
|
|
cmpne r0, r1
|
|
addne r1, r2, #0x8a
|
|
cmpne r0, r1
|
|
addne r1, r2, #0x8b
|
|
cmpne r0, r1
|
|
addne r1, r2, #0x8c
|
|
cmpne r0, r1
|
|
beq _0230DCF0
|
|
ldr r1, _0230E030 ; =0xFFFFFDEA
|
|
add r1, r0, r1
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, asr #0x10
|
|
mov r1, r1, lsl #0x10
|
|
mov r1, r1, lsr #0x10
|
|
cmp r1, #1
|
|
bhi _0230DD04
|
|
_0230DCF0:
|
|
mov r1, #1
|
|
bl IsMonsterOnTeam
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_0230DD04:
|
|
mov r0, r6
|
|
bl ov29_022FBDE0
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldrsh r0, [r6, #2]
|
|
bl SpecificRecruitCheck
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
ldrsh r1, [r8, #4]
|
|
ldrsh r0, [r7, #4]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #1
|
|
bgt _0230DD5C
|
|
ldrsh r1, [r8, #6]
|
|
ldrsh r0, [r7, #6]
|
|
sub r0, r1, r0
|
|
bl abs
|
|
cmp r0, #1
|
|
ble _0230DD64
|
|
_0230DD5C:
|
|
mov r0, #0
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
_0230DD64:
|
|
ldrb r0, [r6, #0x48]
|
|
cmp r0, #0xfa
|
|
ldrneb r0, [r6, #0xbc]
|
|
cmpne r0, #7
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, r7
|
|
mov r1, r8
|
|
bl CanSeeTarget
|
|
cmp r0, #0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, #1
|
|
bl ov29_022E1B28
|
|
bl ov29_022E81F8
|
|
ldrsh r0, [r6, #2]
|
|
mov r1, #1
|
|
bl IsMonsterOnTeam
|
|
mov sb, r0
|
|
mov r0, #0x3e8
|
|
bl DungeonRandInt
|
|
mov r4, r0
|
|
bl HasPlayedOldGame
|
|
cmp r0, #0
|
|
beq _0230DDE0
|
|
cmp sb, #0
|
|
bne _0230DDE0
|
|
ldrsh r0, [r6, #2]
|
|
bl GetRecruitRate2
|
|
mov r6, r0
|
|
b _0230DDEC
|
|
_0230DDE0:
|
|
ldrsh r0, [r6, #2]
|
|
bl GetRecruitRate1
|
|
mov r6, r0
|
|
_0230DDEC:
|
|
cmp r6, #0
|
|
ble _0230DDFC
|
|
cmp sb, #0
|
|
movne r6, r6, asr #1
|
|
_0230DDFC:
|
|
ldr r0, _0230E034 ; =0xFFFFFC19
|
|
cmp r6, r0
|
|
moveq r0, #0
|
|
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
mov r0, r8
|
|
mov r1, #0x35
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
ldrne r0, _0230E038 ; =ov10_022C44FC
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
bne _0230DFD4
|
|
mov r0, r8
|
|
mov r1, #0x39
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
ldrne r0, _0230E03C ; =ov10_022C443C
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
bne _0230DFD4
|
|
mov r0, r8
|
|
mov r1, #0x3a
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
ldrne r0, _0230E040 ; =ov10_022C447C
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
bne _0230DFD4
|
|
mov r0, r8
|
|
mov r1, #0x3b
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
beq _0230DEA0
|
|
mov r0, r7
|
|
mov r1, #6
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
ldrne r0, _0230E044 ; =ov10_022C441C
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
b _0230DFD4
|
|
_0230DEA0:
|
|
mov r0, r8
|
|
mov r1, #0x3c
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
beq _0230DED4
|
|
mov r0, r7
|
|
mov r1, #2
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
ldrne r0, _0230E048 ; =ov10_022C4410
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
b _0230DFD4
|
|
_0230DED4:
|
|
mov r0, r8
|
|
mov r1, #0x3d
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
beq _0230DF08
|
|
mov r0, r7
|
|
mov r1, #9
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
ldrne r0, _0230E04C ; =ov10_022C470C
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
b _0230DFD4
|
|
_0230DF08:
|
|
mov r0, r8
|
|
mov r1, #0x3e
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
beq _0230DF3C
|
|
mov r0, r7
|
|
mov r1, #3
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
ldrne r0, _0230E050 ; =ov10_022C4708
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
b _0230DFD4
|
|
_0230DF3C:
|
|
mov r0, r8
|
|
mov r1, #0x3f
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
beq _0230DF70
|
|
mov r0, r7
|
|
mov r1, #0xd
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
ldrne r0, _0230E054 ; =ov10_022C4704
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
b _0230DFD4
|
|
_0230DF70:
|
|
mov r0, r8
|
|
mov r1, #0x40
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
beq _0230DFA4
|
|
mov r0, r7
|
|
mov r1, #4
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
ldrne r0, _0230E058 ; =ov10_022C4700
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
b _0230DFD4
|
|
_0230DFA4:
|
|
mov r0, r8
|
|
mov r1, #0x41
|
|
bl ItemIsActive__0230E578
|
|
cmp r0, #0
|
|
beq _0230DFD4
|
|
mov r0, r7
|
|
mov r1, #0xa
|
|
bl MonsterIsType
|
|
cmp r0, #0
|
|
ldrne r0, _0230E05C ; =ov10_022C46FC
|
|
ldrnesh r0, [r0]
|
|
addne r6, r6, r0
|
|
_0230DFD4:
|
|
mov r0, r8
|
|
mov r1, #0x1e
|
|
bl IqSkillIsEnabled
|
|
cmp r0, #0
|
|
ldrne r0, _0230E038 ; =ov10_022C44FC
|
|
ldrb r1, [r5, #0xa]
|
|
ldrnesh r0, [r0]
|
|
mov r1, r1, lsl #1
|
|
addne r6, r6, r0
|
|
ldr r0, _0230E060 ; =RECRUITMENT_LEVEL_BOOST_TABLE
|
|
ldrsh r0, [r0, r1]
|
|
add r0, r6, r0
|
|
cmp r4, r0
|
|
mov r0, #0
|
|
ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
bl GetFirstEmptyMemberIdx
|
|
cmp r0, #0
|
|
movlt r0, #0
|
|
movge r0, #1
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
|
.align 2, 0
|
|
_0230E024: .word DUNGEON_PTR
|
|
_0230E028: .word 0x000001E6
|
|
_0230E02C: .word 0x0000010F
|
|
_0230E030: .word 0xFFFFFDEA
|
|
_0230E034: .word 0xFFFFFC19
|
|
_0230E038: .word ov10_022C44FC
|
|
_0230E03C: .word ov10_022C443C
|
|
_0230E040: .word ov10_022C447C
|
|
_0230E044: .word ov10_022C441C
|
|
_0230E048: .word ov10_022C4410
|
|
_0230E04C: .word ov10_022C470C
|
|
_0230E050: .word ov10_022C4708
|
|
_0230E054: .word ov10_022C4704
|
|
_0230E058: .word ov10_022C4700
|
|
_0230E05C: .word ov10_022C46FC
|
|
_0230E060: .word RECRUITMENT_LEVEL_BOOST_TABLE
|
|
arm_func_end RecruitCheck
|
|
|
|
arm_func_start TryRecruit
|
|
TryRecruit: ; 0x0230E064
|
|
#ifdef JAPAN
|
|
#define TRY_RECRUIT_OFFSET -4
|
|
#define TRY_RECRUIT_OFFSET_2 -0x2C0
|
|
#else
|
|
#define TRY_RECRUIT_OFFSET 0
|
|
#define TRY_RECRUIT_OFFSET_2 0
|
|
#endif
|
|
#ifdef JAPAN
|
|
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
#else
|
|
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
#endif
|
|
sub sp, sp, #0x114 + TRY_RECRUIT_OFFSET
|
|
mov sl, r0
|
|
mov r0, #0xa
|
|
mov r5, #0
|
|
mov sb, r1
|
|
mov r8, r2
|
|
bl ov29_0234BA54
|
|
mov r0, r5
|
|
bl ov29_0234B1A4
|
|
bl ov29_0234D630
|
|
add r0, sb, #4
|
|
add r1, sl, #4
|
|
mvn r7, #0
|
|
bl GetDirectionTowardsPosition
|
|
mov r6, r0
|
|
ldr r4, [sb, #0xb4]
|
|
mov r0, r5
|
|
strb r0, [sb, #0x22]
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl ov29_02305F60
|
|
mov r1, r6
|
|
mov r0, sb
|
|
bl ov29_02304A48
|
|
ldrsh r0, [r4, #2]
|
|
mov r1, #1
|
|
bl IsMonsterOnTeam
|
|
cmp r0, #0
|
|
beq _0230E0FC
|
|
bl ov29_0234B034
|
|
mov r1, #1
|
|
str r1, [sp]
|
|
mov r1, r5
|
|
ldr r2, [sb, #0xb4]
|
|
mov r3, r1
|
|
bl ov29_0230040C
|
|
b _0230E114
|
|
_0230E0FC:
|
|
bl ov29_0234B034
|
|
mov r1, r5
|
|
str r1, [sp]
|
|
ldr r2, [sb, #0xb4]
|
|
mov r3, r1
|
|
bl ov29_0230040C
|
|
_0230E114:
|
|
bl ov29_0234B034
|
|
mov r1, r0
|
|
mov r3, #1
|
|
mov r2, #0
|
|
str r3, [sp]
|
|
ldr r0, _0230E55C ; =0x00000C77
|
|
mov r3, r2
|
|
bl ov29_0234D7C0
|
|
cmp r0, #2
|
|
moveq r4, #0
|
|
beq _0230E524
|
|
mov r4, #1
|
|
mov r0, #0
|
|
orr r1, r4, #2
|
|
strb r1, [sp, #0xac + TRY_RECRUIT_OFFSET]
|
|
strb r0, [sp, #0xad + TRY_RECRUIT_OFFSET]
|
|
ldrsh r2, [r8, #0xc]
|
|
ldr r1, _0230E560 ; =DUNGEON_PTR
|
|
sub r3, r0, #1
|
|
strb r2, [sp, #0xae + TRY_RECRUIT_OFFSET]
|
|
strh r4, [sp, #0xb2 + TRY_RECRUIT_OFFSET]
|
|
ldr r2, [r1]
|
|
ldrh r4, [r8, #0x44]
|
|
add r1, sp, #0x14
|
|
strh r4, [r1, #0xf2 + TRY_RECRUIT_OFFSET]
|
|
ldrh r4, [r8, #0x46]
|
|
strh r4, [r1, #0xf4 + TRY_RECRUIT_OFFSET]
|
|
strb r0, [sp, #0x104 + TRY_RECRUIT_OFFSET]
|
|
strh r3, [sp, #0xb4 + TRY_RECRUIT_OFFSET]
|
|
strh r3, [sp, #0xb6 + TRY_RECRUIT_OFFSET]
|
|
ldrsh r1, [r8]
|
|
strh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET]
|
|
ldrb r1, [r2, #0x748]
|
|
strb r1, [sp, #0xaf + TRY_RECRUIT_OFFSET]
|
|
ldrb r1, [r2, #0x749]
|
|
add r2, sp, #0xac + TRY_RECRUIT_OFFSET
|
|
strb r1, [sp, #0xb0 + TRY_RECRUIT_OFFSET]
|
|
ldrsh r1, [r8, #6]
|
|
strh r1, [sp, #0xba + TRY_RECRUIT_OFFSET]
|
|
ldrsh r1, [r8, #6]
|
|
strh r1, [sp, #0xbc + TRY_RECRUIT_OFFSET]
|
|
ldrh r1, [r8, #0x14]
|
|
strh r1, [sp, #0xf0 + TRY_RECRUIT_OFFSET]
|
|
ldrh r1, [r8, #0x16]
|
|
strh r1, [sp, #0xf2 + TRY_RECRUIT_OFFSET]
|
|
ldrh r1, [r8, #0x18]
|
|
strh r1, [sp, #0xf4 + TRY_RECRUIT_OFFSET]
|
|
ldrh r1, [r8, #0x1a]
|
|
strh r1, [sp, #0xf6 + TRY_RECRUIT_OFFSET]
|
|
_0230E1D8:
|
|
add r4, r8, r0
|
|
ldrb r1, [r4, #8]
|
|
add r3, r2, r0
|
|
add r0, r0, #1
|
|
strb r1, [r3, #0x12]
|
|
ldrb r1, [r4, #0xa]
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
strb r1, [r3, #0x14]
|
|
cmp r0, #2
|
|
blt _0230E1D8
|
|
ldr r0, [r8, #0x10]
|
|
add r2, sp, #0xc8 + TRY_RECRUIT_OFFSET
|
|
str r0, [sp, #0xc4 + TRY_RECRUIT_OFFSET]
|
|
add r3, r8, #0x22
|
|
mov r1, #0x11
|
|
_0230E218:
|
|
ldrh r0, [r3], #2
|
|
subs r1, r1, #1
|
|
strh r0, [r2], #2
|
|
bne _0230E218
|
|
ldrh r0, [r8, #0x1c]
|
|
strh r0, [sp, #0xea + TRY_RECRUIT_OFFSET]
|
|
ldrh r0, [r8, #0x1e]
|
|
strh r0, [sp, #0xec + TRY_RECRUIT_OFFSET]
|
|
ldrh r0, [r8, #0x20]
|
|
strh r0, [sp, #0xee + TRY_RECRUIT_OFFSET]
|
|
ldrsh r0, [r8]
|
|
bl GetNameString
|
|
mov r1, r0
|
|
add r0, sp, #0x100
|
|
add r0, r0, #0xa + TRY_RECRUIT_OFFSET
|
|
mov r2, #0xa
|
|
bl StrncpyName
|
|
ldrsh r1, [sp, #0xb8 + TRY_RECRUIT_OFFSET]
|
|
ldrsh r2, [sp, #0xb2 + TRY_RECRUIT_OFFSET]
|
|
add r0, sp, #0xf8 + TRY_RECRUIT_OFFSET
|
|
bl EnableAllLearnableIqSkills
|
|
add r1, sp, #0x100
|
|
add r0, sp, #0x98
|
|
add r1, r1, #0xa + TRY_RECRUIT_OFFSET
|
|
#ifdef JAPAN
|
|
add r4, sp, #0x18
|
|
bl StrcpySimple
|
|
#else
|
|
mov r2, #0xa
|
|
add r4, sp, #0x18
|
|
bl StrncpySimpleNoPad
|
|
#endif
|
|
bl ov29_022EACAC
|
|
bl ov29_0234B034
|
|
mov r1, r0
|
|
mov r0, #1
|
|
str r0, [sp]
|
|
mov r2, #0
|
|
ldr r0, _0230E564 ; =0x00000C7B
|
|
mov r3, r2
|
|
bl ov29_0234D7C0
|
|
cmp r0, #1
|
|
bne _0230E2D4
|
|
bl ov29_0234D838
|
|
add r6, sp, #0x100
|
|
add r6, r6, #0xa + TRY_RECRUIT_OFFSET
|
|
_0230E2BC:
|
|
mov r0, r6
|
|
add r1, sp, #0x98
|
|
mov r2, #0
|
|
bl DungeonModeSetupAndShowNameKeyboard
|
|
cmp r0, #0
|
|
beq _0230E2BC
|
|
_0230E2D4:
|
|
add r1, sp, #0xac + TRY_RECRUIT_OFFSET
|
|
mov r0, r4
|
|
bl sub_020585B4
|
|
mov r1, r4
|
|
mov r0, #0
|
|
bl ov29_0234B0B4
|
|
mov r0, #1
|
|
mov r1, #0
|
|
bl ov29_0234B084
|
|
ldr r0, _0230E568 ; =0x00000C7E
|
|
bl ov29_0230E658
|
|
ldrsh r1, [r8, #2]
|
|
ldrsh r2, [r8, #4]
|
|
mov r0, sb
|
|
bl ov29_02337EC0
|
|
ldrsh r2, [r8, #2]
|
|
ldrsh r3, [r8, #4]
|
|
mov r0, sl
|
|
mov r1, sb
|
|
bl ov29_0230E5A8
|
|
cmp r0, #0
|
|
bne _0230E42C
|
|
add r0, sp, #0xac + TRY_RECRUIT_OFFSET
|
|
mvn r1, #0
|
|
bl ov29_0230E5FC
|
|
mov r7, r0
|
|
b _0230E410
|
|
_0230E340:
|
|
ldr r0, _0230E56C ; =0x00000C7F
|
|
bl ov29_0230E658
|
|
mvn r4, #0
|
|
_0230E34C:
|
|
bl ov29_0234D838
|
|
add r1, sp, #0x100
|
|
mov r0, sb
|
|
add r1, r1, #0xa + TRY_RECRUIT_OFFSET
|
|
bl ov29_0234EE10
|
|
movs r6, r0
|
|
beq _0230E3D4
|
|
cmp r6, sb
|
|
add r0, sp, #0x58
|
|
bne _0230E380
|
|
add r1, sp, #0xac + TRY_RECRUIT_OFFSET
|
|
bl sub_020585B4
|
|
b _0230E38C
|
|
_0230E380:
|
|
ldr r1, [r6, #0xb4]
|
|
ldrsh r1, [r1, #0xc]
|
|
bl sub_020584FC
|
|
_0230E38C:
|
|
mov r0, #0
|
|
add r1, sp, #0x58
|
|
bl ov29_0234B0B4
|
|
mov r0, #1
|
|
mov r1, sl
|
|
mov r2, #0
|
|
bl SubstitutePlaceholderStringTags
|
|
bl ov29_0234B034
|
|
mov r1, #1
|
|
mov r2, #0
|
|
str r1, [sp]
|
|
mov r1, r0
|
|
mov r0, #0xc80 + TRY_RECRUIT_OFFSET_2
|
|
mov r3, r2
|
|
bl ov29_0234D7C0
|
|
mov fp, r0
|
|
cmp fp, r4
|
|
beq _0230E34C
|
|
_0230E3D4:
|
|
cmp fp, #2
|
|
cmpne r6, #0
|
|
beq _0230E410
|
|
ldr r0, _0230E56C ; =0x00000C7F
|
|
add r0, r0, #2
|
|
bl ov29_0230E658
|
|
mov r0, r6
|
|
bl ov29_022E68BC
|
|
ldr r1, _0230E570 ; =0x00000233
|
|
mov r0, r6
|
|
mov r2, sl
|
|
bl HandleFaint
|
|
cmp r6, sb
|
|
moveq r4, #1
|
|
beq _0230E524
|
|
_0230E410:
|
|
mov r0, sl
|
|
mov r1, sb
|
|
ldrsh r2, [r8, #2]
|
|
ldrsh r3, [r8, #4]
|
|
bl ov29_0230E5A8
|
|
cmp r0, #0
|
|
beq _0230E340
|
|
_0230E42C:
|
|
mov r6, #0
|
|
mov r4, r6
|
|
mov r5, #1
|
|
b _0230E468
|
|
_0230E43C:
|
|
mov r0, r6
|
|
bl GetActiveTeamMember
|
|
ldrb r0, [r0]
|
|
tst r0, #1
|
|
movne r0, r5
|
|
moveq r0, r4
|
|
tst r0, #0xff
|
|
beq _0230E470
|
|
add r0, r6, #1
|
|
mov r0, r0, lsl #0x10
|
|
mov r6, r0, asr #0x10
|
|
_0230E468:
|
|
cmp r6, #4
|
|
blt _0230E43C
|
|
_0230E470:
|
|
add r0, sp, #0xac + TRY_RECRUIT_OFFSET
|
|
mov r1, r7
|
|
strh r6, [sp, #0xb6 + TRY_RECRUIT_OFFSET]
|
|
bl ov29_0230E5FC
|
|
strh r0, [sp, #0xb4 + TRY_RECRUIT_OFFSET]
|
|
ldrsh r1, [sp, #0xb4 + TRY_RECRUIT_OFFSET]
|
|
mov r0, r6
|
|
bl sub_02056698
|
|
ldr r1, _0230E570 ; =0x00000233
|
|
mov r0, sb
|
|
mov r2, sl
|
|
bl HandleFaint
|
|
mov r0, r6
|
|
bl GetActiveTeamMember
|
|
mov r4, r0
|
|
add r7, sp, #0xac + TRY_RECRUIT_OFFSET
|
|
mov r6, r4
|
|
mov r5, #6
|
|
_0230E4B8:
|
|
ldmia r7!, {r0, r1, r2, r3}
|
|
stmia r6!, {r0, r1, r2, r3}
|
|
subs r5, r5, #1
|
|
bne _0230E4B8
|
|
ldmia r7, {r0, r1}
|
|
stmia r6, {r0, r1}
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
add r1, sp, #0x14
|
|
mov r0, #0
|
|
str r1, [sp]
|
|
str r0, [sp, #4]
|
|
mov r0, #1
|
|
str r0, [sp, #8]
|
|
str r0, [sp, #0xc]
|
|
str r0, [sp, #0x10]
|
|
ldrsh r0, [r8]
|
|
ldrsh r1, [r8, #2]
|
|
ldrsh r2, [r8, #4]
|
|
mov r3, r4
|
|
bl InitTeamMember
|
|
ldrsh r0, [r4, #0xc]
|
|
bl SetPokemonJoined
|
|
bl ov29_022E8104
|
|
bl ov29_022E81F8
|
|
ldr r5, [sp, #0x14]
|
|
mov r4, #1
|
|
_0230E524:
|
|
mov r0, #1
|
|
bl ov29_0234D8A0
|
|
cmp r4, #0
|
|
bne _0230E540
|
|
ldr r1, _0230E574 ; =0x00000C78
|
|
mov r0, sl
|
|
bl LogMessageByIdWithPopupCheckUser
|
|
_0230E540:
|
|
cmp r5, #0
|
|
beq _0230E550
|
|
mov r0, r5
|
|
bl EnsureCanStandCurrentTile
|
|
_0230E550:
|
|
mov r0, r4
|
|
add sp, sp, #0x114 + TRY_RECRUIT_OFFSET
|
|
#ifdef JAPAN
|
|
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
#else
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
#endif
|
|
.align 2, 0
|
|
_0230E55C: .word 0x00000C77 + TRY_RECRUIT_OFFSET_2
|
|
_0230E560: .word DUNGEON_PTR
|
|
_0230E564: .word 0x00000C7B + TRY_RECRUIT_OFFSET_2
|
|
_0230E568: .word 0x00000C7E + TRY_RECRUIT_OFFSET_2
|
|
_0230E56C: .word 0x00000C7F + TRY_RECRUIT_OFFSET_2
|
|
_0230E570: .word 0x00000233
|
|
_0230E574: .word 0x00000C78 + TRY_RECRUIT_OFFSET_2
|
|
arm_func_end TryRecruit
|