mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
Decomped GetEntityMoveTargetAndRange
This commit is contained in:
parent
7137a02a5a
commit
bbbfb856e0
|
|
@ -1,39 +1,20 @@
|
|||
#pragma once
|
||||
.public AiConsiderMove
|
||||
.public AreOrbsAllowed
|
||||
.public BoostSpeedOneStage
|
||||
.public DUNGEON_PTR
|
||||
.public DungeonRandInt
|
||||
.public EnemyEvolution
|
||||
.public EntityIsValid__02319F8C
|
||||
.public EntityIsValid__0231B194
|
||||
.public ExclusiveItemEffectIsActive__0231A87C
|
||||
.public GetApparentWeather
|
||||
.public GetItemMoveId16
|
||||
.public GetItemToUse
|
||||
.public GetMoveTargetAndRange
|
||||
.public GetTreasureBoxChances
|
||||
.public InitMove
|
||||
.public IsFloorOver
|
||||
.public IsMonster__0231A9D4
|
||||
.public IsMoveRangeString19
|
||||
.public LogMessageByIdWithPopupCheckParticipants
|
||||
.public LogMessageByIdWithPopupCheckUser
|
||||
.public LogMessageByIdWithPopupCheckUserTarget
|
||||
.public MonsterIsType
|
||||
.public NATURAL_GIFT_ITEM_TABLE
|
||||
.public ov29_022E4110
|
||||
.public ov29_022EB4E8
|
||||
.public ov29_022FB9E0
|
||||
.public ov29_022FBAB4
|
||||
.public ov29_02321274
|
||||
.public ov29_0232145C
|
||||
.public ov29_02322374
|
||||
.public ov29_0232E80C
|
||||
.public ov29_02344B44
|
||||
.public RemoveUsedItem
|
||||
.public SetActionUseMoveAi
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public TryActivateTruant
|
||||
.public UpdateAiTargetPos
|
||||
.public WEATHER_BALL_TYPE_TABLE
|
||||
.public ov29_022EB4E8
|
||||
.public ov29_022FBAB4
|
||||
.public ov29_02321274
|
||||
.public ov29_02322374
|
||||
.public ov29_02344B44
|
||||
|
|
|
|||
20
asm/include/overlay_29_0231AD38.inc
Normal file
20
asm/include/overlay_29_0231AD38.inc
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#pragma once
|
||||
.public BoostSpeedOneStage
|
||||
.public DUNGEON_PTR
|
||||
.public DungeonRandInt
|
||||
.public EntityIsValid__0231B194
|
||||
.public GetApparentWeather
|
||||
.public GetEntityMoveTargetAndRange
|
||||
.public GetTreasureBoxChances
|
||||
.public IsMonster__0231A9D4
|
||||
.public LogMessageByIdWithPopupCheckParticipants
|
||||
.public LogMessageByIdWithPopupCheckUserTarget
|
||||
.public NATURAL_GIFT_ITEM_TABLE
|
||||
.public SetActionUseMoveAi
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public WEATHER_BALL_TYPE_TABLE
|
||||
.public ov29_022E4110
|
||||
.public ov29_022FB9E0
|
||||
.public ov29_0232145C
|
||||
.public ov29_0232E80C
|
||||
.public ov29_02344B44
|
||||
|
|
@ -207,422 +207,3 @@ _0231ACA0: .word 0x00000DFB + OV29_0231A9F8_OFFSET
|
|||
_0231ACA4: .word 0x00000DFC + OV29_0231A9F8_OFFSET
|
||||
_0231ACA8: .word 0x00000141
|
||||
arm_func_end ov29_0231A9F8
|
||||
|
||||
arm_func_start GetEntityMoveTargetAndRange
|
||||
GetEntityMoveTargetAndRange: ; 0x0231ACAC
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r5, r1
|
||||
ldrh r1, [r5, #4]
|
||||
mov r4, r2
|
||||
mov r6, r0
|
||||
cmp r1, #0xed
|
||||
cmpeq r4, #0
|
||||
bne _0231ACE0
|
||||
mov r1, #0xe
|
||||
bl MonsterIsType
|
||||
cmp r0, #0
|
||||
moveq r0, #0x73
|
||||
ldmeqia sp!, {r4, r5, r6, pc}
|
||||
_0231ACE0:
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl GetMoveTargetAndRange
|
||||
mov r4, r0
|
||||
mov r0, r5
|
||||
bl IsMoveRangeString19
|
||||
cmp r0, #0
|
||||
beq _0231AD2C
|
||||
mov r0, r6
|
||||
mov r1, #0x55
|
||||
bl ExclusiveItemEffectIsActive__0231A87C
|
||||
cmp r0, #0
|
||||
beq _0231AD2C
|
||||
ldr r0, _0231AD34 ; =0x00000273
|
||||
cmp r4, r0
|
||||
subeq r4, r0, #0x12
|
||||
beq _0231AD2C
|
||||
cmp r4, #0x73
|
||||
moveq r4, #0x61
|
||||
_0231AD2C:
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0231AD34: .word 0x00000273
|
||||
arm_func_end GetEntityMoveTargetAndRange
|
||||
|
||||
arm_func_start ov29_0231AD38
|
||||
ov29_0231AD38: ; 0x0231AD38
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov r2, #1
|
||||
bl GetEntityMoveTargetAndRange
|
||||
and r4, r0, #0xf
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
mov r2, #0
|
||||
bl GetEntityMoveTargetAndRange
|
||||
cmp r4, #3
|
||||
and r0, r0, #0xf
|
||||
cmpne r4, #1
|
||||
cmpne r0, #4
|
||||
cmpne r0, #3
|
||||
cmpne r0, #1
|
||||
cmpne r0, #6
|
||||
beq _0231ADA0
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
mov r2, #0
|
||||
bl GetEntityMoveTargetAndRange
|
||||
and r0, r0, #0xf0
|
||||
cmp r0, #0x70
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
_0231ADA0:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end ov29_0231AD38
|
||||
|
||||
arm_func_start ov29_0231ADA8
|
||||
ov29_0231ADA8: ; 0x0231ADA8
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
sub sp, sp, #8
|
||||
ldr r1, [r0, #0xb4]
|
||||
mov r0, #0
|
||||
mov r5, r0
|
||||
#ifdef JAPAN
|
||||
add r4, r1, #0x120
|
||||
#else
|
||||
add r4, r1, #0x124
|
||||
#endif
|
||||
mov ip, r0
|
||||
mov lr, #1
|
||||
add r2, sp, #0
|
||||
_0231ADCC:
|
||||
ldrb r1, [r4, r5, lsl #3]
|
||||
add r3, r4, r5, lsl #3
|
||||
tst r1, #1
|
||||
movne r1, lr
|
||||
moveq r1, ip
|
||||
tst r1, #0xff
|
||||
beq _0231AE00
|
||||
ldrh r3, [r3, #4]
|
||||
add r1, r0, #1
|
||||
mov r0, r0, lsl #1
|
||||
mov r1, r1, lsl #0x10
|
||||
strh r3, [r2, r0]
|
||||
mov r0, r1, lsr #0x10
|
||||
_0231AE00:
|
||||
add r1, r5, #1
|
||||
mov r1, r1, lsl #0x10
|
||||
mov r5, r1, lsr #0x10
|
||||
cmp r5, #4
|
||||
blo _0231ADCC
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
beq _0231AE34
|
||||
bl DungeonRandInt
|
||||
mov r0, r0, lsl #0x10
|
||||
add r1, sp, #0
|
||||
mov r0, r0, lsr #0xf
|
||||
ldrh r0, [r1, r0]
|
||||
_0231AE34:
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end ov29_0231ADA8
|
||||
|
||||
arm_func_start ov29_0231AE3C
|
||||
ov29_0231AE3C: ; 0x0231AE3C
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr ip, [r0, #0xb4]
|
||||
mov r0, #0
|
||||
mov lr, r0
|
||||
mov r2, r0
|
||||
mov r3, #1
|
||||
_0231AE54:
|
||||
add r1, ip, lr, lsl #3
|
||||
#ifdef JAPAN
|
||||
ldrb r1, [r1, #0x120]
|
||||
#else
|
||||
ldrb r1, [r1, #0x124]
|
||||
#endif
|
||||
tst r1, #1
|
||||
movne r1, r3
|
||||
moveq r1, r2
|
||||
tst r1, #0xff
|
||||
add r1, lr, #1
|
||||
addne r0, r0, #1
|
||||
mov r1, r1, lsl #0x10
|
||||
movne r0, r0, lsl #0x10
|
||||
mov lr, r1, lsr #0x10
|
||||
movne r0, r0, lsr #0x10
|
||||
cmp lr, #4
|
||||
blo _0231AE54
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end ov29_0231AE3C
|
||||
|
||||
arm_func_start GetEntityNaturalGiftInfo
|
||||
GetEntityNaturalGiftInfo: ; 0x0231AE90
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r4, r0
|
||||
bl IsMonster__0231A9D4
|
||||
cmp r0, #0
|
||||
ldrne r4, [r4, #0xb4]
|
||||
ldrnesh r0, [r4, #0x66]
|
||||
cmpne r0, #0
|
||||
beq _0231AF00
|
||||
mov ip, #0
|
||||
ldr r3, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
|
||||
mov lr, ip
|
||||
mov r1, #6
|
||||
_0231AEC0:
|
||||
smulbb r5, lr, r1
|
||||
ldrsh r2, [r3, r5]
|
||||
cmp r2, #0
|
||||
beq _0231AEF0
|
||||
ldrsh r0, [r4, #0x66]
|
||||
cmp r0, r2
|
||||
moveq ip, #1
|
||||
beq _0231AEF0
|
||||
add r0, lr, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov lr, r0, asr #0x10
|
||||
b _0231AEC0
|
||||
_0231AEF0:
|
||||
cmp ip, #0
|
||||
ldrne r0, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
|
||||
addne r0, r0, r5
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
_0231AF00:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0231AF08: .word NATURAL_GIFT_ITEM_TABLE
|
||||
arm_func_end GetEntityNaturalGiftInfo
|
||||
|
||||
arm_func_start GetEntityWeatherBallType
|
||||
GetEntityWeatherBallType: ; 0x0231AF0C
|
||||
stmdb sp!, {r3, lr}
|
||||
bl GetApparentWeather
|
||||
ldr r1, _0231AF20 ; =WEATHER_BALL_TYPE_TABLE
|
||||
ldrb r0, [r1, r0]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_0231AF20: .word WEATHER_BALL_TYPE_TABLE
|
||||
arm_func_end GetEntityWeatherBallType
|
||||
|
||||
arm_func_start ov29_0231AF24
|
||||
ov29_0231AF24: ; 0x0231AF24
|
||||
#ifdef JAPAN
|
||||
#define OV29_0231AF24_OFFSET -4
|
||||
#else
|
||||
#define OV29_0231AF24_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, r6, lr}
|
||||
sub sp, sp, #4
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov r4, r2
|
||||
bl IsMonster__0231A9D4
|
||||
cmp r0, #0
|
||||
beq _0231AFAC
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
bl ov29_022FB9E0
|
||||
mov r1, r0
|
||||
cmp r4, #0
|
||||
beq _0231AF98
|
||||
cmp r1, #0
|
||||
bge _0231AF98
|
||||
ldr r4, [r6, #0xb4]
|
||||
mov r1, #0
|
||||
mov r2, r1
|
||||
add r0, r4, #0x4a
|
||||
bl SetActionUseMoveAi
|
||||
mov r2, #1
|
||||
strb r2, [r4, #0x124 + OV29_0231AF24_OFFSET]
|
||||
add r0, r4, #0x100
|
||||
mov r1, #0
|
||||
strh r1, [r0, #0x26 + OV29_0231AF24_OFFSET]
|
||||
strh r5, [r0, #0x28 + OV29_0231AF24_OFFSET]
|
||||
strb r2, [r4, #0x12a + OV29_0231AF24_OFFSET]
|
||||
strb r1, [r4, #0x12b + OV29_0231AF24_OFFSET]
|
||||
_0231AF98:
|
||||
mov r3, #0
|
||||
mov r0, r6
|
||||
mov r2, #1
|
||||
str r3, [sp]
|
||||
bl ov29_0232145C
|
||||
_0231AFAC:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r3, r4, r5, r6, pc}
|
||||
arm_func_end ov29_0231AF24
|
||||
|
||||
arm_func_start ov29_0231AFB4
|
||||
ov29_0231AFB4: ; 0x0231AFB4
|
||||
stmdb sp!, {r4, lr}
|
||||
mov ip, #0
|
||||
ldr r1, _0231B004 ; =DUNGEON_PTR
|
||||
mov r2, ip
|
||||
mov r3, ip
|
||||
_0231AFC8:
|
||||
ldr r0, [r1]
|
||||
mov r4, r3
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x1840
|
||||
add r0, r0, #0x18000
|
||||
#else
|
||||
add r0, r0, #0xe4
|
||||
add r0, r0, #0x19800
|
||||
#endif
|
||||
add lr, r0, ip, lsl #4
|
||||
_0231AFDC:
|
||||
str r2, [lr, r4, lsl #3]
|
||||
add r0, lr, r4, lsl #3
|
||||
add r4, r4, #1
|
||||
str r2, [r0, #4]
|
||||
cmp r4, #2
|
||||
blt _0231AFDC
|
||||
add ip, ip, #1
|
||||
cmp ip, #2
|
||||
blt _0231AFC8
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0231B004: .word DUNGEON_PTR
|
||||
arm_func_end ov29_0231AFB4
|
||||
|
||||
arm_func_start ov29_0231B008
|
||||
ov29_0231B008: ; 0x0231B008
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov lr, #0
|
||||
ldr r1, _0231B05C ; =DUNGEON_PTR
|
||||
mov r3, lr
|
||||
mov r2, #2
|
||||
mov ip, lr
|
||||
_0231B020:
|
||||
ldr r0, [r1]
|
||||
mov r5, ip
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x1840
|
||||
add r0, r0, #0x18000
|
||||
#else
|
||||
add r0, r0, #0xe4
|
||||
add r0, r0, #0x19800
|
||||
#endif
|
||||
add r4, r0, lr, lsl #4
|
||||
_0231B034:
|
||||
str r3, [r4, r5, lsl #3]
|
||||
add r0, r4, r5, lsl #3
|
||||
add r5, r5, #1
|
||||
str r2, [r0, #4]
|
||||
cmp r5, #2
|
||||
blt _0231B034
|
||||
add lr, lr, #1
|
||||
cmp lr, #2
|
||||
blt _0231B020
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0231B05C: .word DUNGEON_PTR
|
||||
arm_func_end ov29_0231B008
|
||||
|
||||
arm_func_start ActivateMotorDrive
|
||||
ActivateMotorDrive: ; 0x0231B060
|
||||
stmdb sp!, {r3, r4, lr}
|
||||
sub sp, sp, #4
|
||||
#ifdef JAPAN
|
||||
mov ip, #0x66
|
||||
mov r4, r0
|
||||
rsb r2, ip, #0x9e0
|
||||
#else
|
||||
ldr r2, _0231B0A0 ; =0x00000C3B
|
||||
mov ip, #0x66
|
||||
mov r4, r0
|
||||
#endif
|
||||
mov r1, #0
|
||||
mov r3, #2
|
||||
str ip, [sp]
|
||||
bl LogMessageByIdWithPopupCheckParticipants
|
||||
mov r0, r4
|
||||
mov r1, r4
|
||||
mov r2, #0
|
||||
mov r3, #1
|
||||
bl BoostSpeedOneStage
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r3, r4, pc}
|
||||
.align 2, 0
|
||||
#ifndef JAPAN
|
||||
_0231B0A0: .word 0x00000C3B
|
||||
#endif
|
||||
arm_func_end ActivateMotorDrive
|
||||
|
||||
arm_func_start TryActivateFrisk
|
||||
TryActivateFrisk: ; 0x0231B0A4
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #8
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl EntityIsValid__0231B194
|
||||
cmp r0, #0
|
||||
beq _0231B184
|
||||
mov r0, r4
|
||||
bl EntityIsValid__0231B194
|
||||
cmp r0, #0
|
||||
beq _0231B184
|
||||
ldr r0, [r5, #0xb4]
|
||||
ldr r6, [r4, #0xb4]
|
||||
ldrb r0, [r0, #6]
|
||||
cmp r0, #0
|
||||
bne _0231B184
|
||||
bl ov29_0232E80C
|
||||
cmp r4, r0
|
||||
ldrneb r0, [r6, #6]
|
||||
cmpne r0, #0
|
||||
beq _0231B184
|
||||
ldrsh r0, [r6, #0x66]
|
||||
cmp r0, #0
|
||||
bne _0231B150
|
||||
ldrsh r0, [r6, #2]
|
||||
add r1, sp, #0
|
||||
bl GetTreasureBoxChances
|
||||
ldrsh r0, [sp, #4]
|
||||
cmp r0, #0
|
||||
ldrlesh r0, [sp, #6]
|
||||
cmple r0, #0
|
||||
ble _0231B184
|
||||
mov r0, r5
|
||||
bl ov29_022E4110
|
||||
mov r1, r4
|
||||
mov r0, #1
|
||||
mov r2, #0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
ldr r2, _0231B18C ; =0x00000C3D
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _0231B184
|
||||
_0231B150:
|
||||
mov r0, r5
|
||||
bl ov29_022E4110
|
||||
mov r1, r4
|
||||
mov r0, #1
|
||||
mov r2, #0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
add r1, r6, #0x62
|
||||
mov r0, #2
|
||||
bl ov29_02344B44
|
||||
ldr r2, _0231B190 ; =0x00000C3C
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_0231B184:
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_0231B18C: .word 0x0000097C
|
||||
_0231B190: .word 0x0000097B
|
||||
#else
|
||||
_0231B18C: .word 0x00000C3D
|
||||
_0231B190: .word 0x00000C3C
|
||||
#endif
|
||||
arm_func_end TryActivateFrisk
|
||||
|
|
|
|||
381
asm/overlay_29_0231AD38.s
Normal file
381
asm/overlay_29_0231AD38.s
Normal file
|
|
@ -0,0 +1,381 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "overlay_29_0231AD38.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start ov29_0231AD38
|
||||
ov29_0231AD38: ; 0x0231AD38
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov r2, #1
|
||||
bl GetEntityMoveTargetAndRange
|
||||
and r4, r0, #0xf
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
mov r2, #0
|
||||
bl GetEntityMoveTargetAndRange
|
||||
cmp r4, #3
|
||||
and r0, r0, #0xf
|
||||
cmpne r4, #1
|
||||
cmpne r0, #4
|
||||
cmpne r0, #3
|
||||
cmpne r0, #1
|
||||
cmpne r0, #6
|
||||
beq _0231ADA0
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
mov r2, #0
|
||||
bl GetEntityMoveTargetAndRange
|
||||
and r0, r0, #0xf0
|
||||
cmp r0, #0x70
|
||||
movne r0, #0
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
_0231ADA0:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
arm_func_end ov29_0231AD38
|
||||
|
||||
arm_func_start ov29_0231ADA8
|
||||
ov29_0231ADA8: ; 0x0231ADA8
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
sub sp, sp, #8
|
||||
ldr r1, [r0, #0xb4]
|
||||
mov r0, #0
|
||||
mov r5, r0
|
||||
#ifdef JAPAN
|
||||
add r4, r1, #0x120
|
||||
#else
|
||||
add r4, r1, #0x124
|
||||
#endif
|
||||
mov ip, r0
|
||||
mov lr, #1
|
||||
add r2, sp, #0
|
||||
_0231ADCC:
|
||||
ldrb r1, [r4, r5, lsl #3]
|
||||
add r3, r4, r5, lsl #3
|
||||
tst r1, #1
|
||||
movne r1, lr
|
||||
moveq r1, ip
|
||||
tst r1, #0xff
|
||||
beq _0231AE00
|
||||
ldrh r3, [r3, #4]
|
||||
add r1, r0, #1
|
||||
mov r0, r0, lsl #1
|
||||
mov r1, r1, lsl #0x10
|
||||
strh r3, [r2, r0]
|
||||
mov r0, r1, lsr #0x10
|
||||
_0231AE00:
|
||||
add r1, r5, #1
|
||||
mov r1, r1, lsl #0x10
|
||||
mov r5, r1, lsr #0x10
|
||||
cmp r5, #4
|
||||
blo _0231ADCC
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
beq _0231AE34
|
||||
bl DungeonRandInt
|
||||
mov r0, r0, lsl #0x10
|
||||
add r1, sp, #0
|
||||
mov r0, r0, lsr #0xf
|
||||
ldrh r0, [r1, r0]
|
||||
_0231AE34:
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end ov29_0231ADA8
|
||||
|
||||
arm_func_start ov29_0231AE3C
|
||||
ov29_0231AE3C: ; 0x0231AE3C
|
||||
stmdb sp!, {r3, lr}
|
||||
ldr ip, [r0, #0xb4]
|
||||
mov r0, #0
|
||||
mov lr, r0
|
||||
mov r2, r0
|
||||
mov r3, #1
|
||||
_0231AE54:
|
||||
add r1, ip, lr, lsl #3
|
||||
#ifdef JAPAN
|
||||
ldrb r1, [r1, #0x120]
|
||||
#else
|
||||
ldrb r1, [r1, #0x124]
|
||||
#endif
|
||||
tst r1, #1
|
||||
movne r1, r3
|
||||
moveq r1, r2
|
||||
tst r1, #0xff
|
||||
add r1, lr, #1
|
||||
addne r0, r0, #1
|
||||
mov r1, r1, lsl #0x10
|
||||
movne r0, r0, lsl #0x10
|
||||
mov lr, r1, lsr #0x10
|
||||
movne r0, r0, lsr #0x10
|
||||
cmp lr, #4
|
||||
blo _0231AE54
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end ov29_0231AE3C
|
||||
|
||||
arm_func_start GetEntityNaturalGiftInfo
|
||||
GetEntityNaturalGiftInfo: ; 0x0231AE90
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r4, r0
|
||||
bl IsMonster__0231A9D4
|
||||
cmp r0, #0
|
||||
ldrne r4, [r4, #0xb4]
|
||||
ldrnesh r0, [r4, #0x66]
|
||||
cmpne r0, #0
|
||||
beq _0231AF00
|
||||
mov ip, #0
|
||||
ldr r3, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
|
||||
mov lr, ip
|
||||
mov r1, #6
|
||||
_0231AEC0:
|
||||
smulbb r5, lr, r1
|
||||
ldrsh r2, [r3, r5]
|
||||
cmp r2, #0
|
||||
beq _0231AEF0
|
||||
ldrsh r0, [r4, #0x66]
|
||||
cmp r0, r2
|
||||
moveq ip, #1
|
||||
beq _0231AEF0
|
||||
add r0, lr, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov lr, r0, asr #0x10
|
||||
b _0231AEC0
|
||||
_0231AEF0:
|
||||
cmp ip, #0
|
||||
ldrne r0, _0231AF08 ; =NATURAL_GIFT_ITEM_TABLE
|
||||
addne r0, r0, r5
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
_0231AF00:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0231AF08: .word NATURAL_GIFT_ITEM_TABLE
|
||||
arm_func_end GetEntityNaturalGiftInfo
|
||||
|
||||
arm_func_start GetEntityWeatherBallType
|
||||
GetEntityWeatherBallType: ; 0x0231AF0C
|
||||
stmdb sp!, {r3, lr}
|
||||
bl GetApparentWeather
|
||||
ldr r1, _0231AF20 ; =WEATHER_BALL_TYPE_TABLE
|
||||
ldrb r0, [r1, r0]
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_0231AF20: .word WEATHER_BALL_TYPE_TABLE
|
||||
arm_func_end GetEntityWeatherBallType
|
||||
|
||||
arm_func_start ov29_0231AF24
|
||||
ov29_0231AF24: ; 0x0231AF24
|
||||
#ifdef JAPAN
|
||||
#define OV29_0231AF24_OFFSET -4
|
||||
#else
|
||||
#define OV29_0231AF24_OFFSET 0
|
||||
#endif
|
||||
stmdb sp!, {r3, r4, r5, r6, lr}
|
||||
sub sp, sp, #4
|
||||
mov r6, r0
|
||||
mov r5, r1
|
||||
mov r4, r2
|
||||
bl IsMonster__0231A9D4
|
||||
cmp r0, #0
|
||||
beq _0231AFAC
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
bl ov29_022FB9E0
|
||||
mov r1, r0
|
||||
cmp r4, #0
|
||||
beq _0231AF98
|
||||
cmp r1, #0
|
||||
bge _0231AF98
|
||||
ldr r4, [r6, #0xb4]
|
||||
mov r1, #0
|
||||
mov r2, r1
|
||||
add r0, r4, #0x4a
|
||||
bl SetActionUseMoveAi
|
||||
mov r2, #1
|
||||
strb r2, [r4, #0x124 + OV29_0231AF24_OFFSET]
|
||||
add r0, r4, #0x100
|
||||
mov r1, #0
|
||||
strh r1, [r0, #0x26 + OV29_0231AF24_OFFSET]
|
||||
strh r5, [r0, #0x28 + OV29_0231AF24_OFFSET]
|
||||
strb r2, [r4, #0x12a + OV29_0231AF24_OFFSET]
|
||||
strb r1, [r4, #0x12b + OV29_0231AF24_OFFSET]
|
||||
_0231AF98:
|
||||
mov r3, #0
|
||||
mov r0, r6
|
||||
mov r2, #1
|
||||
str r3, [sp]
|
||||
bl ov29_0232145C
|
||||
_0231AFAC:
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r3, r4, r5, r6, pc}
|
||||
arm_func_end ov29_0231AF24
|
||||
|
||||
arm_func_start ov29_0231AFB4
|
||||
ov29_0231AFB4: ; 0x0231AFB4
|
||||
stmdb sp!, {r4, lr}
|
||||
mov ip, #0
|
||||
ldr r1, _0231B004 ; =DUNGEON_PTR
|
||||
mov r2, ip
|
||||
mov r3, ip
|
||||
_0231AFC8:
|
||||
ldr r0, [r1]
|
||||
mov r4, r3
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x1840
|
||||
add r0, r0, #0x18000
|
||||
#else
|
||||
add r0, r0, #0xe4
|
||||
add r0, r0, #0x19800
|
||||
#endif
|
||||
add lr, r0, ip, lsl #4
|
||||
_0231AFDC:
|
||||
str r2, [lr, r4, lsl #3]
|
||||
add r0, lr, r4, lsl #3
|
||||
add r4, r4, #1
|
||||
str r2, [r0, #4]
|
||||
cmp r4, #2
|
||||
blt _0231AFDC
|
||||
add ip, ip, #1
|
||||
cmp ip, #2
|
||||
blt _0231AFC8
|
||||
ldmia sp!, {r4, pc}
|
||||
.align 2, 0
|
||||
_0231B004: .word DUNGEON_PTR
|
||||
arm_func_end ov29_0231AFB4
|
||||
|
||||
arm_func_start ov29_0231B008
|
||||
ov29_0231B008: ; 0x0231B008
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov lr, #0
|
||||
ldr r1, _0231B05C ; =DUNGEON_PTR
|
||||
mov r3, lr
|
||||
mov r2, #2
|
||||
mov ip, lr
|
||||
_0231B020:
|
||||
ldr r0, [r1]
|
||||
mov r5, ip
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x1840
|
||||
add r0, r0, #0x18000
|
||||
#else
|
||||
add r0, r0, #0xe4
|
||||
add r0, r0, #0x19800
|
||||
#endif
|
||||
add r4, r0, lr, lsl #4
|
||||
_0231B034:
|
||||
str r3, [r4, r5, lsl #3]
|
||||
add r0, r4, r5, lsl #3
|
||||
add r5, r5, #1
|
||||
str r2, [r0, #4]
|
||||
cmp r5, #2
|
||||
blt _0231B034
|
||||
add lr, lr, #1
|
||||
cmp lr, #2
|
||||
blt _0231B020
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_0231B05C: .word DUNGEON_PTR
|
||||
arm_func_end ov29_0231B008
|
||||
|
||||
arm_func_start ActivateMotorDrive
|
||||
ActivateMotorDrive: ; 0x0231B060
|
||||
stmdb sp!, {r3, r4, lr}
|
||||
sub sp, sp, #4
|
||||
#ifdef JAPAN
|
||||
mov ip, #0x66
|
||||
mov r4, r0
|
||||
rsb r2, ip, #0x9e0
|
||||
#else
|
||||
ldr r2, _0231B0A0 ; =0x00000C3B
|
||||
mov ip, #0x66
|
||||
mov r4, r0
|
||||
#endif
|
||||
mov r1, #0
|
||||
mov r3, #2
|
||||
str ip, [sp]
|
||||
bl LogMessageByIdWithPopupCheckParticipants
|
||||
mov r0, r4
|
||||
mov r1, r4
|
||||
mov r2, #0
|
||||
mov r3, #1
|
||||
bl BoostSpeedOneStage
|
||||
add sp, sp, #4
|
||||
ldmia sp!, {r3, r4, pc}
|
||||
.align 2, 0
|
||||
#ifndef JAPAN
|
||||
_0231B0A0: .word 0x00000C3B
|
||||
#endif
|
||||
arm_func_end ActivateMotorDrive
|
||||
|
||||
arm_func_start TryActivateFrisk
|
||||
TryActivateFrisk: ; 0x0231B0A4
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
sub sp, sp, #8
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
bl EntityIsValid__0231B194
|
||||
cmp r0, #0
|
||||
beq _0231B184
|
||||
mov r0, r4
|
||||
bl EntityIsValid__0231B194
|
||||
cmp r0, #0
|
||||
beq _0231B184
|
||||
ldr r0, [r5, #0xb4]
|
||||
ldr r6, [r4, #0xb4]
|
||||
ldrb r0, [r0, #6]
|
||||
cmp r0, #0
|
||||
bne _0231B184
|
||||
bl ov29_0232E80C
|
||||
cmp r4, r0
|
||||
ldrneb r0, [r6, #6]
|
||||
cmpne r0, #0
|
||||
beq _0231B184
|
||||
ldrsh r0, [r6, #0x66]
|
||||
cmp r0, #0
|
||||
bne _0231B150
|
||||
ldrsh r0, [r6, #2]
|
||||
add r1, sp, #0
|
||||
bl GetTreasureBoxChances
|
||||
ldrsh r0, [sp, #4]
|
||||
cmp r0, #0
|
||||
ldrlesh r0, [sp, #6]
|
||||
cmple r0, #0
|
||||
ble _0231B184
|
||||
mov r0, r5
|
||||
bl ov29_022E4110
|
||||
mov r1, r4
|
||||
mov r0, #1
|
||||
mov r2, #0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
ldr r2, _0231B18C ; =0x00000C3D
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
b _0231B184
|
||||
_0231B150:
|
||||
mov r0, r5
|
||||
bl ov29_022E4110
|
||||
mov r1, r4
|
||||
mov r0, #1
|
||||
mov r2, #0
|
||||
bl SubstitutePlaceholderStringTags
|
||||
add r1, r6, #0x62
|
||||
mov r0, #2
|
||||
bl ov29_02344B44
|
||||
ldr r2, _0231B190 ; =0x00000C3C
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl LogMessageByIdWithPopupCheckUserTarget
|
||||
_0231B184:
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
#ifdef JAPAN
|
||||
_0231B18C: .word 0x0000097C
|
||||
_0231B190: .word 0x0000097B
|
||||
#else
|
||||
_0231B18C: .word 0x00000C3D
|
||||
_0231B190: .word 0x00000C3C
|
||||
#endif
|
||||
arm_func_end TryActivateFrisk
|
||||
137
include/item.h
137
include/item.h
|
|
@ -1460,6 +1460,143 @@ enum item_data_flag {
|
|||
ITEM_DATA_FLAG_THROWABLE_AT_ENEMY = 1 << 7,
|
||||
};
|
||||
|
||||
// Exclusive effect ID. These are usually encoded as bitvectors.
|
||||
// Some of these are unused in-game but still labeled if easy to infer.
|
||||
// See https://docs.google.com/spreadsheets/d/1XfE0x6JtLKDlCCvp5doNwyFpMX0C2HZCUCiDc1eMb1g
|
||||
// for a list of exclusive items that map to each effect.
|
||||
enum exclusive_item_effect_id {
|
||||
EXCLUSIVE_EFF_STAT_BOOST = 0, // Normal stat boosts; don't have a unique effect
|
||||
EXCLUSIVE_EFF_NO_PARALYSIS = 1,
|
||||
EXCLUSIVE_EFF_NO_CONFUSION = 2,
|
||||
EXCLUSIVE_EFF_NO_INFATUATION = 3,
|
||||
EXCLUSIVE_EFF_NO_FREEZE = 4,
|
||||
EXCLUSIVE_EFF_NO_CRITICAL_HITS = 5,
|
||||
EXCLUSIVE_EFF_HALVED_EXPLOSION_DAMAGE = 6,
|
||||
EXCLUSIVE_EFF_NO_EXPLOSION_DAMAGE = 7,
|
||||
EXCLUSIVE_EFF_NO_MOVE_DISABLING = 8,
|
||||
EXCLUSIVE_EFF_NO_WEATHER_DAMAGE = 9,
|
||||
EXCLUSIVE_EFF_NO_SLEEP = 10,
|
||||
EXCLUSIVE_EFF_MAY_POISON_PARALYZE_SLEEP_ATTACKERS = 11,
|
||||
EXCLUSIVE_EFF_UNUSED_0xC = 12, // Probably "may afflict <some status> on attackers"
|
||||
EXCLUSIVE_EFF_MAY_SLEEP_ATTACKERS = 13,
|
||||
EXCLUSIVE_EFF_MAY_NIGHTMARE_ATTACKERS = 14,
|
||||
EXCLUSIVE_EFF_MAY_BURN_ATTACKERS = 15,
|
||||
EXCLUSIVE_EFF_MAY_PARALYZE_ATTACKERS = 16,
|
||||
EXCLUSIVE_EFF_MAY_CONFUSE_ATTACKERS = 17,
|
||||
EXCLUSIVE_EFF_MAY_INFATUATE_ATTACKERS = 18,
|
||||
EXCLUSIVE_EFF_MAY_FREEZE_ATTACKERS = 19,
|
||||
EXCLUSIVE_EFF_MAY_SHADOW_HOLD_ATTACKERS = 20,
|
||||
EXCLUSIVE_EFF_MAY_CONSTRICT_ATTACKERS = 21,
|
||||
EXCLUSIVE_EFF_MAY_CRINGE_ATTACKERS = 22,
|
||||
EXCLUSIVE_EFF_MAY_BLINKER_ATTACKERS = 23,
|
||||
EXCLUSIVE_EFF_MAY_SEAL_ATTACKER_MOVES = 24,
|
||||
EXCLUSIVE_EFF_MAY_GO_INVISIBLE_WHEN_ATTACKED = 25,
|
||||
EXCLUSIVE_EFF_MAY_BOOST_MOVEMENT_SPEED_WHEN_ATTACKED = 26,
|
||||
EXCLUSIVE_EFF_MAY_WARP_WHEN_ATTACKED = 27,
|
||||
EXCLUSIVE_EFF_MAY_PERISH_SONG_ATTACKERS = 28,
|
||||
EXCLUSIVE_EFF_MAY_SLOW_ATTACKERS = 29,
|
||||
EXCLUSIVE_EFF_HALVED_PHYSICAL_DAMAGE = 30,
|
||||
EXCLUSIVE_EFF_HALVED_SPECIAL_DAMAGE = 31,
|
||||
EXCLUSIVE_EFF_COUNTER_PHYSICAL_DAMAGE = 32,
|
||||
EXCLUSIVE_EFF_MAY_BOUNCE_STATUS_MOVES = 33,
|
||||
EXCLUSIVE_EFF_MAY_ENDURE = 34,
|
||||
EXCLUSIVE_EFF_COUNTER_25_PCT_PHYSICAL_DAMAGE = 35,
|
||||
EXCLUSIVE_EFF_LONG_TOSS = 36,
|
||||
EXCLUSIVE_EFF_MAY_BOUNCE_MOVES = 37,
|
||||
EXCLUSIVE_EFF_NO_STAT_DROPS = 38,
|
||||
EXCLUSIVE_EFF_CONVERSION_2_WHEN_HIT = 39,
|
||||
EXCLUSIVE_EFF_NO_STATUS_WHEN_CLEAR = 40,
|
||||
EXCLUSIVE_EFF_NO_STATUS_WHEN_SUNNY = 41,
|
||||
EXCLUSIVE_EFF_NO_STATUS_WHEN_SANDSTORM = 42,
|
||||
EXCLUSIVE_EFF_NO_STATUS_WHEN_CLOUDY = 43,
|
||||
EXCLUSIVE_EFF_NO_STATUS_WHEN_RAINY = 44,
|
||||
EXCLUSIVE_EFF_NO_STATUS_WHEN_HAIL = 45,
|
||||
EXCLUSIVE_EFF_NO_STATUS_WHEN_FOGGY = 46,
|
||||
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_CLEAR = 47,
|
||||
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_SUNNY = 48,
|
||||
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_SANDSTORM = 49,
|
||||
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_CLOUDY = 50,
|
||||
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_RAINY = 51,
|
||||
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_HAIL = 52,
|
||||
EXCLUSIVE_EFF_MOVEMENT_SPEED_BOOST_WHEN_FOGGY = 53,
|
||||
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_CLEAR = 54,
|
||||
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_SUNNY = 55,
|
||||
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_SANDSTORM = 56, // Unused in-game
|
||||
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_CLOUDY = 57, // Unused in-game
|
||||
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_RAINY = 58,
|
||||
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_HAIL = 59,
|
||||
EXCLUSIVE_EFF_ATTACK_SPEED_BOOST_WHEN_FOGGY = 60, // Unused in-game
|
||||
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_CLEAR = 61,
|
||||
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_SUNNY = 62,
|
||||
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_SANDSTORM = 63,
|
||||
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_CLOUDY = 64,
|
||||
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_RAINY = 65,
|
||||
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_HAIL = 66, // Unused in-game
|
||||
EXCLUSIVE_EFF_EVASION_BOOST_WHEN_FOGGY = 67,
|
||||
EXCLUSIVE_EFF_BYPASS_REFLECT_LIGHT_SCREEN = 68,
|
||||
EXCLUSIVE_EFF_SCRAPPY = 69,
|
||||
EXCLUSIVE_EFF_MIRACLE_EYE = 70,
|
||||
EXCLUSIVE_EFF_RESTORE_PP_ON_NEW_FLOORS = 71,
|
||||
EXCLUSIVE_EFF_RESTORE_HP_ON_NEW_FLOORS = 72,
|
||||
EXCLUSIVE_EFF_INCREASED_HP_RECOVERY = 73,
|
||||
EXCLUSIVE_EFF_MAX_PP_BOOST = 74,
|
||||
EXCLUSIVE_EFF_UNUSED_0x4B = 75,
|
||||
EXCLUSIVE_EFF_MAX_HP_BOOST_10 = 76,
|
||||
EXCLUSIVE_EFF_MAX_HP_BOOST_20 = 77, // Unused in-game
|
||||
EXCLUSIVE_EFF_MAX_HP_BOOST_30 = 78, // Unused in-game
|
||||
EXCLUSIVE_EFF_EXP_BOOST = 79,
|
||||
EXCLUSIVE_EFF_EXP_FROM_DAMAGE = 80,
|
||||
EXCLUSIVE_EFF_MAY_RESTORE_PP_FROM_DAMAGE = 81,
|
||||
EXCLUSIVE_EFF_MAY_NOT_CONSUME_PP = 82,
|
||||
EXCLUSIVE_EFF_THROWN_ITEM_PROTECTION = 83,
|
||||
EXCLUSIVE_EFF_BOUNCE_THROWN_ITEMS = 84,
|
||||
EXCLUSIVE_EFF_EXTEND_SELF_EFFECTS_TO_TEAM = 85,
|
||||
EXCLUSIVE_EFF_MORE_TREASURE_DROPS = 86,
|
||||
EXCLUSIVE_EFF_HP_DRAIN_RECOVERY_BOOST = 87,
|
||||
EXCLUSIVE_EFF_PRESSURE_BOOST = 88,
|
||||
EXCLUSIVE_EFF_NO_STATUS = 89,
|
||||
EXCLUSIVE_EFF_HALVED_DAMAGE = 90,
|
||||
EXCLUSIVE_EFF_DAMAGE_BOOST_50_PCT = 91,
|
||||
EXCLUSIVE_EFF_ABSORB_TEAMMATE_POISON = 92,
|
||||
EXCLUSIVE_EFF_RECOVER_HP_FROM_APPLES_AND_BERRIES = 93,
|
||||
EXCLUSIVE_EFF_MORE_KECLEON_SHOPS = 94,
|
||||
EXCLUSIVE_EFF_MORE_HIDDEN_STAIRS = 95,
|
||||
EXCLUSIVE_EFF_NO_FRIENDLY_FIRE = 96,
|
||||
EXCLUSIVE_EFF_PICKUP_BOOST = 97,
|
||||
EXCLUSIVE_EFF_MORE_MONEY_DROPS = 98,
|
||||
EXCLUSIVE_EFF_UNUSED_0x63 = 99,
|
||||
EXCLUSIVE_EFF_RECOVER_HP_FROM_WATERY_TERRAIN = 100,
|
||||
EXCLUSIVE_EFF_HEAL_STATUS_FROM_WATERY_TERRAIN = 101,
|
||||
EXCLUSIVE_EFF_NO_FIRE_DAMAGE = 102,
|
||||
EXCLUSIVE_EFF_NO_WATER_DAMAGE = 103,
|
||||
EXCLUSIVE_EFF_NO_GRASS_DAMAGE = 104,
|
||||
EXCLUSIVE_EFF_NO_ELECTRIC_DAMAGE = 105,
|
||||
EXCLUSIVE_EFF_NO_FIGHTING_DAMAGE = 106,
|
||||
EXCLUSIVE_EFF_NO_GROUND_DAMAGE = 107,
|
||||
EXCLUSIVE_EFF_NO_FLYING_DAMAGE = 108,
|
||||
EXCLUSIVE_EFF_NO_PSYCHIC_DAMAGE = 109,
|
||||
EXCLUSIVE_EFF_NO_GHOST_DAMAGE = 110,
|
||||
EXCLUSIVE_EFF_NO_DRAGON_DAMAGE = 111,
|
||||
EXCLUSIVE_EFF_NO_DARK_DAMAGE = 112,
|
||||
EXCLUSIVE_EFF_NO_STEEL_DAMAGE = 113,
|
||||
EXCLUSIVE_EFF_ABSORB_FIRE_DAMAGE = 114,
|
||||
EXCLUSIVE_EFF_ABSORB_WATER_DAMAGE = 115,
|
||||
EXCLUSIVE_EFF_ABSORB_GRASS_DAMAGE = 116,
|
||||
EXCLUSIVE_EFF_ABSORB_ELECTRIC_DAMAGE = 117,
|
||||
EXCLUSIVE_EFF_ABSORB_ICE_DAMAGE = 118,
|
||||
EXCLUSIVE_EFF_ABSORB_FIGHTING_DAMAGE = 119,
|
||||
EXCLUSIVE_EFF_ABSORB_GROUND_DAMAGE = 120,
|
||||
EXCLUSIVE_EFF_ABSORB_FLYING_DAMAGE = 121,
|
||||
EXCLUSIVE_EFF_ABSORB_PSYCHIC_DAMAGE = 122,
|
||||
EXCLUSIVE_EFF_ABSORB_BUG_DAMAGE = 123,
|
||||
EXCLUSIVE_EFF_ABSORB_ROCK_DAMAGE = 124,
|
||||
EXCLUSIVE_EFF_ABSORB_GHOST_DAMAGE = 125,
|
||||
EXCLUSIVE_EFF_ABSORB_DRAGON_DAMAGE = 126,
|
||||
EXCLUSIVE_EFF_ABSORB_DARK_DAMAGE = 127,
|
||||
EXCLUSIVE_EFF_ABSORB_STEEL_DAMAGE = 128,
|
||||
EXCLUSIVE_EFF_LAST = 129, // Used as a null-terminator in some places
|
||||
};
|
||||
|
||||
#define GROUND_ITEM_TOOLBOX_INDEX 0x80
|
||||
#define HELD_ITEM_TOOLBOX_INDEX 0x81
|
||||
#define INVENTORY_SIZE 52
|
||||
|
|
|
|||
13
include/overlay_29_0231ACAC.h
Normal file
13
include/overlay_29_0231ACAC.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef PMDSKY_OVERLAY_29_0231ACAC_H
|
||||
#define PMDSKY_OVERLAY_29_0231ACAC_H
|
||||
|
||||
#include "dungeon_mode.h"
|
||||
|
||||
// Gets the move target-and-range field when used by a given entity.
|
||||
// entity: entity pointer
|
||||
// move: move pointer
|
||||
// is_ai: AI flag (same as GetMoveTargetAndRange)
|
||||
// return: move target and range
|
||||
u32 GetEntityMoveTargetAndRange(struct entity *entity, struct move *move, bool8 is_ai);
|
||||
|
||||
#endif //PMDSKY_OVERLAY_29_0231ACAC_H
|
||||
2
main.lsf
2
main.lsf
|
|
@ -427,6 +427,8 @@ Overlay OVY_29
|
|||
Object asm/overlay_29_0231A7A0.o
|
||||
Object src/overlay_29_0231A9D4.o
|
||||
Object asm/overlay_29_0231A9F8.o
|
||||
Object src/overlay_29_0231ACAC.o
|
||||
Object asm/overlay_29_0231AD38.o
|
||||
Object src/overlay_29_0231B194.o
|
||||
Object asm/overlay_29_0231B1B8.o
|
||||
Object src/overlay_29_0231B318.o
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
#include "dungeon_visibility.h"
|
||||
#include "main_0208655C.h"
|
||||
#include "move_data.h"
|
||||
#include "overlay_29_0231ACAC.h"
|
||||
#include "position_util.h"
|
||||
|
||||
extern struct dungeon *DUNGEON_PTR[];
|
||||
|
|
@ -18,7 +19,6 @@ extern u8 AI_POTENTIAL_ATTACK_TARGET_DIRECTIONS[NUM_DIRECTIONS];
|
|||
extern s32 AI_POTENTIAL_ATTACK_TARGET_WEIGHTS[NUM_DIRECTIONS];
|
||||
extern struct entity *AI_POTENTIAL_ATTACK_TARGETS[NUM_DIRECTIONS];
|
||||
|
||||
extern u16 GetEntityMoveTargetAndRange(struct entity *entity, struct move *move, bool8 is_ai);
|
||||
extern bool8 IsAffectedByTaunt(struct move *move);
|
||||
extern bool8 StatusCheckerCheck(struct entity *attacker, struct move *move);
|
||||
extern u16 GetMoveTargetAndRange(struct move *move, bool8 is_ai);
|
||||
|
|
@ -47,7 +47,7 @@ u32 AiConsiderMove(struct ai_possible_move *ai_possible_move, struct entity *mon
|
|||
if (has_status_checker && !StatusCheckerCheck(monster, move))
|
||||
return move_weight;
|
||||
|
||||
if (GetMoveTargetAndRange(move, FALSE) == TARGET_USER + RANGE_USER + AI_CONDITION_HP_25)
|
||||
if (GetMoveTargetAndRange(move, FALSE) == TARGET_USER | RANGE_USER | AI_CONDITION_HP_25)
|
||||
{
|
||||
s32 max_hp = MIN(pokemon_info->max_hp_stat + pokemon_info->max_hp_boost, 999);
|
||||
if (pokemon_info->hp == max_hp)
|
||||
|
|
|
|||
26
src/overlay_29_0231ACAC.c
Normal file
26
src/overlay_29_0231ACAC.c
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#include "overlay_29_0231ACAC.h"
|
||||
#include "item.h"
|
||||
#include "move_data.h"
|
||||
|
||||
extern bool8 MonsterIsType(struct entity *entity, enum type_id type_id);
|
||||
extern u16 GetMoveTargetAndRange(struct move *move, bool8 is_ai);
|
||||
extern bool8 IsMoveRangeString19(struct move *move);
|
||||
bool8 ExclusiveItemEffectIsActive__0231A87C(struct entity *entity, enum exclusive_item_effect_id effect_id);
|
||||
|
||||
u32 GetEntityMoveTargetAndRange(struct entity *entity, struct move *move, bool8 is_ai)
|
||||
{
|
||||
if (move->id == MOVE_CURSE && !is_ai && !MonsterIsType(entity, TYPE_GHOST))
|
||||
return TARGET_USER | RANGE_USER;
|
||||
|
||||
u16 move_target_and_range = GetMoveTargetAndRange(move, is_ai);
|
||||
|
||||
if (IsMoveRangeString19(move) && ExclusiveItemEffectIsActive__0231A87C(entity, EXCLUSIVE_EFF_EXTEND_SELF_EFFECTS_TO_TEAM))
|
||||
{
|
||||
if (move_target_and_range == (TARGET_USER | RANGE_USER | AI_CONDITION_HP_25))
|
||||
move_target_and_range = TARGET_PARTY | RANGE_FLOOR | AI_CONDITION_HP_25;
|
||||
else if (move_target_and_range == (TARGET_USER | RANGE_USER))
|
||||
move_target_and_range = TARGET_PARTY | RANGE_FLOOR;
|
||||
}
|
||||
|
||||
return move_target_and_range;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user