Decomp ten dungeon utilities; drop a provisional GetLeaderMonster extern

GetLeaderMonster, SetDungeonRngPreseed, GetDungeonRngPreseed,
SetDungeonRngPreseed23Bit, FindClosestUnoccupiedTileWithin2,
FindFarthestUnoccupiedTileWithin2, FindUnoccupiedTileWithin3,
FixedRoomActionParamToDirection, ov29_022E9FC0 and ov29_022E9FD0.

The three preseed accessors read and write prng_state::preseed at offset 8,
using the struct dg_random.h already defines. SetDungeonRngPreseed23Bit sets bit
0 and masks the top byte, which is where its name comes from.

GetLeaderMonster merged into dg_uty.h alongside GetLeader, so the provisional
`extern struct monster *GetLeaderMonster();` that src/overlay_29_022F0EDC.c
carried is removed -- that file already includes dg_uty.h, which now declares it
properly with a (void) parameter list.

The three FindNearbyUnoccupiedTile wrappers pass a displacement table and a
count (0x19 within 2, 0x31 within 3). That helper and its tables are undeclared
in the tree, so their prototypes are written from these call sites and are
provisional.

Authored by Claude (Opus 5) under human direction. All ten verified at score 0.
Confirmed by a matching build: build/pmdsky.us/pmdsky.us.nds: OK. None carries a
region conditional, so US alone is sufficient.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
cecilarmitais
2026-08-19 17:43:26 -07:00
parent 185c390e56
commit 25d5994bdf
27 changed files with 2357 additions and 2284 deletions

View File

@@ -0,0 +1,8 @@
#pragma once
.public DUNGEON_PTR
.public DungeonRandInt
.public GetLeader
.public GetTile
.public MemAlloc
.public MemFree
.public abs

View File

@@ -0,0 +1,14 @@
#pragma once
.public CheckVariousStatuses2__02301244
.public DIRECTIONS_XY
.public DUNGEON_FRAMES_PASSED
.public DUNGEON_PTR
.public EntityIsValid__022E95F4
.public GetTreatmentBetweenMonsters
.public ov29_02351628
.public ov29_02351658
.public ov29_0235179C
.public ov29_023517A0
.public ov29_023517A2
.public ov29_02353560
.public ov29_0237C888

View File

@@ -1,32 +1,22 @@
#pragma once
.public _s32_div_f
.public abs
.public ChangeSimpleObjTexture
.public CheckVariousStatuses2__02301244
.public DIRECTIONS_XY
.public DISPLACEMENTS_WITHIN_2_LARGEST_FIRST
.public DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST
.public DISPLACEMENTS_WITHIN_3
.public DisplayMonstersAndItems
.public DisplayUi
.public DUNGEON_BUTTON_INPUT
.public DUNGEON_FRAMES_PASSED
.public DUNGEON_PRNG_STATE
.public DUNGEON_PTR
.public DungeonRandInt
.public EntityIsValid__022E95F4
.public DisplayMonstersAndItems
.public DisplayUi
.public FlashLeaderIcon
.public GetAlertBoxLoadingStatus
.public GetBottomScreenOption
.public GetLeader
.public GetTile
.public GetTopScreenOption
.public GetTreatmentBetweenMonsters
.public HandleTopScreenFades
.public InitWeirdMinimapMatrix
.public MemAlloc
.public MemFree
.public OBJ_GRAPHICS_CONTROLS_PTR
.public RenderWeather3D
.public UpdateCamera
.public UpdateMinimap
.public _s32_div_f
.public ov29_022DD8B4
.public ov29_022DDEF8
.public ov29_022DE11C
@@ -41,15 +31,6 @@
.public ov29_0233A248
.public ov29_0234B1A4
.public ov29_0234B854
.public ov29_02351628
.public ov29_02351658
.public ov29_0235179C
.public ov29_023517A0
.public ov29_023517A2
.public ov29_02353540
.public ov29_02353560
.public ov29_0237C888
.public RenderWeather3D
.public sub_02051E20
.public UpdateCamera
.public UpdateMinimap

View File

@@ -0,0 +1,2 @@
#pragma once
.public DUNGEON_PRNG_STATE

View File

@@ -1,21 +1,18 @@
#pragma once
.public _s32_div_f
.public DetermineAllTilesWalkableNeighbors
.public DUNGEON_PTR
.public DungeonRand16Bit
.public DungeonRandInt
.public DungeonRandRange
.public DungeonRngSetPrimary
.public DungeonRngSetSecondary
.public FIXED_ROOM_DATA_PTR
.public FIXED_ROOM_ENTITY_SPAWN_TABLE
.public FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
.public FLOOR_GENERATION_STATUS
.public FixedRoomActionParamToDirection
.public GenerateAndSpawnItem
.public GetExplorerMazeMonster
.public GetFloorType
.public GetMatchingMonsterId
.public GetMonsterIdFromSpawnEntry
.public GetMonsterLevelToSpawn
.public GetOutlawLeaderLevel
.public GetOutlawLevel
@@ -24,53 +21,32 @@
.public GetResolvedPerformanceProgressFlag
.public GetSpecialTargetItem
.public GetTileSafe
.public HandleSir0Translation
.public HIDDEN_STAIRS_SPAWN_BLOCKED
.public HIDDEN_STAIRS_SPAWN_CHANCE_MULTIPLIER
.public InitializeTile
.public InitOtherMonsterData
.public IsCurrentMissionType
.public InitializeTile
.public IsDestinationFloor
.public IsFullFloorFixedRoom
.public IsGoldenChamber
.public IsSecretRoom
.public IsTreasureBox
.public KECLEON_SHOP_BOOST_CHANCE_MULTIPLIER
.public LoadFileFromRom
.public LogMessageByIdWithPopupCheckUser
.public MemAlloc
.public MemFree
.public MemZero
.public MultiplyByFixedPoint
.public ov10_022C4B34
.public ov10_022C6C75
.public ov10_022C6C77
.public ov10_022C6C78
.public ov10_022C6C79
.public ov29_022E7BD0
.public ov29_022EA370
.public ov29_023365E8
.public ov29_02336694
.public ov29_023442B8
.public ov29_02348BE8
.public ov29_023502F0
.public ov29_023502F4
.public ov29_02353050
.public ov29_02353110
.public ov29_023534F0
.public ov29_0237CFC0
.public PlayKeyDoorUnlockEffect
.public PointsToZero
.public SetMonsterLevelAndId
.public SHOP_ITEM_CHANCES
.public SetShouldBoostHiddenStairsSpawnChance
.public SetShouldBoostKecleonShopSpawnChance
.public SHOP_ITEM_CHANCES
.public ShouldBoostHiddenStairsSpawnChance
.public ShouldBoostKecleonShopSpawnChance
.public SpawnEnemyTrapAtPos
.public SpawnMonster
.public TREASURE_BOX_1_ITEM_IDS
.public UnloadFile
.public UpdateMinimap
.public UpdateTrapsVisibility
.public ZInit8
.public _s32_div_f
.public ov10_022C4B34
.public ov29_023365E8
.public ov29_023442B8
.public ov29_023502F0
.public ov29_023502F4
.public ov29_02353050
.public ov29_023534F0
.public ov29_0237CFC0

View File

@@ -0,0 +1,37 @@
#pragma once
.public DUNGEON_PTR
.public DetermineAllTilesWalkableNeighbors
.public FIXED_ROOM_DATA_PTR
.public FIXED_ROOM_ENTITY_SPAWN_TABLE
.public FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
.public GetMatchingMonsterId
.public GetMonsterIdFromSpawnEntry
.public GetOutlawLeaderLevel
.public GetOutlawLevel
.public GetOutlawMinionLevel
.public GetTileSafe
.public HandleSir0Translation
.public IsCurrentMissionType
.public IsFullFloorFixedRoom
.public LoadFileFromRom
.public LogMessageByIdWithPopupCheckUser
.public MemAlloc
.public MemFree
.public MemZero
.public PlaceFixedRoomTile
.public PlayKeyDoorUnlockEffect
.public PointsToZero
.public SetMonsterLevelAndId
.public UnloadFile
.public UpdateMinimap
.public UpdateTrapsVisibility
.public ZInit8
.public ov10_022C6C75
.public ov10_022C6C77
.public ov10_022C6C78
.public ov10_022C6C79
.public ov29_022EA370
.public ov29_02336694
.public ov29_02342BEC
.public ov29_02348BE8
.public ov29_02353110

File diff suppressed because it is too large Load Diff

290
asm/overlay_29_022E9628.s Normal file
View File

