mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-25 03:55:29 -05:00
Merge pull request #116 from AnonymousRandomPerson/main
Some checks failed
build / build (push) Has been cancelled
Some checks failed
build / build (push) Has been cancelled
More AI decomp
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
#pragma once
|
||||
.public _020AFC4C
|
||||
.public abs
|
||||
.public AdvanceFrame
|
||||
.public AnimationHasMoreFrames
|
||||
.public CanMonsterSpawn
|
||||
@@ -11,9 +9,9 @@
|
||||
.public CloseTextBox2
|
||||
.public CreateTextBox
|
||||
.public DIRECTIONS_XY
|
||||
.public DUNGEON_PTR
|
||||
.public DisplayAnimatedNumbers
|
||||
.public DrawTextInWindow
|
||||
.public DUNGEON_PTR
|
||||
.public DungeonFloorToGroupFloor
|
||||
.public DungeonGetSpriteIndex
|
||||
.public DungeonGetTotalSpriteFileSize
|
||||
@@ -22,13 +20,13 @@
|
||||
.public DungeonRngSetPrimary
|
||||
.public DungeonRngSetSecondary
|
||||
.public EntityIsValid__022E37B8
|
||||
.public EntityIsValid__022E95F4
|
||||
.public FloorNumberIsEven
|
||||
.public GetEffectAnimationField0x19
|
||||
.public GetFloorType
|
||||
.public GetIdleAnimationId
|
||||
.public GetItemCategoryVeneer
|
||||
.public GetKecleonIdToSpawnByFloor
|
||||
.public GetLeader
|
||||
.public GetMonsterGenderVeneer
|
||||
.public GetMonsterIdFromSpawnEntry
|
||||
.public GetMonsterLevelFromSpawnEntry
|
||||
@@ -39,8 +37,6 @@
|
||||
.public GetSecondFormIfValid
|
||||
.public GetSpriteFileSize
|
||||
.public GetSpriteSize
|
||||
.public GetTile
|
||||
.public GetVisibilityRange
|
||||
.public HandleSir0Translation
|
||||
.public InitPreprocessorArgs
|
||||
.public IsBossFight
|
||||
@@ -52,7 +48,6 @@
|
||||
.public IsFullFloorFixedRoom
|
||||
.public IsInSpawnList
|
||||
.public IsItemForSpecialSpawnInBag
|
||||
.public LEADER_PTR
|
||||
.public LoadFileFromRom
|
||||
.public LoadFixedRoom
|
||||
.public LogMessageByIdWithPopup
|
||||
@@ -61,6 +56,35 @@
|
||||
.public MemZero
|
||||
.public MonsterIsType
|
||||
.public NeedsItemToSpawn
|
||||
.public PlayEffectAnimationEntity
|
||||
.public RandIntSafe
|
||||
.public STATUS_ICON_ARRAY_BIDE
|
||||
.public STATUS_ICON_ARRAY_BLINDED
|
||||
.public STATUS_ICON_ARRAY_BURN
|
||||
.public STATUS_ICON_ARRAY_CRINGE
|
||||
.public STATUS_ICON_ARRAY_CURSE
|
||||
.public STATUS_ICON_ARRAY_FREEZE
|
||||
.public STATUS_ICON_ARRAY_INVISIBLE
|
||||
.public STATUS_ICON_ARRAY_LEECH_SEED
|
||||
.public STATUS_ICON_ARRAY_LONG_TOSS
|
||||
.public STATUS_ICON_ARRAY_MAGNET_RISE
|
||||
.public STATUS_ICON_ARRAY_MIRACLE_EYE
|
||||
.public STATUS_ICON_ARRAY_MUZZLED
|
||||
.public STATUS_ICON_ARRAY_REFLECT
|
||||
.public STATUS_ICON_ARRAY_SLEEP
|
||||
.public STATUS_ICON_ARRAY_SURE_SHOT
|
||||
.public SetMinimapDataE447
|
||||
.public SetMinimapDataE448
|
||||
.public SetMonsterId
|
||||
.public ShouldDisplayEntityWrapper
|
||||
.public StartFadeDungeonWrapper
|
||||
.public StringFromId
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public TOP_SCREEN_STATUS_PTR
|
||||
.public UnloadFile
|
||||
.public UpdateMinimap
|
||||
.public UpdateWindow
|
||||
.public abs
|
||||
.public ov10_022BDC68
|
||||
.public ov10_022BDE50
|
||||
.public ov10_022BEC08
|
||||
@@ -129,37 +153,8 @@
|
||||
.public ov29_0235354C
|
||||
.public ov29_02353558
|
||||
.public ov29_0237C850
|
||||
.public ov29_0237C888
|
||||
.public ov29_0237C88A
|
||||
.public ov29_0237C88E
|
||||
.public ov29_0237C890
|
||||
.public ov29_0237C892
|
||||
.public PlayEffectAnimationEntity
|
||||
.public RandIntSafe
|
||||
.public SetMinimapDataE447
|
||||
.public SetMinimapDataE448
|
||||
.public SetMonsterId
|
||||
.public ShouldDisplayEntityWrapper
|
||||
.public StartFadeDungeonWrapper
|
||||
.public STATUS_ICON_ARRAY_BIDE
|
||||
.public STATUS_ICON_ARRAY_BLINDED
|
||||
.public STATUS_ICON_ARRAY_BURN
|
||||
.public STATUS_ICON_ARRAY_CRINGE
|
||||
.public STATUS_ICON_ARRAY_CURSE
|
||||
.public STATUS_ICON_ARRAY_FREEZE
|
||||
.public STATUS_ICON_ARRAY_INVISIBLE
|
||||
.public STATUS_ICON_ARRAY_LEECH_SEED
|
||||
.public STATUS_ICON_ARRAY_LONG_TOSS
|
||||
.public STATUS_ICON_ARRAY_MAGNET_RISE
|
||||
.public STATUS_ICON_ARRAY_MIRACLE_EYE
|
||||
.public STATUS_ICON_ARRAY_MUZZLED
|
||||
.public STATUS_ICON_ARRAY_REFLECT
|
||||
.public STATUS_ICON_ARRAY_SLEEP
|
||||
.public STATUS_ICON_ARRAY_SURE_SHOT
|
||||
.public StringFromId
|
||||
.public sub_0200B330
|
||||
.public sub_0200B3D4
|
||||
.public sub_0201B9F8
|
||||
.public sub_0201C000
|
||||
.public sub_0201CF90
|
||||
.public sub_0201D034
|
||||
@@ -169,8 +164,3 @@
|
||||
.public sub_02048400
|
||||
.public sub_0204AEA0
|
||||
.public sub_0204AF58
|
||||
.public SubstitutePlaceholderStringTags
|
||||
.public TOP_SCREEN_STATUS_PTR
|
||||
.public UnloadFile
|
||||
.public UpdateMinimap
|
||||
.public UpdateWindow
|
||||
|
||||
14
asm/include/overlay_29_022E91A4.inc
Normal file
14
asm/include/overlay_29_022E91A4.inc
Normal file
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
.public DUNGEON_PTR
|
||||
.public EntityIsValid__022E95F4
|
||||
.public GetTile
|
||||
.public GetVisibilityRange
|
||||
.public LEADER_PTR
|
||||
.public _020AFC4C
|
||||
.public abs
|
||||
.public ov29_0237C888
|
||||
.public ov29_0237C88A
|
||||
.public ov29_0237C88E
|
||||
.public ov29_0237C890
|
||||
.public ov29_0237C892
|
||||
.public sub_0201B9F8
|
||||
@@ -1,25 +1,8 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_022E333C.inc"
|
||||
.include "overlay_29_022E335C.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start GetVisibilityRange
|
||||
GetVisibilityRange: ; 0x022E333C
|
||||
ldr r0, _022E3358 ; =DUNGEON_PTR
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x1a000
|
||||
#ifdef JAPAN
|
||||
ldrb r0, [r0, #0x199]
|
||||
#else
|
||||
ldrb r0, [r0, #0x23d]
|
||||
#endif
|
||||
cmp r0, #0
|
||||
moveq r0, #2
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_022E3358: .word DUNGEON_PTR
|
||||
arm_func_end GetVisibilityRange
|
||||
|
||||
arm_func_start ov29_022E335C
|
||||
ov29_022E335C: ; 0x022E335C
|
||||
#ifdef JAPAN
|
||||
@@ -7301,398 +7301,3 @@ GetChebyshevDistance: ; 0x022E908C
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end GetChebyshevDistance
|
||||
|
||||
arm_func_start IsPositionActuallyInSight
|
||||
IsPositionActuallyInSight: ; 0x022E90CC
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r7, r0
|
||||
mov r4, r1
|
||||
mov r6, r2
|
||||
bl GetVisibilityRange
|
||||
mov r5, r0
|
||||
ldrsh r0, [r7]
|
||||
ldrsh r1, [r7, #2]
|
||||
bl GetTile
|
||||
cmp r6, #0
|
||||
ldrb ip, [r0, #7]
|
||||
bne _022E9104
|
||||
cmp ip, #0xff
|
||||
bne _022E913C
|
||||
_022E9104:
|
||||
ldrsh r1, [r7]
|
||||
ldrsh r0, [r4]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, r5
|
||||
bgt _022E9198
|
||||
ldrsh r1, [r7, #2]
|
||||
ldrsh r0, [r4, #2]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, r5
|
||||
bgt _022E9198
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E913C:
|
||||
ldr r0, _022E91A0 ; =DUNGEON_PTR
|
||||
mov r1, #0x1c
|
||||
ldr r0, [r0]
|
||||
ldrsh r2, [r4]
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x244
|
||||
#else
|
||||
add r0, r0, #0x2e8
|
||||
#endif
|
||||
add r0, r0, #0xec00
|
||||
mla r3, ip, r1, r0
|
||||
ldrsh r0, [r3, #2]
|
||||
sub r0, r0, #1
|
||||
cmp r0, r2
|
||||
ldrlesh r0, [r3, #4]
|
||||
ldrlesh r1, [r4, #2]
|
||||
suble r0, r0, #1
|
||||
cmple r0, r1
|
||||
bgt _022E9198
|
||||
ldrsh r0, [r3, #6]
|
||||
add r0, r0, #1
|
||||
cmp r0, r2
|
||||
ldrgtsh r0, [r3, #8]
|
||||
addgt r0, r0, #1
|
||||
cmpgt r0, r1
|
||||
movgt r0, #1
|
||||
ldmgtia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E9198:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_022E91A0: .word DUNGEON_PTR
|
||||
arm_func_end IsPositionActuallyInSight
|
||||
|
||||
arm_func_start IsPositionInSight
|
||||
IsPositionInSight: ; 0x022E91A4
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
ldrsh r0, [r5]
|
||||
ldrsh r1, [r5, #2]
|
||||
mov r7, r2
|
||||
bl GetTile
|
||||
ldrb r6, [r0, #7]
|
||||
cmp r6, #0xff
|
||||
beq _022E9230
|
||||
cmp r7, #0
|
||||
bne _022E9230
|
||||
ldr r0, _022E9294 ; =DUNGEON_PTR
|
||||
mov r1, #0x1c
|
||||
ldr r0, [r0]
|
||||
ldrsh r2, [r4]
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x244
|
||||
#else
|
||||
add r0, r0, #0x2e8
|
||||
#endif
|
||||
add r0, r0, #0xec00
|
||||
mla r3, r6, r1, r0
|
||||
ldrsh r0, [r3, #2]
|
||||
sub r0, r0, #1
|
||||
cmp r0, r2
|
||||
ldrlesh r0, [r3, #4]
|
||||
ldrlesh r1, [r4, #2]
|
||||
suble r0, r0, #1
|
||||
cmple r0, r1
|
||||
bgt _022E9230
|
||||
ldrsh r0, [r3, #6]
|
||||
add r0, r0, #1
|
||||
cmp r0, r2
|
||||
ldrgtsh r0, [r3, #8]
|
||||
addgt r0, r0, #1
|
||||
cmpgt r0, r1
|
||||
movgt r0, #1
|
||||
ldmgtia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E9230:
|
||||
ldrsh r1, [r5, #2]
|
||||
ldrsh r0, [r4, #2]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
ldrsh r2, [r5]
|
||||
ldrsh r1, [r4]
|
||||
mov r6, r0
|
||||
sub r0, r2, r1
|
||||
bl abs
|
||||
cmp r0, r6
|
||||
movle r0, r6
|
||||
cmp r0, #2
|
||||
movgt r0, #0
|
||||
ldmgtia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
bne _022E928C
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl ov29_022E935C
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E928C:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_022E9294: .word DUNGEON_PTR
|
||||
arm_func_end IsPositionInSight
|
||||
|
||||
arm_func_start ov29_022E9298
|
||||
ov29_022E9298: ; 0x022E9298
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
ldrsh r0, [r5]
|
||||
ldrsh r1, [r5, #2]
|
||||
mov r7, r2
|
||||
bl GetTile
|
||||
mov r6, r0
|
||||
bl GetVisibilityRange
|
||||
cmp r7, #0
|
||||
ldrb r2, [r6, #7]
|
||||
bne _022E92D0
|
||||
cmp r2, #0xff
|
||||
bne _022E930C
|
||||
_022E92D0:
|
||||
ldrsh r1, [r5]
|
||||
sub r1, r1, r0
|
||||
str r1, [r4]
|
||||
ldrsh r1, [r5]
|
||||
add r1, r1, r0
|
||||
add r1, r1, #1
|
||||
str r1, [r4, #8]
|
||||
ldrsh r1, [r5, #2]
|
||||
sub r1, r1, r0
|
||||
str r1, [r4, #4]
|
||||
ldrsh r1, [r5, #2]
|
||||
add r0, r1, r0
|
||||
add r0, r0, #1
|
||||
str r0, [r4, #0xc]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E930C:
|
||||
ldr r0, _022E9358 ; =DUNGEON_PTR
|
||||
mov r1, #0x1c
|
||||
ldr r0, [r0]
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x244
|
||||
#else
|
||||
add r0, r0, #0x2e8
|
||||
#endif
|
||||
add r0, r0, #0xec00
|
||||
mla r1, r2, r1, r0
|
||||
ldrsh r0, [r1, #2]
|
||||
sub r0, r0, #1
|
||||
str r0, [r4]
|
||||
ldrsh r0, [r1, #6]
|
||||
add r0, r0, #2
|
||||
str r0, [r4, #8]
|
||||
ldrsh r0, [r1, #4]
|
||||
sub r0, r0, #1
|
||||
str r0, [r4, #4]
|
||||
ldrsh r0, [r1, #8]
|
||||
add r0, r0, #2
|
||||
str r0, [r4, #0xc]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_022E9358: .word DUNGEON_PTR
|
||||
arm_func_end ov29_022E9298
|
||||
|
||||
arm_func_start ov29_022E935C
|
||||
ov29_022E935C: ; 0x022E935C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r8, r0
|
||||
mov r7, r1
|
||||
ldrsh r4, [r8]
|
||||
ldrsh r0, [r7]
|
||||
sub r0, r4, r0
|
||||
bl abs
|
||||
mov r6, r0
|
||||
cmp r6, #1
|
||||
bgt _022E93A0
|
||||
ldrsh r1, [r8, #2]
|
||||
ldrsh r0, [r7, #2]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, #1
|
||||
movle r0, #1
|
||||
ldmleia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
_022E93A0:
|
||||
ldrsh r5, [r8, #2]
|
||||
ldrsh r0, [r7, #2]
|
||||
sub r0, r5, r0
|
||||
bl abs
|
||||
cmp r6, r0
|
||||
movle r6, r0
|
||||
cmp r6, #2
|
||||
bne _022E9480
|
||||
mov r6, #0
|
||||
b _022E9410
|
||||
_022E93C8:
|
||||
ldrsh r0, [r7]
|
||||
cmp r4, r0
|
||||
addlt r4, r4, #1
|
||||
cmp r4, r0
|
||||
ldrsh r0, [r7, #2]
|
||||
subgt r4, r4, #1
|
||||
cmp r5, r0
|
||||
addlt r5, r5, #1
|
||||
cmp r5, r0
|
||||
subgt r5, r5, #1
|
||||
mov r0, r4
|
||||
mov r1, r5
|
||||
bl GetTile
|
||||
ldrh r0, [r0]
|
||||
tst r0, #3
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
add r6, r6, #1
|
||||
_022E9410:
|
||||
cmp r6, #2
|
||||
blt _022E93C8
|
||||
ldrsh r4, [r7]
|
||||
ldrsh r5, [r7, #2]
|
||||
mov r6, #0
|
||||
b _022E9470
|
||||
_022E9428:
|
||||
ldrsh r0, [r8]
|
||||
cmp r4, r0
|
||||
addlt r4, r4, #1
|
||||
cmp r4, r0
|
||||
ldrsh r0, [r8, #2]
|
||||
subgt r4, r4, #1
|
||||
cmp r5, r0
|
||||
addlt r5, r5, #1
|
||||
cmp r5, r0
|
||||
subgt r5, r5, #1
|
||||
mov r0, r4
|
||||
mov r1, r5
|
||||
bl GetTile
|
||||
ldrh r0, [r0]
|
||||
tst r0, #3
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
add r6, r6, #1
|
||||
_022E9470:
|
||||
cmp r6, #2
|
||||
blt _022E9428
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
_022E9480:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
arm_func_end ov29_022E935C
|
||||
|
||||
arm_func_start ov29_022E9488
|
||||
ov29_022E9488: ; 0x022E9488
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldr ip, _022E955C ; =DUNGEON_PTR
|
||||
ldr r3, _022E9560 ; =0x0001A224
|
||||
ldr r4, [ip]
|
||||
add ip, r3, #2
|
||||
ldrsh r3, [r4, r3]
|
||||
ldrsh r4, [r4, ip]
|
||||
mvn lr, #0xf
|
||||
sub r3, r0, r3
|
||||
sub r0, r1, r4
|
||||
cmp r3, lr
|
||||
cmpge r0, lr
|
||||
blt _022E9554
|
||||
rsb r1, lr, #0xff
|
||||
cmp r3, r1
|
||||
cmplt r0, #0xd0
|
||||
bge _022E9554
|
||||
mov r1, #0xc
|
||||
mul ip, r2, r1
|
||||
ldr r4, _022E9564 ; =ov29_0237C88A
|
||||
ldr r5, _022E9568 ; =ov29_0237C890
|
||||
ldrh r2, [r4, ip]
|
||||
sub r1, r1, #0x20c
|
||||
ldrsh r5, [r5, ip]
|
||||
and r1, r2, r1
|
||||
strh r1, [r4, ip]
|
||||
add r1, r3, r5
|
||||
ldrh r2, [r4, ip]
|
||||
and r1, r1, lr, lsr #23
|
||||
ldr r3, _022E956C ; =ov29_0237C88E
|
||||
orr r1, r2, r1
|
||||
strh r1, [r4, ip]
|
||||
ldr r1, _022E9570 ; =ov29_0237C892
|
||||
ldrh r4, [r3, ip]
|
||||
ldrsh lr, [r1, ip]
|
||||
ldr r1, _022E9574 ; =0xFFFF000F
|
||||
ldr r2, _022E9578 ; =_020AFC4C
|
||||
and r1, r4, r1
|
||||
strh r1, [r3, ip]
|
||||
add r0, r0, lr
|
||||
ldr r1, _022E957C ; =ov29_0237C888
|
||||
mov lr, r0, lsl #0x14
|
||||
ldrh r4, [r3, ip]
|
||||
ldr r0, [r2]
|
||||
add r1, r1, ip
|
||||
orr r4, r4, lr, lsr #16
|
||||
mov r2, #0
|
||||
strh r4, [r3, ip]
|
||||
bl sub_0201B9F8
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022E9554:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_022E955C: .word DUNGEON_PTR
|
||||
#ifdef JAPAN
|
||||
_022E9560: .word 0x0001A180
|
||||
#else
|
||||
_022E9560: .word 0x0001A224
|
||||
#endif
|
||||
_022E9564: .word ov29_0237C88A
|
||||
_022E9568: .word ov29_0237C890
|
||||
_022E956C: .word ov29_0237C88E
|
||||
_022E9570: .word ov29_0237C892
|
||||
_022E9574: .word 0xFFFF000F
|
||||
_022E9578: .word _020AFC4C
|
||||
_022E957C: .word ov29_0237C888
|
||||
arm_func_end ov29_022E9488
|
||||
|
||||
arm_func_start GetLeader
|
||||
GetLeader: ; 0x022E9580
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r0, _022E95EC ; =LEADER_PTR
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
mov r5, #0
|
||||
ldr r4, _022E95F0 ; =DUNGEON_PTR
|
||||
b _022E95DC
|
||||
_022E95A0:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
#ifdef JAPAN
|
||||
ldr r6, [r0, #0xa84]
|
||||
#else
|
||||
ldr r6, [r0, #0xb28]
|
||||
#endif
|
||||
mov r0, r6
|
||||
bl EntityIsValid__022E95F4
|
||||
cmp r0, #0
|
||||
ldrne r0, [r6, #0xb4]
|
||||
ldrneb r0, [r0, #7]
|
||||
cmpne r0, #0
|
||||
ldrne r1, _022E95EC ; =LEADER_PTR
|
||||
movne r0, r6
|
||||
strne r6, [r1]
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
add r5, r5, #1
|
||||
_022E95DC:
|
||||
cmp r5, #4
|
||||
blt _022E95A0
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_022E95EC: .word LEADER_PTR
|
||||
_022E95F0: .word DUNGEON_PTR
|
||||
arm_func_end GetLeader
|
||||
|
||||
333
asm/overlay_29_022E91A4.s
Normal file
333
asm/overlay_29_022E91A4.s
Normal file
@@ -0,0 +1,333 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "overlay_29_022E91A4.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start IsPositionInSight
|
||||
IsPositionInSight: ; 0x022E91A4
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
ldrsh r0, [r5]
|
||||
ldrsh r1, [r5, #2]
|
||||
mov r7, r2
|
||||
bl GetTile
|
||||
ldrb r6, [r0, #7]
|
||||
cmp r6, #0xff
|
||||
beq _022E9230
|
||||
cmp r7, #0
|
||||
bne _022E9230
|
||||
ldr r0, _022E9294 ; =DUNGEON_PTR
|
||||
mov r1, #0x1c
|
||||
ldr r0, [r0]
|
||||
ldrsh r2, [r4]
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x244
|
||||
#else
|
||||
add r0, r0, #0x2e8
|
||||
#endif
|
||||
add r0, r0, #0xec00
|
||||
mla r3, r6, r1, r0
|
||||
ldrsh r0, [r3, #2]
|
||||
sub r0, r0, #1
|
||||
cmp r0, r2
|
||||
ldrlesh r0, [r3, #4]
|
||||
ldrlesh r1, [r4, #2]
|
||||
suble r0, r0, #1
|
||||
cmple r0, r1
|
||||
bgt _022E9230
|
||||
ldrsh r0, [r3, #6]
|
||||
add r0, r0, #1
|
||||
cmp r0, r2
|
||||
ldrgtsh r0, [r3, #8]
|
||||
addgt r0, r0, #1
|
||||
cmpgt r0, r1
|
||||
movgt r0, #1
|
||||
ldmgtia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E9230:
|
||||
ldrsh r1, [r5, #2]
|
||||
ldrsh r0, [r4, #2]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
ldrsh r2, [r5]
|
||||
ldrsh r1, [r4]
|
||||
mov r6, r0
|
||||
sub r0, r2, r1
|
||||
bl abs
|
||||
cmp r0, r6
|
||||
movle r0, r6
|
||||
cmp r0, #2
|
||||
movgt r0, #0
|
||||
ldmgtia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
bne _022E928C
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
bl ov29_022E935C
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E928C:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_022E9294: .word DUNGEON_PTR
|
||||
arm_func_end IsPositionInSight
|
||||
|
||||
arm_func_start ov29_022E9298
|
||||
ov29_022E9298: ; 0x022E9298
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, lr}
|
||||
mov r5, r0
|
||||
mov r4, r1
|
||||
ldrsh r0, [r5]
|
||||
ldrsh r1, [r5, #2]
|
||||
mov r7, r2
|
||||
bl GetTile
|
||||
mov r6, r0
|
||||
bl GetVisibilityRange
|
||||
cmp r7, #0
|
||||
ldrb r2, [r6, #7]
|
||||
bne _022E92D0
|
||||
cmp r2, #0xff
|
||||
bne _022E930C
|
||||
_022E92D0:
|
||||
ldrsh r1, [r5]
|
||||
sub r1, r1, r0
|
||||
str r1, [r4]
|
||||
ldrsh r1, [r5]
|
||||
add r1, r1, r0
|
||||
add r1, r1, #1
|
||||
str r1, [r4, #8]
|
||||
ldrsh r1, [r5, #2]
|
||||
sub r1, r1, r0
|
||||
str r1, [r4, #4]
|
||||
ldrsh r1, [r5, #2]
|
||||
add r0, r1, r0
|
||||
add r0, r0, #1
|
||||
str r0, [r4, #0xc]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
_022E930C:
|
||||
ldr r0, _022E9358 ; =DUNGEON_PTR
|
||||
mov r1, #0x1c
|
||||
ldr r0, [r0]
|
||||
#ifdef JAPAN
|
||||
add r0, r0, #0x244
|
||||
#else
|
||||
add r0, r0, #0x2e8
|
||||
#endif
|
||||
add r0, r0, #0xec00
|
||||
mla r1, r2, r1, r0
|
||||
ldrsh r0, [r1, #2]
|
||||
sub r0, r0, #1
|
||||
str r0, [r4]
|
||||
ldrsh r0, [r1, #6]
|
||||
add r0, r0, #2
|
||||
str r0, [r4, #8]
|
||||
ldrsh r0, [r1, #4]
|
||||
sub r0, r0, #1
|
||||
str r0, [r4, #4]
|
||||
ldrsh r0, [r1, #8]
|
||||
add r0, r0, #2
|
||||
str r0, [r4, #0xc]
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_022E9358: .word DUNGEON_PTR
|
||||
arm_func_end ov29_022E9298
|
||||
|
||||
arm_func_start ov29_022E935C
|
||||
ov29_022E935C: ; 0x022E935C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, lr}
|
||||
mov r8, r0
|
||||
mov r7, r1
|
||||
ldrsh r4, [r8]
|
||||
ldrsh r0, [r7]
|
||||
sub r0, r4, r0
|
||||
bl abs
|
||||
mov r6, r0
|
||||
cmp r6, #1
|
||||
bgt _022E93A0
|
||||
ldrsh r1, [r8, #2]
|
||||
ldrsh r0, [r7, #2]
|
||||
sub r0, r1, r0
|
||||
bl abs
|
||||
cmp r0, #1
|
||||
movle r0, #1
|
||||
ldmleia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
_022E93A0:
|
||||
ldrsh r5, [r8, #2]
|
||||
ldrsh r0, [r7, #2]
|
||||
sub r0, r5, r0
|
||||
bl abs
|
||||
cmp r6, r0
|
||||
movle r6, r0
|
||||
cmp r6, #2
|
||||
bne _022E9480
|
||||
mov r6, #0
|
||||
b _022E9410
|
||||
_022E93C8:
|
||||
ldrsh r0, [r7]
|
||||
cmp r4, r0
|
||||
addlt r4, r4, #1
|
||||
cmp r4, r0
|
||||
ldrsh r0, [r7, #2]
|
||||
subgt r4, r4, #1
|
||||
cmp r5, r0
|
||||
addlt r5, r5, #1
|
||||
cmp r5, r0
|
||||
subgt r5, r5, #1
|
||||
mov r0, r4
|
||||
mov r1, r5
|
||||
bl GetTile
|
||||
ldrh r0, [r0]
|
||||
tst r0, #3
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
add r6, r6, #1
|
||||
_022E9410:
|
||||
cmp r6, #2
|
||||
blt _022E93C8
|
||||
ldrsh r4, [r7]
|
||||
ldrsh r5, [r7, #2]
|
||||
mov r6, #0
|
||||
b _022E9470
|
||||
_022E9428:
|
||||
ldrsh r0, [r8]
|
||||
cmp r4, r0
|
||||
addlt r4, r4, #1
|
||||
cmp r4, r0
|
||||
ldrsh r0, [r8, #2]
|
||||
subgt r4, r4, #1
|
||||
cmp r5, r0
|
||||
addlt r5, r5, #1
|
||||
cmp r5, r0
|
||||
subgt r5, r5, #1
|
||||
mov r0, r4
|
||||
mov r1, r5
|
||||
bl GetTile
|
||||
ldrh r0, [r0]
|
||||
tst r0, #3
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
add r6, r6, #1
|
||||
_022E9470:
|
||||
cmp r6, #2
|
||||
blt _022E9428
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
_022E9480:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
||||
arm_func_end ov29_022E935C
|
||||
|
||||
arm_func_start ov29_022E9488
|
||||
ov29_022E9488: ; 0x022E9488
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
ldr ip, _022E955C ; =DUNGEON_PTR
|
||||
ldr r3, _022E9560 ; =0x0001A224
|
||||
ldr r4, [ip]
|
||||
add ip, r3, #2
|
||||
ldrsh r3, [r4, r3]
|
||||
ldrsh r4, [r4, ip]
|
||||
mvn lr, #0xf
|
||||
sub r3, r0, r3
|
||||
sub r0, r1, r4
|
||||
cmp r3, lr
|
||||
cmpge r0, lr
|
||||
blt _022E9554
|
||||
rsb r1, lr, #0xff
|
||||
cmp r3, r1
|
||||
cmplt r0, #0xd0
|
||||
bge _022E9554
|
||||
mov r1, #0xc
|
||||
mul ip, r2, r1
|
||||
ldr r4, _022E9564 ; =ov29_0237C88A
|
||||
ldr r5, _022E9568 ; =ov29_0237C890
|
||||
ldrh r2, [r4, ip]
|
||||
sub r1, r1, #0x20c
|
||||
ldrsh r5, [r5, ip]
|
||||
and r1, r2, r1
|
||||
strh r1, [r4, ip]
|
||||
add r1, r3, r5
|
||||
ldrh r2, [r4, ip]
|
||||
and r1, r1, lr, lsr #23
|
||||
ldr r3, _022E956C ; =ov29_0237C88E
|
||||
orr r1, r2, r1
|
||||
strh r1, [r4, ip]
|
||||
ldr r1, _022E9570 ; =ov29_0237C892
|
||||
ldrh r4, [r3, ip]
|
||||
ldrsh lr, [r1, ip]
|
||||
ldr r1, _022E9574 ; =0xFFFF000F
|
||||
ldr r2, _022E9578 ; =_020AFC4C
|
||||
and r1, r4, r1
|
||||
strh r1, [r3, ip]
|
||||
add r0, r0, lr
|
||||
ldr r1, _022E957C ; =ov29_0237C888
|
||||
mov lr, r0, lsl #0x14
|
||||
ldrh r4, [r3, ip]
|
||||
ldr r0, [r2]
|
||||
add r1, r1, ip
|
||||
orr r4, r4, lr, lsr #16
|
||||
mov r2, #0
|
||||
strh r4, [r3, ip]
|
||||
bl sub_0201B9F8
|
||||
mov r0, #1
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
_022E9554:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
.align 2, 0
|
||||
_022E955C: .word DUNGEON_PTR
|
||||
#ifdef JAPAN
|
||||
_022E9560: .word 0x0001A180
|
||||
#else
|
||||
_022E9560: .word 0x0001A224
|
||||
#endif
|
||||
_022E9564: .word ov29_0237C88A
|
||||
_022E9568: .word ov29_0237C890
|
||||
_022E956C: .word ov29_0237C88E
|
||||
_022E9570: .word ov29_0237C892
|
||||
_022E9574: .word 0xFFFF000F
|
||||
_022E9578: .word _020AFC4C
|
||||
_022E957C: .word ov29_0237C888
|
||||
arm_func_end ov29_022E9488
|
||||
|
||||
arm_func_start GetLeader
|
||||
GetLeader: ; 0x022E9580
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r0, _022E95EC ; =LEADER_PTR
|
||||
ldr r0, [r0]
|
||||
cmp r0, #0
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
mov r5, #0
|
||||
ldr r4, _022E95F0 ; =DUNGEON_PTR
|
||||
b _022E95DC
|
||||
_022E95A0:
|
||||
ldr r0, [r4]
|
||||
add r0, r0, r5, lsl #2
|
||||
add r0, r0, #0x12000
|
||||
#ifdef JAPAN
|
||||
ldr r6, [r0, #0xa84]
|
||||
#else
|
||||
ldr r6, [r0, #0xb28]
|
||||
#endif
|
||||
mov r0, r6
|
||||
bl EntityIsValid__022E95F4
|
||||
cmp r0, #0
|
||||
ldrne r0, [r6, #0xb4]
|
||||
ldrneb r0, [r0, #7]
|
||||
cmpne r0, #0
|
||||
ldrne r1, _022E95EC ; =LEADER_PTR
|
||||
movne r0, r6
|
||||
strne r6, [r1]
|
||||
ldmneia sp!, {r4, r5, r6, pc}
|
||||
add r5, r5, #1
|
||||
_022E95DC:
|
||||
cmp r5, #4
|
||||
blt _022E95A0
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_022E95EC: .word LEADER_PTR
|
||||
_022E95F0: .word DUNGEON_PTR
|
||||
arm_func_end GetLeader
|
||||
@@ -7,5 +7,6 @@
|
||||
bool8 EntityIsValid__022E32E8(struct entity *entity);
|
||||
// Checks if a monster is holding a certain item that isn't disabled by Klutz.
|
||||
bool8 ItemIsActive__022E330C(struct entity *entity, enum item_id item_id);
|
||||
s16 GetVisibilityRange();
|
||||
|
||||
#endif //PMDSKY_OVERLAY_29_022E32E8_H
|
||||
|
||||
8
include/dungeon_range.h
Normal file
8
include/dungeon_range.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef PMDSKY_DUNGEON_RANGE_H
|
||||
#define PMDSKY_DUNGEON_RANGE_H
|
||||
|
||||
#include "dungeon_mode.h"
|
||||
|
||||
bool8 IsPositionActuallyInSight(struct position *origin, struct position *target, bool8 user_has_dropeye);
|
||||
|
||||
#endif //PMDSKY_DUNGEON_RANGE_H
|
||||
6
include/map.h
Normal file
6
include/map.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef PMDSKY_MAP_H
|
||||
#define PMDSKY_MAP_H
|
||||
|
||||
#define CORRIDOR_ROOM 0xFF
|
||||
|
||||
#endif //PMDSKY_MAP_H
|
||||
4
main.lsf
4
main.lsf
@@ -240,9 +240,11 @@ Overlay OVY_29
|
||||
Object src/dungeon_visibility.o
|
||||
Object asm/overlay_29_022E2810.o
|
||||
Object src/dg_camera.o
|
||||
Object asm/overlay_29_022E333C.o
|
||||
Object asm/overlay_29_022E335C.o
|
||||
Object src/dg_effect.o
|
||||
Object asm/overlay_29_022E37DC.o
|
||||
Object src/dungeon_range.o
|
||||
Object asm/overlay_29_022E91A4.o
|
||||
Object src/dg_uty.o
|
||||
Object asm/overlay_29_022E9618.o
|
||||
Object src/overlay_29_022EA9EC.o
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
#include "dg_camera.h"
|
||||
#include "dungeon.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
|
||||
extern struct dungeon *DUNGEON_PTR[];
|
||||
|
||||
// file starts at 0x022e26b68
|
||||
|
||||
bool8 EntityIsValid__022E32E8(struct entity *entity)
|
||||
@@ -19,3 +22,12 @@ bool8 ItemIsActive__022E330C(struct entity *entity, enum item_id item_id)
|
||||
|
||||
return HasHeldItem(entity, item_id);
|
||||
}
|
||||
|
||||
s16 GetVisibilityRange()
|
||||
{
|
||||
s16 visibility_range = DUNGEON_PTR[0]->display_data.visibility_range;
|
||||
if (visibility_range == 0)
|
||||
return 2;
|
||||
|
||||
return visibility_range;
|
||||
}
|
||||
|
||||
33
src/dungeon_range.c
Normal file
33
src/dungeon_range.c
Normal file
@@ -0,0 +1,33 @@
|
||||
#include "dungeon_range.h"
|
||||
#include "dg_camera.h"
|
||||
#include "dungeon.h"
|
||||
#include "map.h"
|
||||
|
||||
extern struct dungeon *DUNGEON_PTR[];
|
||||
|
||||
extern struct tile* GetTile(int x, int y);
|
||||
extern s32 abs(s32 value);
|
||||
|
||||
bool8 IsPositionActuallyInSight(struct position *origin, struct position *target, bool8 user_has_dropeye)
|
||||
{
|
||||
u8 origin_room;
|
||||
s16 visibility = GetVisibilityRange();
|
||||
const struct tile *tile_1;
|
||||
|
||||
tile_1 = GetTile(origin->x, origin->y);
|
||||
origin_room = tile_1->room;
|
||||
if (user_has_dropeye || origin_room == CORRIDOR_ROOM)
|
||||
{
|
||||
if (abs(origin->x - target->x) <= visibility && abs(origin->y - target->y) <= visibility)
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
struct room_data *origin_room_data = &DUNGEON_PTR[0]->room_data[origin_room];
|
||||
if (origin_room_data->bottom_right_corner.x - 1 <= target->x && origin_room_data->bottom_right_corner.y - 1 <= target->y &&
|
||||
origin_room_data->top_left_corner.x + 1 > target->x && origin_room_data->top_left_corner.y + 1 > target->y)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1,11 +1,10 @@
|
||||
#include "dungeon_visibility.h"
|
||||
#include "dg_object.h"
|
||||
#include "dungeon_pokemon_attributes_1.h"
|
||||
#include "dungeon_range.h"
|
||||
#include "dungeon_statuses.h"
|
||||
#include "dungeon_util_static.h"
|
||||
|
||||
extern bool8 IsPositionActuallyInSight(struct position *pos1, struct position *pos2, bool8 user_has_dropeye);
|
||||
|
||||
bool8 CanSeeTarget(struct entity *user, struct entity *target)
|
||||
{
|
||||
if (!EntityIsValid__022E1A1C(user))
|
||||
|
||||
Reference in New Issue
Block a user