mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 07:24:42 -05:00
2287 lines
44 KiB
ArmAsm
2287 lines
44 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "overlay_29_0230BBAC.inc"
|
|
|
|
.text
|
|
|
|
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 GetFlashFireStatus
|
|
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
|