@@ -0,0 +1,290 @@
.include "asm/macros.inc"
.include "overlay_29_022E9628.inc"
.text
arm_func_start GetRandomTile
GetRandomTile: ; 0x022E9628
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xe20
mov sl, r0
str r1, [sp]
bl GetLeader
mov r4, #0
str r0, [sp, #0x14]
mov r8, r4
b _022E9830
_022E964C:
mov r0, #0x38
bl DungeonRandInt
mov sb, r0
mov r0, #0x20
bl DungeonRandInt
ldr r1, [sp, #0x14]
str r0, [sp, #0x10]
ldrh r2, [r1, #4]
ldrh r1, [r1, #6]
mov r5, #0
strh r2, [sp, #0x1c]
ldrsh r0, [sp, #0x1c]
strh r1, [sp, #0x1e]
ldrsh fp, [sp, #0x1e]
str r0, [sp, #8]
b _022E97F4
_022E968C:
cmp r4, #0x700
ldr r7, [sp, #0x10]
bge _022E97FC
ldr r0, [sp, #8]
mov r6, #0
sub r0, r0, sb
str r0, [sp, #4]
and r0, sb, #0xff
str r0, [sp, #0x18]
b _022E97DC
_022E96B4:
mov r0, #0
str r0, [sp, #0xc]
mov r0, sb
mov r1, r7
bl GetTile
cmp r4, #0x700
bge _022E97E4
ldr r1, [sp]
cmp r1, #0
beq _022E96E8
ldrh r1, [r0]
tst r1, #0x800
bne _022E97D8
_022E96E8:
cmp r8, #0
bne _022E974C
ldrh r1, [r0]
and r1, r1, #3
cmp r1, #1
bne _022E97A8
ldrb r1, [r0, #7]
cmp r1, #0xff
beq _022E97A8
ldr r1, [r0, #0x10]
cmp r1, #0
ldreq r0, [r0, #0xc]
cmpeq r0, #0
bne _022E97A8
ldr r0, [sp, #4]
bl abs
cmp r0, #6
bge _022E9740
sub r0, fp, r7
bl abs
cmp r0, #6
blt _022E97A8
_022E9740:
mov r0, #1
str r0, [sp, #0xc]
b _022E97A8
_022E974C:
ldrh r1, [r0]
cmp r8, #1
and r1, r1, #3
bne _022E978C
cmp r1, #1
bne _022E97A8
ldrb r1, [r0, #7]
cmp r1, #0xff
beq _022E97A8
ldr r1, [r0, #0x10]
cmp r1, #0
ldreq r0, [r0, #0xc]
cmpeq r0, #0
moveq r0, #1
streq r0, [sp, #0xc]
b _022E97A8
_022E978C:
cmp r1, #1
ldreq r1, [r0, #0x10]
cmpeq r1, #0
ldreq r0, [r0, #0xc]
cmpeq r0, #0
moveq r0, #1
streq r0, [sp, #0xc]
_022E97A8:
ldr r0, [sp, #0xc]
cmp r0, #0
beq _022E97CC
ldr r1, [sp, #0x18]
add r0, sp, #0x20
strb r1, [r0, r4, lsl #1]
add r0, r0, r4, lsl #1
strb r7, [r0, #1]
add r4, r4, #1
_022E97CC:
add r7, r7, #1
cmp r7, #0x20
movge r7, #0
_022E97D8:
add r6, r6, #1
_022E97DC:
cmp r6, #0x20
blt _022E96B4
_022E97E4:
add sb, sb, #1
cmp sb, #0x38
movge sb, #0
add r5, r5, #1
_022E97F4:
cmp r5, #0x38
blt _022E968C
_022E97FC:
cmp r4, #0
beq _022E982C
mov r0, r4
bl DungeonRandInt
add r2, sp, #0x20
ldrb r2, [r2, r0, lsl #1]
add r1, sp, #0x21
strh r2, [sl]
ldrb r1, [r1, r0, lsl #1]
mov r0, #1
strh r1, [sl, #2]
b _022E983C
_022E982C:
add r8, r8, #1
_022E9830:
cmp r8, #3
blt _022E964C
mov r0, #0
_022E983C:
add sp, sp, #0xe20
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
arm_func_end GetRandomTile
arm_func_start FindNearbyUnoccupiedTile
FindNearbyUnoccupiedTile: ; 0x022E9844
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
mov r8, r3
mov sl, r0
mov r0, #0
str r0, [sp, #4]
str r1, [sp]
add r3, r8, #1
mov r1, r0
mov r0, r3, lsl #1
mov sb, r2
ldr r7, [sp, #0x30]
bl MemAlloc
mov r4, r0
mov r1, #0
b _022E9890
_022E9884:
mov r0, r1, lsl #1
strh r1, [r4, r0]
add r1, r1, #1
_022E9890:
cmp r1, r8
blt _022E9884
cmp r7, #0
beq _022E9918
mov r0, #4
bl DungeonRandInt
add r0, r0, #1
mov r0, r0, lsl #0x10
str r0, [sp, #8]
sub fp, r8, #1
mov r6, #0
b _022E990C
_022E98C0:
mov r5, #0
b _022E98F8
_022E98C8:
mov r0, r8
bl DungeonRandInt
mov r0, r0, lsl #0x10
mov r3, r5, lsl #1
mov r1, r0, asr #0xf
ldrsh r2, [r4, r3]
ldrsh r0, [r4, r1]
add r5, r5, #1
mov r5, r5, lsl #0x10
strh r0, [r4, r3]
strh r2, [r4, r1]
mov r5, r5, asr #0x10
_022E98F8:
cmp r5, fp
blt _022E98C8
add r0, r6, #1
mov r0, r0, lsl #0x10
mov r6, r0, asr #0x10
_022E990C:
ldr r0, [sp, #8]
cmp r6, r0, asr #16
blt _022E98C0
_022E9918:
mov r6, #0
b _022E99D0
_022E9920:
mov r0, r6, lsl #1
ldrsh r0, [r4, r0]
mov r0, r0, lsl #2
ldrsh r5, [sb, r0]
cmp r5, #0x63
beq _022E99D8
add r1, sb, r0
ldr r0, [sp]
ldrsh r1, [r1, #2]
ldrsh r3, [r0]
ldrsh r2, [r0, #2]
add fp, r3, r5
add r5, r2, r1
mov r0, fp
mov r1, r5
bl GetTile
ldrh r1, [r0]
tst r1, #0x800
bne _022E99CC
cmp r7, #0
beq _022E99A0
ldrb r2, [r0, #7]
cmp r2, #0xff
beq _022E99CC
ldr r2, _022E99EC ; =DUNGEON_PTR
ldr r2, [r2]
add r2, r2, #0xcc00
#ifdef JAPAN
ldrsh r3, [r2, #0x40]
cmp r3, fp
ldreqsh r2, [r2, #0x42]
#else
ldrsh r3, [r2, #0xe4]
cmp r3, fp
ldreqsh r2, [r2, #0xe6]
#endif
cmpeq r2, r5
beq _022E99CC
_022E99A0:
and r1, r1, #3
cmp r1, #1
ldreq r1, [r0, #0x10]
cmpeq r1, #0
ldreq r0, [r0, #0xc]
cmpeq r0, #0
streqh fp, [sl]
streqh r5, [sl, #2]
moveq r0, #1
streq r0, [sp, #4]
beq _022E99D8
_022E99CC:
add r6, r6, #1
_022E99D0:
cmp r6, r8
blt _022E9920
_022E99D8:
mov r0, r4
bl MemFree
ldr r0, [sp, #4]
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022E99EC: .word DUNGEON_PTR
arm_func_end FindNearbyUnoccupiedTile

414
asm/overlay_29_022E9A44.s Normal file
View File

@@ -0,0 +1,414 @@
.include "asm/macros.inc"
.include "overlay_29_022E9A44.inc"
.text
arm_func_start TickStatusTurnCounter
TickStatusTurnCounter: ; 0x022E9A44
ldrb r1, [r0]
cmp r1, #0x7f
moveq r0, r1
bxeq lr
cmp r1, #0
moveq r0, r1
subne r1, r1, #1
strneb r1, [r0]
andne r0, r1, #0xff
bx lr
arm_func_end TickStatusTurnCounter
arm_func_start ov29_022E9A6C
ov29_022E9A6C: ; 0x022E9A6C
ldrh r2, [r0]
ldr r1, _022E9A98 ; =0x00007530
cmp r2, r1
moveq r0, r2
bxeq lr
cmp r2, #0
moveq r0, r2
subne r1, r2, #1
strneh r1, [r0]
ldrneh r0, [r0]
bx lr
.align 2, 0
_022E9A98: .word 0x00007530
arm_func_end ov29_022E9A6C
arm_func_start ov29_022E9A9C
ov29_022E9A9C: ; 0x022E9A9C
#ifdef JAPAN
#define OV29_022E9A9C_OFFSET -0xA4
#else
#define OV29_022E9A9C_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x18
mov sb, r1
ldr r8, [sb, #0xb4]
mov sl, r0
mov r0, sb
mov r1, #1
ldrb r4, [r8, #0x4c]
bl CheckVariousStatuses2__02301244
cmp r0, #0
beq _022E9B00
ldr r0, _022E9CA0 ; =DIRECTIONS_XY
mov r2, r4, lsl #2
ldrsh r1, [r0, r2]
ldrsh r3, [sb, #4]
ldr r0, _022E9CA4 ; =DIRECTIONS_XY + 2
add r1, r1, r1, lsl #1
add r1, r3, r1
strh r1, [sl]
ldrsh r0, [r0, r2]
ldrsh r1, [sb, #6]
add r0, r0, r0, lsl #1
add r0, r1, r0
strh r0, [sl, #2]
b _022E9C98
_022E9B00:
ldrsh r2, [r8, #0x5a]
mvn r0, #0
cmp r2, r0
ldreqsh r1, [r8, #0x5c]
cmpeq r1, r0
bne _022E9C8C
ldr r0, _022E9CA8 ; =DUNGEON_PTR
ldrb r6, [r8, #0x4c]
ldr r1, [r0]
ldr r4, _022E9CAC ; =ov29_0235179C
add r0, r1, #0x3000
ldrb r0, [r0, #0xe38 + OV29_022E9A9C_OFFSET]
ldr r3, _022E9CB0 ; =ov29_023517A0
mov r5, r6, lsl #3
cmp r0, #0
ldrsh r0, [r3, r5]
ldr r2, _022E9CB4 ; =ov29_023517A2
ldr r4, [r4, r6, lsl #3]
str r0, [sp, #0x14]
ldrsh r0, [r2, r5]
str r0, [sp, #0x10]
ldrsh r0, [sb, #4]
str r0, [sp, #0xc]
ldrsh r0, [sb, #6]
str r0, [sp, #8]
beq _022E9B80
add r0, r1, #0x378 + OV29_022E9A9C_OFFSET
add r0, r0, #0x12800
str r0, [sp, #4]
mov r0, #0x14
str r0, [sp]
b _022E9C44
_022E9B80:
ldrb r0, [r8, #6]
cmp r0, #0
bne _022E9BA4
add r0, r1, #0x338 + OV29_022E9A9C_OFFSET
add r0, r0, #0x12800
str r0, [sp, #4]
mov r0, #0x10
str r0, [sp]
b _022E9C44
_022E9BA4:
add r0, r1, #0x328 + OV29_022E9A9C_OFFSET
add r0, r0, #0x12800
str r0, [sp, #4]
mov r0, #4
str r0, [sp]
b _022E9C44
_022E9BBC:
ldr r1, [sp, #0x14]
ldr r0, [sp, #0xc]
ldrsh r2, [r4, #2]
mla fp, r3, r1, r0
ldr r1, [sp, #0x10]
ldr r0, [sp, #8]
mov r6, #0
mla r5, r2, r1, r0
b _022E9C34
_022E9BE0:
ldr r0, [sp, #4]
ldr r7, [r0, r6, lsl #2]
mov r0, r7
bl EntityIsValid__022E95F4
cmp r0, #0
beq _022E9C30
ldrsh r0, [r7, #4]
cmp r0, fp
ldreqsh r0, [r7, #6]
cmpeq r0, r5
bne _022E9C30
mov r2, #0
mov r1, r7
mov r0, sb
mov r3, r2
bl GetTreatmentBetweenMonsters
cmp r0, #1
streqh fp, [sl]
streqh r5, [sl, #2]
beq _022E9C98
_022E9C30:
add r6, r6, #1
_022E9C34:
ldr r0, [sp]
cmp r6, r0
blt _022E9BE0
add r4, r4, #4
_022E9C44:
ldrsh r3, [r4]
cmp r3, #0x63
bne _022E9BBC
ldrb r1, [r8, #0x4c]
ldr r0, _022E9CA0 ; =DIRECTIONS_XY
ldrsh r2, [sb, #4]
mov r1, r1, lsl #2
ldrsh r1, [r0, r1]
ldr r0, _022E9CA4 ; =DIRECTIONS_XY + 2
add r1, r2, r1, lsl #1
strh r1, [sl]
ldrb r1, [r8, #0x4c]
ldrsh r2, [sb, #6]
mov r1, r1, lsl #2
ldrsh r0, [r0, r1]
add r0, r2, r0, lsl #1
strh r0, [sl, #2]
b _022E9C98
_022E9C8C:
strh r2, [sl]
ldrsh r0, [r8, #0x5c]
strh r0, [sl, #2]
_022E9C98:
add sp, sp, #0x18
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022E9CA0: .word DIRECTIONS_XY
_022E9CA4: .word DIRECTIONS_XY + 2
_022E9CA8: .word DUNGEON_PTR
_022E9CAC: .word ov29_0235179C
_022E9CB0: .word ov29_023517A0
_022E9CB4: .word ov29_023517A2
arm_func_end ov29_022E9A9C
arm_func_start ov29_022E9CB8
ov29_022E9CB8: ; 0x022E9CB8
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
ldr r1, _022E9F04 ; =DUNGEON_FRAMES_PASSED
ldr r0, _022E9F08 ; =0xFFFF000F
ldrh r2, [r1, #0x1a]
mov lr, #0
and r2, r2, r0
strh r2, [r1, #0x1a]
ldrh r2, [r1, #0x14]
bic r2, r2, #0x100
strh r2, [r1, #0x14]
ldrh r2, [r1, #0x14]
bic r2, r2, #0x200
strh r2, [r1, #0x14]
ldrh r2, [r1, #0x14]
bic r2, r2, #0xc00
strh r2, [r1, #0x14]
ldrh r2, [r1, #0x14]
bic r2, r2, #0x1000
strh r2, [r1, #0x14]
ldrh r2, [r1, #0x14]
bic r2, r2, #0x2000
strh r2, [r1, #0x14]
ldrh r2, [r1, #0x14]
orr r2, r2, #0x2000
strh r2, [r1, #0x14]
ldrh r2, [r1, #0x14]
bic r2, r2, #0xc000
strh r2, [r1, #0x14]
ldrh r2, [r1, #0x16]
and r2, r2, r0, asr #7
strh r2, [r1, #0x16]
ldrh r2, [r1, #0x16]
bic r2, r2, #0x3e00
strh r2, [r1, #0x16]
ldrh r2, [r1, #0x16]
bic r2, r2, #0xc000
strh r2, [r1, #0x16]
ldrh r2, [r1, #0x16]
orr r2, r2, #0x4000
strh r2, [r1, #0x16]
ldrh r2, [r1, #0x18]
and r0, r2, r0, asr #6
strh r0, [r1, #0x18]
ldrh r0, [r1, #0x18]
bic r0, r0, #0xc00
strh r0, [r1, #0x18]
ldrh r0, [r1, #0x18]
bic r0, r0, #0xf000
strh r0, [r1, #0x18]
ldrh r0, [r1, #0x1a]
bic r0, r0, #1
strh r0, [r1, #0x1a]
ldrh r0, [r1, #0x1a]
bic r0, r0, #2
strh r0, [r1, #0x1a]
ldrh r0, [r1, #0x1a]
bic r0, r0, #4
strh r0, [r1, #0x1a]
_022E9DA0:
mov r0, #0x48
mul r5, lr, r0
ldr r3, _022E9F0C ; =ov29_0237C888
mov r8, #0x400
ldr r2, _022E9F10 ; =ov29_02351628
mov r1, #0x18
mla r6, lr, r1, r2
ldr r0, _022E9F14 ; =ov29_02351658
add r4, r3, r5
add r5, r0, r5
mov ip, #0
rsb r8, r8, #0
mov r7, #0xc
_022E9DD4:
mul r3, ip, r7
ldrh r2, [r4, r3]
add r1, r5, r3
ldr r0, [r5, r3]
bic r2, r2, #0x100
strh r2, [r4, r3]
ldrh r2, [r4, r3]
ldr sl, [r1, #4]
ldr sb, [r1, #8]
bic r1, r2, #0x200
strh r1, [r4, r3]
ldrh r1, [r4, r3]
mov r0, r0, lsl #0x1e
add r2, r4, r3
bic r1, r1, #0xc00
strh r1, [r4, r3]
ldrh r1, [r4, r3]
mov sl, sl, lsl #0x1e
and sb, sb, r8, lsr #22
bic r1, r1, #0x1000
strh r1, [r4, r3]
ldrh r1, [r4, r3]
bic r1, r1, #0x2000
strh r1, [r4, r3]
ldrh r1, [r4, r3]
orr r1, r1, #0x2000
strh r1, [r4, r3]
ldrh r1, [r4, r3]
bic r1, r1, #0xc000
strh r1, [r4, r3]
ldrh r1, [r4, r3]
orr r0, r1, r0, lsr #16
strh r0, [r4, r3]
ldrh r0, [r2, #2]
bic r0, r0, #0x3e00
strh r0, [r2, #2]
ldrh r0, [r2, #2]
bic r0, r0, #0xc000
strh r0, [r2, #2]
ldrh r0, [r2, #2]
orr r0, r0, sl, lsr #16
strh r0, [r2, #2]
ldrh r0, [r2, #4]
and r0, r0, r8
strh r0, [r2, #4]
ldrh r0, [r2, #4]
orr r0, r0, sb
strh r0, [r2, #4]
ldrh r0, [r2, #4]
bic r0, r0, #0xc00
strh r0, [r2, #4]
ldrh r0, [r2, #4]
orr r0, r0, #0xc00
strh r0, [r2, #4]
ldrh r3, [r2, #4]
mov r1, ip, lsl #2
add r0, r6, ip, lsl #2
bic r3, r3, #0xf000
strh r3, [r2, #4]
ldrh r3, [r2, #6]
add ip, ip, #1
ldrh r1, [r6, r1]
bic r3, r3, #1
strh r3, [r2, #6]
ldrh r3, [r2, #6]
ldrh r0, [r0, #2]
cmp ip, #6
bic r3, r3, #2
strh r3, [r2, #6]
strh r1, [r2, #8]
strh r0, [r2, #0xa]
blt _022E9DD4
add lr, lr, #1
cmp lr, #2
blt _022E9DA0
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_022E9F04: .word DUNGEON_FRAMES_PASSED
_022E9F08: .word 0xFFFF000F
_022E9F0C: .word ov29_0237C888
_022E9F10: .word ov29_02351628
_022E9F14: .word ov29_02351658
arm_func_end ov29_022E9CB8
arm_func_start ov29_022E9F18
ov29_022E9F18: ; 0x022E9F18
stmdb sp!, {r3, lr}
ldr r0, _022E9F70 ; =0x000003E7
ldr r1, _022E9F74 ; =DUNGEON_FRAMES_PASSED
mov r2, #0
str r0, [r1, #4]
ldr r0, _022E9F78 ; =ov29_02353560
str r2, [r1, #0x10]
strb r2, [r0, #2]
strh r2, [r1, #0x1c]
bl ov29_022E9CB8
ldr r2, _022E9F7C ; =DUNGEON_PTR
mov r3, #1
ldr r0, [r2]
ldr r1, _022E9F74 ; =DUNGEON_FRAMES_PASSED
add r0, r0, #0x1a000
#ifdef JAPAN
strb r3, [r0, #0x1a8]
#else
strb r3, [r0, #0x24c]
#endif
ldr r0, [r2]
mov r2, #0
add r0, r0, #0x1a000
#ifdef JAPAN
strb r3, [r0, #0x1a9]
#else
strb r3, [r0, #0x24d]
#endif
str r2, [r1, #0xc]
ldmia sp!, {r3, pc}
.align 2, 0
_022E9F70: .word 0x000003E7
_022E9F74: .word DUNGEON_FRAMES_PASSED
_022E9F78: .word ov29_02353560
_022E9F7C: .word DUNGEON_PTR
arm_func_end ov29_022E9F18
arm_func_start ov29_022E9F80
ov29_022E9F80: ; 0x022E9F80
ldr r2, _022E9F98 ; =ov29_02353560
mov r3, #0
strb r0, [r2]
str r1, [r2, #8]
str r3, [r2, #0xc]
bx lr
.align 2, 0
_022E9F98: .word ov29_02353560
arm_func_end ov29_022E9F80
arm_func_start ov29_022E9F9C
ov29_022E9F9C: ; 0x022E9F9C
ldr r0, _022E9FBC ; =ov29_02353560
ldrb r1, [r0, #1]
cmp r1, #0
ldrneb r2, [r0, #5]
movne r1, #0
strneb r2, [r0, #6]
strneb r1, [r0, #1]
bx lr
.align 2, 0
_022E9FBC: .word ov29_02353560
arm_func_end ov29_022E9F9C

753
asm/overlay_29_022E9FE0.s Normal file
View File

@@ -0,0 +1,753 @@
.include "asm/macros.inc"
.include "overlay_29_022E9FE0.inc"
.text
arm_func_start AdvanceFrame
AdvanceFrame: ; 0x022E9FE0
stmdb sp!, {r3, lr}
ldr r1, _022EA004 ; =ov29_02353560
ldrb r1, [r1, #3]
cmp r1, #0
beq _022E9FFC
bl ov29_022EA2A4
ldmia sp!, {r3, pc}
_022E9FFC:
bl ov29_022EA324
ldmia sp!, {r3, pc}
.align 2, 0
_022EA004: .word ov29_02353560
arm_func_end AdvanceFrame
arm_func_start ov29_022EA008
ov29_022EA008: ; 0x022EA008
#ifdef JAPAN
#define OV29_022EA008_OFFSET -0xA4
#else
#define OV29_022EA008_OFFSET 0
#endif
stmdb sp!, {r3, lr}
ldr r0, _022EA290 ; =DUNGEON_PTR
ldr r0, [r0]
cmp r0, #0
ldmeqia sp!, {r3, pc}
ldr r0, _022EA294 ; =ov29_02353560
ldrb r0, [r0, #3]
cmp r0, #0
beq _022EA27C
bl ov29_0234B854
bl HandleTopScreenFades
ldr r0, _022EA290 ; =DUNGEON_PTR
ldr r0, [r0]
cmp r0, #0
beq _022EA0F8
mov r0, #1
bl UpdateCamera
ldr r1, _022EA290 ; =DUNGEON_PTR
ldr r0, _022EA298 ; =0x0001A224
ldr ip, [r1]
add r1, r0, #2
add r2, ip, #0x1a000
ldrsh r3, [ip, r1]
ldr r1, [r2, #0x230 + OV29_022EA008_OFFSET]
ldrsh r0, [ip, r0]
sub r1, r3, r1
mov r1, r1, lsl #0x10
mov r1, r1, asr #0x10
mov r2, #1
mov r3, #0
bl sub_02051E20
ldr r1, _022EA290 ; =DUNGEON_PTR
ldr r0, [r1]
add ip, r0, #0x1a000
ldrb r0, [ip, #0x251 + OV29_022EA008_OFFSET]
cmp r0, #0
beq _022EA0DC
mov r0, #2
strb r0, [ip, #0x23c + OV29_022EA008_OFFSET]
ldr r0, _022EA298 ; =0x0001A224
ldr ip, [r1]
add r1, r0, #2
add r2, ip, #0x1a000
ldrsh r3, [ip, r1]
ldr r1, [r2, #0x230 + OV29_022EA008_OFFSET]
mov r2, #0
sub r1, r3, r1
mov r1, r1, lsl #0x10
ldrsh r0, [ip, r0]
mov r3, r2
mov r1, r1, asr #0x10
bl sub_02051E20
b _022EA0F8
_022EA0DC:
mov r0, #0
mov lr, #3
mov r1, r0
mov r2, r0
mov r3, r0
strb lr, [ip, #0x23c + OV29_022EA008_OFFSET]
bl sub_02051E20
_022EA0F8:
bl ov29_0230473C
bl DisplayMonstersAndItems
bl ov29_022E335C
ldr r0, _022EA290 ; =DUNGEON_PTR
ldr r1, [r0]
ldrsh r0, [r1, #0x1c]
cmp r0, #0x64
addlt r0, r0, #1
strlth r0, [r1, #0x1c]
ldr r0, _022EA29C ; =DUNGEON_FRAMES_PASSED
ldr r0, [r0, #4]
cmp r0, #0
cmpne r0, #3
cmpne r0, #0xc
bne _022EA140
mov r0, #0
bl FlashLeaderIcon
b _022EA154
_022EA140:
bl GetTopScreenOption
cmp r0, #3
bne _022EA154
mov r0, #1
bl FlashLeaderIcon
_022EA154:
bl AnimateWaterShadows
bl ov29_022EA80C
bl DisplayUi
ldr r1, _022EA294 ; =ov29_02353560
ldrb r0, [r1]
cmp r0, #0
beq _022EA1D0
ldr r0, _022EA290 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x1a000
ldrb r2, [r0, #0x24a + OV29_022EA008_OFFSET]
cmp r2, #0
beq _022EA1B8
bl ov29_022DE11C
cmp r0, #0
beq _022EA1D0
ldr r0, _022EA290 ; =DUNGEON_PTR
mov r2, #0
ldr r0, [r0]
ldr r1, _022EA294 ; =ov29_02353560
add r0, r0, #0x1a000
strb r2, [r0, #0x24a + OV29_022EA008_OFFSET]
ldr r0, [r1, #8]
str r0, [r1, #0xc]
b _022EA1D0
_022EA1B8:
ldr r2, [r1, #0xc]
sub r2, r2, #1
str r2, [r1, #0xc]
cmp r2, #0
movle r1, #1
strleb r1, [r0, #0x24a + OV29_022EA008_OFFSET]
_022EA1D0:
ldr r0, _022EA290 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x1a000
ldrb r0, [r0, #0x24a + OV29_022EA008_OFFSET]
cmp r0, #0
beq _022EA214
bl GetAlertBoxLoadingStatus
cmp r0, #3
beq _022EA214
ldr r1, _022EA290 ; =DUNGEON_PTR
ldr r0, _022EA294 ; =ov29_02353560
ldr r1, [r1]
ldrb r3, [r0, #2]
add r2, r1, #0x1e0
mov r0, #0xa0
mov r1, #0x20
bl ov29_022DE134
_022EA214:
ldr r1, _022EA290 ; =DUNGEON_PTR
ldr r0, _022EA2A0 ; =0x0001A21C
ldr r2, [r1]
add r1, r0, #2
ldrsh r0, [r2, r0]
ldrsh r1, [r2, r1]
bl GetTile
cmp r0, #0
beq _022EA260
ldr r2, _022EA290 ; =DUNGEON_PTR
ldrb r1, [r0, #7]
ldr r2, [r2]
cmp r2, #0
addne r0, r2, #0xc4 + OV29_022EA008_OFFSET
addne r0, r0, #0x4000
add r2, r2, #0x21c + OV29_022EA008_OFFSET
moveq r0, #0
add r2, r2, #0x1a000
bl ov29_022ED800
_022EA260:
bl RenderWeather3D
bl ov29_022E8C10
ldr r0, _022EA290 ; =DUNGEON_PTR
ldr r0, [r0]
#ifdef JAPAN
add r0, r0, #0x2180
add r0, r0, #0x18000
#else
add r0, r0, #0x224
add r0, r0, #0x1a000
#endif
bl ov29_022DD8B4
_022EA27C:
ldr r0, _022EA29C ; =DUNGEON_FRAMES_PASSED
ldr r1, [r0]
add r1, r1, #1
str r1, [r0]
ldmia sp!, {r3, pc}
.align 2, 0
_022EA290: .word DUNGEON_PTR
_022EA294: .word ov29_02353560
_022EA298: .word 0x0001A224 + OV29_022EA008_OFFSET
_022EA29C: .word DUNGEON_FRAMES_PASSED
_022EA2A0: .word 0x0001A21C + OV29_022EA008_OFFSET
arm_func_end ov29_022EA008
arm_func_start ov29_022EA2A4
ov29_022EA2A4: ; 0x022EA2A4
stmdb sp!, {r3, lr}
ldr r0, _022EA318 ; =DUNGEON_PTR
ldr r0, [r0]
cmp r0, #0
bne _022EA2C0
bl ov29_022DDEF8
ldmia sp!, {r3, pc}
_022EA2C0:
ldr r0, _022EA31C ; =ov29_02353560
ldrb r0, [r0, #6]
cmp r0, #0
ldrne r0, _022EA320 ; =DUNGEON_FRAMES_PASSED
ldrne r1, [r0, #0x10]
addne r1, r1, #1
strne r1, [r0, #0x10]
bl ov29_022DDEF8
ldr r0, _022EA318 ; =DUNGEON_PTR
mov r1, #0
ldr r0, [r0]
add r0, r0, #0x1a000
#ifdef JAPAN
strb r1, [r0, #0x1a4]
#else
strb r1, [r0, #0x248]
#endif
bl InitWeirdMinimapMatrix
ldr r0, _022EA31C ; =ov29_02353560
ldrb r0, [r0, #6]
cmp r0, #0
ldrne r0, _022EA320 ; =DUNGEON_FRAMES_PASSED
ldrne r1, [r0, #0x10]
subne r1, r1, #1
strne r1, [r0, #0x10]
ldmia sp!, {r3, pc}
.align 2, 0
_022EA318: .word DUNGEON_PTR
_022EA31C: .word ov29_02353560
_022EA320: .word DUNGEON_FRAMES_PASSED
arm_func_end ov29_022EA2A4
arm_func_start ov29_022EA324
ov29_022EA324: ; 0x022EA324
stmdb sp!, {r3, lr}
ldr r0, _022EA368 ; =ov29_02353560
ldrb r0, [r0, #6]
cmp r0, #0
ldrne r0, _022EA36C ; =DUNGEON_FRAMES_PASSED
ldrne r1, [r0, #0x10]
addne r1, r1, #1
strne r1, [r0, #0x10]
bl ov29_022DDEF8
ldr r0, _022EA368 ; =ov29_02353560
ldrb r0, [r0, #6]
cmp r0, #0
ldrne r0, _022EA36C ; =DUNGEON_FRAMES_PASSED
ldrne r1, [r0, #0x10]
subne r1, r1, #1
strne r1, [r0, #0x10]
ldmia sp!, {r3, pc}
.align 2, 0
_022EA368: .word ov29_02353560
_022EA36C: .word DUNGEON_FRAMES_PASSED
arm_func_end ov29_022EA324
arm_func_start ov29_022EA370
ov29_022EA370: ; 0x022EA370
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
ldr r4, _022EA3B0 ; =ov29_02353560
b _022EA3A4
_022EA384:
ldrb r0, [r4, #3]
cmp r0, #0
mov r0, r5
beq _022EA39C
bl ov29_022EA2A4
b _022EA3A0
_022EA39C:
bl ov29_022EA324
_022EA3A0:
sub r6, r6, #1
_022EA3A4:
cmp r6, #0
bne _022EA384
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_022EA3B0: .word ov29_02353560
arm_func_end ov29_022EA370
arm_func_start ov29_022EA3B4
ov29_022EA3B4: ; 0x022EA3B4
stmdb sp!, {r4, r5, r6, lr}
ldr r4, _022EA3F0 ; =DUNGEON_BUTTON_INPUT
ldr r5, _022EA3F4 ; =ov29_02353560
mov r6, r0
_022EA3C4:
ldrb r0, [r5, #3]
cmp r0, #0
mov r0, r6
beq _022EA3DC
bl ov29_022EA2A4
b _022EA3E0
_022EA3DC:
bl ov29_022EA324
_022EA3E0:
ldrh r0, [r4]
tst r0, #0xf0
bne _022EA3C4
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_022EA3F0: .word DUNGEON_BUTTON_INPUT
_022EA3F4: .word ov29_02353560
arm_func_end ov29_022EA3B4
arm_func_start ov29_022EA3F8
ov29_022EA3F8: ; 0x022EA3F8
ldr ip, _022EA404 ; =ov29_022DE638
mov r0, #0x100
bx ip
.align 2, 0
_022EA404: .word ov29_022DE638
arm_func_end ov29_022EA3F8
arm_func_start ov29_022EA408
ov29_022EA408: ; 0x022EA408
ldr r0, _022EA414 ; =DUNGEON_FRAMES_PASSED
ldr r0, [r0, #4]
bx lr
.align 2, 0
_022EA414: .word DUNGEON_FRAMES_PASSED
arm_func_end ov29_022EA408
arm_func_start ov29_022EA418
ov29_022EA418: ; 0x022EA418
ldr r1, _022EA424 ; =ov29_02353560
strb r0, [r1, #4]
bx lr
.align 2, 0
_022EA424: .word ov29_02353560
arm_func_end ov29_022EA418
arm_func_start UnkMapRelatedFunc
UnkMapRelatedFunc: ; 0x022EA428
stmdb sp!, {r4, lr}
ldr r1, _022EA620 ; =DUNGEON_FRAMES_PASSED
mov r4, r0
ldr r0, [r1, #4]
cmp r4, r0
ldmeqia sp!, {r4, pc}
cmp r4, #0xd
bgt _022EA48C
cmp r4, #0
addge pc, pc, r4, lsl #2
b _022EA614
_022EA454: ; jump table
b _022EA4B4 ; case 0
b _022EA498 ; case 1
b _022EA540 ; case 2
b _022EA4E0 ; case 3
b _022EA540 ; case 4
b _022EA570 ; case 5
b _022EA508 ; case 6
b _022EA524 ; case 7
b _022EA5C4 ; case 8
b _022EA5E0 ; case 9
b _022EA614 ; case 10
b _022EA5FC ; case 11
b _022EA614 ; case 12
b _022EA594 ; case 13
_022EA48C:
ldr r0, _022EA624 ; =0x000003E7
cmp r4, r0
b _022EA614
_022EA498:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r0, [r0, #3]
cmp r0, #0
beq _022EA614
mov r0, #0
bl ov29_0234B1A4
b _022EA614
_022EA4B4:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r1, [r0, #3]
cmp r1, #0
beq _022EA614
ldrb r0, [r0, #4]
cmp r0, #0
bne _022EA614
bl UpdateMinimap
mov r0, #0
bl ov29_02339FF4
b _022EA614
_022EA4E0:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r1, [r0, #3]
cmp r1, #0
beq _022EA614
ldrb r0, [r0, #4]
cmp r0, #0
bne _022EA614
mov r0, #1
bl ov29_02339FF4
b _022EA614
_022EA508:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r0, [r0, #3]
cmp r0, #0
beq _022EA614
mov r0, #0
bl ov29_0234B1A4
b _022EA614
_022EA524:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r0, [r0, #3]
cmp r0, #0
beq _022EA614
mov r0, #0
bl ov29_0234B1A4
b _022EA614
_022EA540:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r0, [r0, #3]
cmp r0, #0
beq _022EA614
mov r0, #0
bl ov29_0234B1A4
bl GetBottomScreenOption
cmp r0, #0
beq _022EA614
mov r0, #0
bl ov29_0233A248
b _022EA614
_022EA570:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r0, [r0, #3]
cmp r0, #0
beq _022EA614
mov r0, #0
bl ov29_0234B1A4
mov r0, #0
bl ov29_0233A248
b _022EA614
_022EA594:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r1, [r0, #3]
cmp r1, #0
beq _022EA5BC
ldrb r0, [r0, #4]
cmp r0, #0
bne _022EA5BC
bl UpdateMinimap
mov r0, #1
bl ov29_02339FF4
_022EA5BC:
mov r4, #0
b _022EA614
_022EA5C4:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r0, [r0, #3]
cmp r0, #0
beq _022EA614
mov r0, #0
bl ov29_0234B1A4
b _022EA614
_022EA5E0:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r0, [r0, #3]
cmp r0, #0
beq _022EA614
mov r0, #0
bl ov29_0234B1A4
b _022EA614
_022EA5FC:
ldr r0, _022EA628 ; =ov29_02353560
ldrb r0, [r0, #3]
cmp r0, #0
beq _022EA614
mov r0, #0
bl ov29_0234B1A4
_022EA614:
ldr r0, _022EA620 ; =DUNGEON_FRAMES_PASSED
str r4, [r0, #4]
ldmia sp!, {r4, pc}
.align 2, 0
_022EA620: .word DUNGEON_FRAMES_PASSED
_022EA624: .word 0x000003E7
_022EA628: .word ov29_02353560
arm_func_end UnkMapRelatedFunc
arm_func_start ov29_022EA62C
ov29_022EA62C: ; 0x022EA62C
ldr r1, _022EA644 ; =DUNGEON_FRAMES_PASSED
mov r2, #0xa
ldr ip, _022EA648 ; =ov29_0234B1A4
mov r0, #0
str r2, [r1, #4]
bx ip
.align 2, 0
_022EA644: .word DUNGEON_FRAMES_PASSED
_022EA648: .word ov29_0234B1A4
arm_func_end ov29_022EA62C
arm_func_start AnimateWaterShadows
AnimateWaterShadows: ; 0x022EA64C
stmdb sp!, {r4, lr}
sub sp, sp, #8
ldr r0, _022EA708 ; =DUNGEON_FRAMES_PASSED
mov r2, #0
ldr r1, [r0, #8]
adds r1, r1, #1
str r1, [r0, #8]
movmi r1, #0
strmi r1, [r0, #8]
ldr r0, _022EA708 ; =DUNGEON_FRAMES_PASSED
ldr r1, [r0, #8]
cmp r1, #0xc
movge r1, #0
strge r1, [r0, #8]
ldr r0, _022EA708 ; =DUNGEON_FRAMES_PASSED
mov r1, #0xb
ldr r3, [r0, #8]
mov r0, r3, asr #1
add r0, r3, r0, lsr #30
mov r0, r0, asr #2
add ip, r0, r0, lsl #1
str r2, [sp]
str r1, [sp, #4]
ldr r0, _022EA70C ; =ov29_02353540
ldr r1, _022EA710 ; =OBJ_GRAPHICS_CONTROLS_PTR
ldr r2, [r0]
ldr r0, [r1]
add r1, r2, ip, lsl #8
mov r2, #0x1e8
mov r3, #0x100
mov r4, ip, lsl #8
bl ChangeSimpleObjTexture
mov r0, #0
str r0, [sp]
mov r1, #0xb
str r1, [sp, #4]
ldr r0, _022EA70C ; =ov29_02353540
ldr r1, _022EA710 ; =OBJ_GRAPHICS_CONTROLS_PTR
ldr ip, [r0]
add r3, r4, #0x100
ldr r0, [r1]
add r1, ip, r3
ldr r2, _022EA714 ; =0x000001EA
mov r3, #0x200
bl ChangeSimpleObjTexture
add sp, sp, #8
ldmia sp!, {r4, pc}
.align 2, 0
_022EA708: .word DUNGEON_FRAMES_PASSED
_022EA70C: .word ov29_02353540
_022EA710: .word OBJ_GRAPHICS_CONTROLS_PTR
_022EA714: .word 0x000001EA
arm_func_end AnimateWaterShadows
arm_func_start DisplayAnimatedNumbers
DisplayAnimatedNumbers: ; 0x022EA718
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
movs sl, r0
mov sb, r1
mov r8, r2
mov r7, r3
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
ldr r0, _022EA7FC ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x1a000
#ifdef JAPAN
ldrb r0, [r0, #0x19a]
#else
ldrb r0, [r0, #0x23e]
#endif
cmp r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
mov r6, #0
mov fp, #0x29
ldr r5, _022EA800 ; =DUNGEON_FRAMES_PASSED
ldr r4, _022EA804 ; =ov29_02353560
b _022EA78C
_022EA75C:
ldrsh r0, [r5, #0x1c]
cmp r0, #0
beq _022EA794
ldrb r0, [r4, #3]
cmp r0, #0
beq _022EA780
mov r0, fp
bl ov29_022EA2A4
b _022EA788
_022EA780:
mov r0, #0x29
bl ov29_022EA324
_022EA788:
add r6, r6, #1
_022EA78C:
cmp r6, #0x14
blt _022EA75C
_022EA794:
ldr r1, _022EA800 ; =DUNGEON_FRAMES_PASSED
mov r0, #0x3c
str sl, [r1, #0x20]
strb r8, [r1, #0x24]
strh r0, [r1, #0x1c]
str sb, [r1, #0x28]
ldrh r2, [sb, #0x26]
mov r0, #0
cmp r7, #0
str r2, [r1, #0x2c]
str r0, [r1, #0x30]
str r0, [r1, #0x34]
bge _022EA7F4
ldr r0, _022EA808 ; =0xFFFFFC19
cmp sl, r0
movlt r0, #6
strlth r0, [r1, #0x1e]
ldmltia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
cmp sl, #0
movge r0, #0xa
strgeh r0, [r1, #0x1e]
movlt r0, #3
strlth r0, [r1, #0x1e]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_022EA7F4:
strh r7, [r1, #0x1e]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_022EA7FC: .word DUNGEON_PTR
_022EA800: .word DUNGEON_FRAMES_PASSED
_022EA804: .word ov29_02353560
_022EA808: .word 0xFFFFFC19
arm_func_end DisplayAnimatedNumbers
arm_func_start ov29_022EA80C
ov29_022EA80C: ; 0x022EA80C
stmdb sp!, {r4, r5, lr}
sub sp, sp, #0xc
ldr r0, _022EA95C ; =DUNGEON_FRAMES_PASSED
ldrsh r1, [r0, #0x1c]
cmp r1, #0
beq _022EA954
ldr r0, [r0, #0x28]
cmp r0, #0
moveq r0, #0
beq _022EA848
ldr r0, [r0]
cmp r0, #0
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
_022EA848:
cmp r0, #0
ldreq r0, _022EA95C ; =DUNGEON_FRAMES_PASSED
moveq r1, #0
streqh r1, [r0, #0x1c]
beq _022EA954
ldr r3, _022EA95C ; =DUNGEON_FRAMES_PASSED
ldr r5, [r3, #0x28]
ldr r1, [r3, #0x2c]
ldrh r0, [r5, #0x26]
cmp r1, r0
movne r0, #0
strneh r0, [r3, #0x1c]
bne _022EA954
ldrsh r2, [r3, #0x1c]
ldr r1, _022EA960 ; =DUNGEON_PTR
ldr r0, _022EA964 ; =0x0001A224
sub r2, r2, #1
strh r2, [r3, #0x1c]
ldr r4, [r3, #0x34]
add r2, r0, #2
sub lr, r4, #0x2e
str lr, [r3, #0x34]
ldr r4, [r5, #0xb4]
ldr ip, [r1]
add r1, r4, #0x100
#ifdef JAPAN
ldrsh r5, [r1, #0x7e]
ldrsh r4, [r1, #0x80]
#else
ldrsh r5, [r1, #0x82]
ldrsh r4, [r1, #0x84]
#endif
ldr r1, [r3, #0x30]
ldrsh r0, [ip, r0]
add r5, r5, r1, asr #8
ldrsh r1, [ip, r2]
add r4, r4, lr, asr #8
sub r2, r4, #0x18
sub r4, r5, r0
mvn r0, #0x1f
cmp r4, r0
sub r5, r2, r1
addge r0, r0, #0x18
cmpge r5, r0
blt _022EA954
cmp r4, #0xff
cmplt r5, #0xc0
bge _022EA954
ldrsh r1, [r3, #0x1c]
mov r0, #0xff
cmp r1, #0x1f
bge _022EA910
rsb r0, r1, r1, lsl #8
mov r1, #0x1f
bl _s32_div_f
_022EA910:
ldr ip, _022EA95C ; =DUNGEON_FRAMES_PASSED
mov r1, r4, lsl #0x10
ldrh r4, [ip, #0x1e]
mov r2, r5, lsl #0x10
mov r3, r0, lsl #0x10
str r4, [sp]
ldr r4, [ip, #0x20]
mov r0, r1, asr #0x10
mov r1, r4, lsl #0x10
mov r1, r1, asr #0x10
str r1, [sp, #4]
ldrb r4, [ip, #0x24]
mov r1, r2, asr #0x10
mov r3, r3, asr #0x10
mov r2, #0xff
str r4, [sp, #8]
bl ov29_02335F40
_022EA954:
add sp, sp, #0xc
ldmia sp!, {r4, r5, pc}
.align 2, 0
_022EA95C: .word DUNGEON_FRAMES_PASSED
_022EA960: .word DUNGEON_PTR
#ifdef JAPAN
_022EA964: .word 0x0001A180
#else
_022EA964: .word 0x0001A224
#endif
arm_func_end ov29_022EA80C

28
asm/overlay_29_022EA980.s Normal file
View File

@@ -0,0 +1,28 @@
.include "asm/macros.inc"
.include "overlay_29_022EA980.inc"
.text
arm_func_start GenerateDungeonRngSeed
GenerateDungeonRngSeed: ; 0x022EA980
ldr r2, _022EA9C4 ; =DUNGEON_PRNG_STATE
mov r1, #0x10000
ldr r3, [r2, #8]
ldr r0, _022EA9C8 ; =0x5D588B65
rsb r1, r1, #0
mul ip, r3, r0
add ip, ip, #1
mul r0, ip, r0
add r3, r0, #1
mov r0, ip, lsr #0x10
mov r0, r0, lsl #0x10
and r1, r3, r1
orr r0, r1, r0, lsr #16
bic r0, r0, #0xff000000
str r3, [r2, #8]
orr r0, r0, #1
bx lr
.align 2, 0
_022EA9C4: .word DUNGEON_PRNG_STATE
_022EA9C8: .word 0x5D588B65
arm_func_end GenerateDungeonRngSeed

View File

@@ -1986,660 +1986,3 @@ _02343960: .word 0x00000229
_02343964: .word FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
_02343968: .word 0x0002C9E6 + PLACE_FIXED_ROOM_TILE_OFFSET
arm_func_end PlaceFixedRoomTile
arm_func_start FixedRoomActionParamToDirection
FixedRoomActionParamToDirection: ; 0x0234396C
cmp r0, #0
moveq r0, #0xff
subne r0, r0, #1
andne r0, r0, #0xff
bx lr
arm_func_end FixedRoomActionParamToDirection
arm_func_start ov29_02343980
ov29_02343980: ; 0x02343980
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, #0
mov r4, r7
mov r5, r7
_02343990:
mov r6, r5
_02343994:
mov r0, r6
mov r1, r7
bl GetTileSafe
ldrb r1, [r0, #6]
cmp r1, #0x10
blo _023439BC
mov r2, r6
mov r3, r7
str r4, [sp]
bl PlaceFixedRoomTile
_023439BC:
add r6, r6, #1
cmp r6, #0x38
blt _02343994
add r7, r7, #1
cmp r7, #0x20
blt _02343990
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ov29_02343980
arm_func_start TryOpenKeyDoor
TryOpenKeyDoor: ; 0x023439D8
#ifdef JAPAN
#define OV29_023439D8_OFFSET -0xA4
#else
#define OV29_023439D8_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x10
ldr r4, _02343CD0 ; =DUNGEON_PTR
mov sb, r1
ldr r4, [r4]
mov sl, r0
add r1, r4, #0x4000
ldrb r1, [r1, #0xc5 + OV29_023439D8_OFFSET]
str r2, [sp, #4]
cmp r1, #0
bne _02343CC0
bl IsFullFloorFixedRoom
ldrsh r1, [sl, #4]
cmp r0, #0
str r0, [sp, #8]
strh r1, [sp, #0xc]
ldrsh r0, [sl, #6]
sub r0, r0, #1
strh r0, [sp, #0xe]
ldrb fp, [sl, #0x25]
bne _02343C24
ldrsh r0, [sl, #6]
sub r8, r0, #0x15
b _02343B68
_02343A38:
ldrsh r0, [sl, #4]
sub r4, r0, #0x14
b _02343B54
_02343A44:
ldr r0, _02343CD0 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0xc000
ldr r1, [r0, #0xd24 + OV29_023439D8_OFFSET]
ldr r2, [r0, #0xd28 + OV29_023439D8_OFFSET]
subs r5, r4, r1
sub r6, r8, r2
bmi _02343B50
cmp r6, #0
blt _02343B50
cmp r5, #8
cmplt r6, #8
bge _02343B50
add r1, r1, #1
cmp r4, r1
addge r1, r2, #1
cmpge r8, r1
blt _02343B50
ldr r1, [r0, #0xd2c + OV29_023439D8_OFFSET]
sub r1, r1, #1
cmp r4, r1
ldrlt r0, [r0, #0xd30 + OV29_023439D8_OFFSET]
sublt r0, r0, #1
cmplt r8, r0
bge _02343B50
mov r0, r4
mov r1, r8
bl GetTileSafe
mov r7, r0
ldrh r0, [r7]
tst r0, #0x100
beq _02343B0C
mov r0, #0xa0
mul r1, r5, r0
mov r0, #0x14
ldr r2, _02343CD0 ; =DUNGEON_PTR
mul r0, r6, r0
ldr r2, [r2]
add r2, r2, r1
add r2, r0, r2
#ifdef JAPAN
add r2, r2, #0xcc00
ldrh r2, [r2, #0xbc]
#else
add r2, r2, #0xcd00
ldrh r2, [r2, #0x60]
#endif
strh r2, [r7]
ldr r2, _02343CD0 ; =DUNGEON_PTR
ldr r2, [r2]
add r1, r2, r1
add r0, r0, r1
#ifdef JAPAN
add r0, r0, #0xcc00
ldrh r0, [r0, #0xbe]
#else
add r0, r0, #0xcd00
ldrh r0, [r0, #0x62]
#endif
strh r0, [r7, #2]
_02343B0C:
mov r0, #1
str r0, [sp]
ldr r1, _02343CD0 ; =DUNGEON_PTR
mov r0, r7
ldr r1, [r1]
mov r2, r4
add r1, r1, r5, lsl #4
add r1, r1, r6, lsl #1
#ifdef JAPAN
add r1, r1, #0xd100
ldrh r1, [r1, #0xbc]
#else
add r1, r1, #0xd200
ldrh r1, [r1, #0x60]
#endif
mov r3, r8
bl PlaceFixedRoomTile
ldrh r0, [r7, #2]
cmp fp, #0xff
orr r0, r0, #3
strh r0, [r7, #2]
strneb fp, [r7, #7]
_02343B50:
add r4, r4, #1
_02343B54:
ldrsh r0, [sl, #4]
add r0, r0, #0x14
cmp r4, r0
ble _02343A44
add r8, r8, #1
_02343B68:
ldrsh r1, [sl, #6]
add r0, r1, #0x13
cmp r8, r0
ble _02343A38
sub r4, r1, #0x15
b _02343C14
_02343B80:
ldrsh r0, [sl, #4]
ldr r6, _02343CD0 ; =DUNGEON_PTR
sub r5, r0, #0x14
b _02343C00
_02343B90:
ldr r0, [r6]
add r0, r0, #0xc000
ldr r7, [r0, #0xd24 + OV29_023439D8_OFFSET]
ldr r2, [r0, #0xd28 + OV29_023439D8_OFFSET]
subs r3, r5, r7
sub r1, r4, r2
bmi _02343BFC
cmp r1, #0
blt _02343BFC
cmp r3, #8
cmplt r1, #8
bge _02343BFC
add r1, r7, #1
cmp r5, r1
addge r1, r2, #1
cmpge r4, r1
blt _02343BFC
ldr r1, [r0, #0xd2c + OV29_023439D8_OFFSET]
sub r1, r1, #1
cmp r5, r1
ldrlt r0, [r0, #0xd30 + OV29_023439D8_OFFSET]
sublt r0, r0, #1
cmplt r4, r0
bge _02343BFC
mov r0, r5
mov r1, r4
bl ov29_02336694
_02343BFC:
add r5, r5, #1
_02343C00:
ldrsh r0, [sl, #4]
add r0, r0, #0x14
cmp r5, r0
ble _02343B90
add r4, r4, #1
_02343C14:
ldrsh r0, [sl, #6]
add r0, r0, #0x13
cmp r4, r0
ble _02343B80
_02343C24:
ldr r0, _02343CD0 ; =DUNGEON_PTR
mov r2, #1
ldr r0, [r0]
ldr r1, _02343CD4 ; =0xFFFFCFEF
add r0, r0, #0x4000
strb r2, [r0, #0xc5 + OV29_023439D8_OFFSET]
ldr r0, [sp, #8]
ldrh r2, [sb]
cmp r0, #0
and r0, r2, r1
strh r0, [sb]
beq _02343C6C
ldrh r0, [sb]
bic r0, r0, #3
strh r0, [sb]
ldrh r0, [sb]
orr r0, r0, #1
strh r0, [sb]
_02343C6C:
ldrsh r1, [sl, #6]
ldrsh r0, [sl, #4]
sub r1, r1, #1
bl ov29_02336694
bl DetermineAllTilesWalkableNeighbors
bl UpdateTrapsVisibility
mov r0, #0xc
bl IsCurrentMissionType
cmp r0, #0
moveq r1, #1
movne r1, #0
add r0, sp, #0xc
and r1, r1, #0xff
bl PlayKeyDoorUnlockEffect
ldr r1, [sp, #4]
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
mov r0, #0x14
mov r1, #0x3c
bl ov29_022EA370
b _02343CC8
_02343CC0:
mov r1, r3
bl LogMessageByIdWithPopupCheckUser
_02343CC8:
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02343CD0: .word DUNGEON_PTR
_02343CD4: .word 0xFFFFCFEF
arm_func_end TryOpenKeyDoor
arm_func_start ApplyKeyEffect
ApplyKeyEffect: ; 0x02343CD8
stmdb sp!, {r4, lr}
mov r4, r0
ldrsh r1, [r4, #6]
ldrsh r0, [r4, #4]
sub r1, r1, #1
bl GetTileSafe
mov r1, r0
ldrh r0, [r1]
tst r0, #0x1000
bne _02343D10
ldr r1, _02343D28 ; =0x00000B94
mov r0, r4
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r4, pc}
_02343D10:
ldr r2, _02343D2C ; =0x00000B93
mov r0, r4
add r3, r2, #1
bl TryOpenKeyDoor
bl UpdateMinimap
ldmia sp!, {r4, pc}
.align 2, 0
#ifdef JAPAN
_02343D28: .word 0x000008A6
_02343D2C: .word 0x000008A5
#else
_02343D28: .word 0x00000B94
_02343D2C: .word 0x00000B93
#endif
arm_func_end ApplyKeyEffect
arm_func_start ov29_02343D30
ov29_02343D30: ; 0x02343D30
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldrsh r1, [r5, #6]
ldrsh r0, [r5, #4]
sub r1, r1, #1
bl GetTileSafe
mov r4, r0
ldrh r0, [r4]
tst r0, #0x2000
bne _02343D68
ldr r1, _02343D88 ; =0x00000B95
mov r0, r5
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, pc}
_02343D68:
bl ov29_02348BE8
ldr r2, _02343D8C ; =0x00000B93
mov r0, r5
mov r1, r4
add r3, r2, #2
bl TryOpenKeyDoor
bl UpdateMinimap
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
#ifdef JAPAN
_02343D88: .word 0x000008A7
_02343D8C: .word 0x000008A5
#else
_02343D88: .word 0x00000B95
_02343D8C: .word 0x00000B93
#endif
arm_func_end ov29_02343D30
arm_func_start LoadFixedRoomData
LoadFixedRoomData: ; 0x02343D90
stmdb sp!, {r3, lr}
ldr r0, _02343DBC ; =FIXED_ROOM_DATA_PTR
ldr r1, _02343DC0 ; =ov29_02353110
ldr r0, [r0]
mov r2, #0
bl LoadFileFromRom
ldr r0, _02343DBC ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
ldr r1, [r0], #8
bl HandleSir0Translation
ldmia sp!, {r3, pc}
.align 2, 0
_02343DBC: .word FIXED_ROOM_DATA_PTR
_02343DC0: .word ov29_02353110
arm_func_end LoadFixedRoomData
arm_func_start ov29_02343DC4
ov29_02343DC4: ; 0x02343DC4
ldr r0, _02343DD4 ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
ldr r0, [r0, #8]
bx lr
.align 2, 0
_02343DD4: .word FIXED_ROOM_DATA_PTR
arm_func_end ov29_02343DC4
arm_func_start ov29_02343DD8
ov29_02343DD8: ; 0x02343DD8
stmdb sp!, {r3, lr}
ldr r0, _02343E1C ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl PointsToZero
cmp r0, #0
ldmneia sp!, {r3, pc}
ldr r0, _02343E1C ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl UnloadFile
ldr r0, _02343E1C ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl ZInit8
ldr r0, _02343E1C ; =FIXED_ROOM_DATA_PTR
mov r1, #0
ldr r0, [r0]
str r1, [r0, #8]
ldmia sp!, {r3, pc}
.align 2, 0
_02343E1C: .word FIXED_ROOM_DATA_PTR
arm_func_end ov29_02343DD8
arm_func_start LoadFixedRoom
LoadFixedRoom: ; 0x02343E20
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x14
movs r4, r2
mov sl, r0
str r1, [sp]
str r3, [sp, #4]
moveq r0, #0
beq _0234402C
bl LoadFixedRoomData
ldr r0, _02344034 ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
ldr r0, [r0, #8]
ldr r0, [r0, r4, lsl #2]
ldrh r4, [r0]
ldrh r5, [r0, #2]
bl ov29_02342BEC
mul fp, r4, r5
mov sb, #0
str r0, [sp, #8]
mov r4, r0
mov r5, sb
b _02344014
_02343E78:
ldrh r2, [r4]
ldr r1, _02344038 ; =0x00000FFF
ldr r0, [sp]
and r2, r2, r1
cmp sb, r0
bge _0234401C
cmp r2, #0x10
blt _0234400C
sub r0, r1, #0xe00
cmp r2, r0
bgt _0234400C
ldr r1, _0234403C ; =FIXED_ROOM_ENTITY_SPAWN_TABLE
sub r2, r2, #0x10
mov r0, #0xc
smlabb r0, r2, r0, r1
ldr r6, [r0, #4]
ldrsh r0, [r6]
cmp r0, #0
ldrne r1, _02344040 ; =0x00000229
cmpne r0, r1
ldrne r1, _02344044 ; =0x00000483
cmpne r0, r1
beq _0234400C
bl GetMatchingMonsterId
movs r8, r0
beq _0234400C
mov r7, #0
b _02343EFC
_02343EE8:
add r0, sl, r7, lsl #3
bl GetMonsterIdFromSpawnEntry
cmp r8, r0
beq _02343F04
add r7, r7, #1
_02343EFC:
cmp r7, sb
blt _02343EE8
_02343F04:
cmp r7, sb
bne _0234400C
ldrb r0, [r6, #3]
cmp r0, #1
bne _02343F40
ldr r0, _02344048 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x348
add r0, r0, #0x400
bl GetOutlawLevel
mov r1, r0
add r0, sp, #0xc
mov r2, r8
bl SetMonsterLevelAndId
b _02343FE8
_02343F40:
cmp r0, #4
bne _02343F70
ldr r0, _02344048 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x348
add r0, r0, #0x400
bl GetOutlawLeaderLevel
mov r1, r0
add r0, sp, #0xc
mov r2, r8
bl SetMonsterLevelAndId
b _02343FE8
_02343F70:
cmp r0, #5
bne _02343FA0
ldr r0, _02344048 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x348
add r0, r0, #0x400
bl GetOutlawMinionLevel
mov r1, r0
add r0, sp, #0xc
mov r2, r8
bl SetMonsterLevelAndId
b _02343FE8
_02343FA0:
ldrb r3, [r6, #2]
cmp r3, #0
ldrnesh r1, [r6]
ldrne r0, _0234404C ; =0x00000485
cmpne r1, r0
bne _02343FCC
ldr r1, [sp, #4]
add r0, sp, #0xc
mov r2, r8
bl SetMonsterLevelAndId
b _02343FE8
_02343FCC:
mov r0, #0xc
mul r2, r3, r0
ldr r1, _02344050 ; =FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
add r0, sp, #0xc
ldrsh r1, [r1, r2]
mov r2, r8
bl SetMonsterLevelAndId
_02343FE8:
mov r0, sb, lsl #3
add r3, sp, #0xc
add sb, sb, #1
add r2, sl, r0
mov r1, #4
_02343FFC:
ldrh r0, [r3], #2
subs r1, r1, #1
strh r0, [r2], #2
bne _02343FFC
_0234400C:
add r5, r5, #1
add r4, r4, #2
_02344014:
cmp r5, fp
blt _02343E78
_0234401C:
ldr r0, [sp, #8]
bl MemFree
bl ov29_02343DD8
mov r0, sb
_0234402C:
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02344034: .word FIXED_ROOM_DATA_PTR
_02344038: .word 0x00000FFF
_0234403C: .word FIXED_ROOM_ENTITY_SPAWN_TABLE
_02344040: .word 0x00000229
_02344044: .word 0x00000483
_02344048: .word DUNGEON_PTR
_0234404C: .word 0x00000485
_02344050: .word FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
arm_func_end LoadFixedRoom
arm_func_start OpenFixedBin
OpenFixedBin: ; 0x02344054
stmdb sp!, {r3, lr}
mov r0, #0xc
mov r1, #0
bl MemAlloc
ldr r2, _02344084 ; =FIXED_ROOM_DATA_PTR
mov r1, #0xc
str r0, [r2]
bl MemZero
ldr r0, _02344084 ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl ZInit8
ldmia sp!, {r3, pc}
.align 2, 0
_02344084: .word FIXED_ROOM_DATA_PTR
arm_func_end OpenFixedBin
arm_func_start CloseFixedBin
CloseFixedBin: ; 0x02344088
stmdb sp!, {r3, lr}
ldr r0, _023440A8 ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl MemFree
ldr r0, _023440A8 ; =FIXED_ROOM_DATA_PTR
mov r1, #0
str r1, [r0]
ldmia sp!, {r3, pc}
.align 2, 0
_023440A8: .word FIXED_ROOM_DATA_PTR
arm_func_end CloseFixedBin
arm_func_start AreOrbsAllowed
AreOrbsAllowed: ; 0x023440AC
cmp r0, #0
beq _023440BC
cmp r0, #0xa5
blo _023440C4
_023440BC:
mov r0, #1
bx lr
_023440C4:
mov r1, #0xc
mul r1, r0, r1
ldr r0, _023440D8 ; =ov10_022C6C77
ldrb r0, [r0, r1]
bx lr
.align 2, 0
_023440D8: .word ov10_022C6C77
arm_func_end AreOrbsAllowed
arm_func_start AreTileJumpsAllowed
AreTileJumpsAllowed: ; 0x023440DC
cmp r0, #0
beq _023440EC
cmp r0, #0xa5
blo _023440F4
_023440EC:
mov r0, #1
bx lr
_023440F4:
mov r1, #0xc
mul r1, r0, r1
ldr r0, _02344108 ; =ov10_022C6C78
ldrb r0, [r0, r1]
bx lr
.align 2, 0
_02344108: .word ov10_022C6C78
arm_func_end AreTileJumpsAllowed
arm_func_start AreTrawlOrbsAllowed
AreTrawlOrbsAllowed: ; 0x0234410C
cmp r0, #0
beq _0234411C
cmp r0, #0xa5
blo _02344124
_0234411C:
mov r0, #1
bx lr
_02344124:
mov r1, #0xc
mul r1, r0, r1
ldr r0, _02344138 ; =ov10_022C6C79
ldrb r0, [r0, r1]
bx lr
.align 2, 0
_02344138: .word ov10_022C6C79
arm_func_end AreTrawlOrbsAllowed
arm_func_start AreOrbsAllowedVeneer
AreOrbsAllowedVeneer: ; 0x0234413C
ldr ip, _02344144 ; =AreOrbsAllowed
bx ip
.align 2, 0
_02344144: .word AreOrbsAllowed
arm_func_end AreOrbsAllowedVeneer
arm_func_start AreLateGameTrapsEnabled
AreLateGameTrapsEnabled: ; 0x02344148
mov r1, #0xc
mul r1, r0, r1
ldr r0, _0234415C ; =ov10_022C6C75
ldrb r0, [r0, r1]
bx lr
.align 2, 0
_0234415C: .word ov10_022C6C75
arm_func_end AreLateGameTrapsEnabled

652
asm/overlay_29_02343980.s Normal file
View File

@@ -0,0 +1,652 @@
.include "asm/macros.inc"
.include "overlay_29_02343980.inc"
.text
arm_func_start ov29_02343980
ov29_02343980: ; 0x02343980
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, #0
mov r4, r7
mov r5, r7
_02343990:
mov r6, r5
_02343994:
mov r0, r6
mov r1, r7
bl GetTileSafe
ldrb r1, [r0, #6]
cmp r1, #0x10
blo _023439BC
mov r2, r6
mov r3, r7
str r4, [sp]
bl PlaceFixedRoomTile
_023439BC:
add r6, r6, #1
cmp r6, #0x38
blt _02343994
add r7, r7, #1
cmp r7, #0x20
blt _02343990
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ov29_02343980
arm_func_start TryOpenKeyDoor
TryOpenKeyDoor: ; 0x023439D8
#ifdef JAPAN
#define OV29_023439D8_OFFSET -0xA4
#else
#define OV29_023439D8_OFFSET 0
#endif
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x10
ldr r4, _02343CD0 ; =DUNGEON_PTR
mov sb, r1
ldr r4, [r4]
mov sl, r0
add r1, r4, #0x4000
ldrb r1, [r1, #0xc5 + OV29_023439D8_OFFSET]
str r2, [sp, #4]
cmp r1, #0
bne _02343CC0
bl IsFullFloorFixedRoom
ldrsh r1, [sl, #4]
cmp r0, #0
str r0, [sp, #8]
strh r1, [sp, #0xc]
ldrsh r0, [sl, #6]
sub r0, r0, #1
strh r0, [sp, #0xe]
ldrb fp, [sl, #0x25]
bne _02343C24
ldrsh r0, [sl, #6]
sub r8, r0, #0x15
b _02343B68
_02343A38:
ldrsh r0, [sl, #4]
sub r4, r0, #0x14
b _02343B54
_02343A44:
ldr r0, _02343CD0 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0xc000
ldr r1, [r0, #0xd24 + OV29_023439D8_OFFSET]
ldr r2, [r0, #0xd28 + OV29_023439D8_OFFSET]
subs r5, r4, r1
sub r6, r8, r2
bmi _02343B50
cmp r6, #0
blt _02343B50
cmp r5, #8
cmplt r6, #8
bge _02343B50
add r1, r1, #1
cmp r4, r1
addge r1, r2, #1
cmpge r8, r1
blt _02343B50
ldr r1, [r0, #0xd2c + OV29_023439D8_OFFSET]
sub r1, r1, #1
cmp r4, r1
ldrlt r0, [r0, #0xd30 + OV29_023439D8_OFFSET]
sublt r0, r0, #1
cmplt r8, r0
bge _02343B50
mov r0, r4
mov r1, r8
bl GetTileSafe
mov r7, r0
ldrh r0, [r7]
tst r0, #0x100
beq _02343B0C
mov r0, #0xa0
mul r1, r5, r0
mov r0, #0x14
ldr r2, _02343CD0 ; =DUNGEON_PTR
mul r0, r6, r0
ldr r2, [r2]
add r2, r2, r1
add r2, r0, r2
#ifdef JAPAN
add r2, r2, #0xcc00
ldrh r2, [r2, #0xbc]
#else
add r2, r2, #0xcd00
ldrh r2, [r2, #0x60]
#endif
strh r2, [r7]
ldr r2, _02343CD0 ; =DUNGEON_PTR
ldr r2, [r2]
add r1, r2, r1
add r0, r0, r1
#ifdef JAPAN
add r0, r0, #0xcc00
ldrh r0, [r0, #0xbe]
#else
add r0, r0, #0xcd00
ldrh r0, [r0, #0x62]
#endif
strh r0, [r7, #2]
_02343B0C:
mov r0, #1
str r0, [sp]
ldr r1, _02343CD0 ; =DUNGEON_PTR
mov r0, r7
ldr r1, [r1]
mov r2, r4
add r1, r1, r5, lsl #4
add r1, r1, r6, lsl #1
#ifdef JAPAN
add r1, r1, #0xd100
ldrh r1, [r1, #0xbc]
#else
add r1, r1, #0xd200
ldrh r1, [r1, #0x60]
#endif
mov r3, r8
bl PlaceFixedRoomTile
ldrh r0, [r7, #2]
cmp fp, #0xff
orr r0, r0, #3
strh r0, [r7, #2]
strneb fp, [r7, #7]
_02343B50:
add r4, r4, #1
_02343B54:
ldrsh r0, [sl, #4]
add r0, r0, #0x14
cmp r4, r0
ble _02343A44
add r8, r8, #1
_02343B68:
ldrsh r1, [sl, #6]
add r0, r1, #0x13
cmp r8, r0
ble _02343A38
sub r4, r1, #0x15
b _02343C14
_02343B80:
ldrsh r0, [sl, #4]
ldr r6, _02343CD0 ; =DUNGEON_PTR
sub r5, r0, #0x14
b _02343C00
_02343B90:
ldr r0, [r6]
add r0, r0, #0xc000
ldr r7, [r0, #0xd24 + OV29_023439D8_OFFSET]
ldr r2, [r0, #0xd28 + OV29_023439D8_OFFSET]
subs r3, r5, r7
sub r1, r4, r2
bmi _02343BFC
cmp r1, #0
blt _02343BFC
cmp r3, #8
cmplt r1, #8
bge _02343BFC
add r1, r7, #1
cmp r5, r1
addge r1, r2, #1
cmpge r4, r1
blt _02343BFC
ldr r1, [r0, #0xd2c + OV29_023439D8_OFFSET]
sub r1, r1, #1
cmp r5, r1
ldrlt r0, [r0, #0xd30 + OV29_023439D8_OFFSET]
sublt r0, r0, #1
cmplt r4, r0
bge _02343BFC
mov r0, r5
mov r1, r4
bl ov29_02336694
_02343BFC:
add r5, r5, #1
_02343C00:
ldrsh r0, [sl, #4]
add r0, r0, #0x14
cmp r5, r0
ble _02343B90
add r4, r4, #1
_02343C14:
ldrsh r0, [sl, #6]
add r0, r0, #0x13
cmp r4, r0
ble _02343B80
_02343C24:
ldr r0, _02343CD0 ; =DUNGEON_PTR
mov r2, #1
ldr r0, [r0]
ldr r1, _02343CD4 ; =0xFFFFCFEF
add r0, r0, #0x4000
strb r2, [r0, #0xc5 + OV29_023439D8_OFFSET]
ldr r0, [sp, #8]
ldrh r2, [sb]
cmp r0, #0
and r0, r2, r1
strh r0, [sb]
beq _02343C6C
ldrh r0, [sb]
bic r0, r0, #3
strh r0, [sb]
ldrh r0, [sb]
orr r0, r0, #1
strh r0, [sb]
_02343C6C:
ldrsh r1, [sl, #6]
ldrsh r0, [sl, #4]
sub r1, r1, #1
bl ov29_02336694
bl DetermineAllTilesWalkableNeighbors
bl UpdateTrapsVisibility
mov r0, #0xc
bl IsCurrentMissionType
cmp r0, #0
moveq r1, #1
movne r1, #0
add r0, sp, #0xc
and r1, r1, #0xff
bl PlayKeyDoorUnlockEffect
ldr r1, [sp, #4]
mov r0, sl
bl LogMessageByIdWithPopupCheckUser
mov r0, #0x14
mov r1, #0x3c
bl ov29_022EA370
b _02343CC8
_02343CC0:
mov r1, r3
bl LogMessageByIdWithPopupCheckUser
_02343CC8:
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02343CD0: .word DUNGEON_PTR
_02343CD4: .word 0xFFFFCFEF
arm_func_end TryOpenKeyDoor
arm_func_start ApplyKeyEffect
ApplyKeyEffect: ; 0x02343CD8
stmdb sp!, {r4, lr}
mov r4, r0
ldrsh r1, [r4, #6]
ldrsh r0, [r4, #4]
sub r1, r1, #1
bl GetTileSafe
mov r1, r0
ldrh r0, [r1]
tst r0, #0x1000
bne _02343D10
ldr r1, _02343D28 ; =0x00000B94
mov r0, r4
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r4, pc}
_02343D10:
ldr r2, _02343D2C ; =0x00000B93
mov r0, r4
add r3, r2, #1
bl TryOpenKeyDoor
bl UpdateMinimap
ldmia sp!, {r4, pc}
.align 2, 0
#ifdef JAPAN
_02343D28: .word 0x000008A6
_02343D2C: .word 0x000008A5
#else
_02343D28: .word 0x00000B94
_02343D2C: .word 0x00000B93
#endif
arm_func_end ApplyKeyEffect
arm_func_start ov29_02343D30
ov29_02343D30: ; 0x02343D30
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldrsh r1, [r5, #6]
ldrsh r0, [r5, #4]
sub r1, r1, #1
bl GetTileSafe
mov r4, r0
ldrh r0, [r4]
tst r0, #0x2000
bne _02343D68
ldr r1, _02343D88 ; =0x00000B95
mov r0, r5
bl LogMessageByIdWithPopupCheckUser
ldmia sp!, {r3, r4, r5, pc}
_02343D68:
bl ov29_02348BE8
ldr r2, _02343D8C ; =0x00000B93
mov r0, r5
mov r1, r4
add r3, r2, #2
bl TryOpenKeyDoor
bl UpdateMinimap
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
#ifdef JAPAN
_02343D88: .word 0x000008A7
_02343D8C: .word 0x000008A5
#else
_02343D88: .word 0x00000B95
_02343D8C: .word 0x00000B93
#endif
arm_func_end ov29_02343D30
arm_func_start LoadFixedRoomData
LoadFixedRoomData: ; 0x02343D90
stmdb sp!, {r3, lr}
ldr r0, _02343DBC ; =FIXED_ROOM_DATA_PTR
ldr r1, _02343DC0 ; =ov29_02353110
ldr r0, [r0]
mov r2, #0
bl LoadFileFromRom
ldr r0, _02343DBC ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
ldr r1, [r0], #8
bl HandleSir0Translation
ldmia sp!, {r3, pc}
.align 2, 0
_02343DBC: .word FIXED_ROOM_DATA_PTR
_02343DC0: .word ov29_02353110
arm_func_end LoadFixedRoomData
arm_func_start ov29_02343DC4
ov29_02343DC4: ; 0x02343DC4
ldr r0, _02343DD4 ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
ldr r0, [r0, #8]
bx lr
.align 2, 0
_02343DD4: .word FIXED_ROOM_DATA_PTR
arm_func_end ov29_02343DC4
arm_func_start ov29_02343DD8
ov29_02343DD8: ; 0x02343DD8
stmdb sp!, {r3, lr}
ldr r0, _02343E1C ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl PointsToZero
cmp r0, #0
ldmneia sp!, {r3, pc}
ldr r0, _02343E1C ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl UnloadFile
ldr r0, _02343E1C ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl ZInit8
ldr r0, _02343E1C ; =FIXED_ROOM_DATA_PTR
mov r1, #0
ldr r0, [r0]
str r1, [r0, #8]
ldmia sp!, {r3, pc}
.align 2, 0
_02343E1C: .word FIXED_ROOM_DATA_PTR
arm_func_end ov29_02343DD8
arm_func_start LoadFixedRoom
LoadFixedRoom: ; 0x02343E20
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x14
movs r4, r2
mov sl, r0
str r1, [sp]
str r3, [sp, #4]
moveq r0, #0
beq _0234402C
bl LoadFixedRoomData
ldr r0, _02344034 ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
ldr r0, [r0, #8]
ldr r0, [r0, r4, lsl #2]
ldrh r4, [r0]
ldrh r5, [r0, #2]
bl ov29_02342BEC
mul fp, r4, r5
mov sb, #0
str r0, [sp, #8]
mov r4, r0
mov r5, sb
b _02344014
_02343E78:
ldrh r2, [r4]
ldr r1, _02344038 ; =0x00000FFF
ldr r0, [sp]
and r2, r2, r1
cmp sb, r0
bge _0234401C
cmp r2, #0x10
blt _0234400C
sub r0, r1, #0xe00
cmp r2, r0
bgt _0234400C
ldr r1, _0234403C ; =FIXED_ROOM_ENTITY_SPAWN_TABLE
sub r2, r2, #0x10
mov r0, #0xc
smlabb r0, r2, r0, r1
ldr r6, [r0, #4]
ldrsh r0, [r6]
cmp r0, #0
ldrne r1, _02344040 ; =0x00000229
cmpne r0, r1
ldrne r1, _02344044 ; =0x00000483
cmpne r0, r1
beq _0234400C
bl GetMatchingMonsterId
movs r8, r0
beq _0234400C
mov r7, #0
b _02343EFC
_02343EE8:
add r0, sl, r7, lsl #3
bl GetMonsterIdFromSpawnEntry
cmp r8, r0
beq _02343F04
add r7, r7, #1
_02343EFC:
cmp r7, sb
blt _02343EE8
_02343F04:
cmp r7, sb
bne _0234400C
ldrb r0, [r6, #3]
cmp r0, #1
bne _02343F40
ldr r0, _02344048 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x348
add r0, r0, #0x400
bl GetOutlawLevel
mov r1, r0
add r0, sp, #0xc
mov r2, r8
bl SetMonsterLevelAndId
b _02343FE8
_02343F40:
cmp r0, #4
bne _02343F70
ldr r0, _02344048 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x348
add r0, r0, #0x400
bl GetOutlawLeaderLevel
mov r1, r0
add r0, sp, #0xc
mov r2, r8
bl SetMonsterLevelAndId
b _02343FE8
_02343F70:
cmp r0, #5
bne _02343FA0
ldr r0, _02344048 ; =DUNGEON_PTR
ldr r0, [r0]
add r0, r0, #0x348
add r0, r0, #0x400
bl GetOutlawMinionLevel
mov r1, r0
add r0, sp, #0xc
mov r2, r8
bl SetMonsterLevelAndId
b _02343FE8
_02343FA0:
ldrb r3, [r6, #2]
cmp r3, #0
ldrnesh r1, [r6]
ldrne r0, _0234404C ; =0x00000485
cmpne r1, r0
bne _02343FCC
ldr r1, [sp, #4]
add r0, sp, #0xc
mov r2, r8
bl SetMonsterLevelAndId
b _02343FE8
_02343FCC:
mov r0, #0xc
mul r2, r3, r0
ldr r1, _02344050 ; =FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
add r0, sp, #0xc
ldrsh r1, [r1, r2]
mov r2, r8
bl SetMonsterLevelAndId
_02343FE8:
mov r0, sb, lsl #3
add r3, sp, #0xc
add sb, sb, #1
add r2, sl, r0
mov r1, #4
_02343FFC:
ldrh r0, [r3], #2
subs r1, r1, #1
strh r0, [r2], #2
bne _02343FFC
_0234400C:
add r5, r5, #1
add r4, r4, #2
_02344014:
cmp r5, fp
blt _02343E78
_0234401C:
ldr r0, [sp, #8]
bl MemFree
bl ov29_02343DD8
mov r0, sb
_0234402C:
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_02344034: .word FIXED_ROOM_DATA_PTR
_02344038: .word 0x00000FFF
_0234403C: .word FIXED_ROOM_ENTITY_SPAWN_TABLE
_02344040: .word 0x00000229
_02344044: .word 0x00000483
_02344048: .word DUNGEON_PTR
_0234404C: .word 0x00000485
_02344050: .word FIXED_ROOM_MONSTER_SPAWN_STATS_TABLE
arm_func_end LoadFixedRoom
arm_func_start OpenFixedBin
OpenFixedBin: ; 0x02344054
stmdb sp!, {r3, lr}
mov r0, #0xc
mov r1, #0
bl MemAlloc
ldr r2, _02344084 ; =FIXED_ROOM_DATA_PTR
mov r1, #0xc
str r0, [r2]
bl MemZero
ldr r0, _02344084 ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl ZInit8
ldmia sp!, {r3, pc}
.align 2, 0
_02344084: .word FIXED_ROOM_DATA_PTR
arm_func_end OpenFixedBin
arm_func_start CloseFixedBin
CloseFixedBin: ; 0x02344088
stmdb sp!, {r3, lr}
ldr r0, _023440A8 ; =FIXED_ROOM_DATA_PTR
ldr r0, [r0]
bl MemFree
ldr r0, _023440A8 ; =FIXED_ROOM_DATA_PTR
mov r1, #0
str r1, [r0]
ldmia sp!, {r3, pc}
.align 2, 0
_023440A8: .word FIXED_ROOM_DATA_PTR
arm_func_end CloseFixedBin
arm_func_start AreOrbsAllowed
AreOrbsAllowed: ; 0x023440AC
cmp r0, #0
beq _023440BC
cmp r0, #0xa5
blo _023440C4
_023440BC:
mov r0, #1
bx lr
_023440C4:
mov r1, #0xc
mul r1, r0, r1
ldr r0, _023440D8 ; =ov10_022C6C77
ldrb r0, [r0, r1]
bx lr
.align 2, 0
_023440D8: .word ov10_022C6C77
arm_func_end AreOrbsAllowed
arm_func_start AreTileJumpsAllowed
AreTileJumpsAllowed: ; 0x023440DC
cmp r0, #0
beq _023440EC
cmp r0, #0xa5
blo _023440F4
_023440EC:
mov r0, #1
bx lr
_023440F4:
mov r1, #0xc
mul r1, r0, r1
ldr r0, _02344108 ; =ov10_022C6C78
ldrb r0, [r0, r1]
bx lr
.align 2, 0
_02344108: .word ov10_022C6C78
arm_func_end AreTileJumpsAllowed
arm_func_start AreTrawlOrbsAllowed
AreTrawlOrbsAllowed: ; 0x0234410C
cmp r0, #0
beq _0234411C
cmp r0, #0xa5
blo _02344124
_0234411C:
mov r0, #1
bx lr
_02344124:
mov r1, #0xc
mul r1, r0, r1
ldr r0, _02344138 ; =ov10_022C6C79
ldrb r0, [r0, r1]
bx lr
.align 2, 0
_02344138: .word ov10_022C6C79
arm_func_end AreTrawlOrbsAllowed
arm_func_start AreOrbsAllowedVeneer
AreOrbsAllowedVeneer: ; 0x0234413C
ldr ip, _02344144 ; =AreOrbsAllowed
bx ip
.align 2, 0
_02344144: .word AreOrbsAllowed
arm_func_end AreOrbsAllowedVeneer
arm_func_start AreLateGameTrapsEnabled
AreLateGameTrapsEnabled: ; 0x02344148
mov r1, #0xc
mul r1, r0, r1
ldr r0, _0234415C ; =ov10_022C6C75
ldrb r0, [r0, r1]
bx lr
.align 2, 0
_0234415C: .word ov10_022C6C75
arm_func_end AreLateGameTrapsEnabled

View File

@@ -1,11 +1,14 @@
#ifndef PMDSKY_OVERLAY_29_022E95F4_H
#define PMDSKY_OVERLAY_29_022E95F4_H
#include "util.h"
#include "dungeon_mode.h"
// Gets the pointer to the entity that is currently leading the team, or null if none of the first 4 entities is a valid monster with its is_team_leader flag set. It also sets LEADER_PTR to the result before returning it.
struct entity* GetLeader();
// Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity).
bool8 EntityIsValid__022E95F4(struct entity *entity);
struct monster* GetLeaderMonster(void);
#endif //PMDSKY_OVERLAY_29_022E95F4_H

View File

@@ -0,0 +1,10 @@
#ifndef PMDSKY_OVERLAY_29_022E99F0_H
#define PMDSKY_OVERLAY_29_022E99F0_H
#include "util.h"
struct position* FindClosestUnoccupiedTileWithin2(struct position* out, struct position* origin, bool8 a);
struct position* FindFarthestUnoccupiedTileWithin2(struct position* out, struct position* origin, bool8 a);
struct position* FindUnoccupiedTileWithin3(struct position* out, struct position* origin, bool8 a);
#endif

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_022E9FC0_H
#define PMDSKY_OVERLAY_29_022E9FC0_H
#include "util.h"
u8 ov29_022E9FC0(void);
void ov29_022E9FD0(u8 value);
#endif

View File

@@ -0,0 +1,8 @@
#ifndef PMDSKY_OVERLAY_29_022EA968_H
#define PMDSKY_OVERLAY_29_022EA968_H
#include "util.h"
void SetDungeonRngPreseed23Bit(u32 preseed);
#endif

View File

@@ -0,0 +1,9 @@
#ifndef PMDSKY_OVERLAY_29_022EA9CC_H
#define PMDSKY_OVERLAY_29_022EA9CC_H
#include "util.h"
u32 GetDungeonRngPreseed(void);
void SetDungeonRngPreseed(u32 preseed);
#endif

View File

@@ -0,0 +1,8 @@
#ifndef PMDSKY_OVERLAY_29_0234396C_H
#define PMDSKY_OVERLAY_29_0234396C_H
#include "util.h"
u8 FixedRoomActionParamToDirection(u8 action_param);
#endif

View File

@@ -803,7 +803,14 @@ Overlay OVY_29
Object src/dungeon_range_2.o
Object asm/overlay_29_022E9488.o
Object src/dg_uty.o
Object asm/overlay_29_022E9618.o
Object asm/overlay_29_022E9628.o
Object src/overlay_29_022E99F0.o
Object asm/overlay_29_022E9A44.o
Object src/overlay_29_022E9FC0.o
Object asm/overlay_29_022E9FE0.o
Object src/overlay_29_022EA968.o
Object asm/overlay_29_022EA980.o
Object src/overlay_29_022EA9CC.o
Object src/dg_random.o
Object asm/overlay_29_022EAB50.o
Object src/overlay_29_022EAC34.o
@@ -1221,6 +1228,8 @@ Overlay OVY_29
Object asm/overlay_29_02340CE4.o
Object src/dungeon_generation.o
Object asm/overlay_29_02341E6C.o
Object src/overlay_29_0234396C.o
Object asm/overlay_29_02343980.o
Object src/fixed_room_data.o
Object asm/overlay_29_02344178.o
Object src/overlay_29_02344AF8.o

View File

@@ -33,3 +33,8 @@ bool8 EntityIsValid__022E95F4(struct entity *entity)
return GetEntityType(entity) != ENTITY_NOTHING;
}
struct monster* GetLeaderMonster(void)
{
return GetEntInfo(GetLeader());
}

25
src/overlay_29_022E99F0.c Normal file
View File

@@ -0,0 +1,25 @@
#include "overlay_29_022E99F0.h"
#include "dungeon_mode.h"
extern struct position *FindNearbyUnoccupiedTile(struct position *out, struct position *origin, const s32 *displacements, s32 count, bool8 a);
extern const s32 DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST[];
extern const s32 DISPLACEMENTS_WITHIN_2_LARGEST_FIRST[];
extern const s32 DISPLACEMENTS_WITHIN_3[];
struct position* FindClosestUnoccupiedTileWithin2(struct position* out, struct position* origin, bool8 a)
{
return FindNearbyUnoccupiedTile(out, origin, DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST, 0x19, a);
}
struct position* FindFarthestUnoccupiedTileWithin2(struct position* out, struct position* origin, bool8 a)
{
return FindNearbyUnoccupiedTile(out, origin, DISPLACEMENTS_WITHIN_2_LARGEST_FIRST, 0x19, a);
}
struct position* FindUnoccupiedTileWithin3(struct position* out, struct position* origin, bool8 a)
{
return FindNearbyUnoccupiedTile(out, origin, DISPLACEMENTS_WITHIN_3, 0x31, a);
}

21
src/overlay_29_022E9FC0.c Normal file
View File

@@ -0,0 +1,21 @@
#include "overlay_29_022E9FC0.h"
struct unk_02353560 {
u8 field_0x0;
u8 field_0x1;
u8 field_0x2;
u8 field_0x3;
u8 field_0x4;
};
extern struct unk_02353560 ov29_02353560;
u8 ov29_022E9FC0(void)
{
return ov29_02353560.field_0x3;
}
void ov29_022E9FD0(u8 value)
{
ov29_02353560.field_0x3 = value;
}

View File

@@ -0,0 +1,9 @@
#include "overlay_29_022EA968.h"
#include "dg_random.h"
extern prng_state DUNGEON_PRNG_STATE;
void SetDungeonRngPreseed23Bit(u32 preseed)
{
DUNGEON_PRNG_STATE.preseed = (preseed | 1) & 0xFFFFFF;
}

14
src/overlay_29_022EA9CC.c Normal file
View File

@@ -0,0 +1,14 @@
#include "overlay_29_022EA9CC.h"
#include "dg_random.h"
extern prng_state DUNGEON_PRNG_STATE;
u32 GetDungeonRngPreseed(void)
{
return DUNGEON_PRNG_STATE.preseed;
}
void SetDungeonRngPreseed(u32 preseed)
{
DUNGEON_PRNG_STATE.preseed = preseed;
}

View File

@@ -54,7 +54,6 @@ extern s32 ChangeMonsterAnimation();
extern s32 CheckTouchscreenArea();
extern s32 GetEntityTouchscreenArea();
extern s32 GetIdleAnimationId();
extern struct monster *GetLeaderMonster();
extern struct entity *GetMonsterInFront();
extern void GetPressedButtons(u32 param_1, u16 *pressed);
extern s32 GetTeamMemberIndex();

10
src/overlay_29_0234396C.c Normal file
View File

@@ -0,0 +1,10 @@
#include "overlay_29_0234396C.h"
u8 FixedRoomActionParamToDirection(u8 action_param)
{
if (action_param == 0) {
return 0xFF;
}
return action_param - 1;
}