diff --git a/asm/include/overlay_29_022E9628.inc b/asm/include/overlay_29_022E9628.inc new file mode 100644 index 00000000..5d275cc9 --- /dev/null +++ b/asm/include/overlay_29_022E9628.inc @@ -0,0 +1,8 @@ +#pragma once +.public DUNGEON_PTR +.public DungeonRandInt +.public GetLeader +.public GetTile +.public MemAlloc +.public MemFree +.public abs diff --git a/asm/include/overlay_29_022E9A44.inc b/asm/include/overlay_29_022E9A44.inc new file mode 100644 index 00000000..0650588b --- /dev/null +++ b/asm/include/overlay_29_022E9A44.inc @@ -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 diff --git a/asm/include/overlay_29_022E9618.inc b/asm/include/overlay_29_022E9FE0.inc similarity index 63% rename from asm/include/overlay_29_022E9618.inc rename to asm/include/overlay_29_022E9FE0.inc index a0e7e8a9..56fb91ea 100644 --- a/asm/include/overlay_29_022E9618.inc +++ b/asm/include/overlay_29_022E9FE0.inc @@ -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 diff --git a/asm/include/overlay_29_022EA980.inc b/asm/include/overlay_29_022EA980.inc new file mode 100644 index 00000000..ce4e5dd0 --- /dev/null +++ b/asm/include/overlay_29_022EA980.inc @@ -0,0 +1,2 @@ +#pragma once +.public DUNGEON_PRNG_STATE diff --git a/asm/include/overlay_29_02341E6C.inc b/asm/include/overlay_29_02341E6C.inc index 8d40ba9d..7860d6db 100644 --- a/asm/include/overlay_29_02341E6C.inc +++ b/asm/include/overlay_29_02341E6C.inc @@ -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 diff --git a/asm/include/overlay_29_02343980.inc b/asm/include/overlay_29_02343980.inc new file mode 100644 index 00000000..8b865122 --- /dev/null +++ b/asm/include/overlay_29_02343980.inc @@ -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 diff --git a/asm/overlay_29_022E9618.s b/asm/overlay_29_022E9618.s deleted file mode 100644 index a52f8aec..00000000 --- a/asm/overlay_29_022E9618.s +++ /dev/null @@ -1,1564 +0,0 @@ - .include "asm/macros.inc" - .include "overlay_29_022E9618.inc" - - .text - - arm_func_start GetLeaderMonster -GetLeaderMonster: ; 0x022E9618 - stmdb sp!, {r3, lr} - bl GetLeader - ldr r0, [r0, #0xb4] - ldmia sp!, {r3, pc} - arm_func_end GetLeaderMonster - - 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 - - arm_func_start FindClosestUnoccupiedTileWithin2 -FindClosestUnoccupiedTileWithin2: ; 0x022E99F0 - stmdb sp!, {r3, lr} - str r2, [sp] - ldr r2, _022E9A08 ; =DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST - mov r3, #0x19 - bl FindNearbyUnoccupiedTile - ldmia sp!, {r3, pc} - .align 2, 0 -_022E9A08: .word DISPLACEMENTS_WITHIN_2_SMALLEST_FIRST - arm_func_end FindClosestUnoccupiedTileWithin2 - - arm_func_start FindFarthestUnoccupiedTileWithin2 -FindFarthestUnoccupiedTileWithin2: ; 0x022E9A0C - stmdb sp!, {r3, lr} - str r2, [sp] - ldr r2, _022E9A24 ; =DISPLACEMENTS_WITHIN_2_LARGEST_FIRST - mov r3, #0x19 - bl FindNearbyUnoccupiedTile - ldmia sp!, {r3, pc} - .align 2, 0 -_022E9A24: .word DISPLACEMENTS_WITHIN_2_LARGEST_FIRST - arm_func_end FindFarthestUnoccupiedTileWithin2 - - arm_func_start FindUnoccupiedTileWithin3 -FindUnoccupiedTileWithin3: ; 0x022E9A28 - stmdb sp!, {r3, lr} - str r2, [sp] - ldr r2, _022E9A40 ; =DISPLACEMENTS_WITHIN_3 - mov r3, #0x31 - bl FindNearbyUnoccupiedTile - ldmia sp!, {r3, pc} - .align 2, 0 -_022E9A40: .word DISPLACEMENTS_WITHIN_3 - arm_func_end FindUnoccupiedTileWithin3 - - 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 - - arm_func_start ov29_022E9FC0 -ov29_022E9FC0: ; 0x022E9FC0 - ldr r0, _022E9FCC ; =ov29_02353560 - ldrb r0, [r0, #3] - bx lr - .align 2, 0 -_022E9FCC: .word ov29_02353560 - arm_func_end ov29_022E9FC0 - - arm_func_start ov29_022E9FD0 -ov29_022E9FD0: ; 0x022E9FD0 - ldr r1, _022E9FDC ; =ov29_02353560 - strb r0, [r1, #3] - bx lr - .align 2, 0 -_022E9FDC: .word ov29_02353560 - arm_func_end ov29_022E9FD0 - - 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 - - arm_func_start SetDungeonRngPreseed23Bit -SetDungeonRngPreseed23Bit: ; 0x022EA968 - orr r1, r0, #1 - ldr r0, _022EA97C ; =DUNGEON_PRNG_STATE - bic r1, r1, #0xff000000 - str r1, [r0, #8] - bx lr - .align 2, 0 -_022EA97C: .word DUNGEON_PRNG_STATE - arm_func_end SetDungeonRngPreseed23Bit - - 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 - - arm_func_start GetDungeonRngPreseed -GetDungeonRngPreseed: ; 0x022EA9CC - ldr r0, _022EA9D8 ; =DUNGEON_PRNG_STATE - ldr r0, [r0, #8] - bx lr - .align 2, 0 -_022EA9D8: .word DUNGEON_PRNG_STATE - arm_func_end GetDungeonRngPreseed - - arm_func_start SetDungeonRngPreseed -SetDungeonRngPreseed: ; 0x022EA9DC - ldr r1, _022EA9E8 ; =DUNGEON_PRNG_STATE - str r0, [r1, #8] - bx lr - .align 2, 0 -_022EA9E8: .word DUNGEON_PRNG_STATE - arm_func_end SetDungeonRngPreseed diff --git a/asm/overlay_29_022E9628.s b/asm/overlay_29_022E9628.s new file mode 100644 index 00000000..25a19ac5 --- /dev/null +++ b/asm/overlay_29_022E9628.s @@ -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 diff --git a/asm/overlay_29_022E9A44.s b/asm/overlay_29_022E9A44.s new file mode 100644 index 00000000..c8266759 --- /dev/null +++ b/asm/overlay_29_022E9A44.s @@ -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 diff --git a/asm/overlay_29_022E9FE0.s b/asm/overlay_29_022E9FE0.s new file mode 100644 index 00000000..3745e9f3 --- /dev/null +++ b/asm/overlay_29_022E9FE0.s @@ -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 diff --git a/asm/overlay_29_022EA980.s b/asm/overlay_29_022EA980.s new file mode 100644 index 00000000..7edcd3b2 --- /dev/null +++ b/asm/overlay_29_022EA980.s @@ -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 diff --git a/asm/overlay_29_02341E6C.s b/asm/overlay_29_02341E6C.s index d023728c..dc92cea0 100644 --- a/asm/overlay_29_02341E6C.s +++ b/asm/overlay_29_02341E6C.s @@ -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 diff --git a/asm/overlay_29_02343980.s b/asm/overlay_29_02343980.s new file mode 100644 index 00000000..af310feb --- /dev/null +++ b/asm/overlay_29_02343980.s @@ -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 diff --git a/include/dg_uty.h b/include/dg_uty.h index 26586b41..f0b4b295 100644 --- a/include/dg_uty.h +++ b/include/dg_uty.h @@ -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 diff --git a/include/overlay_29_022E99F0.h b/include/overlay_29_022E99F0.h new file mode 100644 index 00000000..2589a19a --- /dev/null +++ b/include/overlay_29_022E99F0.h @@ -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 diff --git a/include/overlay_29_022E9FC0.h b/include/overlay_29_022E9FC0.h new file mode 100644 index 00000000..086ccc14 --- /dev/null +++ b/include/overlay_29_022E9FC0.h @@ -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 diff --git a/include/overlay_29_022EA968.h b/include/overlay_29_022EA968.h new file mode 100644 index 00000000..446a1634 --- /dev/null +++ b/include/overlay_29_022EA968.h @@ -0,0 +1,8 @@ +#ifndef PMDSKY_OVERLAY_29_022EA968_H +#define PMDSKY_OVERLAY_29_022EA968_H + +#include "util.h" + +void SetDungeonRngPreseed23Bit(u32 preseed); + +#endif diff --git a/include/overlay_29_022EA9CC.h b/include/overlay_29_022EA9CC.h new file mode 100644 index 00000000..ba80661e --- /dev/null +++ b/include/overlay_29_022EA9CC.h @@ -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 diff --git a/include/overlay_29_0234396C.h b/include/overlay_29_0234396C.h new file mode 100644 index 00000000..8642411d --- /dev/null +++ b/include/overlay_29_0234396C.h @@ -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 diff --git a/main.lsf b/main.lsf index 272acb0b..63b20e9f 100644 --- a/main.lsf +++ b/main.lsf @@ -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 diff --git a/src/dg_uty.c b/src/dg_uty.c index dd689045..45a480b2 100644 --- a/src/dg_uty.c +++ b/src/dg_uty.c @@ -33,3 +33,8 @@ bool8 EntityIsValid__022E95F4(struct entity *entity) return GetEntityType(entity) != ENTITY_NOTHING; } + +struct monster* GetLeaderMonster(void) +{ + return GetEntInfo(GetLeader()); +} diff --git a/src/overlay_29_022E99F0.c b/src/overlay_29_022E99F0.c new file mode 100644 index 00000000..56fdcd42 --- /dev/null +++ b/src/overlay_29_022E99F0.c @@ -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); +} diff --git a/src/overlay_29_022E9FC0.c b/src/overlay_29_022E9FC0.c new file mode 100644 index 00000000..4538368b --- /dev/null +++ b/src/overlay_29_022E9FC0.c @@ -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; +} diff --git a/src/overlay_29_022EA968.c b/src/overlay_29_022EA968.c new file mode 100644 index 00000000..abaa0210 --- /dev/null +++ b/src/overlay_29_022EA968.c @@ -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; +} diff --git a/src/overlay_29_022EA9CC.c b/src/overlay_29_022EA9CC.c new file mode 100644 index 00000000..c43c2e97 --- /dev/null +++ b/src/overlay_29_022EA9CC.c @@ -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; +} diff --git a/src/overlay_29_022F0EDC.c b/src/overlay_29_022F0EDC.c index 224e7db1..4891a2a2 100644 --- a/src/overlay_29_022F0EDC.c +++ b/src/overlay_29_022F0EDC.c @@ -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(); diff --git a/src/overlay_29_0234396C.c b/src/overlay_29_0234396C.c new file mode 100644 index 00000000..cc8ea353 --- /dev/null +++ b/src/overlay_29_0234396C.c @@ -0,0 +1,10 @@ +#include "overlay_29_0234396C.h" + +u8 FixedRoomActionParamToDirection(u8 action_param) +{ + if (action_param == 0) { + return 0xFF; + } + + return action_param - 1; +}